Merge pull request #360 from pgreyson/master
Map-based topology view and assorted
diff --git a/web/ons-demo/RELEASE_NOTES.txt b/web/ons-demo/RELEASE_NOTES.txt
index 725dd23..bfe6059 100644
--- a/web/ons-demo/RELEASE_NOTES.txt
+++ b/web/ons-demo/RELEASE_NOTES.txt
@@ -1,4 +1,15 @@
** April 8, 2013 **
+- map view
+- onos nodes at top
+- count only active switches in header
+- hook up switchctrl all and local actions
+- various small ui improvements (hover feedback, flow chooser animation e.g.)
+- splash screen and use vector graphics for on.lab logo
+- only show "marching ants" animation when iperf data is flowing
+- NOTE: the map view dynamically sizes with browser resize. so no need to refresh after resizing anymore
+
+
+** April 8, 2013 **
- add explicit timeout logic so that the GUI doesn't have to be refreshed if the API misbehaves
** April 8, 2013 **
diff --git a/web/ons-demo/assets/logo.png b/web/ons-demo/assets/logo.png
deleted file mode 100644
index 57434bd..0000000
--- a/web/ons-demo/assets/logo.png
+++ /dev/null
Binary files differ
diff --git a/web/ons-demo/assets/logo.svg b/web/ons-demo/assets/logo.svg
new file mode 100644
index 0000000..373e072
--- /dev/null
+++ b/web/ons-demo/assets/logo.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg3166"
+ version="1.1"
+ inkscape:version="0.48.0 r9654"
+ width="236.41251"
+ height="60.909126"
+ xml:space="preserve"
+ sodipodi:docname="logo.svg"><metadata
+ id="metadata3172"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs3170"><clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath3182"><path
+ d="M 0,327.273 0,0 l 1731.3,0 0,327.273 -1731.3,0 z"
+ id="path3184"
+ inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1158"
+ inkscape:window-height="739"
+ id="namedview3168"
+ showgrid="false"
+ inkscape:zoom="0.26464646"
+ inkscape:cx="124.21755"
+ inkscape:cy="40.229009"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="g3174"
+ fit-margin-top="10"
+ fit-margin-left="10"
+ fit-margin-right="10"
+ fit-margin-bottom="10" /><g
+ id="g3174"
+ inkscape:groupmode="layer"
+ inkscape:label="ink_ext_XXXXXX"
+ transform="matrix(1.25,0,0,-1.25,-258.28245,515.68011)"><g
+ id="g3176"
+ transform="matrix(0.1,0,0,0.1,214.62596,371.81679)"><g
+ id="g3178"><g
+ id="g3180"
+ clip-path="url(#clipPath3182)"><path
+ d="m 164.363,70.2617 c -58.078,0 -101.8982,42.3673 -101.8982,98.5503 0,34.516 21.5743,99.797 103.1802,99.797 70.007,0 101.507,-57.371 101.507,-98.113 0,-23.973 -10.742,-52.461 -26.117,-69.277 C 223.723,82.4297 193.609,70.2617 164.363,70.2617 z m -0.41,257.0113 C 56.3242,327.273 0,247.559 0,168.812 0,79.4414 69.5664,12.0312 161.848,12.0312 c 96.941,0 167.328,66.4727 167.328,158.0508 0,76.203 -57.903,157.191 -165.223,157.191"
+ style="fill:#325cb3;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3186"
+ inkscape:connector-curvature="0" /><path
+ d="m 656.363,323.477 -9.922,0 0,-206.633 -176.695,203.222 -2.965,3.411 -47.797,0 0,-307.6372 58.684,0 0,204.9182 175.043,-201.5002 2.937,-3.418 49.895,0 0,307.6372 -49.18,0"
+ style="fill:#204476;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3188"
+ inkscape:connector-curvature="0" /><path
+ d="m 925.344,59.7148 0,265.7772 -64.188,0 0,-325.492 201.784,0 0,59.7148 -137.596,0"
+ style="fill:#461f35;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3190"
+ inkscape:connector-curvature="0" /><path
+ d="m 1308.12,149.355 -64.91,0 31.25,75.622 33.66,-75.622 z m -8.81,172.036 -2.6,5.882 -43.93,0 -2.57,-6.027 L 1118.88,13.8164 1112.98,0 l 66.39,0 2.59,6.02344 35.94,84.06246 117.03,0 38.15,-84.25778 2.63,-5.82812 66.49,0 -6.19,13.9453 -136.7,307.4457"
+ style="fill:#971a1f;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3192"
+ inkscape:connector-curvature="0" /><path
+ d="m 1621.32,200.641 c -6.74,-3.907 -19.94,-6.028 -36.62,-6.028 l -19.2,0 0,72.035 19.2,0 c 12.13,0 28.75,0 39.33,-4.902 9.69,-4.523 15.73,-15.676 15.73,-29.09 0,-20.129 -12.91,-29.097 -18.44,-32.015 z m -22.25,-141.8246 -33.57,0 0,76.5236 31.29,0 c 24.33,0 36.89,-1.485 46.36,-5.488 21.41,-8.817 23.07,-27.129 23.07,-32.5395 0,-11.5195 -6.66,-27.5156 -25.45,-34.6445 -9.61,-3.8516 -30.49,-3.8516 -41.7,-3.8516 z m 74.77,115.7146 c 20.6,14.879 31.03,35.555 31.03,61.699 0,38.442 -21.17,68.29 -58.02,81.911 -16.27,6.117 -32.93,7.351 -54.54,7.351 l -90.11,0 0,-325.492 94.59,0 c 33.47,0 48.75,0 68.28,6.84375 31.97,10.91015 66.23,39.37505 66.23,86.43745 0,36.6488 -21.9,66.7068 -57.46,81.2498"
+ style="fill:#c41e25;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3194"
+ inkscape:connector-curvature="0" /><path
+ d="m 780.367,59.7148 c -16.476,0 -29.863,-13.3984 -29.863,-29.8632 C 750.504,13.3984 763.891,0 780.367,0 c 16.485,0 29.863,13.3984 29.863,29.8516 0,16.4648 -13.378,29.8632 -29.863,29.8632"
+ style="fill:#461f35;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ id="path3196"
+ inkscape:connector-curvature="0" /></g></g></g></g></svg>
\ No newline at end of file
diff --git a/web/ons-demo/assets/switch.svg b/web/ons-demo/assets/switch.svg
new file mode 100644
index 0000000..7a69e98
--- /dev/null
+++ b/web/ons-demo/assets/switch.svg
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="60"
+ id="svg6140"
+ inkscape:version="0.48.0 r9654"
+ sodipodi:docname="switch.svg"
+ sodipodi:version="0.32"
+ width="60"
+ version="1.1">
+ <metadata
+ id="metadata4412">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:title>switch</dc:title>
+ <dc:description />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>symbol</rdf:li>
+ <rdf:li>network</rdf:li>
+ <rdf:li>switch</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:publisher>
+ <cc:Agent
+ rdf:about="http://www.openclipart.org/">
+ <dc:title>Open Clip Art Library</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Angelis</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Jakub Angelis</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:date />
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="http://web.resource.org/cc/PublicDomain" />
+ <dc:language>en</dc:language>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://web.resource.org/cc/PublicDomain">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="1.0"
+ id="namedview6144"
+ inkscape:current-layer="layer1"
+ inkscape:cx="-65.089664"
+ inkscape:cy="-73.508205"
+ inkscape:document-units="mm"
+ inkscape:guide-bbox="true"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:window-height="746"
+ inkscape:window-width="1028"
+ inkscape:window-x="-4"
+ inkscape:window-y="0"
+ inkscape:zoom="1"
+ pagecolor="#ffffff"
+ showguides="false"
+ showgrid="false"
+ inkscape:window-maximized="0"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ showborder="false"
+ inkscape:showpageshadow="false" />
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ transform="translate(-350.71012,-251.97973)">
+ <rect
+ height="18.093575"
+ id="rect1944"
+ width="48.643852"
+ x="350.85608"
+ y="293.55972" />
+ <rect
+ height="18.093575"
+ id="rect1946"
+ transform="matrix(0.20031099,-0.97973237,0,1,0,0)"
+ width="38.694553"
+ x="1994.4028"
+ y="2247.5422" />
+ <g
+ id="g9312"
+ transform="matrix(0.1641042,0,0,0.35267689,231.88841,175.74726)">
+ <path
+ d="m 772.21875,226.4375 -47.34375,107.625 296.5,0 47.3438,-107.625 -296.50005,0 z"
+ id="path4749"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g9298">
+ <g
+ id="g9282">
+ <path
+ d="m 772.66454,271.72258 40.19422,-18.1307"
+ id="path7440"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 807.7045,264.2106 92.50521,-0.0884"
+ id="path7442"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g9294">
+ <path
+ d="m 913.2487,258.25739 6.36742,-14.48613 92.16548,-0.0165 4.1023,-9.59965 22.5745,16.94194"
+ id="path7444"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 1003.8684,257.40378 -4.4934,10.25247 4.4915,-2.05647 0,-8.196 z"
+ id="path7446"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g9286">
+ <path
+ d="m 754.65476,312.558 40.38172,-18.16195"
+ id="path9238"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 789.69472,304.95227 92.50521,0.005"
+ id="path9240"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g9290">
+ <path
+ d="m 895.23892,299.09281 6.36742,-14.48613 92.16548,-0.0165 4.1023,-9.59965 22.57448,16.94194"
+ id="path9242"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 985.85862,298.2392 -4.4934,10.25247 4.4915,-1.83772 0.002,-8.41475 z"
+ id="path9244"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <path
+ d="m 772.21875,226.4375 -47.34375,107.625 296.5,0 47.3438,-107.625 -296.50005,0 z m 243.00005,5.1875 24.2187,18.0625 -40.03125,17.90625 4.46875,-10.1875 -92.1875,0 6.75,-15.40625 92.2188,0 4.5625,-10.375 z m -203.06255,20.40625 -4.53125,10.375 92.1875,0 -6.78125,15.40625 -92.1875,0 -4.5,10.1875 -24.28125,-17.90625 40.09375,-18.0625 z m 185.09375,20.4375 24.2188,18.0625 -40.0313,17.90625 4.46875,-10.21875 -92.1875,0 6.78125,-15.40625 92.1875,0 4.5625,-10.34375 z m -203.03125,20.40625 -4.5625,10.34375 92.1875,0 -6.75,15.4375 -92.21875,0 -4.46875,10.1875 -24.3125,-17.90625 40.125,-18.0625 z"
+ id="rect1948"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ d="m 350.85884,293.2658 -0.14872,0.3086 0,18.09675 0.14872,0.30858 48.62613,0 0.14359,-0.30858 0,-18.09675 -0.14359,-0.3086 -48.62613,0 z m 0.14359,0.62824 48.33382,0 0,17.45751 -48.33382,0 0,-17.45751 z m 7.5129,-38.60712 -0.041,0.18736 -7.71291,37.78051 0.26668,0.25349 7.677,-37.59317 48.41074,0.0111 -0.0154,17.76613 -7.74367,37.74742 0.26668,0.2535 7.75906,-37.82461 0.0103,-0.0662 0,-0.0662 0.0103,-18.43839 -48.79537,-0.0111 -0.0923,0 z m 48.61074,0.12122 -7.81033,38.22137 0.26666,0.25347 7.81035,-38.22133 -0.26668,-0.25351 z"
+ id="rect10242"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/web/ons-demo/css/layout.default.css b/web/ons-demo/css/layout.default.css
index 5e1f1ce..297e31b 100644
--- a/web/ons-demo/css/layout.default.css
+++ b/web/ons-demo/css/layout.default.css
@@ -4,10 +4,24 @@
body {
display: -webkit-box;
- -webkit-box-orient: vertical;
-webkit-user-select: none;
}
+#background, #background-image {
+ width: 100%;
+ height: 100%;
+}
+
+#contents {
+ width: 100%;
+ height: 100%;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+}
+
#columns {
display: -webkit-box;
-webkit-box-flex: 1.0;
@@ -22,6 +36,7 @@
#status {
display: -webkit-box;
+ -webkit-box-flex: 1.0;
}
#left, #right {
@@ -34,7 +49,7 @@
-webkit-box-flex: 1.0;
}
-#controllers, #topology {
+#topologyArea {
-webkit-box-flex: 1.0;
position: relative;
}
@@ -87,22 +102,24 @@
width: 100%;
}
-#controllers {
+#onos {
display: -webkit-box;
- -webkit-box-orient: vertical;
}
-
-#controllerList {
+#actions {
display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-flex: 1.0;
+}
+
+#controllers {
+ display: -webkit-box;
overflow: scroll;
+ -webkit-box-flex: 1.0;
}
.controller {
margin: .25em;
background-color: blue;
+ -webkit-box-flex: 1.0;
}
#svg-container {
diff --git a/web/ons-demo/css/skin.2.css b/web/ons-demo/css/skin.2.css
deleted file mode 100644
index e69de29..0000000
--- a/web/ons-demo/css/skin.2.css
+++ /dev/null
diff --git a/web/ons-demo/css/skin.default.css b/web/ons-demo/css/skin.default.css
index 1d656b0..f6086a3 100644
--- a/web/ons-demo/css/skin.default.css
+++ b/web/ons-demo/css/skin.default.css
@@ -6,10 +6,22 @@
margin: 0px;
}
-#topology.linking {
+#contents {
+ visibility: hidden;
+ background-color: black;
+}
+
+#topologyArea.linking {
cursor: crosshair;
}
+
+#map path {
+ fill:none;
+ stroke:#333;
+ stroke-width:2;
+}
+
.nodrop {
cursor: not-allowed;
}
@@ -33,7 +45,7 @@
padding: .25em;
}
-#status.top span {
+#status span {
font-size: 24px;
}
@@ -53,43 +65,34 @@
height: 50px;
}
-#topology {
- border-top: 1px solid #AAA;
-}
-
.selectedFlow {
border-bottom: 1px solid #AAA;
}
.selectedFlow:hover {
- background-color: #333;
+ background-color: #222;
}
.selectedFlow:last-child {
border-bottom: none;
}
+#flowChooser .selectedFlow:hover {
+ background-color: white;
+}
+
#lastUpdated {
padding-bottom: 0px;
}
-#controllers .header {
- -webkit-box-pack: center;
- border-bottom: 1px solid #AAA;
-}
-
-
#right .header {
font-size: 12px;
padding-right: .25em;
-webkit-box-sizing: border-box;
}
-#controllers, #selectedFlows {
- border-top: 1px solid #AAA;
-}
-
#selectedFlows {
+ border-top: 1px solid #AAA;
border-bottom: 1px solid #AAA;
}
@@ -99,6 +102,10 @@
background-color: black;
}
+.header, #onos {
+ border-bottom: 1px solid #AAA;;
+}
+
#flowChooser .selectedFlow {
background-color: rgba(255, 255, 255, .75);
color: black;
@@ -147,8 +154,16 @@
path.iperfdata {
fill: none;
- stroke-width: 2px;
- stroke: rgba(255, 255, 255, .75);
+ stroke-width: 1px;
+ stroke: #ccc;
+}
+
+.iperf {
+ background-color: #222;
+}
+
+#selectedFlowsHeader .iperf {
+ background-color: black;
}
#flowChooser {
@@ -161,7 +176,7 @@
display: -webkit-box;
-webkit-box-pack: center;
-webkit-box-align: center;
- width: 3em;
+ width: 4em;
}
@@ -170,25 +185,40 @@
}
-.srcDPID, .dstDPID, .deleteFlow, #deleteFlow {
+.srcDPID, .dstDPID, .deleteFlow, #showFlowChooser {
border-right: 1px solid #AAA;
}
+#showFlowChooser:hover, .deleteFlow:hover {
+ background-color: #444;
+}
+
+#showFlowChooser:active, .deleteFlow:active {
+ background-color: black;
+}
+
.srcDPID {
border-left: 1px solid #AAA;
}
-
-#controllers {
- border-right: 1px solid #AAA;
-}
-
.controller {
padding: .25em;
padding-left: 2.5em;
position: relative;
+ border: 1px solid #444;
+ color: white;
+ position: relative;
}
+.controller:hover {
+ border: 1px solid white;
+}
+
+.action, .controller {
+ font-size: 18px;
+}
+
+
.black-eye {
position: absolute;
top: 0px;
@@ -207,7 +237,7 @@
background-image: url('../assets/white-eye.svg');
background-size: auto 100%;
background-repeat: no-repeat;
- background-position: .25em center;
+ background-position: .4em center;
}
.deleteFlow {
@@ -238,6 +268,10 @@
pointer-events: none;
}
+text.label {
+ fill: #888;
+}
+
path {
stroke: rgba(255, 255, 255, .25);
stroke-width: 1.5px;
@@ -284,6 +318,7 @@
.color2 {
opacity: .15;
+ pointer-events: none;
fill: #FFBA00;
background-color: #FFBA00;
}
@@ -332,6 +367,7 @@
.color9 {
opacity: .2;
+ pointer-events: none;
fill: #F53D65;
background-color: #F53D65;
}
@@ -357,6 +393,27 @@
background-color: #6949D7;
}
+.action {
+ margin: .25em;
+ padding: .25em;
+ padding-left: 1em;
+ padding-right: 1em;
+ border: 1px solid #AAA;
+ background-color: #444;
+ display: -webkit-box;
+ -webkit-box-pack: center;
+ -webkit-box-align: center;
+ color: white;
+}
+
+.action:hover {
+ border: 1px solid #FFF;
+}
+
+.action:active {
+ background-color: #222;
+}
+
@-webkit-keyframes pending {
from {
@@ -375,3 +432,8 @@
-webkit-animation-iteration-count: 70;
}
+.core path {
+ stroke-width: 1px;
+ stroke: black;
+}
+
diff --git a/web/ons-demo/js/d3.v3.js b/web/ons-demo/d3/d3.v3.js
similarity index 100%
rename from web/ons-demo/js/d3.v3.js
rename to web/ons-demo/d3/d3.v3.js
diff --git a/web/ons-demo/js/d3.v3.min.js b/web/ons-demo/d3/d3.v3.min.js
similarity index 100%
rename from web/ons-demo/js/d3.v3.min.js
rename to web/ons-demo/d3/d3.v3.min.js
diff --git a/web/ons-demo/d3/topojson.v0.min.js b/web/ons-demo/d3/topojson.v0.min.js
new file mode 100644
index 0000000..c6aa3cd
--- /dev/null
+++ b/web/ons-demo/d3/topojson.v0.min.js
@@ -0,0 +1 @@
+topojson=function(){function t(t,e){function n(e){var n=t.arcs[e],r=n[0],o=[0,0];return n.forEach(function(t){o[0]+=t[0],o[1]+=t[1]}),[r,o]}var r={},o={},a={};e.forEach(function(t){var e=n(t);(r[e[0]]||(r[e[0]]=[])).push(t),(r[e[1]]||(r[e[1]]=[])).push(~t)}),e.forEach(function(t){var e,r,i=n(t),c=i[0],s=i[1];if(e=a[c])if(delete a[e.end],e.push(t),e.end=s,r=o[s]){delete o[r.start];var u=r===e?e:e.concat(r);o[u.start=e.start]=a[u.end=r.end]=u}else if(r=a[s]){delete o[r.start],delete a[r.end];var u=e.concat(r.map(function(t){return~t}).reverse());o[u.start=e.start]=a[u.end=r.start]=u}else o[e.start]=a[e.end]=e;else if(e=o[s])if(delete o[e.start],e.unshift(t),e.start=c,r=a[c]){delete a[r.end];var f=r===e?e:r.concat(e);o[f.start=r.start]=a[f.end=e.end]=f}else if(r=o[c]){delete o[r.start],delete a[r.end];var f=r.map(function(t){return~t}).reverse().concat(e);o[f.start=r.end]=a[f.end=e.end]=f}else o[e.start]=a[e.end]=e;else if(e=o[c])if(delete o[e.start],e.unshift(~t),e.start=s,r=a[s]){delete a[r.end];var f=r===e?e:r.concat(e);o[f.start=r.start]=a[f.end=e.end]=f}else if(r=o[s]){delete o[r.start],delete a[r.end];var f=r.map(function(t){return~t}).reverse().concat(e);o[f.start=r.end]=a[f.end=e.end]=f}else o[e.start]=a[e.end]=e;else if(e=a[s])if(delete a[e.end],e.push(~t),e.end=c,r=a[c]){delete o[r.start];var u=r===e?e:e.concat(r);o[u.start=e.start]=a[u.end=r.end]=u}else if(r=o[c]){delete o[r.start],delete a[r.end];var u=e.concat(r.map(function(t){return~t}).reverse());o[u.start=e.start]=a[u.end=r.start]=u}else o[e.start]=a[e.end]=e;else e=[t],o[e.start=c]=a[e.end=s]=e});var i=[];for(var c in a)i.push(a[c]);return i}function e(e,r,o){function a(t){0>t&&(t=~t),(l[t]||(l[t]=[])).push(f)}function i(t){t.forEach(a)}function c(t){t.forEach(i)}function s(t){"GeometryCollection"===t.type?t.geometries.forEach(s):t.type in d&&(f=t,d[t.type](t.arcs))}var u=[];if(arguments.length>1){var f,l=[],d={LineString:i,MultiLineString:c,Polygon:c,MultiPolygon:function(t){t.forEach(c)}};s(r),l.forEach(3>arguments.length?function(t,e){u.push([e])}:function(t,e){o(t[0],t[t.length-1])&&u.push([e])})}else for(var p=0,h=e.arcs.length;h>p;++p)u.push([p]);return n(e,{type:"MultiLineString",arcs:t(e,u)})}function n(t,e){function n(t,e){e.length&&e.pop();for(var n,o=h[0>t?~t:t],a=0,i=o.length,c=0,s=0;i>a;++a)e.push([(c+=(n=o[a])[0])*f+d,(s+=n[1])*l+p]);0>t&&r(e,i)}function o(t){return[t[0]*f+d,t[1]*l+p]}function a(t){for(var e=[],r=0,o=t.length;o>r;++r)n(t[r],e);return 2>e.length&&e.push(e[0]),e}function i(t){for(var e=a(t);4>e.length;)e.push(e[0]);return e}function c(t){return t.map(i)}function s(t){var e=t.type,n="GeometryCollection"===e?{type:e,geometries:t.geometries.map(s)}:e in v?{type:e,coordinates:v[e](t)}:{type:null};return"id"in t&&(n.id=t.id),"properties"in t&&(n.properties=t.properties),n}var u=t.transform,f=u.scale[0],l=u.scale[1],d=u.translate[0],p=u.translate[1],h=t.arcs,v={Point:function(t){return o(t.coordinates)},MultiPoint:function(t){return t.coordinates.map(o)},LineString:function(t){return a(t.arcs)},MultiLineString:function(t){return t.arcs.map(a)},Polygon:function(t){return c(t.arcs)},MultiPolygon:function(t){return t.arcs.map(c)}};return s(e)}function r(t,e){for(var n,r=t.length,o=r-e;--r>o;)n=t[o],t[o++]=t[r],t[r]=n}function o(t,e){for(var n=0,r=t.length;r>n;){var o=n+r>>>1;e>t[o]?n=o+1:r=o}return n}function a(t){function e(t,e){t.forEach(function(t){0>t&&(t=~t);var n=a[t]||(a[t]=[]);n[e]||(n.forEach(function(t){var n,r;r=o(n=i[e],t),n[r]!==t&&n.splice(r,0,t),r=o(n=i[t],e),n[r]!==e&&n.splice(r,0,e)}),n[e]=e)})}function n(t,n){t.forEach(function(t){e(t,n)})}function r(t,e){"GeometryCollection"===t.type?t.geometries.forEach(function(t){r(t,e)}):t.type in c&&c[t.type](t.arcs,e)}var a=[],i=t.map(function(){return[]}),c={LineString:e,MultiLineString:n,Polygon:n,MultiPolygon:function(t,e){t.forEach(function(t){n(t,e)})}};return t.forEach(r),i}return{version:"0.0.32",mesh:e,object:n,neighbors:a}}();
\ No newline at end of file
diff --git a/web/ons-demo/data/configuration.json b/web/ons-demo/data/configuration.json
index b36fced..4d38d5f 100644
--- a/web/ons-demo/data/configuration.json
+++ b/web/ons-demo/data/configuration.json
@@ -37,5 +37,43 @@
"00:00:00:16:97:08:9a:46": [
"00:00:00:00:00:00:08:01"
]
+ },
+ "geo": {
+ "00:00:00:08:a2:08:f9:01": {
+ "lat": 41.891033,
+ "lng": -87.628326,
+ "label": "CHI",
+ "fanOutAngle": 180
+ },
+ "00:00:00:00:ba:5e:ba:11": {
+ "lat": 47.611024,
+ "lng": -122.33242,
+ "label": "SEA",
+ "fanOutAngle": 270
+ },
+ "00:00:20:4e:7f:51:8a:35": {
+ "lat": 33.758599,
+ "lng": -84.387360,
+ "label": "ATL",
+ "fanOutAngle": 0
+ },
+ "00:00:00:00:00:00:ba:12": {
+ "lat": 41.225925,
+ "lng": -74.00528,
+ "label": "NYC",
+ "fanOutAngle": 135
+ },
+ "00:00:00:00:ba:5e:ba:13": {
+ "lat": 37.901187,
+ "lng": -76.037163,
+ "label": "DC",
+ "fanOutAngle": 45
+ },
+ "00:00:00:16:97:08:9a:46": {
+ "lat": 34.102708,
+ "lng": -118.238983,
+ "label": "LA",
+ "fanOutAngle": 315
+ }
}
}
\ No newline at end of file
diff --git a/web/ons-demo/data/world.json b/web/ons-demo/data/world.json
new file mode 100644
index 0000000..874582c
--- /dev/null
+++ b/web/ons-demo/data/world.json
@@ -0,0 +1,39034 @@
+{
+ "type": "Topology",
+ "transform": {
+ "scale": [
+ 0.011121861824577766,
+ 0.005244902253759074
+ ],
+ "translate": [
+ -178.19451843993755,
+ 18.96390918584938
+ ]
+ },
+ "objects": {
+ "world": {
+ "type": "GeometryCollection",
+ "geometries": [
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 0
+ ]
+ ],
+ [
+ [
+ 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
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 62
+ ]
+ ],
+ [
+ [
+ 63,
+ 64,
+ 65,
+ 66,
+ 67
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 74,
+ 75,
+ 76,
+ 77,
+ 78
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 79
+ ]
+ ],
+ [
+ [
+ 80
+ ]
+ ],
+ [
+ [
+ 81
+ ]
+ ],
+ [
+ [
+ 82
+ ]
+ ],
+ [
+ [
+ 83
+ ]
+ ],
+ [
+ [
+ 84
+ ]
+ ],
+ [
+ [
+ 85,
+ -77,
+ 86,
+ 87
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 94,
+ 95,
+ 96,
+ 97
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 98,
+ 99
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 100,
+ 101,
+ 102
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 103
+ ]
+ ],
+ [
+ [
+ 104
+ ]
+ ],
+ [
+ [
+ 105
+ ]
+ ],
+ [
+ [
+ 106
+ ]
+ ],
+ [
+ [
+ 107
+ ]
+ ],
+ [
+ [
+ 108
+ ]
+ ],
+ [
+ [
+ 109
+ ]
+ ],
+ [
+ [
+ 110
+ ]
+ ],
+ [
+ [
+ 111
+ ]
+ ],
+ [
+ [
+ 112
+ ]
+ ],
+ [
+ [
+ 113
+ ]
+ ],
+ [
+ [
+ 114,
+ -68,
+ 115
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 116
+ ]
+ ],
+ [
+ [
+ 117,
+ -116,
+ -67,
+ 118,
+ 119,
+ 120
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 121
+ ]
+ ],
+ [
+ [
+ 122
+ ]
+ ],
+ [
+ [
+ 123
+ ]
+ ],
+ [
+ [
+ 124
+ ]
+ ],
+ [
+ [
+ 125
+ ]
+ ],
+ [
+ [
+ 126
+ ]
+ ],
+ [
+ [
+ 127
+ ]
+ ],
+ [
+ [
+ 128
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 142,
+ 143,
+ 144,
+ 145,
+ -130,
+ 146
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 147,
+ 148,
+ -144,
+ 149,
+ 150
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 151,
+ -89,
+ 152,
+ 153
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 154,
+ 155
+ ]
+ ],
+ [
+ [
+ 156,
+ 157,
+ 158,
+ 159,
+ -145,
+ -149,
+ 160
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 161
+ ]
+ ],
+ [
+ [
+ 162
+ ]
+ ],
+ [
+ [
+ 163
+ ]
+ ],
+ [
+ [
+ 164
+ ]
+ ],
+ [
+ [
+ 165,
+ 166,
+ -71,
+ 167
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 168
+ ]
+ ],
+ [
+ [
+ 169
+ ]
+ ],
+ [
+ [
+ 170,
+ -98,
+ 171,
+ 172,
+ 173,
+ 174
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 175,
+ 176
+ ]
+ ],
+ [
+ [
+ -102,
+ 177,
+ 178,
+ 179,
+ -100,
+ 180,
+ 181,
+ 182
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 183
+ ]
+ ],
+ [
+ [
+ 184
+ ]
+ ],
+ [
+ [
+ 185,
+ 186
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 187
+ ]
+ ],
+ [
+ [
+ 188
+ ]
+ ],
+ [
+ [
+ 189,
+ -151,
+ 190
+ ]
+ ],
+ [
+ [
+ 191
+ ]
+ ],
+ [
+ [
+ 192
+ ]
+ ],
+ [
+ [
+ 193
+ ]
+ ],
+ [
+ [
+ 194
+ ]
+ ],
+ [
+ [
+ 195,
+ 196
+ ]
+ ],
+ [
+ [
+ 197
+ ]
+ ],
+ [
+ [
+ 198
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 199,
+ -134,
+ 200,
+ 201,
+ 202
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -146,
+ -160,
+ 203,
+ -155,
+ 204,
+ -74,
+ 205,
+ -154,
+ 206,
+ -131
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 207
+ ]
+ ],
+ [
+ [
+ 208,
+ -168,
+ -70,
+ 209,
+ -65
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 210,
+ 211,
+ -142,
+ 212,
+ 213
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 214
+ ]
+ ],
+ [
+ [
+ 215
+ ]
+ ],
+ [
+ [
+ 216
+ ]
+ ],
+ [
+ [
+ 217
+ ]
+ ],
+ [
+ [
+ 218
+ ]
+ ],
+ [
+ [
+ 219,
+ 220
+ ]
+ ],
+ [
+ [
+ 221,
+ -120,
+ 222,
+ 223,
+ 224
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 225,
+ -214,
+ 226,
+ -202
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -132,
+ -207,
+ -153,
+ -94,
+ 227,
+ 228
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 229,
+ -174,
+ 230,
+ 231,
+ -186
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 232
+ ]
+ ],
+ [
+ [
+ 233,
+ 234,
+ 235
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 236,
+ 237,
+ -75,
+ -91,
+ 238
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -78,
+ -86,
+ 239,
+ -138,
+ 240
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 241
+ ]
+ ],
+ [
+ [
+ 242
+ ]
+ ],
+ [
+ [
+ 243
+ ]
+ ],
+ [
+ [
+ 244
+ ]
+ ],
+ [
+ [
+ 245
+ ]
+ ],
+ [
+ [
+ -172,
+ -97,
+ 246,
+ -235,
+ 247,
+ 248,
+ 249
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 250,
+ -161,
+ -148,
+ -190,
+ 251,
+ 252
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -73,
+ 253,
+ -239,
+ -90,
+ -152,
+ -206
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -139,
+ -240,
+ -88,
+ 254,
+ 255
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -234,
+ 256,
+ -103,
+ -183,
+ 257,
+ -253,
+ 258,
+ -248
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 259
+ ]
+ ],
+ [
+ [
+ 260
+ ]
+ ],
+ [
+ [
+ 261,
+ -95,
+ -171
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 262,
+ -121,
+ -222
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -201,
+ -133,
+ -229,
+ 263,
+ -211,
+ -226
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 264,
+ -223,
+ -119,
+ -66,
+ -210,
+ -69,
+ -205,
+ -156,
+ -204,
+ -159
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 265
+ ]
+ ],
+ [
+ [
+ 266
+ ]
+ ],
+ [
+ [
+ 267
+ ]
+ ],
+ [
+ [
+ 268
+ ]
+ ],
+ [
+ [
+ 269
+ ]
+ ],
+ [
+ [
+ -72,
+ -167,
+ 270,
+ -237,
+ -254
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ 271,
+ -92,
+ -79,
+ -241,
+ -137
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ -179,
+ 272
+ ]
+ ],
+ [
+ [
+ -177,
+ 273
+ ]
+ ],
+ [
+ [
+ -181,
+ -99,
+ 274,
+ -220,
+ 275,
+ -224,
+ -265,
+ -158,
+ 276
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -173,
+ -250,
+ 277,
+ -231
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 278
+ ]
+ ],
+ [
+ [
+ 279
+ ]
+ ],
+ [
+ [
+ 280
+ ]
+ ],
+ [
+ [
+ 281
+ ]
+ ],
+ [
+ [
+ 282
+ ]
+ ],
+ [
+ [
+ 283
+ ]
+ ],
+ [
+ [
+ 284
+ ]
+ ],
+ [
+ [
+ 285
+ ]
+ ],
+ [
+ [
+ -256,
+ 286,
+ -140
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "MultiPolygon",
+ "arcs": [
+ [
+ [
+ 287
+ ]
+ ],
+ [
+ [
+ 288
+ ]
+ ],
+ [
+ [
+ 289
+ ]
+ ],
+ [
+ [
+ 290
+ ]
+ ],
+ [
+ [
+ -196,
+ 291,
+ -147,
+ -135,
+ -200,
+ 292
+ ]
+ ],
+ [
+ [
+ 293
+ ]
+ ],
+ [
+ [
+ 294
+ ]
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -182,
+ -277,
+ -157,
+ -251,
+ -258
+ ]
+ ]
+ },
+ {
+ "type": "Polygon",
+ "arcs": [
+ [
+ -228,
+ -93,
+ -272,
+ -136,
+ -212,
+ -264
+ ]
+ ]
+ }
+ ]
+ }
+ },
+ "arcs": [
+ [
+ [
+ 172,
+ 6259
+ ],
+ [
+ -6,
+ -11
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -2,
+ 15
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 9,
+ -11
+ ],
+ [
+ 0,
+ -2
+ ]
+ ],
+ [
+ [
+ 197,
+ 6263
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -10,
+ 8
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 11,
+ -8
+ ],
+ [
+ 6,
+ -6
+ ]
+ ],
+ [
+ [
+ 28,
+ 6232
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -12,
+ 10
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -9,
+ 9
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 8,
+ -11
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 13,
+ -2
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -5,
+ -17
+ ],
+ [
+ -5,
+ -7
+ ]
+ ],
+ [
+ [
+ 94,
+ 6245
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -14,
+ 2
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -10,
+ -2
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 30,
+ 10
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 3,
+ 13
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -1,
+ -17
+ ]
+ ],
+ [
+ [
+ 144,
+ 6273
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 11,
+ 1
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 0,
+ -12
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -19,
+ -16
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -11,
+ -14
+ ],
+ [
+ 8,
+ 36
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 5,
+ 17
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -4,
+ -10
+ ]
+ ],
+ [
+ [
+ 195,
+ 6299
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -9,
+ 6
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -5,
+ -5
+ ]
+ ],
+ [
+ [
+ 417,
+ 6325
+ ],
+ [
+ 18,
+ -8
+ ],
+ [
+ 22,
+ 1
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -14,
+ -3
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -12,
+ -5
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -19,
+ 4
+ ],
+ [
+ -15,
+ -3
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 13,
+ -5
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 11,
+ 5
+ ],
+ [
+ 9,
+ -1
+ ]
+ ],
+ [
+ [
+ 515,
+ 6351
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 8,
+ -3
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ -14,
+ -11
+ ]
+ ],
+ [
+ [
+ 316,
+ 6305
+ ],
+ [
+ -48,
+ -7
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 9,
+ 2
+ ],
+ [
+ 18,
+ 9
+ ],
+ [
+ 22,
+ 7
+ ],
+ [
+ 18,
+ 10
+ ],
+ [
+ 15,
+ 6
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ -13,
+ 5
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 12,
+ 8
+ ],
+ [
+ 11,
+ -10
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -10,
+ -5
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 5,
+ -13
+ ],
+ [
+ -20,
+ -10
+ ],
+ [
+ -30,
+ -9
+ ]
+ ],
+ [
+ [
+ 671,
+ 6410
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 9,
+ 13
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -4,
+ -2
+ ]
+ ],
+ [
+ [
+ 764,
+ 6460
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -14,
+ 4
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 15,
+ 6
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 1,
+ -4
+ ]
+ ],
+ [
+ [
+ 920,
+ 6555
+ ],
+ [
+ -28,
+ -20
+ ],
+ [
+ -9,
+ -15
+ ],
+ [
+ -6,
+ -15
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -9,
+ -10
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -29,
+ -23
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ 6,
+ 13
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 12,
+ -2
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ 8,
+ 6
+ ],
+ [
+ 11,
+ 5
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 14,
+ -10
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -9,
+ -8
+ ]
+ ],
+ [
+ [
+ 1078,
+ 6627
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -2,
+ -7
+ ]
+ ],
+ [
+ [
+ 1041,
+ 6661
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ -8,
+ -11
+ ],
+ [
+ -15,
+ -17
+ ],
+ [
+ -6,
+ -11
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 15,
+ 4
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -7,
+ -8
+ ],
+ [
+ -17,
+ -14
+ ],
+ [
+ -6,
+ -12
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -10,
+ -1
+ ],
+ [
+ -17,
+ -8
+ ],
+ [
+ -11,
+ -7
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -10,
+ 8
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 6,
+ 3
+ ],
+ [
+ 10,
+ 1
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 20,
+ 11
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 4,
+ 21
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -11,
+ 5
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 11,
+ 3
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 1,
+ -18
+ ]
+ ],
+ [
+ [
+ 1111,
+ 6693
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -4,
+ 12
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 12,
+ -10
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -9,
+ -2
+ ]
+ ],
+ [
+ [
+ 1136,
+ 6706
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -8,
+ -9
+ ]
+ ],
+ [
+ [
+ 1406,
+ 6757
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -8,
+ 5
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 16,
+ -6
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 5,
+ -8
+ ]
+ ],
+ [
+ [
+ 1429,
+ 6842
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 13,
+ 9
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -3,
+ -13
+ ],
+ [
+ -3,
+ -3
+ ]
+ ],
+ [
+ [
+ 1323,
+ 6867
+ ],
+ [
+ 9,
+ -31
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -25,
+ 12
+ ],
+ [
+ -16,
+ -18
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -44,
+ -1
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -10,
+ -17
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -12,
+ -5
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -3,
+ 16
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 13,
+ 10
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 16,
+ 36
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 11,
+ 10
+ ],
+ [
+ 25,
+ 16
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 3,
+ -6
+ ]
+ ],
+ [
+ [
+ 1693,
+ 6865
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 0,
+ -6
+ ]
+ ],
+ [
+ [
+ 1680,
+ 6900
+ ],
+ [
+ -1,
+ -16
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ -14
+ ]
+ ],
+ [
+ [
+ 4213,
+ 6886
+ ],
+ [
+ 9,
+ -25
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 3,
+ 13
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 3,
+ 9
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 6,
+ -25
+ ]
+ ],
+ [
+ [
+ 1647,
+ 6895
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -11,
+ -19
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ 5,
+ 17
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 5,
+ 11
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 5,
+ 14
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -2,
+ -3
+ ]
+ ],
+ [
+ [
+ 4076,
+ 6851
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -1,
+ -16
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ -11,
+ 18
+ ],
+ [
+ -6,
+ 13
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -8,
+ 22
+ ],
+ [
+ -4,
+ 17
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -8,
+ 5
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 12,
+ 4
+ ],
+ [
+ 18,
+ -22
+ ],
+ [
+ 3,
+ -9
+ ],
+ [
+ 6,
+ -10
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 8,
+ -20
+ ]
+ ],
+ [
+ [
+ 1606,
+ 6935
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -12,
+ 10
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 11,
+ 1
+ ],
+ [
+ 3,
+ -4
+ ]
+ ],
+ [
+ [
+ 1574,
+ 6931
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -11,
+ -5
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -2,
+ 26
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 5,
+ 9
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -2,
+ -8
+ ]
+ ],
+ [
+ [
+ 4036,
+ 6974
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -13,
+ -13
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ 1,
+ 27
+ ],
+ [
+ -9,
+ 16
+ ],
+ [
+ 10,
+ 9
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 10,
+ -1
+ ],
+ [
+ 10,
+ 7
+ ],
+ [
+ 3,
+ -3
+ ]
+ ],
+ [
+ [
+ 2035,
+ 7027
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 11,
+ 16
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 0,
+ -13
+ ]
+ ],
+ [
+ [
+ 4245,
+ 6964
+ ],
+ [
+ -3,
+ -21
+ ],
+ [
+ -6,
+ -21
+ ],
+ [
+ -9,
+ -12
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -10,
+ -8
+ ],
+ [
+ -8,
+ -16
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -5,
+ 11
+ ],
+ [
+ -2,
+ 26
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ 10,
+ 15
+ ],
+ [
+ 2,
+ 47
+ ],
+ [
+ 32,
+ 24
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 11,
+ -18
+ ],
+ [
+ 11,
+ -25
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ 1,
+ -19
+ ],
+ [
+ -2,
+ -15
+ ]
+ ],
+ [
+ [
+ 4013,
+ 7126
+ ],
+ [
+ 17,
+ -4
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 30,
+ -19
+ ],
+ [
+ 15,
+ -19
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 6,
+ -21
+ ],
+ [
+ 13,
+ -25
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -19,
+ 17
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 16,
+ 4
+ ],
+ [
+ 13,
+ -16
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 5,
+ -12
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ -3,
+ -33
+ ],
+ [
+ 3,
+ -12
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -6,
+ 13
+ ],
+ [
+ -7,
+ 20
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -9,
+ 3
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ -4,
+ 11
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -12,
+ 27
+ ],
+ [
+ -13,
+ 21
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 7,
+ 4
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ -11,
+ 21
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -14,
+ -3
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -12,
+ 1
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -8,
+ 11
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 8,
+ -6
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 8,
+ 9
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -15,
+ -7
+ ],
+ [
+ -13,
+ -11
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 14,
+ 18
+ ],
+ [
+ 6,
+ 10
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ 0,
+ 19
+ ],
+ [
+ 3,
+ 4
+ ]
+ ],
+ [
+ [
+ 4083,
+ 7108
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -13,
+ 15
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 18,
+ -1
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -10,
+ -8
+ ]
+ ],
+ [
+ [
+ 4143,
+ 7082
+ ],
+ [
+ -1,
+ -31
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -8,
+ 2
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -14,
+ 2
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 11,
+ 31
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 10,
+ -19
+ ],
+ [
+ 12,
+ -27
+ ],
+ [
+ -4,
+ -26
+ ]
+ ],
+ [
+ [
+ 2114,
+ 7144
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 9,
+ 11
+ ],
+ [
+ 10,
+ 8
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -15,
+ -17
+ ]
+ ],
+ [
+ [
+ 2157,
+ 7160
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 10,
+ 7
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -5,
+ -2
+ ]
+ ],
+ [
+ [
+ 759,
+ 7182
+ ],
+ [
+ 12,
+ -3
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -10,
+ -10
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -12,
+ 12
+ ],
+ [
+ 1,
+ 5
+ ]
+ ],
+ [
+ [
+ 4086,
+ 7162
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -11,
+ 0
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 3,
+ 11
+ ],
+ [
+ 3,
+ 19
+ ],
+ [
+ 17,
+ -21
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -3,
+ -3
+ ]
+ ],
+ [
+ [
+ 3975,
+ 7222
+ ],
+ [
+ 5,
+ -13
+ ],
+ [
+ 9,
+ 1
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -3,
+ -18
+ ],
+ [
+ 1,
+ -19
+ ],
+ [
+ -1,
+ -18
+ ],
+ [
+ -5,
+ -19
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -5,
+ 24
+ ],
+ [
+ 4,
+ 40
+ ],
+ [
+ 10,
+ 8
+ ],
+ [
+ -6,
+ 11
+ ],
+ [
+ -12,
+ 13
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ -10,
+ 20
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 17
+ ],
+ [
+ 9,
+ 15
+ ],
+ [
+ 12,
+ 3
+ ],
+ [
+ 8,
+ -6
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 1,
+ -5
+ ]
+ ],
+ [
+ [
+ 4031,
+ 7253
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 11,
+ -6
+ ],
+ [
+ 7,
+ -8
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -8,
+ 12
+ ],
+ [
+ -10,
+ 21
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 6,
+ -11
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -15,
+ 2
+ ],
+ [
+ -9,
+ -5
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -1,
+ 15
+ ],
+ [
+ -2,
+ 22
+ ],
+ [
+ 0,
+ 16
+ ],
+ [
+ -7,
+ 16
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 31,
+ -11
+ ]
+ ],
+ [
+ [
+ 2265,
+ 7276
+ ],
+ [
+ -12,
+ -6
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -7,
+ -13
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ 1,
+ 15
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 31,
+ -3
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -6,
+ -1
+ ]
+ ],
+ [
+ [
+ 722,
+ 7287
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 24,
+ 7
+ ],
+ [
+ -4,
+ -11
+ ]
+ ],
+ [
+ [
+ 3886,
+ 7319
+ ],
+ [
+ 8,
+ -21
+ ],
+ [
+ 6,
+ -16
+ ],
+ [
+ 5,
+ -20
+ ],
+ [
+ 8,
+ -40
+ ],
+ [
+ 4,
+ -15
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 1,
+ -22
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 2,
+ -17
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -9,
+ 25
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 2,
+ 14
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -11,
+ -4
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ 11,
+ 18
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -3,
+ 20
+ ],
+ [
+ -7,
+ 12
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -10,
+ -33
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -13,
+ -4
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ -5,
+ 25
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 10,
+ 2
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 7,
+ 17
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 19,
+ -20
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 8,
+ -12
+ ]
+ ],
+ [
+ [
+ 2244,
+ 7414
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -10,
+ 9
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 12,
+ -7
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 5,
+ -9
+ ]
+ ],
+ [
+ [
+ 2274,
+ 7409
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 14,
+ 11
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 8,
+ -5
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 6,
+ -11
+ ],
+ [
+ 16,
+ -6
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -11,
+ -18
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -20,
+ 3
+ ],
+ [
+ -18,
+ 6
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 16,
+ -2
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -10,
+ -7
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -20,
+ -2
+ ],
+ [
+ -16,
+ -11
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -13,
+ -5
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -10,
+ -20
+ ],
+ [
+ -19,
+ -16
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 25,
+ 32
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -11,
+ 9
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 5,
+ 9
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -10,
+ 0
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 10,
+ 1
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -14,
+ 22
+ ],
+ [
+ -7,
+ 32
+ ],
+ [
+ -12,
+ 25
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 12,
+ 22
+ ],
+ [
+ 14,
+ 6
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 9,
+ 2
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 6,
+ -17
+ ],
+ [
+ 7,
+ -16
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -3,
+ 15
+ ],
+ [
+ -2,
+ 29
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 10,
+ -1
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -10,
+ 10
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 8,
+ -19
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 10,
+ -2
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 19,
+ -7
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ -5,
+ -14
+ ]
+ ],
+ [
+ [
+ 3818,
+ 7489
+ ],
+ [
+ 13,
+ -18
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 14,
+ 18
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 16,
+ -5
+ ],
+ [
+ 15,
+ -9
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ -4,
+ -26
+ ],
+ [
+ -11,
+ -5
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -10,
+ -9
+ ],
+ [
+ 8,
+ -7
+ ],
+ [
+ 25,
+ -2
+ ],
+ [
+ 7,
+ -14
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ -5,
+ -20
+ ],
+ [
+ -14,
+ 5
+ ],
+ [
+ -12,
+ 12
+ ],
+ [
+ -25,
+ 17
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 0,
+ -22
+ ],
+ [
+ -6,
+ -12
+ ],
+ [
+ -20,
+ 5
+ ],
+ [
+ -8,
+ 17
+ ],
+ [
+ -7,
+ 27
+ ],
+ [
+ -27,
+ 31
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -9,
+ 19
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 7,
+ -11
+ ],
+ [
+ 9,
+ -12
+ ],
+ [
+ 0,
+ 11
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 5,
+ -5
+ ]
+ ],
+ [
+ [
+ 3946,
+ 7486
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 7
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 12,
+ 4
+ ],
+ [
+ 11,
+ -9
+ ],
+ [
+ 8,
+ -11
+ ]
+ ],
+ [
+ [
+ 3912,
+ 7473
+ ],
+ [
+ 23,
+ -4
+ ],
+ [
+ 17,
+ 1
+ ],
+ [
+ 15,
+ -28
+ ],
+ [
+ 10,
+ -23
+ ],
+ [
+ 5,
+ -17
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ 5,
+ -15
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -9,
+ 10
+ ],
+ [
+ -6,
+ 20
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -6,
+ 19
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ 16,
+ -33
+ ],
+ [
+ 11,
+ -19
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 2,
+ -17
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ 6,
+ -16
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -15,
+ -7
+ ],
+ [
+ -15,
+ -29
+ ],
+ [
+ -15,
+ -17
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 8,
+ 36
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ -10,
+ 16
+ ],
+ [
+ -6,
+ 14
+ ],
+ [
+ -3,
+ 18
+ ],
+ [
+ -5,
+ 50
+ ],
+ [
+ -3,
+ 16
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ -5,
+ 10
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 10,
+ -18
+ ],
+ [
+ 4,
+ -13
+ ]
+ ],
+ [
+ [
+ 2318,
+ 7511
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 3,
+ 11
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 4,
+ -12
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -8,
+ -12
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -29,
+ 13
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ 24,
+ 29
+ ],
+ [
+ 12,
+ 11
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -7,
+ 9
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 15,
+ 7
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 6,
+ -5
+ ],
+ [
+ 6,
+ -8
+ ]
+ ],
+ [
+ [
+ 2312,
+ 7535
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 13,
+ 10
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -8,
+ -11
+ ]
+ ],
+ [
+ [
+ 1553,
+ 7553
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -6,
+ 19
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 9,
+ 12
+ ],
+ [
+ 20,
+ 10
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ -19,
+ -41
+ ]
+ ],
+ [
+ [
+ 3024,
+ 7789
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ 7,
+ 13
+ ],
+ [
+ 9,
+ 14
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -14,
+ -12
+ ],
+ [
+ -14,
+ -20
+ ]
+ ],
+ [
+ [
+ 2713,
+ 7836
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -18,
+ 3
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ 14,
+ 7
+ ],
+ [
+ 15,
+ -11
+ ],
+ [
+ -10,
+ -6
+ ]
+ ],
+ [
+ [
+ 2739,
+ 7788
+ ],
+ [
+ -10,
+ -2
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ 6,
+ 14
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 11,
+ 16
+ ],
+ [
+ 13,
+ 11
+ ],
+ [
+ 12,
+ 17
+ ],
+ [
+ 11,
+ 24
+ ],
+ [
+ 3,
+ 9
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 9,
+ -6
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -30,
+ -34
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -6,
+ -4
+ ]
+ ],
+ [
+ [
+ 1084,
+ 7897
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -16,
+ -3
+ ],
+ [
+ -16,
+ -1
+ ],
+ [
+ -14,
+ -8
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -26,
+ 6
+ ],
+ [
+ -32,
+ 23
+ ],
+ [
+ -14,
+ 5
+ ],
+ [
+ -14,
+ 16
+ ],
+ [
+ -13,
+ 21
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 37,
+ -4
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 12,
+ 5
+ ],
+ [
+ 11,
+ 8
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 10,
+ 5
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 4,
+ -3
+ ]
+ ],
+ [
+ [
+ 2974,
+ 7888
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ 14,
+ 12
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ -1,
+ -10
+ ]
+ ],
+ [
+ [
+ 2859,
+ 7910
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 18,
+ 2
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -20,
+ -8
+ ],
+ [
+ -16,
+ -11
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 15,
+ -6
+ ]
+ ],
+ [
+ [
+ 2746,
+ 7910
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ -4,
+ -15
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 4,
+ 17
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 3,
+ -8
+ ]
+ ],
+ [
+ [
+ 2353,
+ 7893
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ 6,
+ 10
+ ],
+ [
+ 4,
+ 18
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -9,
+ -19
+ ],
+ [
+ -3,
+ -2
+ ]
+ ],
+ [
+ [
+ 490,
+ 7911
+ ],
+ [
+ 20,
+ -12
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ -15,
+ 6
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -29,
+ 25
+ ],
+ [
+ -11,
+ 6
+ ],
+ [
+ 3,
+ 14
+ ],
+ [
+ 11,
+ 8
+ ],
+ [
+ 6,
+ -20
+ ],
+ [
+ 10,
+ -9
+ ]
+ ],
+ [
+ [
+ 2721,
+ 7982
+ ],
+ [
+ -11,
+ -2
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 1,
+ -9
+ ]
+ ],
+ [
+ [
+ 605,
+ 8518
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 9,
+ 1
+ ],
+ [
+ 13,
+ -2
+ ],
+ [
+ 15,
+ -4
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 18,
+ 14
+ ],
+ [
+ 11,
+ 4
+ ],
+ [
+ 11,
+ 2
+ ],
+ [
+ 12,
+ -3
+ ],
+ [
+ 11,
+ -8
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 22,
+ -9
+ ],
+ [
+ 14,
+ -3
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 11,
+ -5
+ ],
+ [
+ 12,
+ 2
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 25,
+ -7
+ ],
+ [
+ -4,
+ -18
+ ],
+ [
+ -8,
+ -8
+ ],
+ [
+ -23,
+ 2
+ ],
+ [
+ -23,
+ -2
+ ],
+ [
+ -10,
+ -10
+ ],
+ [
+ -8,
+ -12
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -5,
+ 20
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -11,
+ 6
+ ],
+ [
+ -12,
+ 4
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -10,
+ 5
+ ],
+ [
+ -28,
+ 13
+ ],
+ [
+ -10,
+ 1
+ ],
+ [
+ -10,
+ -1
+ ],
+ [
+ -10,
+ -6
+ ],
+ [
+ -10,
+ -8
+ ],
+ [
+ -10,
+ -6
+ ],
+ [
+ -11,
+ -2
+ ],
+ [
+ -10,
+ 4
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 5,
+ 23
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ 16,
+ -17
+ ]
+ ],
+ [
+ [
+ 1087,
+ 9011
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 11,
+ 8
+ ],
+ [
+ 18,
+ 10
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -10,
+ -7
+ ],
+ [
+ -15,
+ -10
+ ]
+ ],
+ [
+ [
+ 1998,
+ 9891
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 15,
+ 4
+ ],
+ [
+ 11,
+ 7
+ ],
+ [
+ 24,
+ 23
+ ],
+ [
+ 8,
+ 13
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 21,
+ -3
+ ],
+ [
+ 11,
+ -6
+ ],
+ [
+ 13,
+ -12
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ 17,
+ -9
+ ],
+ [
+ 18,
+ -2
+ ],
+ [
+ 18,
+ -7
+ ],
+ [
+ 25,
+ 15
+ ],
+ [
+ 19,
+ 3
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 23,
+ 7
+ ],
+ [
+ 41,
+ -10
+ ],
+ [
+ 10,
+ 2
+ ],
+ [
+ 16,
+ -1
+ ],
+ [
+ 17,
+ -7
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ -18,
+ -15
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 12,
+ -1
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 36,
+ 0
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -11,
+ -11
+ ],
+ [
+ 65,
+ -7
+ ],
+ [
+ 9,
+ 7
+ ],
+ [
+ 13,
+ 2
+ ],
+ [
+ 28,
+ 9
+ ],
+ [
+ 11,
+ -4
+ ],
+ [
+ 13,
+ -9
+ ],
+ [
+ 11,
+ -2
+ ],
+ [
+ 11,
+ 2
+ ],
+ [
+ 26,
+ 13
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 12,
+ -4
+ ],
+ [
+ 13,
+ 2
+ ],
+ [
+ 38,
+ -14
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 19,
+ -19
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 11,
+ 8
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ 16,
+ -3
+ ],
+ [
+ 7,
+ -12
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 58,
+ -9
+ ],
+ [
+ 29,
+ 4
+ ],
+ [
+ 41,
+ -1
+ ],
+ [
+ 21,
+ -6
+ ],
+ [
+ 21,
+ 1
+ ],
+ [
+ 34,
+ -21
+ ],
+ [
+ 18,
+ -3
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 52,
+ -5
+ ],
+ [
+ 18,
+ 11
+ ],
+ [
+ 32,
+ 3
+ ],
+ [
+ 28,
+ 9
+ ],
+ [
+ 17,
+ 0
+ ],
+ [
+ 18,
+ -2
+ ],
+ [
+ 8,
+ 1
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 46,
+ -16
+ ],
+ [
+ 25,
+ -18
+ ],
+ [
+ 12,
+ -13
+ ],
+ [
+ 53,
+ -19
+ ],
+ [
+ 16,
+ -11
+ ],
+ [
+ 11,
+ -11
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 19,
+ -1
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -55
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 0,
+ -56
+ ],
+ [
+ 22,
+ -8
+ ],
+ [
+ 21,
+ -7
+ ],
+ [
+ 6,
+ 15
+ ],
+ [
+ 23,
+ -12
+ ],
+ [
+ 21,
+ -10
+ ],
+ [
+ 12,
+ 13
+ ],
+ [
+ 14,
+ 15
+ ],
+ [
+ 19,
+ 1
+ ],
+ [
+ 21,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -5,
+ -20
+ ],
+ [
+ -5,
+ -17
+ ],
+ [
+ 12,
+ -16
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 16,
+ -9
+ ],
+ [
+ 15,
+ -9
+ ],
+ [
+ 6,
+ -23
+ ],
+ [
+ 16,
+ -18
+ ],
+ [
+ 12,
+ -14
+ ],
+ [
+ 12,
+ -13
+ ],
+ [
+ 17,
+ -19
+ ],
+ [
+ 12,
+ -13
+ ],
+ [
+ 15,
+ -18
+ ],
+ [
+ 10,
+ -11
+ ],
+ [
+ 4,
+ -20
+ ],
+ [
+ 5,
+ -24
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 15,
+ 16
+ ],
+ [
+ 14,
+ 10
+ ],
+ [
+ 16,
+ 13
+ ],
+ [
+ 12,
+ 8
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 10,
+ 25
+ ],
+ [
+ 0,
+ 34
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ -7,
+ 14
+ ],
+ [
+ 20,
+ 6
+ ],
+ [
+ 15,
+ 5
+ ],
+ [
+ 21,
+ 12
+ ],
+ [
+ 20,
+ 13
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 19,
+ -22
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -2,
+ -11
+ ],
+ [
+ 12,
+ -29
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 10,
+ -4
+ ],
+ [
+ 11,
+ -10
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 16,
+ -13
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 13,
+ -11
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 13,
+ -10
+ ],
+ [
+ 13,
+ -20
+ ],
+ [
+ 11,
+ -18
+ ],
+ [
+ 14,
+ -18
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ 13,
+ -22
+ ],
+ [
+ 14,
+ -28
+ ],
+ [
+ 10,
+ -24
+ ],
+ [
+ 8,
+ -14
+ ],
+ [
+ 9,
+ -20
+ ],
+ [
+ 11,
+ -24
+ ],
+ [
+ 13,
+ -28
+ ],
+ [
+ 10,
+ -17
+ ],
+ [
+ 12,
+ -25
+ ],
+ [
+ 7,
+ -15
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -5,
+ -13
+ ],
+ [
+ 16,
+ -6
+ ],
+ [
+ 12,
+ -4
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ -4,
+ -18
+ ],
+ [
+ 13,
+ -8
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 4,
+ -11
+ ],
+ [
+ 1,
+ -18
+ ],
+ [
+ 16,
+ 1
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 12,
+ -10
+ ],
+ [
+ 12,
+ -10
+ ],
+ [
+ 11,
+ -8
+ ],
+ [
+ 14,
+ -5
+ ],
+ [
+ 17,
+ -8
+ ],
+ [
+ 8,
+ -14
+ ],
+ [
+ 15,
+ -7
+ ],
+ [
+ 6,
+ -20
+ ],
+ [
+ 18,
+ -8
+ ],
+ [
+ 11,
+ 5
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -2,
+ -11
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 6,
+ -22
+ ],
+ [
+ 2,
+ -13
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -12,
+ -30
+ ],
+ [
+ -4,
+ -15
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -16,
+ -21
+ ],
+ [
+ -7,
+ -12
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -21,
+ 3
+ ],
+ [
+ -8,
+ 27
+ ],
+ [
+ -4,
+ 21
+ ],
+ [
+ -6,
+ 19
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 6,
+ 12
+ ],
+ [
+ 21,
+ 10
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ -3,
+ 24
+ ],
+ [
+ -6,
+ 14
+ ],
+ [
+ -13,
+ 29
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ -22,
+ -14
+ ],
+ [
+ -32,
+ -16
+ ],
+ [
+ -13,
+ -10
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -3,
+ -17
+ ],
+ [
+ -7,
+ -18
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -12,
+ 6
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -7,
+ 23
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ 15,
+ 44
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 17,
+ 9
+ ],
+ [
+ -27,
+ 4
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -5,
+ 11
+ ],
+ [
+ -10,
+ 4
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -6,
+ 13
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ -14,
+ 6
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -9,
+ 14
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 2,
+ 16
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -49,
+ 24
+ ],
+ [
+ 2,
+ 31
+ ],
+ [
+ -9,
+ 42
+ ],
+ [
+ -10,
+ 16
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 19,
+ -13
+ ],
+ [
+ 18,
+ -14
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ -29,
+ 31
+ ],
+ [
+ -7,
+ 9
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 27,
+ -3
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ -27,
+ 9
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -6,
+ -13
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -7,
+ 16
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ -12,
+ 15
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ 2,
+ 15
+ ],
+ [
+ 10,
+ 34
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -8,
+ -26
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -6,
+ 11
+ ],
+ [
+ -14,
+ 13
+ ],
+ [
+ -16,
+ 3
+ ],
+ [
+ -10,
+ 13
+ ],
+ [
+ -15,
+ 37
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -8,
+ 45
+ ],
+ [
+ -10,
+ 31
+ ],
+ [
+ -2,
+ 16
+ ],
+ [
+ 0,
+ 17
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ 6,
+ -13
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ 10,
+ -22
+ ],
+ [
+ 5,
+ -34
+ ],
+ [
+ 7,
+ -25
+ ],
+ [
+ 4,
+ -20
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ 8,
+ -32
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -14,
+ 4
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -8,
+ 14
+ ],
+ [
+ -11,
+ 7
+ ],
+ [
+ -27,
+ -3
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 3,
+ 22
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -14,
+ 32
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 19,
+ 15
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -4,
+ 20
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ -20
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -24,
+ 8
+ ],
+ [
+ -14,
+ 10
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 12,
+ -6
+ ],
+ [
+ 12,
+ -8
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 11,
+ -8
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -7,
+ -12
+ ],
+ [
+ 15,
+ 2
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 11,
+ -19
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -30,
+ -4
+ ],
+ [
+ -11,
+ -16
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -15,
+ 13
+ ],
+ [
+ -19,
+ 12
+ ],
+ [
+ -42,
+ 35
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ -8,
+ 9
+ ],
+ [
+ -10,
+ 15
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -20,
+ 20
+ ],
+ [
+ -10,
+ 8
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ -17,
+ 4
+ ],
+ [
+ -17,
+ 10
+ ],
+ [
+ -41,
+ 26
+ ],
+ [
+ -21,
+ 17
+ ],
+ [
+ -12,
+ 7
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 9,
+ 16
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ -5,
+ 12
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 10,
+ -15
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ -1,
+ -21
+ ],
+ [
+ 3,
+ -24
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 1,
+ 15
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 12,
+ -2
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ -23,
+ 11
+ ],
+ [
+ -14,
+ 20
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -8,
+ -8
+ ],
+ [
+ -21,
+ -27
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -27,
+ -15
+ ],
+ [
+ -19,
+ -3
+ ],
+ [
+ -20,
+ 2
+ ],
+ [
+ -18,
+ 5
+ ],
+ [
+ -44,
+ 24
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 10,
+ 15
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -3,
+ 15
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -13,
+ -5
+ ],
+ [
+ -39,
+ 12
+ ],
+ [
+ -40,
+ 10
+ ],
+ [
+ -36,
+ 2
+ ],
+ [
+ -50,
+ -8
+ ],
+ [
+ -27,
+ -8
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -15,
+ 1
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -9,
+ 13
+ ],
+ [
+ -13,
+ 7
+ ],
+ [
+ -18,
+ 3
+ ],
+ [
+ -10,
+ 4
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -10,
+ 4
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ 4,
+ 24
+ ],
+ [
+ 3,
+ 14
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -12,
+ -11
+ ],
+ [
+ -11,
+ -13
+ ],
+ [
+ -10,
+ -16
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -12,
+ 2
+ ],
+ [
+ -16,
+ 10
+ ],
+ [
+ -14,
+ 5
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ 8,
+ 9
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 7,
+ 12
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ -43,
+ 2
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -14,
+ -7
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 9,
+ 11
+ ],
+ [
+ -12,
+ 5
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 3,
+ 12
+ ],
+ [
+ 28,
+ 11
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -18,
+ -2
+ ],
+ [
+ -12,
+ -10
+ ],
+ [
+ -14,
+ -13
+ ],
+ [
+ -9,
+ -6
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -14,
+ -4
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -9,
+ 11
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 3,
+ 9
+ ],
+ [
+ 20,
+ 38
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -13,
+ -15
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 10,
+ 6
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -7,
+ -17
+ ],
+ [
+ -5,
+ -16
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 14,
+ -13
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 7,
+ -5
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -3,
+ -13
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -11,
+ 0
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -8,
+ -8
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ 13,
+ 0
+ ],
+ [
+ 10,
+ 3
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 2,
+ -19
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -9,
+ -25
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -10,
+ -2
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -14,
+ 5
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -13,
+ -6
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -9,
+ 17
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -8,
+ -14
+ ],
+ [
+ -5,
+ -24
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -5,
+ 21
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -7,
+ -12
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -15,
+ 8
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 5,
+ -12
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -21,
+ -24
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -14,
+ -9
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -16,
+ -16
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -10,
+ 6
+ ],
+ [
+ -10,
+ 5
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -10,
+ -3
+ ],
+ [
+ -13,
+ -8
+ ],
+ [
+ -10,
+ 0
+ ],
+ [
+ -15,
+ 14
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 3,
+ 11
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 14,
+ 10
+ ],
+ [
+ 16,
+ 4
+ ],
+ [
+ 10,
+ 7
+ ],
+ [
+ 13,
+ 13
+ ],
+ [
+ 6,
+ 10
+ ],
+ [
+ 13,
+ 25
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -28,
+ -24
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -23,
+ 9
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -4,
+ 11
+ ],
+ [
+ 7,
+ 27
+ ],
+ [
+ 4,
+ 13
+ ],
+ [
+ 11,
+ 20
+ ],
+ [
+ 15,
+ 21
+ ],
+ [
+ 5,
+ 13
+ ],
+ [
+ 7,
+ 37
+ ],
+ [
+ 0,
+ 17
+ ],
+ [
+ -4,
+ 20
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 33,
+ 18
+ ],
+ [
+ 16,
+ 14
+ ],
+ [
+ 30,
+ 21
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 13,
+ 5
+ ],
+ [
+ 20,
+ -1
+ ],
+ [
+ 41,
+ -14
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ -7,
+ 9
+ ],
+ [
+ -28,
+ 6
+ ],
+ [
+ -12,
+ 5
+ ],
+ [
+ -34,
+ 25
+ ],
+ [
+ -8,
+ 9
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 9,
+ 11
+ ],
+ [
+ 12,
+ 10
+ ],
+ [
+ 24,
+ 15
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -17,
+ -3
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -11,
+ -11
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -6,
+ -15
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -12,
+ -2
+ ],
+ [
+ -32,
+ -2
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -30,
+ -20
+ ],
+ [
+ -11,
+ -10
+ ],
+ [
+ -7,
+ -11
+ ],
+ [
+ -12,
+ -8
+ ],
+ [
+ -16,
+ -6
+ ],
+ [
+ -12,
+ -6
+ ],
+ [
+ -13,
+ -13
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ -11,
+ -10
+ ],
+ [
+ -25,
+ -29
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -15,
+ -13
+ ],
+ [
+ -11,
+ -6
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -11,
+ 9
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 12,
+ -9
+ ],
+ [
+ 13,
+ -12
+ ],
+ [
+ 7,
+ -10
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -9,
+ -14
+ ],
+ [
+ -9,
+ -4
+ ],
+ [
+ -22,
+ -5
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 16,
+ -6
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -2,
+ -12
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -13,
+ -8
+ ],
+ [
+ -11,
+ -2
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -15,
+ -14
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -8,
+ -10
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -25,
+ -21
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ -6,
+ -18
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 20,
+ -8
+ ],
+ [
+ 10,
+ -2
+ ],
+ [
+ 12,
+ -5
+ ],
+ [
+ 22,
+ -15
+ ],
+ [
+ 7,
+ -10
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -7,
+ -12
+ ],
+ [
+ -16,
+ -19
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -12,
+ -4
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -14,
+ -18
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -19,
+ -11
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -11,
+ 0
+ ],
+ [
+ -15,
+ -6
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -38,
+ -7
+ ],
+ [
+ -8,
+ -20
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -15,
+ -14
+ ],
+ [
+ -9,
+ -6
+ ],
+ [
+ -10,
+ -3
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -16,
+ -3
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -18,
+ -17
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -7,
+ -19
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -9,
+ -5
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -7,
+ -10
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -15,
+ -10
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -15,
+ -5
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -11,
+ -19
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ -14,
+ -16
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -7,
+ -21
+ ],
+ [
+ -7,
+ -11
+ ],
+ [
+ -58,
+ -28
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ -2,
+ -12
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 0,
+ 28
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -18,
+ -19
+ ],
+ [
+ -12,
+ -5
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -12,
+ 6
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -18,
+ -4
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 10,
+ -3
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -9,
+ 6
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -4,
+ -21
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -21,
+ -36
+ ],
+ [
+ -9,
+ -12
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 3,
+ -28
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -13,
+ -9
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -11,
+ 18
+ ],
+ [
+ -12,
+ 3
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ -8,
+ -10
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 15,
+ 14
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ 12,
+ 11
+ ],
+ [
+ 13,
+ 18
+ ],
+ [
+ 15,
+ 28
+ ],
+ [
+ 17,
+ 24
+ ],
+ [
+ 20,
+ 20
+ ],
+ [
+ 21,
+ 16
+ ],
+ [
+ 44,
+ 21
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 16,
+ 4
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -10,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 13,
+ -22
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 8,
+ -3
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -15,
+ 13
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 8,
+ 19
+ ],
+ [
+ 7,
+ 14
+ ],
+ [
+ 14,
+ 16
+ ],
+ [
+ 9,
+ 8
+ ],
+ [
+ 23,
+ 23
+ ],
+ [
+ 45,
+ 25
+ ],
+ [
+ 12,
+ 15
+ ],
+ [
+ 15,
+ 17
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 10,
+ -4
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 7,
+ 14
+ ],
+ [
+ 10,
+ 16
+ ],
+ [
+ 14,
+ 19
+ ],
+ [
+ 9,
+ 8
+ ],
+ [
+ 8,
+ 5
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 13,
+ 20
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 10,
+ -3
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ 6,
+ 29
+ ],
+ [
+ 1,
+ 29
+ ],
+ [
+ 5,
+ 17
+ ],
+ [
+ 10,
+ 7
+ ],
+ [
+ 22,
+ 4
+ ],
+ [
+ -13,
+ 7
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -3,
+ 19
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 21,
+ 26
+ ],
+ [
+ 23,
+ 18
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ 11,
+ 36
+ ],
+ [
+ 10,
+ 33
+ ],
+ [
+ -14,
+ -28
+ ],
+ [
+ -16,
+ -21
+ ],
+ [
+ -47,
+ -25
+ ],
+ [
+ -32,
+ -20
+ ],
+ [
+ -15,
+ -5
+ ],
+ [
+ -10,
+ 5
+ ],
+ [
+ -8,
+ 20
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -5,
+ 13
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ 4,
+ 11
+ ],
+ [
+ 10,
+ 2
+ ],
+ [
+ 12,
+ -5
+ ],
+ [
+ 10,
+ -1
+ ],
+ [
+ -13,
+ 11
+ ],
+ [
+ -18,
+ 10
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -6,
+ -16
+ ],
+ [
+ -8,
+ -11
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ 3,
+ -13
+ ],
+ [
+ -6,
+ -21
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ 8,
+ -38
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -15,
+ -7
+ ],
+ [
+ -12,
+ 12
+ ],
+ [
+ -24,
+ 48
+ ],
+ [
+ -9,
+ 14
+ ],
+ [
+ -19,
+ 22
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -8,
+ -11
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -21,
+ 16
+ ],
+ [
+ -10,
+ 13
+ ],
+ [
+ -9,
+ 15
+ ],
+ [
+ -14,
+ -8
+ ],
+ [
+ -12,
+ -10
+ ],
+ [
+ -15,
+ -16
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -26,
+ -14
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ -36,
+ -11
+ ],
+ [
+ -35,
+ 7
+ ],
+ [
+ 12,
+ 7
+ ],
+ [
+ 14,
+ 6
+ ],
+ [
+ 12,
+ 15
+ ],
+ [
+ -5,
+ 20
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 13,
+ 18
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -9,
+ -6
+ ],
+ [
+ -8,
+ 13
+ ],
+ [
+ -4,
+ 26
+ ],
+ [
+ 9,
+ 16
+ ],
+ [
+ 5,
+ 12
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 1,
+ 15
+ ],
+ [
+ -8,
+ 23
+ ],
+ [
+ -20,
+ 51
+ ],
+ [
+ -10,
+ 38
+ ],
+ [
+ -16,
+ 20
+ ],
+ [
+ 12,
+ 33
+ ],
+ [
+ 14,
+ 30
+ ],
+ [
+ 17,
+ 14
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -10,
+ -1
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ -18,
+ -38
+ ],
+ [
+ -12,
+ -18
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ 12,
+ -7
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 2,
+ -14
+ ],
+ [
+ -3,
+ -17
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -15,
+ 1
+ ],
+ [
+ -13,
+ -14
+ ],
+ [
+ -31,
+ -14
+ ],
+ [
+ -41,
+ -9
+ ],
+ [
+ -20,
+ 1
+ ],
+ [
+ -22,
+ 17
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ -30,
+ 29
+ ],
+ [
+ -17,
+ 30
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ -10,
+ 7
+ ],
+ [
+ -13,
+ 13
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ -8,
+ 5
+ ],
+ [
+ -10,
+ 0
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ 30,
+ 38
+ ],
+ [
+ 10,
+ 25
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 11,
+ -4
+ ],
+ [
+ 15,
+ -10
+ ],
+ [
+ 13,
+ -4
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ -5,
+ -15
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 16,
+ 16
+ ],
+ [
+ 12,
+ 14
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 6,
+ -15
+ ],
+ [
+ 9,
+ -15
+ ],
+ [
+ 18,
+ 15
+ ],
+ [
+ 9,
+ 17
+ ],
+ [
+ -8,
+ 8
+ ],
+ [
+ -10,
+ 5
+ ],
+ [
+ -25,
+ 6
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 16,
+ -1
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -22,
+ -20
+ ],
+ [
+ -40,
+ 1
+ ],
+ [
+ -29,
+ 12
+ ],
+ [
+ -28,
+ -2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ 15,
+ 15
+ ],
+ [
+ 12,
+ 8
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -13,
+ -4
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 0,
+ -12
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -5,
+ 12
+ ],
+ [
+ -6,
+ 26
+ ],
+ [
+ -15,
+ 7
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ 10,
+ 16
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -10,
+ 3
+ ],
+ [
+ -12,
+ -9
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 24,
+ 6
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ -19,
+ 10
+ ],
+ [
+ -6,
+ 11
+ ],
+ [
+ 8,
+ 6
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 20,
+ 6
+ ],
+ [
+ -8,
+ 11
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ 4,
+ 16
+ ],
+ [
+ 23,
+ 39
+ ],
+ [
+ 23,
+ 33
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ 10,
+ -3
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -5,
+ 13
+ ],
+ [
+ 14,
+ 5
+ ],
+ [
+ 9,
+ 15
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -9,
+ -10
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ -3,
+ 24
+ ],
+ [
+ 4,
+ 22
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 23,
+ 4
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ -14,
+ 14
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 28,
+ 9
+ ],
+ [
+ 14,
+ -3
+ ],
+ [
+ 19,
+ -10
+ ],
+ [
+ 11,
+ -13
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 13,
+ 9
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 21,
+ 6
+ ],
+ [
+ 10,
+ 7
+ ],
+ [
+ 12,
+ 17
+ ],
+ [
+ 17,
+ 12
+ ],
+ [
+ 24,
+ 35
+ ],
+ [
+ 7,
+ 15
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 5,
+ -12
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 43,
+ 3
+ ],
+ [
+ 21,
+ 6
+ ],
+ [
+ 15,
+ 11
+ ],
+ [
+ 16,
+ 20
+ ],
+ [
+ 9,
+ 13
+ ],
+ [
+ 4,
+ 17
+ ],
+ [
+ -6,
+ 22
+ ],
+ [
+ -5,
+ 19
+ ],
+ [
+ -8,
+ 42
+ ],
+ [
+ -21,
+ 27
+ ],
+ [
+ -15,
+ 9
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ 7,
+ 18
+ ],
+ [
+ 20,
+ -2
+ ],
+ [
+ 13,
+ 4
+ ],
+ [
+ 10,
+ 8
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 5,
+ 14
+ ],
+ [
+ -2,
+ 14
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -7,
+ 9
+ ],
+ [
+ -9,
+ 12
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -25,
+ -25
+ ],
+ [
+ -15,
+ 0
+ ],
+ [
+ -11,
+ 4
+ ],
+ [
+ -10,
+ -14
+ ],
+ [
+ -27,
+ -12
+ ],
+ [
+ -15,
+ -13
+ ],
+ [
+ -27,
+ -30
+ ],
+ [
+ -7,
+ -14
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ -7,
+ 27
+ ],
+ [
+ -29,
+ 26
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 11,
+ -2
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -11,
+ 10
+ ],
+ [
+ -20,
+ 14
+ ],
+ [
+ -20,
+ 8
+ ],
+ [
+ -53,
+ -1
+ ],
+ [
+ -35,
+ -15
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ -14,
+ 2
+ ],
+ [
+ -28,
+ 9
+ ],
+ [
+ -62,
+ 14
+ ],
+ [
+ -17,
+ 8
+ ],
+ [
+ -14,
+ 19
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ -1,
+ 19
+ ],
+ [
+ -12,
+ 5
+ ],
+ [
+ -25,
+ 28
+ ],
+ [
+ -9,
+ 11
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ 21,
+ 4
+ ],
+ [
+ 7,
+ 17
+ ],
+ [
+ 15,
+ 6
+ ],
+ [
+ 15,
+ -3
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -37,
+ 9
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -67,
+ 16
+ ],
+ [
+ -52,
+ 28
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -4,
+ 12
+ ],
+ [
+ 7,
+ 11
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 30,
+ 15
+ ],
+ [
+ 16,
+ 19
+ ],
+ [
+ 30,
+ 4
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 9,
+ 10
+ ],
+ [
+ 13,
+ 18
+ ],
+ [
+ 19,
+ 9
+ ],
+ [
+ 13,
+ 9
+ ],
+ [
+ 16,
+ 4
+ ],
+ [
+ 14,
+ -8
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 25,
+ -2
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ -25,
+ 15
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 29,
+ 17
+ ],
+ [
+ 23,
+ 6
+ ],
+ [
+ 12,
+ -1
+ ],
+ [
+ 35,
+ 23
+ ],
+ [
+ 19,
+ 6
+ ],
+ [
+ 36,
+ 4
+ ],
+ [
+ 30,
+ 1
+ ],
+ [
+ 8,
+ -7
+ ],
+ [
+ -16,
+ 1
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -10,
+ -22
+ ],
+ [
+ 1,
+ -17
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ 31,
+ -25
+ ],
+ [
+ 47,
+ -2
+ ],
+ [
+ 25,
+ 5
+ ],
+ [
+ 15,
+ -8
+ ],
+ [
+ 12,
+ -1
+ ],
+ [
+ 34,
+ 4
+ ],
+ [
+ 25,
+ -6
+ ],
+ [
+ 11,
+ 2
+ ],
+ [
+ 23,
+ 38
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 13,
+ -5
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 7,
+ -10
+ ],
+ [
+ -3,
+ 20
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -38,
+ 14
+ ],
+ [
+ -25,
+ -7
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ 2,
+ 16
+ ],
+ [
+ -27,
+ 38
+ ],
+ [
+ -11,
+ 8
+ ],
+ [
+ -14,
+ 0
+ ],
+ [
+ -7,
+ 13
+ ],
+ [
+ -6,
+ 17
+ ],
+ [
+ 12,
+ 7
+ ],
+ [
+ 11,
+ 4
+ ],
+ [
+ 9,
+ -6
+ ],
+ [
+ 11,
+ -22
+ ],
+ [
+ 11,
+ -4
+ ],
+ [
+ -3,
+ -22
+ ],
+ [
+ 12,
+ -20
+ ],
+ [
+ 29,
+ -19
+ ],
+ [
+ 23,
+ 7
+ ],
+ [
+ 16,
+ -1
+ ],
+ [
+ 10,
+ -4
+ ],
+ [
+ 23,
+ -17
+ ],
+ [
+ 12,
+ -2
+ ],
+ [
+ 38,
+ 9
+ ],
+ [
+ 0,
+ 17
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -25,
+ -2
+ ],
+ [
+ -20,
+ 13
+ ],
+ [
+ -17,
+ -4
+ ],
+ [
+ -31,
+ -19
+ ],
+ [
+ -15,
+ 8
+ ],
+ [
+ -10,
+ 10
+ ],
+ [
+ -16,
+ 10
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ 13,
+ 23
+ ],
+ [
+ 10,
+ 11
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -22,
+ 5
+ ],
+ [
+ -38,
+ -6
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ -15,
+ -16
+ ],
+ [
+ -16,
+ 4
+ ],
+ [
+ -22,
+ -2
+ ],
+ [
+ -48,
+ 14
+ ],
+ [
+ -17,
+ 18
+ ],
+ [
+ -7,
+ 14
+ ],
+ [
+ -13,
+ 40
+ ],
+ [
+ -16,
+ 24
+ ],
+ [
+ -113,
+ 84
+ ],
+ [
+ -52,
+ 21
+ ],
+ [
+ -25,
+ 23
+ ],
+ [
+ -15,
+ 6
+ ],
+ [
+ -15,
+ 2
+ ],
+ [
+ -19,
+ 8
+ ],
+ [
+ 13,
+ 9
+ ],
+ [
+ 8,
+ 3
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 11,
+ 6
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 9,
+ 29
+ ],
+ [
+ 9,
+ 42
+ ],
+ [
+ -2,
+ 17
+ ],
+ [
+ 63,
+ -3
+ ],
+ [
+ 41,
+ 3
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 53,
+ 7
+ ],
+ [
+ 14,
+ 5
+ ],
+ [
+ 25,
+ 14
+ ],
+ [
+ 30,
+ 25
+ ],
+ [
+ 26,
+ 34
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 2,
+ 13
+ ],
+ [
+ 4,
+ 29
+ ],
+ [
+ 12,
+ 28
+ ],
+ [
+ 55,
+ 65
+ ],
+ [
+ 25,
+ 25
+ ],
+ [
+ 8,
+ 11
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -8,
+ -8
+ ],
+ [
+ -12,
+ -6
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 21,
+ 6
+ ],
+ [
+ 12,
+ 7
+ ],
+ [
+ 57,
+ 14
+ ],
+ [
+ 32,
+ 22
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 46,
+ 27
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ -13,
+ -18
+ ],
+ [
+ 9,
+ -5
+ ],
+ [
+ -8,
+ -22
+ ],
+ [
+ 17,
+ 0
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 11,
+ -3
+ ],
+ [
+ 27,
+ 9
+ ],
+ [
+ -32,
+ 1
+ ],
+ [
+ -20,
+ 19
+ ],
+ [
+ -10,
+ 1
+ ],
+ [
+ 36,
+ 29
+ ],
+ [
+ 33,
+ 17
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 16,
+ 5
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 34,
+ 0
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 44,
+ 1
+ ],
+ [
+ 8,
+ 3
+ ],
+ [
+ 27,
+ 15
+ ],
+ [
+ 25,
+ 19
+ ],
+ [
+ 12,
+ 10
+ ],
+ [
+ 20,
+ 26
+ ],
+ [
+ 17,
+ 17
+ ],
+ [
+ 28,
+ 17
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 60,
+ -20
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 6,
+ -12
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -15,
+ -13
+ ],
+ [
+ -31,
+ -12
+ ],
+ [
+ 10,
+ -5
+ ],
+ [
+ 6,
+ -12
+ ]
+ ],
+ [
+ [
+ 8103,
+ 2152
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -11,
+ 1
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 3,
+ -4
+ ]
+ ],
+ [
+ [
+ 8156,
+ 2176
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -9,
+ -19
+ ],
+ [
+ -35,
+ -7
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 11,
+ 6
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ 1,
+ 21
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ -5,
+ 13
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -4,
+ -22
+ ],
+ [
+ -4,
+ -29
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -10,
+ -1
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -4,
+ 0
+ ]
+ ],
+ [
+ [
+ 8074,
+ 2175
+ ],
+ [
+ -1,
+ 39
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ -1,
+ 35
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ -1,
+ 36
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 3,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 36
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 3,
+ 35
+ ],
+ [
+ 2,
+ 36
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 3,
+ 36
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -8,
+ 12
+ ]
+ ],
+ [
+ [
+ 8094,
+ 3057
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ -1
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ -1
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ -1
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 14,
+ 0
+ ]
+ ],
+ [
+ [
+ 8323,
+ 3058
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -24
+ ],
+ [
+ 2,
+ -25
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 1,
+ -18
+ ],
+ [
+ 13,
+ -53
+ ],
+ [
+ 4,
+ -22
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -6,
+ -32
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 5,
+ -27
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -3,
+ -53
+ ],
+ [
+ 2,
+ -34
+ ],
+ [
+ 6,
+ -22
+ ]
+ ],
+ [
+ [
+ 8379,
+ 2295
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -30,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -29,
+ 0
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ 3,
+ -12
+ ],
+ [
+ 13,
+ -24
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -2,
+ -18
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ 0,
+ -7
+ ]
+ ],
+ [
+ [
+ 7956,
+ 3248
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -11,
+ -10
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ 1,
+ -17
+ ],
+ [
+ -3,
+ -17
+ ],
+ [
+ -9,
+ -17
+ ],
+ [
+ -4,
+ -19
+ ],
+ [
+ 1,
+ -21
+ ],
+ [
+ -4,
+ -17
+ ],
+ [
+ -10,
+ -13
+ ],
+ [
+ -4,
+ -8
+ ]
+ ],
+ [
+ [
+ 7903,
+ 3058
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ -13
+ ],
+ [
+ -2,
+ -30
+ ],
+ [
+ -4,
+ -17
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -8,
+ -12
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -9,
+ -5
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -2,
+ -15
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -4,
+ -34
+ ],
+ [
+ 0,
+ -5
+ ]
+ ],
+ [
+ [
+ 7826,
+ 2679
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -16,
+ -1
+ ],
+ [
+ -17,
+ 0
+ ]
+ ],
+ [
+ [
+ 7566,
+ 2678
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -8,
+ 2
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ 10
+ ]
+ ],
+ [
+ [
+ 7527,
+ 2800
+ ],
+ [
+ 0,
+ 20
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 1,
+ 21
+ ],
+ [
+ 0,
+ 20
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 1,
+ 21
+ ],
+ [
+ 0,
+ 20
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 1,
+ 20
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ 1,
+ 20
+ ],
+ [
+ -2,
+ 27
+ ],
+ [
+ -2,
+ 26
+ ],
+ [
+ -2,
+ 27
+ ],
+ [
+ -2,
+ 26
+ ],
+ [
+ -2,
+ 27
+ ],
+ [
+ -2,
+ 27
+ ],
+ [
+ -2,
+ 26
+ ],
+ [
+ -2,
+ 27
+ ]
+ ],
+ [
+ [
+ 7515,
+ 3344
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 4,
+ -15
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -7,
+ -16
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -7,
+ -20
+ ],
+ [
+ 14,
+ 0
+ ],
+ [
+ 15,
+ 1
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 16,
+ 0
+ ]
+ ],
+ [
+ [
+ 6217,
+ 3439
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -67
+ ],
+ [
+ 0,
+ -68
+ ],
+ [
+ 0,
+ -68
+ ]
+ ],
+ [
+ [
+ 6217,
+ 2357
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -32,
+ 0
+ ],
+ [
+ -32,
+ 0
+ ],
+ [
+ -32,
+ 0
+ ],
+ [
+ -31,
+ 0
+ ],
+ [
+ -32,
+ 0
+ ],
+ [
+ -43,
+ 28
+ ],
+ [
+ -42,
+ 28
+ ],
+ [
+ -43,
+ 28
+ ],
+ [
+ -43,
+ 29
+ ],
+ [
+ -42,
+ 28
+ ],
+ [
+ -43,
+ 28
+ ],
+ [
+ -43,
+ 28
+ ],
+ [
+ -42,
+ 28
+ ],
+ [
+ 4,
+ 11
+ ],
+ [
+ 6,
+ 29
+ ]
+ ],
+ [
+ [
+ 5707,
+ 2622
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 13,
+ 2
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 4,
+ 13
+ ],
+ [
+ 1,
+ 13
+ ],
+ [
+ -2,
+ 14
+ ],
+ [
+ -6,
+ 10
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ -5,
+ 19
+ ],
+ [
+ -2,
+ 30
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ 3,
+ 14
+ ],
+ [
+ 2,
+ 15
+ ],
+ [
+ 0,
+ 19
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ 8,
+ 29
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ 15,
+ 21
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -14,
+ 14
+ ],
+ [
+ -5,
+ 11
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -14,
+ 39
+ ],
+ [
+ -5,
+ 22
+ ],
+ [
+ 0,
+ 16
+ ]
+ ],
+ [
+ [
+ 5717,
+ 3056
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ 2,
+ 68
+ ],
+ [
+ -5,
+ 23
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ 0,
+ 19
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 3,
+ 13
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 5,
+ 19
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 0,
+ 82
+ ],
+ [
+ 0,
+ 75
+ ]
+ ],
+ [
+ [
+ 5768,
+ 3440
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ -1
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ]
+ ],
+ [
+ [
+ 5381,
+ 2643
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -5,
+ 19
+ ],
+ [
+ -6,
+ 14
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ 11,
+ -21
+ ],
+ [
+ 3,
+ -4
+ ]
+ ],
+ [
+ [
+ 5283,
+ 2718
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 0,
+ -2
+ ]
+ ],
+ [
+ [
+ 5381,
+ 2750
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 15,
+ -12
+ ],
+ [
+ 4,
+ -5
+ ]
+ ],
+ [
+ [
+ 5229,
+ 2851
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -7,
+ 18
+ ],
+ [
+ 16,
+ 3
+ ],
+ [
+ 7,
+ -8
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -5,
+ -11
+ ]
+ ],
+ [
+ [
+ 5205,
+ 2872
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 4,
+ -6
+ ]
+ ],
+ [
+ [
+ 5243,
+ 2882
+ ],
+ [
+ 18,
+ -10
+ ],
+ [
+ 10,
+ 5
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -22,
+ -7
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 3,
+ 2
+ ]
+ ],
+ [
+ [
+ 5232,
+ 4392
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 22,
+ -31
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 21,
+ -32
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 21,
+ -31
+ ],
+ [
+ 16,
+ -26
+ ],
+ [
+ 17,
+ -27
+ ],
+ [
+ 16,
+ -26
+ ],
+ [
+ 17,
+ -26
+ ],
+ [
+ 16,
+ -27
+ ],
+ [
+ 17,
+ -26
+ ],
+ [
+ 16,
+ -26
+ ],
+ [
+ 17,
+ -26
+ ],
+ [
+ 23,
+ -38
+ ],
+ [
+ 22,
+ -38
+ ],
+ [
+ 23,
+ -38
+ ],
+ [
+ 23,
+ -38
+ ],
+ [
+ 23,
+ -37
+ ],
+ [
+ 23,
+ -38
+ ],
+ [
+ 23,
+ -38
+ ],
+ [
+ 24,
+ -40
+ ]
+ ],
+ [
+ [
+ 5707,
+ 2622
+ ],
+ [
+ -11,
+ -2
+ ],
+ [
+ -25,
+ -4
+ ],
+ [
+ -26,
+ -4
+ ],
+ [
+ -26,
+ -4
+ ],
+ [
+ -25,
+ -4
+ ],
+ [
+ -26,
+ -5
+ ],
+ [
+ -26,
+ -4
+ ],
+ [
+ -26,
+ -4
+ ],
+ [
+ -25,
+ -4
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -2,
+ 27
+ ],
+ [
+ 1,
+ 13
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ -5,
+ 31
+ ],
+ [
+ -14,
+ 37
+ ],
+ [
+ -29,
+ 47
+ ],
+ [
+ -14,
+ 15
+ ],
+ [
+ -12,
+ 20
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -10,
+ 2
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -11,
+ 6
+ ],
+ [
+ 2,
+ 22
+ ],
+ [
+ -10,
+ 30
+ ],
+ [
+ -9,
+ 3
+ ],
+ [
+ -21,
+ -2
+ ],
+ [
+ -28,
+ 17
+ ],
+ [
+ -8,
+ 10
+ ],
+ [
+ -3,
+ 18
+ ],
+ [
+ -13,
+ 15
+ ],
+ [
+ -17,
+ 15
+ ],
+ [
+ -10,
+ -3
+ ],
+ [
+ -12,
+ 2
+ ],
+ [
+ -18,
+ 11
+ ],
+ [
+ -11,
+ 2
+ ],
+ [
+ -20,
+ -4
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -7,
+ 13
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ -3,
+ 26
+ ],
+ [
+ 2,
+ 24
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -14,
+ 9
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -12,
+ 10
+ ],
+ [
+ -10,
+ 24
+ ],
+ [
+ -13,
+ 13
+ ],
+ [
+ -5,
+ 23
+ ],
+ [
+ -8,
+ 13
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -18,
+ 43
+ ],
+ [
+ -19,
+ 34
+ ],
+ [
+ -3,
+ 20
+ ],
+ [
+ -1,
+ 26
+ ],
+ [
+ 7,
+ 16
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -7,
+ 17
+ ],
+ [
+ -25,
+ 10
+ ],
+ [
+ -21,
+ 41
+ ],
+ [
+ -1,
+ 32
+ ],
+ [
+ -8,
+ 32
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -2,
+ 23
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 1,
+ -16
+ ],
+ [
+ 7,
+ -12
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 6,
+ -12
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -3,
+ 16
+ ],
+ [
+ -5,
+ 20
+ ],
+ [
+ -7,
+ 11
+ ],
+ [
+ -3,
+ 21
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 12,
+ 2
+ ],
+ [
+ 33,
+ -3
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -12,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -11,
+ -11
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -12,
+ 12
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -1,
+ -29
+ ],
+ [
+ 3,
+ -22
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -9,
+ 6
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -10,
+ 15
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -6,
+ -13
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 3,
+ 15
+ ],
+ [
+ -1,
+ 25
+ ],
+ [
+ 9,
+ -20
+ ],
+ [
+ -3,
+ 14
+ ],
+ [
+ -7,
+ 15
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -7,
+ 27
+ ],
+ [
+ -15,
+ 17
+ ],
+ [
+ -12,
+ 26
+ ],
+ [
+ -25,
+ 44
+ ],
+ [
+ -2,
+ 39
+ ],
+ [
+ -9,
+ 49
+ ],
+ [
+ 4,
+ 28
+ ],
+ [
+ -1,
+ 20
+ ],
+ [
+ -4,
+ 30
+ ],
+ [
+ -5,
+ 16
+ ],
+ [
+ -20,
+ 45
+ ],
+ [
+ -19,
+ 30
+ ],
+ [
+ -3,
+ 23
+ ],
+ [
+ -2,
+ 22
+ ],
+ [
+ 5,
+ 21
+ ],
+ [
+ 3,
+ 21
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 6,
+ 28
+ ],
+ [
+ -1,
+ 35
+ ],
+ [
+ 7,
+ 44
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ -4,
+ 31
+ ],
+ [
+ -4,
+ 19
+ ],
+ [
+ -7,
+ 13
+ ],
+ [
+ 3,
+ 19
+ ],
+ [
+ 0,
+ 18
+ ],
+ [
+ -2,
+ 3
+ ]
+ ],
+ [
+ [
+ 4852,
+ 4392
+ ],
+ [
+ 25,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ]
+ ],
+ [
+ [
+ 6849,
+ 4011
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 1,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -35
+ ],
+ [
+ 0,
+ -36
+ ]
+ ],
+ [
+ [
+ 6850,
+ 3439
+ ],
+ [
+ -22,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -22,
+ 0
+ ],
+ [
+ -22,
+ 0
+ ]
+ ],
+ [
+ [
+ 6761,
+ 3439
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ]
+ ],
+ [
+ [
+ 6217,
+ 3439
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ]
+ ],
+ [
+ [
+ 6217,
+ 4202
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ]
+ ],
+ [
+ [
+ 6669,
+ 4202
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -23
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ]
+ ],
+ [
+ [
+ 9566,
+ 4394
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 0,
+ -14
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 0,
+ -14
+ ],
+ [
+ 0,
+ -16
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ 0,
+ -12
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -2,
+ -11
+ ]
+ ],
+ [
+ [
+ 9562,
+ 4265
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -13,
+ -2
+ ],
+ [
+ -18,
+ -7
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -10,
+ -7
+ ],
+ [
+ -33,
+ -2
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -9,
+ -13
+ ],
+ [
+ -14,
+ -8
+ ],
+ [
+ -36,
+ -29
+ ],
+ [
+ -4,
+ -6
+ ]
+ ],
+ [
+ [
+ 9402,
+ 4200
+ ],
+ [
+ -5,
+ 12
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 0,
+ 18
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 1,
+ 18
+ ],
+ [
+ 0,
+ 19
+ ],
+ [
+ 1,
+ 18
+ ]
+ ],
+ [
+ [
+ 9415,
+ 4403
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 0,
+ -2
+ ]
+ ],
+ [
+ [
+ 9096,
+ 3799
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -2,
+ 1
+ ]
+ ],
+ [
+ [
+ 9088,
+ 3809
+ ],
+ [
+ 7,
+ 13
+ ],
+ [
+ 5,
+ -11
+ ],
+ [
+ 5,
+ -12
+ ],
+ [
+ -8,
+ -16
+ ],
+ [
+ -1,
+ 16
+ ]
+ ],
+ [
+ [
+ 9241,
+ 3976
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ -7,
+ -15
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ 9,
+ -23
+ ],
+ [
+ 2,
+ -36
+ ],
+ [
+ 8,
+ -24
+ ],
+ [
+ 11,
+ -28
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -4,
+ -17
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ 0,
+ -9
+ ]
+ ],
+ [
+ [
+ 9275,
+ 3716
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ 30
+ ],
+ [
+ -1,
+ 31
+ ],
+ [
+ -1,
+ 30
+ ],
+ [
+ -1,
+ 30
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ -1,
+ 30
+ ],
+ [
+ -1,
+ 31
+ ],
+ [
+ -1,
+ 30
+ ]
+ ],
+ [
+ [
+ 9208,
+ 3958
+ ],
+ [
+ 7,
+ 15
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 8,
+ -5
+ ]
+ ],
+ [
+ [
+ 8669,
+ 1064
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -4,
+ -2
+ ]
+ ],
+ [
+ [
+ 8688,
+ 1075
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ 3,
+ -9
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -3,
+ -2
+ ]
+ ],
+ [
+ [
+ 8709,
+ 1084
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 9,
+ -12
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -1,
+ -3
+ ]
+ ],
+ [
+ [
+ 8735,
+ 1097
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 14,
+ 5
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -5,
+ -2
+ ]
+ ],
+ [
+ [
+ 8754,
+ 1113
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -4,
+ -4
+ ]
+ ],
+ [
+ [
+ 8772,
+ 1132
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ -2,
+ -7
+ ]
+ ],
+ [
+ [
+ 8795,
+ 1178
+ ],
+ [
+ -18,
+ -36
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 7,
+ 19
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ -11,
+ -39
+ ]
+ ],
+ [
+ [
+ 8646,
+ 1428
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 6,
+ -14
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 7,
+ -1
+ ]
+ ],
+ [
+ [
+ 8642,
+ 1447
+ ],
+ [
+ -1,
+ -11
+ ],
+ [
+ -4,
+ 18
+ ],
+ [
+ -3,
+ 21
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 4,
+ -21
+ ]
+ ],
+ [
+ [
+ 8812,
+ 1585
+ ],
+ [
+ 2,
+ -14
+ ],
+ [
+ -9,
+ 33
+ ],
+ [
+ -10,
+ 51
+ ],
+ [
+ -5,
+ 39
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 4,
+ -22
+ ],
+ [
+ 15,
+ -77
+ ]
+ ],
+ [
+ [
+ 8388,
+ 2036
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -10,
+ 5
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 11,
+ 10
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ -15,
+ -17
+ ]
+ ],
+ [
+ [
+ 8694,
+ 2244
+ ],
+ [
+ 4,
+ -18
+ ],
+ [
+ 6,
+ -70
+ ],
+ [
+ 5,
+ -25
+ ],
+ [
+ 8,
+ -66
+ ],
+ [
+ 13,
+ -64
+ ],
+ [
+ 18,
+ -78
+ ],
+ [
+ 30,
+ -94
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ -1,
+ -17
+ ],
+ [
+ 1,
+ -18
+ ],
+ [
+ 4,
+ -21
+ ],
+ [
+ 7,
+ -32
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -10,
+ 47
+ ],
+ [
+ -1,
+ 27
+ ],
+ [
+ 1,
+ 39
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -2,
+ -13
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -4,
+ 22
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ 1,
+ -23
+ ],
+ [
+ 3,
+ -14
+ ],
+ [
+ 4,
+ -35
+ ],
+ [
+ 5,
+ -20
+ ],
+ [
+ 4,
+ -18
+ ],
+ [
+ 38,
+ -185
+ ],
+ [
+ 9,
+ -24
+ ],
+ [
+ 3,
+ -17
+ ],
+ [
+ 3,
+ -35
+ ],
+ [
+ 1,
+ -46
+ ],
+ [
+ -6,
+ -83
+ ],
+ [
+ -1,
+ -57
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -6,
+ -26
+ ],
+ [
+ -7,
+ -23
+ ],
+ [
+ -3,
+ -37
+ ],
+ [
+ -3,
+ -18
+ ],
+ [
+ -11,
+ -19
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -16,
+ -14
+ ],
+ [
+ -12,
+ 3
+ ],
+ [
+ -13,
+ -8
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -5,
+ 17
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 12,
+ -18
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -10,
+ 41
+ ],
+ [
+ -11,
+ 28
+ ],
+ [
+ -2,
+ 19
+ ],
+ [
+ -18,
+ 12
+ ],
+ [
+ -13,
+ 17
+ ],
+ [
+ -9,
+ 31
+ ],
+ [
+ -5,
+ 55
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 6,
+ 20
+ ],
+ [
+ 6,
+ 18
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -4,
+ -15
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -4,
+ 29
+ ],
+ [
+ 1,
+ 35
+ ],
+ [
+ 5,
+ 14
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -8,
+ 24
+ ],
+ [
+ -16,
+ 65
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 10,
+ 29
+ ],
+ [
+ 8,
+ 18
+ ],
+ [
+ 3,
+ 12
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -5,
+ 15
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ 9,
+ 75
+ ],
+ [
+ 8,
+ 47
+ ],
+ [
+ 1,
+ 55
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ -11,
+ 31
+ ],
+ [
+ -47,
+ 77
+ ],
+ [
+ -36,
+ 90
+ ],
+ [
+ -32,
+ 34
+ ],
+ [
+ -24,
+ -7
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -23,
+ -24
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -14,
+ -3
+ ],
+ [
+ -12,
+ -5
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -4,
+ 14
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -4,
+ 14
+ ],
+ [
+ -14,
+ 20
+ ],
+ [
+ -15,
+ 27
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -28,
+ 23
+ ],
+ [
+ -25,
+ 12
+ ],
+ [
+ 19,
+ 6
+ ],
+ [
+ 10,
+ -4
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -10,
+ -2
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -7,
+ -8
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -26,
+ -6
+ ],
+ [
+ -21,
+ -6
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 13,
+ 6
+ ],
+ [
+ 2,
+ 14
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -1,
+ -16
+ ],
+ [
+ -6,
+ -11
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ -17,
+ -9
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ 5,
+ 11
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -3,
+ -3
+ ]
+ ],
+ [
+ [
+ 8379,
+ 2295
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ 8,
+ -31
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 15,
+ -2
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 15,
+ -2
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 15,
+ -2
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 15,
+ -1
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 15,
+ -2
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 15,
+ -2
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 2,
+ 14
+ ],
+ [
+ 1,
+ 16
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ 1,
+ 15
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 19,
+ -13
+ ],
+ [
+ 15,
+ -1
+ ]
+ ],
+ [
+ [
+ 8701,
+ 2289
+ ],
+ [
+ -4,
+ -46
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 2,
+ 4
+ ]
+ ],
+ [
+ [
+ 8751,
+ 2491
+ ],
+ [
+ -5,
+ -16
+ ],
+ [
+ -11,
+ -10
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ -7,
+ -17
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -3,
+ -19
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ 1,
+ -13
+ ]
+ ],
+ [
+ [
+ 8323,
+ 3058
+ ],
+ [
+ 30,
+ -1
+ ],
+ [
+ 29,
+ -1
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ -1
+ ]
+ ],
+ [
+ [
+ 8440,
+ 3055
+ ],
+ [
+ 27,
+ 1
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 27,
+ 1
+ ],
+ [
+ 27,
+ 1
+ ]
+ ],
+ [
+ [
+ 8549,
+ 3058
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -4,
+ -13
+ ],
+ [
+ -13,
+ -25
+ ],
+ [
+ -4,
+ -18
+ ],
+ [
+ 17,
+ -21
+ ],
+ [
+ 10,
+ -17
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 3,
+ -13
+ ],
+ [
+ 20,
+ -67
+ ],
+ [
+ 21,
+ -34
+ ],
+ [
+ 9,
+ -17
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 19,
+ -27
+ ],
+ [
+ 6,
+ -15
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 4,
+ -15
+ ],
+ [
+ 7,
+ -13
+ ],
+ [
+ 11,
+ -11
+ ],
+ [
+ 8,
+ -25
+ ],
+ [
+ 5,
+ -40
+ ],
+ [
+ 5,
+ -23
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 11,
+ -34
+ ],
+ [
+ 3,
+ -20
+ ],
+ [
+ 0,
+ -18
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ 19,
+ -15
+ ]
+ ],
+ [
+ [
+ 2033,
+ 9
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -18,
+ 19
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ 1,
+ 49
+ ],
+ [
+ -6,
+ 40
+ ],
+ [
+ -8,
+ 30
+ ],
+ [
+ 6,
+ 15
+ ],
+ [
+ 7,
+ 12
+ ],
+ [
+ 8,
+ 23
+ ],
+ [
+ -7,
+ 29
+ ],
+ [
+ 2,
+ 18
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 19,
+ -21
+ ],
+ [
+ 38,
+ -33
+ ],
+ [
+ 10,
+ -22
+ ],
+ [
+ 2,
+ -24
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 10,
+ -15
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ -18,
+ -25
+ ],
+ [
+ -23,
+ -12
+ ],
+ [
+ -21,
+ -28
+ ],
+ [
+ -4,
+ -19
+ ]
+ ],
+ [
+ [
+ 1919,
+ 345
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ -6,
+ 17
+ ],
+ [
+ 10,
+ 3
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ -4,
+ -11
+ ]
+ ],
+ [
+ [
+ 1952,
+ 375
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 10,
+ 5
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 11,
+ -13
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -8,
+ -14
+ ],
+ [
+ -12,
+ -3
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -1,
+ 17
+ ],
+ [
+ -3,
+ 18
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -6,
+ 15
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 4,
+ -12
+ ]
+ ],
+ [
+ [
+ 1886,
+ 429
+ ],
+ [
+ 19,
+ -5
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 16,
+ -3
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -10,
+ -9
+ ],
+ [
+ -14,
+ 8
+ ],
+ [
+ -24,
+ 3
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 3,
+ -3
+ ]
+ ],
+ [
+ [
+ 1834,
+ 475
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -10,
+ -3
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -3,
+ 11
+ ],
+ [
+ -9,
+ 22
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 9,
+ 17
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 10,
+ -28
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 3,
+ -3
+ ]
+ ],
+ [
+ [
+ 1620,
+ 549
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 5,
+ 9
+ ],
+ [
+ 6,
+ 14
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -2,
+ -7
+ ]
+ ],
+ [
+ [
+ 1692,
+ 566
+ ],
+ [
+ -8,
+ -11
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -9,
+ 7
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ 6,
+ 19
+ ],
+ [
+ 13,
+ 15
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -3,
+ -8
+ ]
+ ],
+ [
+ [
+ 74,
+ 1761
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -1,
+ -1
+ ]
+ ],
+ [
+ [
+ 7871,
+ 4490
+ ],
+ [
+ 6,
+ -13
+ ],
+ [
+ 9,
+ -12
+ ],
+ [
+ 6,
+ -11
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ 6,
+ -11
+ ],
+ [
+ 10,
+ -12
+ ],
+ [
+ 6,
+ -10
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -2,
+ -15
+ ],
+ [
+ -8,
+ -14
+ ],
+ [
+ -14,
+ -12
+ ],
+ [
+ -15,
+ -9
+ ],
+ [
+ -17,
+ -4
+ ],
+ [
+ -9,
+ -11
+ ],
+ [
+ -3,
+ -17
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ 6,
+ -12
+ ],
+ [
+ 3,
+ -12
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ -4,
+ -21
+ ],
+ [
+ -9,
+ -29
+ ],
+ [
+ -10,
+ -19
+ ],
+ [
+ -12,
+ -9
+ ],
+ [
+ -5,
+ -13
+ ],
+ [
+ 2,
+ -17
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -5,
+ -3
+ ]
+ ],
+ [
+ [
+ 7800,
+ 4083
+ ],
+ [
+ -8,
+ 10
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -5,
+ 14
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -22,
+ -1
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -22,
+ -1
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -22,
+ 0
+ ],
+ [
+ -23,
+ -1
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -22,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -23,
+ -1
+ ],
+ [
+ -22,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ],
+ [
+ -23,
+ 0
+ ]
+ ],
+ [
+ [
+ 7411,
+ 4126
+ ],
+ [
+ -5,
+ 14
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -1,
+ 37
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 1,
+ 23
+ ],
+ [
+ -1,
+ 17
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -4,
+ 14
+ ],
+ [
+ -8,
+ 18
+ ],
+ [
+ -6,
+ 25
+ ],
+ [
+ -2,
+ 30
+ ],
+ [
+ -6,
+ 17
+ ],
+ [
+ -3,
+ 1
+ ]
+ ],
+ [
+ [
+ 7347,
+ 4490
+ ],
+ [
+ -2,
+ 15
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -8,
+ 13
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 5,
+ 13
+ ],
+ [
+ 4,
+ 21
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ 4,
+ 11
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -4,
+ 12
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ 13,
+ 0
+ ]
+ ],
+ [
+ [
+ 7350,
+ 4678
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 30,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 30,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 30,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 30,
+ 1
+ ]
+ ],
+ [
+ [
+ 7818,
+ 4679
+ ],
+ [
+ 0,
+ -12
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ 2,
+ -22
+ ],
+ [
+ 2,
+ -20
+ ],
+ [
+ 5,
+ -18
+ ],
+ [
+ 10,
+ -13
+ ],
+ [
+ 15,
+ -8
+ ],
+ [
+ 9,
+ -13
+ ],
+ [
+ 3,
+ -17
+ ],
+ [
+ 0,
+ -1
+ ]
+ ],
+ [
+ [
+ 6037,
+ 4869
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ]
+ ],
+ [
+ [
+ 6037,
+ 4392
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ]
+ ],
+ [
+ [
+ 5768,
+ 4392
+ ],
+ [
+ -33,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -33,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -33,
+ 0
+ ],
+ [
+ -33,
+ 0
+ ],
+ [
+ -34,
+ 0
+ ],
+ [
+ -33,
+ 0
+ ]
+ ],
+ [
+ [
+ 5501,
+ 4392
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 42
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 42
+ ],
+ [
+ -1,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 42
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ 6,
+ 29
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -10,
+ 3
+ ],
+ [
+ -6,
+ 10
+ ],
+ [
+ 0,
+ 18
+ ],
+ [
+ 7,
+ 27
+ ],
+ [
+ 16,
+ 36
+ ],
+ [
+ 8,
+ 26
+ ],
+ [
+ 2,
+ 15
+ ],
+ [
+ 9,
+ 35
+ ],
+ [
+ 17,
+ 55
+ ],
+ [
+ 6,
+ 35
+ ],
+ [
+ -4,
+ 16
+ ],
+ [
+ -8,
+ 14
+ ],
+ [
+ -14,
+ 15
+ ],
+ [
+ -9,
+ 16
+ ],
+ [
+ -3,
+ 8
+ ]
+ ],
+ [
+ [
+ 5511,
+ 5155
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ -6,
+ 19
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ -1,
+ 31
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ],
+ [
+ 0,
+ 31
+ ],
+ [
+ 0,
+ 30
+ ]
+ ],
+ [
+ [
+ 5499,
+ 5725
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ]
+ ],
+ [
+ [
+ 5588,
+ 5725
+ ],
+ [
+ 0,
+ -47
+ ],
+ [
+ 0,
+ -47
+ ],
+ [
+ 0,
+ -47
+ ],
+ [
+ 0,
+ -47
+ ],
+ [
+ 9,
+ -19
+ ],
+ [
+ 7,
+ -12
+ ],
+ [
+ 5,
+ -13
+ ],
+ [
+ 7,
+ -13
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 3,
+ -14
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 4,
+ -11
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 9,
+ -14
+ ],
+ [
+ 13,
+ -10
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 17,
+ -27
+ ],
+ [
+ 8,
+ -18
+ ],
+ [
+ 9,
+ -13
+ ],
+ [
+ 4,
+ -15
+ ],
+ [
+ 9,
+ -13
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 6,
+ 3
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 13,
+ 4
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ -3,
+ -21
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 1,
+ -17
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 3,
+ -18
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 8,
+ -5
+ ],
+ [
+ 8,
+ -10
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 10,
+ 16
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 6,
+ -9
+ ],
+ [
+ 6,
+ -5
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ 3,
+ -12
+ ],
+ [
+ 2,
+ -14
+ ],
+ [
+ 8,
+ -18
+ ],
+ [
+ 5,
+ -13
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -2,
+ -12
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 8,
+ -13
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 23,
+ -5
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 14,
+ -2
+ ],
+ [
+ 16,
+ 1
+ ],
+ [
+ 9,
+ -3
+ ],
+ [
+ 12,
+ 4
+ ],
+ [
+ 15,
+ -3
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 6,
+ -19
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 6,
+ -5
+ ]
+ ],
+ [
+ [
+ 8127,
+ 4487
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 1,
+ -25
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 4,
+ -27
+ ],
+ [
+ 5,
+ -18
+ ],
+ [
+ 3,
+ -7
+ ]
+ ],
+ [
+ [
+ 8153,
+ 4340
+ ],
+ [
+ 0,
+ -51
+ ],
+ [
+ -1,
+ -57
+ ],
+ [
+ 0,
+ -57
+ ],
+ [
+ 0,
+ -57
+ ],
+ [
+ 0,
+ -57
+ ],
+ [
+ 0,
+ -57
+ ],
+ [
+ 0,
+ -58
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ 5,
+ -19
+ ],
+ [
+ 4,
+ -18
+ ],
+ [
+ 1,
+ -19
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ -5,
+ -26
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ 0,
+ -15
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 5,
+ -17
+ ]
+ ],
+ [
+ [
+ 8106,
+ 3589
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -5,
+ -14
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ 3,
+ -16
+ ],
+ [
+ -7,
+ -14
+ ],
+ [
+ -18,
+ -10
+ ],
+ [
+ -10,
+ -9
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -13,
+ 4
+ ],
+ [
+ -23,
+ 14
+ ],
+ [
+ -15,
+ 0
+ ],
+ [
+ -8,
+ -16
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ 1,
+ -10
+ ]
+ ],
+ [
+ [
+ 8006,
+ 3437
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -5,
+ 12
+ ],
+ [
+ -7,
+ 21
+ ],
+ [
+ -1,
+ 17
+ ],
+ [
+ 3,
+ 13
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -3,
+ 13
+ ],
+ [
+ -2,
+ 14
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -9,
+ 19
+ ],
+ [
+ -18,
+ 26
+ ],
+ [
+ -13,
+ 16
+ ],
+ [
+ -9,
+ 7
+ ],
+ [
+ -10,
+ 13
+ ],
+ [
+ -11,
+ 20
+ ],
+ [
+ -6,
+ 15
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 5,
+ 28
+ ],
+ [
+ 15,
+ 61
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -12,
+ 6
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -8,
+ 15
+ ],
+ [
+ -6,
+ 37
+ ],
+ [
+ -17,
+ 39
+ ],
+ [
+ -26,
+ 41
+ ],
+ [
+ -15,
+ 28
+ ],
+ [
+ -4,
+ 15
+ ],
+ [
+ -4,
+ 22
+ ],
+ [
+ -3,
+ 29
+ ],
+ [
+ 0,
+ 25
+ ],
+ [
+ 5,
+ 29
+ ]
+ ],
+ [
+ [
+ 7871,
+ 4490
+ ],
+ [
+ 42,
+ -1
+ ],
+ [
+ 40,
+ 0
+ ],
+ [
+ 41,
+ -1
+ ],
+ [
+ 40,
+ 0
+ ],
+ [
+ 41,
+ -1
+ ],
+ [
+ 40,
+ 0
+ ],
+ [
+ 12,
+ 0
+ ]
+ ],
+ [
+ [
+ 8398,
+ 4335
+ ],
+ [
+ -1,
+ -62
+ ],
+ [
+ 0,
+ -62
+ ],
+ [
+ 0,
+ -62
+ ],
+ [
+ -1,
+ -62
+ ],
+ [
+ 0,
+ -62
+ ],
+ [
+ 0,
+ -62
+ ],
+ [
+ 0,
+ -62
+ ],
+ [
+ -1,
+ -63
+ ]
+ ],
+ [
+ [
+ 8395,
+ 3838
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -9,
+ -10
+ ],
+ [
+ -17,
+ -11
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -9,
+ -1
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ 2,
+ -17
+ ],
+ [
+ -3,
+ -12
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -6,
+ -14
+ ],
+ [
+ -5,
+ -23
+ ],
+ [
+ -5,
+ -15
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -8,
+ 2
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -9,
+ 14
+ ],
+ [
+ -9,
+ 3
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -5,
+ -13
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -6,
+ 10
+ ],
+ [
+ -15,
+ 13
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -2,
+ -2
+ ]
+ ],
+ [
+ [
+ 8153,
+ 4340
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 19,
+ 17
+ ]
+ ],
+ [
+ [
+ 8212,
+ 4346
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 27,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 27,
+ 0
+ ],
+ [
+ 27,
+ 0
+ ],
+ [
+ 27,
+ 0
+ ],
+ [
+ 28,
+ 0
+ ],
+ [
+ 0,
+ -11
+ ]
+ ],
+ [
+ [
+ 7515,
+ 3439
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ]
+ ],
+ [
+ [
+ 6849,
+ 4011
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 19,
+ 0
+ ],
+ [
+ 16,
+ 0
+ ]
+ ],
+ [
+ [
+ 7449,
+ 4011
+ ],
+ [
+ 21,
+ -25
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 7,
+ 4
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 3,
+ -15
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -7,
+ -18
+ ],
+ [
+ 2,
+ -17
+ ],
+ [
+ 10,
+ -16
+ ],
+ [
+ 6,
+ -15
+ ],
+ [
+ 3,
+ -16
+ ],
+ [
+ 6,
+ -13
+ ],
+ [
+ 14,
+ -13
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 1,
+ -25
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -25
+ ],
+ [
+ 0,
+ -25
+ ]
+ ],
+ [
+ [
+ 7970,
+ 3344
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ]
+ ],
+ [
+ [
+ 7976,
+ 3344
+ ],
+ [
+ -6,
+ 0
+ ]
+ ],
+ [
+ [
+ 8594,
+ 3715
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 1,
+ -29
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 10,
+ -22
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 3,
+ -9
+ ],
+ [
+ 4,
+ -12
+ ],
+ [
+ 10,
+ -27
+ ],
+ [
+ 16,
+ -22
+ ],
+ [
+ 12,
+ -6
+ ]
+ ],
+ [
+ [
+ 8652,
+ 3542
+ ],
+ [
+ -34,
+ -47
+ ],
+ [
+ -15,
+ -16
+ ],
+ [
+ -15,
+ -14
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -4,
+ -15
+ ],
+ [
+ -9,
+ -13
+ ],
+ [
+ -5,
+ -14
+ ],
+ [
+ -14,
+ -12
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -24,
+ -15
+ ],
+ [
+ -14,
+ -5
+ ],
+ [
+ -9,
+ -10
+ ]
+ ],
+ [
+ [
+ 8499,
+ 3363
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -32,
+ 2
+ ],
+ [
+ -31,
+ 2
+ ],
+ [
+ -31,
+ 2
+ ],
+ [
+ -31,
+ 1
+ ],
+ [
+ -32,
+ 2
+ ],
+ [
+ -31,
+ 2
+ ],
+ [
+ -31,
+ 2
+ ],
+ [
+ -31,
+ 2
+ ],
+ [
+ -30,
+ -1
+ ],
+ [
+ -30,
+ -1
+ ],
+ [
+ -30,
+ -1
+ ],
+ [
+ -30,
+ -1
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -13,
+ 2
+ ],
+ [
+ 4,
+ -19
+ ],
+ [
+ 0,
+ -17
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -14,
+ 0
+ ],
+ [
+ -15,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -15,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -15,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -18,
+ 0
+ ]
+ ],
+ [
+ [
+ 7979,
+ 3343
+ ],
+ [
+ 5,
+ 17
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 5,
+ 18
+ ],
+ [
+ 2,
+ 18
+ ],
+ [
+ 1,
+ 19
+ ],
+ [
+ -3,
+ 15
+ ]
+ ],
+ [
+ [
+ 8395,
+ 3838
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 6,
+ -15
+ ],
+ [
+ 6,
+ -21
+ ],
+ [
+ 10,
+ -12
+ ],
+ [
+ 15,
+ -5
+ ],
+ [
+ 11,
+ -8
+ ],
+ [
+ 7,
+ -12
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 9,
+ -10
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 15
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 3,
+ -16
+ ],
+ [
+ 8,
+ -16
+ ],
+ [
+ 12,
+ -18
+ ],
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ [
+ 7769,
+ 2009
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -15,
+ 17
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ 8,
+ 6
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -2,
+ -7
+ ]
+ ],
+ [
+ [
+ 8030,
+ 2049
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ -1,
+ -8
+ ]
+ ],
+ [
+ [
+ 8035,
+ 2067
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 2,
+ 29
+ ],
+ [
+ -3,
+ 25
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 2,
+ -13
+ ],
+ [
+ -2,
+ -24
+ ]
+ ],
+ [
+ [
+ 8000,
+ 2120
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 8,
+ 11
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -1,
+ -8
+ ]
+ ],
+ [
+ [
+ 7973,
+ 2141
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -33,
+ 19
+ ],
+ [
+ -8,
+ 16
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -10,
+ -19
+ ],
+ [
+ -7,
+ -26
+ ],
+ [
+ 11,
+ -14
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 16,
+ 5
+ ],
+ [
+ 9,
+ 13
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 7,
+ -5
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ 7,
+ -15
+ ],
+ [
+ 10,
+ -5
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ 6,
+ 10
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 4,
+ -11
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 9,
+ -10
+ ],
+ [
+ 6,
+ -12
+ ],
+ [
+ 24,
+ -17
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 6,
+ -17
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -5,
+ 17
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -25,
+ 15
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 0,
+ -18
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -1,
+ -11
+ ],
+ [
+ -1,
+ -11
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -5,
+ 24
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -11,
+ 1
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ -8,
+ -23
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -22,
+ 12
+ ],
+ [
+ -26,
+ 19
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -8,
+ 21
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -16,
+ 8
+ ],
+ [
+ -5,
+ 10
+ ],
+ [
+ -10,
+ 27
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ -6,
+ 16
+ ],
+ [
+ -12,
+ -7
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -15,
+ -7
+ ],
+ [
+ -37,
+ 7
+ ],
+ [
+ -11,
+ 7
+ ],
+ [
+ -15,
+ 16
+ ],
+ [
+ -20,
+ 12
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -10,
+ -2
+ ],
+ [
+ -27,
+ -2
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -2,
+ 5
+ ]
+ ],
+ [
+ [
+ 7589,
+ 2100
+ ],
+ [
+ 6,
+ 19
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ -1,
+ 32
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 3,
+ 17
+ ],
+ [
+ -1,
+ 17
+ ],
+ [
+ 5,
+ 19
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 4,
+ 21
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -6,
+ 21
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ -6,
+ 20
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -6,
+ 10
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ 28
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -5,
+ 16
+ ],
+ [
+ -13,
+ 23
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 25
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ]
+ ],
+ [
+ [
+ 7826,
+ 2679
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -6,
+ -14
+ ],
+ [
+ -12,
+ -17
+ ],
+ [
+ -8,
+ -21
+ ],
+ [
+ -3,
+ -25
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ 0,
+ -19
+ ],
+ [
+ -2,
+ -11
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ 3,
+ -20
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ -3,
+ -22
+ ],
+ [
+ -6,
+ -30
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 4,
+ -21
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ 4,
+ -14
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 2,
+ -1
+ ]
+ ],
+ [
+ [
+ 9730,
+ 4252
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -16,
+ 7
+ ],
+ [
+ 13,
+ 6
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 5,
+ -19
+ ],
+ [
+ 1,
+ -6
+ ]
+ ],
+ [
+ [
+ 9682,
+ 4273
+ ],
+ [
+ -25,
+ -9
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ 6,
+ 3
+ ],
+ [
+ 8,
+ 14
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 1,
+ -8
+ ]
+ ],
+ [
+ [
+ 9617,
+ 4336
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -7,
+ -1
+ ]
+ ],
+ [
+ [
+ 9415,
+ 4403
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 2,
+ 16
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 17
+ ]
+ ],
+ [
+ [
+ 9436,
+ 4536
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 9,
+ -1
+ ]
+ ],
+ [
+ [
+ 9506,
+ 4531
+ ],
+ [
+ 13,
+ 0
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 12,
+ 0
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 13,
+ 0
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 10,
+ 15
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 10,
+ 9
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 11,
+ -1
+ ]
+ ],
+ [
+ [
+ 9656,
+ 4559
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -6,
+ -13
+ ],
+ [
+ -10,
+ -19
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 17,
+ -6
+ ],
+ [
+ 7,
+ -7
+ ],
+ [
+ 11,
+ -36
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 10,
+ -10
+ ],
+ [
+ 3,
+ -25
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 12,
+ -6
+ ],
+ [
+ 14,
+ 8
+ ],
+ [
+ 12,
+ 11
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ -8,
+ 20
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 12,
+ -22
+ ],
+ [
+ 3,
+ -30
+ ],
+ [
+ 1,
+ -18
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -31,
+ -10
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -16,
+ -9
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ -1,
+ 20
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -25,
+ -32
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -1,
+ 24
+ ],
+ [
+ 5,
+ 20
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -5,
+ -7
+ ]
+ ],
+ [
+ [
+ 9256,
+ 3637
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 8,
+ 32
+ ],
+ [
+ 4,
+ 11
+ ],
+ [
+ -4,
+ -22
+ ],
+ [
+ -6,
+ -21
+ ],
+ [
+ -2,
+ -6
+ ]
+ ],
+ [
+ [
+ 9258,
+ 3637
+ ],
+ [
+ -2,
+ 0
+ ]
+ ],
+ [
+ [
+ 9275,
+ 3716
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ 0,
+ -17
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -6,
+ -22
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ -2,
+ -8
+ ]
+ ],
+ [
+ [
+ 9245,
+ 3634
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -13,
+ -3
+ ],
+ [
+ -4,
+ -8
+ ]
+ ],
+ [
+ [
+ 9219,
+ 3621
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -10,
+ 0
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ -5,
+ 10
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -8,
+ 8
+ ],
+ [
+ -5,
+ 15
+ ],
+ [
+ -3,
+ 11
+ ],
+ [
+ 3,
+ 20
+ ],
+ [
+ 6,
+ 3
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -10,
+ 16
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ 4,
+ 20
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 4,
+ 18
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -8,
+ -12
+ ],
+ [
+ -2,
+ 25
+ ],
+ [
+ 8,
+ 23
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 9,
+ 2
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ 1,
+ 16
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ 0,
+ -17
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -5,
+ 15
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -14,
+ 8
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 8,
+ -19
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ 4,
+ -40
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -7,
+ 19
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ 21,
+ -35
+ ],
+ [
+ 4,
+ -14
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -13,
+ 10
+ ],
+ [
+ -16,
+ 7
+ ],
+ [
+ -8,
+ 24
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -6,
+ 11
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -1,
+ 17
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 8,
+ 20
+ ],
+ [
+ 7,
+ 11
+ ],
+ [
+ 3,
+ 14
+ ],
+ [
+ -1,
+ 21
+ ]
+ ],
+ [
+ [
+ 9088,
+ 3809
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -10,
+ 16
+ ],
+ [
+ -17,
+ 12
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -12,
+ 8
+ ],
+ [
+ -6,
+ 7
+ ]
+ ],
+ [
+ [
+ 9033,
+ 3886
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -13,
+ -9
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -15,
+ -22
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -20,
+ -31
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -12,
+ -15
+ ],
+ [
+ 0,
+ 25
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 1,
+ 25
+ ],
+ [
+ 0,
+ 24
+ ]
+ ],
+ [
+ [
+ 8876,
+ 3958
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 20,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ]
+ ],
+ [
+ [
+ 9852,
+ 4811
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 3,
+ -9
+ ]
+ ],
+ [
+ [
+ 9891,
+ 4837
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ 6,
+ 12
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 4,
+ -14
+ ],
+ [
+ 0,
+ -6
+ ]
+ ],
+ [
+ [
+ 9662,
+ 4596
+ ],
+ [
+ -7,
+ 18
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ -9,
+ 17
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ 0,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ 0,
+ 19
+ ]
+ ],
+ [
+ [
+ 9631,
+ 5020
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 0,
+ 11
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 9,
+ 18
+ ],
+ [
+ 12,
+ 12
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ 7,
+ 13
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 0,
+ 15
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ 3,
+ 20
+ ],
+ [
+ 6,
+ 17
+ ],
+ [
+ 10,
+ 19
+ ],
+ [
+ 3,
+ 25
+ ],
+ [
+ 2,
+ 26
+ ],
+ [
+ 13,
+ 25
+ ],
+ [
+ 13,
+ 29
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ 15,
+ 30
+ ],
+ [
+ 10,
+ 21
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ 5,
+ 12
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 8,
+ -3
+ ],
+ [
+ -1,
+ -17
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 15,
+ 10
+ ],
+ [
+ 17,
+ 6
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 12,
+ -13
+ ],
+ [
+ 15,
+ -21
+ ],
+ [
+ 11,
+ -16
+ ],
+ [
+ 1,
+ -28
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -31
+ ],
+ [
+ 0,
+ -22
+ ],
+ [
+ 1,
+ -31
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -32
+ ],
+ [
+ 0,
+ -17
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ 8,
+ -13
+ ],
+ [
+ 14,
+ -13
+ ],
+ [
+ 10,
+ -3
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 2,
+ -19
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 9,
+ -3
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -18,
+ -29
+ ],
+ [
+ -16,
+ 4
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -4,
+ -13
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -6,
+ -23
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -2,
+ -12
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -10,
+ 6
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 7,
+ 12
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 3,
+ 11
+ ],
+ [
+ 0,
+ 11
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ -11,
+ -10
+ ],
+ [
+ 1,
+ -16
+ ],
+ [
+ -10,
+ -34
+ ],
+ [
+ 0,
+ -14
+ ],
+ [
+ -6,
+ -11
+ ],
+ [
+ -8,
+ -10
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -3,
+ -18
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -3,
+ -20
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ -9,
+ -4
+ ],
+ [
+ -10,
+ -13
+ ],
+ [
+ -8,
+ -18
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ -14,
+ -28
+ ],
+ [
+ -15,
+ -25
+ ],
+ [
+ -11,
+ -41
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -4,
+ -8
+ ]
+ ],
+ [
+ [
+ 8292,
+ 4984
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 1,
+ -5
+ ]
+ ],
+ [
+ [
+ 8330,
+ 5079
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 1,
+ -17
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -4,
+ -4
+ ]
+ ],
+ [
+ [
+ 8518,
+ 4344
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -29,
+ -1
+ ],
+ [
+ -30,
+ -2
+ ],
+ [
+ -30,
+ -2
+ ],
+ [
+ -30,
+ -2
+ ]
+ ],
+ [
+ [
+ 8212,
+ 4346
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 9,
+ 12
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 5,
+ 15
+ ],
+ [
+ 5,
+ 18
+ ],
+ [
+ 10,
+ 27
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 5,
+ 21
+ ],
+ [
+ 3,
+ 21
+ ],
+ [
+ 3,
+ 23
+ ],
+ [
+ 1,
+ 23
+ ],
+ [
+ 0,
+ 25
+ ],
+ [
+ -3,
+ 24
+ ],
+ [
+ -5,
+ 25
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -9,
+ 31
+ ],
+ [
+ -9,
+ 44
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 9,
+ 26
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -1,
+ 21
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -4,
+ 14
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 9,
+ 19
+ ],
+ [
+ 6,
+ 14
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 3,
+ 20
+ ],
+ [
+ 2,
+ 23
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 10,
+ 5
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 0,
+ 15
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 8,
+ 22
+ ],
+ [
+ 7,
+ 13
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 11
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -5,
+ -21
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 6,
+ 13
+ ],
+ [
+ 5,
+ 20
+ ],
+ [
+ 3,
+ 16
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ 8,
+ 1
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 6,
+ 10
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 12,
+ -12
+ ],
+ [
+ 11,
+ -7
+ ],
+ [
+ 10,
+ -2
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 25,
+ -15
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -8,
+ 5
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 10,
+ -18
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ 1,
+ -19
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ -1,
+ -16
+ ],
+ [
+ -1,
+ -26
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -8,
+ -12
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ -3,
+ -19
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -4,
+ -16
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 5,
+ 12
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 8,
+ 23
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 13,
+ 6
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 7,
+ -12
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ 6,
+ -42
+ ],
+ [
+ 8,
+ -68
+ ],
+ [
+ 5,
+ -38
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -7,
+ -53
+ ],
+ [
+ -5,
+ -22
+ ],
+ [
+ -9,
+ -13
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -7,
+ -21
+ ],
+ [
+ -2,
+ -4
+ ]
+ ],
+ [
+ [
+ 8419,
+ 5121
+ ],
+ [
+ 12,
+ -3
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ 0,
+ 4
+ ]
+ ],
+ [
+ [
+ 8514,
+ 5157
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 5,
+ -11
+ ],
+ [
+ 2,
+ -2
+ ]
+ ],
+ [
+ [
+ 8458,
+ 5202
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -1,
+ -2
+ ]
+ ],
+ [
+ [
+ 8457,
+ 5224
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ 5,
+ 9
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 2,
+ -9
+ ]
+ ],
+ [
+ [
+ 8145,
+ 4985
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 5,
+ 20
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -18,
+ 11
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -18,
+ 9
+ ],
+ [
+ -13,
+ 4
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -10,
+ 1
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -11,
+ 5
+ ],
+ [
+ -11,
+ 4
+ ],
+ [
+ -12,
+ 5
+ ],
+ [
+ -11,
+ 5
+ ],
+ [
+ -11,
+ 4
+ ],
+ [
+ -11,
+ 5
+ ],
+ [
+ -12,
+ 4
+ ],
+ [
+ -11,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ 2
+ ]
+ ],
+ [
+ [
+ 7893,
+ 5268
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 17,
+ 10
+ ],
+ [
+ 14,
+ 12
+ ],
+ [
+ 12,
+ 14
+ ],
+ [
+ 15,
+ 9
+ ],
+ [
+ 18,
+ 3
+ ],
+ [
+ 13,
+ 5
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 10,
+ 13
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ 10,
+ 12
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 15,
+ 15
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 23,
+ -5
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 12,
+ -27
+ ],
+ [
+ 5,
+ -11
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 17,
+ -2
+ ],
+ [
+ 8,
+ 1
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 10,
+ 14
+ ],
+ [
+ 11,
+ 12
+ ],
+ [
+ 16,
+ 13
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 14,
+ 5
+ ],
+ [
+ 13,
+ 0
+ ],
+ [
+ 17,
+ -3
+ ],
+ [
+ 16,
+ 3
+ ],
+ [
+ 14,
+ 9
+ ],
+ [
+ 13,
+ 5
+ ],
+ [
+ 11,
+ 1
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 0,
+ -15
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 11,
+ -2
+ ],
+ [
+ 6,
+ -5
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 4,
+ -12
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -32,
+ 8
+ ],
+ [
+ -10,
+ 1
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -5,
+ -14
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -15,
+ 22
+ ],
+ [
+ -12,
+ 11
+ ],
+ [
+ -14,
+ 8
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -12,
+ -1
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -6,
+ -14
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -12,
+ -9
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -4,
+ -13
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -4,
+ -22
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -6,
+ -13
+ ],
+ [
+ -8,
+ -24
+ ],
+ [
+ -8,
+ -22
+ ],
+ [
+ -10,
+ -22
+ ],
+ [
+ -6,
+ -12
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 0,
+ -9
+ ]
+ ],
+ [
+ [
+ 8090,
+ 5386
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -11,
+ -17
+ ],
+ [
+ -4,
+ -10
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -13,
+ 4
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 15,
+ 23
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 19,
+ 9
+ ],
+ [
+ 10,
+ 3
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -20,
+ -4
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -18,
+ -21
+ ]
+ ],
+ [
+ [
+ 8024,
+ 5522
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -10,
+ -5
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 35,
+ 29
+ ],
+ [
+ 15,
+ 10
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -9,
+ -11
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -25,
+ -20
+ ],
+ [
+ -4,
+ -2
+ ]
+ ],
+ [
+ [
+ 7740,
+ 5300
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ 0,
+ -28
+ ],
+ [
+ 0,
+ -27
+ ],
+ [
+ 0,
+ -28
+ ],
+ [
+ 0,
+ -27
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -24,
+ -23
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -5,
+ -15
+ ],
+ [
+ -8,
+ -17
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ 1,
+ -13
+ ],
+ [
+ 12,
+ -9
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -6,
+ -20
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ 1,
+ -24
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ 2,
+ -20
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -2,
+ -22
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 11,
+ -16
+ ],
+ [
+ 10,
+ -8
+ ],
+ [
+ 8,
+ -3
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 5,
+ -11
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 13,
+ -22
+ ],
+ [
+ 6,
+ -18
+ ],
+ [
+ 12,
+ -12
+ ],
+ [
+ 18,
+ -14
+ ],
+ [
+ 12,
+ -12
+ ],
+ [
+ 5,
+ -11
+ ],
+ [
+ 4,
+ -26
+ ],
+ [
+ 3,
+ -56
+ ]
+ ],
+ [
+ [
+ 7350,
+ 4678
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 42
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ 0,
+ 43
+ ],
+ [
+ -7,
+ 14
+ ],
+ [
+ -15,
+ 11
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -7,
+ 17
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 14,
+ 18
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 3,
+ 19
+ ]
+ ],
+ [
+ [
+ 7340,
+ 5144
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ 1,
+ 23
+ ],
+ [
+ -3,
+ 17
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ -10,
+ 28
+ ],
+ [
+ -3,
+ 22
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -1,
+ 29
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 2,
+ 15
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -2,
+ 68
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 0,
+ 32
+ ],
+ [
+ -8,
+ 33
+ ],
+ [
+ -3,
+ 11
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -7,
+ 22
+ ],
+ [
+ -4,
+ 25
+ ],
+ [
+ 1,
+ 22
+ ],
+ [
+ -2,
+ 16
+ ],
+ [
+ 1,
+ 12
+ ],
+ [
+ -2,
+ 19
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 0,
+ 17
+ ],
+ [
+ -9,
+ 59
+ ]
+ ],
+ [
+ [
+ 7280,
+ 5725
+ ],
+ [
+ 11,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 0,
+ 40
+ ],
+ [
+ 0,
+ 32
+ ],
+ [
+ 20,
+ -4
+ ],
+ [
+ 6,
+ -5
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 1,
+ -27
+ ],
+ [
+ 4,
+ -22
+ ],
+ [
+ 8,
+ -26
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 19,
+ -8
+ ],
+ [
+ 32,
+ -8
+ ],
+ [
+ 19,
+ -10
+ ],
+ [
+ 4,
+ -11
+ ],
+ [
+ 8,
+ -5
+ ],
+ [
+ 13,
+ 2
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ 8,
+ 11
+ ],
+ [
+ 11,
+ 2
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 15,
+ -9
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ 14,
+ -12
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 4,
+ -17
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 12,
+ 2
+ ],
+ [
+ 15,
+ -7
+ ],
+ [
+ 13,
+ -20
+ ],
+ [
+ 19,
+ -18
+ ],
+ [
+ 11,
+ -9
+ ],
+ [
+ 12,
+ 0
+ ],
+ [
+ 15,
+ 9
+ ],
+ [
+ 16,
+ 17
+ ],
+ [
+ 11,
+ 3
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 4,
+ -13
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 12,
+ 2
+ ],
+ [
+ 26,
+ -3
+ ],
+ [
+ 21,
+ 4
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 4,
+ -12
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 11,
+ 4
+ ],
+ [
+ 18,
+ -3
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -10,
+ -9
+ ],
+ [
+ -15,
+ -11
+ ],
+ [
+ -18,
+ -11
+ ],
+ [
+ -36,
+ -18
+ ],
+ [
+ -22,
+ -20
+ ],
+ [
+ -10,
+ -12
+ ],
+ [
+ -39,
+ -59
+ ],
+ [
+ -23,
+ -31
+ ],
+ [
+ -38,
+ -44
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -1,
+ -5
+ ]
+ ],
+ [
+ [
+ 7979,
+ 3343
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 0,
+ 1
+ ]
+ ],
+ [
+ [
+ 7970,
+ 3344
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ -1,
+ -12
+ ],
+ [
+ -5,
+ -14
+ ],
+ [
+ -1,
+ -6
+ ]
+ ],
+ [
+ [
+ 7515,
+ 3344
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ],
+ [
+ 0,
+ 24
+ ]
+ ],
+ [
+ [
+ 7449,
+ 4011
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -7,
+ 16
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -5,
+ 13
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ -5,
+ 20
+ ],
+ [
+ -3,
+ 6
+ ]
+ ],
+ [
+ [
+ 8059,
+ 2145
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 13,
+ -7
+ ],
+ [
+ 1,
+ -3
+ ]
+ ],
+ [
+ [
+ 8074,
+ 2175
+ ],
+ [
+ -27,
+ -3
+ ],
+ [
+ -11,
+ 10
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -13,
+ -9
+ ],
+ [
+ -15,
+ -6
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -11,
+ -23
+ ],
+ [
+ -7,
+ -6
+ ]
+ ],
+ [
+ [
+ 7903,
+ 3058
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ -1
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ]
+ ],
+ [
+ [
+ 6670,
+ 5144
+ ],
+ [
+ 0,
+ -44
+ ],
+ [
+ 0,
+ -45
+ ],
+ [
+ 0,
+ -44
+ ],
+ [
+ 1,
+ -44
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ]
+ ],
+ [
+ [
+ 6668,
+ 4964
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -23
+ ]
+ ],
+ [
+ [
+ 5588,
+ 5725
+ ],
+ [
+ 16,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 30,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 29,
+ 0
+ ]
+ ],
+ [
+ [
+ 6668,
+ 5725
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 1,
+ -37
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -37
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -37
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 1,
+ -37
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -36
+ ],
+ [
+ 0,
+ -37
+ ],
+ [
+ 0,
+ -36
+ ]
+ ],
+ [
+ [
+ 9140,
+ 2992
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 7,
+ -7
+ ]
+ ],
+ [
+ [
+ 9143,
+ 2989
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ 8,
+ 24
+ ],
+ [
+ 17,
+ 30
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ -14,
+ -26
+ ],
+ [
+ -13,
+ -31
+ ]
+ ],
+ [
+ [
+ 9208,
+ 3094
+ ],
+ [
+ -16,
+ -14
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ 11,
+ 10
+ ],
+ [
+ 7,
+ 3
+ ]
+ ],
+ [
+ [
+ 9230,
+ 3103
+ ],
+ [
+ -12,
+ -5
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 14,
+ 11
+ ],
+ [
+ 5,
+ 38
+ ],
+ [
+ 0,
+ 18
+ ],
+ [
+ -2,
+ 31
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 1,
+ -29
+ ],
+ [
+ 0,
+ -22
+ ],
+ [
+ -4,
+ -32
+ ],
+ [
+ -3,
+ -8
+ ]
+ ],
+ [
+ [
+ 9221,
+ 3221
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -6,
+ 21
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 0,
+ -4
+ ]
+ ],
+ [
+ [
+ 9199,
+ 3353
+ ],
+ [
+ 2,
+ 0
+ ]
+ ],
+ [
+ [
+ 9201,
+ 3353
+ ],
+ [
+ 9,
+ -61
+ ],
+ [
+ 18,
+ -67
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -13,
+ 44
+ ],
+ [
+ -7,
+ 32
+ ],
+ [
+ -7,
+ 53
+ ]
+ ],
+ [
+ [
+ 8958,
+ 2843
+ ],
+ [
+ -13,
+ 23
+ ],
+ [
+ -12,
+ 22
+ ],
+ [
+ -12,
+ 22
+ ],
+ [
+ -12,
+ 22
+ ],
+ [
+ -12,
+ 21
+ ],
+ [
+ -13,
+ 22
+ ],
+ [
+ -12,
+ 22
+ ],
+ [
+ -12,
+ 22
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 1
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ -12,
+ 1
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ -13,
+ 1
+ ],
+ [
+ 0,
+ 15
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ -8,
+ 19
+ ],
+ [
+ -5,
+ 10
+ ],
+ [
+ -10,
+ -9
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -15,
+ 1
+ ],
+ [
+ -14,
+ 2
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -15,
+ 1
+ ],
+ [
+ -14,
+ 1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -16,
+ -9
+ ],
+ [
+ -9,
+ -9
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -14,
+ -8
+ ],
+ [
+ -14,
+ -8
+ ],
+ [
+ -2,
+ 0
+ ]
+ ],
+ [
+ [
+ 8440,
+ 3055
+ ],
+ [
+ 4,
+ 41
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 5,
+ 24
+ ],
+ [
+ 12,
+ 20
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 19,
+ 5
+ ],
+ [
+ 21,
+ 19
+ ],
+ [
+ 14,
+ 17
+ ],
+ [
+ 12,
+ 5
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 10,
+ 17
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 10,
+ 3
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 12,
+ 35
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 2,
+ 14
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 4,
+ 15
+ ]
+ ],
+ [
+ [
+ 8680,
+ 3365
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ -1
+ ],
+ [
+ 33,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 33,
+ -1
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 23,
+ -1
+ ]
+ ],
+ [
+ [
+ 9192,
+ 3353
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 6,
+ -22
+ ],
+ [
+ 4,
+ -29
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ 4,
+ -14
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -4,
+ -13
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -10,
+ 11
+ ],
+ [
+ -4,
+ 14
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ -1,
+ -18
+ ],
+ [
+ 2,
+ -19
+ ],
+ [
+ -1,
+ -15
+ ],
+ [
+ 11,
+ -3
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ 13,
+ -1
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 12,
+ -4
+ ],
+ [
+ 1,
+ -17
+ ],
+ [
+ -1,
+ -17
+ ],
+ [
+ -1,
+ -19
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 2,
+ 33
+ ],
+ [
+ 11,
+ 13
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ 2,
+ -15
+ ],
+ [
+ -3,
+ -22
+ ],
+ [
+ -17,
+ -27
+ ],
+ [
+ -13,
+ -24
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -9,
+ 3
+ ],
+ [
+ -10,
+ 6
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ -10,
+ -4
+ ],
+ [
+ -13,
+ 6
+ ],
+ [
+ -14,
+ 12
+ ],
+ [
+ 6,
+ -13
+ ],
+ [
+ 34,
+ -25
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -13,
+ -15
+ ],
+ [
+ -8,
+ 2
+ ],
+ [
+ -19,
+ 29
+ ],
+ [
+ 9,
+ -25
+ ],
+ [
+ 7,
+ -10
+ ],
+ [
+ 14,
+ -6
+ ],
+ [
+ 26,
+ 9
+ ],
+ [
+ 8,
+ -10
+ ],
+ [
+ -7,
+ -17
+ ],
+ [
+ -7,
+ -13
+ ],
+ [
+ -9,
+ -1
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -14,
+ -1
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -11,
+ -18
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -2,
+ 14
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ 0,
+ -26
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ -13,
+ -14
+ ],
+ [
+ -12,
+ -18
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -10,
+ -26
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -4,
+ -21
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 0,
+ 16
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ -2,
+ -33
+ ],
+ [
+ -3,
+ -16
+ ],
+ [
+ -36,
+ 1
+ ],
+ [
+ -14,
+ -8
+ ]
+ ],
+ [
+ [
+ 7340,
+ 5144
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ]
+ ],
+ [
+ [
+ 6668,
+ 5725
+ ],
+ [
+ 10,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 27,
+ 0
+ ]
+ ],
+ [
+ [
+ 6669,
+ 4202
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ -1,
+ 48
+ ]
+ ],
+ [
+ [
+ 6668,
+ 4583
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 32,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 36,
+ 0
+ ],
+ [
+ 27,
+ -28
+ ],
+ [
+ 16,
+ -9
+ ],
+ [
+ 7,
+ 8
+ ],
+ [
+ 17,
+ 5
+ ],
+ [
+ 25,
+ 1
+ ],
+ [
+ 16,
+ -4
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 13,
+ -10
+ ],
+ [
+ 19,
+ -11
+ ],
+ [
+ 12,
+ -12
+ ],
+ [
+ 3,
+ -13
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 7,
+ -2
+ ]
+ ],
+ [
+ [
+ 9662,
+ 4596
+ ],
+ [
+ -4,
+ -25
+ ],
+ [
+ -2,
+ -12
+ ]
+ ],
+ [
+ [
+ 9506,
+ 4531
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -5,
+ 12
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 3,
+ 15
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 3,
+ 36
+ ],
+ [
+ 3,
+ 20
+ ],
+ [
+ 2,
+ 38
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 4,
+ 18
+ ],
+ [
+ 6,
+ 15
+ ],
+ [
+ 5,
+ 17
+ ],
+ [
+ 5,
+ 16
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 4,
+ 20
+ ],
+ [
+ 2,
+ 35
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 12,
+ 5
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 13,
+ 14
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -4,
+ 23
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 10,
+ 26
+ ],
+ [
+ -2,
+ 15
+ ],
+ [
+ 2,
+ 4
+ ]
+ ],
+ [
+ [
+ 9592,
+ 4966
+ ],
+ [
+ 9,
+ 36
+ ],
+ [
+ 8,
+ 17
+ ],
+ [
+ 11,
+ -5
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 5,
+ 6
+ ]
+ ],
+ [
+ [
+ 9356,
+ 3950
+ ],
+ [
+ -10,
+ -29
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 13,
+ 35
+ ],
+ [
+ -3,
+ -12
+ ]
+ ],
+ [
+ [
+ 9272,
+ 4008
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 11,
+ 12
+ ],
+ [
+ 15,
+ 14
+ ],
+ [
+ -21,
+ 48
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -5,
+ 23
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -1,
+ 18
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -5,
+ 17
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 9,
+ 10
+ ],
+ [
+ 10,
+ 20
+ ],
+ [
+ 7,
+ 22
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 7,
+ 7
+ ]
+ ],
+ [
+ [
+ 9306,
+ 4270
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ 9,
+ -9
+ ]
+ ],
+ [
+ [
+ 9377,
+ 4200
+ ],
+ [
+ -2,
+ -15
+ ],
+ [
+ -9,
+ -30
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ 2,
+ -14
+ ],
+ [
+ 17,
+ -5
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ -3,
+ -16
+ ],
+ [
+ -2,
+ -18
+ ],
+ [
+ -2,
+ -29
+ ],
+ [
+ -3,
+ -26
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 2,
+ 31
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -5,
+ -40
+ ],
+ [
+ -8,
+ -22
+ ],
+ [
+ -6,
+ -15
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ -2,
+ -13
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -13,
+ -40
+ ],
+ [
+ -12,
+ -11
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 3,
+ 18
+ ],
+ [
+ 2,
+ 19
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -8,
+ 14
+ ],
+ [
+ -11,
+ 11
+ ],
+ [
+ -16,
+ 29
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -1,
+ 13
+ ],
+ [
+ 5,
+ 21
+ ],
+ [
+ 5,
+ 15
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 18,
+ 8
+ ],
+ [
+ 4,
+ 12
+ ],
+ [
+ 3,
+ 10
+ ]
+ ],
+ [
+ [
+ 6761,
+ 3344
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -53
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -53
+ ],
+ [
+ -1,
+ -54
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -53
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -53
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ -1,
+ -53
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ 0,
+ -53
+ ],
+ [
+ 0,
+ -54
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -21,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 9,
+ -35
+ ],
+ [
+ 11,
+ -10
+ ]
+ ],
+ [
+ [
+ 6451,
+ 2441
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 1
+ ],
+ [
+ -19,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ -20,
+ 0
+ ],
+ [
+ 0,
+ -21
+ ],
+ [
+ 0,
+ -21
+ ],
+ [
+ 0,
+ -22
+ ],
+ [
+ 0,
+ -21
+ ],
+ [
+ -32,
+ 0
+ ],
+ [
+ -31,
+ -1
+ ],
+ [
+ -12,
+ 0
+ ]
+ ],
+ [
+ [
+ 6761,
+ 3439
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -23
+ ],
+ [
+ 0,
+ -24
+ ]
+ ],
+ [
+ [
+ 5232,
+ 4392
+ ],
+ [
+ 34,
+ 0
+ ],
+ [
+ 33,
+ 0
+ ],
+ [
+ 34,
+ 0
+ ],
+ [
+ 34,
+ 0
+ ],
+ [
+ 33,
+ 0
+ ],
+ [
+ 34,
+ 0
+ ],
+ [
+ 33,
+ 0
+ ],
+ [
+ 34,
+ 0
+ ]
+ ],
+ [
+ [
+ 5768,
+ 4392
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -30
+ ],
+ [
+ 0,
+ -29
+ ]
+ ],
+ [
+ [
+ 9352,
+ 4110
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ 5,
+ 18
+ ],
+ [
+ 7,
+ 8
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -4,
+ -4
+ ]
+ ],
+ [
+ [
+ 9502,
+ 4199
+ ],
+ [
+ -6,
+ -13
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 11,
+ 10
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ -39,
+ -32
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -12,
+ -10
+ ],
+ [
+ -11,
+ -6
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -39,
+ -23
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -31,
+ -12
+ ],
+ [
+ -14,
+ -1
+ ],
+ [
+ -12,
+ -4
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 7,
+ 13
+ ],
+ [
+ 11,
+ 8
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 9,
+ 1
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 19,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 16,
+ 18
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ -14,
+ -22
+ ],
+ [
+ -8,
+ -10
+ ]
+ ],
+ [
+ [
+ 8925,
+ 4587
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -2,
+ -4
+ ]
+ ],
+ [
+ [
+ 9165,
+ 4772
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ -3,
+ -5
+ ]
+ ],
+ [
+ [
+ 9179,
+ 4826
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -2,
+ -4
+ ]
+ ],
+ [
+ [
+ 9402,
+ 4200
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -10,
+ -17
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ 3,
+ 17
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 3,
+ 27
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ 5,
+ -22
+ ],
+ [
+ 1,
+ -26
+ ],
+ [
+ 0,
+ -1
+ ]
+ ],
+ [
+ [
+ 9306,
+ 4270
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -16,
+ 10
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -2,
+ 10
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -11,
+ 8
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -13,
+ 0
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ 0,
+ 26
+ ],
+ [
+ 0,
+ 1
+ ]
+ ],
+ [
+ [
+ 8850,
+ 4445
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 17,
+ 18
+ ],
+ [
+ 8,
+ 12
+ ],
+ [
+ 10,
+ 11
+ ],
+ [
+ 9,
+ 8
+ ],
+ [
+ 8,
+ 11
+ ],
+ [
+ 5,
+ 13
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -14,
+ 7
+ ],
+ [
+ 1,
+ 33
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 33,
+ 15
+ ],
+ [
+ 21,
+ 5
+ ],
+ [
+ 25,
+ 1
+ ],
+ [
+ 30,
+ -7
+ ],
+ [
+ 12,
+ -7
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 10,
+ 4
+ ],
+ [
+ 13,
+ 1
+ ],
+ [
+ 18,
+ -1
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 13,
+ 6
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 10,
+ 10
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -1,
+ 16
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ 10,
+ 14
+ ],
+ [
+ 37,
+ 41
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ 35,
+ 53
+ ],
+ [
+ 20,
+ 24
+ ],
+ [
+ 17,
+ 13
+ ],
+ [
+ 12,
+ 7
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 37,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ]
+ ],
+ [
+ [
+ 9427,
+ 4965
+ ],
+ [
+ 0,
+ -13
+ ],
+ [
+ -2,
+ -15
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ -2,
+ -34
+ ],
+ [
+ 6,
+ -26
+ ],
+ [
+ -2,
+ -17
+ ],
+ [
+ 1,
+ -19
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -2,
+ -11
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 4,
+ -31
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -4,
+ -26
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 5,
+ -12
+ ],
+ [
+ 0,
+ -21
+ ],
+ [
+ 0,
+ -16
+ ],
+ [
+ -1,
+ -18
+ ],
+ [
+ 0,
+ -26
+ ],
+ [
+ 0,
+ -19
+ ],
+ [
+ 0,
+ -18
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 3,
+ -11
+ ]
+ ],
+ [
+ [
+ 8782,
+ 4134
+ ],
+ [
+ -10,
+ -8
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ 0,
+ -16
+ ],
+ [
+ -6,
+ -34
+ ],
+ [
+ -12,
+ -53
+ ],
+ [
+ -6,
+ -33
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -8,
+ -18
+ ],
+ [
+ -15,
+ -22
+ ],
+ [
+ -12,
+ -13
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -6,
+ -12
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -3,
+ -16
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ 2,
+ -14
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -9,
+ -22
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ 1,
+ -10
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -10,
+ -3
+ ],
+ [
+ -10,
+ 6
+ ]
+ ],
+ [
+ [
+ 8518,
+ 4344
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 16,
+ -12
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 9,
+ -5
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ -24,
+ -9
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 11,
+ -11
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 10,
+ 6
+ ],
+ [
+ 14,
+ 6
+ ],
+ [
+ 14,
+ 3
+ ],
+ [
+ 14,
+ -1
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 17,
+ 23
+ ],
+ [
+ 19,
+ 19
+ ],
+ [
+ 33,
+ 24
+ ],
+ [
+ 31,
+ 18
+ ]
+ ],
+ [
+ [
+ 8782,
+ 4390
+ ],
+ [
+ 0,
+ -16
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ],
+ [
+ 0,
+ -20
+ ]
+ ],
+ [
+ [
+ 7527,
+ 2800
+ ],
+ [
+ -21,
+ 9
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -9,
+ 7
+ ],
+ [
+ -8,
+ 14
+ ],
+ [
+ -17,
+ 18
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -12,
+ -8
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -18,
+ -11
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -7,
+ 11
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -10,
+ 11
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -9,
+ 6
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -2,
+ -11
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -3,
+ -15
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -9,
+ -13
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ 0,
+ 11
+ ],
+ [
+ -11,
+ -1
+ ],
+ [
+ -12,
+ 1
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -10,
+ 14
+ ],
+ [
+ -11,
+ -3
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -16,
+ 11
+ ],
+ [
+ -12,
+ 1
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -1,
+ 15
+ ],
+ [
+ -5,
+ 14
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -8,
+ 10
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -10,
+ 3
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -16,
+ 24
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ 0,
+ 23
+ ],
+ [
+ -1,
+ 23
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -16,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -17,
+ 0
+ ]
+ ],
+ [
+ [
+ 4852,
+ 4392
+ ],
+ [
+ -11,
+ 24
+ ],
+ [
+ -5,
+ 34
+ ],
+ [
+ -1,
+ 15
+ ],
+ [
+ 1,
+ 38
+ ],
+ [
+ -3,
+ 17
+ ],
+ [
+ -9,
+ 27
+ ],
+ [
+ 4,
+ 24
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 10,
+ 63
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 7,
+ 10
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ 4,
+ 25
+ ],
+ [
+ 5,
+ 21
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 2,
+ 69
+ ],
+ [
+ 3,
+ 53
+ ],
+ [
+ 5,
+ 18
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ 2,
+ 24
+ ],
+ [
+ -2,
+ 25
+ ],
+ [
+ 10,
+ 119
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ 3,
+ 19
+ ],
+ [
+ -3,
+ 51
+ ],
+ [
+ 2,
+ 57
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 21,
+ 1
+ ],
+ [
+ 14,
+ 7
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 6,
+ -11
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 9,
+ 2
+ ]
+ ],
+ [
+ [
+ 4943,
+ 5184
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ 9,
+ -26
+ ],
+ [
+ 9,
+ -44
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 32,
+ -6
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 18,
+ 17
+ ],
+ [
+ 20,
+ 5
+ ],
+ [
+ 23,
+ -1
+ ],
+ [
+ 15,
+ -5
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 12,
+ -1
+ ],
+ [
+ 30,
+ 10
+ ],
+ [
+ 33,
+ 6
+ ],
+ [
+ 17,
+ 7
+ ],
+ [
+ 20,
+ 15
+ ],
+ [
+ 46,
+ 18
+ ],
+ [
+ 22,
+ 2
+ ],
+ [
+ 12,
+ 7
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 24,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ]
+ ],
+ [
+ [
+ 9272,
+ 4008
+ ],
+ [
+ -9,
+ -17
+ ],
+ [
+ -13,
+ -6
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -2,
+ -3
+ ]
+ ],
+ [
+ [
+ 8876,
+ 3958
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -11,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -11,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ -12,
+ 0
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ],
+ [
+ 0,
+ 22
+ ]
+ ],
+ [
+ [
+ 8782,
+ 4390
+ ],
+ [
+ 17,
+ 10
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 28,
+ 25
+ ]
+ ],
+ [
+ [
+ 9605,
+ 4294
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -1,
+ -11
+ ]
+ ],
+ [
+ [
+ 9616,
+ 4295
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 2,
+ 12
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ -1,
+ -31
+ ]
+ ],
+ [
+ [
+ 9617,
+ 4336
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 2,
+ -18
+ ],
+ [
+ -5,
+ -13
+ ],
+ [
+ -2,
+ -34
+ ],
+ [
+ -7,
+ -14
+ ],
+ [
+ -22,
+ -9
+ ],
+ [
+ -7,
+ 0
+ ]
+ ],
+ [
+ [
+ 8958,
+ 2843
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -24,
+ -29
+ ],
+ [
+ -7,
+ -12
+ ],
+ [
+ -20,
+ -48
+ ],
+ [
+ -5,
+ -31
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ -5,
+ -17
+ ],
+ [
+ 4,
+ -25
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -13,
+ -18
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -2,
+ -17
+ ],
+ [
+ -11,
+ -16
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -11,
+ 4
+ ],
+ [
+ 4,
+ -16
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -9,
+ -6
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -10,
+ 2
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ 5,
+ -10
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ -2,
+ 13
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -8,
+ 21
+ ],
+ [
+ 0,
+ -16
+ ],
+ [
+ 3,
+ -13
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -6,
+ -14
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ 1,
+ -8
+ ]
+ ],
+ [
+ [
+ 6668,
+ 4583
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 48
+ ],
+ [
+ 0,
+ 47
+ ]
+ ],
+ [
+ [
+ 8499,
+ 3363
+ ],
+ [
+ 21,
+ 0
+ ],
+ [
+ 43,
+ 0
+ ],
+ [
+ 31,
+ 0
+ ],
+ [
+ 26,
+ -1
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 18,
+ 0
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 13,
+ 0
+ ]
+ ],
+ [
+ [
+ 7285,
+ 1372
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -8,
+ 41
+ ],
+ [
+ -12,
+ 94
+ ],
+ [
+ 0,
+ 53
+ ],
+ [
+ 2,
+ 19
+ ],
+ [
+ 3,
+ -76
+ ],
+ [
+ 13,
+ -95
+ ],
+ [
+ 3,
+ -27
+ ]
+ ],
+ [
+ [
+ 7269,
+ 1589
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ 1,
+ 17
+ ],
+ [
+ 7,
+ 37
+ ],
+ [
+ 15,
+ 49
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ -17,
+ -54
+ ],
+ [
+ -9,
+ -46
+ ]
+ ],
+ [
+ [
+ 7299,
+ 1704
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 5,
+ 15
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 7,
+ 20
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ -7,
+ -14
+ ],
+ [
+ -9,
+ -22
+ ]
+ ],
+ [
+ [
+ 7322,
+ 1752
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 15,
+ 19
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -12,
+ -12
+ ],
+ [
+ -19,
+ -23
+ ]
+ ],
+ [
+ [
+ 7477,
+ 1941
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ 20,
+ 30
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -15,
+ -21
+ ]
+ ],
+ [
+ [
+ 7589,
+ 2100
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -9,
+ -31
+ ],
+ [
+ 5,
+ -18
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -19,
+ -4
+ ],
+ [
+ -42,
+ -35
+ ],
+ [
+ -17,
+ -19
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 20,
+ 25
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -12,
+ -6
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ 5,
+ 20
+ ],
+ [
+ -2,
+ 18
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -5,
+ -14
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ 3,
+ -32
+ ],
+ [
+ 5,
+ -14
+ ],
+ [
+ 4,
+ -17
+ ],
+ [
+ -11,
+ -21
+ ],
+ [
+ -11,
+ -18
+ ],
+ [
+ -1,
+ -16
+ ],
+ [
+ -11,
+ -22
+ ],
+ [
+ -11,
+ -13
+ ],
+ [
+ -24,
+ -29
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -10,
+ -14
+ ],
+ [
+ -15,
+ -10
+ ],
+ [
+ -15,
+ -16
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ 9,
+ 14
+ ],
+ [
+ 11,
+ 13
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -14,
+ 7
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -7,
+ 10
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ 10,
+ -42
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -10,
+ -5
+ ],
+ [
+ -9,
+ 15
+ ],
+ [
+ -2,
+ -19
+ ],
+ [
+ -1,
+ -19
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 9,
+ 7
+ ],
+ [
+ -3,
+ -21
+ ],
+ [
+ -9,
+ -20
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -11,
+ 3
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ 12,
+ -32
+ ],
+ [
+ -8,
+ -48
+ ],
+ [
+ -5,
+ -17
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -14,
+ 15
+ ],
+ [
+ -8,
+ 12
+ ],
+ [
+ 7,
+ -32
+ ],
+ [
+ 19,
+ -10
+ ],
+ [
+ 1,
+ -12
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -4,
+ -13
+ ],
+ [
+ -3,
+ -16
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ 3,
+ -29
+ ],
+ [
+ 3,
+ -13
+ ],
+ [
+ 2,
+ -39
+ ],
+ [
+ 3,
+ -17
+ ],
+ [
+ 17,
+ -63
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ -1,
+ -13
+ ],
+ [
+ -12,
+ -4
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -13,
+ 17
+ ],
+ [
+ -20,
+ 12
+ ],
+ [
+ -25,
+ 4
+ ],
+ [
+ -17,
+ 9
+ ],
+ [
+ -9,
+ 13
+ ],
+ [
+ -10,
+ 8
+ ],
+ [
+ -10,
+ 3
+ ],
+ [
+ -9,
+ 7
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -10,
+ 8
+ ],
+ [
+ -13,
+ 4
+ ],
+ [
+ -8,
+ 9
+ ],
+ [
+ -6,
+ 22
+ ],
+ [
+ -5,
+ 38
+ ],
+ [
+ -7,
+ 23
+ ],
+ [
+ -12,
+ 29
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 2,
+ 17
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ -4,
+ 10
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 0,
+ 13
+ ],
+ [
+ -2,
+ 16
+ ],
+ [
+ -8,
+ 16
+ ],
+ [
+ -14,
+ 18
+ ],
+ [
+ -12,
+ 27
+ ],
+ [
+ -10,
+ 34
+ ],
+ [
+ -10,
+ 24
+ ],
+ [
+ -10,
+ 13
+ ],
+ [
+ -7,
+ 16
+ ],
+ [
+ -4,
+ 19
+ ],
+ [
+ -1,
+ 12
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ -6,
+ 21
+ ],
+ [
+ -14,
+ 39
+ ],
+ [
+ -8,
+ 29
+ ],
+ [
+ -2,
+ 19
+ ],
+ [
+ -8,
+ 21
+ ],
+ [
+ -15,
+ 25
+ ],
+ [
+ -9,
+ 17
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -24,
+ 33
+ ],
+ [
+ -6,
+ 21
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -13,
+ -1
+ ],
+ [
+ -21,
+ 2
+ ],
+ [
+ -16,
+ 6
+ ],
+ [
+ -9,
+ 9
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -12,
+ -3
+ ],
+ [
+ -11,
+ -21
+ ],
+ [
+ -9,
+ -38
+ ],
+ [
+ -4,
+ -24
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -6,
+ -11
+ ],
+ [
+ -6,
+ -18
+ ],
+ [
+ -7,
+ -8
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -15,
+ 13
+ ],
+ [
+ -22,
+ 26
+ ],
+ [
+ -17,
+ 16
+ ],
+ [
+ -12,
+ 6
+ ],
+ [
+ -11,
+ 12
+ ],
+ [
+ -9,
+ 18
+ ],
+ [
+ -9,
+ 12
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -9,
+ 20
+ ],
+ [
+ -11,
+ 33
+ ],
+ [
+ -5,
+ 26
+ ],
+ [
+ 0,
+ 28
+ ],
+ [
+ -14,
+ 60
+ ],
+ [
+ -7,
+ 25
+ ],
+ [
+ -6,
+ 12
+ ],
+ [
+ -11,
+ 15
+ ],
+ [
+ -16,
+ 16
+ ],
+ [
+ -21,
+ 33
+ ],
+ [
+ -27,
+ 50
+ ],
+ [
+ -19,
+ 30
+ ],
+ [
+ -11,
+ 10
+ ],
+ [
+ -10,
+ 18
+ ],
+ [
+ -8,
+ 25
+ ],
+ [
+ -8,
+ 17
+ ],
+ [
+ -1,
+ 0
+ ]
+ ],
+ [
+ [
+ 6037,
+ 4392
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -23
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -24
+ ],
+ [
+ 0,
+ -23
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ],
+ [
+ 23,
+ 0
+ ],
+ [
+ 22,
+ 0
+ ]
+ ],
+ [
+ [
+ 9245,
+ 3634
+ ],
+ [
+ -20,
+ -75
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -4,
+ -25
+ ],
+ [
+ -7,
+ -27
+ ],
+ [
+ -5,
+ 11
+ ],
+ [
+ -1,
+ 10
+ ],
+ [
+ 2,
+ 26
+ ],
+ [
+ 8,
+ 42
+ ],
+ [
+ 8,
+ 26
+ ],
+ [
+ 7,
+ 12
+ ],
+ [
+ 5,
+ 26
+ ]
+ ],
+ [
+ [
+ 9258,
+ 3637
+ ],
+ [
+ -9,
+ -29
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ 12,
+ 32
+ ]
+ ],
+ [
+ [
+ 9096,
+ 3799
+ ],
+ [
+ -1,
+ -22
+ ],
+ [
+ -5,
+ -10
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -9,
+ -14
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ -3,
+ -25
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 11,
+ 6
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 13,
+ -30
+ ],
+ [
+ 24,
+ -12
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 7,
+ -15
+ ],
+ [
+ 11,
+ -10
+ ],
+ [
+ 8,
+ -13
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -3,
+ -10
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -9,
+ -1
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -27,
+ 49
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -10,
+ 26
+ ],
+ [
+ -12,
+ 13
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ 16,
+ -25
+ ],
+ [
+ 7,
+ -18
+ ],
+ [
+ 12,
+ -25
+ ],
+ [
+ 9,
+ -10
+ ],
+ [
+ 6,
+ -17
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 16,
+ -11
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ 8,
+ -7
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ -1,
+ -14
+ ],
+ [
+ -12,
+ 5
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ -20,
+ 37
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 12,
+ -24
+ ],
+ [
+ 10,
+ -14
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ 6,
+ -12
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -9,
+ 13
+ ],
+ [
+ -2,
+ 15
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ -27,
+ 19
+ ],
+ [
+ -22,
+ 3
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 18,
+ -5
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 15,
+ -8
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 4,
+ -24
+ ],
+ [
+ 11,
+ -17
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 14,
+ 12
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ 13,
+ -4
+ ],
+ [
+ 3,
+ -10
+ ],
+ [
+ 2,
+ -18
+ ],
+ [
+ 4,
+ -21
+ ],
+ [
+ 3,
+ -20
+ ]
+ ],
+ [
+ [
+ 9199,
+ 3353
+ ],
+ [
+ -7,
+ 0
+ ]
+ ],
+ [
+ [
+ 8652,
+ 3542
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 11,
+ -13
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 11,
+ 6
+ ],
+ [
+ 10,
+ 1
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 1,
+ 11
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 19,
+ 13
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 9,
+ 8
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 5,
+ 14
+ ],
+ [
+ 20,
+ 42
+ ],
+ [
+ 6,
+ 26
+ ],
+ [
+ 8,
+ 16
+ ],
+ [
+ 2,
+ 14
+ ],
+ [
+ 7,
+ 12
+ ],
+ [
+ 4,
+ 27
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 10,
+ -7
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 4,
+ 10
+ ],
+ [
+ 4,
+ 17
+ ],
+ [
+ 5,
+ 11
+ ],
+ [
+ 2,
+ 13
+ ],
+ [
+ 3,
+ 9
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 11,
+ -1
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 5,
+ 10
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 10,
+ 15
+ ],
+ [
+ 13,
+ 31
+ ],
+ [
+ 2,
+ 19
+ ],
+ [
+ 4,
+ 14
+ ],
+ [
+ 1,
+ 14
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 11,
+ -15
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 15,
+ -21
+ ],
+ [
+ 11,
+ -13
+ ],
+ [
+ 4,
+ 15
+ ],
+ [
+ 5,
+ 23
+ ]
+ ],
+ [
+ [
+ 9427,
+ 4965
+ ],
+ [
+ 15,
+ 0
+ ],
+ [
+ 37,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 37,
+ 0
+ ],
+ [
+ 38,
+ 1
+ ]
+ ],
+ [
+ [
+ 4976,
+ 5384
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 3,
+ -11
+ ],
+ [
+ 0,
+ -3
+ ]
+ ],
+ [
+ [
+ 5017,
+ 5421
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ 0,
+ 12
+ ],
+ [
+ 2,
+ 13
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 3,
+ -9
+ ],
+ [
+ 4,
+ -9
+ ]
+ ],
+ [
+ [
+ 5008,
+ 5459
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 1,
+ -17
+ ]
+ ],
+ [
+ [
+ 5001,
+ 5566
+ ],
+ [
+ 5,
+ -25
+ ],
+ [
+ 1,
+ 10
+ ],
+ [
+ 13,
+ -18
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 14
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -5,
+ 10
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 5,
+ 13
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -14,
+ -10
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 2,
+ -8
+ ]
+ ],
+ [
+ [
+ 4979,
+ 5618
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 4,
+ -10
+ ],
+ [
+ 0,
+ -4
+ ]
+ ],
+ [
+ [
+ 4962,
+ 5632
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ -10,
+ 4
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ -2,
+ 12
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 9,
+ -14
+ ],
+ [
+ 1,
+ -7
+ ]
+ ],
+ [
+ [
+ 4982,
+ 5664
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 10,
+ -7
+ ]
+ ],
+ [
+ [
+ 4958,
+ 5725
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 3,
+ 0
+ ]
+ ],
+ [
+ [
+ 4943,
+ 5184
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -10,
+ 10
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -17,
+ 0
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -19,
+ -6
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -10,
+ -4
+ ],
+ [
+ 3,
+ 18
+ ],
+ [
+ -1,
+ 22
+ ],
+ [
+ 1,
+ 22
+ ],
+ [
+ 2,
+ -16
+ ],
+ [
+ 7,
+ -17
+ ],
+ [
+ 3,
+ 19
+ ],
+ [
+ 2,
+ 25
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -11,
+ 7
+ ],
+ [
+ -3,
+ 22
+ ],
+ [
+ 24,
+ 19
+ ],
+ [
+ -13,
+ 4
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -2,
+ 11
+ ],
+ [
+ -1,
+ 14
+ ],
+ [
+ -2,
+ 23
+ ],
+ [
+ -10,
+ 38
+ ],
+ [
+ -6,
+ 48
+ ],
+ [
+ -8,
+ 24
+ ],
+ [
+ -14,
+ 23
+ ],
+ [
+ -4,
+ 13
+ ],
+ [
+ -3,
+ 34
+ ],
+ [
+ 2,
+ 26
+ ],
+ [
+ -3,
+ 18
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 18,
+ -15
+ ],
+ [
+ 23,
+ -11
+ ],
+ [
+ 7,
+ -8
+ ],
+ [
+ 11,
+ -6
+ ],
+ [
+ 61,
+ -9
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 8,
+ 6
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 9,
+ -13
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 8,
+ 9
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ 3,
+ -12
+ ],
+ [
+ 6,
+ -16
+ ],
+ [
+ 2,
+ -10
+ ],
+ [
+ -11,
+ -27
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ -21,
+ -46
+ ],
+ [
+ -7,
+ -22
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 10,
+ 9
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ 0,
+ 10
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 6,
+ 15
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 8,
+ 10
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ 3,
+ 12
+ ],
+ [
+ 10,
+ 14
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ -1,
+ 11
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 2,
+ -20
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -9,
+ -11
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 1,
+ -14
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 8,
+ -16
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ 1,
+ -11
+ ],
+ [
+ -2,
+ -22
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -4,
+ -17
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -2,
+ 20
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ 10,
+ -2
+ ],
+ [
+ 10,
+ 3
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 6,
+ 21
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -2,
+ 25
+ ],
+ [
+ 0,
+ 15
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 6,
+ 15
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 7,
+ 15
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -3,
+ 10
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 4,
+ -17
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ -9,
+ 9
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ -7,
+ 15
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ 1,
+ 22
+ ],
+ [
+ -3,
+ 17
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -3,
+ 12
+ ],
+ [
+ -6,
+ 26
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 39,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 38,
+ 0
+ ],
+ [
+ 10,
+ 0
+ ]
+ ],
+ [
+ [
+ 8200,
+ 5010
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -3,
+ -11
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -9,
+ -16
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 7,
+ 15
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 2,
+ 10
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 3,
+ 10
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ -1,
+ -7
+ ]
+ ],
+ [
+ [
+ 8212,
+ 5031
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 2,
+ 11
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 0,
+ -8
+ ]
+ ],
+ [
+ [
+ 7866,
+ 5304
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 12,
+ 11
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ -3,
+ -3
+ ]
+ ],
+ [
+ [
+ 7881,
+ 5330
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 7,
+ 4
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ -1,
+ -7
+ ]
+ ],
+ [
+ [
+ 8145,
+ 4985
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -13,
+ -10
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ -9,
+ -22
+ ],
+ [
+ -4,
+ -14
+ ],
+ [
+ -3,
+ -14
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 6,
+ 19
+ ],
+ [
+ 6,
+ 11
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ -4,
+ -11
+ ],
+ [
+ -4,
+ -12
+ ],
+ [
+ -4,
+ -18
+ ],
+ [
+ -4,
+ -23
+ ],
+ [
+ -1,
+ -18
+ ],
+ [
+ 2,
+ -12
+ ],
+ [
+ -2,
+ -10
+ ],
+ [
+ -6,
+ -10
+ ],
+ [
+ -5,
+ -12
+ ],
+ [
+ -3,
+ -16
+ ],
+ [
+ -3,
+ -13
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 2,
+ -11
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ -7,
+ -24
+ ],
+ [
+ -2,
+ -12
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -5,
+ -18
+ ],
+ [
+ -1,
+ -10
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ 1,
+ -15
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 0,
+ -11
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 0,
+ -10
+ ],
+ [
+ -2,
+ -14
+ ],
+ [
+ 0,
+ -26
+ ],
+ [
+ 0,
+ -9
+ ]
+ ],
+ [
+ [
+ 7740,
+ 5300
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 8,
+ -7
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 30,
+ 12
+ ],
+ [
+ 13,
+ 8
+ ],
+ [
+ 12,
+ 15
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 17,
+ 17
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -5,
+ -11
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 14,
+ 8
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 10,
+ -11
+ ],
+ [
+ 8,
+ -6
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 5,
+ 2
+ ]
+ ],
+ [
+ [
+ 7866,
+ 5332
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 0,
+ -2
+ ]
+ ],
+ [
+ [
+ 7891,
+ 5350
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ -2,
+ -4
+ ]
+ ]
+ ]
+}
diff --git a/web/ons-demo/data/world.txt b/web/ons-demo/data/world.txt
new file mode 100644
index 0000000..04bfb53
--- /dev/null
+++ b/web/ons-demo/data/world.txt
@@ -0,0 +1,10 @@
+see: http://bost.ocks.org/mike/map/
+
+brew install gdal
+npm install -g topojson
+
+download: http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_1_states_provinces_lakes_shp.zip
+
+$ ogr2ogr -f GeoJSON -where "sr_adm0_a3 IN ('USA')" states.json ~/Desktop/ne_50m_admin_1_states_provinces_lakes_shp/ne_50m_admin_1_states_provinces_lakes_shp.shp
+$ topojson -o states.json world.json
+
diff --git a/web/ons-demo/index.html b/web/ons-demo/index.html
index 55237ac..ca930ec 100644
--- a/web/ons-demo/index.html
+++ b/web/ons-demo/index.html
@@ -1,53 +1,70 @@
<html>
-
<head>
<link rel="stylesheet" href="css/layout.default.css" type="text/css"/>
<link rel="stylesheet" href="css/skin.default.css" type="text/css"/>
- <script src="js/d3.v3.js" charset="utf-8"></script>
+</head>
+<body>
+<div id='background'>
+ <img id='background-image' src='assets/logo.svg'/>
+</div>
+
+<div id='contents'>
+
+ <div class='header'>
+ <img id='logo' src='assets/logo.svg'></img>
+ <div id='status'>
+ <div class='status'><span class='dynamic' id='activeFlows'>????</span><span class='static'>Flows</span></div>
+ <div class='status'><span class='dynamic' id='activeSwitches'>???</span><span class='static'>Active Switches</span></div>
+ </div>
+ <div id='lastUpdated' class='status'><span class='static'>Last updated:</span><span id='lastUpdate' class='dynamic'>Mon Mar 18 11:11:12 PDT 2013</span></div>
+ </div>
+
+ <div id='onos'>
+ <div id='controllers'></div>
+ <div id='actions'>
+ <div id='action-all' class='action'>ALL</div>
+ <div id='action-local' class='action'>LOCAL</div>
+ <div id='action-scale' class='action'>SCALE</div>
+ </div>
+ </div>
+
+ <div id='topologyArea'>
+ <div id='svg-container'></div>
+ </div>
+
+ <div id='selectedFlowsHeader'>
+ <div id='showFlowChooser' class='flowId'><div class='white-eye'></div></div>
+ <div class='flowId'>id</div>
+ <div class='srcDPID'>src</div>
+ <div class='dstDPID'>dst</div>
+ <div class='iperf'>iperf</div>
+ </div>
+
+ <div id='selectedFlows'></div>
+
+ <div id='flowChooser'></div>
+
+ <script src="d3/d3.v3.js" charset="utf-8"></script>
+ <script src="d3/topojson.v0.min.js"></script>
<script src="js/async.js"></script>
+ <script src="js/debug.js"></script>
+ <script src="js/constants.js"></script>
+ <script src="js/globals.js"></script>
<script src="js/utils.js"></script>
<script src="js/model.js"></script>
<script src="js/controller.js"></script>
-</head>
+ <script src="js/controllers.js"></script>
-<body>
+ <!-- choose ring or map layout -->
+ <!--script src="js/rings.js"></script-->
+ <script src="js/map.js"></script>
-<div id='columns'>
- <div id='left'>
- <div class='header'>
- <img id='logo' src='assets/logo.png'></img>
- </div>
- <div id='controllers'>
- <div class='header'>ONOS Nodes</div>
- <div id='controllerList'></div>
- </div>
- </div>
-
- <div id='right'>
- <div class='header'>
- <div id='status' class='top'>
- <div class='status'><span class='dynamic' id='activeFlows'>????</span><span class='static'>Flows</span></div>
- <div class='status'><span class='dynamic' id='activeSwitches'>???</span><span class='static'>Active Switches</span></div>
- </div>
- <div id='traceButton' class='button'>Trace</div>
- <div id='lastUpdated' class='status top'><span class='static'>Last updated:</span><span id='lastUpdate' class='dynamic'>Mon Mar 18 11:11:12 PDT 2013</span></div>
- </div>
- <div id='topology'>
- <div id='svg-container'></div>
- </div>
- </div>
+ <script src="js/topologyactions.js"></script>
+ <script src="js/topology.js"></script>
+ <script src="js/flows.js"></script>
+ <script src="js/init.js"></script>
+ <script src="js/app.js"></script>
</div>
-<div id='selectedFlowsHeader'>
- <div id='deleteFlow'></div>
- <div id='showFlowChooser' class='flowId'><div class='white-eye'></div></div>
- <div class='srcDPID'>src</div>
- <div class='dstDPID'>dst</div>
- <div class='iperf'>iperf</div>
-</div>
-<div id='selectedFlows'></div>
-<div id='flowChooser'></div>
-
-<script src="js/app.js"></script>
</body>
</html>
\ No newline at end of file
diff --git a/web/ons-demo/js/app.js b/web/ons-demo/js/app.js
index 6fa1bd3..2689b43 100644
--- a/web/ons-demo/js/app.js
+++ b/web/ons-demo/js/app.js
@@ -1,1206 +1,9 @@
/*global d3, document∆*/
-d3.selection.prototype.moveToFront = function() {
- return this.each(function(){
- this.parentNode.appendChild(this);
- });
-};
-var line = d3.svg.line()
- .x(function(d) {
- return d.x;
- })
- .y(function(d) {
- return d.y;
- });
-
-var model;
-var svg;
-var updateTopology;
-var pendingLinks = {};
-var selectedFlows = [];
-
-var pendingTimeout = 30000;
-
-var colors = [
- 'color1',
- 'color2',
- 'color3',
- 'color4',
- 'color7',
- 'color8',
- 'color9',
-// 'color11',
- 'color12'
-];
-colors.reverse();
-
-var controllerColorMap = {};
-
-function setPending(selection) {
- selection.classed('pending', false);
- setTimeout(function () {
- selection.classed('pending', true);
- })
-}
-
-function createTopologyView() {
-
- window.addEventListener('resize', function () {
- // this is too slow. instead detect first resize event and hide the paths that have explicit matrix applied
- // either that or is it possible to position the paths so they get the automatic transform as well?
-// updateTopology();
- });
-
- var svg = d3.select('#svg-container').append('svg:svg');
-
- svg.append("svg:defs").append("svg:marker")
- .attr("id", "arrow")
- .attr("viewBox", "0 -5 10 10")
- .attr("refX", -1)
- .attr("markerWidth", 5)
- .attr("markerHeight", 5)
- .attr("orient", "auto")
- .append("svg:path")
- .attr("d", "M0,-3L10,0L0,3");
-
- return svg.append('svg:svg').attr('id', 'viewBox').attr('viewBox', '0 0 1000 1000').attr('preserveAspectRatio', 'none').
- attr('id', 'viewbox').append('svg:g').attr('transform', 'translate(500 500)');
-}
-
-function updateSelectedFlowsTopology() {
- // DRAW THE FLOWS
- var topologyFlows = [];
- selectedFlows.forEach(function (flow) {
- if (flow) {
- topologyFlows.push(flow);
- }
- });
-
- var flows = d3.select('svg').selectAll('.flow').data(topologyFlows);
-
- flows.enter().append("svg:path").attr('class', 'flow')
- .attr('stroke-dasharray', '4, 10')
- .append('svg:animate')
- .attr('attributeName', 'stroke-dashoffset')
- .attr('attributeType', 'xml')
- .attr('from', '500')
- .attr('to', '-500')
- .attr('dur', '20s')
- .attr('repeatCount', 'indefinite');
-
- flows.exit().remove();
-
- flows.attr('d', function (d) {
- if (!d) {
- return;
- }
- var pts = [];
- if (!d.dataPath.flowEntries) {
- // create a temporary vector to indicate the pending flow
- var s1 = d3.select(document.getElementById(d.srcDpid));
- var s2 = d3.select(document.getElementById(d.dstDpid));
-
- var pt1 = document.querySelector('svg').createSVGPoint();
- pt1.x = s1.attr('x');
- pt1.y = s1.attr('y');
- pt1 = pt1.matrixTransform(s1[0][0].getCTM());
- pts.push(pt1);
-
- var pt2 = document.querySelector('svg').createSVGPoint();
- pt2.x = s2.attr('x');
- pt2.y = s2.attr('y');
- pt2 = pt2.matrixTransform(s2[0][0].getCTM());
- pts.push(pt2);
-
- } else {
- d.dataPath.flowEntries.forEach(function (flowEntry) {
- var s = d3.select(document.getElementById(flowEntry.dpid.value));
- // s[0] is null if the flow entry refers to a non-existent switch
- if (s[0][0]) {
- var pt = document.querySelector('svg').createSVGPoint();
- pt.x = s.attr('x');
- pt.y = s.attr('y');
- pt = pt.matrixTransform(s[0][0].getCTM());
- pts.push(pt);
- } else {
- console.log('flow refers to non-existent switch: ' + flowEntry.dpid.value);
- }
- });
- }
- if (pts.length) {
- return line(pts);
- } else {
- return "M0,0";
- }
- })
- .attr('id', function (d) {
- if (d) {
- return makeFlowKey(d);
- }
- })
- .classed('pending', function (d) {
- return d && (d.createPending || d.deletePending);
- });
-
- // "marching ants"
- flows.select('animate').attr('from', 500);
-
-}
-
-function updateSelectedFlowsTable() {
- function rowEnter(d) {
- var row = d3.select(this);
- row.append('div').classed('deleteFlow', true);
- row.append('div').classed('flowId', true);
- row.append('div').classed('srcDPID', true);
- row.append('div').classed('dstDPID', true);
- row.append('div').classed('iperf', true);
-
- row.select('.iperf')
- .append('div')
- .attr('class', 'iperf-container')
- .append('svg:svg')
- .attr('viewBox', '0 0 1000 32')
- .attr('preserveAspectRatio', 'none')
- .append('svg:g')
- .append('svg:path')
- .attr('class', 'iperfdata');
-
- row.on('mouseover', function (d) {
- if (d) {
- var path = document.getElementById(makeFlowKey(d));
- d3.select(path).classed('highlight', true);
- }
- });
- row.on('mouseout', function (d) {
- if (d) {
- var path = document.getElementById(makeFlowKey(d));
- d3.select(path).classed('highlight', false);
- }
- });
- }
-
- function rowUpdate(d) {
- var row = d3.select(this);
- row.attr('id', function (d) {
- if (d) {
- return makeSelectedFlowKey(d);
- }
- });
-
- if (!d || !hasIPerf(d)) {
- row.select('.iperfdata')
- .attr('d', 'M0,0');
- }
-
- row.select('.deleteFlow').on('click', function () {
- deselectFlow(d);
- });
- row.on('dblclick', function () {
- if (d) {
- var prompt = 'Delete flow ' + d.flowId + '?';
- if (confirm(prompt)) {
- deleteFlow(d);
- d.deletePending = true;
- updateSelectedFlows();
-
- setTimeout(function () {
- d.deletePending = false;
- updateSelectedFlows();
- }, pendingTimeout)
- };
- }
- });
-
- row.select('.flowId')
- .text(function (d) {
- if (d) {
- if (d.flowId) {
- return d.flowId;
- } else {
- return '0x--';
- }
- }
- })
- .classed('pending', function (d) {
- return d && (d.createPending || d.deletePending);
- });
-
- row.select('.srcDPID')
- .text(function (d) {
- if (d) {
- return d.srcDpid;
- }
- });
-
- row.select('.dstDPID')
- .text(function (d) {
- if (d) {
- return d.dstDpid;
- }
- });
- }
-
- var flows = d3.select('#selectedFlows')
- .selectAll('.selectedFlow')
- .data(selectedFlows);
-
- flows.enter()
- .append('div')
- .classed('selectedFlow', true)
- .each(rowEnter);
-
- flows.each(rowUpdate);
-
- flows.exit().remove();
-}
-
-// TODO: cancel the interval when the flow is desel
-function startIPerfForFlow(flow) {
- var duration = 10000; // seconds
- var interval = 100; // ms. this is defined by the server
- var updateRate = 2000; // ms
- var pointsToDisplay = 1000;
-
- function makePoints() {
- var pts = [];
- var i;
- for (i=0; i < pointsToDisplay; ++i) {
- var sample = flow.iperfData.samples[i];
- var height = 30 * sample/1000000;
- if (height > 30)
- height = 30;
- pts.push({
- x: i * 1000/(pointsToDisplay-1),
- y: 32 - height
- })
- }
- return pts;
- }
-
- if (flow.flowId) {
- console.log('starting iperf for: ' + flow.flowId);
- startIPerf(flow, duration, updateRate/interval);
- flow.iperfDisplayInterval = setInterval(function () {
- if (flow.iperfData) {
- while (flow.iperfData.samples.length < pointsToDisplay) {
- flow.iperfData.samples.push(0);
- }
- var iperfPath = d3.select(document.getElementById(makeSelectedFlowKey(flow))).select('path');
- iperfPath.attr('d', line(makePoints()));
- flow.iperfData.samples.shift();
- }
-
-
- }, interval);
- flow.iperfFetchInterval = setInterval(function () {
- getIPerfData(flow, function (data) {
- try {
- if (!flow.iperfData) {
- flow.iperfData = {
- samples: []
- };
- var i;
- for (i = 0; i < pointsToDisplay; ++i) {
- flow.iperfData.samples.push(0);
- }
- }
-
- var iperfData = JSON.parse(data);
-
-// console.log(iperfData.timestamp);
-
- // if the data is fresh
- if (flow.iperfData.timestamp && iperfData.timestamp != flow.iperfData.timestamp) {
-
- while (flow.iperfData.samples.length > pointsToDisplay + iperfData.samples.length) {
- flow.iperfData.samples.shift();
- }
-
- iperfData.samples.forEach(function (s) {
- flow.iperfData.samples.push(s);
- });
- }
- flow.iperfData.timestamp = iperfData.timestamp;
- } catch (e) {
- console.log('bad iperf data: ' + data);
- }
-// console.log(data);
- });
- }, updateRate/2); // over sample to avoid gaps
- }
-}
-
-function updateSelectedFlows() {
- // make sure that all of the selected flows are either
- // 1) valid (meaning they are in the latest list of flows)
- // 2) pending
- if (model) {
- var flowMap = {};
- model.flows.forEach(function (flow) {
- flowMap[makeFlowKey(flow)] = flow;
- });
-
- var newSelectedFlows = [];
- selectedFlows.forEach(function (flow) {
- if (flow) {
- var liveFlow = flowMap[makeFlowKey(flow)];
- if (liveFlow) {
- newSelectedFlows.push(liveFlow);
- liveFlow.deletePending = flow.deletePending;
- liveFlow.iperfFetchInterval = flow.iperfFetchInterval;
- liveFlow.iperfDisplayInterval = flow.iperfDisplayInterval;
- } else if (flow.createPending) {
- newSelectedFlows.push(flow);
- } else if (hasIPerf(flow)) {
- clearIPerf(flow);
- }
- }
- });
- selectedFlows = newSelectedFlows;
- }
- selectedFlows.forEach(function (flow) {
- if (!hasIPerf(flow)) {
- startIPerfForFlow(flow);
- }
- });
- while (selectedFlows.length < 3) {
- selectedFlows.push(null);
- }
-
- updateSelectedFlowsTable();
- updateSelectedFlowsTopology();
-}
-
-function selectFlow(flow) {
- var flowKey = makeFlowKey(flow);
- var alreadySelected = false;
- selectedFlows.forEach(function (f) {
- if (f && makeFlowKey(f) === flowKey) {
- alreadySelected = true;
- }
- });
-
- if (!alreadySelected) {
- selectedFlows.unshift(flow);
- selectedFlows = selectedFlows.slice(0, 3);
- updateSelectedFlows();
- }
-}
-
-function hasIPerf(flow) {
- return flow && flow.iperfFetchInterval;
-}
-
-function clearIPerf(flow) {
- console.log('clearing iperf interval for: ' + flow.flowId);
- clearInterval(flow.iperfFetchInterval);
- delete flow.iperfFetchInterval;
- clearInterval(flow.iperfDisplayInterval);
- delete flow.iperfDisplayInterval;
- delete flow.iperfData;
-}
-
-function deselectFlow(flow, ifCreatePending) {
- var flowKey = makeFlowKey(flow);
- var newSelectedFlows = [];
- selectedFlows.forEach(function (flow) {
- if (!flow ||
- flowKey !== makeFlowKey(flow) ||
- flowKey === makeFlowKey(flow) && ifCreatePending && !flow.createPending ) {
- newSelectedFlows.push(flow);
- } else {
- if (hasIPerf(flow)) {
- clearIPerf(flow);
- }
- }
- });
- selectedFlows = newSelectedFlows;
- while (selectedFlows.length < 3) {
- selectedFlows.push(null);
- }
-
- updateSelectedFlows();
-}
-
-function deselectFlowIfCreatePending(flow) {
- deselectFlow(flow, true);
-}
-
-function showFlowChooser() {
- function rowEnter(d) {
- var row = d3.select(this);
-
- row.append('div')
- .classed('black-eye', true).
- on('click', function () {
- selectFlow(d);
- });
-
- row.append('div')
- .classed('flowId', true)
- .text(function (d) {
- return d.flowId;
- });
-
- row.append('div')
- .classed('srcDPID', true)
- .text(function (d) {
- return d.srcDpid;
- });
-
-
- row.append('div')
- .classed('dstDPID', true)
- .text(function (d) {
- return d.dstDpid;
- });
-
- }
-
- var flows = d3.select('#flowChooser')
- .append('div')
- .style('pointer-events', 'auto')
- .selectAll('.selectedFlow')
- .data(model.flows)
- .enter()
- .append('div')
- .classed('selectedFlow', true)
- .each(rowEnter);
-
- setTimeout(function () {
- d3.select(document.body).on('click', function () {
- d3.select('#flowChooser').html('');
- d3.select(document.body).on('click', null);
- });
- }, 0);
-}
-
-
-
-function updateHeader(model) {
- d3.select('#lastUpdate').text(new Date());
- d3.select('#activeSwitches').text(model.edgeSwitches.length + model.aggregationSwitches.length + model.coreSwitches.length);
- d3.select('#activeFlows').text(model.flows.length);
-}
-
-function toRadians (angle) {
- return angle * (Math.PI / 180);
-}
-
-var widths = {
- edge: 6,
- aggregation: 12,
- core: 18
-}
-
-function createRingsFromModel(model) {
- var rings = [{
- radius: 3,
- width: widths.edge,
- switches: model.edgeSwitches,
- className: 'edge',
- angles: []
- }, {
- radius: 2.25,
- width: widths.aggregation,
- switches: model.aggregationSwitches,
- className: 'aggregation',
- angles: []
- }, {
- radius: 0.75,
- width: widths.core,
- switches: model.coreSwitches,
- className: 'core',
- angles: []
- }];
-
-
- var aggRanges = {};
-
- // arrange edge switches at equal increments
- var k = 360 / rings[0].switches.length;
- rings[0].switches.forEach(function (s, i) {
- var angle = k * i;
-
- rings[0].angles[i] = angle;
-
- // record the angle for the agg switch layout
- var dpid = s.dpid.split(':');
- dpid[7] = '01'; // the last component of the agg switch is always '01'
- var aggdpid = dpid.join(':');
- var aggRange = aggRanges[aggdpid];
- if (!aggRange) {
- aggRange = aggRanges[aggdpid] = {};
- aggRange.min = aggRange.max = angle;
- } else {
- aggRange.max = angle;
- }
- });
-
- // arrange aggregation switches to "fan out" to edge switches
- k = 360 / rings[1].switches.length;
- rings[1].switches.forEach(function (s, i) {
-// rings[1].angles[i] = k * i;
- var range = aggRanges[s.dpid];
-
- rings[1].angles[i] = (range.min + range.max)/2;
- });
-
- // find the association between core switches and aggregation switches
- var aggregationSwitchMap = {};
- model.aggregationSwitches.forEach(function (s, i) {
- aggregationSwitchMap[s.dpid] = i;
- });
-
- // put core switches next to linked aggregation switches
- k = 360 / rings[2].switches.length;
- rings[2].switches.forEach(function (s, i) {
-// rings[2].angles[i] = k * i;
- var associatedAggregationSwitches = model.configuration.association[s.dpid];
- // TODO: go between if there are multiple
- var index = aggregationSwitchMap[associatedAggregationSwitches[0]];
-
- rings[2].angles[i] = rings[1].angles[index];
- });
-
- // TODO: construct this form initially rather than converting. it works better because
- // it allows binding by dpid
- var testRings = [];
- rings.forEach(function (ring) {
- var testRing = [];
- ring.switches.forEach(function (s, i) {
- var testSwitch = {
- dpid: s.dpid,
- state: s.state,
- radius: ring.radius,
- width: ring.width,
- className: ring.className,
- angle: ring.angles[i],
- controller: s.controller
- };
- testRing.push(testSwitch);
- });
-
-
- testRings.push(testRing);
- });
-
-
-// return rings;
- return testRings;
-}
-
-function makeLinkKey(link) {
- return link['src-switch'] + '=>' + link['dst-switch'];
-}
-
-function makeFlowKey(flow) {
- return flow.srcDpid + '=>' + flow.dstDpid;
-}
-
-function makeSelectedFlowKey(flow) {
- return 'S' + makeFlowKey(flow);
-}
-
-function createLinkMap(links) {
- var linkMap = {};
- links.forEach(function (link) {
- var srcDPID = link['src-switch'];
- var dstDPID = link['dst-switch'];
-
- var srcMap = linkMap[srcDPID] || {};
-
- srcMap[dstDPID] = link;
-
- linkMap[srcDPID] = srcMap;
- });
- return linkMap;
-}
-
-// removes links from the pending list that are now in the model
-function reconcilePendingLinks(model) {
- var links = [];
- model.links.forEach(function (link) {
- links.push(link);
- delete pendingLinks[makeLinkKey(link)]
- })
- var linkId;
- for (linkId in pendingLinks) {
- links.push(pendingLinks[linkId]);
- }
- return links
-}
-
-updateTopology = function() {
-
- // DRAW THE SWITCHES
- var rings = svg.selectAll('.ring').data(createRingsFromModel(model));
-
- var links = reconcilePendingLinks(model);
- var linkMap = createLinkMap(links);
-
- function mouseOverSwitch(data) {
-
- d3.event.preventDefault();
-
- d3.select(document.getElementById(data.dpid + '-label')).classed('nolabel', false);
-
- if (data.highlighted) {
- return;
- }
-
- // only highlight valid link or flow destination by checking for class of existing highlighted circle
- var highlighted = svg.selectAll('.highlight')[0];
- if (highlighted.length == 1) {
- var s = d3.select(highlighted[0]).select('circle');
- // only allow links
- // edge->edge (flow)
- // aggregation->core
- // core->core
- if (data.className == 'edge' && !s.classed('edge') ||
- data.className == 'core' && !s.classed('core') && !s.classed('aggregation') ||
- data.className == 'aggregation' && !s.classed('core')) {
- return;
- }
-
- // don't highlight if there's already a link or flow
- // var map = linkMap[data.dpid];
- // console.log(map);
- // console.log(s.data()[0].dpid);
- // console.log(map[s.data()[0].dpid]);
- // if (map && map[s.data()[0].dpid]) {
- // return;
- // }
-
- // the second highlighted switch is the target for a link or flow
- data.target = true;
- }
-
- var node = d3.select(document.getElementById(data.dpid));
- node.classed('highlight', true).select('circle').transition().duration(100).attr("r", widths.core);
- data.highlighted = true;
- node.moveToFront();
- }
-
- function mouseOutSwitch(data) {
- d3.select(document.getElementById(data.dpid + '-label')).classed('nolabel', true);
-
- if (data.mouseDown)
- return;
-
- var node = d3.select(document.getElementById(data.dpid));
- node.classed('highlight', false).select('circle').transition().duration(100).attr("r", widths[data.className]);
- data.highlighted = false;
- data.target = false;
- }
-
- function mouseDownSwitch(data) {
- mouseOverSwitch(data);
- data.mouseDown = true;
- d3.select('#topology').classed('linking', true);
-
- d3.select('svg')
- .append('svg:path')
- .attr('id', 'linkVector')
- .attr('d', function () {
- var s = d3.select(document.getElementById(data.dpid));
-
- var pt = document.querySelector('svg').createSVGPoint();
- pt.x = s.attr('x');
- pt.y = s.attr('y');
- pt = pt.matrixTransform(s[0][0].getCTM());
-
- return line([pt, pt]);
- });
-
-
- if (data.className === 'core') {
- d3.selectAll('.edge').classed('nodrop', true);
- }
- if (data.className === 'edge') {
- d3.selectAll('.core').classed('nodrop', true);
- d3.selectAll('.aggregation').classed('nodrop', true);
- }
- if (data.className === 'aggregation') {
- d3.selectAll('.edge').classed('nodrop', true);
- d3.selectAll('.aggregation').classed('nodrop', true);
- }
- }
-
- function mouseUpSwitch(data) {
- if (data.mouseDown) {
- data.mouseDown = false;
- d3.select('#topology').classed('linking', false);
- d3.event.stopPropagation();
- d3.selectAll('.nodrop').classed('nodrop', false);
- }
- }
-
- function doubleClickSwitch(data) {
- var circle = d3.select(document.getElementById(data.dpid)).select('circle');
- if (data.state == 'ACTIVE') {
- var prompt = 'Deactivate ' + data.dpid + '?';
- if (confirm(prompt)) {
- switchDown(data);
- setPending(circle);
- }
- } else {
- var prompt = 'Activate ' + data.dpid + '?';
- if (confirm(prompt)) {
- switchUp(data);
- setPending(circle);
- }
- }
- }
-
- function ringEnter(data, i) {
- if (!data.length) {
- return;
- }
-
- // create the nodes
- var nodes = d3.select(this).selectAll("g")
- .data(data, function (data) {
- return data.dpid;
- })
- .enter().append("svg:g")
- .attr("id", function (data, i) {
- return data.dpid;
- })
- .attr("transform", function(data, i) {
- return "rotate(" + data.angle+ ")translate(" + data.radius * 150 + ")rotate(" + (-data.angle) + ")";
- });
-
- // add the cirles representing the switches
- nodes.append("svg:circle")
- .attr("transform", function(data, i) {
- var m = document.querySelector('#viewbox').getTransformToElement().inverse();
- if (data.scale) {
- m = m.scale(data.scale);
- }
- return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
- })
- .attr("x", function (data) {
- return -data.width / 2;
- })
- .attr("y", function (data) {
- return -data.width / 2;
- })
- .attr("r", function (data) {
- return data.width;
- });
-
- // setup the mouseover behaviors
- nodes.on('mouseover', mouseOverSwitch);
- nodes.on('mouseout', mouseOutSwitch);
- nodes.on('mouseup', mouseUpSwitch);
- nodes.on('mousedown', mouseDownSwitch);
-
- // only do switch up/down for core switches
- if (i == 2) {
- nodes.on('dblclick', doubleClickSwitch);
- }
- }
-
- // append switches
- rings.enter().append("svg:g")
- .attr("class", "ring")
- .each(ringEnter);
-
-
- function ringUpdate(data, i) {
- var nodes = d3.select(this).selectAll("g")
- .data(data, function (data) {
- return data.dpid;
- });
- nodes.select('circle')
- .each(function (data) {
- // if there's a pending state changed and then the state changes, clear the pending class
- var circle = d3.select(this);
- if (data.state === 'ACTIVE' && circle.classed('inactive') ||
- data.state === 'INACTIVE' && circle.classed('active')) {
- circle.classed('pending', false);
- }
- })
- .attr('class', function (data) {
- if (data.state === 'ACTIVE' && data.controller) {
- return data.className + ' active ' + controllerColorMap[data.controller];
- } else {
- return data.className + ' inactive ' + 'colorInactive';
- }
- });
- }
-
- // update switches
- rings.each(ringUpdate);
-
-
- // Now setup the labels
- // This is done separately because SVG draws in node order and we want the labels
- // always on top
- var labelRings = svg.selectAll('.labelRing').data(createRingsFromModel(model));
-
- d3.select(document.body).on('mousemove', function () {
- if (!d3.select('#topology').classed('linking')) {
- return;
- }
- var linkVector = document.getElementById('linkVector');
- if (!linkVector) {
- return;
- }
- linkVector = d3.select(linkVector);
-
- var highlighted = svg.selectAll('.highlight')[0];
- var s1 = null, s2 = null;
- if (highlighted.length > 1) {
- var s1 = d3.select(highlighted[0]);
- var s2 = d3.select(highlighted[1]);
-
- } else if (highlighted.length > 0) {
- var s1 = d3.select(highlighted[0]);
- }
- var src = s1;
- if (s2 && !s2.data()[0].target) {
- src = s2;
- }
- if (src) {
- linkVector.attr('d', function () {
- var srcPt = document.querySelector('svg').createSVGPoint();
- srcPt.x = src.attr('x');
- srcPt.y = src.attr('y');
- srcPt = srcPt.matrixTransform(src[0][0].getCTM());
-
- var svg = document.getElementById('topology');
- var mouse = d3.mouse(viewbox);
- var dstPt = document.querySelector('svg').createSVGPoint();
- dstPt.x = mouse[0];
- dstPt.y = mouse[1];
- dstPt = dstPt.matrixTransform(viewbox.getCTM());
-
- return line([srcPt, dstPt]);
- });
- }
- });
-
- d3.select(document.body).on('mouseup', function () {
- function clearHighlight() {
- svg.selectAll('circle').each(function (data) {
- data.mouseDown = false;
- d3.select('#topology').classed('linking', false);
- mouseOutSwitch(data);
- });
- d3.select('#linkVector').remove();
- };
-
- d3.selectAll('.nodrop').classed('nodrop', false);
-
- function removeLink(link) {
- var path1 = document.getElementById(link['src-switch'] + '=>' + link['dst-switch']);
- var path2 = document.getElementById(link['dst-switch'] + '=>' + link['src-switch']);
-
- if (path1) {
- setPending(d3.select(path1));
- }
- if (path2) {
- setPending(d3.select(path2));
- }
-
- linkDown(link);
- }
-
-
- var highlighted = svg.selectAll('.highlight')[0];
- if (highlighted.length == 2) {
- var s1Data = highlighted[0].__data__;
- var s2Data = highlighted[1].__data__;
-
- var srcData, dstData;
- if (s1Data.target) {
- dstData = s1Data;
- srcData = s2Data;
- } else {
- dstData = s2Data;
- srcData = s1Data;
- }
-
- if (s1Data.className == 'edge' && s2Data.className == 'edge') {
- var prompt = 'Create flow from ' + srcData.dpid + ' to ' + dstData.dpid + '?';
- if (confirm(prompt)) {
- addFlow(srcData, dstData);
-
- var flow = {
- dataPath: {
- srcPort: {
- dpid: {
- value: srcData.dpid
- }
- },
- dstPort: {
- dpid: {
- value: dstData.dpid
- }
- }
- },
- srcDpid: srcData.dpid,
- dstDpid: dstData.dpid,
- createPending: true
- };
-
- selectFlow(flow);
-
- setTimeout(function () {
- deselectFlowIfCreatePending(flow);
- }, pendingTimeout);
- }
- } else {
- var map = linkMap[srcData.dpid];
- if (map && map[dstData.dpid]) {
- var prompt = 'Remove link between ' + srcData.dpid + ' and ' + dstData.dpid + '?';
- if (confirm(prompt)) {
- removeLink(map[dstData.dpid]);
- }
- } else {
- map = linkMap[dstData.dpid];
- if (map && map[srcData.dpid]) {
- var prompt = 'Remove link between ' + dstData.dpid + ' and ' + srcData.dpid + '?';
- if (confirm(prompt)) {
- removeLink(map[srcData.dpid]);
- }
- } else {
- var prompt = 'Create link between ' + srcData.dpid + ' and ' + dstData.dpid + '?';
- if (confirm(prompt)) {
- var link1 = {
- 'src-switch': srcData.dpid,
- 'src-port': 1,
- 'dst-switch': dstData.dpid,
- 'dst-port': 1,
- pending: true
- };
- pendingLinks[makeLinkKey(link1)] = link1;
- var link2 = {
- 'src-switch': dstData.dpid,
- 'src-port': 1,
- 'dst-switch': srcData.dpid,
- 'dst-port': 1,
- pending: true
- };
- pendingLinks[makeLinkKey(link2)] = link2;
- updateTopology();
-
- linkUp(link1);
-
- // remove the pending links after 10s
- setTimeout(function () {
- delete pendingLinks[makeLinkKey(link1)];
- delete pendingLinks[makeLinkKey(link2)];
-
- updateTopology();
- }, pendingTimeout);
- }
- }
- }
- }
-
- clearHighlight();
- } else {
- clearHighlight();
- }
-
- });
-
- function labelRingEnter(data) {
- if (!data.length) {
- return;
- }
-
- // create the nodes
- var nodes = d3.select(this).selectAll("g")
- .data(data, function (data) {
- return data.dpid;
- })
- .enter().append("svg:g")
- .classed('nolabel', true)
- .attr("id", function (data) {
- return data.dpid + '-label';
- })
- .attr("transform", function(data, i) {
- return "rotate(" + data.angle+ ")translate(" + data.radius * 150 + ")rotate(" + (-data.angle) + ")";
- })
-
- // add the text nodes which show on mouse over
- nodes.append("svg:text")
- .text(function (data) {return data.dpid;})
- .attr("x", function (data) {
- if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
- if (data.className == 'edge') {
- return - data.width*3 - 4;
- } else {
- return - data.width - 4;
- }
- } else {
- if (data.className == 'edge') {
- return data.width*3 + 4;
- } else {
- return data.width + 4;
- }
- }
- })
- .attr("y", function (data) {
- var y;
- if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
- if (data.className == 'edge') {
- y = data.width*3/2 + 4;
- } else {
- y = data.width/2 + 4;
- }
- } else {
- if (data.className == 'edge') {
- y = data.width*3/2 + 4;
- } else {
- y = data.width/2 + 4;
- }
- }
- return y - 6;
- })
- .attr("text-anchor", function (data) {
- if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
- return "end";
- } else {
- return "start";
- }
- })
- .attr("transform", function(data) {
- var m = document.querySelector('#viewbox').getTransformToElement().inverse();
- if (data.scale) {
- m = m.scale(data.scale);
- }
- return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
- })
- }
-
- labelRings.enter().append("svg:g")
- .attr("class", "textRing")
- .each(labelRingEnter);
-
- // switches should not change during operation of the ui so no
- // rings.exit()
-
-
- // DRAW THE LINKS
-
- // key on link dpids since these will come/go during demo
- var links = d3.select('svg').selectAll('.link').data(links, function (d) {
- return d['src-switch']+'->'+d['dst-switch'];
- });
-
- // add new links
- links.enter().append("svg:path")
- .attr("class", "link");
-
- links.attr('id', function (d) {
- return makeLinkKey(d);
- })
- .attr("d", function (d) {
- var src = d3.select(document.getElementById(d['src-switch']));
- var dst = d3.select(document.getElementById(d['dst-switch']));
-
- var srcPt = document.querySelector('svg').createSVGPoint();
- srcPt.x = src.attr('x');
- srcPt.y = src.attr('y');
- srcPt = srcPt.matrixTransform(src[0][0].getCTM());
-
- var dstPt = document.querySelector('svg').createSVGPoint();
- dstPt.x = dst.attr('x');
- dstPt.y = dst.attr('y');
- dstPt = dstPt.matrixTransform(dst[0][0].getCTM());
-
- var midPt = document.querySelector('svg').createSVGPoint();
- midPt.x = (srcPt.x + dstPt.x)/2;
- midPt.y = (srcPt.y + dstPt.y)/2;
-
- return line([srcPt, midPt, dstPt]);
- })
- .attr("marker-mid", function(d) { return "url(#arrow)"; })
- .classed('pending', function (d) {
- return d.pending;
- });
-
-
- // remove old links
- links.exit().remove();
-}
-
-function updateControllers() {
- var controllers = d3.select('#controllerList').selectAll('.controller').data(model.controllers);
- controllers.enter().append('div')
- .each(function (c) {
- controllerColorMap[c] = colors.pop();
- d3.select(document.body).classed(controllerColorMap[c] + '-selected', true);
- })
- .text(function (d) {
- return d;
- })
- .append('div')
- .attr('class', 'black-eye');
-
- controllers.attr('class', function (d) {
- var color = 'colorInactive';
- if (model.activeControllers.indexOf(d) != -1) {
- color = controllerColorMap[d];
- }
- var className = 'controller ' + color;
- return className;
- });
-
- // this should never be needed
- // controllers.exit().remove();
-
- controllers.on('dblclick', function (c) {
- if (model.activeControllers.indexOf(c) != -1) {
- var prompt = 'Dectivate ' + c + '?';
- if (confirm(prompt)) {
- controllerDown(c);
- setPending(d3.select(this));
- };
- } else {
- var prompt = 'Activate ' + c + '?';
- if (confirm(prompt)) {
- controllerUp(c);
- setPending(d3.select(this));
- };
- }
- });
-
- controllers.select('.black-eye').on('click', function (c) {
- var allSelected = true;
- for (var key in controllerColorMap) {
- if (!d3.select(document.body).classed(controllerColorMap[key] + '-selected')) {
- allSelected = false;
- break;
- }
- }
- if (allSelected) {
- for (var key in controllerColorMap) {
- d3.select(document.body).classed(controllerColorMap[key] + '-selected', key == c)
- }
- } else {
- for (var key in controllerColorMap) {
- d3.select(document.body).classed(controllerColorMap[key] + '-selected', true)
- }
- }
-
- // var selected = d3.select(document.body).classed(controllerColorMap[c] + '-selected');
- // d3.select(document.body).classed(controllerColorMap[c] + '-selected', !selected);
- });
-
-
-}
-
-var modelString;
-function sync(svg) {
+function sync() {
var d = Date.now();
+
updateModel(function (newModel) {
// console.log('Update time: ' + (Date.now() - d)/1000 + 's');
@@ -1222,30 +25,30 @@
}
updateHeader(newModel);
+
+ d3.select('#contents').style('visibility', 'visible');
}
// do it again in 1s
setTimeout(function () {
- sync(svg)
+ sync()
}, 1000);
});
}
-svg = createTopologyView();
-updateSelectedFlows();
+appInit(function () {
+ // workaround for Chrome v25 bug
+ // if executed immediately, the view box transform logic doesn't work properly
+ // fixed in Chrome v27
+ setTimeout(function () {
-d3.select('#showFlowChooser').on('click', function () {
- showFlowChooser();
+ // workaround for another Chrome v25 bug
+ // viewbox transform stuff doesn't work in combination with browser zoom
+ // also works in Chrome v27
+ d3.select('#svg-container').style('zoom', window.document.body.clientWidth/window.document.width);
+
+ sync();
+ }, 100);
});
-// workaround for Chrome v25 bug
-// if executed immediately, the view box transform logic doesn't work properly
-// fixed in Chrome v27
-setTimeout(function () {
- // workaround for another Chrome v25 bug
- // viewbox transform stuff doesn't work in combination with browser zoom
- // also works in Chrome v27
- d3.select('#svg-container').style('zoom', window.document.body.clientWidth/window.document.width);
- sync(svg);
-}, 100);
diff --git a/web/ons-demo/js/constants.js b/web/ons-demo/js/constants.js
new file mode 100644
index 0000000..0ef0882
--- /dev/null
+++ b/web/ons-demo/js/constants.js
@@ -0,0 +1,30 @@
+/***************************************************************************************************
+timeout used by controller functions. after the timeout expires the "pending" action
+is removed and the topology view is whatever is reported by the API
+***************************************************************************************************/
+var pendingTimeout = 30000;
+
+/***************************************************************************************************
+CSS names for the pallette of colors used by the topology view
+***************************************************************************************************/
+var colors = [
+ 'color1',
+ 'color2',
+ 'color3',
+ 'color4',
+ 'color7',
+ 'color8',
+ 'color9',
+// 'color11',
+ 'color12'
+];
+colors.reverse();
+
+/***************************************************************************************************
+Widths of each switch type
+***************************************************************************************************/
+var widths = {
+ edge: 6,
+ aggregation: 12,
+ core: 18
+}
\ No newline at end of file
diff --git a/web/ons-demo/js/controller.js b/web/ons-demo/js/controller.js
index fbc381e..211fa97 100644
--- a/web/ons-demo/js/controller.js
+++ b/web/ons-demo/js/controller.js
@@ -50,6 +50,10 @@
var flowId = parseInt(flow.flowId, 16);
var url = '/proxy/gui/iperf/rate/' + flowId;
callURL(url, cb);
+ },
+ switchControllerCmd: function (cmd) {
+ var url = '/proxy/gui/switchctrl/' + cmd;
+ callURL(url);
}
};
@@ -92,3 +96,12 @@
function getIPerfData(flow, cb) {
controllerFunctions.getIPerfDataCmd(flow, cb);
}
+
+function switchLocal() {
+ controllerFunctions.switchControllerCmd('local');
+}
+
+function switchAll() {
+ controllerFunctions.switchControllerCmd('all');
+}
+
diff --git a/web/ons-demo/js/controllers.js b/web/ons-demo/js/controllers.js
new file mode 100644
index 0000000..abe966b
--- /dev/null
+++ b/web/ons-demo/js/controllers.js
@@ -0,0 +1,65 @@
+function updateControllers() {
+ var controllers = d3.select('#controllers').selectAll('.controller').data(model.controllers);
+ controllers.enter().append('div')
+ .each(function (c) {
+ controllerColorMap[c] = colors.pop();
+ d3.select(document.body).classed(controllerColorMap[c] + '-selected', true);
+ })
+ .text(function (d) {
+ return d;
+ })
+ .append('div')
+ .attr('class', 'black-eye');
+
+ controllers.attr('class', function (d) {
+ var color = 'colorInactive';
+ if (model.activeControllers.indexOf(d) != -1) {
+ color = controllerColorMap[d];
+ }
+ var className = 'controller ' + color;
+ return className;
+ });
+
+ // this should never be needed
+ // controllers.exit().remove();
+
+ controllers.on('dblclick', function (c) {
+ if (model.activeControllers.indexOf(c) != -1) {
+ var prompt = 'Dectivate ' + c + '?';
+ if (confirm(prompt)) {
+ controllerDown(c);
+ setPending(d3.select(this));
+ };
+ } else {
+ var prompt = 'Activate ' + c + '?';
+ if (confirm(prompt)) {
+ controllerUp(c);
+ setPending(d3.select(this));
+ };
+ }
+ });
+
+ controllers.select('.black-eye').on('click', function (c) {
+ var allSelected = true;
+ for (var key in controllerColorMap) {
+ if (!d3.select(document.body).classed(controllerColorMap[key] + '-selected')) {
+ allSelected = false;
+ break;
+ }
+ }
+ if (allSelected) {
+ for (var key in controllerColorMap) {
+ d3.select(document.body).classed(controllerColorMap[key] + '-selected', key == c)
+ }
+ } else {
+ for (var key in controllerColorMap) {
+ d3.select(document.body).classed(controllerColorMap[key] + '-selected', true)
+ }
+ }
+
+ // var selected = d3.select(document.body).classed(controllerColorMap[c] + '-selected');
+ // d3.select(document.body).classed(controllerColorMap[c] + '-selected', !selected);
+ });
+
+
+}
\ No newline at end of file
diff --git a/web/ons-demo/js/debug.js b/web/ons-demo/js/debug.js
new file mode 100644
index 0000000..7b66912
--- /dev/null
+++ b/web/ons-demo/js/debug.js
@@ -0,0 +1,12 @@
+/***************************************************************************************************
+find the links that include the switch with this dpid
+***************************************************************************************************/
+function debug_findlink(model, dpid) {
+ var links = [];
+ model.links.forEach(function (link) {
+ if (link['src-switch'] == dpid || link['dst-switch'] == dpid) {
+ links.push(link);
+ }
+ });
+ return links;
+}
\ No newline at end of file
diff --git a/web/ons-demo/js/flows.js b/web/ons-demo/js/flows.js
new file mode 100644
index 0000000..fa0ccf2
--- /dev/null
+++ b/web/ons-demo/js/flows.js
@@ -0,0 +1,449 @@
+function startFlowAnimation(flow) {
+ if (flow.select('animate').empty()) {
+ flow.append('svg:animate')
+ .attr('attributeName', 'stroke-dashoffset')
+ .attr('attributeType', 'xml')
+ .attr('from', '500')
+ .attr('to', '-500')
+ .attr('dur', '20s')
+ .attr('repeatCount', 'indefinite');
+ }
+}
+
+function stopFlowAnimation(flow) {
+ flow.select('animate').remove();
+}
+
+
+function updateSelectedFlowsTopology() {
+ // DRAW THE FLOWS
+ var topologyFlows = [];
+ selectedFlows.forEach(function (flow) {
+ if (flow) {
+ topologyFlows.push(flow);
+ }
+ });
+
+ var flows = flowLayer.selectAll('.flow').data(topologyFlows);
+
+ flows.enter().append("svg:path").attr('class', 'flow')
+ .attr('stroke-dasharray', '4, 10')
+
+ flows.exit().remove();
+
+ flows.attr('d', function (d) {
+ if (!d) {
+ return;
+ }
+ var pts = [];
+ if (d.createPending) {
+ // create a temporary vector to indicate the pending flow
+ var s1 = d3.select(document.getElementById(d.srcDpid));
+ var s2 = d3.select(document.getElementById(d.dstDpid));
+
+ var pt1 = document.querySelector('svg').createSVGPoint();
+ pt1.x = s1.attr('x');
+ pt1.y = s1.attr('y');
+ if (drawingRings) {
+ pt1 = pt1.matrixTransform(s1[0][0].getCTM());
+ }
+ pts.push(pt1);
+
+ var pt2 = document.querySelector('svg').createSVGPoint();
+ pt2.x = s2.attr('x');
+ pt2.y = s2.attr('y');
+ if (drawingRings) {
+ pt2 = pt2.matrixTransform(s2[0][0].getCTM());
+ }
+ pts.push(pt2);
+
+ } else if (d.dataPath && d.dataPath.flowEntries) {
+ d.dataPath.flowEntries.forEach(function (flowEntry) {
+ var s = d3.select(document.getElementById(flowEntry.dpid.value));
+ // s[0] is null if the flow entry refers to a non-existent switch
+ if (s[0][0]) {
+ var pt = document.querySelector('svg').createSVGPoint();
+ pt.x = s.attr('x');
+ pt.y = s.attr('y');
+ if (drawingRings) {
+ pt = pt.matrixTransform(s[0][0].getCTM());
+ }
+ pts.push(pt);
+ } else {
+ console.log('flow refers to non-existent switch: ' + flowEntry.dpid.value);
+ }
+ });
+ }
+ if (pts.length) {
+ return line(pts);
+ } else {
+ return "M0,0";
+ }
+ })
+ .attr('id', function (d) {
+ if (d) {
+ return makeFlowKey(d);
+ }
+ })
+ .classed('pending', function (d) {
+ return d && (d.createPending || d.deletePending);
+ });
+}
+
+function updateSelectedFlowsTable() {
+ function rowEnter(d) {
+ var row = d3.select(this);
+ row.append('div').classed('deleteFlow', true);
+ row.append('div').classed('flowId', true);
+ row.append('div').classed('srcDPID', true);
+ row.append('div').classed('dstDPID', true);
+ row.append('div').classed('iperf', true);
+
+ row.select('.iperf')
+ .append('div')
+ .attr('class', 'iperf-container')
+ .append('svg:svg')
+ .attr('viewBox', '0 0 1000 32')
+ .attr('preserveAspectRatio', 'none')
+ .append('svg:g')
+ .append('svg:path')
+ .attr('class', 'iperfdata');
+
+ row.on('mouseover', function (d) {
+ if (d) {
+ var path = document.getElementById(makeFlowKey(d));
+ d3.select(path).classed('highlight', true);
+ }
+ });
+ row.on('mouseout', function (d) {
+ if (d) {
+ var path = document.getElementById(makeFlowKey(d));
+ d3.select(path).classed('highlight', false);
+ }
+ });
+ }
+
+ function rowUpdate(d) {
+ var row = d3.select(this);
+ row.attr('id', function (d) {
+ if (d) {
+ return makeSelectedFlowKey(d);
+ }
+ });
+
+ if (!d || !hasIPerf(d)) {
+ row.select('.iperfdata')
+ .attr('d', 'M0,0');
+ }
+
+ row.select('.deleteFlow').on('click', function () {
+ deselectFlow(d);
+ });
+ row.on('dblclick', function () {
+ if (d) {
+ var prompt = 'Delete flow ' + d.flowId + '?';
+ if (confirm(prompt)) {
+ deleteFlow(d);
+ d.deletePending = true;
+ updateSelectedFlows();
+
+ setTimeout(function () {
+ d.deletePending = false;
+ updateSelectedFlows();
+ }, pendingTimeout)
+ };
+ }
+ });
+
+ row.select('.flowId')
+ .text(function (d) {
+ if (d) {
+ if (d.flowId) {
+ return d.flowId;
+ } else {
+ return '0x--';
+ }
+ }
+ })
+ .classed('pending', function (d) {
+ return d && (d.createPending || d.deletePending);
+ });
+
+ row.select('.srcDPID')
+ .text(function (d) {
+ if (d) {
+ return d.srcDpid;
+ }
+ });
+
+ row.select('.dstDPID')
+ .text(function (d) {
+ if (d) {
+ return d.dstDpid;
+ }
+ });
+ }
+
+ var flows = d3.select('#selectedFlows')
+ .selectAll('.selectedFlow')
+ .data(selectedFlows);
+
+ flows.enter()
+ .append('div')
+ .classed('selectedFlow', true)
+ .each(rowEnter);
+
+ flows.each(rowUpdate);
+
+ flows.exit().remove();
+}
+
+function startIPerfForFlow(flow) {
+ var duration = 10000; // seconds
+ var interval = 100; // ms. this is defined by the server
+ var updateRate = 2000; // ms
+ var pointsToDisplay = 1000;
+
+ function makePoints() {
+ var pts = [];
+ var i;
+ for (i=0; i < pointsToDisplay; ++i) {
+ var sample = flow.iperfData.samples[i];
+ var height = 28 * sample/1000000;
+ if (height > 28)
+ height = 28;
+ pts.push({
+ x: i * 1000/(pointsToDisplay-1),
+ y: 30 - height
+ })
+ }
+ return pts;
+ }
+
+ if (flow.flowId) {
+ console.log('starting iperf for: ' + flow.flowId);
+ startIPerf(flow, duration, updateRate/interval);
+ flow.iperfDisplayInterval = setInterval(function () {
+ if (flow.iperfData) {
+ while (flow.iperfData.samples.length < pointsToDisplay) {
+ flow.iperfData.samples.push(0);
+ }
+ var iperfPath = d3.select(document.getElementById(makeSelectedFlowKey(flow))).select('path');
+ iperfPath.attr('d', line(makePoints()));
+ flow.iperfData.samples.shift();
+ }
+
+
+ }, interval);
+
+ var animationTimeout;
+
+ flow.iperfFetchInterval = setInterval(function () {
+ getIPerfData(flow, function (data) {
+ try {
+ if (!flow.iperfData) {
+ flow.iperfData = {
+ samples: []
+ };
+ var i;
+ for (i = 0; i < pointsToDisplay; ++i) {
+ flow.iperfData.samples.push(0);
+ }
+ }
+
+ var iperfData = JSON.parse(data);
+
+// console.log(iperfData.timestamp);
+
+ // if the data is fresh
+ if (flow.iperfData.timestamp && iperfData.timestamp != flow.iperfData.timestamp) {
+
+ var flowSelection = d3.select(document.getElementById(makeFlowKey(flow)));
+ startFlowAnimation(flowSelection);
+ clearTimeout(animationTimeout);
+ // kill the animation if iperfdata stops flowing
+ animationTimeout = setTimeout(function () {
+ stopFlowAnimation(flowSelection);
+ }, updateRate*1.5);
+
+ while (flow.iperfData.samples.length > pointsToDisplay + iperfData.samples.length) {
+ flow.iperfData.samples.shift();
+ }
+
+ iperfData.samples.forEach(function (s) {
+ flow.iperfData.samples.push(s);
+ });
+ }
+ flow.iperfData.timestamp = iperfData.timestamp;
+ } catch (e) {
+ console.log('bad iperf data: ' + data);
+ }
+// console.log(data);
+ });
+ }, updateRate/2); // over sample to avoid gaps
+ }
+}
+
+function updateSelectedFlows() {
+ // make sure that all of the selected flows are either
+ // 1) valid (meaning they are in the latest list of flows)
+ // 2) pending
+ if (model) {
+ var flowMap = {};
+ model.flows.forEach(function (flow) {
+ flowMap[makeFlowKey(flow)] = flow;
+ });
+
+ var newSelectedFlows = [];
+ selectedFlows.forEach(function (flow) {
+ if (flow) {
+ var liveFlow = flowMap[makeFlowKey(flow)];
+ if (liveFlow) {
+ newSelectedFlows.push(liveFlow);
+ liveFlow.deletePending = flow.deletePending;
+ liveFlow.iperfFetchInterval = flow.iperfFetchInterval;
+ liveFlow.iperfDisplayInterval = flow.iperfDisplayInterval;
+ } else if (flow.createPending) {
+ newSelectedFlows.push(flow);
+ } else if (hasIPerf(flow)) {
+ clearIPerf(flow);
+ }
+ }
+ });
+ selectedFlows = newSelectedFlows;
+ }
+ selectedFlows.forEach(function (flow) {
+ if (!hasIPerf(flow)) {
+ startIPerfForFlow(flow);
+ }
+ });
+ while (selectedFlows.length < 3) {
+ selectedFlows.push(null);
+ }
+
+ updateSelectedFlowsTable();
+ // on app init, the table is updated before the svg is constructed
+ if (flowLayer) {
+ updateSelectedFlowsTopology();
+ }
+}
+
+function selectFlow(flow) {
+ var flowKey = makeFlowKey(flow);
+ var alreadySelected = false;
+ selectedFlows.forEach(function (f) {
+ if (f && makeFlowKey(f) === flowKey) {
+ alreadySelected = true;
+ }
+ });
+
+ if (!alreadySelected) {
+ selectedFlows.unshift(flow);
+ selectedFlows = selectedFlows.slice(0, 3);
+ updateSelectedFlows();
+ }
+}
+
+function hasIPerf(flow) {
+ return flow && flow.iperfFetchInterval;
+}
+
+function clearIPerf(flow) {
+ console.log('clearing iperf interval for: ' + flow.flowId);
+ clearInterval(flow.iperfFetchInterval);
+ delete flow.iperfFetchInterval;
+ clearInterval(flow.iperfDisplayInterval);
+ delete flow.iperfDisplayInterval;
+ delete flow.iperfData;
+}
+
+function deselectFlow(flow, ifCreatePending) {
+ if (!flow) {
+ return;
+ }
+
+ var flowKey = makeFlowKey(flow);
+ var newSelectedFlows = [];
+ selectedFlows.forEach(function (flow) {
+ if (!flow ||
+ flowKey !== makeFlowKey(flow) ||
+ flowKey === makeFlowKey(flow) && ifCreatePending && !flow.createPending ) {
+ newSelectedFlows.push(flow);
+ } else {
+ if (hasIPerf(flow)) {
+ clearIPerf(flow);
+ }
+ }
+ });
+ selectedFlows = newSelectedFlows;
+ while (selectedFlows.length < 3) {
+ selectedFlows.push(null);
+ }
+
+ updateSelectedFlows();
+}
+
+function deselectFlowIfCreatePending(flow) {
+ deselectFlow(flow, true);
+}
+
+function showFlowChooser() {
+ function rowEnter(d) {
+ var row = d3.select(this);
+
+ row.append('div')
+ .classed('black-eye', true).
+ on('click', function () {
+ selectFlow(d);
+ });
+
+ row.append('div')
+ .classed('flowId', true)
+ .text(function (d) {
+ return d.flowId;
+ });
+
+ row.append('div')
+ .classed('srcDPID', true)
+ .text(function (d) {
+ return d.srcDpid;
+ });
+
+
+ row.append('div')
+ .classed('dstDPID', true)
+ .text(function (d) {
+ return d.dstDpid;
+ });
+
+ }
+
+ var flowChooser = d3.select(document.getElementById('flowChooser'));
+ flowChooser.html('');
+ flowChooser.style('-webkit-transform', 'translate3d(-100%, 0, 0)')
+ .style('-webkit-transition');
+
+ var flows = flowChooser
+ .append('div')
+ .style('pointer-events', 'auto')
+ .selectAll('.selectedFlow')
+ .data(model.flows)
+ .enter()
+ .append('div')
+ .classed('selectedFlow', true)
+ .each(rowEnter);
+
+
+ setTimeout(function () {
+ flowChooser.style('-webkit-transition', '-webkit-transform .25s');
+ setTimeout(function () {
+ flowChooser.style('-webkit-transform', 'translate3d(0,0,0)');
+ }, 0);
+
+
+ d3.select(document.body).on('click', function () {
+ flowChooser.style('-webkit-transform', 'translate3d(-100%, 0, 0)')
+ d3.select(document.body).on('click', null);
+ });
+ }, 0);
+}
diff --git a/web/ons-demo/js/forward.js b/web/ons-demo/js/forward.js
new file mode 100644
index 0000000..5e854ee
--- /dev/null
+++ b/web/ons-demo/js/forward.js
@@ -0,0 +1,12 @@
+/***************************************************************************************************
+forward declarations for functions
+***************************************************************************************************/
+
+var updateTopology;
+
+
+/***************************************************************************************************
+defined by whichever topology module is included
+***************************************************************************************************/
+var createTopologyView;
+var drawTopology;
diff --git a/web/ons-demo/js/globals.js b/web/ons-demo/js/globals.js
new file mode 100644
index 0000000..2063ba5
--- /dev/null
+++ b/web/ons-demo/js/globals.js
@@ -0,0 +1,57 @@
+/***************************************************************************************************
+global variables
+***************************************************************************************************/
+
+
+/***************************************************************************************************
+the latest update to the model
+***************************************************************************************************/
+var model;
+
+/***************************************************************************************************
+cached JSON representation of the model. used to detect model changes and update the UI.
+***************************************************************************************************/
+var modelString;
+
+/***************************************************************************************************
+the root element for the topology view
+***************************************************************************************************/
+var topology;
+
+/***************************************************************************************************
+links that were created in the webui but which have not appeared in the links API response yet
+these timeout after pendingTimeout
+***************************************************************************************************/
+var pendingLinks = {};
+
+/***************************************************************************************************
+current links including pending
+***************************************************************************************************/
+var links;
+
+/***************************************************************************************************
+a map from srcDPID => map of dstDPID=>link
+***************************************************************************************************/
+var linkMap;
+
+/***************************************************************************************************
+the flows that are displayed in the selected flow table
+this may include pending flows which have not appeared in the flows API response yet
+***************************************************************************************************/
+var selectedFlows = [];
+
+/***************************************************************************************************
+a mapping from controller name to color used for color coding the topology and ONOS nodes views
+***************************************************************************************************/
+var controllerColorMap = {};
+
+/***************************************************************************************************
+defined by rings.js or map.js this is where the flows are drawn.
+***************************************************************************************************/
+var flowLayer;
+
+/***************************************************************************************************
+hack to make the old ring drawing code compatible with the shared flow drawing code
+will be obsoleted once the ring drawing code is disposed of
+***************************************************************************************************/
+var drawingRings;
\ No newline at end of file
diff --git a/web/ons-demo/js/init.js b/web/ons-demo/js/init.js
new file mode 100644
index 0000000..dd11bf8
--- /dev/null
+++ b/web/ons-demo/js/init.js
@@ -0,0 +1,29 @@
+function appInit(cb) {
+
+ // populates selected flows with empty rows
+ updateSelectedFlows();
+
+ d3.select('#showFlowChooser').on('click', function () {
+ showFlowChooser();
+ });
+
+ d3.select('#action-all').on('click', function () {
+ var prompt = "Switch controllers to all?"
+ if (confirm(prompt)) {
+ switchAll();
+ }
+ });
+
+ d3.select('#action-local').on('click', function () {
+ var prompt = "Switch controllers to local?"
+ if (confirm(prompt)) {
+ switchLocal();
+ }
+ });
+
+ d3.select('#action-scale').on('click', function () {
+ alert('scale')
+ });
+
+ createTopologyView(cb);
+}
diff --git a/web/ons-demo/js/map.js b/web/ons-demo/js/map.js
new file mode 100644
index 0000000..62df872
--- /dev/null
+++ b/web/ons-demo/js/map.js
@@ -0,0 +1,334 @@
+(function () {
+
+var projection = d3.geo.mercator()
+ .center([82, 46])
+ .scale(8000)
+ .rotate([-180,0]);
+
+var switchXML;
+
+function createMap(svg, cb) {
+ topology = svg.append('svg:svg').attr('id', 'viewBox').attr('viewBox', '0 0 1000 1000').
+ attr('id', 'viewbox');
+
+ var map = topology.append("g").attr('id', 'map');
+
+ var path = d3.geo.path().projection(projection);
+
+ d3.json('data/world.json', function(error, topology) {
+ map.selectAll('path')
+ .data(topojson.object(topology, topology.objects.world).geometries)
+ .enter()
+ .append('path')
+ .attr('d', path)
+
+ d3.xml('assets/switch.svg', function (xml) {
+ switchXML = document.importNode(xml.documentElement, true);;
+ cb();
+ });
+ });
+}
+
+/***************************************************************************************************
+
+***************************************************************************************************/
+var switchMap;
+function makeSwitchMap() {
+ switchMap = {};
+ model.coreSwitches.forEach(function (s) {
+ switchMap[s.dpid] = s;
+ });
+ model.aggregationSwitches.forEach(function (s) {
+ switchMap[s.dpid] = s;
+ });
+ model.edgeSwitches.forEach(function (s) {
+ switchMap[s.dpid] = s;
+ });
+}
+
+/***************************************************************************************************
+create a map from edge->aggregation and aggreation->core switches
+***************************************************************************************************/
+var switchAssociations;
+function makeAssociations() {
+ switchAssociations = {};
+
+ var key;
+ for (key in model.configuration.association) {
+ var aggregationSwitches = model.configuration.association[key];
+ aggregationSwitches.forEach(function (s) {
+ switchAssociations[s] = key;
+ });
+ }
+}
+
+/***************************************************************************************************
+get the upstream switch. this only makes sense for aggregation and edge switches
+***************************************************************************************************/
+function getUpstream(dpid, className) {
+ if (className === 'aggregation') {
+ return switchAssociations[dpid];
+ } else if (className === 'edge') {
+ var aggregationDpid = dpid.split(':');
+ aggregationDpid[7] = '01'; // the last component of the agg switch is always '01'
+ return aggregationDpid.join(':');
+ }
+}
+
+
+
+/*****************a**********************************************************************************
+create a map to hold the fanout information for the switches
+***************************************************************************************************/
+var fanouts;
+function makeFanouts() {
+ fanouts = {};
+ model.coreSwitches.forEach(function (s) {
+ fanouts[s.dpid] = model.configuration.geo[s.dpid];
+ fanouts[s.dpid].count = 0;
+ });
+
+ model.aggregationSwitches.forEach(function (s) {
+ fanouts[s.dpid] = {count: 0};
+ var upstreamFanout = fanouts[getUpstream(s.dpid, 'aggregation')];
+ upstreamFanout.count += 1;
+ });
+
+ model.edgeSwitches.forEach(function (s) {
+ fanouts[s.dpid] = {};
+ var upstreamFanout = fanouts[getUpstream(s.dpid, 'edge')];
+ upstreamFanout.count += 1;
+ });
+}
+
+
+var projection;
+var switchLayer;
+var labelsLayer;
+var linksLayer;
+createTopologyView = function (cb) {
+ var svg = createRootSVG();
+
+ createMap(svg, function () {
+ switchLayer = topology.append('g');
+ labelsLayer = topology.append('g');
+ linksLayer = topology.append('g');
+ flowLayer = topology.append('g');
+
+
+ cb();
+ });
+}
+
+function drawLinkLines() {
+
+ // key on link dpids since these will come/go during demo
+ var linkLines = linksLayer.selectAll('.link').data(links, function (d) {
+ return d['src-switch']+'->'+d['dst-switch'];
+ });
+
+ // add new links
+ linkLines.enter().append("svg:path").attr("class", "link");
+
+ linkLines.attr('id', function (d) {
+ return makeLinkKey(d);
+ }).attr("d", function (d) {
+ var src = d3.select(document.getElementById(d['src-switch']));
+ var dst = d3.select(document.getElementById(d['dst-switch']));
+
+ if (src.empty() || dst.empty()) {
+ return "M0,0";
+ }
+
+ var srcPt = document.querySelector('svg').createSVGPoint();
+ srcPt.x = src.attr('x');
+ srcPt.y = src.attr('y');
+
+ var dstPt = document.querySelector('svg').createSVGPoint();
+ dstPt.x = dst.attr('x');
+ dstPt.y = dst.attr('y');
+
+ var midPt = document.querySelector('svg').createSVGPoint();
+ midPt.x = (srcPt.x + dstPt.x)/2;
+ midPt.y = (srcPt.y + dstPt.y)/2;
+
+ return line([srcPt, midPt, dstPt]);
+ })
+ .attr("marker-mid", function(d) { return "url(#arrow)"; })
+ .classed('pending', function (d) {
+ return d.pending;
+ });
+
+ // remove old links
+ linkLines.exit().remove();
+}
+
+var fanOutAngles = {
+ aggregation: 90,
+ edge: 7
+}
+
+function makeSwitchesModel(switches, className) {
+ var switchesModel = [];
+ switches.forEach(function (s) {
+ var geo = model.configuration.geo[s.dpid];
+
+ var pos, label;
+ if (geo) {
+ pos = projection([geo.lng, geo.lat]);
+ label = geo.label;
+ } else {
+ var upstream = getUpstream(s.dpid, className);
+ if (upstream) {
+ var upstreamGeo = fanouts[upstream];
+ pos = projection([upstreamGeo.lng, upstreamGeo.lat]);
+
+ var fanOutAngle = upstreamGeo.fanOutAngle;
+ fanOutAngle -= (upstreamGeo.count - 1) * fanOutAngles[className]/2;
+
+ var angle = toRadians(fanOutAngle);
+ var xOff = Math.sin(angle) * widths[className] * 20;
+ var yOff = Math.cos(angle) * widths[className] * 20;
+
+ pos = [pos[0] + xOff, pos[1] + yOff];
+
+ var fakeGeo = projection.invert(pos);
+
+ var fanout = fanouts[s.dpid];
+ fanout.fanOutAngle = fanOutAngle;
+ fanout.lng = fakeGeo[0];
+ fanout.lat = fakeGeo[1];
+
+ upstreamGeo.fanOutAngle += fanOutAngles[className];
+
+ } else {
+ pos = projection([-98, 39]);
+ }
+ }
+
+ switchesModel.push({
+ dpid: s.dpid,
+ state: s.state,
+ className: className,
+ controller: s.controller,
+ label: label,
+ x: pos[0],
+ y: pos[1]
+ });
+ });
+
+ return switchesModel;
+}
+
+function switchEnter(d) {
+ var g = d3.select(this);
+ var width;
+
+ // attempt to draw an svg switch
+ if (false && d.className == 'core') {
+ width = 30;
+ g.select(function () {
+ return this.appendChild(switchXML.cloneNode(true));
+ })
+ .classed(d.className, true)
+ .attr('x', d.x - 30)
+ .attr('y', d.y - 30);
+
+ } else {
+ width = widths[d.className];
+ g.append('svg:circle').attr('r', width)
+ .classed(d.className, true)
+ .attr('cx', d.x)
+ .attr('cy', d.y);
+ }
+
+
+ if (d.label) {
+ g.append('svg:text')
+ .classed('label', true)
+ .text(d.label)
+ .attr("text-anchor", "end")
+ .attr('x', d.x - width)
+ .attr('y', d.y - width);
+ }
+}
+
+function labelsEnter(switches) {
+ return labelsLayer.selectAll('g').data(switches, function (d) {
+ return d.dpid;
+ }).enter().append('svg:g')
+ .classed('nolabel', true)
+ .attr("id", function (data) {
+ return data.dpid + '-label';
+ })
+ .append("svg:text")
+ .text(function (data) {return data.dpid;})
+ .attr('x', function (d) {
+ return d.x;
+ })
+ .attr('y', function (d) {
+ return d.y;
+ })
+ .attr("text-anchor", function (d) {
+ return d.x > 500 ? "end" : "start";
+ })
+
+}
+
+function switchesEnter(switches) {
+ return switchLayer.selectAll('g').data(switches, function (d) {
+ return d.dpid;
+ })
+ .enter()
+ .append('svg:g')
+ .attr("id", function (d) {
+ return d.dpid;
+ })
+ .attr('x', function (d) {
+ return d.x;
+ })
+ .attr('y', function (d) {
+ return d.y;
+ })
+ .each(switchEnter);
+}
+
+
+function switchesUpdate(switches) {
+ switches.each(function (d) {
+ // if there's a pending state changed and then the state changes, clear the pending class
+ var circle = d3.select(this);
+ if (d.state === 'ACTIVE' && circle.classed('inactive') ||
+ d.state === 'INACTIVE' && circle.classed('active')) {
+ circle.classed('pending', false);
+ }
+ })
+ .attr('class', function (d) {
+ if (d.state === 'ACTIVE' && d.controller) {
+ return 'active ' + controllerColorMap[d.controller];
+ } else {
+ return 'inactive ' + 'colorInactive';
+ }
+ });
+}
+
+drawTopology = function () {
+
+ makeSwitchMap();
+ makeAssociations();
+ makeFanouts();
+
+ var coreSwitches = makeSwitchesModel(model.coreSwitches, 'core');
+ var aggregationSwitches = makeSwitchesModel(model.aggregationSwitches, 'aggregation');
+ var edgeSwitches = makeSwitchesModel(model.edgeSwitches, 'edge');
+
+ var switches = coreSwitches.concat(aggregationSwitches).concat(edgeSwitches);
+
+ switchesUpdate(switchesEnter(switches));
+
+ drawLinkLines();
+
+ labelsEnter(switches);
+}
+
+})();
\ No newline at end of file
diff --git a/web/ons-demo/js/rings.js b/web/ons-demo/js/rings.js
new file mode 100644
index 0000000..979d28b
--- /dev/null
+++ b/web/ons-demo/js/rings.js
@@ -0,0 +1,327 @@
+(function () {
+
+createTopologyView = function (cb) {
+
+ window.addEventListener('resize', function () {
+ // this is too slow. instead detect first resize event and hide the paths that have explicit matrix applied
+ // either that or is it possible to position the paths so they get the automatic transform as well?
+// updateTopology();
+ });
+
+ var svg = createRootSVG();
+
+ topology = svg.append('svg:svg').attr('id', 'viewBox').attr('viewBox', '0 0 1000 1000').attr('preserveAspectRatio', 'none').
+ attr('id', 'viewbox').append('svg:g').attr('id', 'topology').attr('transform', 'translate(500 500)');
+
+ flowLayer = d3.select('svg');
+
+ // hack to make the shared flow drawing code work
+ drawingRings = true;
+
+ cb();
+}
+
+function updateLinkLines() {
+
+ // key on link dpids since these will come/go during demo
+ var linkLines = d3.select('svg').selectAll('.link').data(links, function (d) {
+ return d['src-switch']+'->'+d['dst-switch'];
+ });
+
+ // add new links
+ linkLines.enter().append("svg:path").attr("class", "link");
+
+ linkLines.attr('id', function (d) {
+ return makeLinkKey(d);
+ }).attr("d", function (d) {
+ var src = d3.select(document.getElementById(d['src-switch']));
+ var dst = d3.select(document.getElementById(d['dst-switch']));
+
+ if (src.empty() || dst.empty()) {
+ return "M0,0";
+ }
+
+ var srcPt = document.querySelector('svg').createSVGPoint();
+ srcPt.x = src.attr('x');
+ srcPt.y = src.attr('y');
+ srcPt = srcPt.matrixTransform(src[0][0].getCTM());
+
+ var dstPt = document.querySelector('svg').createSVGPoint();
+ dstPt.x = dst.attr('x');
+ dstPt.y = dst.attr('y');
+ dstPt = dstPt.matrixTransform(dst[0][0].getCTM());
+
+ var midPt = document.querySelector('svg').createSVGPoint();
+ midPt.x = (srcPt.x + dstPt.x)/2;
+ midPt.y = (srcPt.y + dstPt.y)/2;
+
+ return line([srcPt, midPt, dstPt]);
+ })
+ .attr("marker-mid", function(d) { return "url(#arrow)"; })
+ .classed('pending', function (d) {
+ return d.pending;
+ });
+
+ // remove old links
+ linkLines.exit().remove();
+}
+
+
+function createRingTopologyModel(model) {
+ var rings = [{
+ radius: 3,
+ width: widths.edge,
+ switches: model.edgeSwitches,
+ className: 'edge',
+ angles: []
+ }, {
+ radius: 2.25,
+ width: widths.aggregation,
+ switches: model.aggregationSwitches,
+ className: 'aggregation',
+ angles: []
+ }, {
+ radius: 0.75,
+ width: widths.core,
+ switches: model.coreSwitches,
+ className: 'core',
+ angles: []
+ }];
+
+
+ var aggRanges = {};
+
+ // arrange edge switches at equal increments
+ var k = 360 / rings[0].switches.length;
+ rings[0].switches.forEach(function (s, i) {
+ var angle = k * i;
+
+ rings[0].angles[i] = angle;
+
+ // record the angle for the agg switch layout
+ var dpid = s.dpid.split(':');
+ dpid[7] = '01'; // the last component of the agg switch is always '01'
+ var aggdpid = dpid.join(':');
+ var aggRange = aggRanges[aggdpid];
+ if (!aggRange) {
+ aggRange = aggRanges[aggdpid] = {};
+ aggRange.min = aggRange.max = angle;
+ } else {
+ aggRange.max = angle;
+ }
+ });
+
+ // arrange aggregation switches to "fan out" to edge switches
+ k = 360 / rings[1].switches.length;
+ rings[1].switches.forEach(function (s, i) {
+// rings[1].angles[i] = k * i;
+ var range = aggRanges[s.dpid];
+
+ rings[1].angles[i] = (range.min + range.max)/2;
+ });
+
+ // find the association between core switches and aggregation switches
+ var aggregationSwitchMap = {};
+ model.aggregationSwitches.forEach(function (s, i) {
+ aggregationSwitchMap[s.dpid] = i;
+ });
+
+ // put core switches next to linked aggregation switches
+ k = 360 / rings[2].switches.length;
+ rings[2].switches.forEach(function (s, i) {
+// rings[2].angles[i] = k * i;
+ var associatedAggregationSwitches = model.configuration.association[s.dpid];
+ // TODO: go between if there are multiple
+ var index = aggregationSwitchMap[associatedAggregationSwitches[0]];
+
+ rings[2].angles[i] = rings[1].angles[index];
+ });
+
+ // TODO: construct this form initially rather than converting. it works better because
+ // it allows binding by dpid
+ var testRings = [];
+ rings.forEach(function (ring) {
+ var testRing = [];
+ ring.switches.forEach(function (s, i) {
+ var testSwitch = {
+ dpid: s.dpid,
+ state: s.state,
+ radius: ring.radius,
+ width: ring.width,
+ className: ring.className,
+ angle: ring.angles[i],
+ controller: s.controller
+ };
+ testRing.push(testSwitch);
+ });
+
+
+ testRings.push(testRing);
+ });
+
+
+// return rings;
+ return testRings;
+}
+
+drawTopology = function () {
+ // DRAW THE SWITCHES
+ var rings = topology.selectAll('.ring').data(createRingTopologyModel(model));
+
+ function ringEnter(data, i) {
+ if (!data.length) {
+ return;
+ }
+
+ // create the nodes
+ var nodes = d3.select(this).selectAll("g")
+ .data(data, function (data) {
+ return data.dpid;
+ })
+ .enter().append("svg:g")
+ .attr("id", function (data, i) {
+ return data.dpid;
+ })
+ .attr("transform", function(data, i) {
+ return "rotate(" + data.angle+ ")translate(" + data.radius * 150 + ")rotate(" + (-data.angle) + ")";
+ });
+
+ // add the cirles representing the switches
+ nodes.append("svg:circle")
+ .attr("transform", function(data, i) {
+ var m = document.querySelector('#viewbox').getTransformToElement().inverse();
+ if (data.scale) {
+ m = m.scale(data.scale);
+ }
+ return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
+ })
+ .attr("x", function (data) {
+ return -data.width / 2;
+ })
+ .attr("y", function (data) {
+ return -data.width / 2;
+ })
+ .attr("r", function (data) {
+ return data.width;
+ });
+ }
+
+ // append switches
+ rings.enter().append("svg:g")
+ .attr("class", "ring")
+ .each(ringEnter);
+
+
+ function ringUpdate(data, i) {
+ var nodes = d3.select(this).selectAll("g")
+ .data(data, function (data) {
+ return data.dpid;
+ });
+ nodes.select('circle')
+ .each(function (data) {
+ // if there's a pending state changed and then the state changes, clear the pending class
+ var circle = d3.select(this);
+ if (data.state === 'ACTIVE' && circle.classed('inactive') ||
+ data.state === 'INACTIVE' && circle.classed('active')) {
+ circle.classed('pending', false);
+ }
+ })
+ .attr('class', function (data) {
+ if (data.state === 'ACTIVE' && data.controller) {
+ return data.className + ' active ' + controllerColorMap[data.controller];
+ } else {
+ return data.className + ' inactive ' + 'colorInactive';
+ }
+ });
+ }
+
+ // update switches
+ rings.each(ringUpdate);
+
+
+ // Now setup the labels
+ // This is done separately because SVG draws in node order and we want the labels
+ // always on top
+ var labelRings = topology.selectAll('.labelRing').data(createRingTopologyModel(model));
+
+ function labelRingEnter(data) {
+ if (!data.length) {
+ return;
+ }
+
+ // create the nodes
+ var nodes = d3.select(this).selectAll("g")
+ .data(data, function (data) {
+ return data.dpid;
+ })
+ .enter().append("svg:g")
+ .classed('nolabel', true)
+ .attr("id", function (data) {
+ return data.dpid + '-label';
+ })
+ .attr("transform", function(data, i) {
+ return "rotate(" + data.angle+ ")translate(" + data.radius * 150 + ")rotate(" + (-data.angle) + ")";
+ })
+
+ // add the text nodes which show on mouse over
+ nodes.append("svg:text")
+ .text(function (data) {return data.dpid;})
+ .attr("x", function (data) {
+ if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
+ if (data.className == 'edge') {
+ return - data.width*3 - 4;
+ } else {
+ return - data.width - 4;
+ }
+ } else {
+ if (data.className == 'edge') {
+ return data.width*3 + 4;
+ } else {
+ return data.width + 4;
+ }
+ }
+ })
+ .attr("y", function (data) {
+ var y;
+ if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
+ if (data.className == 'edge') {
+ y = data.width*3/2 + 4;
+ } else {
+ y = data.width/2 + 4;
+ }
+ } else {
+ if (data.className == 'edge') {
+ y = data.width*3/2 + 4;
+ } else {
+ y = data.width/2 + 4;
+ }
+ }
+ return y - 6;
+ })
+ .attr("text-anchor", function (data) {
+ if (data.angle <= 90 || data.angle >= 270 && data.angle <= 360) {
+ return "end";
+ } else {
+ return "start";
+ }
+ })
+ .attr("transform", function(data) {
+ var m = document.querySelector('#viewbox').getTransformToElement().inverse();
+ if (data.scale) {
+ m = m.scale(data.scale);
+ }
+ return "matrix( " + m.a + " " + m.b + " " + m.c + " " + m.d + " " + m.e + " " + m.f + " )";
+ })
+ }
+
+ labelRings.enter().append("svg:g")
+ .attr("class", "textRing")
+ .each(labelRingEnter);
+
+ // switches should not change during operation of the ui so no
+ // rings.exit()
+
+ updateLinkLines();
+}
+
+})();
diff --git a/web/ons-demo/js/topology.js b/web/ons-demo/js/topology.js
new file mode 100644
index 0000000..7f91de8
--- /dev/null
+++ b/web/ons-demo/js/topology.js
@@ -0,0 +1,30 @@
+/***************************************************************************************************
+functions for creating and interacting with the topology view of the webui
+
+flow related topology is in flows.js
+***************************************************************************************************/
+
+(function () {
+
+updateTopology = function() {
+
+ /* currently rings.js and map.js can be included to define the topology display */
+
+ reconcilePendingLinks(model);
+ updateLinkMap(links);
+
+ drawTopology();
+
+ // setup the mouseover behaviors
+ var allSwitches = d3.selectAll('.edge, .core, .aggregation');
+
+ allSwitches.on('mouseover', mouseOverSwitch);
+ allSwitches.on('mouseout', mouseOutSwitch);
+ allSwitches.on('mouseup', mouseUpSwitch);
+ allSwitches.on('mousedown', mouseDownSwitch);
+
+ // only do switch up/down for core switches
+ d3.selectAll('.core').on('dblclick', doubleClickSwitch);
+}
+
+})();
diff --git a/web/ons-demo/js/topologyactions.js b/web/ons-demo/js/topologyactions.js
new file mode 100644
index 0000000..6501e5b
--- /dev/null
+++ b/web/ons-demo/js/topologyactions.js
@@ -0,0 +1,273 @@
+function clearHighlight() {
+ topology.selectAll('circle').each(function (data) {
+ data.mouseDown = false;
+ d3.select('#topologyArea').classed('linking', false);
+ mouseOutSwitch(data);
+ });
+ d3.select('#linkVector').remove();
+};
+
+function mouseOverSwitch(data) {
+
+ d3.event.preventDefault();
+
+ d3.select(document.getElementById(data.dpid + '-label')).classed('nolabel', false);
+
+ if (data.highlighted) {
+ return;
+ }
+
+ // only highlight valid link or flow destination by checking for class of existing highlighted circle
+ var highlighted = topology.selectAll('.highlight')[0];
+ if (highlighted.length == 1) {
+ var s = d3.select(highlighted[0]).select('circle');
+ // only allow links
+ // edge->edge (flow)
+ // aggregation->core
+ // core->core
+ if (data.className == 'edge' && !s.classed('edge') ||
+ data.className == 'core' && !s.classed('core') && !s.classed('aggregation') ||
+ data.className == 'aggregation' && !s.classed('core')) {
+ return;
+ }
+
+ // the second highlighted switch is the target for a link or flow
+ data.target = true;
+ }
+
+ var node = d3.select(document.getElementById(data.dpid));
+ node.classed('highlight', true).select('circle').transition().duration(100).attr("r", widths.core);
+ data.highlighted = true;
+ node.moveToFront();
+}
+
+function mouseOutSwitch(data) {
+ d3.select(document.getElementById(data.dpid + '-label')).classed('nolabel', true);
+
+ if (data.mouseDown)
+ return;
+
+ var node = d3.select(document.getElementById(data.dpid));
+ node.classed('highlight', false).select('circle').transition().duration(100).attr("r", widths[data.className]);
+ data.highlighted = false;
+ data.target = false;
+}
+
+function mouseDownSwitch(data) {
+ mouseOverSwitch(data);
+ data.mouseDown = true;
+ d3.select('#topologyArea').classed('linking', true);
+
+ d3.select('svg')
+ .append('svg:path')
+ .attr('id', 'linkVector')
+ .attr('d', function () {
+ var s = d3.select(document.getElementById(data.dpid));
+
+ var pt = document.querySelector('svg').createSVGPoint();
+ pt.x = s.attr('x');
+ pt.y = s.attr('y');
+ pt = pt.matrixTransform(s[0][0].getCTM());
+
+ return line([pt, pt]);
+ });
+
+
+ if (data.className === 'core') {
+ d3.selectAll('.edge').classed('nodrop', true);
+ }
+ if (data.className === 'edge') {
+ d3.selectAll('.core').classed('nodrop', true);
+ d3.selectAll('.aggregation').classed('nodrop', true);
+ }
+ if (data.className === 'aggregation') {
+ d3.selectAll('.edge').classed('nodrop', true);
+ d3.selectAll('.aggregation').classed('nodrop', true);
+ }
+}
+
+function mouseUpSwitch(data) {
+ if (data.mouseDown) {
+ data.mouseDown = false;
+ d3.select('#topologyArea').classed('linking', false);
+ d3.event.stopPropagation();
+ d3.selectAll('.nodrop').classed('nodrop', false);
+ }
+}
+
+function doubleClickSwitch(data) {
+ clearHighlight();
+
+ var circle = d3.select(document.getElementById(data.dpid)).select('circle');
+ if (data.state == 'ACTIVE') {
+ var prompt = 'Deactivate ' + data.dpid + '?';
+ if (confirm(prompt)) {
+ switchDown(data);
+ setPending(circle);
+ }
+ } else {
+ var prompt = 'Activate ' + data.dpid + '?';
+ if (confirm(prompt)) {
+ switchUp(data);
+ setPending(circle);
+ }
+ }
+}
+
+d3.select(window).on('mouseup', function () {
+ d3.selectAll('.nodrop').classed('nodrop', false);
+
+ function removeLink(link) {
+ var path1 = document.getElementById(link['src-switch'] + '=>' + link['dst-switch']);
+ var path2 = document.getElementById(link['dst-switch'] + '=>' + link['src-switch']);
+
+ if (path1) {
+ setPending(d3.select(path1));
+ }
+ if (path2) {
+ setPending(d3.select(path2));
+ }
+
+ linkDown(link);
+ }
+
+
+ var highlighted = topology.selectAll('.highlight')[0];
+ if (highlighted.length == 2) {
+ var s1Data = highlighted[0].__data__;
+ var s2Data = highlighted[1].__data__;
+
+ var srcData, dstData;
+ if (s1Data.target) {
+ dstData = s1Data;
+ srcData = s2Data;
+ } else {
+ dstData = s2Data;
+ srcData = s1Data;
+ }
+
+ if (s1Data.className == 'edge' && s2Data.className == 'edge') {
+ var prompt = 'Create flow from ' + srcData.dpid + ' to ' + dstData.dpid + '?';
+ if (confirm(prompt)) {
+ addFlow(srcData, dstData);
+
+ var flow = {
+ dataPath: {
+ srcPort: {
+ dpid: {
+ value: srcData.dpid
+ }
+ },
+ dstPort: {
+ dpid: {
+ value: dstData.dpid
+ }
+ }
+ },
+ srcDpid: srcData.dpid,
+ dstDpid: dstData.dpid,
+ createPending: true
+ };
+
+ selectFlow(flow);
+
+ setTimeout(function () {
+ deselectFlowIfCreatePending(flow);
+ }, pendingTimeout);
+ }
+ } else {
+ var map = linkMap[srcData.dpid];
+ if (map && map[dstData.dpid]) {
+ var prompt = 'Remove link between ' + srcData.dpid + ' and ' + dstData.dpid + '?';
+ if (confirm(prompt)) {
+ removeLink(map[dstData.dpid]);
+ }
+ } else {
+ map = linkMap[dstData.dpid];
+ if (map && map[srcData.dpid]) {
+ var prompt = 'Remove link between ' + dstData.dpid + ' and ' + srcData.dpid + '?';
+ if (confirm(prompt)) {
+ removeLink(map[srcData.dpid]);
+ }
+ } else {
+ var prompt = 'Create link between ' + srcData.dpid + ' and ' + dstData.dpid + '?';
+ if (confirm(prompt)) {
+ var link1 = {
+ 'src-switch': srcData.dpid,
+ 'src-port': 1,
+ 'dst-switch': dstData.dpid,
+ 'dst-port': 1,
+ pending: true
+ };
+ pendingLinks[makeLinkKey(link1)] = link1;
+ var link2 = {
+ 'src-switch': dstData.dpid,
+ 'src-port': 1,
+ 'dst-switch': srcData.dpid,
+ 'dst-port': 1,
+ pending: true
+ };
+ pendingLinks[makeLinkKey(link2)] = link2;
+ updateTopology();
+
+ linkUp(link1);
+
+ // remove the pending links after 10s
+ setTimeout(function () {
+ delete pendingLinks[makeLinkKey(link1)];
+ delete pendingLinks[makeLinkKey(link2)];
+
+ updateTopology();
+ }, pendingTimeout);
+ }
+ }
+ }
+ }
+
+ clearHighlight();
+ } else {
+ clearHighlight();
+ }
+});
+
+d3.select(document.body).on('mousemove', function () {
+ if (!d3.select('#topologyArea').classed('linking')) {
+ return;
+ }
+ var linkVector = document.getElementById('linkVector');
+ if (!linkVector) {
+ return;
+ }
+ linkVector = d3.select(linkVector);
+
+ var highlighted = topology.selectAll('.highlight')[0];
+ var s1 = null, s2 = null;
+ if (highlighted.length > 1) {
+ var s1 = d3.select(highlighted[0]);
+ var s2 = d3.select(highlighted[1]);
+
+ } else if (highlighted.length > 0) {
+ var s1 = d3.select(highlighted[0]);
+ }
+ var src = s1;
+ if (s2 && !s2.data()[0].target) {
+ src = s2;
+ }
+ if (src) {
+ linkVector.attr('d', function () {
+ var srcPt = document.querySelector('svg').createSVGPoint();
+ srcPt.x = src.attr('x');
+ srcPt.y = src.attr('y');
+ srcPt = srcPt.matrixTransform(src[0][0].getCTM());
+
+ var svg = document.getElementById('topology');
+ var mouse = d3.mouse(viewbox);
+ var dstPt = document.querySelector('svg').createSVGPoint();
+ dstPt.x = mouse[0];
+ dstPt.y = mouse[1];
+ dstPt = dstPt.matrixTransform(viewbox.getCTM());
+
+ return line([srcPt, dstPt]);
+ });
+ }
+});
diff --git a/web/ons-demo/js/utils.js b/web/ons-demo/js/utils.js
index 4f6d0c1..be7cf53 100644
--- a/web/ons-demo/js/utils.js
+++ b/web/ons-demo/js/utils.js
@@ -1,3 +1,6 @@
+/***************************************************************************************************
+extract url parameters into a map
+***************************************************************************************************/
function parseURLParameters() {
var parameters = {};
@@ -13,12 +16,141 @@
return parameters;
}
-function findLink(model, dpid) {
- var links = [];
- model.links.forEach(function (link) {
- if (link['src-switch'] == dpid || link['dst-switch'] == dpid) {
- links.push(link);
+/***************************************************************************************************
+convenience function for moving an SVG element to the front so that it draws on top
+***************************************************************************************************/
+d3.selection.prototype.moveToFront = function() {
+ return this.each(function(){
+ this.parentNode.appendChild(this);
+ });
+};
+
+/***************************************************************************************************
+standard function for generating the 'd' attribute for a path from an array of points
+***************************************************************************************************/
+var line = d3.svg.line()
+ .x(function(d) {
+ return d.x;
+ })
+ .y(function(d) {
+ return d.y;
+ });
+
+
+/***************************************************************************************************
+starts the "pending" animation
+***************************************************************************************************/
+function setPending(selection) {
+ selection.classed('pending', false);
+ setTimeout(function () {
+ selection.classed('pending', true);
+ }, 0);
+}
+
+/***************************************************************************************************
+convert angle in degrees to radians
+***************************************************************************************************/
+function toRadians (degrees) {
+ return degrees * (Math.PI / 180);
+}
+
+/***************************************************************************************************
+used to generate DOM element id for this link
+***************************************************************************************************/
+function makeLinkKey(link) {
+ return link['src-switch'] + '=>' + link['dst-switch'];
+}
+
+/***************************************************************************************************
+used to generate DOM element id for this flow in the topology view
+***************************************************************************************************/
+function makeFlowKey(flow) {
+ return flow.srcDpid + '=>' + flow.dstDpid;
+}
+
+/***************************************************************************************************
+used to generate DOM element id for this flow in the selected flows table
+***************************************************************************************************/
+function makeSelectedFlowKey(flow) {
+ return 'S' + makeFlowKey(flow);
+}
+
+/***************************************************************************************************
+update the app header using the current model
+***************************************************************************************************/
+function updateHeader() {
+ d3.select('#lastUpdate').text(new Date());
+
+ var count = 0;
+ model.edgeSwitches.forEach(function (s) {
+ if (s.state === 'ACTIVE') {
+ count += 1;
}
});
- return links;
-}
\ No newline at end of file
+ model.aggregationSwitches.forEach(function (s) {
+ if (s.state === 'ACTIVE') {
+ count += 1;
+ }
+ });
+ model.coreSwitches.forEach(function (s) {
+ if (s.state === 'ACTIVE') {
+ count += 1;
+ }
+ });
+
+ d3.select('#activeSwitches').text(count);
+ d3.select('#activeFlows').text(model.flows.length);
+}
+
+/***************************************************************************************************
+update the global linkmap
+***************************************************************************************************/
+function updateLinkMap(links) {
+ linkMap = {};
+ links.forEach(function (link) {
+ var srcDPID = link['src-switch'];
+ var dstDPID = link['dst-switch'];
+
+ var srcMap = linkMap[srcDPID] || {};
+
+ srcMap[dstDPID] = link;
+
+ linkMap[srcDPID] = srcMap;
+ });
+}
+
+/***************************************************************************************************
+// removes links from the pending list that are now in the model
+***************************************************************************************************/
+function reconcilePendingLinks(model) {
+ links = [];
+ model.links.forEach(function (link) {
+ links.push(link);
+ delete pendingLinks[makeLinkKey(link)]
+ })
+ var linkId;
+ for (linkId in pendingLinks) {
+ links.push(pendingLinks[linkId]);
+ }
+}
+
+/***************************************************************************************************
+used by both ring and map models
+***************************************************************************************************/
+function createRootSVG() {
+ var svg = d3.select('#svg-container').append('svg:svg');
+
+ svg.append("svg:defs").append("svg:marker")
+ .attr("id", "arrow")
+ .attr("viewBox", "0 -5 10 10")
+ .attr("refX", -1)
+ .attr("markerWidth", 5)
+ .attr("markerHeight", 5)
+ .attr("orient", "auto")
+ .append("svg:path")
+ .attr("d", "M0,-3L10,0L0,3");
+
+ return svg;
+}
+
+
diff --git a/web/topology_rest.py b/web/topology_rest.py
index 06e4758..7bbf7ce 100755
--- a/web/topology_rest.py
+++ b/web/topology_rest.py
@@ -78,6 +78,7 @@
@app.route('/tpl/<filename>', methods=['GET'])
@app.route('/ons-demo/<filename>', methods=['GET'])
@app.route('/ons-demo/js/<filename>', methods=['GET'])
+@app.route('/ons-demo/d3/<filename>', methods=['GET'])
@app.route('/ons-demo/css/<filename>', methods=['GET'])
@app.route('/ons-demo/assets/<filename>', methods=['GET'])
@app.route('/ons-demo/data/<filename>', methods=['GET'])
@@ -87,7 +88,7 @@
else:
fullpath = str(request.path)[1:]
- try:
+ try:
open(fullpath)
except:
response = make_response("Cannot find a file: %s" % (fullpath), 500)
@@ -215,6 +216,19 @@
resp = Response(result, status=200, mimetype='application/json')
return resp
+@app.route("/proxy/gui/switchctrl/<cmd>")
+def proxy_switch_controller_setting(cmd):
+ try:
+ command = "curl -s %s/gui/switchctrl/%s" % (ONOS_GUI3_CONTROL_HOST, cmd)
+ print command
+ result = os.popen(command).read()
+ except:
+ print "REST IF has issue"
+ exit
+
+ resp = Response(result, status=200, mimetype='application/json')
+ return resp
+
###### ONOS RESET API ##############################
## Worker Func ###
@@ -223,7 +237,7 @@
try:
command = "curl -s %s" % (url)
result = os.popen(command).read()
- parsedResult = json.loads(result)
+ parsedResult = json.loads(result)
if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
print "REST %s returned code %s" % (command, parsedResult['code'])
code=500
@@ -241,7 +255,7 @@
host=controllers[r]
else:
host=ONOS_DEFAULT_HOST
-
+
return "http://" + host + ":8080"
## Switch ##
@@ -698,7 +712,7 @@
print "All aggr switches connects to local controller only"
result=""
if (TESTBED == "sw"):
- for i in range(0, len(controllers)):
+ for i in range(0, len(controllers)):
cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./ctrl-local.sh'" % (controllers[i])
result += os.popen(cmd_string).read()
else:
@@ -708,10 +722,10 @@
print "All aggr switches connects to all controllers except for core controller"
result=""
if (TESTBED == "sw"):
- for i in range(0, len(controllers)):
+ for i in range(0, len(controllers)):
cmd_string="ssh -i ~/.ssh/onlabkey.pem %s 'cd ONOS/scripts; ./ctrl-add-ext.sh'" % (controllers[i])
result += os.popen(cmd_string).read()
- else:
+ else:
cmd_string="cd; switch all"
result += os.popen(cmd_string).read()
@@ -745,7 +759,7 @@
def link_up(src_dpid, src_port, dst_dpid, dst_port):
result = ""
- if (TESTBED == "sw"):
+ if (TESTBED == "sw"):
result = link_up_sw(src_dpid, src_port, dst_dpid, dst_port)
else:
result = link_up_hw(src_dpid, src_port, dst_dpid, dst_port)