diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5c81fc3a..34838717 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,37 +1,41 @@ name: CI on: - - push - - pull_request + pull_request: + branches: + - master + workflow_dispatch: jobs: test: - name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - runs-on: ${{ matrix.os }} + name: Julia ${{ matrix.version }} + runs-on: [self-hosted,titan,gpu] strategy: fail-fast: false matrix: version: - - '1.7' - - '1.8' - os: - - ubuntu-latest - - macOS-latest - arch: - - x64 + - '1.9' + - '1.10' steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@v1 + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.version }} - arch: ${{ matrix.arch }} - uses: julia-actions/julia-buildpkg@latest - uses: julia-actions/julia-runtest@latest env: JULIA_NUM_THREADS: 4 - uses: julia-actions/julia-processcoverage@v1 - # - uses: codecov/codecov-action@v1 - # with: - # file: lcov.info - uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: lcov.info + parallel: true + flag-name: run-${{ matrix.version }} + finish: + needs: test + runs-on: [self-hosted,titan] + steps: + - name: Close parallel build + uses: coverallsapp/github-action@v1 + with: + parallel-finished: true + carryforward: "run-1.9,run-1.10" \ No newline at end of file diff --git a/.gitignore b/.gitignore index d9575a1f..8e290a5e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ docs/build **/.DS_Store Manifest.toml sysimage.so +benchmarks/run_bench.sh +*.pb.gz diff --git a/Project.toml b/Project.toml index 41e1ff4a..f68fe706 100644 --- a/Project.toml +++ b/Project.toml @@ -1,32 +1,41 @@ name = "SpinGlassEngine" uuid = "0563570f-ea1b-4080-8a64-041ac6565a4e" -version = "0.4.0" +authors = ["Anna Maria Dziubyna ", "Tomasz Śmierzchalski ", "Bartłomiej Gardas ", "Konrad Jałowiecki ", "Łukasz Pawela ", "Marek M. Rams "] +version = "1.0.0" [deps] +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" LabelledGraphs = "605abd48-4d17-4660-b914-d4df33194460" -LightGraphs = "093fc24a-ae57-5d10-9952-331d41423f4d" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -Memoize = "c03570c3-d221-55d1-a50c-7939bbd78826" +MKL = "33e6dc65-8f57-5167-99aa-e5a354878fb2" +Memoization = "6fafb56a-5788-4b4e-91ca-c0cea6611c73" MetaGraphs = "626554b9-1ddb-594c-aa3c-2596fe9399a5" +NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" +SpinGlassExhaustive = "a894d7c4-7f54-4100-9d77-d00d924adeb3" SpinGlassNetworks = "b7f6bd3e-55dc-4da6-96a9-ef9dbec6ac19" SpinGlassTensors = "7584fc6a-5a23-4eeb-8277-827aab0146ea" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" TensorCast = "02d47bb6-7ce6-556a-be16-bb1710789e2b" TensorOperations = "6aa20fa7-93e2-5fca-9bc0-fbd0db3c71a2" [compat] -DocStringExtensions = "0.8" -LabelledGraphs = "0.3" -LightGraphs = "1.3" -Memoize = "0.4" -MetaGraphs = "0.6, 0.7" -ProgressMeter = "1.7" -SpinGlassNetworks = "0.3" -SpinGlassTensors = "0.3" -TensorCast = "0.3, 0.4" -TensorOperations = "3.0.1" -julia = "1.7, 1.8" +CUDA = "5" +DocStringExtensions = "0.9" +Graphs = "1.9" +LabelledGraphs = "0.4.4" +Memoization = "0.2" +MetaGraphs = "0.7" +ProgressMeter = "1.10" +SpinGlassExhaustive = "1.0.0" +SpinGlassNetworks = "1.1.2" +SpinGlassTensors = "1.1.1" +Statistics = "1.7.0" +TensorCast = "0.4" +TensorOperations = "4" +julia = "1.9, 1.10" [extras] Logging = "56ddb016-857b-54e1-b83d-db4d58db5568" diff --git a/docs/make.jl b/docs/make.jl index 4eed6f2f..915e7198 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,9 +1,11 @@ using Documenter, SpinGlassEngine _pages = [ - "Introduction" => "index.md", - "User Guide" => "guide.md", - "API Reference" => "api.md" + "User Guide" => "guide.md", + "Tensor network" => "peps.md", + "Search parameters" => "params.md", + "Low energy spectrum" => "search.md", + "API Reference for auxiliary functions" => "api.md" ] # ============================ diff --git a/docs/src/api.md b/docs/src/api.md index 22c361a4..f33b87a3 100644 --- a/docs/src/api.md +++ b/docs/src/api.md @@ -2,11 +2,100 @@ --- +## Search +```@docs +empty_solution +gibbs_sampling +bound_solution +no_merge +branch_energy +``` + ## Core +```@docs +error_measure +conditional_probability +update_energy +boundary +boundary_indices +Gauges +GaugeInfo +PEPSNode +SuperPEPSNode +``` + +## Contractor +```@docs +MpoLayers +layout +sparsity +strategy +mpo +mps_top +mps +mps_approx +dressed_mps +right_env +left_env +clear_memoize_cache +clear_memoize_cache_after_row +``` + +## Operations +```@docs +vertex_map +check_bounds +LatticeTransformation +``` + +## Droplets +```@docs +Flip +Droplet +NoDroplets +hamming_distance +unpack_droplets +perm_droplet +filter_droplets +my_push! +diversity_metric +merge_droplets +flip_state + +``` +## PEPS ```@docs -Solution -Solution() -low_energy_spectrum -PEPSNetwork +SpinGlassEngine.local_energy +SpinGlassEngine.interaction_energy +normalize_probability +initialize_gauges! +decode_state +SpinGlassEngine.bond_energy +SpinGlassEngine.projector +spectrum +is_compatible +ones_like +tensor_map +size +exact_spectrum +discard_probabilities! +mod_wo_zero +exact_marginal_probability +_normalize +projectors_site_tensor +branch_probability +exact_conditional_probability +branch_solution +gauges_list +branch_energies +_equalize +nodes_search_order_Mps +sampling +VirtualDoubleNode +fuse_projectors +local_spins +tensor +branch_states +precompute_conditional ``` \ No newline at end of file diff --git a/docs/src/guide.md b/docs/src/guide.md index 249e7174..e2429dc8 100644 --- a/docs/src/guide.md +++ b/docs/src/guide.md @@ -1,43 +1,5 @@ # Introduction -We consider a classical Ising Hamiltonian -```math -E = \sum_{ \in \mathcal{E}} J_{ij} s_i s_j + \sum_j h_i s_j. -``` -where ``s`` is a configuration of ``N`` classical spins taking values ``s_i = \pm 1`` -and ``J_{ij}, h_i \in \mathbb{R}`` are input parameters of a given problem instance. -Nonzero couplings ``J_{ij}`` form a graph ``\mathcal{E}``. Edges of ``\mathcal{E}`` form a quasi-two-dimensional structure. In this package we focus in particular on the [Chimera](https://docs.dwavesys.com/docs/latest/c_gs_4.html#chimera-graph) graph with up to 2048 spins. +A [Julia](http://julialang.org) package for finding low energy spectrum of Ising spin systems. Part of [SpinGlassPEPS](https://github.com/euro-hpc-pl/SpinGlassPEPS.jl) package. +This part of the documentation is dedicated to describing the `SpinGlassEngine.jl` package, which serves as the actual solver. First, we will demonstrate how to construct a tensor network using the clustered Hamiltonian obtained with the `SpinGlassNetworks.jl` package. Next, we discuss the parameters necessary for conducting calculations, which the user should provide. Finally, we present functions that enable the discovery of low-energy spectra. -## Finding structure of low energy states -Below we describe simple Ising chain spin system with open boundary condition. The system has three spins with couplings ``J_{12} = -1.0`` and``J_{23} = 1.0``. Additionaly there are local fields ``h_1 = 0.5``, ``h_2 = 0.75`` and ``h_3 = -0.25``. - -We can calculate spectrum using `SpinGlassPEPS`. First we create graph (called Ising graph) which corespond to given Ising system. Then from this graph we create PEPS tensor network. Lastly we define model's parameters and control parameters such as `num_states` - maximal number of low energy states to be found. Then we can use function `low_energy_spectrum` to find desired low energy spectrum. - - -```@example -using SpinGlassEngine, SpinGlassTensors, SpinGlassNetworks, SpinGlassPEPS, MetaGraphs - -# Create instance and coresponding factor graph. Details can be -# found in SpinGlassNetworks documentation. -instance = Dict((1, 1) => 0.5, (2, 2) => 0.75, (3, 3) => -0.25, (1, 2) => -1.0, (2, 3) => 1.0) -ig = ising_graph(instance) -fg = factor_graph( - ig, - cluster_assignment_rule = super_square_lattice((3, 1, 1)), - ) - -# Define inverse temperature for gibbs distribution used in tensor network -# contraction. Details can be found in SpinGlassEngine documentation -β = 1.0 - -# Create PEPS network -peps = PEPSNetwork(3, 1, fg, rotation(0), β = β, bond_dim = 32) - -# Decide number of states we wane -num_states = 3 - -# Solve model -sol = low_energy_spectrum(peps, num_states) -@show sol.states, sol.energies - -``` diff --git a/docs/src/images/annealing.png b/docs/src/images/annealing.png new file mode 100644 index 00000000..6ca60bb1 Binary files /dev/null and b/docs/src/images/annealing.png differ diff --git a/docs/src/images/bb.png b/docs/src/images/bb.png new file mode 100644 index 00000000..32b0edde Binary files /dev/null and b/docs/src/images/bb.png differ diff --git a/docs/src/images/branch_bound.png b/docs/src/images/branch_bound.png new file mode 100644 index 00000000..c42f6468 Binary files /dev/null and b/docs/src/images/branch_bound.png differ diff --git a/docs/src/images/clustering.png b/docs/src/images/clustering.png new file mode 100644 index 00000000..999f783c Binary files /dev/null and b/docs/src/images/clustering.png differ diff --git a/docs/src/images/contract.png b/docs/src/images/contract.png new file mode 100644 index 00000000..97007ea9 Binary files /dev/null and b/docs/src/images/contract.png differ diff --git a/docs/src/images/explain.png b/docs/src/images/explain.png new file mode 100644 index 00000000..de996973 Binary files /dev/null and b/docs/src/images/explain.png differ diff --git a/docs/src/images/geometry.png b/docs/src/images/geometry.png new file mode 100644 index 00000000..8d9bd3d7 Binary files /dev/null and b/docs/src/images/geometry.png differ diff --git a/docs/src/images/graphs.png b/docs/src/images/graphs.png new file mode 100644 index 00000000..dd4f5806 Binary files /dev/null and b/docs/src/images/graphs.png differ diff --git a/docs/src/images/lattice.png b/docs/src/images/lattice.png new file mode 100644 index 00000000..5ece9f06 Binary files /dev/null and b/docs/src/images/lattice.png differ diff --git a/docs/src/images/layout.png b/docs/src/images/layout.png new file mode 100644 index 00000000..e41a7b67 Binary files /dev/null and b/docs/src/images/layout.png differ diff --git a/docs/src/images/peg.png b/docs/src/images/peg.png new file mode 100644 index 00000000..986ff933 Binary files /dev/null and b/docs/src/images/peg.png differ diff --git a/docs/src/images/pegasus.png b/docs/src/images/pegasus.png new file mode 100644 index 00000000..4fff2ceb Binary files /dev/null and b/docs/src/images/pegasus.png differ diff --git a/docs/src/images/peps_graph.png b/docs/src/images/peps_graph.png new file mode 100644 index 00000000..27a8dcf8 Binary files /dev/null and b/docs/src/images/peps_graph.png differ diff --git a/docs/src/images/prob.png b/docs/src/images/prob.png new file mode 100644 index 00000000..d2be3d78 Binary files /dev/null and b/docs/src/images/prob.png differ diff --git a/docs/src/images/sd.png b/docs/src/images/sd.png new file mode 100644 index 00000000..67c1ef8b Binary files /dev/null and b/docs/src/images/sd.png differ diff --git a/docs/src/images/square_cross_double.png b/docs/src/images/square_cross_double.png new file mode 100644 index 00000000..f142c0b7 Binary files /dev/null and b/docs/src/images/square_cross_double.png differ diff --git a/docs/src/images/square_cross_single.png b/docs/src/images/square_cross_single.png new file mode 100644 index 00000000..c95f1426 Binary files /dev/null and b/docs/src/images/square_cross_single.png differ diff --git a/docs/src/images/square_diag.png b/docs/src/images/square_diag.png new file mode 100644 index 00000000..3669a4bf Binary files /dev/null and b/docs/src/images/square_diag.png differ diff --git a/docs/src/images/square_double.png b/docs/src/images/square_double.png new file mode 100644 index 00000000..6a6d20a4 Binary files /dev/null and b/docs/src/images/square_double.png differ diff --git a/docs/src/images/square_single.png b/docs/src/images/square_single.png new file mode 100644 index 00000000..a9d19e82 Binary files /dev/null and b/docs/src/images/square_single.png differ diff --git a/docs/src/images/svd_truncate.png b/docs/src/images/svd_truncate.png new file mode 100644 index 00000000..da203456 Binary files /dev/null and b/docs/src/images/svd_truncate.png differ diff --git a/docs/src/images/trans.png b/docs/src/images/trans.png new file mode 100644 index 00000000..23f6a882 Binary files /dev/null and b/docs/src/images/trans.png differ diff --git a/docs/src/images/zep.png b/docs/src/images/zep.png new file mode 100644 index 00000000..962ce436 Binary files /dev/null and b/docs/src/images/zep.png differ diff --git a/docs/src/images/zephyr.png b/docs/src/images/zephyr.png new file mode 100644 index 00000000..1e60edec Binary files /dev/null and b/docs/src/images/zephyr.png differ diff --git a/docs/src/images/zipper.png b/docs/src/images/zipper.png new file mode 100644 index 00000000..3638ef41 Binary files /dev/null and b/docs/src/images/zipper.png differ diff --git a/docs/src/images/zipper_final.png b/docs/src/images/zipper_final.png new file mode 100644 index 00000000..206096ec Binary files /dev/null and b/docs/src/images/zipper_final.png differ diff --git a/docs/src/params.md b/docs/src/params.md new file mode 100644 index 00000000..556c5bf3 --- /dev/null +++ b/docs/src/params.md @@ -0,0 +1,96 @@ +# Contracting PEPS tensor network +Once we construct the tensor network, we can proceed with its contraction. The first step involves preparing structures to store information about the approximate contraction using the MPS-MPO method and the exploration of states through the branch-and-bound algorithm. + +```@docs +MpsContractor +``` + +# Structures to store parameters used in branch and bound search +```@docs +MpsParameters +SearchParameters +``` + +# Strategy +In the boundary MPS-MPO approach we apply Matrix Product Operator (MPO) to appropriate sites of Matrix Product State (MPS). In this context, the absorption of a MPO into a MPS leads to an exponential growth of the bond dimension. Hence, a truncation scheme is necessary to mitigate this issue and to keep the bond dimension in a reasonable size. +Our package offers users the flexibility to choose between three distinct methods for optimizing the boundary MPS used in contracting the tensor network: +* `Zipper` +* `MPSAnnealing` +* `SVDTruncate`. +`Zipper` method combines randomized truncated Singular Value Decomposition (SVD) and a variational scheme. +```@raw html + +``` +With the `SVDTruncate` method, the Matrix Product State (MPS) is systematically constructed row by row, contracted with the Matrix Product Operator (MPO) from the preceding row. The resulting MPS undergoes a Singular Value Decomposition (SVD) to truncate its bond dimension, followed by variational compression. +```@raw html + +``` +On the other hand, the `MPSAnnealing` method tailors the construction of MPS based on variational compression. +```@raw html + +``` + +# Sparsity +Our software package acknowledges the importance of two fundamental methodologies in tensor processing +* `Dense` +* `Sparse`. +The latter, referred to as sparsity, plays a pivotal role in manipulation on large tensors. To accommodate this, our package offers the flexibility to choose the `Sparse` mode. In this mode, tensors are not explicitly constructed but are stored in structures and represented as blocks, in which not every dimension is contracted. This choice not only optimizes memory utilization but also significantly improves computational efficiency. In the `Dense` mode tensors are build explicitly. + +# Geometry + +* `SquareSingleNode` +```@raw html + +``` +```@docs +SquareSingleNode +``` + +* `SquareDoubleNode` +```@raw html + +``` +```@docs +SquareDoubleNode +``` + +* `SquareCrossSingleNode` +```@raw html + +``` +```@docs +SquareCrossSingleNode +``` + +* `SquareCrossDoubleNode` +```@raw html + +``` +```@docs +SquareCrossDoubleNode +``` + +# Layout +`SpinGlassPEPS.jl` allows for different decompositions of the network into MPOs: +* `GaugesEnergy` +* `EnergyGauges` +* `EngGaugesEng` +For complex problems, the solution may depend on the choice of decomposition. + +```@raw html + +``` + +# Lattice transformations +Our package offers users the ability to undergo diverse transformations of PEPS network. Notably, users can apply `rotations`, occurring in multiples of $\frac{\pi}{2}$ radians, and `reflections` along various axes. These transformations include rotations and reflections around the horizontal (x), vertical (y), diagonal, and antidiagonal axes. Transformations are used to contract PEPS and perform search starting from different sites of the lattice. +```@raw html + +``` +```@docs +all_lattice_transformations +rotation +reflection +``` + +# Gauge +Currently only `NoUpdate` mode is supported. \ No newline at end of file diff --git a/docs/src/peps.md b/docs/src/peps.md new file mode 100644 index 00000000..61fa9fa6 --- /dev/null +++ b/docs/src/peps.md @@ -0,0 +1,38 @@ +# Constructing PEPS tensor network + +After creating the clustered Hamiltonian, we can turn it into a PEPS tensor network as shown in the Section [Brief description of the algorithm](../algorithm.md). + +```@docs +PEPSNetwork +``` + +## Basic example of usage + +```@example +using SpinGlassEngine, SpinGlassTensors, SpinGlassNetworks, SpinGlassPEPS +using SpinGlassExhaustive +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics + +m, n, t = 5, 5, 4 +onGPU = true +instance = "$(@__DIR__)/../../src/instances/square_diagonal/5x5/diagonal.txt" + +Strategy = Zipper +transform = rotation(0) +Layout = GaugesEnergy +Sparsity = Sparse + +ig = ising_graph(instance) +cl_h = clustered_hamiltonian( + ig, + spectrum = full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) +) + +net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) +``` diff --git a/docs/src/search.md b/docs/src/search.md new file mode 100644 index 00000000..8392d9d0 --- /dev/null +++ b/docs/src/search.md @@ -0,0 +1,18 @@ +# Branch and bound search +Here you find the main function of the package, which is an actual solver. + +```@docs +low_energy_spectrum +merge_branches +merge_branches_blur +``` +Results of the branch and bound search are stored in a Solution structure. +```@docs +Solution +``` + +# Droplet search +`SpinGlassPEPS.jl` offers the possibility not only finding low lying energy states, but also droplet excitations. In order to search for droplets, one need to choose the option `SingleLayerDroplets` in `merge_branches`. +```@docs +SingleLayerDroplets +``` \ No newline at end of file diff --git a/examples/data.jld b/examples/data.jld new file mode 100644 index 00000000..e310aa84 Binary files /dev/null and b/examples/data.jld differ diff --git a/examples/instances/P16_CBFM-P.txt b/examples/instances/P16_CBFM-P.txt new file mode 100644 index 00000000..21200787 --- /dev/null +++ b/examples/instances/P16_CBFM-P.txt @@ -0,0 +1,43992 @@ +# +1 1 -1 +2 2 -1 +3 3 -1 +4 4 -1 +5 5 -1 +6 6 -1 +7 7 -1 +9 9 -1 +10 10 -1 +11 11 -1 +12 12 -1 +13 13 -1 +14 14 0 +15 15 0 +16 16 -1 +17 17 -1 +18 18 -1 +19 19 -1 +20 20 -1 +21 21 -1 +22 22 -1 +23 23 -1 +24 24 -1 +25 25 -1 +26 26 -1 +27 27 -1 +28 28 -1 +29 29 -1 +30 30 -1 +31 31 -1 +32 32 -1 +33 33 -1 +34 34 -1 +35 35 -1 +36 36 -1 +37 37 -1 +38 38 -1 +39 39 -1 +40 40 0 +41 41 -1 +42 42 -1 +43 43 -1 +44 44 -1 +45 45 -1 +46 46 -1 +47 47 -1 +48 48 0 +49 49 -1 +50 50 0 +51 51 -1 +52 52 -1 +53 53 -1 +54 54 -1 +55 55 -1 +56 56 -1 +57 57 -1 +58 58 0 +59 59 -1 +60 60 -1 +61 61 -1 +62 62 -1 +63 63 -1 +64 64 -1 +65 65 -1 +66 66 -1 +67 67 0 +68 68 -1 +69 69 -1 +70 70 -1 +71 71 -1 +72 72 -1 +73 73 -1 +74 74 -1 +75 75 -1 +76 76 -1 +77 77 -1 +78 78 -1 +79 79 -1 +80 80 -1 +81 81 -1 +82 82 -1 +83 83 -1 +84 84 -1 +85 85 -1 +86 86 -1 +87 87 -1 +88 88 -1 +89 89 -1 +90 90 -1 +91 91 -1 +92 92 -1 +93 93 -1 +94 94 -1 +95 95 -1 +96 96 -1 +97 97 0 +98 98 -1 +99 99 -1 +100 100 -1 +101 101 -1 +102 102 -1 +103 103 -1 +104 104 -1 +105 105 -1 +106 106 -1 +107 107 -1 +108 108 -1 +109 109 0 +110 110 -1 +111 111 -1 +112 112 0 +113 113 -1 +114 114 -1 +115 115 -1 +116 116 -1 +117 117 -1 +118 118 -1 +119 119 -1 +120 120 -1 +121 121 -1 +122 122 -1 +123 123 -1 +124 124 -1 +125 125 -1 +126 126 -1 +127 127 -1 +128 128 -1 +129 129 -1 +130 130 -1 +131 131 -1 +132 132 0 +133 133 -1 +134 134 -1 +135 135 -1 +136 136 -1 +137 137 -1 +138 138 0 +139 139 -1 +140 140 -1 +141 141 0 +142 142 -1 +143 143 -1 +144 144 0 +145 145 0 +146 146 -1 +147 147 -1 +148 148 -1 +149 149 -1 +150 150 -1 +151 151 -1 +152 152 -1 +153 153 -1 +154 154 -1 +155 155 -1 +156 156 0 +157 157 -1 +158 158 0 +159 159 -1 +160 160 -1 +161 161 -1 +162 162 -1 +163 163 -1 +164 164 -1 +165 165 -1 +166 166 -1 +167 167 -1 +168 168 -1 +169 169 -1 +170 170 -1 +171 171 -1 +172 172 -1 +173 173 -1 +174 174 -1 +175 175 -1 +176 176 -1 +177 177 -1 +178 178 -1 +179 179 -1 +180 180 -1 +181 181 -1 +182 182 0 +183 183 -1 +184 184 -1 +185 185 -1 +186 186 -1 +187 187 -1 +188 188 -1 +189 189 -1 +190 190 -1 +191 191 -1 +192 192 -1 +193 193 -1 +194 194 0 +195 195 -1 +196 196 -1 +197 197 -1 +198 198 -1 +199 199 -1 +200 200 0 +201 201 -1 +202 202 -1 +203 203 -1 +204 204 -1 +205 205 -1 +206 206 0 +207 207 -1 +208 208 -1 +209 209 -1 +210 210 0 +211 211 -1 +212 212 -1 +213 213 -1 +214 214 -1 +215 215 -1 +216 216 -1 +217 217 -1 +218 218 -1 +219 219 0 +220 220 -1 +221 221 -1 +222 222 -1 +223 223 -1 +224 224 -1 +225 225 -1 +226 226 0 +227 227 -1 +228 228 -1 +229 229 -1 +230 230 -1 +231 231 -1 +232 232 -1 +233 233 -1 +234 234 -1 +235 235 0 +236 236 -1 +237 237 -1 +238 238 -1 +239 239 -1 +240 240 -1 +241 241 -1 +242 242 -1 +243 243 -1 +244 244 -1 +245 245 -1 +246 246 0 +247 247 -1 +248 248 -1 +249 249 -1 +250 250 -1 +251 251 -1 +252 252 -1 +253 253 -1 +254 254 -1 +255 255 -1 +256 256 -1 +257 257 -1 +258 258 -1 +259 259 -1 +260 260 -1 +261 261 -1 +262 262 0 +263 263 -1 +264 264 -1 +265 265 -1 +266 266 -1 +267 267 -1 +268 268 -1 +269 269 -1 +270 270 -1 +271 271 -1 +272 272 -1 +273 273 0 +274 274 -1 +275 275 -1 +276 276 0 +277 277 -1 +278 278 -1 +279 279 -1 +280 280 -1 +281 281 -1 +282 282 -1 +283 283 -1 +284 284 -1 +285 285 -1 +286 286 -1 +287 287 -1 +288 288 -1 +289 289 -1 +290 290 -1 +291 291 0 +292 292 -1 +293 293 -1 +294 294 -1 +295 295 -1 +296 296 -1 +297 297 -1 +298 298 -1 +299 299 -1 +300 300 0 +301 301 -1 +302 302 -1 +303 303 0 +304 304 -1 +305 305 -1 +306 306 -1 +307 307 0 +308 308 0 +309 309 -1 +310 310 0 +311 311 0 +312 312 -1 +313 313 -1 +314 314 -1 +315 315 0 +316 316 -1 +317 317 -1 +318 318 -1 +319 319 -1 +320 320 -1 +321 321 -1 +322 322 -1 +323 323 -1 +324 324 -1 +325 325 0 +326 326 -1 +327 327 -1 +328 328 -1 +329 329 -1 +330 330 -1 +331 331 0 +332 332 0 +333 333 -1 +334 334 -1 +335 335 -1 +336 336 -1 +337 337 -1 +338 338 -1 +339 339 -1 +340 340 -1 +341 341 -1 +342 342 -1 +343 343 -1 +344 344 -1 +345 345 -1 +346 346 -1 +347 347 0 +348 348 -1 +349 349 -1 +350 350 -1 +351 351 -1 +352 352 -1 +353 353 -1 +354 354 -1 +355 355 -1 +356 356 -1 +357 357 0 +358 358 -1 +359 359 -1 +360 360 -1 +361 361 -1 +362 362 -1 +363 363 -1 +364 364 -1 +366 366 -1 +367 367 -1 +368 368 0 +369 369 -1 +370 370 0 +371 371 0 +372 372 0 +373 373 -1 +374 374 -1 +375 375 -1 +376 376 -1 +377 377 -1 +378 378 -1 +379 379 -1 +380 380 -1 +381 381 -1 +382 382 -1 +383 383 -1 +384 384 -1 +385 385 -1 +386 386 0 +387 387 -1 +388 388 -1 +389 389 -1 +390 390 -1 +391 391 -1 +392 392 -1 +393 393 -1 +394 394 0 +395 395 -1 +396 396 -1 +397 397 -1 +398 398 -1 +399 399 0 +400 400 0 +401 401 0 +402 402 -1 +403 403 -1 +404 404 -1 +405 405 -1 +406 406 0 +407 407 -1 +408 408 -1 +409 409 -1 +410 410 -1 +411 411 -1 +412 412 0 +413 413 -1 +414 414 -1 +415 415 0 +416 416 -1 +417 417 -1 +418 418 -1 +419 419 -1 +420 420 -1 +421 421 -1 +422 422 -1 +423 423 -1 +424 424 -1 +425 425 -1 +426 426 -1 +427 427 0 +428 428 -1 +429 429 0 +430 430 -1 +431 431 0 +432 432 -1 +433 433 0 +434 434 0 +435 435 -1 +436 436 -1 +437 437 -1 +438 438 -1 +439 439 -1 +440 440 -1 +441 441 0 +442 442 -1 +443 443 -1 +444 444 -1 +445 445 -1 +446 446 -1 +447 447 -1 +448 448 -1 +449 449 -1 +450 450 0 +451 451 -1 +452 452 -1 +453 453 -1 +454 454 -1 +455 455 -1 +456 456 -1 +457 457 -1 +458 458 -1 +459 459 -1 +460 460 -1 +461 461 -1 +462 462 -1 +463 463 -1 +464 464 -1 +465 465 -1 +466 466 -1 +467 467 0 +468 468 -1 +469 469 -1 +470 470 -1 +471 471 -1 +472 472 0 +473 473 -1 +474 474 -1 +475 475 -1 +476 476 -1 +477 477 -1 +478 478 -1 +479 479 0 +480 480 0 +481 481 -1 +482 482 -1 +483 483 0 +484 484 -1 +485 485 -1 +486 486 -1 +487 487 -1 +488 488 -1 +489 489 -1 +490 490 -1 +491 491 -1 +492 492 -1 +493 493 -1 +494 494 -1 +495 495 -1 +496 496 -1 +497 497 -1 +498 498 0 +499 499 -1 +500 500 -1 +501 501 -1 +502 502 -1 +503 503 0 +504 504 -1 +505 505 -1 +506 506 -1 +507 507 -1 +508 508 -1 +509 509 0 +510 510 -1 +511 511 -1 +512 512 -1 +513 513 -1 +514 514 -1 +515 515 -1 +516 516 -1 +517 517 -1 +518 518 0 +519 519 -1 +520 520 -1 +521 521 -1 +522 522 -1 +523 523 -1 +524 524 -1 +525 525 -1 +526 526 -1 +527 527 -1 +528 528 -1 +529 529 -1 +530 530 -1 +531 531 -1 +532 532 -1 +533 533 -1 +534 534 -1 +535 535 -1 +536 536 -1 +537 537 -1 +538 538 -1 +539 539 -1 +540 540 -1 +541 541 -1 +542 542 -1 +543 543 -1 +544 544 -1 +545 545 -1 +546 546 -1 +547 547 -1 +548 548 -1 +549 549 -1 +550 550 -1 +551 551 -1 +552 552 -1 +553 553 -1 +554 554 -1 +555 555 -1 +556 556 0 +557 557 -1 +558 558 -1 +559 559 -1 +560 560 -1 +561 561 0 +562 562 -1 +563 563 -1 +564 564 -1 +565 565 0 +566 566 -1 +567 567 -1 +568 568 -1 +569 569 -1 +570 570 0 +571 571 -1 +572 572 -1 +573 573 -1 +574 574 -1 +575 575 -1 +576 576 -1 +577 577 -1 +578 578 -1 +579 579 -1 +580 580 0 +581 581 -1 +582 582 -1 +583 583 -1 +584 584 0 +585 585 -1 +586 586 -1 +587 587 0 +588 588 -1 +589 589 -1 +590 590 -1 +591 591 -1 +592 592 -1 +593 593 -1 +594 594 -1 +595 595 -1 +596 596 -1 +597 597 -1 +598 598 0 +599 599 -1 +600 600 -1 +601 601 -1 +602 602 -1 +603 603 -1 +604 604 0 +605 605 -1 +606 606 0 +607 607 -1 +608 608 -1 +609 609 -1 +610 610 -1 +611 611 -1 +612 612 0 +613 613 -1 +614 614 -1 +615 615 -1 +616 616 0 +617 617 -1 +618 618 -1 +619 619 -1 +620 620 -1 +621 621 -1 +622 622 -1 +623 623 0 +624 624 -1 +625 625 -1 +626 626 -1 +627 627 0 +628 628 -1 +629 629 0 +630 630 -1 +631 631 -1 +632 632 -1 +633 633 -1 +634 634 0 +635 635 -1 +636 636 -1 +637 637 -1 +638 638 -1 +639 639 -1 +640 640 -1 +641 641 -1 +642 642 -1 +643 643 0 +644 644 -1 +645 645 -1 +646 646 -1 +647 647 -1 +648 648 -1 +649 649 -1 +650 650 -1 +651 651 -1 +652 652 -1 +653 653 -1 +654 654 -1 +655 655 -1 +656 656 -1 +657 657 -1 +658 658 -1 +659 659 -1 +660 660 -1 +661 661 -1 +662 662 -1 +663 663 -1 +664 664 0 +665 665 -1 +666 666 -1 +667 667 0 +668 668 0 +669 669 -1 +670 670 -1 +671 671 -1 +672 672 -1 +673 673 -1 +674 674 -1 +675 675 -1 +676 676 -1 +677 677 -1 +678 678 -1 +679 679 -1 +680 680 0 +681 681 -1 +682 682 -1 +683 683 -1 +684 684 -1 +685 685 -1 +686 686 0 +687 687 -1 +688 688 -1 +689 689 -1 +690 690 -1 +691 691 -1 +692 692 -1 +693 693 -1 +694 694 -1 +695 695 0 +696 696 0 +697 697 -1 +698 698 -1 +699 699 0 +700 700 -1 +701 701 -1 +702 702 -1 +703 703 -1 +704 704 -1 +705 705 -1 +706 706 -1 +707 707 -1 +708 708 0 +709 709 -1 +710 710 -1 +711 711 -1 +712 712 -1 +713 713 0 +714 714 -1 +715 715 -1 +716 716 -1 +717 717 -1 +718 718 -1 +719 719 -1 +720 720 -1 +721 721 -1 +722 722 -1 +723 723 0 +724 724 -1 +725 725 -1 +726 726 -1 +727 727 -1 +728 728 -1 +729 729 -1 +730 730 0 +731 731 0 +732 732 -1 +733 733 -1 +734 734 -1 +735 735 -1 +736 736 -1 +737 737 -1 +738 738 0 +739 739 -1 +740 740 -1 +741 741 -1 +742 742 -1 +743 743 -1 +744 744 -1 +745 745 -1 +746 746 -1 +747 747 -1 +748 748 0 +749 749 -1 +750 750 -1 +751 751 -1 +752 752 -1 +753 753 -1 +754 754 -1 +755 755 -1 +756 756 -1 +757 757 -1 +758 758 -1 +759 759 0 +760 760 -1 +761 761 -1 +762 762 -1 +763 763 -1 +764 764 -1 +765 765 -1 +766 766 -1 +767 767 -1 +768 768 -1 +769 769 -1 +770 770 -1 +771 771 -1 +772 772 -1 +773 773 -1 +774 774 -1 +775 775 -1 +776 776 0 +777 777 -1 +778 778 -1 +779 779 -1 +780 780 -1 +781 781 -1 +782 782 -1 +783 783 -1 +784 784 -1 +785 785 -1 +786 786 -1 +787 787 -1 +788 788 -1 +789 789 -1 +790 790 -1 +791 791 0 +793 793 -1 +794 794 -1 +795 795 -1 +796 796 -1 +797 797 -1 +798 798 -1 +799 799 -1 +800 800 0 +801 801 -1 +802 802 -1 +803 803 -1 +804 804 -1 +805 805 -1 +806 806 0 +807 807 -1 +808 808 -1 +809 809 -1 +810 810 -1 +811 811 -1 +812 812 -1 +813 813 -1 +814 814 -1 +815 815 -1 +816 816 -1 +817 817 -1 +818 818 0 +819 819 -1 +820 820 -1 +821 821 -1 +822 822 -1 +823 823 -1 +824 824 -1 +825 825 -1 +826 826 -1 +827 827 -1 +828 828 -1 +829 829 -1 +830 830 -1 +831 831 -1 +832 832 -1 +833 833 -1 +834 834 -1 +835 835 -1 +836 836 -1 +837 837 -1 +838 838 -1 +839 839 0 +840 840 -1 +841 841 -1 +842 842 -1 +843 843 -1 +844 844 -1 +845 845 -1 +846 846 -1 +847 847 -1 +848 848 -1 +849 849 -1 +850 850 -1 +851 851 -1 +852 852 0 +853 853 0 +854 854 0 +855 855 -1 +856 856 -1 +857 857 -1 +858 858 -1 +859 859 -1 +860 860 -1 +861 861 -1 +862 862 -1 +863 863 -1 +864 864 -1 +865 865 -1 +866 866 -1 +867 867 0 +868 868 -1 +869 869 -1 +870 870 -1 +871 871 -1 +872 872 -1 +873 873 0 +874 874 -1 +875 875 -1 +876 876 -1 +877 877 -1 +878 878 0 +879 879 -1 +880 880 0 +881 881 -1 +882 882 -1 +883 883 -1 +884 884 -1 +885 885 -1 +886 886 -1 +887 887 -1 +888 888 -1 +889 889 0 +890 890 -1 +891 891 -1 +892 892 -1 +893 893 -1 +894 894 0 +895 895 -1 +896 896 -1 +897 897 -1 +898 898 -1 +899 899 -1 +900 900 -1 +901 901 0 +902 902 -1 +903 903 -1 +904 904 -1 +905 905 -1 +906 906 -1 +907 907 -1 +908 908 0 +909 909 -1 +910 910 -1 +911 911 -1 +912 912 -1 +913 913 -1 +914 914 -1 +915 915 0 +916 916 -1 +917 917 -1 +918 918 -1 +919 919 -1 +920 920 -1 +921 921 -1 +922 922 -1 +923 923 0 +924 924 -1 +925 925 -1 +926 926 -1 +927 927 0 +928 928 -1 +929 929 0 +930 930 -1 +931 931 -1 +932 932 -1 +933 933 -1 +934 934 -1 +935 935 0 +936 936 -1 +937 937 -1 +938 938 -1 +939 939 -1 +940 940 -1 +941 941 -1 +942 942 -1 +943 943 -1 +944 944 -1 +945 945 -1 +946 946 -1 +947 947 -1 +948 948 -1 +949 949 -1 +950 950 -1 +951 951 -1 +952 952 -1 +953 953 0 +954 954 -1 +955 955 -1 +956 956 -1 +957 957 -1 +958 958 -1 +959 959 -1 +960 960 -1 +961 961 -1 +962 962 -1 +963 963 -1 +964 964 -1 +965 965 -1 +966 966 -1 +967 967 0 +968 968 -1 +969 969 -1 +970 970 -1 +971 971 -1 +972 972 -1 +973 973 -1 +974 974 -1 +975 975 -1 +976 976 -1 +977 977 -1 +978 978 -1 +979 979 -1 +980 980 0 +981 981 -1 +982 982 -1 +983 983 -1 +984 984 -1 +985 985 -1 +986 986 0 +987 987 -1 +988 988 -1 +989 989 -1 +990 990 -1 +991 991 -1 +992 992 -1 +993 993 -1 +994 994 -1 +995 995 -1 +996 996 -1 +997 997 -1 +998 998 0 +999 999 -1 +1000 1000 -1 +1001 1001 -1 +1002 1002 -1 +1003 1003 -1 +1004 1004 -1 +1005 1005 -1 +1006 1006 -1 +1007 1007 -1 +1008 1008 -1 +1009 1009 -1 +1010 1010 -1 +1011 1011 -1 +1012 1012 -1 +1013 1013 -1 +1014 1014 -1 +1015 1015 -1 +1016 1016 -1 +1017 1017 -1 +1018 1018 -1 +1019 1019 0 +1020 1020 -1 +1021 1021 -1 +1022 1022 -1 +1023 1023 -1 +1024 1024 -1 +1025 1025 0 +1026 1026 -1 +1027 1027 -1 +1028 1028 -1 +1029 1029 -1 +1030 1030 -1 +1031 1031 -1 +1032 1032 -1 +1033 1033 -1 +1034 1034 -1 +1035 1035 -1 +1036 1036 -1 +1037 1037 -1 +1038 1038 -1 +1039 1039 -1 +1040 1040 -1 +1041 1041 -1 +1042 1042 -1 +1043 1043 0 +1044 1044 -1 +1045 1045 -1 +1046 1046 0 +1047 1047 -1 +1048 1048 0 +1049 1049 -1 +1050 1050 -1 +1051 1051 -1 +1052 1052 0 +1053 1053 -1 +1054 1054 0 +1055 1055 -1 +1056 1056 -1 +1057 1057 -1 +1058 1058 -1 +1059 1059 -1 +1060 1060 -1 +1061 1061 -1 +1062 1062 0 +1063 1063 -1 +1064 1064 -1 +1065 1065 -1 +1066 1066 -1 +1067 1067 -1 +1068 1068 -1 +1069 1069 -1 +1070 1070 -1 +1071 1071 -1 +1072 1072 -1 +1073 1073 -1 +1074 1074 -1 +1075 1075 -1 +1076 1076 -1 +1077 1077 -1 +1078 1078 -1 +1079 1079 -1 +1080 1080 0 +1081 1081 -1 +1082 1082 -1 +1083 1083 0 +1084 1084 0 +1085 1085 -1 +1086 1086 0 +1087 1087 -1 +1088 1088 -1 +1089 1089 -1 +1090 1090 -1 +1091 1091 -1 +1092 1092 -1 +1093 1093 -1 +1094 1094 -1 +1095 1095 -1 +1096 1096 -1 +1097 1097 -1 +1098 1098 -1 +1099 1099 0 +1100 1100 -1 +1101 1101 0 +1102 1102 -1 +1103 1103 -1 +1104 1104 -1 +1105 1105 -1 +1106 1106 0 +1107 1107 -1 +1108 1108 -1 +1109 1109 -1 +1110 1110 -1 +1111 1111 0 +1112 1112 -1 +1113 1113 0 +1114 1114 -1 +1115 1115 0 +1116 1116 -1 +1117 1117 0 +1118 1118 0 +1119 1119 -1 +1120 1120 0 +1121 1121 -1 +1122 1122 -1 +1123 1123 -1 +1124 1124 0 +1125 1125 0 +1126 1126 -1 +1127 1127 -1 +1128 1128 -1 +1129 1129 -1 +1130 1130 -1 +1131 1131 -1 +1132 1132 -1 +1133 1133 -1 +1134 1134 0 +1135 1135 -1 +1136 1136 -1 +1137 1137 -1 +1138 1138 -1 +1139 1139 0 +1140 1140 0 +1141 1141 -1 +1142 1142 -1 +1143 1143 -1 +1144 1144 0 +1145 1145 -1 +1146 1146 -1 +1147 1147 -1 +1148 1148 -1 +1149 1149 -1 +1150 1150 0 +1151 1151 -1 +1152 1152 -1 +1153 1153 -1 +1154 1154 -1 +1155 1155 0 +1156 1156 -1 +1157 1157 -1 +1158 1158 -1 +1159 1159 -1 +1160 1160 -1 +1161 1161 0 +1162 1162 -1 +1163 1163 -1 +1164 1164 -1 +1165 1165 -1 +1166 1166 0 +1167 1167 -1 +1168 1168 -1 +1169 1169 -1 +1170 1170 -1 +1171 1171 -1 +1172 1172 -1 +1173 1173 -1 +1174 1174 -1 +1175 1175 -1 +1176 1176 0 +1177 1177 -1 +1178 1178 -1 +1179 1179 -1 +1180 1180 -1 +1181 1181 -1 +1182 1182 -1 +1183 1183 -1 +1184 1184 0 +1185 1185 -1 +1186 1186 -1 +1187 1187 -1 +1188 1188 0 +1189 1189 0 +1190 1190 -1 +1191 1191 -1 +1192 1192 0 +1193 1193 -1 +1194 1194 -1 +1195 1195 -1 +1196 1196 0 +1197 1197 0 +1198 1198 -1 +1199 1199 -1 +1200 1200 -1 +1201 1201 0 +1202 1202 -1 +1203 1203 -1 +1204 1204 -1 +1205 1205 -1 +1206 1206 -1 +1207 1207 -1 +1208 1208 -1 +1209 1209 -1 +1210 1210 -1 +1211 1211 -1 +1212 1212 -1 +1213 1213 0 +1214 1214 -1 +1215 1215 -1 +1216 1216 -1 +1217 1217 -1 +1218 1218 -1 +1219 1219 -1 +1220 1220 0 +1221 1221 -1 +1222 1222 0 +1223 1223 0 +1224 1224 -1 +1225 1225 -1 +1226 1226 -1 +1227 1227 -1 +1228 1228 -1 +1229 1229 -1 +1230 1230 -1 +1231 1231 -1 +1232 1232 -1 +1233 1233 -1 +1234 1234 -1 +1235 1235 -1 +1236 1236 -1 +1237 1237 -1 +1238 1238 -1 +1239 1239 -1 +1240 1240 -1 +1241 1241 -1 +1242 1242 0 +1243 1243 -1 +1244 1244 -1 +1245 1245 -1 +1246 1246 -1 +1247 1247 -1 +1248 1248 -1 +1249 1249 -1 +1250 1250 -1 +1251 1251 -1 +1252 1252 -1 +1253 1253 -1 +1254 1254 -1 +1255 1255 -1 +1256 1256 -1 +1257 1257 -1 +1258 1258 -1 +1259 1259 -1 +1260 1260 -1 +1261 1261 -1 +1262 1262 -1 +1263 1263 -1 +1264 1264 0 +1265 1265 0 +1266 1266 -1 +1267 1267 -1 +1268 1268 -1 +1269 1269 -1 +1270 1270 -1 +1271 1271 -1 +1272 1272 -1 +1273 1273 -1 +1274 1274 0 +1275 1275 0 +1276 1276 -1 +1277 1277 -1 +1278 1278 -1 +1279 1279 -1 +1280 1280 -1 +1281 1281 -1 +1282 1282 0 +1283 1283 -1 +1284 1284 -1 +1285 1285 -1 +1286 1286 0 +1287 1287 -1 +1288 1288 -1 +1289 1289 -1 +1290 1290 -1 +1291 1291 -1 +1292 1292 -1 +1293 1293 -1 +1294 1294 -1 +1295 1295 -1 +1296 1296 -1 +1297 1297 0 +1298 1298 -1 +1299 1299 0 +1300 1300 0 +1301 1301 -1 +1302 1302 -1 +1303 1303 -1 +1304 1304 -1 +1305 1305 -1 +1306 1306 -1 +1307 1307 -1 +1308 1308 -1 +1309 1309 -1 +1310 1310 -1 +1311 1311 -1 +1312 1312 -1 +1313 1313 -1 +1314 1314 -1 +1315 1315 -1 +1316 1316 -1 +1317 1317 -1 +1318 1318 -1 +1319 1319 -1 +1320 1320 -1 +1321 1321 -1 +1322 1322 -1 +1323 1323 0 +1324 1324 -1 +1325 1325 -1 +1326 1326 -1 +1327 1327 -1 +1328 1328 0 +1329 1329 -1 +1330 1330 -1 +1331 1331 -1 +1332 1332 -1 +1333 1333 0 +1334 1334 -1 +1335 1335 -1 +1336 1336 0 +1337 1337 -1 +1338 1338 -1 +1339 1339 -1 +1340 1340 -1 +1341 1341 -1 +1342 1342 -1 +1343 1343 -1 +1344 1344 -1 +1345 1345 0 +1346 1346 -1 +1347 1347 -1 +1348 1348 -1 +1349 1349 -1 +1350 1350 -1 +1351 1351 -1 +1352 1352 -1 +1353 1353 -1 +1354 1354 -1 +1355 1355 -1 +1356 1356 -1 +1357 1357 0 +1358 1358 -1 +1359 1359 0 +1360 1360 -1 +1361 1361 -1 +1362 1362 -1 +1363 1363 -1 +1364 1364 -1 +1365 1365 -1 +1366 1366 -1 +1367 1367 0 +1368 1368 0 +1369 1369 -1 +1370 1370 -1 +1371 1371 -1 +1372 1372 -1 +1373 1373 -1 +1374 1374 -1 +1375 1375 -1 +1376 1376 -1 +1377 1377 0 +1378 1378 -1 +1379 1379 -1 +1380 1380 -1 +1381 1381 -1 +1382 1382 -1 +1383 1383 -1 +1384 1384 -1 +1385 1385 -1 +1386 1386 0 +1387 1387 -1 +1388 1388 -1 +1389 1389 -1 +1390 1390 -1 +1391 1391 -1 +1392 1392 -1 +1393 1393 -1 +1394 1394 -1 +1395 1395 -1 +1396 1396 -1 +1397 1397 0 +1398 1398 -1 +1399 1399 -1 +1400 1400 -1 +1401 1401 -1 +1402 1402 -1 +1403 1403 0 +1404 1404 -1 +1405 1405 -1 +1406 1406 -1 +1407 1407 -1 +1408 1408 -1 +1409 1409 0 +1410 1410 -1 +1411 1411 -1 +1412 1412 -1 +1413 1413 0 +1414 1414 -1 +1415 1415 -1 +1416 1416 -1 +1417 1417 -1 +1418 1418 -1 +1419 1419 -1 +1420 1420 -1 +1421 1421 -1 +1422 1422 -1 +1423 1423 -1 +1424 1424 0 +1425 1425 -1 +1426 1426 -1 +1427 1427 -1 +1428 1428 0 +1429 1429 -1 +1430 1430 -1 +1431 1431 0 +1432 1432 -1 +1433 1433 -1 +1434 1434 -1 +1435 1435 -1 +1436 1436 -1 +1437 1437 -1 +1438 1438 -1 +1439 1439 -1 +1440 1440 -1 +1441 1441 -1 +1442 1442 -1 +1443 1443 -1 +1444 1444 -1 +1445 1445 -1 +1446 1446 -1 +1447 1447 -1 +1448 1448 -1 +1449 1449 -1 +1450 1450 0 +1451 1451 -1 +1452 1452 -1 +1453 1453 -1 +1454 1454 -1 +1455 1455 -1 +1456 1456 0 +1457 1457 -1 +1458 1458 -1 +1459 1459 -1 +1460 1460 -1 +1461 1461 -1 +1462 1462 0 +1463 1463 -1 +1464 1464 -1 +1465 1465 -1 +1466 1466 -1 +1467 1467 -1 +1468 1468 -1 +1469 1469 -1 +1470 1470 -1 +1471 1471 0 +1472 1472 -1 +1473 1473 -1 +1474 1474 -1 +1475 1475 0 +1476 1476 -1 +1477 1477 0 +1478 1478 -1 +1479 1479 -1 +1480 1480 -1 +1481 1481 -1 +1482 1482 -1 +1483 1483 -1 +1484 1484 -1 +1485 1485 -1 +1486 1486 -1 +1487 1487 -1 +1488 1488 -1 +1489 1489 -1 +1490 1490 -1 +1491 1491 -1 +1492 1492 -1 +1493 1493 -1 +1494 1494 -1 +1495 1495 -1 +1496 1496 -1 +1497 1497 -1 +1498 1498 -1 +1499 1499 -1 +1500 1500 -1 +1501 1501 -1 +1502 1502 -1 +1503 1503 -1 +1504 1504 -1 +1505 1505 -1 +1506 1506 -1 +1507 1507 -1 +1508 1508 -1 +1509 1509 -1 +1510 1510 0 +1511 1511 -1 +1512 1512 -1 +1513 1513 -1 +1514 1514 -1 +1515 1515 -1 +1516 1516 -1 +1517 1517 -1 +1518 1518 -1 +1519 1519 0 +1520 1520 -1 +1521 1521 0 +1522 1522 -1 +1523 1523 -1 +1524 1524 -1 +1525 1525 -1 +1526 1526 -1 +1527 1527 0 +1528 1528 -1 +1529 1529 -1 +1530 1530 -1 +1531 1531 -1 +1532 1532 -1 +1533 1533 -1 +1534 1534 -1 +1535 1535 -1 +1536 1536 0 +1537 1537 -1 +1538 1538 0 +1539 1539 -1 +1540 1540 -1 +1541 1541 -1 +1542 1542 -1 +1543 1543 -1 +1544 1544 -1 +1545 1545 -1 +1546 1546 -1 +1547 1547 -1 +1548 1548 -1 +1549 1549 -1 +1550 1550 -1 +1551 1551 -1 +1552 1552 -1 +1553 1553 -1 +1554 1554 -1 +1555 1555 -1 +1556 1556 -1 +1557 1557 0 +1558 1558 -1 +1559 1559 -1 +1560 1560 -1 +1561 1561 -1 +1562 1562 0 +1563 1563 -1 +1564 1564 -1 +1565 1565 -1 +1566 1566 -1 +1567 1567 -1 +1568 1568 0 +1569 1569 -1 +1570 1570 0 +1571 1571 -1 +1572 1572 -1 +1573 1573 -1 +1574 1574 -1 +1575 1575 -1 +1576 1576 -1 +1577 1577 -1 +1578 1578 -1 +1579 1579 -1 +1580 1580 -1 +1581 1581 -1 +1582 1582 0 +1583 1583 -1 +1584 1584 -1 +1585 1585 0 +1586 1586 -1 +1587 1587 -1 +1588 1588 -1 +1589 1589 -1 +1590 1590 0 +1591 1591 -1 +1592 1592 -1 +1593 1593 -1 +1594 1594 0 +1595 1595 -1 +1596 1596 -1 +1597 1597 -1 +1598 1598 -1 +1599 1599 -1 +1600 1600 -1 +1601 1601 0 +1602 1602 -1 +1603 1603 -1 +1604 1604 -1 +1605 1605 -1 +1606 1606 -1 +1607 1607 -1 +1608 1608 -1 +1609 1609 0 +1610 1610 -1 +1611 1611 -1 +1612 1612 -1 +1613 1613 -1 +1614 1614 -1 +1615 1615 -1 +1616 1616 -1 +1617 1617 0 +1618 1618 -1 +1619 1619 -1 +1620 1620 -1 +1621 1621 -1 +1622 1622 -1 +1623 1623 -1 +1624 1624 -1 +1625 1625 -1 +1626 1626 0 +1627 1627 0 +1629 1629 0 +1630 1630 -1 +1631 1631 -1 +1632 1632 -1 +1633 1633 -1 +1634 1634 -1 +1635 1635 -1 +1636 1636 -1 +1637 1637 -1 +1638 1638 0 +1639 1639 -1 +1640 1640 -1 +1641 1641 -1 +1642 1642 -1 +1643 1643 -1 +1644 1644 -1 +1645 1645 -1 +1646 1646 -1 +1647 1647 -1 +1648 1648 -1 +1649 1649 -1 +1650 1650 -1 +1651 1651 -1 +1652 1652 -1 +1653 1653 0 +1654 1654 -1 +1655 1655 -1 +1656 1656 -1 +1657 1657 -1 +1658 1658 -1 +1660 1660 -1 +1661 1661 -1 +1662 1662 -1 +1663 1663 -1 +1664 1664 0 +1665 1665 -1 +1666 1666 0 +1667 1667 -1 +1668 1668 -1 +1669 1669 -1 +1670 1670 0 +1671 1671 -1 +1672 1672 0 +1673 1673 -1 +1674 1674 -1 +1675 1675 -1 +1676 1676 -1 +1677 1677 -1 +1678 1678 0 +1679 1679 -1 +1680 1680 0 +1681 1681 -1 +1682 1682 -1 +1683 1683 -1 +1684 1684 -1 +1685 1685 -1 +1686 1686 -1 +1687 1687 -1 +1688 1688 -1 +1689 1689 0 +1690 1690 -1 +1691 1691 0 +1692 1692 -1 +1693 1693 0 +1694 1694 -1 +1695 1695 -1 +1696 1696 -1 +1697 1697 0 +1698 1698 -1 +1699 1699 -1 +1700 1700 -1 +1701 1701 -1 +1702 1702 0 +1703 1703 -1 +1704 1704 -1 +1705 1705 -1 +1706 1706 -1 +1707 1707 -1 +1708 1708 -1 +1709 1709 0 +1710 1710 -1 +1711 1711 -1 +1712 1712 -1 +1713 1713 0 +1714 1714 0 +1715 1715 -1 +1716 1716 0 +1717 1717 -1 +1718 1718 -1 +1719 1719 -1 +1720 1720 -1 +1721 1721 -1 +1722 1722 -1 +1723 1723 -1 +1724 1724 -1 +1725 1725 -1 +1726 1726 -1 +1727 1727 -1 +1728 1728 -1 +1729 1729 -1 +1730 1730 -1 +1731 1731 -1 +1732 1732 0 +1733 1733 -1 +1734 1734 0 +1735 1735 -1 +1736 1736 -1 +1737 1737 -1 +1738 1738 0 +1739 1739 0 +1740 1740 0 +1741 1741 -1 +1742 1742 -1 +1743 1743 0 +1744 1744 -1 +1745 1745 -1 +1746 1746 -1 +1747 1747 -1 +1748 1748 -1 +1749 1749 -1 +1750 1750 -1 +1751 1751 -1 +1752 1752 -1 +1753 1753 -1 +1754 1754 -1 +1755 1755 -1 +1756 1756 -1 +1757 1757 -1 +1758 1758 -1 +1759 1759 -1 +1760 1760 -1 +1761 1761 -1 +1762 1762 -1 +1763 1763 0 +1764 1764 0 +1765 1765 -1 +1766 1766 -1 +1767 1767 -1 +1768 1768 -1 +1769 1769 -1 +1770 1770 -1 +1771 1771 -1 +1772 1772 -1 +1773 1773 -1 +1774 1774 -1 +1775 1775 -1 +1776 1776 -1 +1777 1777 0 +1778 1778 -1 +1779 1779 -1 +1780 1780 -1 +1781 1781 0 +1783 1783 -1 +1784 1784 -1 +1785 1785 -1 +1786 1786 -1 +1787 1787 -1 +1788 1788 -1 +1789 1789 -1 +1790 1790 -1 +1791 1791 0 +1792 1792 -1 +1793 1793 -1 +1794 1794 0 +1795 1795 -1 +1796 1796 -1 +1797 1797 -1 +1798 1798 -1 +1799 1799 -1 +1800 1800 -1 +1801 1801 -1 +1802 1802 -1 +1803 1803 0 +1804 1804 -1 +1805 1805 0 +1806 1806 -1 +1807 1807 -1 +1808 1808 0 +1809 1809 -1 +1810 1810 -1 +1811 1811 -1 +1812 1812 -1 +1813 1813 -1 +1814 1814 -1 +1815 1815 -1 +1816 1816 -1 +1817 1817 0 +1818 1818 -1 +1819 1819 -1 +1820 1820 -1 +1821 1821 -1 +1822 1822 -1 +1823 1823 0 +1824 1824 -1 +1825 1825 -1 +1826 1826 -1 +1827 1827 0 +1828 1828 -1 +1829 1829 -1 +1830 1830 -1 +1831 1831 -1 +1832 1832 0 +1833 1833 -1 +1834 1834 -1 +1835 1835 -1 +1836 1836 -1 +1837 1837 -1 +1838 1838 -1 +1839 1839 -1 +1840 1840 -1 +1841 1841 -1 +1842 1842 -1 +1843 1843 -1 +1844 1844 -1 +1845 1845 0 +1846 1846 -1 +1847 1847 -1 +1849 1849 -1 +1850 1850 -1 +1851 1851 -1 +1852 1852 0 +1853 1853 -1 +1854 1854 -1 +1855 1855 0 +1856 1856 -1 +1857 1857 -1 +1858 1858 -1 +1859 1859 -1 +1860 1860 -1 +1861 1861 0 +1862 1862 0 +1863 1863 0 +1864 1864 -1 +1865 1865 -1 +1866 1866 -1 +1867 1867 -1 +1868 1868 -1 +1869 1869 0 +1870 1870 0 +1871 1871 -1 +1872 1872 0 +1873 1873 0 +1874 1874 0 +1875 1875 -1 +1876 1876 -1 +1877 1877 -1 +1878 1878 -1 +1879 1879 -1 +1880 1880 -1 +1881 1881 -1 +1882 1882 -1 +1883 1883 -1 +1884 1884 -1 +1885 1885 -1 +1886 1886 -1 +1887 1887 -1 +1888 1888 -1 +1889 1889 -1 +1890 1890 0 +1891 1891 0 +1892 1892 -1 +1893 1893 0 +1894 1894 -1 +1895 1895 -1 +1896 1896 -1 +1897 1897 -1 +1898 1898 -1 +1899 1899 -1 +1900 1900 -1 +1901 1901 -1 +1902 1902 -1 +1903 1903 -1 +1904 1904 -1 +1905 1905 0 +1906 1906 -1 +1907 1907 -1 +1908 1908 -1 +1909 1909 -1 +1910 1910 -1 +1911 1911 -1 +1912 1912 -1 +1913 1913 -1 +1914 1914 -1 +1915 1915 -1 +1916 1916 -1 +1917 1917 -1 +1918 1918 -1 +1919 1919 0 +1920 1920 -1 +1921 1921 -1 +1922 1922 -1 +1923 1923 -1 +1924 1924 -1 +1925 1925 -1 +1926 1926 -1 +1927 1927 -1 +1928 1928 -1 +1929 1929 -1 +1930 1930 -1 +1931 1931 -1 +1932 1932 -1 +1933 1933 -1 +1934 1934 -1 +1935 1935 0 +1936 1936 -1 +1937 1937 -1 +1938 1938 -1 +1939 1939 -1 +1940 1940 -1 +1941 1941 -1 +1942 1942 -1 +1943 1943 -1 +1944 1944 0 +1945 1945 -1 +1946 1946 -1 +1947 1947 -1 +1948 1948 -1 +1949 1949 -1 +1950 1950 -1 +1951 1951 0 +1952 1952 0 +1953 1953 0 +1954 1954 -1 +1955 1955 -1 +1956 1956 -1 +1957 1957 -1 +1958 1958 -1 +1959 1959 -1 +1960 1960 -1 +1961 1961 0 +1962 1962 -1 +1963 1963 0 +1964 1964 0 +1965 1965 -1 +1966 1966 -1 +1967 1967 -1 +1968 1968 -1 +1969 1969 -1 +1970 1970 0 +1971 1971 -1 +1972 1972 -1 +1973 1973 -1 +1974 1974 -1 +1975 1975 -1 +1976 1976 -1 +1977 1977 -1 +1978 1978 0 +1979 1979 -1 +1980 1980 0 +1981 1981 -1 +1982 1982 -1 +1983 1983 0 +1984 1984 -1 +1985 1985 0 +1986 1986 0 +1987 1987 -1 +1988 1988 -1 +1989 1989 -1 +1990 1990 -1 +1991 1991 -1 +1992 1992 -1 +1993 1993 -1 +1994 1994 0 +1995 1995 -1 +1996 1996 -1 +1997 1997 -1 +1998 1998 -1 +1999 1999 -1 +2000 2000 -1 +2001 2001 0 +2002 2002 0 +2003 2003 -1 +2004 2004 -1 +2005 2005 0 +2006 2006 -1 +2007 2007 -1 +2008 2008 -1 +2009 2009 0 +2010 2010 -1 +2011 2011 0 +2012 2012 -1 +2013 2013 -1 +2014 2014 -1 +2015 2015 -1 +2016 2016 -1 +2017 2017 -1 +2018 2018 -1 +2019 2019 -1 +2020 2020 -1 +2021 2021 -1 +2022 2022 -1 +2023 2023 -1 +2024 2024 -1 +2025 2025 -1 +2026 2026 -1 +2027 2027 -1 +2028 2028 0 +2029 2029 -1 +2030 2030 -1 +2031 2031 -1 +2032 2032 -1 +2033 2033 -1 +2034 2034 -1 +2035 2035 -1 +2036 2036 -1 +2037 2037 -1 +2038 2038 -1 +2039 2039 -1 +2040 2040 -1 +2041 2041 -1 +2042 2042 -1 +2043 2043 -1 +2044 2044 -1 +2045 2045 0 +2046 2046 0 +2047 2047 -1 +2048 2048 -1 +2049 2049 0 +2050 2050 -1 +2051 2051 -1 +2052 2052 -1 +2053 2053 -1 +2054 2054 -1 +2055 2055 -1 +2056 2056 -1 +2057 2057 -1 +2058 2058 -1 +2059 2059 0 +2060 2060 -1 +2061 2061 -1 +2062 2062 -1 +2063 2063 -1 +2064 2064 -1 +2065 2065 -1 +2066 2066 -1 +2067 2067 -1 +2068 2068 -1 +2069 2069 -1 +2070 2070 -1 +2071 2071 -1 +2072 2072 -1 +2073 2073 -1 +2074 2074 0 +2075 2075 -1 +2076 2076 -1 +2077 2077 -1 +2078 2078 -1 +2079 2079 -1 +2080 2080 -1 +2081 2081 -1 +2082 2082 -1 +2083 2083 -1 +2084 2084 -1 +2085 2085 0 +2086 2086 -1 +2087 2087 0 +2088 2088 -1 +2089 2089 -1 +2090 2090 -1 +2091 2091 -1 +2092 2092 -1 +2093 2093 -1 +2094 2094 0 +2095 2095 -1 +2096 2096 -1 +2097 2097 -1 +2098 2098 -1 +2099 2099 -1 +2100 2100 -1 +2101 2101 -1 +2102 2102 -1 +2103 2103 -1 +2104 2104 -1 +2105 2105 0 +2106 2106 -1 +2107 2107 -1 +2108 2108 0 +2109 2109 -1 +2110 2110 -1 +2111 2111 -1 +2112 2112 -1 +2113 2113 -1 +2114 2114 -1 +2115 2115 -1 +2116 2116 0 +2117 2117 -1 +2118 2118 -1 +2119 2119 -1 +2120 2120 -1 +2121 2121 -1 +2122 2122 -1 +2123 2123 -1 +2124 2124 -1 +2125 2125 -1 +2126 2126 -1 +2127 2127 -1 +2128 2128 0 +2129 2129 -1 +2130 2130 -1 +2131 2131 -1 +2132 2132 -1 +2133 2133 -1 +2134 2134 -1 +2135 2135 -1 +2136 2136 0 +2137 2137 0 +2138 2138 -1 +2139 2139 -1 +2140 2140 -1 +2141 2141 -1 +2142 2142 0 +2143 2143 -1 +2144 2144 -1 +2145 2145 -1 +2146 2146 -1 +2147 2147 0 +2148 2148 -1 +2149 2149 -1 +2150 2150 0 +2151 2151 -1 +2152 2152 -1 +2153 2153 0 +2154 2154 -1 +2155 2155 -1 +2156 2156 -1 +2157 2157 -1 +2158 2158 0 +2159 2159 -1 +2160 2160 -1 +2161 2161 -1 +2162 2162 -1 +2163 2163 0 +2164 2164 -1 +2165 2165 -1 +2166 2166 -1 +2167 2167 -1 +2168 2168 -1 +2169 2169 -1 +2170 2170 -1 +2171 2171 -1 +2172 2172 -1 +2173 2173 -1 +2174 2174 -1 +2175 2175 -1 +2176 2176 -1 +2177 2177 0 +2178 2178 -1 +2179 2179 -1 +2180 2180 -1 +2181 2181 -1 +2182 2182 -1 +2183 2183 0 +2184 2184 -1 +2185 2185 -1 +2186 2186 -1 +2187 2187 0 +2188 2188 -1 +2189 2189 -1 +2190 2190 -1 +2191 2191 -1 +2192 2192 -1 +2193 2193 -1 +2194 2194 0 +2195 2195 -1 +2196 2196 0 +2197 2197 -1 +2198 2198 -1 +2199 2199 0 +2200 2200 -1 +2201 2201 -1 +2202 2202 -1 +2203 2203 -1 +2204 2204 -1 +2205 2205 -1 +2206 2206 -1 +2207 2207 -1 +2208 2208 -1 +2209 2209 -1 +2210 2210 -1 +2211 2211 -1 +2212 2212 -1 +2213 2213 -1 +2214 2214 -1 +2215 2215 -1 +2216 2216 -1 +2217 2217 -1 +2218 2218 0 +2219 2219 -1 +2220 2220 -1 +2221 2221 -1 +2222 2222 -1 +2223 2223 -1 +2224 2224 -1 +2225 2225 -1 +2226 2226 -1 +2227 2227 -1 +2228 2228 0 +2230 2230 -1 +2231 2231 -1 +2232 2232 -1 +2233 2233 -1 +2234 2234 -1 +2235 2235 -1 +2236 2236 -1 +2237 2237 -1 +2238 2238 0 +2239 2239 -1 +2240 2240 -1 +2241 2241 -1 +2242 2242 0 +2243 2243 -1 +2244 2244 -1 +2245 2245 -1 +2246 2246 -1 +2247 2247 -1 +2248 2248 -1 +2249 2249 -1 +2250 2250 -1 +2251 2251 -1 +2252 2252 0 +2253 2253 -1 +2254 2254 -1 +2255 2255 -1 +2256 2256 -1 +2257 2257 -1 +2258 2258 -1 +2259 2259 0 +2260 2260 -1 +2261 2261 -1 +2262 2262 -1 +2263 2263 -1 +2264 2264 -1 +2265 2265 -1 +2266 2266 -1 +2267 2267 -1 +2268 2268 -1 +2269 2269 0 +2270 2270 -1 +2271 2271 -1 +2272 2272 -1 +2273 2273 -1 +2274 2274 -1 +2275 2275 -1 +2276 2276 -1 +2277 2277 -1 +2278 2278 -1 +2279 2279 -1 +2280 2280 -1 +2281 2281 0 +2282 2282 -1 +2283 2283 -1 +2284 2284 -1 +2285 2285 -1 +2286 2286 -1 +2287 2287 -1 +2288 2288 0 +2289 2289 -1 +2290 2290 -1 +2291 2291 -1 +2292 2292 -1 +2293 2293 0 +2294 2294 -1 +2295 2295 -1 +2296 2296 -1 +2297 2297 0 +2298 2298 -1 +2299 2299 -1 +2300 2300 -1 +2301 2301 -1 +2302 2302 -1 +2303 2303 0 +2304 2304 -1 +2305 2305 0 +2306 2306 -1 +2307 2307 -1 +2308 2308 -1 +2309 2309 -1 +2310 2310 -1 +2311 2311 -1 +2312 2312 -1 +2313 2313 0 +2314 2314 -1 +2315 2315 0 +2316 2316 -1 +2317 2317 0 +2318 2318 0 +2319 2319 0 +2320 2320 -1 +2321 2321 -1 +2322 2322 -1 +2323 2323 0 +2324 2324 -1 +2325 2325 -1 +2326 2326 -1 +2327 2327 -1 +2328 2328 -1 +2329 2329 -1 +2330 2330 -1 +2331 2331 -1 +2332 2332 -1 +2333 2333 -1 +2334 2334 -1 +2335 2335 -1 +2336 2336 -1 +2337 2337 -1 +2338 2338 0 +2339 2339 0 +2340 2340 -1 +2341 2341 -1 +2342 2342 0 +2343 2343 -1 +2344 2344 0 +2345 2345 -1 +2346 2346 0 +2347 2347 -1 +2348 2348 0 +2349 2349 -1 +2350 2350 -1 +2351 2351 -1 +2352 2352 -1 +2353 2353 -1 +2354 2354 -1 +2355 2355 -1 +2356 2356 -1 +2357 2357 -1 +2358 2358 -1 +2359 2359 0 +2360 2360 -1 +2361 2361 -1 +2362 2362 -1 +2363 2363 -1 +2364 2364 -1 +2365 2365 -1 +2366 2366 -1 +2367 2367 -1 +2368 2368 -1 +2369 2369 -1 +2370 2370 0 +2371 2371 -1 +2372 2372 -1 +2373 2373 -1 +2374 2374 -1 +2375 2375 0 +2376 2376 -1 +2377 2377 -1 +2378 2378 -1 +2379 2379 -1 +2380 2380 -1 +2381 2381 -1 +2382 2382 -1 +2383 2383 -1 +2384 2384 0 +2385 2385 -1 +2386 2386 -1 +2387 2387 -1 +2388 2388 0 +2389 2389 -1 +2390 2390 -1 +2391 2391 -1 +2392 2392 -1 +2393 2393 -1 +2394 2394 0 +2395 2395 -1 +2396 2396 -1 +2397 2397 -1 +2398 2398 -1 +2399 2399 -1 +2400 2400 -1 +2401 2401 -1 +2402 2402 -1 +2403 2403 -1 +2404 2404 -1 +2405 2405 -1 +2406 2406 -1 +2407 2407 -1 +2408 2408 -1 +2409 2409 -1 +2410 2410 -1 +2411 2411 -1 +2412 2412 0 +2413 2413 -1 +2414 2414 0 +2415 2415 -1 +2416 2416 -1 +2417 2417 -1 +2418 2418 0 +2419 2419 -1 +2420 2420 -1 +2421 2421 -1 +2422 2422 -1 +2423 2423 -1 +2424 2424 -1 +2425 2425 -1 +2426 2426 -1 +2427 2427 -1 +2428 2428 -1 +2429 2429 -1 +2430 2430 -1 +2431 2431 -1 +2432 2432 -1 +2433 2433 0 +2434 2434 -1 +2435 2435 -1 +2436 2436 0 +2437 2437 -1 +2438 2438 -1 +2439 2439 -1 +2440 2440 -1 +2441 2441 -1 +2442 2442 -1 +2443 2443 -1 +2444 2444 0 +2445 2445 0 +2446 2446 -1 +2447 2447 -1 +2448 2448 0 +2449 2449 -1 +2450 2450 -1 +2451 2451 -1 +2452 2452 -1 +2453 2453 0 +2454 2454 -1 +2455 2455 0 +2456 2456 -1 +2457 2457 -1 +2458 2458 0 +2459 2459 0 +2460 2460 -1 +2461 2461 -1 +2462 2462 -1 +2463 2463 -1 +2464 2464 -1 +2465 2465 -1 +2466 2466 -1 +2467 2467 -1 +2468 2468 -1 +2469 2469 -1 +2470 2470 -1 +2471 2471 -1 +2472 2472 -1 +2473 2473 -1 +2474 2474 -1 +2475 2475 -1 +2476 2476 -1 +2477 2477 -1 +2478 2478 -1 +2479 2479 -1 +2480 2480 0 +2481 2481 -1 +2482 2482 -1 +2483 2483 -1 +2484 2484 -1 +2485 2485 -1 +2486 2486 -1 +2487 2487 -1 +2488 2488 -1 +2489 2489 0 +2490 2490 -1 +2491 2491 -1 +2492 2492 -1 +2493 2493 -1 +2494 2494 -1 +2495 2495 -1 +2496 2496 -1 +2497 2497 0 +2498 2498 -1 +2499 2499 -1 +2500 2500 -1 +2501 2501 -1 +2502 2502 -1 +2503 2503 -1 +2504 2504 -1 +2505 2505 -1 +2506 2506 -1 +2507 2507 -1 +2508 2508 -1 +2509 2509 -1 +2510 2510 0 +2511 2511 -1 +2512 2512 -1 +2513 2513 -1 +2514 2514 -1 +2515 2515 -1 +2516 2516 -1 +2517 2517 -1 +2518 2518 -1 +2519 2519 -1 +2520 2520 -1 +2521 2521 -1 +2522 2522 -1 +2523 2523 -1 +2524 2524 0 +2525 2525 -1 +2526 2526 -1 +2527 2527 -1 +2528 2528 -1 +2529 2529 -1 +2530 2530 -1 +2531 2531 0 +2532 2532 0 +2533 2533 -1 +2534 2534 -1 +2535 2535 0 +2536 2536 0 +2537 2537 -1 +2538 2538 -1 +2539 2539 -1 +2540 2540 -1 +2541 2541 -1 +2542 2542 0 +2543 2543 -1 +2544 2544 -1 +2545 2545 0 +2546 2546 -1 +2547 2547 -1 +2548 2548 0 +2549 2549 -1 +2550 2550 -1 +2551 2551 -1 +2552 2552 -1 +2553 2553 -1 +2554 2554 -1 +2555 2555 0 +2556 2556 0 +2557 2557 -1 +2558 2558 -1 +2559 2559 -1 +2560 2560 -1 +2561 2561 -1 +2562 2562 -1 +2563 2563 -1 +2564 2564 -1 +2565 2565 -1 +2566 2566 -1 +2567 2567 -1 +2568 2568 -1 +2569 2569 -1 +2570 2570 0 +2571 2571 -1 +2572 2572 -1 +2573 2573 -1 +2574 2574 -1 +2575 2575 -1 +2576 2576 -1 +2577 2577 -1 +2578 2578 -1 +2579 2579 0 +2580 2580 -1 +2581 2581 -1 +2582 2582 -1 +2583 2583 -1 +2584 2584 -1 +2585 2585 -1 +2586 2586 -1 +2587 2587 0 +2588 2588 -1 +2589 2589 -1 +2590 2590 -1 +2591 2591 0 +2592 2592 0 +2593 2593 -1 +2594 2594 -1 +2595 2595 -1 +2596 2596 -1 +2597 2597 0 +2598 2598 0 +2599 2599 0 +2600 2600 -1 +2601 2601 0 +2602 2602 -1 +2603 2603 -1 +2604 2604 -1 +2605 2605 0 +2606 2606 -1 +2607 2607 -1 +2608 2608 -1 +2609 2609 -1 +2610 2610 0 +2611 2611 -1 +2612 2612 -1 +2613 2613 0 +2614 2614 -1 +2615 2615 -1 +2616 2616 -1 +2617 2617 -1 +2618 2618 -1 +2619 2619 0 +2620 2620 0 +2621 2621 -1 +2622 2622 -1 +2623 2623 -1 +2624 2624 -1 +2625 2625 -1 +2626 2626 -1 +2627 2627 -1 +2628 2628 -1 +2629 2629 0 +2630 2630 0 +2631 2631 0 +2632 2632 -1 +2633 2633 -1 +2634 2634 -1 +2635 2635 -1 +2636 2636 0 +2637 2637 -1 +2638 2638 -1 +2639 2639 -1 +2640 2640 -1 +2641 2641 -1 +2642 2642 0 +2643 2643 -1 +2644 2644 0 +2645 2645 -1 +2646 2646 -1 +2647 2647 -1 +2648 2648 -1 +2649 2649 -1 +2650 2650 -1 +2651 2651 0 +2652 2652 -1 +2653 2653 -1 +2654 2654 0 +2655 2655 -1 +2656 2656 -1 +2657 2657 -1 +2658 2658 -1 +2659 2659 -1 +2660 2660 -1 +2661 2661 -1 +2662 2662 -1 +2663 2663 -1 +2664 2664 0 +2665 2665 -1 +2666 2666 -1 +2667 2667 0 +2668 2668 0 +2669 2669 -1 +2670 2670 -1 +2671 2671 -1 +2672 2672 -1 +2673 2673 -1 +2674 2674 0 +2675 2675 -1 +2676 2676 -1 +2677 2677 -1 +2678 2678 -1 +2679 2679 -1 +2680 2680 -1 +2681 2681 0 +2682 2682 -1 +2683 2683 -1 +2684 2684 -1 +2685 2685 -1 +2686 2686 -1 +2687 2687 -1 +2688 2688 0 +2689 2689 -1 +2690 2690 -1 +2691 2691 -1 +2692 2692 -1 +2693 2693 -1 +2694 2694 -1 +2695 2695 -1 +2696 2696 -1 +2697 2697 -1 +2698 2698 -1 +2699 2699 0 +2700 2700 -1 +2701 2701 -1 +2702 2702 -1 +2703 2703 -1 +2704 2704 -1 +2705 2705 -1 +2706 2706 -1 +2707 2707 -1 +2708 2708 0 +2709 2709 -1 +2710 2710 -1 +2711 2711 -1 +2712 2712 -1 +2713 2713 -1 +2714 2714 -1 +2715 2715 -1 +2716 2716 -1 +2717 2717 -1 +2718 2718 -1 +2719 2719 -1 +2720 2720 -1 +2721 2721 -1 +2722 2722 -1 +2723 2723 -1 +2724 2724 -1 +2725 2725 0 +2726 2726 -1 +2727 2727 -1 +2728 2728 -1 +2729 2729 -1 +2730 2730 -1 +2731 2731 -1 +2732 2732 -1 +2733 2733 -1 +2734 2734 -1 +2735 2735 -1 +2736 2736 -1 +2737 2737 -1 +2738 2738 -1 +2739 2739 0 +2740 2740 -1 +2741 2741 -1 +2742 2742 -1 +2743 2743 -1 +2744 2744 -1 +2745 2745 -1 +2746 2746 -1 +2747 2747 -1 +2748 2748 -1 +2749 2749 -1 +2750 2750 -1 +2751 2751 -1 +2752 2752 -1 +2753 2753 -1 +2754 2754 -1 +2755 2755 0 +2756 2756 -1 +2757 2757 0 +2758 2758 -1 +2759 2759 -1 +2760 2760 -1 +2761 2761 -1 +2762 2762 0 +2763 2763 -1 +2764 2764 0 +2765 2765 -1 +2766 2766 -1 +2767 2767 -1 +2768 2768 -1 +2769 2769 -1 +2770 2770 -1 +2771 2771 -1 +2772 2772 -1 +2773 2773 0 +2774 2774 -1 +2775 2775 -1 +2776 2776 -1 +2777 2777 -1 +2778 2778 -1 +2779 2779 0 +2780 2780 -1 +2781 2781 -1 +2782 2782 -1 +2783 2783 -1 +2784 2784 -1 +2785 2785 -1 +2786 2786 -1 +2787 2787 -1 +2788 2788 -1 +2789 2789 -1 +2790 2790 -1 +2791 2791 -1 +2792 2792 -1 +2793 2793 0 +2794 2794 -1 +2795 2795 -1 +2796 2796 -1 +2797 2797 -1 +2798 2798 -1 +2799 2799 -1 +2800 2800 0 +2801 2801 -1 +2802 2802 -1 +2803 2803 -1 +2804 2804 -1 +2805 2805 -1 +2806 2806 -1 +2807 2807 -1 +2808 2808 -1 +2809 2809 0 +2810 2810 -1 +2811 2811 0 +2812 2812 -1 +2813 2813 0 +2814 2814 -1 +2815 2815 -1 +2816 2816 -1 +2817 2817 -1 +2818 2818 -1 +2819 2819 -1 +2820 2820 -1 +2821 2821 -1 +2822 2822 -1 +2823 2823 -1 +2824 2824 -1 +2825 2825 -1 +2826 2826 -1 +2827 2827 -1 +2828 2828 -1 +2829 2829 -1 +2830 2830 -1 +2831 2831 -1 +2832 2832 -1 +2833 2833 -1 +2834 2834 0 +2835 2835 -1 +2836 2836 -1 +2837 2837 -1 +2838 2838 -1 +2839 2839 -1 +2840 2840 -1 +2841 2841 -1 +2842 2842 -1 +2843 2843 -1 +2844 2844 -1 +2845 2845 -1 +2846 2846 -1 +2847 2847 0 +2848 2848 -1 +2849 2849 -1 +2850 2850 -1 +2851 2851 -1 +2852 2852 0 +2853 2853 0 +2854 2854 -1 +2855 2855 -1 +2856 2856 0 +2857 2857 -1 +2858 2858 -1 +2859 2859 -1 +2860 2860 -1 +2861 2861 -1 +2862 2862 -1 +2863 2863 -1 +2864 2864 -1 +2865 2865 -1 +2866 2866 -1 +2867 2867 -1 +2868 2868 -1 +2869 2869 0 +2870 2870 -1 +2871 2871 0 +2872 2872 -1 +2873 2873 -1 +2874 2874 -1 +2875 2875 -1 +2876 2876 -1 +2877 2877 -1 +2878 2878 -1 +2879 2879 -1 +2880 2880 -1 +2881 2881 -1 +2882 2882 -1 +2883 2883 -1 +2884 2884 -1 +2885 2885 -1 +2886 2886 -1 +2887 2887 -1 +2888 2888 -1 +2889 2889 -1 +2890 2890 -1 +2891 2891 -1 +2892 2892 0 +2893 2893 -1 +2894 2894 -1 +2895 2895 -1 +2896 2896 -1 +2897 2897 -1 +2898 2898 -1 +2899 2899 -1 +2900 2900 0 +2901 2901 -1 +2902 2902 0 +2903 2903 -1 +2904 2904 -1 +2905 2905 -1 +2906 2906 0 +2907 2907 -1 +2908 2908 -1 +2909 2909 -1 +2910 2910 -1 +2911 2911 -1 +2912 2912 -1 +2913 2913 -1 +2914 2914 -1 +2915 2915 -1 +2916 2916 -1 +2917 2917 -1 +2918 2918 -1 +2919 2919 -1 +2920 2920 -1 +2921 2921 -1 +2922 2922 -1 +2923 2923 -1 +2924 2924 0 +2925 2925 -1 +2926 2926 -1 +2927 2927 0 +2928 2928 -1 +2929 2929 -1 +2930 2930 0 +2931 2931 -1 +2932 2932 -1 +2933 2933 -1 +2934 2934 -1 +2935 2935 0 +2936 2936 -1 +2937 2937 -1 +2938 2938 -1 +2939 2939 -1 +2940 2940 0 +2941 2941 -1 +2942 2942 -1 +2943 2943 -1 +2944 2944 -1 +2945 2945 -1 +2946 2946 -1 +2947 2947 -1 +2948 2948 -1 +2949 2949 -1 +2950 2950 -1 +2951 2951 -1 +2952 2952 -1 +2953 2953 -1 +2954 2954 -1 +2955 2955 -1 +2956 2956 -1 +2957 2957 -1 +2958 2958 -1 +2959 2959 -1 +2960 2960 -1 +2961 2961 0 +2962 2962 -1 +2963 2963 0 +2964 2964 -1 +2965 2965 0 +2966 2966 -1 +2967 2967 -1 +2968 2968 -1 +2970 2970 -1 +2971 2971 -1 +2972 2972 -1 +2973 2973 0 +2974 2974 -1 +2975 2975 0 +2976 2976 0 +2977 2977 -1 +2978 2978 -1 +2979 2979 -1 +2980 2980 -1 +2981 2981 -1 +2982 2982 0 +2983 2983 -1 +2984 2984 -1 +2985 2985 -1 +2986 2986 -1 +2987 2987 -1 +2988 2988 -1 +2989 2989 0 +2990 2990 -1 +2991 2991 -1 +2992 2992 0 +2993 2993 0 +2994 2994 -1 +2995 2995 -1 +2996 2996 0 +2997 2997 -1 +2998 2998 0 +2999 2999 -1 +3000 3000 -1 +3001 3001 -1 +3002 3002 -1 +3003 3003 -1 +3004 3004 -1 +3005 3005 -1 +3006 3006 -1 +3007 3007 -1 +3008 3008 0 +3009 3009 -1 +3010 3010 -1 +3011 3011 -1 +3012 3012 -1 +3013 3013 0 +3014 3014 -1 +3015 3015 -1 +3016 3016 -1 +3017 3017 -1 +3018 3018 -1 +3019 3019 -1 +3020 3020 -1 +3021 3021 -1 +3022 3022 -1 +3023 3023 -1 +3024 3024 -1 +3025 3025 -1 +3026 3026 -1 +3027 3027 -1 +3028 3028 -1 +3029 3029 -1 +3030 3030 -1 +3031 3031 -1 +3032 3032 -1 +3033 3033 -1 +3034 3034 -1 +3035 3035 -1 +3036 3036 -1 +3037 3037 -1 +3038 3038 -1 +3039 3039 0 +3040 3040 -1 +3041 3041 -1 +3042 3042 -1 +3043 3043 0 +3044 3044 -1 +3045 3045 -1 +3046 3046 0 +3047 3047 -1 +3048 3048 0 +3049 3049 -1 +3050 3050 0 +3051 3051 -1 +3052 3052 -1 +3053 3053 0 +3054 3054 0 +3055 3055 -1 +3056 3056 -1 +3057 3057 -1 +3058 3058 0 +3059 3059 -1 +3060 3060 -1 +3061 3061 -1 +3062 3062 -1 +3063 3063 0 +3064 3064 -1 +3065 3065 -1 +3066 3066 -1 +3067 3067 -1 +3068 3068 -1 +3069 3069 -1 +3070 3070 -1 +3071 3071 -1 +3072 3072 -1 +3073 3073 -1 +3074 3074 -1 +3075 3075 -1 +3076 3076 0 +3077 3077 -1 +3078 3078 -1 +3079 3079 -1 +3080 3080 -1 +3081 3081 0 +3082 3082 -1 +3083 3083 -1 +3084 3084 -1 +3085 3085 -1 +3086 3086 -1 +3087 3087 -1 +3088 3088 -1 +3089 3089 -1 +3090 3090 0 +3091 3091 -1 +3092 3092 -1 +3093 3093 -1 +3094 3094 -1 +3095 3095 -1 +3096 3096 -1 +3097 3097 -1 +3098 3098 -1 +3099 3099 -1 +3100 3100 -1 +3101 3101 -1 +3102 3102 -1 +3103 3103 -1 +3104 3104 -1 +3105 3105 -1 +3106 3106 -1 +3107 3107 -1 +3108 3108 -1 +3109 3109 -1 +3110 3110 0 +3111 3111 -1 +3112 3112 0 +3113 3113 -1 +3114 3114 -1 +3115 3115 -1 +3116 3116 -1 +3117 3117 -1 +3118 3118 0 +3119 3119 -1 +3120 3120 -1 +3121 3121 -1 +3122 3122 -1 +3123 3123 -1 +3124 3124 -1 +3125 3125 -1 +3126 3126 -1 +3127 3127 -1 +3128 3128 -1 +3129 3129 -1 +3130 3130 0 +3131 3131 -1 +3132 3132 -1 +3133 3133 0 +3134 3134 -1 +3135 3135 -1 +3136 3136 -1 +3137 3137 -1 +3138 3138 -1 +3139 3139 -1 +3140 3140 -1 +3141 3141 -1 +3142 3142 -1 +3143 3143 -1 +3144 3144 0 +3145 3145 -1 +3146 3146 -1 +3147 3147 -1 +3148 3148 -1 +3149 3149 -1 +3150 3150 -1 +3151 3151 0 +3152 3152 -1 +3153 3153 -1 +3154 3154 -1 +3155 3155 -1 +3156 3156 -1 +3157 3157 -1 +3158 3158 -1 +3159 3159 -1 +3160 3160 -1 +3161 3161 -1 +3162 3162 -1 +3163 3163 -1 +3164 3164 -1 +3165 3165 -1 +3166 3166 -1 +3167 3167 0 +3168 3168 0 +3169 3169 -1 +3170 3170 -1 +3171 3171 -1 +3172 3172 -1 +3173 3173 -1 +3174 3174 -1 +3175 3175 -1 +3176 3176 -1 +3177 3177 0 +3178 3178 -1 +3179 3179 -1 +3180 3180 -1 +3181 3181 -1 +3182 3182 -1 +3183 3183 -1 +3184 3184 0 +3185 3185 0 +3186 3186 -1 +3187 3187 -1 +3188 3188 -1 +3189 3189 -1 +3190 3190 -1 +3191 3191 -1 +3192 3192 -1 +3193 3193 -1 +3194 3194 -1 +3195 3195 -1 +3196 3196 -1 +3197 3197 0 +3198 3198 -1 +3199 3199 -1 +3200 3200 -1 +3201 3201 -1 +3202 3202 -1 +3203 3203 0 +3204 3204 -1 +3205 3205 -1 +3206 3206 -1 +3207 3207 -1 +3208 3208 0 +3209 3209 -1 +3210 3210 -1 +3211 3211 -1 +3212 3212 -1 +3213 3213 -1 +3214 3214 -1 +3215 3215 -1 +3216 3216 -1 +3217 3217 -1 +3218 3218 -1 +3219 3219 -1 +3220 3220 -1 +3221 3221 -1 +3222 3222 0 +3223 3223 -1 +3224 3224 -1 +3225 3225 -1 +3226 3226 -1 +3227 3227 -1 +3228 3228 -1 +3229 3229 -1 +3230 3230 0 +3231 3231 -1 +3232 3232 -1 +3233 3233 -1 +3234 3234 -1 +3235 3235 -1 +3236 3236 -1 +3237 3237 0 +3238 3238 -1 +3239 3239 -1 +3240 3240 -1 +3241 3241 -1 +3242 3242 -1 +3243 3243 -1 +3244 3244 -1 +3245 3245 -1 +3246 3246 -1 +3247 3247 -1 +3248 3248 -1 +3249 3249 -1 +3250 3250 -1 +3251 3251 -1 +3252 3252 0 +3253 3253 -1 +3254 3254 -1 +3255 3255 -1 +3256 3256 -1 +3257 3257 -1 +3258 3258 -1 +3259 3259 0 +3260 3260 -1 +3261 3261 -1 +3262 3262 -1 +3263 3263 0 +3264 3264 -1 +3265 3265 -1 +3266 3266 -1 +3267 3267 0 +3268 3268 -1 +3269 3269 -1 +3270 3270 0 +3271 3271 -1 +3272 3272 -1 +3273 3273 0 +3274 3274 -1 +3275 3275 -1 +3276 3276 -1 +3277 3277 -1 +3278 3278 -1 +3279 3279 -1 +3280 3280 0 +3281 3281 -1 +3282 3282 -1 +3283 3283 -1 +3284 3284 0 +3285 3285 -1 +3286 3286 0 +3287 3287 -1 +3288 3288 -1 +3289 3289 -1 +3290 3290 -1 +3291 3291 -1 +3292 3292 -1 +3293 3293 -1 +3294 3294 -1 +3295 3295 -1 +3296 3296 -1 +3297 3297 -1 +3298 3298 0 +3299 3299 -1 +3300 3300 -1 +3301 3301 -1 +3302 3302 -1 +3303 3303 -1 +3304 3304 0 +3305 3305 -1 +3306 3306 -1 +3307 3307 -1 +3308 3308 -1 +3309 3309 0 +3310 3310 -1 +3311 3311 -1 +3312 3312 -1 +3313 3313 -1 +3314 3314 -1 +3315 3315 -1 +3316 3316 0 +3317 3317 0 +3318 3318 -1 +3319 3319 -1 +3320 3320 -1 +3321 3321 -1 +3322 3322 -1 +3323 3323 -1 +3324 3324 -1 +3325 3325 -1 +3326 3326 -1 +3327 3327 -1 +3328 3328 -1 +3329 3329 -1 +3330 3330 0 +3331 3331 -1 +3332 3332 -1 +3333 3333 -1 +3334 3334 -1 +3335 3335 0 +3336 3336 0 +3337 3337 0 +3338 3338 -1 +3339 3339 -1 +3340 3340 -1 +3341 3341 -1 +3342 3342 -1 +3343 3343 -1 +3344 3344 -1 +3345 3345 -1 +3346 3346 -1 +3347 3347 -1 +3348 3348 -1 +3349 3349 -1 +3350 3350 0 +3351 3351 -1 +3352 3352 -1 +3353 3353 0 +3354 3354 -1 +3355 3355 -1 +3356 3356 -1 +3357 3357 -1 +3358 3358 -1 +3359 3359 -1 +3360 3360 -1 +3361 3361 -1 +3362 3362 -1 +3363 3363 -1 +3364 3364 -1 +3365 3365 -1 +3366 3366 -1 +3367 3367 -1 +3368 3368 -1 +3369 3369 -1 +3370 3370 -1 +3371 3371 -1 +3372 3372 -1 +3373 3373 -1 +3374 3374 -1 +3375 3375 -1 +3376 3376 -1 +3377 3377 -1 +3378 3378 -1 +3379 3379 0 +3380 3380 -1 +3381 3381 -1 +3382 3382 -1 +3383 3383 -1 +3384 3384 0 +3385 3385 -1 +3386 3386 -1 +3387 3387 -1 +3388 3388 -1 +3389 3389 -1 +3390 3390 -1 +3391 3391 -1 +3392 3392 0 +3393 3393 -1 +3394 3394 -1 +3395 3395 -1 +3396 3396 0 +3397 3397 -1 +3398 3398 -1 +3399 3399 -1 +3400 3400 -1 +3401 3401 -1 +3402 3402 0 +3403 3403 -1 +3404 3404 0 +3405 3405 0 +3406 3406 -1 +3407 3407 -1 +3408 3408 -1 +3409 3409 -1 +3410 3410 -1 +3411 3411 -1 +3412 3412 -1 +3413 3413 -1 +3414 3414 -1 +3415 3415 -1 +3416 3416 -1 +3417 3417 -1 +3418 3418 -1 +3419 3419 0 +3420 3420 0 +3421 3421 -1 +3422 3422 -1 +3423 3423 -1 +3424 3424 -1 +3425 3425 -1 +3426 3426 -1 +3427 3427 -1 +3428 3428 -1 +3429 3429 0 +3430 3430 -1 +3431 3431 -1 +3432 3432 -1 +3433 3433 -1 +3434 3434 -1 +3435 3435 -1 +3436 3436 -1 +3437 3437 -1 +3438 3438 -1 +3439 3439 -1 +3440 3440 -1 +3441 3441 -1 +3442 3442 -1 +3443 3443 -1 +3444 3444 -1 +3445 3445 -1 +3446 3446 -1 +3447 3447 -1 +3448 3448 -1 +3449 3449 0 +3450 3450 0 +3451 3451 -1 +3452 3452 0 +3453 3453 -1 +3454 3454 -1 +3455 3455 -1 +3456 3456 -1 +3457 3457 -1 +3458 3458 -1 +3459 3459 -1 +3460 3460 -1 +3461 3461 -1 +3462 3462 -1 +3463 3463 -1 +3464 3464 -1 +3465 3465 -1 +3466 3466 -1 +3467 3467 -1 +3468 3468 -1 +3469 3469 -1 +3470 3470 -1 +3471 3471 -1 +3472 3472 0 +3473 3473 -1 +3474 3474 -1 +3475 3475 -1 +3476 3476 -1 +3477 3477 -1 +3478 3478 -1 +3479 3479 0 +3480 3480 -1 +3481 3481 -1 +3482 3482 0 +3483 3483 -1 +3484 3484 -1 +3485 3485 -1 +3486 3486 -1 +3487 3487 -1 +3488 3488 -1 +3489 3489 -1 +3490 3490 -1 +3491 3491 -1 +3492 3492 -1 +3493 3493 -1 +3494 3494 -1 +3495 3495 -1 +3496 3496 -1 +3497 3497 -1 +3498 3498 0 +3499 3499 -1 +3500 3500 -1 +3501 3501 -1 +3502 3502 -1 +3503 3503 -1 +3504 3504 -1 +3505 3505 -1 +3506 3506 -1 +3507 3507 -1 +3508 3508 0 +3509 3509 -1 +3510 3510 -1 +3511 3511 -1 +3512 3512 -1 +3513 3513 -1 +3514 3514 -1 +3515 3515 -1 +3516 3516 -1 +3517 3517 -1 +3518 3518 -1 +3519 3519 -1 +3520 3520 -1 +3521 3521 -1 +3522 3522 0 +3523 3523 0 +3524 3524 -1 +3525 3525 -1 +3526 3526 -1 +3527 3527 -1 +3528 3528 -1 +3529 3529 -1 +3530 3530 -1 +3531 3531 0 +3532 3532 -1 +3533 3533 -1 +3534 3534 -1 +3535 3535 0 +3536 3536 -1 +3537 3537 -1 +3538 3538 -1 +3539 3539 0 +3540 3540 -1 +3541 3541 -1 +3542 3542 -1 +3543 3543 -1 +3544 3544 0 +3545 3545 -1 +3546 3546 -1 +3547 3547 -1 +3548 3548 -1 +3549 3549 -1 +3550 3550 -1 +3551 3551 -1 +3552 3552 -1 +3553 3553 -1 +3554 3554 -1 +3555 3555 -1 +3556 3556 -1 +3557 3557 -1 +3558 3558 -1 +3559 3559 -1 +3560 3560 -1 +3561 3561 -1 +3562 3562 -1 +3563 3563 -1 +3564 3564 -1 +3565 3565 -1 +3566 3566 -1 +3567 3567 -1 +3568 3568 0 +3569 3569 -1 +3570 3570 -1 +3571 3571 -1 +3572 3572 -1 +3573 3573 0 +3574 3574 -1 +3575 3575 -1 +3576 3576 -1 +3577 3577 -1 +3578 3578 -1 +3579 3579 -1 +3580 3580 -1 +3581 3581 -1 +3582 3582 -1 +3583 3583 -1 +3584 3584 0 +3585 3585 -1 +3586 3586 -1 +3587 3587 -1 +3588 3588 -1 +3589 3589 -1 +3590 3590 -1 +3591 3591 0 +3592 3592 -1 +3593 3593 -1 +3594 3594 -1 +3595 3595 0 +3596 3596 -1 +3597 3597 -1 +3598 3598 -1 +3599 3599 -1 +3600 3600 -1 +3601 3601 -1 +3602 3602 -1 +3603 3603 -1 +3604 3604 0 +3605 3605 -1 +3606 3606 -1 +3607 3607 -1 +3608 3608 -1 +3609 3609 -1 +3610 3610 -1 +3611 3611 -1 +3612 3612 -1 +3613 3613 -1 +3614 3614 -1 +3615 3615 -1 +3616 3616 -1 +3617 3617 0 +3618 3618 -1 +3619 3619 -1 +3620 3620 -1 +3621 3621 -1 +3622 3622 -1 +3623 3623 -1 +3624 3624 -1 +3625 3625 -1 +3626 3626 -1 +3627 3627 -1 +3628 3628 -1 +3629 3629 -1 +3630 3630 -1 +3631 3631 -1 +3632 3632 -1 +3633 3633 -1 +3634 3634 -1 +3635 3635 -1 +3636 3636 -1 +3637 3637 -1 +3638 3638 -1 +3639 3639 -1 +3640 3640 -1 +3641 3641 -1 +3642 3642 -1 +3643 3643 -1 +3644 3644 -1 +3645 3645 0 +3646 3646 0 +3647 3647 -1 +3648 3648 -1 +3649 3649 0 +3650 3650 0 +3651 3651 0 +3652 3652 -1 +3653 3653 -1 +3654 3654 -1 +3655 3655 -1 +3656 3656 -1 +3657 3657 -1 +3658 3658 -1 +3659 3659 -1 +3660 3660 -1 +3661 3661 -1 +3662 3662 -1 +3663 3663 -1 +3664 3664 -1 +3665 3665 -1 +3666 3666 -1 +3667 3667 -1 +3668 3668 0 +3669 3669 -1 +3670 3670 -1 +3671 3671 -1 +3672 3672 -1 +3673 3673 -1 +3674 3674 -1 +3675 3675 -1 +3676 3676 -1 +3677 3677 -1 +3678 3678 -1 +3679 3679 -1 +3680 3680 -1 +3681 3681 -1 +3682 3682 -1 +3683 3683 -1 +3684 3684 -1 +3685 3685 -1 +3686 3686 -1 +3687 3687 -1 +3688 3688 -1 +3689 3689 0 +3690 3690 -1 +3691 3691 -1 +3692 3692 -1 +3693 3693 -1 +3694 3694 -1 +3695 3695 -1 +3696 3696 -1 +3697 3697 -1 +3698 3698 -1 +3699 3699 -1 +3700 3700 -1 +3701 3701 -1 +3702 3702 -1 +3703 3703 -1 +3704 3704 -1 +3705 3705 -1 +3706 3706 -1 +3707 3707 -1 +3708 3708 -1 +3709 3709 -1 +3710 3710 -1 +3711 3711 -1 +3712 3712 -1 +3713 3713 0 +3714 3714 -1 +3715 3715 -1 +3716 3716 -1 +3717 3717 -1 +3718 3718 -1 +3719 3719 -1 +3720 3720 -1 +3721 3721 -1 +3722 3722 0 +3723 3723 -1 +3724 3724 -1 +3725 3725 -1 +3726 3726 -1 +3727 3727 -1 +3728 3728 0 +3729 3729 0 +3730 3730 -1 +3731 3731 -1 +3732 3732 -1 +3733 3733 -1 +3734 3734 -1 +3735 3735 -1 +3736 3736 -1 +3737 3737 -1 +3738 3738 -1 +3739 3739 -1 +3740 3740 0 +3741 3741 0 +3742 3742 -1 +3743 3743 -1 +3744 3744 -1 +3745 3745 -1 +3746 3746 0 +3747 3747 0 +3748 3748 -1 +3749 3749 -1 +3750 3750 -1 +3751 3751 -1 +3752 3752 -1 +3753 3753 -1 +3754 3754 -1 +3755 3755 -1 +3756 3756 -1 +3757 3757 -1 +3758 3758 -1 +3759 3759 0 +3760 3760 -1 +3761 3761 0 +3762 3762 -1 +3763 3763 -1 +3764 3764 0 +3765 3765 -1 +3766 3766 -1 +3767 3767 -1 +3768 3768 -1 +3769 3769 0 +3770 3770 -1 +3771 3771 -1 +3772 3772 -1 +3773 3773 -1 +3774 3774 -1 +3775 3775 -1 +3776 3776 -1 +3777 3777 -1 +3778 3778 -1 +3779 3779 -1 +3780 3780 -1 +3781 3781 0 +3782 3782 -1 +3783 3783 -1 +3784 3784 -1 +3785 3785 -1 +3786 3786 -1 +3787 3787 -1 +3788 3788 -1 +3789 3789 -1 +3790 3790 -1 +3791 3791 0 +3792 3792 -1 +3793 3793 -1 +3794 3794 -1 +3795 3795 -1 +3796 3796 -1 +3797 3797 -1 +3798 3798 -1 +3799 3799 -1 +3800 3800 0 +3801 3801 -1 +3802 3802 0 +3803 3803 0 +3804 3804 -1 +3805 3805 -1 +3806 3806 -1 +3807 3807 -1 +3808 3808 -1 +3809 3809 -1 +3810 3810 -1 +3811 3811 -1 +3812 3812 -1 +3813 3813 -1 +3814 3814 0 +3815 3815 0 +3816 3816 -1 +3817 3817 -1 +3818 3818 -1 +3819 3819 -1 +3820 3820 -1 +3821 3821 -1 +3822 3822 -1 +3823 3823 -1 +3824 3824 -1 +3825 3825 -1 +3826 3826 -1 +3827 3827 -1 +3828 3828 0 +3829 3829 -1 +3830 3830 -1 +3831 3831 -1 +3832 3832 -1 +3833 3833 -1 +3834 3834 -1 +3835 3835 0 +3836 3836 -1 +3837 3837 -1 +3838 3838 -1 +3839 3839 -1 +3840 3840 -1 +3841 3841 -1 +3842 3842 -1 +3843 3843 -1 +3844 3844 -1 +3845 3845 -1 +3846 3846 -1 +3847 3847 -1 +3848 3848 -1 +3849 3849 0 +3850 3850 -1 +3851 3851 -1 +3852 3852 -1 +3853 3853 -1 +3854 3854 -1 +3855 3855 -1 +3856 3856 -1 +3857 3857 -1 +3858 3858 -1 +3859 3859 -1 +3860 3860 -1 +3861 3861 -1 +3862 3862 -1 +3863 3863 -1 +3864 3864 -1 +3865 3865 -1 +3866 3866 -1 +3867 3867 -1 +3868 3868 -1 +3869 3869 -1 +3870 3870 -1 +3871 3871 -1 +3872 3872 -1 +3873 3873 -1 +3874 3874 -1 +3875 3875 -1 +3876 3876 0 +3877 3877 -1 +3878 3878 -1 +3879 3879 -1 +3880 3880 -1 +3881 3881 0 +3882 3882 -1 +3883 3883 -1 +3884 3884 -1 +3885 3885 0 +3886 3886 -1 +3887 3887 -1 +3888 3888 -1 +3889 3889 -1 +3890 3890 -1 +3891 3891 -1 +3892 3892 -1 +3894 3894 -1 +3895 3895 -1 +3896 3896 -1 +3897 3897 -1 +3898 3898 -1 +3899 3899 -1 +3900 3900 -1 +3901 3901 -1 +3902 3902 -1 +3903 3903 -1 +3904 3904 -1 +3905 3905 -1 +3906 3906 -1 +3907 3907 -1 +3908 3908 -1 +3909 3909 -1 +3910 3910 -1 +3911 3911 -1 +3912 3912 -1 +3913 3913 -1 +3914 3914 -1 +3915 3915 -1 +3916 3916 -1 +3917 3917 -1 +3918 3918 -1 +3919 3919 0 +3920 3920 -1 +3921 3921 0 +3922 3922 0 +3923 3923 -1 +3924 3924 -1 +3925 3925 0 +3926 3926 -1 +3927 3927 -1 +3928 3928 0 +3929 3929 -1 +3930 3930 -1 +3931 3931 -1 +3932 3932 -1 +3933 3933 0 +3934 3934 -1 +3935 3935 -1 +3936 3936 0 +3937 3937 -1 +3938 3938 -1 +3939 3939 -1 +3940 3940 -1 +3941 3941 -1 +3942 3942 -1 +3943 3943 0 +3944 3944 0 +3945 3945 -1 +3946 3946 -1 +3947 3947 -1 +3948 3948 -1 +3949 3949 -1 +3950 3950 -1 +3951 3951 -1 +3952 3952 -1 +3953 3953 -1 +3954 3954 0 +3955 3955 -1 +3956 3956 -1 +3957 3957 -1 +3958 3958 0 +3959 3959 -1 +3960 3960 -1 +3961 3961 -1 +3962 3962 -1 +3963 3963 -1 +3964 3964 -1 +3965 3965 -1 +3966 3966 -1 +3967 3967 -1 +3968 3968 -1 +3969 3969 -1 +3970 3970 -1 +3971 3971 0 +3972 3972 -1 +3973 3973 -1 +3974 3974 -1 +3975 3975 -1 +3976 3976 0 +3977 3977 0 +3978 3978 0 +3979 3979 -1 +3980 3980 -1 +3981 3981 -1 +3982 3982 -1 +3983 3983 -1 +3984 3984 -1 +3985 3985 -1 +3986 3986 -1 +3987 3987 -1 +3988 3988 -1 +3989 3989 -1 +3990 3990 -1 +3991 3991 -1 +3992 3992 -1 +3993 3993 -1 +3994 3994 -1 +3995 3995 -1 +3996 3996 -1 +3997 3997 -1 +3998 3998 -1 +3999 3999 -1 +4000 4000 -1 +4001 4001 -1 +4002 4002 -1 +4003 4003 -1 +4004 4004 -1 +4005 4005 -1 +4006 4006 -1 +4007 4007 -1 +4008 4008 -1 +4009 4009 -1 +4010 4010 -1 +4011 4011 -1 +4012 4012 -1 +4013 4013 -1 +4014 4014 -1 +4015 4015 -1 +4016 4016 -1 +4017 4017 -1 +4018 4018 -1 +4019 4019 -1 +4020 4020 -1 +4021 4021 -1 +4022 4022 -1 +4023 4023 -1 +4024 4024 -1 +4025 4025 -1 +4026 4026 -1 +4027 4027 -1 +4028 4028 -1 +4029 4029 -1 +4030 4030 -1 +4031 4031 -1 +4032 4032 0 +4033 4033 -1 +4034 4034 -1 +4035 4035 -1 +4036 4036 -1 +4037 4037 -1 +4038 4038 -1 +4039 4039 0 +4040 4040 -1 +4041 4041 -1 +4042 4042 -1 +4043 4043 -1 +4044 4044 0 +4045 4045 -1 +4046 4046 -1 +4047 4047 -1 +4048 4048 -1 +4049 4049 -1 +4050 4050 -1 +4051 4051 0 +4052 4052 -1 +4053 4053 -1 +4054 4054 -1 +4055 4055 -1 +4056 4056 -1 +4057 4057 -1 +4058 4058 -1 +4059 4059 0 +4060 4060 -1 +4061 4061 -1 +4062 4062 0 +4063 4063 0 +4064 4064 -1 +4065 4065 0 +4066 4066 -1 +4067 4067 -1 +4068 4068 -1 +4069 4069 -1 +4070 4070 -1 +4071 4071 -1 +4072 4072 -1 +4073 4073 -1 +4074 4074 -1 +4075 4075 -1 +4076 4076 -1 +4077 4077 -1 +4078 4078 0 +4079 4079 -1 +4080 4080 -1 +4081 4081 -1 +4082 4082 -1 +4083 4083 -1 +4084 4084 -1 +4085 4085 -1 +4086 4086 -1 +4087 4087 0 +4088 4088 -1 +4089 4089 -1 +4090 4090 -1 +4091 4091 0 +4092 4092 -1 +4093 4093 -1 +4094 4094 -1 +4095 4095 -1 +4096 4096 -1 +4097 4097 -1 +4098 4098 -1 +4099 4099 -1 +4100 4100 -1 +4101 4101 0 +4102 4102 -1 +4103 4103 -1 +4104 4104 -1 +4105 4105 -1 +4106 4106 -1 +4107 4107 -1 +4108 4108 0 +4109 4109 -1 +4110 4110 -1 +4111 4111 -1 +4112 4112 -1 +4113 4113 -1 +4114 4114 -1 +4115 4115 -1 +4116 4116 -1 +4117 4117 -1 +4118 4118 -1 +4119 4119 -1 +4120 4120 -1 +4121 4121 -1 +4122 4122 0 +4123 4123 0 +4124 4124 -1 +4125 4125 -1 +4126 4126 -1 +4127 4127 -1 +4128 4128 0 +4129 4129 -1 +4130 4130 -1 +4131 4131 -1 +4132 4132 -1 +4133 4133 -1 +4134 4134 -1 +4135 4135 -1 +4136 4136 -1 +4137 4137 -1 +4138 4138 -1 +4139 4139 -1 +4140 4140 -1 +4141 4141 -1 +4142 4142 -1 +4143 4143 -1 +4144 4144 -1 +4145 4145 -1 +4146 4146 -1 +4147 4147 -1 +4148 4148 -1 +4149 4149 -1 +4150 4150 0 +4151 4151 -1 +4152 4152 -1 +4153 4153 -1 +4154 4154 -1 +4155 4155 0 +4156 4156 -1 +4157 4157 -1 +4158 4158 -1 +4159 4159 -1 +4160 4160 -1 +4161 4161 -1 +4162 4162 -1 +4163 4163 -1 +4164 4164 -1 +4165 4165 -1 +4166 4166 -1 +4167 4167 -1 +4168 4168 -1 +4169 4169 0 +4170 4170 -1 +4171 4171 -1 +4172 4172 -1 +4173 4173 0 +4174 4174 -1 +4175 4175 -1 +4176 4176 -1 +4177 4177 -1 +4178 4178 0 +4179 4179 -1 +4180 4180 -1 +4181 4181 -1 +4182 4182 -1 +4183 4183 -1 +4184 4184 -1 +4185 4185 -1 +4186 4186 -1 +4187 4187 -1 +4188 4188 -1 +4189 4189 -1 +4190 4190 -1 +4191 4191 -1 +4192 4192 0 +4193 4193 0 +4194 4194 -1 +4195 4195 0 +4196 4196 -1 +4197 4197 -1 +4198 4198 0 +4199 4199 -1 +4200 4200 -1 +4201 4201 -1 +4202 4202 -1 +4203 4203 -1 +4204 4204 -1 +4205 4205 -1 +4206 4206 -1 +4207 4207 -1 +4208 4208 -1 +4209 4209 -1 +4210 4210 0 +4211 4211 -1 +4212 4212 -1 +4213 4213 -1 +4214 4214 -1 +4215 4215 -1 +4216 4216 -1 +4217 4217 -1 +4218 4218 -1 +4219 4219 -1 +4220 4220 -1 +4221 4221 -1 +4222 4222 -1 +4223 4223 0 +4224 4224 -1 +4225 4225 -1 +4226 4226 -1 +4227 4227 -1 +4228 4228 -1 +4229 4229 -1 +4230 4230 -1 +4231 4231 -1 +4232 4232 -1 +4233 4233 0 +4234 4234 -1 +4235 4235 -1 +4236 4236 -1 +4237 4237 -1 +4238 4238 -1 +4239 4239 -1 +4240 4240 -1 +4241 4241 -1 +4242 4242 -1 +4243 4243 -1 +4244 4244 -1 +4245 4245 -1 +4246 4246 -1 +4247 4247 -1 +4248 4248 0 +4249 4249 -1 +4250 4250 -1 +4251 4251 -1 +4252 4252 -1 +4253 4253 -1 +4254 4254 0 +4255 4255 -1 +4256 4256 -1 +4257 4257 -1 +4258 4258 -1 +4259 4259 -1 +4260 4260 -1 +4261 4261 -1 +4262 4262 -1 +4263 4263 -1 +4264 4264 -1 +4265 4265 -1 +4266 4266 -1 +4267 4267 -1 +4268 4268 -1 +4269 4269 -1 +4270 4270 -1 +4271 4271 0 +4273 4273 -1 +4274 4274 -1 +4275 4275 -1 +4276 4276 -1 +4277 4277 -1 +4278 4278 -1 +4279 4279 -1 +4280 4280 -1 +4281 4281 -1 +4282 4282 -1 +4283 4283 -1 +4284 4284 -1 +4285 4285 -1 +4286 4286 -1 +4287 4287 0 +4288 4288 0 +4289 4289 -1 +4290 4290 -1 +4291 4291 0 +4292 4292 -1 +4293 4293 -1 +4294 4294 -1 +4295 4295 -1 +4296 4296 -1 +4297 4297 -1 +4298 4298 -1 +4299 4299 0 +4300 4300 -1 +4301 4301 -1 +4302 4302 -1 +4303 4303 -1 +4304 4304 -1 +4305 4305 -1 +4306 4306 -1 +4307 4307 0 +4308 4308 -1 +4309 4309 -1 +4310 4310 -1 +4311 4311 -1 +4312 4312 -1 +4313 4313 0 +4314 4314 -1 +4315 4315 -1 +4316 4316 -1 +4317 4317 -1 +4318 4318 -1 +4319 4319 -1 +4320 4320 -1 +4321 4321 -1 +4322 4322 -1 +4323 4323 -1 +4324 4324 -1 +4325 4325 -1 +4326 4326 -1 +4327 4327 -1 +4328 4328 -1 +4329 4329 0 +4330 4330 -1 +4331 4331 -1 +4332 4332 0 +4333 4333 -1 +4334 4334 -1 +4335 4335 -1 +4336 4336 -1 +4337 4337 -1 +4338 4338 -1 +4339 4339 -1 +4340 4340 -1 +4341 4341 -1 +4342 4342 -1 +4343 4343 -1 +4344 4344 -1 +4345 4345 -1 +4346 4346 -1 +4347 4347 -1 +4348 4348 -1 +4349 4349 -1 +4350 4350 -1 +4351 4351 -1 +4352 4352 -1 +4353 4353 -1 +4354 4354 0 +4355 4355 -1 +4356 4356 -1 +4357 4357 -1 +4358 4358 -1 +4359 4359 -1 +4360 4360 -1 +4361 4361 -1 +4362 4362 -1 +4363 4363 -1 +4364 4364 -1 +4365 4365 -1 +4366 4366 -1 +4367 4367 -1 +4368 4368 -1 +4369 4369 -1 +4370 4370 -1 +4371 4371 -1 +4372 4372 -1 +4373 4373 -1 +4374 4374 -1 +4375 4375 -1 +4376 4376 -1 +4377 4377 -1 +4378 4378 -1 +4379 4379 -1 +4380 4380 -1 +4382 4382 -1 +4383 4383 -1 +4384 4384 -1 +4385 4385 -1 +4386 4386 -1 +4387 4387 -1 +4388 4388 -1 +4389 4389 -1 +4390 4390 -1 +4391 4391 -1 +4392 4392 -1 +4393 4393 -1 +4394 4394 -1 +4395 4395 0 +4396 4396 0 +4397 4397 -1 +4398 4398 -1 +4399 4399 -1 +4400 4400 -1 +4401 4401 -1 +4402 4402 -1 +4403 4403 -1 +4404 4404 -1 +4405 4405 -1 +4406 4406 -1 +4407 4407 0 +4408 4408 -1 +4409 4409 -1 +4410 4410 -1 +4411 4411 -1 +4412 4412 -1 +4413 4413 -1 +4414 4414 -1 +4415 4415 -1 +4416 4416 -1 +4417 4417 -1 +4418 4418 0 +4419 4419 -1 +4420 4420 -1 +4421 4421 -1 +4422 4422 -1 +4423 4423 -1 +4424 4424 -1 +4425 4425 -1 +4426 4426 -1 +4427 4427 0 +4428 4428 -1 +4429 4429 -1 +4430 4430 0 +4431 4431 -1 +4432 4432 0 +4433 4433 -1 +4434 4434 -1 +4435 4435 -1 +4436 4436 -1 +4437 4437 -1 +4438 4438 -1 +4439 4439 -1 +4440 4440 -1 +4441 4441 -1 +4442 4442 0 +4443 4443 -1 +4444 4444 0 +4445 4445 -1 +4446 4446 -1 +4447 4447 -1 +4448 4448 -1 +4449 4449 -1 +4450 4450 0 +4451 4451 -1 +4452 4452 -1 +4453 4453 -1 +4454 4454 -1 +4455 4455 -1 +4456 4456 -1 +4457 4457 -1 +4458 4458 0 +4459 4459 -1 +4460 4460 0 +4461 4461 0 +4462 4462 -1 +4463 4463 0 +4464 4464 -1 +4465 4465 -1 +4466 4466 -1 +4467 4467 -1 +4468 4468 0 +4469 4469 -1 +4470 4470 0 +4471 4471 -1 +4472 4472 -1 +4473 4473 -1 +4474 4474 -1 +4475 4475 -1 +4476 4476 -1 +4477 4477 -1 +4478 4478 -1 +4479 4479 -1 +4480 4480 -1 +4481 4481 -1 +4482 4482 -1 +4483 4483 -1 +4484 4484 -1 +4485 4485 -1 +4486 4486 -1 +4487 4487 -1 +4488 4488 -1 +4489 4489 -1 +4490 4490 -1 +4491 4491 -1 +4492 4492 -1 +4493 4493 -1 +4494 4494 0 +4495 4495 0 +4496 4496 -1 +4497 4497 -1 +4498 4498 -1 +4499 4499 -1 +4500 4500 -1 +4501 4501 -1 +4502 4502 -1 +4503 4503 -1 +4504 4504 -1 +4505 4505 -1 +4506 4506 -1 +4507 4507 -1 +4508 4508 -1 +4509 4509 -1 +4510 4510 0 +4511 4511 0 +4512 4512 -1 +4513 4513 -1 +4514 4514 -1 +4515 4515 -1 +4516 4516 -1 +4517 4517 -1 +4518 4518 -1 +4519 4519 -1 +4520 4520 -1 +4521 4521 0 +4522 4522 -1 +4523 4523 0 +4524 4524 -1 +4525 4525 -1 +4526 4526 -1 +4527 4527 -1 +4528 4528 -1 +4529 4529 -1 +4530 4530 -1 +4531 4531 -1 +4532 4532 -1 +4533 4533 -1 +4534 4534 -1 +4535 4535 -1 +4537 4537 -1 +4538 4538 -1 +4539 4539 -1 +4540 4540 -1 +4541 4541 -1 +4542 4542 -1 +4543 4543 -1 +4544 4544 -1 +4545 4545 -1 +4546 4546 -1 +4547 4547 -1 +4548 4548 -1 +4549 4549 -1 +4550 4550 -1 +4551 4551 -1 +4552 4552 -1 +4553 4553 -1 +4554 4554 -1 +4555 4555 -1 +4556 4556 -1 +4557 4557 0 +4558 4558 -1 +4559 4559 -1 +4560 4560 -1 +4561 4561 -1 +4562 4562 -1 +4563 4563 -1 +4564 4564 -1 +4565 4565 -1 +4566 4566 -1 +4567 4567 -1 +4568 4568 -1 +4569 4569 -1 +4570 4570 0 +4571 4571 -1 +4572 4572 -1 +4573 4573 -1 +4574 4574 -1 +4575 4575 -1 +4576 4576 0 +4577 4577 0 +4578 4578 -1 +4579 4579 -1 +4580 4580 -1 +4581 4581 -1 +4582 4582 0 +4583 4583 -1 +4584 4584 -1 +4585 4585 -1 +4586 4586 0 +4587 4587 0 +4588 4588 -1 +4589 4589 -1 +4590 4590 -1 +4591 4591 -1 +4592 4592 -1 +4593 4593 -1 +4594 4594 -1 +4595 4595 -1 +4596 4596 0 +4597 4597 -1 +4598 4598 -1 +4599 4599 -1 +4600 4600 -1 +4601 4601 0 +4602 4602 -1 +4603 4603 -1 +4604 4604 -1 +4605 4605 -1 +4606 4606 -1 +4607 4607 -1 +4608 4608 -1 +4609 4609 -1 +4610 4610 0 +4611 4611 -1 +4612 4612 -1 +4613 4613 -1 +4614 4614 -1 +4615 4615 -1 +4616 4616 -1 +4617 4617 -1 +4618 4618 -1 +4619 4619 -1 +4620 4620 0 +4621 4621 -1 +4622 4622 0 +4623 4623 -1 +4624 4624 0 +4625 4625 0 +4626 4626 0 +4627 4627 -1 +4628 4628 -1 +4629 4629 -1 +4630 4630 -1 +4631 4631 -1 +4632 4632 -1 +4633 4633 -1 +4634 4634 -1 +4635 4635 -1 +4636 4636 0 +4637 4637 0 +4638 4638 -1 +4639 4639 -1 +4640 4640 -1 +4641 4641 -1 +4642 4642 -1 +4643 4643 -1 +4644 4644 -1 +4645 4645 -1 +4646 4646 -1 +4647 4647 -1 +4648 4648 0 +4649 4649 -1 +4650 4650 -1 +4651 4651 -1 +4652 4652 -1 +4653 4653 -1 +4654 4654 -1 +4655 4655 0 +4656 4656 -1 +4657 4657 -1 +4658 4658 -1 +4659 4659 -1 +4660 4660 0 +4661 4661 -1 +4662 4662 -1 +4663 4663 -1 +4664 4664 -1 +4665 4665 -1 +4666 4666 -1 +4667 4667 -1 +4668 4668 -1 +4669 4669 -1 +4670 4670 0 +4671 4671 -1 +4672 4672 -1 +4673 4673 0 +4674 4674 -1 +4675 4675 -1 +4676 4676 -1 +4677 4677 0 +4678 4678 -1 +4679 4679 -1 +4680 4680 -1 +4681 4681 -1 +4682 4682 -1 +4683 4683 -1 +4684 4684 -1 +4685 4685 -1 +4686 4686 -1 +4687 4687 -1 +4688 4688 -1 +4689 4689 -1 +4690 4690 -1 +4691 4691 0 +4692 4692 -1 +4693 4693 -1 +4694 4694 -1 +4695 4695 -1 +4696 4696 -1 +4697 4697 -1 +4698 4698 -1 +4699 4699 -1 +4700 4700 -1 +4701 4701 0 +4702 4702 -1 +4703 4703 -1 +4704 4704 -1 +4705 4705 -1 +4706 4706 -1 +4707 4707 -1 +4708 4708 -1 +4709 4709 0 +4710 4710 -1 +4711 4711 -1 +4712 4712 -1 +4713 4713 -1 +4714 4714 -1 +4715 4715 0 +4716 4716 -1 +4717 4717 -1 +4718 4718 -1 +4719 4719 -1 +4720 4720 -1 +4721 4721 -1 +4722 4722 -1 +4723 4723 -1 +4724 4724 -1 +4725 4725 -1 +4726 4726 0 +4727 4727 -1 +4728 4728 -1 +4729 4729 -1 +4730 4730 -1 +4731 4731 -1 +4732 4732 -1 +4733 4733 -1 +4734 4734 -1 +4735 4735 0 +4736 4736 -1 +4737 4737 0 +4738 4738 -1 +4739 4739 -1 +4740 4740 -1 +4741 4741 -1 +4742 4742 -1 +4743 4743 -1 +4744 4744 -1 +4745 4745 -1 +4746 4746 -1 +4747 4747 -1 +4748 4748 -1 +4749 4749 -1 +4750 4750 -1 +4751 4751 -1 +4752 4752 -1 +4753 4753 0 +4754 4754 0 +4756 4756 -1 +4757 4757 -1 +4758 4758 -1 +4759 4759 -1 +4760 4760 -1 +4761 4761 -1 +4762 4762 -1 +4763 4763 -1 +4764 4764 -1 +4765 4765 -1 +4766 4766 -1 +4767 4767 -1 +4768 4768 0 +4769 4769 -1 +4770 4770 -1 +4771 4771 -1 +4772 4772 -1 +4773 4773 -1 +4774 4774 -1 +4775 4775 -1 +4776 4776 -1 +4777 4777 -1 +4778 4778 -1 +4779 4779 -1 +4780 4780 -1 +4781 4781 -1 +4782 4782 -1 +4783 4783 0 +4784 4784 -1 +4785 4785 -1 +4786 4786 -1 +4787 4787 -1 +4788 4788 -1 +4789 4789 -1 +4790 4790 -1 +4791 4791 -1 +4792 4792 -1 +4793 4793 -1 +4794 4794 -1 +4795 4795 -1 +4796 4796 -1 +4797 4797 -1 +4798 4798 -1 +4799 4799 -1 +4800 4800 -1 +4801 4801 -1 +4802 4802 -1 +4803 4803 -1 +4804 4804 -1 +4805 4805 -1 +4806 4806 -1 +4807 4807 -1 +4808 4808 -1 +4809 4809 -1 +4810 4810 -1 +4811 4811 -1 +4812 4812 -1 +4813 4813 -1 +4814 4814 -1 +4815 4815 -1 +4816 4816 -1 +4817 4817 -1 +4818 4818 -1 +4819 4819 -1 +4820 4820 -1 +4821 4821 0 +4822 4822 0 +4823 4823 -1 +4824 4824 0 +4825 4825 -1 +4826 4826 -1 +4827 4827 -1 +4828 4828 -1 +4829 4829 -1 +4830 4830 -1 +4831 4831 0 +4832 4832 -1 +4833 4833 -1 +4834 4834 -1 +4835 4835 -1 +4836 4836 -1 +4837 4837 -1 +4838 4838 -1 +4839 4839 -1 +4840 4840 -1 +4841 4841 -1 +4842 4842 -1 +4843 4843 -1 +4845 4845 -1 +4846 4846 -1 +4847 4847 0 +4848 4848 0 +4849 4849 -1 +4850 4850 -1 +4851 4851 -1 +4852 4852 -1 +4853 4853 -1 +4854 4854 -1 +4855 4855 -1 +4856 4856 -1 +4857 4857 -1 +4858 4858 -1 +4859 4859 -1 +4860 4860 -1 +4861 4861 -1 +4862 4862 -1 +4863 4863 0 +4864 4864 -1 +4865 4865 -1 +4866 4866 0 +4867 4867 -1 +4868 4868 -1 +4869 4869 -1 +4870 4870 -1 +4871 4871 -1 +4872 4872 0 +4873 4873 -1 +4874 4874 -1 +4875 4875 0 +4876 4876 -1 +4877 4877 0 +4878 4878 -1 +4879 4879 -1 +4880 4880 -1 +4881 4881 -1 +4882 4882 -1 +4883 4883 -1 +4884 4884 0 +4885 4885 -1 +4886 4886 -1 +4887 4887 0 +4888 4888 -1 +4889 4889 -1 +4890 4890 -1 +4891 4891 -1 +4892 4892 0 +4893 4893 -1 +4894 4894 -1 +4895 4895 0 +4896 4896 -1 +4897 4897 -1 +4898 4898 -1 +4899 4899 -1 +4900 4900 -1 +4901 4901 0 +4902 4902 -1 +4903 4903 -1 +4904 4904 -1 +4905 4905 0 +4906 4906 -1 +4907 4907 -1 +4908 4908 -1 +4909 4909 -1 +4910 4910 -1 +4911 4911 -1 +4912 4912 -1 +4913 4913 -1 +4914 4914 0 +4915 4915 0 +4916 4916 -1 +4917 4917 0 +4919 4919 -1 +4920 4920 -1 +4921 4921 -1 +4922 4922 -1 +4923 4923 -1 +4924 4924 -1 +4925 4925 -1 +4926 4926 -1 +4927 4927 -1 +4928 4928 -1 +4929 4929 -1 +4930 4930 -1 +4932 4932 -1 +4933 4933 -1 +4934 4934 -1 +4935 4935 0 +4936 4936 -1 +4937 4937 -1 +4938 4938 -1 +4940 4940 -1 +4941 4941 -1 +4942 4942 -1 +4943 4943 -1 +4944 4944 -1 +4945 4945 0 +4946 4946 -1 +4947 4947 -1 +4948 4948 -1 +4949 4949 -1 +4950 4950 -1 +4951 4951 -1 +4952 4952 0 +4953 4953 -1 +4954 4954 -1 +4955 4955 -1 +4956 4956 -1 +4957 4957 0 +4958 4958 -1 +4959 4959 0 +4960 4960 -1 +4961 4961 -1 +4962 4962 -1 +4963 4963 -1 +4964 4964 -1 +4965 4965 -1 +4966 4966 -1 +4967 4967 -1 +4968 4968 -1 +4969 4969 -1 +4970 4970 -1 +4971 4971 -1 +4972 4972 -1 +4973 4973 -1 +4974 4974 0 +4975 4975 0 +4976 4976 -1 +4977 4977 -1 +4978 4978 -1 +4979 4979 -1 +4980 4980 -1 +4981 4981 0 +4982 4982 -1 +4983 4983 -1 +4984 4984 -1 +4985 4985 -1 +4986 4986 -1 +4987 4987 -1 +4988 4988 -1 +4989 4989 -1 +4990 4990 -1 +4991 4991 -1 +4992 4992 -1 +4993 4993 -1 +4994 4994 -1 +4995 4995 -1 +4996 4996 -1 +4997 4997 -1 +4998 4998 -1 +4999 4999 -1 +5000 5000 0 +5001 5001 -1 +5002 5002 -1 +5003 5003 -1 +5004 5004 -1 +5005 5005 -1 +5006 5006 -1 +5007 5007 -1 +5008 5008 -1 +5009 5009 -1 +5010 5010 -1 +5011 5011 0 +5012 5012 -1 +5013 5013 -1 +5014 5014 -1 +5015 5015 -1 +5016 5016 -1 +5017 5017 -1 +5018 5018 -1 +5019 5019 -1 +5020 5020 -1 +5021 5021 0 +5022 5022 -1 +5023 5023 -1 +5024 5024 -1 +5025 5025 0 +5026 5026 -1 +5027 5027 -1 +5028 5028 -1 +5029 5029 -1 +5030 5030 0 +5031 5031 0 +5032 5032 -1 +5033 5033 -1 +5034 5034 -1 +5035 5035 -1 +5036 5036 -1 +5037 5037 -1 +5038 5038 -1 +5039 5039 -1 +5040 5040 -1 +5041 5041 -1 +5042 5042 0 +5043 5043 -1 +5044 5044 -1 +5045 5045 0 +5046 5046 -1 +5047 5047 -1 +5048 5048 0 +5049 5049 -1 +5050 5050 0 +5051 5051 0 +5052 5052 -1 +5053 5053 -1 +5054 5054 -1 +5055 5055 0 +5056 5056 -1 +5057 5057 -1 +5058 5058 -1 +5059 5059 -1 +5060 5060 -1 +5061 5061 -1 +5062 5062 0 +5063 5063 -1 +5064 5064 -1 +5065 5065 -1 +5066 5066 -1 +5067 5067 -1 +5068 5068 0 +5069 5069 0 +5070 5070 0 +5071 5071 -1 +5072 5072 -1 +5073 5073 -1 +5074 5074 0 +5075 5075 -1 +5076 5076 -1 +5077 5077 -1 +5078 5078 0 +5079 5079 0 +5080 5080 -1 +5081 5081 -1 +5082 5082 -1 +5083 5083 -1 +5084 5084 0 +5085 5085 0 +5086 5086 -1 +5087 5087 -1 +5088 5088 -1 +5089 5089 -1 +5090 5090 -1 +5091 5091 -1 +5092 5092 -1 +5093 5093 0 +5094 5094 -1 +5095 5095 -1 +5096 5096 -1 +5097 5097 -1 +5098 5098 -1 +5099 5099 -1 +5100 5100 0 +5101 5101 -1 +5102 5102 -1 +5103 5103 -1 +5104 5104 -1 +5105 5105 0 +5106 5106 -1 +5107 5107 -1 +5108 5108 -1 +5109 5109 -1 +5110 5110 -1 +5111 5111 -1 +5112 5112 0 +5113 5113 -1 +5114 5114 -1 +5115 5115 -1 +5116 5116 -1 +5117 5117 -1 +5118 5118 -1 +5119 5119 -1 +5120 5120 -1 +5121 5121 -1 +5122 5122 -1 +5123 5123 -1 +5124 5124 -1 +5125 5125 -1 +5126 5126 -1 +5127 5127 -1 +5128 5128 -1 +5129 5129 -1 +5130 5130 -1 +5131 5131 -1 +5132 5132 -1 +5133 5133 -1 +5134 5134 0 +5135 5135 -1 +5136 5136 0 +5137 5137 -1 +5138 5138 0 +5139 5139 -1 +5140 5140 -1 +5141 5141 -1 +5142 5142 -1 +5143 5143 -1 +5144 5144 -1 +5145 5145 0 +5146 5146 -1 +5147 5147 -1 +5148 5148 0 +5149 5149 -1 +5150 5150 0 +5151 5151 -1 +5152 5152 -1 +5153 5153 0 +5154 5154 -1 +5155 5155 -1 +5156 5156 -1 +5157 5157 -1 +5158 5158 0 +5159 5159 -1 +5160 5160 0 +5161 5161 -1 +5162 5162 -1 +5163 5163 -1 +5164 5164 -1 +5165 5165 -1 +5166 5166 -1 +5167 5167 -1 +5168 5168 0 +5169 5169 -1 +5170 5170 -1 +5171 5171 -1 +5172 5172 -1 +5173 5173 -1 +5174 5174 -1 +5175 5175 0 +5176 5176 -1 +5177 5177 0 +5178 5178 -1 +5179 5179 -1 +5180 5180 -1 +5181 5181 0 +5182 5182 -1 +5183 5183 -1 +5184 5184 -1 +5185 5185 -1 +5186 5186 -1 +5187 5187 -1 +5188 5188 -1 +5189 5189 -1 +5190 5190 -1 +5191 5191 -1 +5192 5192 -1 +5193 5193 -1 +5194 5194 -1 +5195 5195 -1 +5196 5196 -1 +5197 5197 -1 +5198 5198 -1 +5199 5199 0 +5200 5200 -1 +5201 5201 -1 +5202 5202 -1 +5203 5203 0 +5204 5204 -1 +5205 5205 -1 +5206 5206 -1 +5207 5207 0 +5208 5208 -1 +5209 5209 -1 +5210 5210 0 +5211 5211 -1 +5212 5212 -1 +5214 5214 -1 +5215 5215 -1 +5216 5216 0 +5217 5217 -1 +5218 5218 -1 +5219 5219 -1 +5220 5220 0 +5221 5221 -1 +5222 5222 -1 +5223 5223 -1 +5224 5224 -1 +5225 5225 0 +5226 5226 -1 +5227 5227 -1 +5228 5228 -1 +5229 5229 -1 +5230 5230 0 +5231 5231 -1 +5233 5233 -1 +5234 5234 -1 +5235 5235 -1 +5236 5236 0 +5237 5237 -1 +5238 5238 -1 +5239 5239 -1 +5240 5240 -1 +5241 5241 0 +5242 5242 -1 +5243 5243 -1 +5244 5244 -1 +5245 5245 -1 +5246 5246 -1 +5247 5247 -1 +5248 5248 -1 +5249 5249 -1 +5250 5250 -1 +5251 5251 -1 +5252 5252 0 +5253 5253 -1 +5254 5254 -1 +5255 5255 -1 +5256 5256 -1 +5257 5257 -1 +5258 5258 -1 +5259 5259 0 +5260 5260 -1 +5261 5261 -1 +5262 5262 -1 +5263 5263 -1 +5264 5264 -1 +5265 5265 -1 +5266 5266 -1 +5267 5267 0 +5268 5268 -1 +5270 5270 -1 +5271 5271 -1 +5272 5272 -1 +5273 5273 -1 +5274 5274 -1 +5275 5275 -1 +5276 5276 0 +5277 5277 0 +5278 5278 -1 +5279 5279 -1 +5280 5280 -1 +5282 5282 -1 +5283 5283 -1 +5284 5284 -1 +5285 5285 -1 +5286 5286 -1 +5287 5287 0 +5288 5288 -1 +5289 5289 -1 +5290 5290 -1 +5291 5291 0 +5292 5292 -1 +5293 5293 0 +5294 5294 -1 +5295 5295 0 +5296 5296 0 +5298 5298 0 +5299 5299 -1 +5300 5300 -1 +5301 5301 -1 +5302 5302 -1 +5303 5303 -1 +5304 5304 0 +5305 5305 -1 +5306 5306 -1 +5307 5307 -1 +5308 5308 -1 +5309 5309 -1 +5310 5310 -1 +5311 5311 -1 +5312 5312 -1 +5313 5313 -1 +5314 5314 -1 +5315 5315 0 +5316 5316 -1 +5317 5317 -1 +5318 5318 -1 +5319 5319 -1 +5320 5320 -1 +5321 5321 -1 +5322 5322 -1 +5323 5323 -1 +5324 5324 -1 +5325 5325 0 +5326 5326 0 +5327 5327 -1 +5328 5328 -1 +5329 5329 -1 +5330 5330 -1 +5331 5331 0 +5332 5332 -1 +5333 5333 -1 +5334 5334 -1 +5335 5335 0 +5336 5336 -1 +5337 5337 -1 +5338 5338 -1 +5339 5339 -1 +5340 5340 -1 +5341 5341 0 +5342 5342 -1 +5343 5343 -1 +5344 5344 -1 +5345 5345 -1 +5346 5346 0 +5347 5347 -1 +5348 5348 -1 +5349 5349 -1 +5350 5350 0 +5352 5352 -1 +5353 5353 -1 +5354 5354 -1 +5355 5355 -1 +5356 5356 -1 +5357 5357 -1 +5358 5358 -1 +5359 5359 -1 +5360 5360 -1 +5361 5361 -1 +5362 5362 -1 +5363 5363 -1 +5364 5364 0 +5365 5365 -1 +5366 5366 -1 +5367 5367 -1 +5368 5368 -1 +5369 5369 -1 +5370 5370 -1 +5371 5371 -1 +5372 5372 -1 +5373 5373 -1 +5374 5374 -1 +5375 5375 -1 +5376 5376 -1 +5377 5377 -1 +5378 5378 -1 +5379 5379 -1 +5380 5380 -1 +5381 5381 -1 +5382 5382 -1 +5383 5383 -1 +5384 5384 -1 +5385 5385 -1 +5386 5386 -1 +5387 5387 -1 +5388 5388 -1 +5389 5389 -1 +5390 5390 -1 +5391 5391 -1 +5392 5392 -1 +5393 5393 -1 +5394 5394 -1 +5395 5395 -1 +5396 5396 -1 +5397 5397 -1 +5398 5398 0 +5399 5399 -1 +5400 5400 -1 +1 5 0 +1 6 0 +1 7 1 +1 13 1 +1 14 0 +1 15 1 +1 16 0 +2 1 0 +2 5 1 +2 6 1 +2 7 0 +2 13 1 +2 14 1 +2 15 1 +2 16 1 +3 5 0 +3 6 -1 +3 7 0 +4 3 1 +4 5 -1 +4 6 0 +4 7 1 +5 6 0 +5 29 1 +6 30 1 +7 31 1 +9 5 1 +9 6 0 +9 13 0 +9 14 1 +9 15 0 +9 16 -1 +9 21 0 +9 22 1 +9 23 1 +9 24 1 +9 367 1 +9 368 0 +10 5 1 +10 6 1 +10 9 0 +10 13 1 +10 14 1 +10 15 1 +10 16 -1 +10 21 1 +10 22 1 +10 23 1 +10 24 1 +10 367 0 +10 368 1 +11 5 1 +11 6 1 +11 13 1 +11 14 1 +11 15 1 +11 16 1 +11 367 1 +11 368 1 +12 5 1 +12 6 1 +12 11 1 +12 13 0 +12 14 1 +12 15 1 +12 16 0 +12 367 1 +12 368 0 +13 14 1 +13 37 0 +14 38 1 +15 16 1 +15 39 -1 +16 40 0 +17 13 1 +17 14 0 +17 21 1 +17 22 0 +17 23 1 +17 24 1 +17 375 0 +17 376 1 +17 389 1 +17 390 1 +17 391 1 +17 392 0 +18 13 0 +18 14 1 +18 17 1 +18 21 1 +18 22 1 +18 23 0 +18 24 0 +18 375 1 +18 376 1 +18 389 1 +18 390 1 +18 391 1 +18 392 1 +19 13 1 +19 14 1 +19 21 1 +19 22 -1 +19 23 1 +19 24 0 +19 366 0 +19 367 0 +19 368 1 +19 375 0 +19 376 1 +20 13 0 +20 14 0 +20 19 1 +20 21 0 +20 22 1 +20 23 1 +20 24 0 +20 366 1 +20 367 0 +20 368 1 +20 375 0 +20 376 0 +21 22 1 +21 45 1 +22 46 1 +23 24 1 +23 47 0 +24 48 1 +25 23 0 +25 24 1 +25 29 1 +25 30 1 +25 31 1 +25 32 1 +25 37 -1 +25 38 0 +25 39 -1 +25 40 1 +26 23 1 +26 24 1 +26 25 0 +26 29 1 +26 30 0 +26 31 1 +26 32 1 +26 37 1 +26 38 1 +26 39 1 +26 40 1 +27 13 1 +27 14 0 +27 15 1 +27 16 1 +27 23 -1 +27 24 0 +27 29 0 +27 30 1 +27 31 0 +27 32 1 +28 13 1 +28 14 0 +28 15 1 +28 16 1 +28 23 1 +28 24 0 +28 27 -1 +28 29 1 +28 30 1 +28 31 1 +28 32 0 +29 30 1 +29 53 0 +30 54 0 +31 32 1 +31 55 1 +32 56 1 +33 29 1 +33 30 0 +33 37 1 +33 38 0 +33 39 -1 +33 40 1 +33 45 1 +33 46 1 +33 47 0 +33 48 1 +33 391 0 +33 392 0 +34 29 0 +34 30 1 +34 33 1 +34 37 1 +34 38 1 +34 39 0 +34 40 1 +34 45 -1 +34 46 1 +34 47 1 +34 48 -1 +34 391 1 +34 392 1 +35 21 0 +35 22 1 +35 23 0 +35 24 1 +35 29 1 +35 30 1 +35 37 1 +35 38 -1 +35 39 1 +35 40 1 +35 391 0 +35 392 1 +36 21 0 +36 22 -1 +36 23 1 +36 24 1 +36 29 -1 +36 30 1 +36 35 1 +36 37 0 +36 38 1 +36 39 1 +36 40 1 +36 391 -1 +36 392 1 +37 38 1 +37 61 0 +38 62 0 +39 40 1 +39 63 1 +40 64 1 +41 37 0 +41 38 0 +41 45 0 +41 46 1 +41 47 1 +41 48 1 +41 399 -1 +41 400 1 +41 413 1 +41 414 -1 +41 415 1 +41 416 1 +42 37 0 +42 38 1 +42 41 0 +42 45 0 +42 46 1 +42 47 1 +42 48 0 +42 399 0 +42 400 1 +42 413 1 +42 414 1 +42 415 1 +42 416 0 +43 37 1 +43 38 1 +43 45 1 +43 46 0 +43 47 1 +43 48 1 +43 389 1 +43 390 0 +43 391 0 +43 392 1 +43 399 1 +43 400 0 +44 37 1 +44 38 0 +44 43 1 +44 45 1 +44 46 1 +44 47 1 +44 48 1 +44 389 0 +44 390 1 +44 391 1 +44 392 0 +44 399 1 +44 400 0 +45 46 0 +45 69 1 +46 70 1 +47 48 1 +47 71 1 +48 72 1 +49 47 0 +49 48 1 +49 53 1 +49 54 1 +49 55 1 +49 56 1 +49 61 0 +49 62 0 +49 63 1 +49 64 0 +50 47 0 +50 48 1 +50 49 1 +50 53 1 +50 54 -1 +50 55 1 +50 56 1 +50 61 1 +50 62 1 +50 63 1 +50 64 1 +51 37 1 +51 38 -1 +51 39 1 +51 40 1 +51 47 -1 +51 48 1 +51 53 1 +51 54 0 +51 55 1 +51 56 1 +52 37 1 +52 38 1 +52 39 -1 +52 40 0 +52 47 1 +52 48 0 +52 51 1 +52 53 1 +52 54 0 +52 55 0 +52 56 1 +53 54 -1 +53 77 0 +54 78 0 +55 56 0 +55 79 0 +56 80 1 +57 53 1 +57 54 1 +57 61 0 +57 62 1 +57 63 0 +57 64 1 +57 69 1 +57 70 1 +57 71 0 +57 72 0 +57 415 0 +57 416 -1 +58 53 1 +58 54 0 +58 57 1 +58 61 0 +58 62 1 +58 63 0 +58 64 1 +58 69 0 +58 70 -1 +58 71 -1 +58 72 -1 +58 415 -1 +58 416 1 +59 45 1 +59 46 1 +59 47 1 +59 48 1 +59 53 1 +59 54 1 +59 61 1 +59 62 1 +59 63 0 +59 64 1 +59 415 0 +59 416 1 +60 45 1 +60 46 0 +60 47 1 +60 48 1 +60 53 1 +60 54 0 +60 59 1 +60 61 0 +60 62 0 +60 63 1 +60 64 1 +60 415 1 +60 416 1 +61 62 1 +61 85 1 +62 86 0 +63 64 1 +63 87 0 +64 88 1 +65 61 1 +65 62 0 +65 69 1 +65 70 1 +65 71 -1 +65 72 1 +65 423 1 +65 424 1 +65 437 1 +65 438 1 +65 439 1 +65 440 1 +66 61 0 +66 62 1 +66 65 1 +66 69 1 +66 70 1 +66 71 1 +66 72 1 +66 423 0 +66 424 1 +66 437 0 +66 438 0 +66 439 0 +66 440 1 +67 61 0 +67 62 1 +67 69 0 +67 70 0 +67 71 1 +67 72 1 +67 413 0 +67 414 1 +67 415 1 +67 416 1 +67 423 1 +67 424 1 +68 61 1 +68 62 1 +68 67 1 +68 69 1 +68 70 1 +68 71 1 +68 72 0 +68 413 1 +68 414 0 +68 415 1 +68 416 1 +68 423 1 +68 424 0 +69 70 0 +69 93 1 +70 94 1 +71 72 1 +71 95 0 +72 96 1 +73 71 0 +73 72 1 +73 77 1 +73 78 0 +73 79 -1 +73 80 0 +73 85 1 +73 86 0 +73 87 0 +73 88 0 +74 71 -1 +74 72 0 +74 73 1 +74 77 1 +74 78 -1 +74 79 1 +74 80 0 +74 85 1 +74 86 1 +74 87 0 +74 88 1 +75 61 1 +75 62 0 +75 63 1 +75 64 0 +75 71 0 +75 72 -1 +75 77 1 +75 78 -1 +75 79 -1 +75 80 1 +76 61 1 +76 62 1 +76 63 -1 +76 64 0 +76 71 1 +76 72 0 +76 75 1 +76 77 -1 +76 78 1 +76 79 0 +76 80 0 +77 78 1 +77 101 1 +78 102 0 +79 80 1 +79 103 1 +80 104 0 +81 77 1 +81 78 0 +81 85 1 +81 86 0 +81 87 1 +81 88 1 +81 93 0 +81 94 1 +81 95 1 +81 96 1 +81 439 1 +81 440 1 +82 77 1 +82 78 0 +82 81 1 +82 85 0 +82 86 1 +82 87 -1 +82 88 1 +82 93 1 +82 94 1 +82 95 1 +82 96 0 +82 439 0 +82 440 0 +83 69 1 +83 70 0 +83 71 1 +83 72 1 +83 77 1 +83 78 0 +83 85 0 +83 86 1 +83 87 0 +83 88 1 +83 439 -1 +83 440 1 +84 69 0 +84 70 0 +84 71 0 +84 72 1 +84 77 1 +84 78 0 +84 83 1 +84 85 1 +84 86 0 +84 87 1 +84 88 1 +84 439 1 +84 440 0 +85 86 -1 +85 109 1 +86 110 -1 +87 88 1 +87 111 1 +88 112 1 +89 85 0 +89 86 0 +89 93 1 +89 94 1 +89 95 0 +89 96 0 +89 447 0 +89 448 0 +89 461 0 +89 462 0 +89 463 1 +89 464 1 +90 85 0 +90 86 1 +90 89 1 +90 93 1 +90 94 0 +90 95 0 +90 96 1 +90 447 0 +90 448 1 +90 461 1 +90 462 1 +90 463 0 +90 464 -1 +91 85 1 +91 86 0 +91 93 1 +91 94 1 +91 95 1 +91 96 1 +91 437 1 +91 438 0 +91 439 1 +91 440 1 +91 447 0 +91 448 0 +92 85 0 +92 86 1 +92 91 0 +92 93 1 +92 94 1 +92 95 1 +92 96 1 +92 437 -1 +92 438 0 +92 439 1 +92 440 0 +92 447 0 +92 448 1 +93 94 1 +93 117 1 +94 118 1 +95 96 1 +95 119 0 +96 120 0 +97 95 0 +97 96 1 +97 101 0 +97 102 1 +97 103 1 +97 104 1 +97 109 0 +97 110 0 +97 111 0 +97 112 0 +98 95 0 +98 96 0 +98 97 0 +98 101 0 +98 102 1 +98 103 0 +98 104 1 +98 109 0 +98 110 1 +98 111 1 +98 112 0 +99 85 1 +99 86 1 +99 87 1 +99 88 0 +99 95 1 +99 96 1 +99 101 0 +99 102 1 +99 103 1 +99 104 1 +100 85 0 +100 86 1 +100 87 0 +100 88 0 +100 95 0 +100 96 0 +100 99 0 +100 101 1 +100 102 0 +100 103 0 +100 104 0 +101 102 1 +101 125 -1 +102 126 1 +103 104 1 +103 127 0 +104 128 1 +105 101 1 +105 102 1 +105 109 1 +105 110 0 +105 111 1 +105 112 1 +105 117 1 +105 118 0 +105 119 0 +105 120 -1 +105 463 0 +105 464 1 +106 101 1 +106 102 0 +106 105 1 +106 109 1 +106 110 1 +106 111 0 +106 112 1 +106 117 1 +106 118 1 +106 119 0 +106 120 0 +106 463 -1 +106 464 1 +107 93 1 +107 94 1 +107 95 0 +107 96 1 +107 101 1 +107 102 0 +107 109 1 +107 110 0 +107 111 1 +107 112 0 +107 463 1 +107 464 1 +108 93 1 +108 94 1 +108 95 1 +108 96 -1 +108 101 1 +108 102 1 +108 107 0 +108 109 1 +108 110 1 +108 111 0 +108 112 1 +108 463 0 +108 464 1 +109 110 -1 +109 133 1 +110 134 1 +111 112 1 +111 135 -1 +112 136 0 +113 109 0 +113 110 -1 +113 117 0 +113 118 1 +113 119 1 +113 120 1 +113 471 0 +113 472 0 +113 485 1 +113 486 -1 +113 487 1 +113 488 0 +114 109 1 +114 110 1 +114 113 1 +114 117 -1 +114 118 1 +114 119 1 +114 120 1 +114 471 0 +114 472 1 +114 485 1 +114 486 1 +114 487 -1 +114 488 0 +115 109 0 +115 110 0 +115 117 0 +115 118 0 +115 119 0 +115 120 1 +115 461 0 +115 462 1 +115 463 0 +115 464 1 +115 471 1 +115 472 1 +116 109 1 +116 110 0 +116 115 0 +116 117 1 +116 118 0 +116 119 0 +116 120 1 +116 461 1 +116 462 0 +116 463 1 +116 464 0 +116 471 0 +116 472 0 +117 118 1 +117 141 1 +118 142 1 +119 120 1 +119 143 1 +120 144 1 +121 119 -1 +121 120 1 +121 125 1 +121 126 1 +121 127 0 +121 128 1 +121 133 1 +121 134 -1 +121 135 1 +121 136 0 +122 119 1 +122 120 1 +122 121 -1 +122 125 1 +122 126 1 +122 127 1 +122 128 -1 +122 133 1 +122 134 0 +122 135 0 +122 136 -1 +123 109 1 +123 110 0 +123 111 1 +123 112 1 +123 119 0 +123 120 1 +123 125 1 +123 126 1 +123 127 1 +123 128 1 +124 109 -1 +124 110 1 +124 111 1 +124 112 0 +124 119 0 +124 120 1 +124 123 1 +124 125 0 +124 126 1 +124 127 -1 +124 128 1 +125 126 0 +125 149 0 +126 150 0 +127 128 1 +127 151 1 +128 152 1 +129 125 1 +129 126 1 +129 133 0 +129 134 -1 +129 135 1 +129 136 0 +129 141 1 +129 142 1 +129 143 1 +129 144 1 +129 487 1 +129 488 -1 +130 125 -1 +130 126 1 +130 129 1 +130 133 -1 +130 134 1 +130 135 1 +130 136 1 +130 141 1 +130 142 1 +130 143 1 +130 144 0 +130 487 0 +130 488 1 +131 117 0 +131 118 1 +131 119 0 +131 120 0 +131 125 0 +131 126 -1 +131 133 0 +131 134 0 +131 135 1 +131 136 1 +131 487 0 +131 488 1 +132 117 0 +132 118 0 +132 119 1 +132 120 1 +132 125 1 +132 126 -1 +132 131 1 +132 133 0 +132 134 -1 +132 135 1 +132 136 1 +132 487 0 +132 488 0 +133 134 0 +133 157 1 +134 158 0 +135 136 0 +135 159 0 +136 160 0 +137 133 1 +137 134 1 +137 141 1 +137 142 -1 +137 143 1 +137 144 0 +137 495 0 +137 496 1 +137 509 1 +137 510 -1 +137 511 1 +137 512 0 +138 133 0 +138 134 0 +138 137 -1 +138 141 1 +138 142 1 +138 143 1 +138 144 1 +138 495 1 +138 496 1 +138 509 1 +138 510 1 +138 511 0 +138 512 1 +139 133 1 +139 134 0 +139 141 0 +139 142 0 +139 143 1 +139 144 1 +139 485 1 +139 486 1 +139 487 1 +139 488 0 +139 495 -1 +139 496 1 +140 133 1 +140 134 1 +140 139 1 +140 141 1 +140 142 1 +140 143 -1 +140 144 1 +140 485 0 +140 486 1 +140 487 1 +140 488 0 +140 495 0 +140 496 0 +141 142 1 +141 165 1 +142 166 1 +143 144 0 +143 167 1 +144 168 -1 +145 143 1 +145 144 1 +145 149 0 +145 150 0 +145 151 0 +145 152 1 +145 157 1 +145 158 1 +145 159 1 +145 160 1 +146 143 1 +146 144 0 +146 145 0 +146 149 0 +146 150 1 +146 151 0 +146 152 0 +146 157 0 +146 158 1 +146 159 0 +146 160 1 +147 133 1 +147 134 1 +147 135 1 +147 136 1 +147 143 1 +147 144 1 +147 149 0 +147 150 0 +147 151 1 +147 152 1 +148 133 1 +148 134 1 +148 135 0 +148 136 1 +148 143 1 +148 144 1 +148 147 1 +148 149 1 +148 150 0 +148 151 0 +148 152 0 +149 150 0 +149 173 1 +150 174 1 +151 152 -1 +151 175 1 +152 176 1 +153 149 0 +153 150 0 +153 157 1 +153 158 1 +153 159 1 +153 160 -1 +153 165 0 +153 166 0 +153 167 1 +153 168 1 +153 511 1 +153 512 1 +154 149 0 +154 150 -1 +154 153 0 +154 157 0 +154 158 1 +154 159 1 +154 160 0 +154 165 1 +154 166 0 +154 167 1 +154 168 0 +154 511 1 +154 512 1 +155 141 1 +155 142 1 +155 143 0 +155 144 1 +155 149 -1 +155 150 1 +155 157 0 +155 158 0 +155 159 0 +155 160 1 +155 511 0 +155 512 0 +156 141 -1 +156 142 1 +156 143 1 +156 144 1 +156 149 1 +156 150 0 +156 155 1 +156 157 1 +156 158 0 +156 159 1 +156 160 1 +156 511 0 +156 512 0 +157 158 0 +157 181 1 +158 182 -1 +159 160 1 +159 183 0 +160 184 1 +161 157 1 +161 158 1 +161 165 0 +161 166 0 +161 167 0 +161 168 1 +161 519 -1 +161 520 1 +161 533 0 +161 534 1 +161 535 1 +161 536 1 +162 157 -1 +162 158 1 +162 161 0 +162 165 0 +162 166 -1 +162 167 -1 +162 168 0 +162 519 1 +162 520 1 +162 533 0 +162 534 1 +162 535 1 +162 536 1 +163 157 1 +163 158 1 +163 165 0 +163 166 1 +163 167 1 +163 168 1 +163 509 1 +163 510 1 +163 511 1 +163 512 0 +163 519 0 +163 520 1 +164 157 0 +164 158 1 +164 163 1 +164 165 0 +164 166 0 +164 167 0 +164 168 1 +164 509 1 +164 510 -1 +164 511 0 +164 512 1 +164 519 1 +164 520 0 +165 166 1 +165 189 1 +166 190 1 +167 168 1 +167 191 0 +168 192 0 +169 167 0 +169 168 0 +169 173 1 +169 174 0 +169 175 1 +169 176 1 +169 181 1 +169 182 -1 +169 183 1 +169 184 1 +170 167 1 +170 168 1 +170 169 0 +170 173 1 +170 174 1 +170 175 1 +170 176 0 +170 181 0 +170 182 0 +170 183 1 +170 184 1 +171 157 -1 +171 158 0 +171 159 0 +171 160 1 +171 167 1 +171 168 0 +171 173 1 +171 174 0 +171 175 1 +171 176 1 +172 157 0 +172 158 0 +172 159 1 +172 160 0 +172 167 -1 +172 168 1 +172 171 0 +172 173 1 +172 174 0 +172 175 1 +172 176 0 +173 174 1 +173 197 0 +174 198 -1 +175 176 1 +175 199 1 +176 200 1 +177 173 0 +177 174 1 +177 181 1 +177 182 0 +177 183 1 +177 184 1 +177 189 1 +177 190 -1 +177 191 1 +177 192 -1 +177 535 1 +177 536 1 +178 173 0 +178 174 1 +178 177 0 +178 181 1 +178 182 0 +178 183 0 +178 184 0 +178 189 1 +178 190 1 +178 191 1 +178 192 1 +178 535 0 +178 536 0 +179 165 1 +179 166 0 +179 167 1 +179 168 0 +179 173 -1 +179 174 1 +179 181 -1 +179 182 1 +179 183 1 +179 184 1 +179 535 1 +179 536 1 +180 165 1 +180 166 1 +180 167 -1 +180 168 1 +180 173 1 +180 174 0 +180 179 0 +180 181 0 +180 182 0 +180 183 0 +180 184 1 +180 535 -1 +180 536 0 +181 182 0 +181 205 1 +182 206 1 +183 184 1 +183 207 1 +184 208 0 +185 181 0 +185 182 0 +185 189 0 +185 190 1 +185 191 1 +185 192 1 +185 543 0 +185 544 1 +185 557 0 +185 558 0 +185 559 1 +185 560 0 +186 181 1 +186 182 1 +186 185 1 +186 189 1 +186 190 0 +186 191 1 +186 192 0 +186 543 1 +186 544 -1 +186 557 1 +186 558 0 +186 559 1 +186 560 1 +187 181 0 +187 182 1 +187 189 0 +187 190 0 +187 191 0 +187 192 0 +187 533 -1 +187 534 0 +187 535 1 +187 536 0 +187 543 0 +187 544 1 +188 181 1 +188 182 0 +188 187 0 +188 189 0 +188 190 1 +188 191 1 +188 192 -1 +188 533 1 +188 534 1 +188 535 0 +188 536 0 +188 543 1 +188 544 1 +189 190 0 +189 213 1 +190 214 -1 +191 192 -1 +191 215 1 +192 216 1 +193 191 1 +193 192 0 +193 197 1 +193 198 0 +193 199 1 +193 200 1 +193 205 1 +193 206 1 +193 207 1 +193 208 1 +194 191 0 +194 192 1 +194 193 1 +194 197 0 +194 198 1 +194 199 1 +194 200 1 +194 205 0 +194 206 1 +194 207 1 +194 208 0 +195 181 0 +195 182 1 +195 183 1 +195 184 0 +195 191 1 +195 192 1 +195 197 1 +195 198 1 +195 199 0 +195 200 1 +196 181 1 +196 182 1 +196 183 1 +196 184 0 +196 191 0 +196 192 0 +196 195 0 +196 197 1 +196 198 1 +196 199 -1 +196 200 0 +197 198 1 +197 221 1 +198 222 0 +199 200 0 +199 223 1 +200 224 1 +201 197 1 +201 198 1 +201 205 1 +201 206 0 +201 207 -1 +201 208 1 +201 213 0 +201 214 1 +201 215 1 +201 216 0 +201 559 1 +201 560 1 +202 197 0 +202 198 -1 +202 201 -1 +202 205 1 +202 206 1 +202 207 1 +202 208 0 +202 213 1 +202 214 1 +202 215 1 +202 216 0 +202 559 1 +202 560 0 +203 189 1 +203 190 1 +203 191 0 +203 192 1 +203 197 1 +203 198 0 +203 205 1 +203 206 1 +203 207 0 +203 208 1 +203 559 1 +203 560 0 +204 189 0 +204 190 1 +204 191 0 +204 192 -1 +204 197 0 +204 198 1 +204 203 0 +204 205 1 +204 206 1 +204 207 1 +204 208 1 +204 559 1 +204 560 0 +205 206 1 +205 229 0 +206 230 0 +207 208 1 +207 231 -1 +208 232 1 +209 205 1 +209 206 0 +209 213 -1 +209 214 0 +209 215 1 +209 216 1 +209 567 0 +209 568 1 +209 581 0 +209 582 0 +209 583 1 +209 584 -1 +210 205 1 +210 206 -1 +210 209 1 +210 213 0 +210 214 0 +210 215 1 +210 216 1 +210 567 1 +210 568 0 +210 581 1 +210 582 1 +210 583 0 +210 584 1 +211 205 0 +211 206 1 +211 213 1 +211 214 1 +211 215 1 +211 216 -1 +211 557 1 +211 558 0 +211 559 1 +211 560 1 +211 567 -1 +211 568 1 +212 205 1 +212 206 0 +212 211 1 +212 213 1 +212 214 -1 +212 215 1 +212 216 1 +212 557 1 +212 558 0 +212 559 1 +212 560 1 +212 567 0 +212 568 0 +213 214 1 +213 237 1 +214 238 0 +215 216 0 +215 239 -1 +216 240 1 +217 215 1 +217 216 1 +217 221 1 +217 222 0 +217 223 0 +217 224 1 +217 229 1 +217 230 1 +217 231 1 +217 232 1 +218 215 1 +218 216 1 +218 217 -1 +218 221 1 +218 222 1 +218 223 1 +218 224 -1 +218 229 1 +218 230 1 +218 231 0 +218 232 0 +219 205 1 +219 206 0 +219 207 0 +219 208 0 +219 215 0 +219 216 -1 +219 221 1 +219 222 0 +219 223 1 +219 224 0 +220 205 -1 +220 206 1 +220 207 1 +220 208 0 +220 215 0 +220 216 0 +220 219 1 +220 221 0 +220 222 0 +220 223 1 +220 224 1 +221 222 1 +221 245 1 +222 246 1 +223 224 -1 +223 247 0 +224 248 0 +225 221 0 +225 222 1 +225 229 0 +225 230 1 +225 231 0 +225 232 1 +225 237 1 +225 238 1 +225 239 1 +225 240 1 +225 583 1 +225 584 0 +226 221 1 +226 222 1 +226 225 1 +226 229 0 +226 230 -1 +226 231 0 +226 232 0 +226 237 1 +226 238 0 +226 239 1 +226 240 0 +226 583 0 +226 584 1 +227 213 1 +227 214 1 +227 215 1 +227 216 1 +227 221 1 +227 222 1 +227 229 0 +227 230 0 +227 231 1 +227 232 0 +227 583 1 +227 584 -1 +228 213 1 +228 214 1 +228 215 1 +228 216 1 +228 221 1 +228 222 1 +228 227 0 +228 229 1 +228 230 0 +228 231 0 +228 232 0 +228 583 1 +228 584 -1 +229 230 1 +229 253 1 +230 254 1 +231 232 1 +231 255 0 +232 256 1 +233 229 1 +233 230 -1 +233 237 1 +233 238 -1 +233 239 1 +233 240 0 +233 591 0 +233 592 0 +233 605 0 +233 606 1 +233 607 1 +233 608 1 +234 229 -1 +234 230 1 +234 233 1 +234 237 1 +234 238 1 +234 239 0 +234 240 1 +234 591 1 +234 592 0 +234 605 1 +234 606 0 +234 607 1 +234 608 0 +235 229 0 +235 230 1 +235 237 1 +235 238 1 +235 239 0 +235 240 0 +235 581 1 +235 582 1 +235 583 1 +235 584 0 +235 591 1 +235 592 1 +236 229 1 +236 230 1 +236 235 1 +236 237 1 +236 238 0 +236 239 1 +236 240 1 +236 581 1 +236 582 0 +236 583 0 +236 584 1 +236 591 0 +236 592 0 +237 238 1 +237 261 0 +238 262 1 +239 240 0 +239 263 0 +240 264 0 +241 239 0 +241 240 1 +241 245 0 +241 246 0 +241 247 0 +241 248 1 +241 253 1 +241 254 0 +241 255 1 +241 256 0 +242 239 1 +242 240 1 +242 241 0 +242 245 1 +242 246 1 +242 247 0 +242 248 1 +242 253 -1 +242 254 0 +242 255 1 +242 256 1 +243 229 -1 +243 230 -1 +243 231 1 +243 232 1 +243 239 1 +243 240 1 +243 245 0 +243 246 1 +243 247 1 +243 248 0 +244 229 0 +244 230 1 +244 231 0 +244 232 1 +244 239 0 +244 240 1 +244 243 1 +244 245 1 +244 246 1 +244 247 0 +244 248 1 +245 246 1 +245 269 1 +246 270 -1 +247 248 0 +247 271 1 +248 272 1 +249 245 -1 +249 246 -1 +249 253 1 +249 254 0 +249 255 0 +249 256 1 +249 261 0 +249 262 0 +249 263 1 +249 264 1 +249 607 1 +249 608 0 +250 245 1 +250 246 1 +250 249 1 +250 253 0 +250 254 1 +250 255 1 +250 256 0 +250 261 1 +250 262 0 +250 263 1 +250 264 1 +250 607 0 +250 608 0 +251 237 -1 +251 238 1 +251 239 0 +251 240 0 +251 245 1 +251 246 0 +251 253 1 +251 254 1 +251 255 1 +251 256 1 +251 607 0 +251 608 0 +252 237 0 +252 238 1 +252 239 1 +252 240 1 +252 245 1 +252 246 1 +252 251 1 +252 253 1 +252 254 0 +252 255 1 +252 256 1 +252 607 1 +252 608 1 +253 254 0 +253 277 1 +254 278 1 +255 256 0 +255 279 0 +256 280 0 +257 253 1 +257 254 1 +257 261 0 +257 262 0 +257 263 0 +257 264 1 +257 615 0 +257 616 0 +257 629 0 +257 630 1 +257 631 0 +257 632 1 +258 253 0 +258 254 0 +258 257 1 +258 261 0 +258 262 1 +258 263 0 +258 264 1 +258 615 -1 +258 616 1 +258 629 1 +258 630 1 +258 631 1 +258 632 1 +259 253 1 +259 254 0 +259 261 1 +259 262 0 +259 263 1 +259 264 0 +259 605 1 +259 606 0 +259 607 1 +259 608 -1 +259 615 0 +259 616 1 +260 253 1 +260 254 0 +260 259 1 +260 261 1 +260 262 0 +260 263 0 +260 264 0 +260 605 0 +260 606 -1 +260 607 1 +260 608 1 +260 615 -1 +260 616 -1 +261 262 1 +261 285 1 +262 286 0 +263 264 1 +263 287 1 +264 288 0 +265 263 -1 +265 264 0 +265 269 1 +265 270 1 +265 271 1 +265 272 1 +265 277 0 +265 278 1 +265 279 -1 +265 280 0 +266 263 1 +266 264 1 +266 265 1 +266 269 1 +266 270 -1 +266 271 -1 +266 272 0 +266 277 1 +266 278 0 +266 279 1 +266 280 1 +267 253 1 +267 254 1 +267 255 0 +267 256 1 +267 263 0 +267 264 0 +267 269 1 +267 270 1 +267 271 1 +267 272 1 +268 253 1 +268 254 1 +268 255 0 +268 256 0 +268 263 -1 +268 264 1 +268 267 0 +268 269 0 +268 270 1 +268 271 1 +268 272 0 +269 270 1 +269 293 1 +270 294 1 +271 272 1 +271 295 0 +272 296 -1 +273 269 0 +273 270 0 +273 277 0 +273 278 0 +273 279 0 +273 280 -1 +273 285 0 +273 286 1 +273 287 0 +273 288 0 +273 631 0 +273 632 1 +274 269 1 +274 270 1 +274 273 1 +274 277 0 +274 278 0 +274 279 1 +274 280 0 +274 285 1 +274 286 0 +274 287 1 +274 288 1 +274 631 1 +274 632 0 +275 261 0 +275 262 1 +275 263 1 +275 264 1 +275 269 1 +275 270 1 +275 277 1 +275 278 -1 +275 279 1 +275 280 1 +275 631 0 +275 632 1 +276 261 -1 +276 262 0 +276 263 0 +276 264 1 +276 269 1 +276 270 0 +276 275 1 +276 277 1 +276 278 1 +276 279 1 +276 280 1 +276 631 0 +276 632 1 +277 278 0 +277 301 1 +278 302 1 +279 280 0 +279 303 1 +280 304 1 +281 277 1 +281 278 0 +281 285 1 +281 286 1 +281 287 0 +281 288 0 +281 639 1 +281 640 1 +281 653 0 +281 654 0 +281 655 0 +281 656 1 +282 277 0 +282 278 0 +282 281 -1 +282 285 1 +282 286 1 +282 287 1 +282 288 -1 +282 639 1 +282 640 -1 +282 653 0 +282 654 1 +282 655 1 +282 656 0 +283 277 -1 +283 278 1 +283 285 1 +283 286 1 +283 287 1 +283 288 0 +283 629 1 +283 630 -1 +283 631 0 +283 632 0 +283 639 -1 +283 640 1 +284 277 1 +284 278 1 +284 283 1 +284 285 0 +284 286 0 +284 287 0 +284 288 0 +284 629 1 +284 630 0 +284 631 0 +284 632 1 +284 639 1 +284 640 -1 +285 286 1 +285 309 1 +286 310 -1 +287 288 0 +287 311 0 +288 312 1 +289 287 0 +289 288 0 +289 293 1 +289 294 0 +289 295 1 +289 296 1 +289 301 1 +289 302 0 +289 303 -1 +289 304 0 +290 287 0 +290 288 1 +290 289 -1 +290 293 0 +290 294 1 +290 295 1 +290 296 1 +290 301 1 +290 302 0 +290 303 0 +290 304 0 +291 277 1 +291 278 0 +291 279 1 +291 280 1 +291 287 0 +291 288 1 +291 293 1 +291 294 1 +291 295 1 +291 296 1 +292 277 1 +292 278 -1 +292 279 1 +292 280 1 +292 287 0 +292 288 1 +292 291 1 +292 293 0 +292 294 0 +292 295 0 +292 296 1 +293 294 0 +293 317 1 +294 318 0 +295 296 1 +295 319 0 +296 320 1 +297 293 1 +297 294 1 +297 301 0 +297 302 1 +297 303 0 +297 304 1 +297 309 0 +297 310 -1 +297 311 0 +297 312 1 +297 655 0 +297 656 0 +298 293 1 +298 294 0 +298 297 -1 +298 301 1 +298 302 -1 +298 303 1 +298 304 1 +298 309 -1 +298 310 0 +298 311 -1 +298 312 -1 +298 655 1 +298 656 1 +299 285 1 +299 286 1 +299 287 0 +299 288 1 +299 293 1 +299 294 1 +299 301 1 +299 302 0 +299 303 1 +299 304 0 +299 655 0 +299 656 1 +300 285 0 +300 286 1 +300 287 0 +300 288 1 +300 293 0 +300 294 1 +300 299 -1 +300 301 1 +300 302 1 +300 303 1 +300 304 0 +300 655 0 +300 656 0 +301 302 1 +301 325 1 +302 326 1 +303 304 0 +303 327 1 +304 328 1 +305 301 1 +305 302 0 +305 309 1 +305 310 0 +305 311 1 +305 312 1 +305 663 1 +305 664 0 +305 677 1 +305 678 0 +305 679 1 +305 680 1 +306 301 0 +306 302 0 +306 305 0 +306 309 0 +306 310 1 +306 311 1 +306 312 1 +306 663 -1 +306 664 -1 +306 677 1 +306 678 0 +306 679 0 +306 680 1 +307 301 1 +307 302 1 +307 309 1 +307 310 1 +307 311 1 +307 312 0 +307 653 -1 +307 654 -1 +307 655 1 +307 656 1 +307 663 0 +307 664 1 +308 301 -1 +308 302 0 +308 307 0 +308 309 0 +308 310 0 +308 311 0 +308 312 1 +308 653 1 +308 654 0 +308 655 1 +308 656 1 +308 663 -1 +308 664 0 +309 310 1 +309 333 1 +310 334 1 +311 312 1 +311 335 1 +312 336 1 +313 311 -1 +313 312 1 +313 317 -1 +313 318 1 +313 319 1 +313 320 0 +313 325 -1 +313 326 0 +313 327 1 +313 328 -1 +314 311 0 +314 312 1 +314 313 1 +314 317 0 +314 318 1 +314 319 1 +314 320 0 +314 325 1 +314 326 0 +314 327 0 +314 328 1 +315 301 0 +315 302 1 +315 303 1 +315 304 -1 +315 311 1 +315 312 1 +315 317 -1 +315 318 -1 +315 319 0 +315 320 1 +316 301 -1 +316 302 0 +316 303 1 +316 304 1 +316 311 1 +316 312 1 +316 315 1 +316 317 1 +316 318 0 +316 319 1 +316 320 0 +317 318 1 +317 341 1 +318 342 -1 +319 320 -1 +319 343 1 +320 344 0 +321 317 1 +321 318 0 +321 325 1 +321 326 1 +321 327 1 +321 328 1 +321 333 1 +321 334 1 +321 335 0 +321 336 1 +321 679 0 +321 680 1 +322 317 1 +322 318 -1 +322 321 1 +322 325 0 +322 326 1 +322 327 -1 +322 328 1 +322 333 0 +322 334 0 +322 335 1 +322 336 0 +322 679 1 +322 680 0 +323 309 0 +323 310 1 +323 311 1 +323 312 0 +323 317 1 +323 318 1 +323 325 0 +323 326 1 +323 327 1 +323 328 1 +323 679 1 +323 680 1 +324 309 1 +324 310 1 +324 311 0 +324 312 0 +324 317 1 +324 318 1 +324 323 1 +324 325 0 +324 326 1 +324 327 1 +324 328 1 +324 679 1 +324 680 0 +325 326 -1 +325 349 0 +326 350 -1 +327 328 0 +327 351 1 +328 352 0 +329 325 1 +329 326 1 +329 333 1 +329 334 -1 +329 335 0 +329 336 -1 +329 687 1 +329 688 -1 +329 701 0 +329 702 1 +329 703 0 +329 704 -1 +330 325 1 +330 326 -1 +330 329 0 +330 333 1 +330 334 0 +330 335 1 +330 336 1 +330 687 1 +330 688 1 +330 701 0 +330 702 1 +330 703 0 +330 704 1 +331 325 1 +331 326 1 +331 333 1 +331 334 1 +331 335 1 +331 336 1 +331 677 1 +331 678 0 +331 679 1 +331 680 1 +331 687 1 +331 688 -1 +332 325 1 +332 326 0 +332 331 0 +332 333 1 +332 334 -1 +332 335 0 +332 336 0 +332 677 1 +332 678 0 +332 679 1 +332 680 1 +332 687 1 +332 688 0 +333 334 1 +333 357 0 +334 358 0 +335 336 0 +335 359 1 +336 360 1 +337 335 1 +337 336 0 +337 341 0 +337 342 0 +337 343 1 +337 344 1 +337 349 0 +337 350 1 +337 351 1 +337 352 1 +338 335 1 +338 336 1 +338 337 1 +338 341 0 +338 342 0 +338 343 0 +338 344 0 +338 349 1 +338 350 1 +338 351 1 +338 352 1 +339 325 -1 +339 326 0 +339 327 0 +339 328 1 +339 335 0 +339 336 1 +339 341 0 +339 342 1 +339 343 0 +339 344 1 +340 325 0 +340 326 1 +340 327 1 +340 328 1 +340 335 1 +340 336 1 +340 339 -1 +340 341 1 +340 342 1 +340 343 1 +340 344 0 +341 342 1 +343 344 1 +345 341 1 +345 342 -1 +345 349 0 +345 350 1 +345 351 1 +345 352 -1 +345 357 0 +345 358 0 +345 359 1 +345 360 1 +345 703 1 +345 704 1 +346 341 1 +346 342 1 +346 345 0 +346 349 -1 +346 350 1 +346 351 0 +346 352 0 +346 357 1 +346 358 0 +346 359 0 +346 360 0 +346 703 1 +346 704 1 +347 333 1 +347 334 1 +347 335 1 +347 336 0 +347 341 0 +347 342 1 +347 349 1 +347 350 0 +347 351 0 +347 352 1 +347 703 1 +347 704 1 +348 333 0 +348 334 0 +348 335 1 +348 336 1 +348 341 1 +348 342 1 +348 347 1 +348 349 1 +348 350 1 +348 351 1 +348 352 0 +348 703 1 +348 704 1 +349 350 -1 +351 352 1 +353 349 0 +353 350 1 +353 357 -1 +353 358 0 +353 359 0 +353 360 0 +353 711 0 +353 712 0 +354 349 1 +354 350 -1 +354 353 0 +354 357 1 +354 358 0 +354 359 1 +354 360 0 +354 711 1 +354 712 1 +355 349 1 +355 350 -1 +355 357 1 +355 358 -1 +355 359 1 +355 360 1 +355 701 1 +355 702 -1 +355 703 1 +355 704 1 +355 711 0 +355 712 -1 +356 349 0 +356 350 1 +356 355 1 +356 357 0 +356 358 1 +356 359 -1 +356 360 -1 +356 701 1 +356 702 0 +356 703 0 +356 704 0 +356 711 0 +356 712 1 +357 358 1 +359 360 1 +361 1 1 +361 366 1 +361 367 0 +361 368 1 +361 373 1 +361 374 1 +361 375 -1 +361 376 -1 +362 2 1 +362 361 1 +362 366 0 +362 367 1 +362 368 1 +362 373 0 +362 374 1 +362 375 0 +362 376 1 +363 3 1 +363 366 0 +363 367 1 +363 368 0 +364 4 0 +364 363 0 +364 366 0 +364 367 1 +364 368 1 +366 390 0 +367 368 0 +367 391 1 +368 392 0 +369 9 0 +369 366 1 +369 373 1 +369 374 1 +369 375 0 +369 376 0 +369 381 1 +369 382 1 +369 383 -1 +369 384 0 +369 727 1 +369 728 1 +370 10 -1 +370 366 0 +370 369 1 +370 373 0 +370 374 1 +370 375 0 +370 376 1 +370 381 1 +370 382 1 +370 383 1 +370 384 0 +370 727 0 +370 728 1 +371 11 0 +371 366 1 +371 373 1 +371 374 1 +371 375 -1 +371 376 0 +371 727 1 +371 728 0 +372 12 1 +372 366 0 +372 371 1 +372 373 1 +372 374 1 +372 375 1 +372 376 1 +372 727 1 +372 728 1 +373 374 1 +373 397 1 +374 398 1 +375 376 0 +375 399 0 +376 400 0 +377 17 1 +377 373 1 +377 374 1 +377 381 1 +377 382 1 +377 383 1 +377 384 -1 +377 735 0 +377 736 1 +377 749 1 +377 750 0 +377 751 1 +377 752 1 +378 18 -1 +378 373 1 +378 374 0 +378 377 -1 +378 381 1 +378 382 1 +378 383 -1 +378 384 1 +378 735 1 +378 736 0 +378 749 0 +378 750 1 +378 751 1 +378 752 1 +379 19 0 +379 373 1 +379 374 0 +379 381 1 +379 382 1 +379 383 1 +379 384 0 +379 725 1 +379 726 0 +379 727 1 +379 728 0 +379 735 -1 +379 736 0 +380 20 1 +380 373 0 +380 374 0 +380 379 1 +380 381 0 +380 382 1 +380 383 0 +380 384 0 +380 725 0 +380 726 1 +380 727 1 +380 728 0 +380 735 1 +380 736 0 +381 382 0 +381 405 0 +382 406 1 +383 384 1 +383 407 1 +384 408 0 +385 21 1 +385 22 0 +385 25 0 +385 383 -1 +385 384 1 +385 389 1 +385 390 1 +385 391 0 +385 392 0 +385 397 -1 +385 398 1 +385 399 0 +385 400 1 +386 21 0 +386 22 1 +386 26 1 +386 383 -1 +386 384 0 +386 385 1 +386 389 1 +386 390 1 +386 391 1 +386 392 1 +386 397 1 +386 398 1 +386 399 1 +386 400 1 +387 21 1 +387 22 -1 +387 27 1 +387 373 -1 +387 374 1 +387 375 0 +387 376 1 +387 383 0 +387 384 1 +387 389 -1 +387 390 1 +387 391 0 +387 392 -1 +388 21 1 +388 22 1 +388 28 0 +388 373 1 +388 374 0 +388 375 1 +388 376 1 +388 383 1 +388 384 1 +388 387 0 +388 389 1 +388 390 0 +388 391 0 +388 392 1 +389 390 1 +389 413 0 +390 414 0 +391 392 0 +391 415 1 +392 416 1 +393 33 0 +393 389 1 +393 390 1 +393 397 0 +393 398 1 +393 399 0 +393 400 1 +393 405 0 +393 406 1 +393 407 1 +393 408 1 +393 751 0 +393 752 1 +394 34 0 +394 389 0 +394 390 1 +394 393 1 +394 397 1 +394 398 -1 +394 399 -1 +394 400 1 +394 405 1 +394 406 1 +394 407 0 +394 408 1 +394 751 1 +394 752 1 +395 35 1 +395 381 1 +395 382 1 +395 383 0 +395 384 1 +395 389 1 +395 390 1 +395 397 1 +395 398 1 +395 399 1 +395 400 0 +395 751 1 +395 752 0 +396 36 -1 +396 381 1 +396 382 1 +396 383 0 +396 384 1 +396 389 1 +396 390 0 +396 395 1 +396 397 0 +396 398 1 +396 399 1 +396 400 0 +396 751 0 +396 752 0 +397 398 1 +397 421 -1 +398 422 0 +399 400 1 +399 423 -1 +400 424 1 +401 41 0 +401 397 0 +401 398 -1 +401 405 1 +401 406 1 +401 407 0 +401 408 0 +401 759 1 +401 760 1 +401 773 1 +401 774 1 +401 775 1 +401 776 1 +402 42 0 +402 397 1 +402 398 0 +402 401 1 +402 405 1 +402 406 0 +402 407 1 +402 408 -1 +402 759 1 +402 760 1 +402 773 1 +402 774 0 +402 775 -1 +402 776 -1 +403 43 1 +403 397 1 +403 398 1 +403 405 0 +403 406 -1 +403 407 0 +403 408 1 +403 749 0 +403 750 1 +403 751 1 +403 752 0 +403 759 0 +403 760 1 +404 44 1 +404 397 1 +404 398 0 +404 403 1 +404 405 1 +404 406 0 +404 407 0 +404 408 0 +404 749 1 +404 750 1 +404 751 0 +404 752 0 +404 759 0 +404 760 1 +405 406 0 +405 429 0 +406 430 1 +407 408 1 +407 431 1 +408 432 0 +409 45 0 +409 46 1 +409 49 1 +409 407 1 +409 408 1 +409 413 -1 +409 414 -1 +409 415 1 +409 416 0 +409 421 1 +409 422 1 +409 423 1 +409 424 0 +410 45 1 +410 46 0 +410 50 1 +410 407 0 +410 408 1 +410 409 0 +410 413 0 +410 414 1 +410 415 1 +410 416 1 +410 421 1 +410 422 1 +410 423 0 +410 424 1 +411 45 0 +411 46 1 +411 51 1 +411 397 0 +411 398 1 +411 399 1 +411 400 0 +411 407 1 +411 408 1 +411 413 1 +411 414 1 +411 415 0 +411 416 0 +412 45 -1 +412 46 0 +412 52 0 +412 397 1 +412 398 0 +412 399 1 +412 400 1 +412 407 -1 +412 408 1 +412 411 1 +412 413 1 +412 414 0 +412 415 0 +412 416 0 +413 414 -1 +413 437 0 +414 438 0 +415 416 0 +415 439 1 +416 440 0 +417 57 1 +417 413 1 +417 414 1 +417 421 0 +417 422 1 +417 423 1 +417 424 0 +417 429 1 +417 430 0 +417 431 1 +417 432 0 +417 775 1 +417 776 1 +418 58 1 +418 413 1 +418 414 1 +418 417 0 +418 421 1 +418 422 0 +418 423 0 +418 424 1 +418 429 1 +418 430 1 +418 431 0 +418 432 0 +418 775 1 +418 776 1 +419 59 0 +419 405 -1 +419 406 1 +419 407 0 +419 408 1 +419 413 -1 +419 414 1 +419 421 0 +419 422 1 +419 423 0 +419 424 1 +419 775 1 +419 776 1 +420 60 1 +420 405 -1 +420 406 0 +420 407 1 +420 408 -1 +420 413 -1 +420 414 0 +420 419 -1 +420 421 1 +420 422 1 +420 423 0 +420 424 1 +420 775 1 +420 776 1 +421 422 1 +421 445 1 +422 446 1 +423 424 0 +423 447 0 +424 448 -1 +425 65 1 +425 421 1 +425 422 0 +425 429 -1 +425 430 0 +425 431 0 +425 432 1 +425 783 0 +425 784 1 +425 797 1 +425 798 0 +425 799 0 +425 800 1 +426 66 1 +426 421 1 +426 422 1 +426 425 0 +426 429 0 +426 430 0 +426 431 1 +426 432 1 +426 783 1 +426 784 1 +426 797 1 +426 798 1 +426 799 0 +426 800 1 +427 67 -1 +427 421 -1 +427 422 -1 +427 429 1 +427 430 0 +427 431 0 +427 432 1 +427 773 0 +427 774 0 +427 775 1 +427 776 0 +427 783 1 +427 784 1 +428 68 1 +428 421 0 +428 422 1 +428 427 -1 +428 429 1 +428 430 0 +428 431 -1 +428 432 0 +428 773 1 +428 774 1 +428 775 0 +428 776 1 +428 783 0 +428 784 0 +429 430 1 +429 453 0 +430 454 1 +431 432 1 +431 455 0 +432 456 1 +433 69 -1 +433 70 0 +433 73 1 +433 431 0 +433 432 1 +433 437 0 +433 438 0 +433 439 1 +433 440 1 +433 445 0 +433 446 1 +433 447 0 +433 448 0 +434 69 1 +434 70 0 +434 74 1 +434 431 0 +434 432 -1 +434 433 1 +434 437 0 +434 438 1 +434 439 0 +434 440 1 +434 445 1 +434 446 -1 +434 447 1 +434 448 1 +435 69 0 +435 70 0 +435 75 0 +435 421 0 +435 422 1 +435 423 0 +435 424 0 +435 431 0 +435 432 0 +435 437 0 +435 438 1 +435 439 -1 +435 440 -1 +436 69 1 +436 70 0 +436 76 1 +436 421 0 +436 422 0 +436 423 0 +436 424 1 +436 431 -1 +436 432 0 +436 435 -1 +436 437 0 +436 438 1 +436 439 -1 +436 440 0 +437 438 0 +437 461 0 +438 462 1 +439 440 1 +439 463 1 +440 464 1 +441 81 0 +441 437 1 +441 438 0 +441 445 1 +441 446 1 +441 447 0 +441 448 0 +441 453 -1 +441 454 -1 +441 455 1 +441 456 0 +441 799 1 +441 800 1 +442 82 1 +442 437 1 +442 438 1 +442 441 1 +442 445 1 +442 446 1 +442 447 -1 +442 448 1 +442 453 1 +442 454 1 +442 455 1 +442 456 1 +442 799 -1 +442 800 1 +443 83 1 +443 429 0 +443 430 0 +443 431 1 +443 432 0 +443 437 1 +443 438 1 +443 445 0 +443 446 0 +443 447 1 +443 448 1 +443 799 0 +443 800 1 +444 84 1 +444 429 1 +444 430 1 +444 431 1 +444 432 1 +444 437 -1 +444 438 1 +444 443 1 +444 445 0 +444 446 -1 +444 447 1 +444 448 0 +444 799 1 +444 800 1 +445 446 1 +445 469 1 +446 470 0 +447 448 1 +447 471 0 +448 472 1 +449 89 1 +449 445 1 +449 446 0 +449 453 0 +449 454 1 +449 455 0 +449 456 1 +449 807 1 +449 808 0 +449 821 1 +449 822 1 +449 823 1 +449 824 1 +450 90 1 +450 445 1 +450 446 0 +450 449 1 +450 453 1 +450 454 0 +450 455 1 +450 456 1 +450 807 1 +450 808 0 +450 821 1 +450 822 1 +450 823 1 +450 824 1 +451 91 1 +451 445 1 +451 446 1 +451 453 1 +451 454 0 +451 455 0 +451 456 0 +451 797 1 +451 798 1 +451 799 1 +451 800 0 +451 807 1 +451 808 0 +452 92 0 +452 445 1 +452 446 0 +452 451 1 +452 453 1 +452 454 0 +452 455 1 +452 456 1 +452 797 0 +452 798 1 +452 799 0 +452 800 1 +452 807 -1 +452 808 0 +453 454 1 +453 477 0 +454 478 1 +455 456 0 +455 479 0 +456 480 -1 +457 93 1 +457 94 1 +457 97 0 +457 455 0 +457 456 1 +457 461 0 +457 462 -1 +457 463 1 +457 464 1 +457 469 0 +457 470 1 +457 471 1 +457 472 1 +458 93 -1 +458 94 1 +458 98 0 +458 455 0 +458 456 0 +458 457 1 +458 461 0 +458 462 0 +458 463 1 +458 464 1 +458 469 0 +458 470 1 +458 471 1 +458 472 1 +459 93 1 +459 94 1 +459 99 -1 +459 445 0 +459 446 0 +459 447 1 +459 448 1 +459 455 0 +459 456 1 +459 461 0 +459 462 1 +459 463 1 +459 464 1 +460 93 1 +460 94 1 +460 100 -1 +460 445 -1 +460 446 0 +460 447 -1 +460 448 1 +460 455 0 +460 456 1 +460 459 1 +460 461 1 +460 462 1 +460 463 1 +460 464 0 +461 462 -1 +461 485 0 +462 486 1 +463 464 1 +463 487 1 +464 488 1 +465 105 1 +465 461 1 +465 462 0 +465 469 -1 +465 470 1 +465 471 1 +465 472 1 +465 477 1 +465 478 1 +465 479 0 +465 480 -1 +465 823 -1 +465 824 1 +466 106 1 +466 461 0 +466 462 1 +466 465 1 +466 469 0 +466 470 1 +466 471 1 +466 472 1 +466 477 1 +466 478 1 +466 479 1 +466 480 -1 +466 823 1 +466 824 0 +467 107 1 +467 453 1 +467 454 1 +467 455 1 +467 456 1 +467 461 1 +467 462 1 +467 469 0 +467 470 1 +467 471 1 +467 472 1 +467 823 0 +467 824 1 +468 108 0 +468 453 0 +468 454 1 +468 455 1 +468 456 1 +468 461 1 +468 462 1 +468 467 1 +468 469 0 +468 470 -1 +468 471 1 +468 472 0 +468 823 1 +468 824 1 +469 470 0 +469 493 1 +470 494 0 +471 472 -1 +471 495 1 +472 496 1 +473 113 1 +473 469 1 +473 470 0 +473 477 1 +473 478 1 +473 479 0 +473 480 0 +473 831 1 +473 832 1 +473 845 1 +473 846 1 +473 847 0 +473 848 -1 +474 114 1 +474 469 1 +474 470 0 +474 473 0 +474 477 1 +474 478 0 +474 479 1 +474 480 0 +474 831 -1 +474 832 1 +474 845 1 +474 846 1 +474 847 1 +474 848 1 +475 115 1 +475 469 0 +475 470 1 +475 477 0 +475 478 0 +475 479 1 +475 480 0 +475 821 0 +475 822 1 +475 823 1 +475 824 1 +475 831 -1 +475 832 1 +476 116 1 +476 469 0 +476 470 0 +476 475 0 +476 477 1 +476 478 1 +476 479 1 +476 480 0 +476 821 1 +476 822 1 +476 823 1 +476 824 1 +476 831 1 +476 832 1 +477 478 1 +477 501 1 +478 502 1 +479 480 -1 +479 503 1 +480 504 0 +481 117 1 +481 118 1 +481 121 1 +481 479 -1 +481 480 -1 +481 485 1 +481 486 1 +481 487 1 +481 488 0 +481 493 0 +481 494 -1 +481 495 1 +481 496 1 +482 117 0 +482 118 -1 +482 122 0 +482 479 0 +482 480 1 +482 481 1 +482 485 0 +482 486 1 +482 487 0 +482 488 1 +482 493 0 +482 494 1 +482 495 0 +482 496 0 +483 117 0 +483 118 1 +483 123 0 +483 469 0 +483 470 1 +483 471 -1 +483 472 0 +483 479 1 +483 480 1 +483 485 1 +483 486 -1 +483 487 -1 +483 488 1 +484 117 1 +484 118 1 +484 124 1 +484 469 0 +484 470 1 +484 471 1 +484 472 1 +484 479 -1 +484 480 -1 +484 483 1 +484 485 1 +484 486 1 +484 487 0 +484 488 0 +485 486 1 +485 509 1 +486 510 0 +487 488 1 +487 511 0 +488 512 1 +489 129 1 +489 485 1 +489 486 1 +489 493 1 +489 494 1 +489 495 0 +489 496 1 +489 501 0 +489 502 0 +489 503 0 +489 504 1 +489 847 -1 +489 848 0 +490 130 0 +490 485 1 +490 486 1 +490 489 1 +490 493 1 +490 494 1 +490 495 0 +490 496 1 +490 501 1 +490 502 0 +490 503 -1 +490 504 1 +490 847 1 +490 848 1 +491 131 1 +491 477 1 +491 478 1 +491 479 1 +491 480 1 +491 485 1 +491 486 1 +491 493 0 +491 494 1 +491 495 1 +491 496 0 +491 847 0 +491 848 1 +492 132 1 +492 477 1 +492 478 0 +492 479 0 +492 480 0 +492 485 1 +492 486 1 +492 491 1 +492 493 -1 +492 494 1 +492 495 1 +492 496 0 +492 847 1 +492 848 1 +493 494 1 +493 517 -1 +494 518 1 +495 496 0 +495 519 1 +496 520 0 +497 137 1 +497 493 0 +497 494 1 +497 501 0 +497 502 -1 +497 503 1 +497 504 0 +497 855 0 +497 856 0 +497 869 1 +497 870 0 +497 871 1 +497 872 0 +498 138 1 +498 493 0 +498 494 0 +498 497 1 +498 501 0 +498 502 0 +498 503 1 +498 504 -1 +498 855 1 +498 856 1 +498 869 0 +498 870 0 +498 871 1 +498 872 1 +499 139 0 +499 493 1 +499 494 1 +499 501 1 +499 502 0 +499 503 1 +499 504 1 +499 845 -1 +499 846 1 +499 847 1 +499 848 1 +499 855 0 +499 856 1 +500 140 0 +500 493 0 +500 494 1 +500 499 1 +500 501 0 +500 502 1 +500 503 0 +500 504 1 +500 845 1 +500 846 1 +500 847 1 +500 848 0 +500 855 1 +500 856 0 +501 502 1 +501 525 1 +502 526 1 +503 504 1 +503 527 0 +504 528 0 +505 141 1 +505 142 0 +505 145 0 +505 503 1 +505 504 1 +505 509 -1 +505 510 1 +505 511 0 +505 512 0 +505 517 1 +505 518 1 +505 519 1 +505 520 0 +506 141 1 +506 142 1 +506 146 1 +506 503 1 +506 504 0 +506 505 1 +506 509 0 +506 510 1 +506 511 0 +506 512 1 +506 517 0 +506 518 1 +506 519 0 +506 520 1 +507 141 1 +507 142 1 +507 147 1 +507 493 0 +507 494 1 +507 495 1 +507 496 -1 +507 503 1 +507 504 -1 +507 509 1 +507 510 1 +507 511 1 +507 512 1 +508 141 0 +508 142 1 +508 148 1 +508 493 1 +508 494 1 +508 495 1 +508 496 0 +508 503 -1 +508 504 1 +508 507 -1 +508 509 1 +508 510 1 +508 511 1 +508 512 1 +509 510 1 +509 533 0 +510 534 1 +511 512 1 +511 535 1 +512 536 -1 +513 153 1 +513 509 1 +513 510 0 +513 517 0 +513 518 0 +513 519 1 +513 520 1 +513 525 1 +513 526 1 +513 527 1 +513 528 0 +513 871 1 +513 872 0 +514 154 0 +514 509 1 +514 510 0 +514 513 1 +514 517 0 +514 518 0 +514 519 0 +514 520 0 +514 525 1 +514 526 0 +514 527 1 +514 528 0 +514 871 1 +514 872 1 +515 155 1 +515 501 1 +515 502 0 +515 503 1 +515 504 1 +515 509 0 +515 510 0 +515 517 1 +515 518 -1 +515 519 0 +515 520 0 +515 871 0 +515 872 0 +516 156 1 +516 501 1 +516 502 1 +516 503 1 +516 504 0 +516 509 0 +516 510 0 +516 515 0 +516 517 -1 +516 518 0 +516 519 1 +516 520 1 +516 871 -1 +516 872 1 +517 518 1 +517 541 1 +518 542 1 +519 520 0 +519 543 1 +520 544 1 +521 161 1 +521 517 1 +521 518 1 +521 525 0 +521 526 0 +521 527 -1 +521 528 1 +521 879 1 +521 880 0 +521 893 1 +521 894 1 +521 895 1 +521 896 1 +522 162 0 +522 517 0 +522 518 1 +522 521 1 +522 525 1 +522 526 1 +522 527 1 +522 528 1 +522 879 0 +522 880 1 +522 893 0 +522 894 0 +522 895 1 +522 896 1 +523 163 1 +523 517 1 +523 518 0 +523 525 1 +523 526 0 +523 527 1 +523 528 -1 +523 869 1 +523 870 1 +523 871 0 +523 872 0 +523 879 -1 +523 880 -1 +524 164 1 +524 517 1 +524 518 1 +524 523 0 +524 525 0 +524 526 1 +524 527 1 +524 528 -1 +524 869 0 +524 870 1 +524 871 0 +524 872 1 +524 879 0 +524 880 1 +525 526 0 +525 549 1 +526 550 1 +527 528 0 +527 551 0 +528 552 0 +529 165 1 +529 166 1 +529 169 0 +529 527 -1 +529 528 1 +529 533 0 +529 534 0 +529 535 0 +529 536 0 +529 541 0 +529 542 1 +529 543 1 +529 544 1 +530 165 1 +530 166 0 +530 170 0 +530 527 1 +530 528 0 +530 529 -1 +530 533 1 +530 534 1 +530 535 1 +530 536 0 +530 541 0 +530 542 0 +530 543 1 +530 544 0 +531 165 0 +531 166 1 +531 171 0 +531 517 1 +531 518 1 +531 519 0 +531 520 0 +531 527 0 +531 528 1 +531 533 1 +531 534 1 +531 535 0 +531 536 0 +532 165 0 +532 166 1 +532 172 0 +532 517 1 +532 518 0 +532 519 -1 +532 520 0 +532 527 1 +532 528 0 +532 531 1 +532 533 1 +532 534 1 +532 535 1 +532 536 -1 +533 534 0 +533 557 0 +534 558 1 +535 536 1 +535 559 0 +536 560 1 +537 177 1 +537 533 0 +537 534 1 +537 541 1 +537 542 1 +537 543 1 +537 544 1 +537 549 0 +537 550 0 +537 551 -1 +537 552 0 +537 895 1 +537 896 1 +538 178 1 +538 533 1 +538 534 1 +538 537 1 +538 541 1 +538 542 1 +538 543 1 +538 544 1 +538 549 1 +538 550 0 +538 551 0 +538 552 0 +538 895 0 +538 896 0 +539 179 0 +539 525 1 +539 526 1 +539 527 -1 +539 528 0 +539 533 1 +539 534 0 +539 541 1 +539 542 1 +539 543 -1 +539 544 1 +539 895 -1 +539 896 1 +540 180 0 +540 525 1 +540 526 0 +540 527 1 +540 528 -1 +540 533 0 +540 534 1 +540 539 1 +540 541 1 +540 542 0 +540 543 0 +540 544 0 +540 895 1 +540 896 1 +541 542 1 +541 565 0 +542 566 1 +543 544 1 +543 567 0 +544 568 -1 +545 185 1 +545 541 0 +545 542 1 +545 549 1 +545 550 0 +545 551 0 +545 552 0 +545 903 1 +545 904 1 +545 917 -1 +545 918 1 +545 919 0 +545 920 0 +546 186 0 +546 541 1 +546 542 -1 +546 545 1 +546 549 1 +546 550 1 +546 551 0 +546 552 0 +546 903 0 +546 904 0 +546 917 0 +546 918 1 +546 919 1 +546 920 1 +547 187 0 +547 541 0 +547 542 0 +547 549 1 +547 550 0 +547 551 1 +547 552 0 +547 893 -1 +547 894 0 +547 895 0 +547 896 -1 +547 903 1 +547 904 0 +548 188 1 +548 541 1 +548 542 0 +548 547 1 +548 549 1 +548 550 -1 +548 551 1 +548 552 0 +548 893 0 +548 894 0 +548 895 1 +548 896 1 +548 903 1 +548 904 1 +549 550 0 +549 573 -1 +550 574 -1 +551 552 0 +551 575 -1 +552 576 1 +553 189 0 +553 190 1 +553 193 1 +553 551 1 +553 552 0 +553 557 0 +553 558 1 +553 559 1 +553 560 1 +553 565 0 +553 566 1 +553 567 0 +553 568 0 +554 189 0 +554 190 0 +554 194 1 +554 551 0 +554 552 1 +554 553 1 +554 557 1 +554 558 0 +554 559 -1 +554 560 0 +554 565 1 +554 566 0 +554 567 0 +554 568 0 +555 189 0 +555 190 0 +555 195 1 +555 541 1 +555 542 1 +555 543 1 +555 544 -1 +555 551 1 +555 552 1 +555 557 0 +555 558 1 +555 559 0 +555 560 1 +556 189 1 +556 190 1 +556 196 1 +556 541 0 +556 542 0 +556 543 1 +556 544 1 +556 551 0 +556 552 1 +556 555 0 +556 557 0 +556 558 1 +556 559 0 +556 560 1 +557 558 1 +557 581 0 +558 582 1 +559 560 1 +559 583 0 +560 584 0 +561 201 1 +561 557 1 +561 558 0 +561 565 0 +561 566 1 +561 567 -1 +561 568 1 +561 573 -1 +561 574 0 +561 575 1 +561 576 0 +561 919 0 +561 920 1 +562 202 1 +562 557 -1 +562 558 1 +562 561 1 +562 565 0 +562 566 1 +562 567 1 +562 568 1 +562 573 1 +562 574 1 +562 575 1 +562 576 1 +562 919 0 +562 920 1 +563 203 -1 +563 549 -1 +563 550 1 +563 551 1 +563 552 0 +563 557 1 +563 558 -1 +563 565 1 +563 566 1 +563 567 1 +563 568 1 +563 919 -1 +563 920 0 +564 204 -1 +564 549 1 +564 550 1 +564 551 1 +564 552 1 +564 557 1 +564 558 1 +564 563 1 +564 565 0 +564 566 1 +564 567 1 +564 568 1 +564 919 0 +564 920 1 +565 566 0 +565 589 1 +566 590 1 +567 568 0 +567 591 0 +568 592 1 +569 209 1 +569 565 0 +569 566 0 +569 573 0 +569 574 1 +569 575 1 +569 576 0 +569 927 0 +569 928 0 +569 941 0 +569 942 0 +569 943 1 +569 944 1 +570 210 1 +570 565 0 +570 566 1 +570 569 0 +570 573 1 +570 574 1 +570 575 1 +570 576 1 +570 927 0 +570 928 0 +570 941 0 +570 942 0 +570 943 1 +570 944 1 +571 211 0 +571 565 0 +571 566 1 +571 573 1 +571 574 1 +571 575 1 +571 576 1 +571 917 1 +571 918 1 +571 919 0 +571 920 1 +571 927 0 +571 928 0 +572 212 0 +572 565 1 +572 566 1 +572 571 0 +572 573 0 +572 574 1 +572 575 1 +572 576 1 +572 917 1 +572 918 1 +572 919 0 +572 920 1 +572 927 0 +572 928 0 +573 574 1 +573 597 1 +574 598 -1 +575 576 1 +575 599 1 +576 600 1 +577 213 -1 +577 214 1 +577 217 1 +577 575 1 +577 576 1 +577 581 0 +577 582 1 +577 583 0 +577 584 1 +577 589 1 +577 590 -1 +577 591 0 +577 592 1 +578 213 1 +578 214 1 +578 218 0 +578 575 0 +578 576 1 +578 577 1 +578 581 1 +578 582 1 +578 583 1 +578 584 1 +578 589 1 +578 590 0 +578 591 0 +578 592 1 +579 213 1 +579 214 1 +579 219 0 +579 565 1 +579 566 1 +579 567 0 +579 568 0 +579 575 1 +579 576 1 +579 581 -1 +579 582 1 +579 583 1 +579 584 1 +580 213 0 +580 214 1 +580 220 -1 +580 565 1 +580 566 1 +580 567 0 +580 568 1 +580 575 1 +580 576 0 +580 579 -1 +580 581 1 +580 582 0 +580 583 1 +580 584 1 +581 582 -1 +581 605 0 +582 606 0 +583 584 0 +583 607 1 +584 608 1 +585 225 0 +585 581 1 +585 582 0 +585 589 0 +585 590 1 +585 591 0 +585 592 0 +585 597 -1 +585 598 1 +585 599 1 +585 600 0 +585 943 -1 +585 944 1 +586 226 1 +586 581 0 +586 582 1 +586 585 1 +586 589 -1 +586 590 -1 +586 591 1 +586 592 0 +586 597 1 +586 598 -1 +586 599 1 +586 600 0 +586 943 0 +586 944 0 +587 227 1 +587 573 1 +587 574 1 +587 575 1 +587 576 1 +587 581 0 +587 582 0 +587 589 1 +587 590 1 +587 591 -1 +587 592 1 +587 943 0 +587 944 0 +588 228 0 +588 573 1 +588 574 -1 +588 575 1 +588 576 1 +588 581 0 +588 582 0 +588 587 0 +588 589 1 +588 590 1 +588 591 1 +588 592 1 +588 943 1 +588 944 0 +589 590 1 +589 613 1 +590 614 0 +591 592 0 +591 615 1 +592 616 1 +593 233 1 +593 589 1 +593 590 0 +593 597 1 +593 598 1 +593 599 1 +593 600 0 +593 951 1 +593 952 1 +593 965 1 +593 966 1 +593 967 1 +593 968 1 +594 234 0 +594 589 1 +594 590 0 +594 593 1 +594 597 1 +594 598 1 +594 599 1 +594 600 -1 +594 951 1 +594 952 1 +594 965 1 +594 966 1 +594 967 0 +594 968 1 +595 235 1 +595 589 1 +595 590 0 +595 597 0 +595 598 1 +595 599 -1 +595 600 0 +595 941 1 +595 942 -1 +595 943 0 +595 944 1 +595 951 1 +595 952 1 +596 236 1 +596 589 -1 +596 590 0 +596 595 1 +596 597 0 +596 598 1 +596 599 1 +596 600 1 +596 941 0 +596 942 0 +596 943 -1 +596 944 1 +596 951 1 +596 952 -1 +597 598 0 +597 621 1 +598 622 1 +599 600 1 +599 623 1 +600 624 0 +601 237 0 +601 238 -1 +601 241 0 +601 599 1 +601 600 1 +601 605 1 +601 606 0 +601 607 1 +601 608 1 +601 613 -1 +601 614 1 +601 615 1 +601 616 0 +602 237 1 +602 238 1 +602 242 1 +602 599 0 +602 600 -1 +602 601 1 +602 605 1 +602 606 -1 +602 607 0 +602 608 1 +602 613 1 +602 614 -1 +602 615 1 +602 616 0 +603 237 1 +603 238 1 +603 243 1 +603 589 0 +603 590 1 +603 591 -1 +603 592 1 +603 599 1 +603 600 0 +603 605 1 +603 606 1 +603 607 0 +603 608 1 +604 237 1 +604 238 1 +604 244 0 +604 589 0 +604 590 -1 +604 591 0 +604 592 1 +604 599 0 +604 600 0 +604 603 0 +604 605 0 +604 606 1 +604 607 0 +604 608 1 +605 606 1 +605 629 1 +606 630 1 +607 608 0 +607 631 0 +608 632 1 +609 249 1 +609 605 1 +609 606 0 +609 613 0 +609 614 0 +609 615 1 +609 616 1 +609 621 1 +609 622 1 +609 623 1 +609 624 1 +609 967 1 +609 968 0 +610 250 1 +610 605 0 +610 606 0 +610 609 1 +610 613 1 +610 614 1 +610 615 0 +610 616 0 +610 621 1 +610 622 1 +610 623 1 +610 624 1 +610 967 1 +610 968 1 +611 251 1 +611 597 1 +611 598 0 +611 599 0 +611 600 1 +611 605 0 +611 606 1 +611 613 1 +611 614 1 +611 615 1 +611 616 -1 +611 967 -1 +611 968 0 +612 252 1 +612 597 0 +612 598 1 +612 599 1 +612 600 0 +612 605 1 +612 606 1 +612 611 0 +612 613 1 +612 614 0 +612 615 -1 +612 616 1 +612 967 1 +612 968 0 +613 614 1 +613 637 0 +614 638 0 +615 616 0 +615 639 1 +616 640 1 +617 257 0 +617 613 0 +617 614 1 +617 621 1 +617 622 0 +617 623 0 +617 624 0 +617 975 0 +617 976 0 +617 989 -1 +617 990 0 +617 991 1 +617 992 1 +618 258 1 +618 613 0 +618 614 1 +618 617 1 +618 621 0 +618 622 0 +618 623 0 +618 624 0 +618 975 1 +618 976 0 +618 989 -1 +618 990 1 +618 991 0 +618 992 0 +619 259 1 +619 613 0 +619 614 -1 +619 621 0 +619 622 1 +619 623 0 +619 624 1 +619 965 0 +619 966 1 +619 967 0 +619 968 0 +619 975 1 +619 976 0 +620 260 -1 +620 613 0 +620 614 1 +620 619 -1 +620 621 1 +620 622 0 +620 623 1 +620 624 0 +620 965 1 +620 966 1 +620 967 0 +620 968 -1 +620 975 1 +620 976 1 +621 622 0 +621 645 1 +622 646 1 +623 624 0 +623 647 1 +624 648 -1 +625 261 1 +625 262 1 +625 265 0 +625 623 1 +625 624 0 +625 629 1 +625 630 0 +625 631 1 +625 632 0 +625 637 1 +625 638 0 +625 639 0 +625 640 1 +626 261 1 +626 262 0 +626 266 0 +626 623 0 +626 624 1 +626 625 1 +626 629 -1 +626 630 -1 +626 631 1 +626 632 1 +626 637 1 +626 638 1 +626 639 1 +626 640 1 +627 261 0 +627 262 -1 +627 267 0 +627 613 1 +627 614 1 +627 615 1 +627 616 0 +627 623 1 +627 624 1 +627 629 0 +627 630 0 +627 631 0 +627 632 0 +628 261 1 +628 262 1 +628 268 -1 +628 613 1 +628 614 1 +628 615 -1 +628 616 0 +628 623 -1 +628 624 1 +628 627 1 +628 629 1 +628 630 1 +628 631 1 +628 632 1 +629 630 0 +629 653 1 +630 654 1 +631 632 1 +631 655 -1 +632 656 1 +633 273 1 +633 629 0 +633 630 0 +633 637 -1 +633 638 1 +633 639 1 +633 640 1 +633 645 0 +633 646 1 +633 647 0 +633 648 -1 +633 991 0 +633 992 1 +634 274 0 +634 629 1 +634 630 0 +634 633 -1 +634 637 1 +634 638 1 +634 639 0 +634 640 0 +634 645 1 +634 646 -1 +634 647 1 +634 648 0 +634 991 1 +634 992 1 +635 275 0 +635 621 0 +635 622 0 +635 623 1 +635 624 1 +635 629 1 +635 630 0 +635 637 1 +635 638 0 +635 639 1 +635 640 1 +635 991 0 +635 992 -1 +636 276 1 +636 621 -1 +636 622 1 +636 623 1 +636 624 1 +636 629 1 +636 630 0 +636 635 0 +636 637 1 +636 638 1 +636 639 1 +636 640 0 +636 991 0 +636 992 1 +637 638 0 +637 661 1 +638 662 1 +639 640 1 +639 663 -1 +640 664 1 +641 281 1 +641 637 -1 +641 638 1 +641 645 -1 +641 646 1 +641 647 1 +641 648 -1 +641 999 0 +641 1000 0 +641 1013 1 +641 1014 0 +641 1015 1 +641 1016 0 +642 282 0 +642 637 1 +642 638 1 +642 641 0 +642 645 1 +642 646 1 +642 647 1 +642 648 0 +642 999 0 +642 1000 1 +642 1013 1 +642 1014 -1 +642 1015 -1 +642 1016 1 +643 283 0 +643 637 1 +643 638 1 +643 645 0 +643 646 1 +643 647 1 +643 648 1 +643 989 0 +643 990 0 +643 991 0 +643 992 0 +643 999 1 +643 1000 1 +644 284 0 +644 637 1 +644 638 1 +644 643 1 +644 645 1 +644 646 1 +644 647 1 +644 648 0 +644 989 0 +644 990 0 +644 991 1 +644 992 1 +644 999 0 +644 1000 -1 +645 646 0 +645 669 1 +646 670 1 +647 648 0 +647 671 1 +648 672 0 +649 285 0 +649 286 1 +649 289 0 +649 647 0 +649 648 1 +649 653 1 +649 654 1 +649 655 1 +649 656 -1 +649 661 -1 +649 662 1 +649 663 1 +649 664 0 +650 285 0 +650 286 0 +650 290 1 +650 647 0 +650 648 1 +650 649 1 +650 653 1 +650 654 1 +650 655 1 +650 656 0 +650 661 1 +650 662 0 +650 663 1 +650 664 1 +651 285 1 +651 286 0 +651 291 1 +651 637 0 +651 638 -1 +651 639 1 +651 640 1 +651 647 1 +651 648 -1 +651 653 0 +651 654 0 +651 655 1 +651 656 0 +652 285 1 +652 286 1 +652 292 1 +652 637 0 +652 638 1 +652 639 1 +652 640 0 +652 647 1 +652 648 1 +652 651 0 +652 653 1 +652 654 1 +652 655 -1 +652 656 1 +653 654 0 +653 677 0 +654 678 1 +655 656 0 +655 679 0 +656 680 1 +657 297 0 +657 653 1 +657 654 1 +657 661 1 +657 662 1 +657 663 0 +657 664 -1 +657 669 0 +657 670 1 +657 671 -1 +657 672 1 +657 1015 0 +657 1016 0 +658 298 1 +658 653 0 +658 654 0 +658 657 1 +658 661 1 +658 662 0 +658 663 1 +658 664 -1 +658 669 1 +658 670 0 +658 671 1 +658 672 0 +658 1015 0 +658 1016 0 +659 299 0 +659 645 0 +659 646 1 +659 647 1 +659 648 1 +659 653 0 +659 654 -1 +659 661 1 +659 662 -1 +659 663 1 +659 664 1 +659 1015 1 +659 1016 0 +660 300 0 +660 645 -1 +660 646 1 +660 647 0 +660 648 1 +660 653 0 +660 654 1 +660 659 1 +660 661 0 +660 662 1 +660 663 0 +660 664 1 +660 1015 1 +660 1016 0 +661 662 1 +661 685 0 +662 686 1 +663 664 0 +663 687 1 +664 688 1 +665 305 0 +665 661 0 +665 662 1 +665 669 0 +665 670 0 +665 671 0 +665 672 0 +665 1023 1 +665 1024 1 +665 1037 0 +665 1038 -1 +665 1039 1 +665 1040 1 +666 306 1 +666 661 0 +666 662 1 +666 665 1 +666 669 1 +666 670 0 +666 671 1 +666 672 -1 +666 1023 1 +666 1024 1 +666 1037 0 +666 1038 0 +666 1039 -1 +666 1040 0 +667 307 1 +667 661 -1 +667 662 1 +667 669 1 +667 670 1 +667 671 0 +667 672 1 +667 1013 1 +667 1014 1 +667 1015 0 +667 1016 1 +667 1023 1 +667 1024 1 +668 308 0 +668 661 0 +668 662 1 +668 667 1 +668 669 0 +668 670 0 +668 671 0 +668 672 1 +668 1013 0 +668 1014 0 +668 1015 1 +668 1016 1 +668 1023 0 +668 1024 1 +669 670 0 +669 693 0 +670 694 0 +671 672 -1 +671 695 1 +672 696 0 +673 309 1 +673 310 0 +673 313 1 +673 671 0 +673 672 -1 +673 677 1 +673 678 1 +673 679 0 +673 680 1 +673 685 1 +673 686 1 +673 687 0 +673 688 1 +674 309 -1 +674 310 1 +674 314 -1 +674 671 0 +674 672 1 +674 673 1 +674 677 1 +674 678 1 +674 679 1 +674 680 0 +674 685 1 +674 686 1 +674 687 1 +674 688 1 +675 309 -1 +675 310 0 +675 315 1 +675 661 0 +675 662 1 +675 663 0 +675 664 1 +675 671 0 +675 672 0 +675 677 0 +675 678 0 +675 679 0 +675 680 -1 +676 309 1 +676 310 1 +676 316 0 +676 661 1 +676 662 0 +676 663 1 +676 664 0 +676 671 1 +676 672 0 +676 675 1 +676 677 0 +676 678 1 +676 679 1 +676 680 1 +677 678 0 +677 701 1 +678 702 0 +679 680 1 +679 703 0 +680 704 0 +681 321 1 +681 677 1 +681 678 0 +681 685 0 +681 686 0 +681 687 0 +681 688 1 +681 693 0 +681 694 1 +681 695 1 +681 696 1 +681 1039 0 +681 1040 -1 +682 322 -1 +682 677 1 +682 678 0 +682 681 1 +682 685 1 +682 686 0 +682 687 0 +682 688 1 +682 693 0 +682 694 1 +682 695 1 +682 696 0 +682 1039 0 +682 1040 0 +683 323 0 +683 669 1 +683 670 1 +683 671 1 +683 672 -1 +683 677 0 +683 678 1 +683 685 0 +683 686 1 +683 687 -1 +683 688 1 +683 1039 1 +683 1040 1 +684 324 0 +684 669 1 +684 670 0 +684 671 1 +684 672 0 +684 677 0 +684 678 -1 +684 683 1 +684 685 0 +684 686 1 +684 687 0 +684 688 1 +684 1039 0 +684 1040 0 +685 686 1 +685 709 0 +686 710 1 +687 688 1 +687 711 0 +688 712 1 +689 329 0 +689 685 0 +689 686 0 +689 693 1 +689 694 1 +689 695 -1 +689 696 1 +689 1047 1 +689 1048 0 +689 1061 1 +689 1062 -1 +689 1063 -1 +689 1064 1 +690 330 1 +690 685 0 +690 686 1 +690 689 1 +690 693 1 +690 694 0 +690 695 -1 +690 696 1 +690 1047 0 +690 1048 0 +690 1061 0 +690 1062 1 +690 1063 0 +690 1064 -1 +691 331 0 +691 685 0 +691 686 1 +691 693 1 +691 694 0 +691 695 0 +691 696 -1 +691 1037 1 +691 1038 1 +691 1039 1 +691 1040 1 +691 1047 1 +691 1048 1 +692 332 0 +692 685 0 +692 686 -1 +692 691 -1 +692 693 0 +692 694 -1 +692 695 1 +692 696 0 +692 1037 0 +692 1038 0 +692 1039 1 +692 1040 1 +692 1047 1 +692 1048 0 +693 694 1 +693 717 1 +694 718 1 +695 696 1 +695 719 1 +696 720 -1 +697 333 0 +697 334 1 +697 337 1 +697 695 0 +697 696 1 +697 701 0 +697 702 1 +697 703 -1 +697 704 1 +697 709 1 +697 710 0 +697 711 1 +697 712 0 +698 333 0 +698 334 0 +698 338 1 +698 695 0 +698 696 1 +698 697 -1 +698 701 1 +698 702 0 +698 703 1 +698 704 0 +698 709 1 +698 710 0 +698 711 1 +698 712 1 +699 333 1 +699 334 1 +699 339 1 +699 685 1 +699 686 1 +699 687 1 +699 688 0 +699 695 1 +699 696 0 +699 701 1 +699 702 1 +699 703 -1 +699 704 1 +700 333 1 +700 334 1 +700 340 0 +700 685 1 +700 686 0 +700 687 1 +700 688 1 +700 695 1 +700 696 1 +700 699 1 +700 701 1 +700 702 1 +700 703 0 +700 704 -1 +701 702 1 +703 704 1 +705 345 1 +705 701 0 +705 702 1 +705 709 1 +705 710 -1 +705 711 1 +705 712 1 +705 717 1 +705 718 0 +705 719 1 +705 720 1 +705 1063 1 +705 1064 1 +706 346 0 +706 701 1 +706 702 0 +706 705 0 +706 709 0 +706 710 1 +706 711 1 +706 712 0 +706 717 1 +706 718 -1 +706 719 0 +706 720 1 +706 1063 0 +706 1064 1 +707 347 1 +707 693 1 +707 694 -1 +707 695 0 +707 696 1 +707 701 1 +707 702 0 +707 709 -1 +707 710 -1 +707 711 1 +707 712 1 +707 1063 1 +707 1064 1 +708 348 0 +708 693 1 +708 694 1 +708 695 0 +708 696 1 +708 701 1 +708 702 1 +708 707 1 +708 709 1 +708 710 0 +708 711 1 +708 712 0 +708 1063 1 +708 1064 1 +709 710 1 +711 712 0 +713 353 1 +713 709 -1 +713 710 1 +713 717 1 +713 718 0 +713 719 0 +713 720 0 +713 1071 -1 +713 1072 0 +714 354 1 +714 709 1 +714 710 1 +714 713 1 +714 717 1 +714 718 0 +714 719 0 +714 720 1 +714 1071 0 +714 1072 1 +715 355 1 +715 709 1 +715 710 0 +715 717 1 +715 718 0 +715 719 1 +715 720 0 +715 1061 1 +715 1062 0 +715 1063 1 +715 1064 1 +715 1071 1 +715 1072 1 +716 356 1 +716 709 0 +716 710 0 +716 715 0 +716 717 0 +716 718 1 +716 719 0 +716 720 -1 +716 1061 -1 +716 1062 0 +716 1063 1 +716 1064 1 +716 1071 1 +716 1072 1 +717 718 -1 +719 720 1 +721 361 -1 +721 725 1 +721 726 1 +721 727 1 +721 728 0 +721 733 1 +721 734 1 +721 735 1 +721 736 1 +722 362 0 +722 721 0 +722 725 1 +722 726 -1 +722 727 0 +722 728 0 +722 733 1 +722 734 1 +722 735 1 +722 736 0 +723 363 1 +723 725 1 +723 726 1 +723 727 1 +723 728 0 +724 364 0 +724 723 1 +724 725 1 +724 726 0 +724 727 -1 +724 728 1 +725 726 1 +725 749 0 +726 750 0 +727 728 1 +727 751 -1 +728 752 1 +729 369 1 +729 725 0 +729 726 1 +729 733 1 +729 734 0 +729 735 0 +729 736 0 +729 741 0 +729 742 0 +729 743 1 +729 744 0 +729 1087 1 +729 1088 -1 +730 370 -1 +730 725 1 +730 726 0 +730 729 1 +730 733 1 +730 734 1 +730 735 0 +730 736 1 +730 741 0 +730 742 0 +730 743 1 +730 744 0 +730 1087 0 +730 1088 0 +731 371 0 +731 725 1 +731 726 0 +731 733 -1 +731 734 1 +731 735 1 +731 736 1 +731 1087 1 +731 1088 1 +732 372 1 +732 725 0 +732 726 -1 +732 731 -1 +732 733 1 +732 734 1 +732 735 0 +732 736 0 +732 1087 0 +732 1088 1 +733 734 0 +733 757 1 +734 758 1 +735 736 1 +735 759 0 +736 760 1 +737 377 0 +737 733 -1 +737 734 1 +737 741 0 +737 742 0 +737 743 1 +737 744 0 +737 1095 0 +737 1096 0 +737 1109 1 +737 1110 1 +737 1111 1 +737 1112 -1 +738 378 0 +738 733 0 +738 734 1 +738 737 0 +738 741 1 +738 742 1 +738 743 -1 +738 744 0 +738 1095 1 +738 1096 1 +738 1109 0 +738 1110 0 +738 1111 -1 +738 1112 -1 +739 379 1 +739 733 -1 +739 734 0 +739 741 1 +739 742 0 +739 743 0 +739 744 -1 +739 1085 0 +739 1086 -1 +739 1087 1 +739 1088 0 +739 1095 1 +739 1096 1 +740 380 0 +740 733 1 +740 734 0 +740 739 0 +740 741 0 +740 742 1 +740 743 1 +740 744 0 +740 1085 0 +740 1086 1 +740 1087 0 +740 1088 1 +740 1095 0 +740 1096 1 +741 742 0 +741 765 0 +742 766 1 +743 744 0 +743 767 0 +744 768 -1 +745 381 1 +745 382 0 +745 385 1 +745 743 0 +745 744 1 +745 749 1 +745 750 -1 +745 751 0 +745 752 0 +745 757 1 +745 758 1 +745 759 1 +745 760 1 +746 381 0 +746 382 1 +746 386 1 +746 743 1 +746 744 0 +746 745 1 +746 749 1 +746 750 1 +746 751 1 +746 752 1 +746 757 0 +746 758 -1 +746 759 0 +746 760 -1 +747 381 0 +747 382 0 +747 387 0 +747 733 -1 +747 734 1 +747 735 0 +747 736 0 +747 743 0 +747 744 0 +747 749 1 +747 750 0 +747 751 1 +747 752 1 +748 381 0 +748 382 0 +748 388 1 +748 733 1 +748 734 1 +748 735 0 +748 736 0 +748 743 0 +748 744 1 +748 747 1 +748 749 1 +748 750 -1 +748 751 0 +748 752 1 +749 750 0 +749 773 0 +750 774 0 +751 752 1 +751 775 1 +752 776 0 +753 393 1 +753 749 -1 +753 750 1 +753 757 1 +753 758 1 +753 759 -1 +753 760 1 +753 765 0 +753 766 1 +753 767 0 +753 768 1 +753 1111 1 +753 1112 0 +754 394 0 +754 749 1 +754 750 1 +754 753 1 +754 757 1 +754 758 0 +754 759 0 +754 760 0 +754 765 0 +754 766 0 +754 767 0 +754 768 -1 +754 1111 0 +754 1112 1 +755 395 0 +755 741 1 +755 742 1 +755 743 0 +755 744 1 +755 749 -1 +755 750 1 +755 757 0 +755 758 0 +755 759 0 +755 760 1 +755 1111 1 +755 1112 1 +756 396 0 +756 741 1 +756 742 0 +756 743 0 +756 744 0 +756 749 1 +756 750 1 +756 755 1 +756 757 -1 +756 758 0 +756 759 1 +756 760 1 +756 1111 1 +756 1112 0 +757 758 -1 +757 781 1 +758 782 0 +759 760 1 +759 783 0 +760 784 1 +761 401 0 +761 757 0 +761 758 0 +761 765 1 +761 766 0 +761 767 1 +761 768 0 +761 1119 1 +761 1120 0 +761 1133 0 +761 1134 0 +761 1135 -1 +761 1136 0 +762 402 1 +762 757 1 +762 758 0 +762 761 1 +762 765 0 +762 766 0 +762 767 -1 +762 768 0 +762 1119 0 +762 1120 1 +762 1133 0 +762 1134 1 +762 1135 1 +762 1136 0 +763 403 1 +763 757 1 +763 758 0 +763 765 1 +763 766 0 +763 767 0 +763 768 1 +763 1109 1 +763 1110 0 +763 1111 1 +763 1112 1 +763 1119 0 +763 1120 -1 +764 404 1 +764 757 1 +764 758 1 +764 763 1 +764 765 1 +764 766 1 +764 767 0 +764 768 1 +764 1109 0 +764 1110 0 +764 1111 -1 +764 1112 1 +764 1119 1 +764 1120 1 +765 766 0 +765 789 1 +766 790 1 +767 768 1 +767 791 1 +769 405 1 +769 406 1 +769 409 1 +769 767 1 +769 768 0 +769 773 0 +769 774 1 +769 775 1 +769 776 0 +769 781 0 +769 782 0 +769 783 0 +769 784 0 +770 405 1 +770 406 -1 +770 410 1 +770 767 1 +770 768 1 +770 769 1 +770 773 1 +770 774 1 +770 775 1 +770 776 1 +770 781 1 +770 782 0 +770 783 1 +770 784 1 +771 405 0 +771 406 1 +771 411 1 +771 757 1 +771 758 1 +771 759 0 +771 760 1 +771 767 1 +771 768 0 +771 773 1 +771 774 1 +771 775 0 +771 776 1 +772 405 -1 +772 406 0 +772 412 1 +772 757 1 +772 758 1 +772 759 1 +772 760 -1 +772 767 1 +772 768 0 +772 771 0 +772 773 0 +772 774 1 +772 775 1 +772 776 1 +773 774 1 +773 797 1 +774 798 0 +775 776 0 +775 799 1 +776 800 1 +777 417 0 +777 773 1 +777 774 1 +777 781 0 +777 782 1 +777 783 1 +777 784 1 +777 789 0 +777 790 0 +777 791 0 +777 1135 1 +777 1136 1 +778 418 1 +778 773 1 +778 774 1 +778 777 0 +778 781 0 +778 782 0 +778 783 1 +778 784 1 +778 789 1 +778 790 0 +778 791 1 +778 1135 0 +778 1136 0 +779 419 1 +779 765 1 +779 766 1 +779 767 1 +779 768 0 +779 773 1 +779 774 1 +779 781 1 +779 782 1 +779 783 1 +779 784 1 +779 1135 1 +779 1136 1 +780 420 0 +780 765 0 +780 766 1 +780 767 1 +780 768 1 +780 773 1 +780 774 1 +780 779 1 +780 781 1 +780 782 1 +780 783 -1 +780 784 0 +780 1135 1 +780 1136 1 +781 782 0 +781 805 -1 +782 806 0 +783 784 0 +783 807 1 +784 808 0 +785 425 -1 +785 781 1 +785 782 1 +785 789 1 +785 790 -1 +785 791 1 +785 1143 1 +785 1144 1 +785 1157 0 +785 1158 0 +785 1159 0 +785 1160 1 +786 426 -1 +786 781 1 +786 782 1 +786 785 1 +786 789 1 +786 790 1 +786 791 -1 +786 1143 -1 +786 1144 1 +786 1157 1 +786 1158 -1 +786 1159 1 +786 1160 1 +787 427 1 +787 781 0 +787 782 0 +787 789 1 +787 790 0 +787 791 0 +787 1133 0 +787 1134 1 +787 1135 1 +787 1136 1 +787 1143 0 +787 1144 1 +788 428 1 +788 781 1 +788 782 1 +788 787 1 +788 789 1 +788 790 1 +788 791 -1 +788 1133 1 +788 1134 1 +788 1135 0 +788 1136 0 +788 1143 1 +788 1144 1 +789 790 1 +789 813 0 +790 814 1 +791 815 1 +793 429 1 +793 430 1 +793 433 -1 +793 791 1 +793 797 1 +793 798 1 +793 799 1 +793 800 -1 +793 805 1 +793 806 1 +793 807 1 +793 808 1 +794 429 1 +794 430 0 +794 434 1 +794 791 0 +794 793 1 +794 797 0 +794 798 0 +794 799 1 +794 800 0 +794 805 0 +794 806 1 +794 807 0 +794 808 0 +795 429 1 +795 430 1 +795 435 1 +795 781 0 +795 782 1 +795 783 1 +795 784 1 +795 791 -1 +795 797 1 +795 798 0 +795 799 0 +795 800 1 +796 429 1 +796 430 0 +796 436 1 +796 781 0 +796 782 0 +796 783 1 +796 784 1 +796 791 -1 +796 795 1 +796 797 1 +796 798 1 +796 799 0 +796 800 1 +797 798 1 +797 821 1 +798 822 0 +799 800 1 +799 823 1 +800 824 0 +801 441 1 +801 797 1 +801 798 1 +801 805 1 +801 806 0 +801 807 1 +801 808 1 +801 813 0 +801 814 0 +801 815 1 +801 816 1 +801 1159 1 +801 1160 1 +802 442 1 +802 797 1 +802 798 1 +802 801 -1 +802 805 1 +802 806 1 +802 807 -1 +802 808 0 +802 813 0 +802 814 0 +802 815 0 +802 816 1 +802 1159 1 +802 1160 0 +803 443 1 +803 789 0 +803 790 0 +803 791 0 +803 797 -1 +803 798 1 +803 805 1 +803 806 0 +803 807 1 +803 808 1 +803 1159 -1 +803 1160 0 +804 444 1 +804 789 1 +804 790 -1 +804 791 1 +804 797 1 +804 798 0 +804 803 1 +804 805 1 +804 806 0 +804 807 1 +804 808 0 +804 1159 1 +804 1160 1 +805 806 1 +805 829 -1 +806 830 1 +807 808 0 +807 831 1 +808 832 0 +809 449 0 +809 805 -1 +809 806 0 +809 813 1 +809 814 0 +809 815 1 +809 816 1 +809 1167 0 +809 1168 1 +809 1181 1 +809 1182 0 +809 1183 0 +809 1184 1 +810 450 0 +810 805 1 +810 806 1 +810 809 1 +810 813 1 +810 814 0 +810 815 -1 +810 816 1 +810 1167 1 +810 1168 1 +810 1181 1 +810 1182 1 +810 1183 1 +810 1184 -1 +811 451 0 +811 805 1 +811 806 0 +811 813 1 +811 814 1 +811 815 -1 +811 816 1 +811 1157 1 +811 1158 0 +811 1159 0 +811 1160 -1 +811 1167 0 +811 1168 0 +812 452 1 +812 805 1 +812 806 -1 +812 811 0 +812 813 1 +812 814 1 +812 815 0 +812 816 1 +812 1157 1 +812 1158 0 +812 1159 1 +812 1160 1 +812 1167 0 +812 1168 1 +813 814 0 +813 837 1 +814 838 1 +815 816 1 +815 839 0 +816 840 1 +817 453 1 +817 454 0 +817 457 1 +817 815 1 +817 816 1 +817 821 1 +817 822 1 +817 823 1 +817 824 0 +817 829 1 +817 830 1 +817 831 0 +817 832 1 +818 453 0 +818 454 1 +818 458 0 +818 815 1 +818 816 0 +818 817 1 +818 821 1 +818 822 -1 +818 823 0 +818 824 -1 +818 829 1 +818 830 -1 +818 831 1 +818 832 1 +819 453 1 +819 454 1 +819 459 0 +819 805 0 +819 806 1 +819 807 1 +819 808 1 +819 815 0 +819 816 1 +819 821 0 +819 822 1 +819 823 0 +819 824 1 +820 453 1 +820 454 1 +820 460 -1 +820 805 1 +820 806 0 +820 807 1 +820 808 1 +820 815 -1 +820 816 0 +820 819 1 +820 821 1 +820 822 0 +820 823 0 +820 824 0 +821 822 0 +821 845 0 +822 846 1 +823 824 1 +823 847 -1 +824 848 1 +825 465 0 +825 821 0 +825 822 1 +825 829 1 +825 830 -1 +825 831 0 +825 832 1 +825 837 1 +825 838 -1 +825 839 1 +825 840 1 +825 1183 1 +825 1184 1 +826 466 1 +826 821 0 +826 822 1 +826 825 0 +826 829 1 +826 830 0 +826 831 1 +826 832 -1 +826 837 0 +826 838 0 +826 839 0 +826 840 1 +826 1183 1 +826 1184 0 +827 467 0 +827 813 0 +827 814 0 +827 815 0 +827 816 0 +827 821 1 +827 822 0 +827 829 -1 +827 830 0 +827 831 0 +827 832 1 +827 1183 1 +827 1184 0 +828 468 0 +828 813 -1 +828 814 0 +828 815 1 +828 816 1 +828 821 1 +828 822 -1 +828 827 1 +828 829 1 +828 830 1 +828 831 0 +828 832 -1 +828 1183 0 +828 1184 1 +829 830 0 +829 853 1 +830 854 1 +831 832 0 +831 855 -1 +832 856 1 +833 473 0 +833 829 -1 +833 830 1 +833 837 -1 +833 838 0 +833 839 0 +833 840 1 +833 1191 1 +833 1192 -1 +833 1205 1 +833 1206 1 +833 1207 1 +833 1208 1 +834 474 1 +834 829 1 +834 830 -1 +834 833 1 +834 837 0 +834 838 1 +834 839 0 +834 840 1 +834 1191 1 +834 1192 1 +834 1205 0 +834 1206 0 +834 1207 1 +834 1208 0 +835 475 0 +835 829 1 +835 830 1 +835 837 0 +835 838 0 +835 839 1 +835 840 1 +835 1181 1 +835 1182 1 +835 1183 1 +835 1184 1 +835 1191 1 +835 1192 1 +836 476 0 +836 829 1 +836 830 0 +836 835 1 +836 837 1 +836 838 0 +836 839 0 +836 840 0 +836 1181 0 +836 1182 1 +836 1183 1 +836 1184 -1 +836 1191 -1 +836 1192 1 +837 838 1 +837 861 0 +838 862 0 +839 840 0 +839 863 1 +840 864 0 +841 477 0 +841 478 1 +841 481 1 +841 839 1 +841 840 0 +841 845 -1 +841 846 1 +841 847 0 +841 848 -1 +841 853 1 +841 854 0 +841 855 0 +841 856 0 +842 477 0 +842 478 1 +842 482 1 +842 839 1 +842 840 1 +842 841 0 +842 845 1 +842 846 1 +842 847 1 +842 848 1 +842 853 0 +842 854 0 +842 855 1 +842 856 -1 +843 477 0 +843 478 1 +843 483 0 +843 829 1 +843 830 0 +843 831 1 +843 832 0 +843 839 0 +843 840 -1 +843 845 -1 +843 846 1 +843 847 1 +843 848 -1 +844 477 0 +844 478 0 +844 484 0 +844 829 1 +844 830 0 +844 831 -1 +844 832 1 +844 839 0 +844 840 0 +844 843 0 +844 845 1 +844 846 0 +844 847 1 +844 848 0 +845 846 0 +845 869 0 +846 870 1 +847 848 1 +847 871 1 +848 872 -1 +849 489 0 +849 845 0 +849 846 1 +849 853 1 +849 854 0 +849 855 1 +849 856 1 +849 861 0 +849 862 1 +849 863 1 +849 864 1 +849 1207 0 +849 1208 -1 +850 490 0 +850 845 1 +850 846 0 +850 849 0 +850 853 1 +850 854 1 +850 855 1 +850 856 0 +850 861 1 +850 862 1 +850 863 1 +850 864 -1 +850 1207 0 +850 1208 1 +851 491 1 +851 837 1 +851 838 0 +851 839 -1 +851 840 1 +851 845 1 +851 846 1 +851 853 1 +851 854 0 +851 855 1 +851 856 1 +851 1207 1 +851 1208 1 +852 492 0 +852 837 1 +852 838 1 +852 839 1 +852 840 1 +852 845 0 +852 846 1 +852 851 1 +852 853 -1 +852 854 0 +852 855 0 +852 856 1 +852 1207 0 +852 1208 0 +853 854 1 +853 877 1 +854 878 1 +855 856 1 +855 879 0 +856 880 0 +857 497 1 +857 853 1 +857 854 1 +857 861 1 +857 862 1 +857 863 1 +857 864 0 +857 1215 -1 +857 1216 1 +857 1229 0 +857 1230 1 +857 1231 1 +857 1232 0 +858 498 -1 +858 853 1 +858 854 0 +858 857 1 +858 861 1 +858 862 1 +858 863 1 +858 864 0 +858 1215 1 +858 1216 0 +858 1229 1 +858 1230 1 +858 1231 0 +858 1232 1 +859 499 1 +859 853 1 +859 854 0 +859 861 0 +859 862 0 +859 863 0 +859 864 1 +859 1205 1 +859 1206 1 +859 1207 1 +859 1208 -1 +859 1215 1 +859 1216 1 +860 500 0 +860 853 0 +860 854 1 +860 859 0 +860 861 -1 +860 862 1 +860 863 1 +860 864 1 +860 1205 1 +860 1206 0 +860 1207 0 +860 1208 1 +860 1215 0 +860 1216 0 +861 862 1 +861 885 1 +862 886 0 +863 864 -1 +863 887 0 +864 888 1 +865 501 1 +865 502 -1 +865 505 0 +865 863 1 +865 864 0 +865 869 0 +865 870 1 +865 871 0 +865 872 0 +865 877 1 +865 878 1 +865 879 1 +865 880 1 +866 501 0 +866 502 1 +866 506 1 +866 863 1 +866 864 1 +866 865 1 +866 869 1 +866 870 1 +866 871 1 +866 872 1 +866 877 1 +866 878 0 +866 879 0 +866 880 1 +867 501 0 +867 502 0 +867 507 0 +867 853 1 +867 854 1 +867 855 1 +867 856 1 +867 863 1 +867 864 1 +867 869 1 +867 870 1 +867 871 0 +867 872 0 +868 501 1 +868 502 0 +868 508 0 +868 853 -1 +868 854 0 +868 855 0 +868 856 1 +868 863 -1 +868 864 0 +868 867 1 +868 869 0 +868 870 0 +868 871 1 +868 872 1 +869 870 1 +869 893 1 +870 894 1 +871 872 0 +871 895 0 +872 896 1 +873 513 0 +873 869 0 +873 870 0 +873 877 1 +873 878 1 +873 879 0 +873 880 0 +873 885 1 +873 886 1 +873 887 1 +873 888 1 +873 1231 -1 +873 1232 1 +874 514 1 +874 869 0 +874 870 1 +874 873 1 +874 877 1 +874 878 1 +874 879 0 +874 880 0 +874 885 -1 +874 886 0 +874 887 1 +874 888 0 +874 1231 1 +874 1232 1 +875 515 1 +875 861 1 +875 862 0 +875 863 0 +875 864 1 +875 869 0 +875 870 1 +875 877 0 +875 878 1 +875 879 0 +875 880 0 +875 1231 0 +875 1232 1 +876 516 1 +876 861 0 +876 862 0 +876 863 0 +876 864 0 +876 869 1 +876 870 1 +876 875 -1 +876 877 1 +876 878 1 +876 879 1 +876 880 1 +876 1231 -1 +876 1232 1 +877 878 1 +877 901 1 +878 902 1 +879 880 1 +879 903 1 +880 904 0 +881 521 0 +881 877 1 +881 878 1 +881 885 -1 +881 886 0 +881 887 1 +881 888 -1 +881 1239 0 +881 1240 0 +881 1253 0 +881 1254 0 +881 1255 1 +881 1256 1 +882 522 0 +882 877 -1 +882 878 1 +882 881 1 +882 885 0 +882 886 0 +882 887 1 +882 888 0 +882 1239 1 +882 1240 0 +882 1253 1 +882 1254 1 +882 1255 1 +882 1256 -1 +883 523 1 +883 877 1 +883 878 0 +883 885 1 +883 886 -1 +883 887 1 +883 888 1 +883 1229 0 +883 1230 0 +883 1231 1 +883 1232 0 +883 1239 1 +883 1240 0 +884 524 0 +884 877 0 +884 878 1 +884 883 0 +884 885 0 +884 886 0 +884 887 0 +884 888 1 +884 1229 0 +884 1230 0 +884 1231 -1 +884 1232 0 +884 1239 1 +884 1240 1 +885 886 -1 +885 909 1 +886 910 1 +887 888 0 +887 911 1 +888 912 -1 +889 525 1 +889 526 1 +889 529 -1 +889 887 1 +889 888 1 +889 893 0 +889 894 0 +889 895 0 +889 896 1 +889 901 1 +889 902 1 +889 903 0 +889 904 1 +890 525 0 +890 526 1 +890 530 1 +890 887 1 +890 888 0 +890 889 1 +890 893 1 +890 894 1 +890 895 1 +890 896 0 +890 901 1 +890 902 0 +890 903 1 +890 904 0 +891 525 1 +891 526 1 +891 531 1 +891 877 1 +891 878 -1 +891 879 1 +891 880 1 +891 887 1 +891 888 -1 +891 893 1 +891 894 0 +891 895 1 +891 896 1 +892 525 0 +892 526 0 +892 532 0 +892 877 0 +892 878 1 +892 879 0 +892 880 1 +892 887 1 +892 888 0 +892 891 1 +892 893 1 +892 894 0 +892 895 0 +892 896 1 +893 894 1 +893 917 1 +894 918 1 +895 896 0 +895 919 0 +896 920 -1 +897 537 0 +897 893 1 +897 894 0 +897 901 0 +897 902 0 +897 903 0 +897 904 1 +897 909 -1 +897 910 1 +897 911 1 +897 912 0 +897 1255 1 +897 1256 0 +898 538 1 +898 893 1 +898 894 -1 +898 897 1 +898 901 1 +898 902 0 +898 903 0 +898 904 0 +898 909 1 +898 910 0 +898 911 0 +898 912 -1 +898 1255 1 +898 1256 0 +899 539 1 +899 885 0 +899 886 0 +899 887 1 +899 888 -1 +899 893 -1 +899 894 1 +899 901 0 +899 902 1 +899 903 1 +899 904 0 +899 1255 1 +899 1256 -1 +900 540 0 +900 885 1 +900 886 0 +900 887 1 +900 888 1 +900 893 -1 +900 894 1 +900 899 0 +900 901 1 +900 902 1 +900 903 1 +900 904 1 +900 1255 1 +900 1256 0 +901 902 0 +901 925 1 +902 926 1 +903 904 1 +903 927 0 +904 928 -1 +905 545 -1 +905 901 1 +905 902 -1 +905 909 -1 +905 910 1 +905 911 1 +905 912 1 +905 1263 0 +905 1264 -1 +905 1277 1 +905 1278 -1 +905 1279 1 +905 1280 0 +906 546 1 +906 901 1 +906 902 1 +906 905 1 +906 909 0 +906 910 1 +906 911 0 +906 912 1 +906 1263 1 +906 1264 0 +906 1277 -1 +906 1278 1 +906 1279 0 +906 1280 1 +907 547 0 +907 901 1 +907 902 0 +907 909 0 +907 910 -1 +907 911 0 +907 912 0 +907 1253 0 +907 1254 1 +907 1255 0 +907 1256 1 +907 1263 1 +907 1264 0 +908 548 1 +908 901 0 +908 902 -1 +908 907 1 +908 909 1 +908 910 0 +908 911 1 +908 912 1 +908 1253 1 +908 1254 1 +908 1255 1 +908 1256 0 +908 1263 1 +908 1264 1 +909 910 1 +909 933 0 +910 934 1 +911 912 0 +911 935 1 +912 936 1 +913 549 0 +913 550 -1 +913 553 0 +913 911 1 +913 912 1 +913 917 1 +913 918 0 +913 919 1 +913 920 0 +913 925 0 +913 926 1 +913 927 0 +913 928 0 +914 549 1 +914 550 -1 +914 554 1 +914 911 1 +914 912 0 +914 913 1 +914 917 1 +914 918 0 +914 919 -1 +914 920 1 +914 925 0 +914 926 0 +914 927 1 +914 928 0 +915 549 -1 +915 550 1 +915 555 0 +915 901 0 +915 902 -1 +915 903 0 +915 904 1 +915 911 0 +915 912 -1 +915 917 -1 +915 918 0 +915 919 0 +915 920 0 +916 549 1 +916 550 0 +916 556 0 +916 901 1 +916 902 1 +916 903 0 +916 904 0 +916 911 1 +916 912 -1 +916 915 1 +916 917 1 +916 918 1 +916 919 1 +916 920 1 +917 918 1 +917 941 1 +918 942 1 +919 920 1 +919 943 1 +920 944 -1 +921 561 1 +921 917 1 +921 918 1 +921 925 1 +921 926 1 +921 927 0 +921 928 1 +921 933 1 +921 934 -1 +921 935 -1 +921 936 1 +921 1279 1 +921 1280 1 +922 562 1 +922 917 0 +922 918 1 +922 921 1 +922 925 1 +922 926 1 +922 927 1 +922 928 1 +922 933 0 +922 934 1 +922 935 1 +922 936 1 +922 1279 1 +922 1280 0 +923 563 1 +923 909 1 +923 910 0 +923 911 -1 +923 912 0 +923 917 0 +923 918 -1 +923 925 0 +923 926 1 +923 927 1 +923 928 0 +923 1279 -1 +923 1280 1 +924 564 0 +924 909 1 +924 910 1 +924 911 1 +924 912 0 +924 917 1 +924 918 -1 +924 923 1 +924 925 1 +924 926 1 +924 927 0 +924 928 1 +924 1279 0 +924 1280 1 +925 926 1 +925 949 1 +926 950 0 +927 928 0 +927 951 -1 +928 952 1 +929 569 0 +929 925 1 +929 926 0 +929 933 0 +929 934 1 +929 935 0 +929 936 0 +929 1287 1 +929 1288 0 +929 1301 0 +929 1302 1 +929 1303 0 +929 1304 0 +930 570 1 +930 925 1 +930 926 0 +930 929 0 +930 933 0 +930 934 1 +930 935 1 +930 936 1 +930 1287 1 +930 1288 0 +930 1301 1 +930 1302 0 +930 1303 1 +930 1304 0 +931 571 0 +931 925 1 +931 926 1 +931 933 1 +931 934 0 +931 935 0 +931 936 0 +931 1277 -1 +931 1278 1 +931 1279 1 +931 1280 1 +931 1287 -1 +931 1288 1 +932 572 0 +932 925 1 +932 926 0 +932 931 1 +932 933 1 +932 934 0 +932 935 0 +932 936 1 +932 1277 1 +932 1278 1 +932 1279 1 +932 1280 1 +932 1287 1 +932 1288 1 +933 934 0 +933 957 0 +934 958 1 +935 936 1 +935 959 1 +936 960 1 +937 573 1 +937 574 0 +937 577 1 +937 935 1 +937 936 1 +937 941 -1 +937 942 1 +937 943 1 +937 944 0 +937 949 1 +937 950 1 +937 951 0 +937 952 -1 +938 573 0 +938 574 1 +938 578 0 +938 935 0 +938 936 1 +938 937 1 +938 941 0 +938 942 1 +938 943 -1 +938 944 1 +938 949 1 +938 950 0 +938 951 1 +938 952 0 +939 573 0 +939 574 1 +939 579 1 +939 925 1 +939 926 1 +939 927 1 +939 928 0 +939 935 0 +939 936 1 +939 941 1 +939 942 1 +939 943 1 +939 944 -1 +940 573 -1 +940 574 0 +940 580 0 +940 925 0 +940 926 1 +940 927 1 +940 928 1 +940 935 0 +940 936 0 +940 939 1 +940 941 1 +940 942 1 +940 943 0 +940 944 0 +941 942 1 +941 965 1 +942 966 1 +943 944 1 +943 967 1 +944 968 1 +945 585 1 +945 941 1 +945 942 1 +945 949 1 +945 950 0 +945 951 0 +945 952 0 +945 957 1 +945 958 0 +945 959 1 +945 960 1 +945 1303 -1 +945 1304 1 +946 586 1 +946 941 0 +946 942 1 +946 945 1 +946 949 0 +946 950 0 +946 951 -1 +946 952 1 +946 957 1 +946 958 1 +946 959 1 +946 960 1 +946 1303 1 +946 1304 0 +947 587 1 +947 933 0 +947 934 1 +947 935 0 +947 936 1 +947 941 1 +947 942 1 +947 949 1 +947 950 1 +947 951 1 +947 952 -1 +947 1303 0 +947 1304 -1 +948 588 0 +948 933 1 +948 934 0 +948 935 1 +948 936 1 +948 941 0 +948 942 0 +948 947 1 +948 949 0 +948 950 0 +948 951 0 +948 952 -1 +948 1303 0 +948 1304 0 +949 950 1 +949 973 1 +950 974 1 +951 952 0 +951 975 1 +952 976 -1 +953 593 1 +953 949 0 +953 950 0 +953 957 0 +953 958 1 +953 959 1 +953 960 1 +953 1311 0 +953 1312 1 +953 1325 1 +953 1326 1 +953 1327 1 +953 1328 1 +954 594 1 +954 949 0 +954 950 1 +954 953 0 +954 957 1 +954 958 1 +954 959 0 +954 960 1 +954 1311 0 +954 1312 -1 +954 1325 1 +954 1326 0 +954 1327 1 +954 1328 1 +955 595 1 +955 949 0 +955 950 -1 +955 957 1 +955 958 1 +955 959 -1 +955 960 1 +955 1301 1 +955 1302 1 +955 1303 0 +955 1304 -1 +955 1311 0 +955 1312 1 +956 596 0 +956 949 -1 +956 950 1 +956 955 0 +956 957 1 +956 958 -1 +956 959 0 +956 960 -1 +956 1301 1 +956 1302 -1 +956 1303 1 +956 1304 -1 +956 1311 1 +956 1312 1 +957 958 1 +957 981 -1 +958 982 0 +959 960 0 +959 983 0 +960 984 1 +961 597 1 +961 598 0 +961 601 1 +961 959 1 +961 960 1 +961 965 1 +961 966 1 +961 967 -1 +961 968 -1 +961 973 1 +961 974 0 +961 975 1 +961 976 1 +962 597 1 +962 598 1 +962 602 1 +962 959 1 +962 960 -1 +962 961 1 +962 965 1 +962 966 1 +962 967 0 +962 968 1 +962 973 1 +962 974 1 +962 975 1 +962 976 0 +963 597 0 +963 598 1 +963 603 0 +963 949 0 +963 950 1 +963 951 1 +963 952 1 +963 959 1 +963 960 0 +963 965 1 +963 966 1 +963 967 1 +963 968 0 +964 597 1 +964 598 1 +964 604 0 +964 949 1 +964 950 1 +964 951 1 +964 952 0 +964 959 1 +964 960 1 +964 963 1 +964 965 1 +964 966 0 +964 967 1 +964 968 0 +965 966 0 +965 989 0 +966 990 0 +967 968 -1 +967 991 1 +968 992 -1 +969 609 1 +969 965 1 +969 966 1 +969 973 -1 +969 974 1 +969 975 0 +969 976 1 +969 981 1 +969 982 1 +969 983 -1 +969 984 1 +969 1327 1 +969 1328 1 +970 610 1 +970 965 1 +970 966 1 +970 969 1 +970 973 0 +970 974 0 +970 975 1 +970 976 1 +970 981 1 +970 982 1 +970 983 0 +970 984 1 +970 1327 0 +970 1328 1 +971 611 1 +971 957 1 +971 958 0 +971 959 0 +971 960 0 +971 965 -1 +971 966 1 +971 973 1 +971 974 -1 +971 975 0 +971 976 1 +971 1327 1 +971 1328 -1 +972 612 1 +972 957 0 +972 958 1 +972 959 1 +972 960 0 +972 965 1 +972 966 1 +972 971 0 +972 973 1 +972 974 1 +972 975 1 +972 976 0 +972 1327 0 +972 1328 1 +973 974 1 +973 997 1 +974 998 0 +975 976 0 +975 999 0 +976 1000 0 +977 617 1 +977 973 1 +977 974 1 +977 981 1 +977 982 0 +977 983 1 +977 984 1 +977 1335 0 +977 1336 0 +977 1349 1 +977 1350 1 +977 1351 0 +977 1352 0 +978 618 0 +978 973 0 +978 974 1 +978 977 0 +978 981 1 +978 982 0 +978 983 1 +978 984 1 +978 1335 1 +978 1336 1 +978 1349 0 +978 1350 1 +978 1351 1 +978 1352 1 +979 619 0 +979 973 0 +979 974 0 +979 981 -1 +979 982 1 +979 983 -1 +979 984 1 +979 1325 0 +979 1326 1 +979 1327 1 +979 1328 1 +979 1335 1 +979 1336 0 +980 620 1 +980 973 1 +980 974 1 +980 979 1 +980 981 1 +980 982 1 +980 983 1 +980 984 1 +980 1325 1 +980 1326 0 +980 1327 1 +980 1328 0 +980 1335 -1 +980 1336 1 +981 982 -1 +981 1005 0 +982 1006 1 +983 984 1 +983 1007 1 +984 1008 0 +985 621 1 +985 622 1 +985 625 1 +985 983 1 +985 984 1 +985 989 1 +985 990 1 +985 991 1 +985 992 1 +985 997 1 +985 998 -1 +985 999 1 +985 1000 0 +986 621 -1 +986 622 0 +986 626 1 +986 983 0 +986 984 0 +986 985 -1 +986 989 0 +986 990 0 +986 991 0 +986 992 1 +986 997 1 +986 998 0 +986 999 1 +986 1000 1 +987 621 1 +987 622 0 +987 627 1 +987 973 0 +987 974 0 +987 975 1 +987 976 1 +987 983 0 +987 984 0 +987 989 1 +987 990 0 +987 991 0 +987 992 1 +988 621 1 +988 622 1 +988 628 -1 +988 973 1 +988 974 0 +988 975 0 +988 976 -1 +988 983 0 +988 984 1 +988 987 1 +988 989 1 +988 990 0 +988 991 1 +988 992 0 +989 990 1 +989 1013 1 +990 1014 0 +991 992 1 +991 1015 0 +992 1016 0 +993 633 1 +993 989 1 +993 990 0 +993 997 1 +993 998 0 +993 999 1 +993 1000 0 +993 1005 0 +993 1006 1 +993 1007 0 +993 1008 1 +993 1351 0 +993 1352 0 +994 634 1 +994 989 -1 +994 990 1 +994 993 1 +994 997 -1 +994 998 1 +994 999 1 +994 1000 1 +994 1005 1 +994 1006 1 +994 1007 1 +994 1008 0 +994 1351 1 +994 1352 -1 +995 635 1 +995 981 1 +995 982 0 +995 983 0 +995 984 1 +995 989 1 +995 990 1 +995 997 1 +995 998 -1 +995 999 0 +995 1000 1 +995 1351 0 +995 1352 -1 +996 636 0 +996 981 1 +996 982 0 +996 983 0 +996 984 1 +996 989 0 +996 990 1 +996 995 1 +996 997 -1 +996 998 1 +996 999 1 +996 1000 1 +996 1351 1 +996 1352 1 +997 998 0 +997 1021 1 +998 1022 1 +999 1000 1 +999 1023 1 +1000 1024 0 +1001 641 1 +1001 997 0 +1001 998 0 +1001 1005 0 +1001 1006 -1 +1001 1007 1 +1001 1008 1 +1001 1359 0 +1001 1360 1 +1001 1373 1 +1001 1374 1 +1001 1375 1 +1001 1376 1 +1002 642 1 +1002 997 1 +1002 998 1 +1002 1001 1 +1002 1005 1 +1002 1006 0 +1002 1007 0 +1002 1008 -1 +1002 1359 0 +1002 1360 1 +1002 1373 -1 +1002 1374 1 +1002 1375 -1 +1002 1376 1 +1003 643 0 +1003 997 1 +1003 998 1 +1003 1005 1 +1003 1006 1 +1003 1007 -1 +1003 1008 1 +1003 1349 0 +1003 1350 0 +1003 1351 0 +1003 1352 1 +1003 1359 0 +1003 1360 1 +1004 644 1 +1004 997 1 +1004 998 1 +1004 1003 1 +1004 1005 0 +1004 1006 1 +1004 1007 -1 +1004 1008 1 +1004 1349 1 +1004 1350 1 +1004 1351 1 +1004 1352 0 +1004 1359 0 +1004 1360 1 +1005 1006 1 +1005 1029 1 +1006 1030 0 +1007 1008 0 +1007 1031 1 +1008 1032 1 +1009 645 -1 +1009 646 1 +1009 649 0 +1009 1007 1 +1009 1008 1 +1009 1013 1 +1009 1014 1 +1009 1015 1 +1009 1016 0 +1009 1021 0 +1009 1022 0 +1009 1023 1 +1009 1024 -1 +1010 645 1 +1010 646 1 +1010 650 1 +1010 1007 0 +1010 1008 1 +1010 1009 0 +1010 1013 1 +1010 1014 0 +1010 1015 0 +1010 1016 0 +1010 1021 1 +1010 1022 -1 +1010 1023 -1 +1010 1024 0 +1011 645 0 +1011 646 0 +1011 651 -1 +1011 997 1 +1011 998 0 +1011 999 1 +1011 1000 0 +1011 1007 1 +1011 1008 1 +1011 1013 0 +1011 1014 1 +1011 1015 0 +1011 1016 0 +1012 645 1 +1012 646 1 +1012 652 1 +1012 997 0 +1012 998 1 +1012 999 1 +1012 1000 1 +1012 1007 0 +1012 1008 0 +1012 1011 0 +1012 1013 1 +1012 1014 1 +1012 1015 0 +1012 1016 1 +1013 1014 1 +1013 1037 1 +1014 1038 1 +1015 1016 0 +1015 1039 -1 +1016 1040 1 +1017 657 1 +1017 1013 1 +1017 1014 0 +1017 1021 1 +1017 1022 1 +1017 1023 1 +1017 1024 1 +1017 1029 1 +1017 1030 0 +1017 1031 1 +1017 1032 1 +1017 1375 1 +1017 1376 0 +1018 658 -1 +1018 1013 -1 +1018 1014 1 +1018 1017 0 +1018 1021 0 +1018 1022 1 +1018 1023 -1 +1018 1024 0 +1018 1029 0 +1018 1030 1 +1018 1031 1 +1018 1032 -1 +1018 1375 1 +1018 1376 1 +1019 659 0 +1019 1005 0 +1019 1006 1 +1019 1007 0 +1019 1008 1 +1019 1013 1 +1019 1014 0 +1019 1021 0 +1019 1022 1 +1019 1023 0 +1019 1024 -1 +1019 1375 1 +1019 1376 1 +1020 660 1 +1020 1005 -1 +1020 1006 0 +1020 1007 1 +1020 1008 1 +1020 1013 1 +1020 1014 1 +1020 1019 -1 +1020 1021 1 +1020 1022 0 +1020 1023 0 +1020 1024 1 +1020 1375 1 +1020 1376 1 +1021 1022 -1 +1021 1045 0 +1022 1046 1 +1023 1024 1 +1023 1047 0 +1024 1048 0 +1025 665 1 +1025 1021 1 +1025 1022 1 +1025 1029 1 +1025 1030 1 +1025 1031 1 +1025 1032 1 +1025 1383 1 +1025 1384 0 +1025 1397 0 +1025 1398 1 +1025 1399 -1 +1025 1400 1 +1026 666 1 +1026 1021 1 +1026 1022 1 +1026 1025 1 +1026 1029 1 +1026 1030 1 +1026 1031 0 +1026 1032 1 +1026 1383 1 +1026 1384 1 +1026 1397 0 +1026 1398 1 +1026 1399 0 +1026 1400 1 +1027 667 1 +1027 1021 1 +1027 1022 0 +1027 1029 -1 +1027 1030 0 +1027 1031 -1 +1027 1032 0 +1027 1373 1 +1027 1374 0 +1027 1375 -1 +1027 1376 0 +1027 1383 0 +1027 1384 1 +1028 668 0 +1028 1021 0 +1028 1022 0 +1028 1027 -1 +1028 1029 0 +1028 1030 1 +1028 1031 1 +1028 1032 1 +1028 1373 1 +1028 1374 -1 +1028 1375 0 +1028 1376 -1 +1028 1383 0 +1028 1384 0 +1029 1030 1 +1029 1053 1 +1030 1054 1 +1031 1032 1 +1031 1055 0 +1032 1056 1 +1033 669 1 +1033 670 1 +1033 673 1 +1033 1031 0 +1033 1032 0 +1033 1037 1 +1033 1038 0 +1033 1039 0 +1033 1040 1 +1033 1045 1 +1033 1046 0 +1033 1047 0 +1033 1048 1 +1034 669 1 +1034 670 -1 +1034 674 1 +1034 1031 0 +1034 1032 0 +1034 1033 1 +1034 1037 0 +1034 1038 1 +1034 1039 0 +1034 1040 1 +1034 1045 0 +1034 1046 0 +1034 1047 0 +1034 1048 1 +1035 669 1 +1035 670 1 +1035 675 0 +1035 1021 1 +1035 1022 1 +1035 1023 0 +1035 1024 1 +1035 1031 1 +1035 1032 1 +1035 1037 1 +1035 1038 1 +1035 1039 -1 +1035 1040 1 +1036 669 0 +1036 670 1 +1036 676 -1 +1036 1021 1 +1036 1022 1 +1036 1023 -1 +1036 1024 1 +1036 1031 1 +1036 1032 1 +1036 1035 1 +1036 1037 0 +1036 1038 0 +1036 1039 1 +1036 1040 1 +1037 1038 0 +1037 1061 -1 +1038 1062 1 +1039 1040 0 +1039 1063 0 +1040 1064 0 +1041 681 1 +1041 1037 1 +1041 1038 0 +1041 1045 0 +1041 1046 1 +1041 1047 0 +1041 1048 1 +1041 1053 0 +1041 1054 1 +1041 1055 1 +1041 1056 1 +1041 1399 1 +1041 1400 -1 +1042 682 1 +1042 1037 1 +1042 1038 1 +1042 1041 1 +1042 1045 0 +1042 1046 1 +1042 1047 0 +1042 1048 1 +1042 1053 1 +1042 1054 1 +1042 1055 1 +1042 1056 1 +1042 1399 0 +1042 1400 1 +1043 683 1 +1043 1029 1 +1043 1030 1 +1043 1031 0 +1043 1032 1 +1043 1037 1 +1043 1038 1 +1043 1045 1 +1043 1046 1 +1043 1047 1 +1043 1048 1 +1043 1399 1 +1043 1400 1 +1044 684 0 +1044 1029 0 +1044 1030 1 +1044 1031 1 +1044 1032 0 +1044 1037 1 +1044 1038 1 +1044 1043 1 +1044 1045 0 +1044 1046 0 +1044 1047 0 +1044 1048 1 +1044 1399 0 +1044 1400 0 +1045 1046 -1 +1045 1069 1 +1046 1070 0 +1047 1048 0 +1047 1071 1 +1048 1072 1 +1049 689 1 +1049 1045 1 +1049 1046 0 +1049 1053 1 +1049 1054 1 +1049 1055 1 +1049 1056 1 +1049 1407 0 +1049 1408 0 +1049 1421 1 +1049 1422 1 +1049 1423 0 +1049 1424 1 +1050 690 1 +1050 1045 1 +1050 1046 1 +1050 1049 0 +1050 1053 0 +1050 1054 1 +1050 1055 1 +1050 1056 1 +1050 1407 -1 +1050 1408 1 +1050 1421 1 +1050 1422 1 +1050 1423 0 +1050 1424 0 +1051 691 1 +1051 1045 0 +1051 1046 1 +1051 1053 1 +1051 1054 1 +1051 1055 0 +1051 1056 0 +1051 1397 1 +1051 1398 -1 +1051 1399 1 +1051 1400 -1 +1051 1407 1 +1051 1408 0 +1052 692 1 +1052 1045 0 +1052 1046 -1 +1052 1051 1 +1052 1053 1 +1052 1054 -1 +1052 1055 1 +1052 1056 0 +1052 1397 1 +1052 1398 1 +1052 1399 1 +1052 1400 0 +1052 1407 -1 +1052 1408 1 +1053 1054 0 +1053 1077 1 +1054 1078 1 +1055 1056 0 +1055 1079 1 +1056 1080 0 +1057 693 1 +1057 694 1 +1057 697 1 +1057 1055 0 +1057 1056 1 +1057 1061 1 +1057 1062 1 +1057 1063 1 +1057 1064 0 +1057 1069 1 +1057 1070 1 +1057 1071 0 +1057 1072 1 +1058 693 1 +1058 694 0 +1058 698 1 +1058 1055 0 +1058 1056 1 +1058 1057 -1 +1058 1061 1 +1058 1062 1 +1058 1063 1 +1058 1064 1 +1058 1069 1 +1058 1070 0 +1058 1071 1 +1058 1072 0 +1059 693 1 +1059 694 1 +1059 699 1 +1059 1045 1 +1059 1046 1 +1059 1047 1 +1059 1048 -1 +1059 1055 0 +1059 1056 0 +1059 1061 0 +1059 1062 1 +1059 1063 1 +1059 1064 1 +1060 693 1 +1060 694 1 +1060 700 1 +1060 1045 0 +1060 1046 1 +1060 1047 -1 +1060 1048 0 +1060 1055 1 +1060 1056 0 +1060 1059 1 +1060 1061 0 +1060 1062 0 +1060 1063 -1 +1060 1064 1 +1061 1062 1 +1063 1064 1 +1065 705 -1 +1065 1061 1 +1065 1062 1 +1065 1069 0 +1065 1070 -1 +1065 1071 -1 +1065 1072 0 +1065 1077 1 +1065 1078 0 +1065 1079 1 +1065 1080 1 +1065 1423 1 +1065 1424 0 +1066 706 0 +1066 1061 -1 +1066 1062 0 +1066 1065 1 +1066 1069 1 +1066 1070 0 +1066 1071 1 +1066 1072 0 +1066 1077 1 +1066 1078 1 +1066 1079 1 +1066 1080 0 +1066 1423 1 +1066 1424 0 +1067 707 0 +1067 1053 0 +1067 1054 0 +1067 1055 1 +1067 1056 0 +1067 1061 0 +1067 1062 1 +1067 1069 1 +1067 1070 1 +1067 1071 0 +1067 1072 0 +1067 1423 0 +1067 1424 1 +1068 708 1 +1068 1053 1 +1068 1054 1 +1068 1055 -1 +1068 1056 1 +1068 1061 -1 +1068 1062 1 +1068 1067 1 +1068 1069 0 +1068 1070 -1 +1068 1071 -1 +1068 1072 0 +1068 1423 0 +1068 1424 0 +1069 1070 0 +1071 1072 1 +1073 713 1 +1073 1069 1 +1073 1070 0 +1073 1077 1 +1073 1078 0 +1073 1079 -1 +1073 1080 1 +1073 1431 1 +1073 1432 1 +1074 714 0 +1074 1069 1 +1074 1070 1 +1074 1073 0 +1074 1077 1 +1074 1078 1 +1074 1079 1 +1074 1080 0 +1074 1431 1 +1074 1432 0 +1075 715 1 +1075 1069 1 +1075 1070 1 +1075 1077 0 +1075 1078 1 +1075 1079 1 +1075 1080 1 +1075 1421 0 +1075 1422 1 +1075 1423 1 +1075 1424 0 +1075 1431 0 +1075 1432 1 +1076 716 1 +1076 1069 1 +1076 1070 1 +1076 1075 1 +1076 1077 1 +1076 1078 1 +1076 1079 0 +1076 1080 1 +1076 1421 1 +1076 1422 0 +1076 1423 1 +1076 1424 0 +1076 1431 1 +1076 1432 -1 +1077 1078 -1 +1079 1080 1 +1081 721 -1 +1081 1085 0 +1081 1086 0 +1081 1087 0 +1081 1088 1 +1081 1093 0 +1081 1094 1 +1081 1095 1 +1081 1096 1 +1082 722 0 +1082 1081 0 +1082 1085 0 +1082 1086 1 +1082 1087 0 +1082 1088 1 +1082 1093 1 +1082 1094 1 +1082 1095 1 +1082 1096 0 +1083 723 0 +1083 1085 0 +1083 1086 1 +1083 1087 1 +1083 1088 1 +1084 724 1 +1084 1083 1 +1084 1085 0 +1084 1086 1 +1084 1087 0 +1084 1088 1 +1085 1086 1 +1085 1109 -1 +1086 1110 1 +1087 1088 -1 +1087 1111 1 +1088 1112 1 +1089 729 0 +1089 1085 0 +1089 1086 1 +1089 1093 0 +1089 1094 1 +1089 1095 0 +1089 1096 0 +1089 1101 1 +1089 1102 1 +1089 1103 0 +1089 1104 0 +1089 1447 0 +1089 1448 1 +1090 730 1 +1090 1086 1 +1090 1089 1 +1090 1093 1 +1090 1094 1 +1090 1095 0 +1090 1096 1 +1090 1101 1 +1090 1102 0 +1090 1103 1 +1090 1104 1 +1090 1447 1 +1090 1448 1 +1091 731 1 +1091 1085 0 +1091 1086 1 +1091 1093 1 +1091 1094 1 +1091 1095 1 +1091 1096 0 +1091 1447 0 +1091 1448 0 +1092 732 1 +1092 1085 1 +1092 1086 1 +1092 1091 1 +1092 1093 0 +1092 1094 1 +1092 1095 1 +1092 1096 1 +1092 1447 0 +1092 1448 1 +1093 1094 0 +1093 1117 0 +1094 1118 0 +1095 1096 1 +1095 1119 1 +1096 1120 1 +1097 737 0 +1097 1093 1 +1097 1094 1 +1097 1101 1 +1097 1102 0 +1097 1103 0 +1097 1104 1 +1097 1455 0 +1097 1456 1 +1097 1469 1 +1097 1470 0 +1097 1471 0 +1097 1472 0 +1098 738 1 +1098 1093 0 +1098 1094 0 +1098 1097 1 +1098 1101 1 +1098 1102 0 +1098 1103 1 +1098 1104 1 +1098 1455 0 +1098 1456 1 +1098 1469 1 +1098 1470 -1 +1098 1471 1 +1098 1472 1 +1099 739 1 +1099 1093 0 +1099 1094 -1 +1099 1101 1 +1099 1102 0 +1099 1103 1 +1099 1104 0 +1099 1445 0 +1099 1446 -1 +1099 1447 0 +1099 1448 1 +1099 1455 0 +1099 1456 -1 +1100 740 1 +1100 1093 1 +1100 1094 0 +1100 1099 1 +1100 1101 1 +1100 1102 0 +1100 1103 -1 +1100 1104 1 +1100 1445 1 +1100 1446 1 +1100 1447 1 +1100 1448 1 +1100 1455 0 +1100 1456 1 +1101 1102 1 +1101 1125 0 +1102 1126 1 +1103 1104 1 +1103 1127 1 +1104 1128 1 +1105 741 1 +1105 742 0 +1105 745 -1 +1105 1103 1 +1105 1104 1 +1105 1109 0 +1105 1110 -1 +1105 1111 0 +1105 1112 1 +1105 1117 1 +1105 1118 0 +1105 1119 1 +1105 1120 1 +1106 741 0 +1106 742 0 +1106 746 1 +1106 1103 1 +1106 1104 0 +1106 1105 1 +1106 1109 1 +1106 1110 1 +1106 1111 0 +1106 1112 1 +1106 1117 1 +1106 1118 0 +1106 1119 0 +1106 1120 0 +1107 741 1 +1107 742 1 +1107 747 1 +1107 1093 1 +1107 1094 1 +1107 1095 1 +1107 1096 0 +1107 1103 1 +1107 1104 0 +1107 1109 0 +1107 1110 0 +1107 1111 0 +1107 1112 0 +1108 741 1 +1108 742 1 +1108 748 0 +1108 1093 1 +1108 1094 1 +1108 1095 -1 +1108 1096 -1 +1108 1103 -1 +1108 1104 1 +1108 1107 1 +1108 1109 1 +1108 1110 1 +1108 1111 1 +1108 1112 1 +1109 1110 0 +1109 1133 1 +1110 1134 1 +1111 1112 0 +1111 1135 1 +1112 1136 0 +1113 753 1 +1113 1109 1 +1113 1110 1 +1113 1117 1 +1113 1118 0 +1113 1119 1 +1113 1120 -1 +1113 1125 1 +1113 1126 1 +1113 1127 0 +1113 1128 1 +1113 1471 0 +1113 1472 0 +1114 754 1 +1114 1109 0 +1114 1110 1 +1114 1113 1 +1114 1117 0 +1114 1118 0 +1114 1119 1 +1114 1120 0 +1114 1125 0 +1114 1126 0 +1114 1127 0 +1114 1128 0 +1114 1471 -1 +1114 1472 0 +1115 755 1 +1115 1101 1 +1115 1102 1 +1115 1103 0 +1115 1104 1 +1115 1109 1 +1115 1110 1 +1115 1117 0 +1115 1118 1 +1115 1119 0 +1115 1120 0 +1115 1471 0 +1115 1472 -1 +1116 756 1 +1116 1101 0 +1116 1102 0 +1116 1103 -1 +1116 1104 -1 +1116 1109 -1 +1116 1110 1 +1116 1115 0 +1116 1117 1 +1116 1118 1 +1116 1119 0 +1116 1120 1 +1116 1471 0 +1116 1472 1 +1117 1118 1 +1117 1141 0 +1118 1142 0 +1119 1120 1 +1119 1143 1 +1120 1144 0 +1121 761 -1 +1121 1117 0 +1121 1118 1 +1121 1125 1 +1121 1126 1 +1121 1127 0 +1121 1128 1 +1121 1479 1 +1121 1480 0 +1121 1493 0 +1121 1494 0 +1121 1495 0 +1121 1496 1 +1122 762 1 +1122 1117 1 +1122 1118 0 +1122 1121 1 +1122 1125 1 +1122 1126 1 +1122 1127 1 +1122 1128 0 +1122 1479 1 +1122 1480 1 +1122 1493 0 +1122 1494 1 +1122 1495 0 +1122 1496 1 +1123 763 0 +1123 1117 0 +1123 1118 1 +1123 1125 -1 +1123 1126 1 +1123 1127 0 +1123 1128 1 +1123 1469 1 +1123 1470 1 +1123 1471 1 +1123 1472 0 +1123 1479 1 +1123 1480 1 +1124 764 0 +1124 1117 1 +1124 1118 1 +1124 1123 0 +1124 1125 1 +1124 1126 0 +1124 1127 -1 +1124 1128 1 +1124 1469 1 +1124 1470 -1 +1124 1471 -1 +1124 1472 1 +1124 1479 1 +1124 1480 0 +1125 1126 1 +1125 1149 1 +1126 1150 0 +1127 1128 0 +1127 1151 1 +1128 1152 1 +1129 765 1 +1129 766 0 +1129 769 1 +1129 1127 -1 +1129 1128 1 +1129 1133 1 +1129 1134 -1 +1129 1135 1 +1129 1136 0 +1129 1141 -1 +1129 1142 0 +1129 1143 0 +1129 1144 1 +1130 765 1 +1130 766 1 +1130 770 1 +1130 1127 1 +1130 1128 0 +1130 1129 0 +1130 1133 1 +1130 1134 -1 +1130 1135 1 +1130 1136 1 +1130 1141 1 +1130 1142 0 +1130 1143 1 +1130 1144 0 +1131 765 1 +1131 766 0 +1131 771 0 +1131 1117 0 +1131 1118 0 +1131 1119 1 +1131 1120 1 +1131 1127 0 +1131 1128 0 +1131 1133 0 +1131 1134 0 +1131 1135 0 +1131 1136 1 +1132 765 1 +1132 766 1 +1132 772 1 +1132 1117 0 +1132 1118 0 +1132 1119 0 +1132 1120 1 +1132 1127 -1 +1132 1128 1 +1132 1131 0 +1132 1133 1 +1132 1134 1 +1132 1135 0 +1132 1136 1 +1133 1134 -1 +1133 1157 1 +1134 1158 -1 +1135 1136 0 +1135 1159 1 +1136 1160 1 +1137 777 1 +1137 1133 1 +1137 1134 -1 +1137 1141 1 +1137 1142 -1 +1137 1143 1 +1137 1144 0 +1137 1149 1 +1137 1150 0 +1137 1151 1 +1137 1152 1 +1137 1495 1 +1137 1496 -1 +1138 778 1 +1138 1133 1 +1138 1134 1 +1138 1137 1 +1138 1141 -1 +1138 1142 1 +1138 1143 1 +1138 1144 1 +1138 1149 1 +1138 1150 0 +1138 1151 1 +1138 1152 0 +1138 1495 1 +1138 1496 0 +1139 779 -1 +1139 1125 1 +1139 1126 1 +1139 1127 1 +1139 1128 0 +1139 1133 1 +1139 1134 0 +1139 1141 0 +1139 1142 1 +1139 1143 1 +1139 1144 0 +1139 1495 0 +1139 1496 1 +1140 780 1 +1140 1125 1 +1140 1126 0 +1140 1127 0 +1140 1128 0 +1140 1133 0 +1140 1134 0 +1140 1139 1 +1140 1141 0 +1140 1142 -1 +1140 1143 0 +1140 1144 1 +1140 1495 1 +1140 1496 1 +1141 1142 -1 +1141 1165 1 +1142 1166 1 +1143 1144 1 +1143 1167 1 +1144 1168 0 +1145 785 1 +1145 1141 -1 +1145 1142 0 +1145 1149 1 +1145 1150 1 +1145 1151 1 +1145 1152 1 +1145 1503 1 +1145 1504 1 +1145 1517 0 +1145 1518 1 +1145 1519 1 +1145 1520 1 +1146 786 1 +1146 1141 0 +1146 1142 0 +1146 1145 1 +1146 1149 1 +1146 1150 1 +1146 1151 1 +1146 1152 0 +1146 1503 1 +1146 1504 1 +1146 1517 -1 +1146 1518 0 +1146 1519 1 +1146 1520 1 +1147 787 1 +1147 1141 0 +1147 1142 1 +1147 1149 0 +1147 1150 0 +1147 1151 0 +1147 1152 0 +1147 1493 1 +1147 1494 0 +1147 1495 0 +1147 1496 0 +1147 1503 1 +1147 1504 1 +1148 788 1 +1148 1141 0 +1148 1142 0 +1148 1147 0 +1148 1149 1 +1148 1150 1 +1148 1151 0 +1148 1152 1 +1148 1493 1 +1148 1494 1 +1148 1495 -1 +1148 1496 0 +1148 1503 1 +1148 1504 1 +1149 1150 1 +1149 1173 0 +1150 1174 1 +1151 1152 1 +1151 1175 1 +1152 1176 0 +1153 789 1 +1153 790 1 +1153 793 1 +1153 1151 0 +1153 1152 1 +1153 1157 1 +1153 1158 0 +1153 1159 0 +1153 1160 1 +1153 1165 1 +1153 1166 1 +1153 1167 0 +1153 1168 1 +1154 789 1 +1154 790 -1 +1154 794 0 +1154 1151 1 +1154 1152 1 +1154 1153 1 +1154 1157 1 +1154 1159 1 +1154 1160 1 +1154 1165 1 +1154 1166 1 +1154 1167 -1 +1154 1168 0 +1155 789 1 +1155 790 0 +1155 795 0 +1155 1141 0 +1155 1142 1 +1155 1143 0 +1155 1144 1 +1155 1151 1 +1155 1152 1 +1155 1157 1 +1155 1158 1 +1155 1159 1 +1155 1160 0 +1156 789 0 +1156 790 1 +1156 796 0 +1156 1141 1 +1156 1142 1 +1156 1143 1 +1156 1144 0 +1156 1151 0 +1156 1152 1 +1156 1155 0 +1156 1157 0 +1156 1158 1 +1156 1159 1 +1156 1160 0 +1157 1158 1 +1157 1181 -1 +1158 1182 1 +1159 1160 1 +1159 1183 1 +1160 1184 0 +1161 801 0 +1161 1157 0 +1161 1158 1 +1161 1165 0 +1161 1166 0 +1161 1167 1 +1161 1168 0 +1161 1173 0 +1161 1174 -1 +1161 1175 0 +1161 1176 0 +1161 1519 0 +1161 1520 0 +1162 802 1 +1162 1157 1 +1162 1158 1 +1162 1161 1 +1162 1165 1 +1162 1166 0 +1162 1167 1 +1162 1168 -1 +1162 1173 1 +1162 1174 1 +1162 1175 1 +1162 1176 1 +1162 1519 1 +1162 1520 1 +1163 803 -1 +1163 1149 -1 +1163 1150 -1 +1163 1151 0 +1163 1152 1 +1163 1157 1 +1163 1158 1 +1163 1165 1 +1163 1166 1 +1163 1167 1 +1163 1168 0 +1163 1519 0 +1163 1520 0 +1164 804 1 +1164 1149 0 +1164 1150 1 +1164 1151 1 +1164 1152 1 +1164 1157 0 +1164 1158 1 +1164 1163 1 +1164 1165 1 +1164 1166 0 +1164 1167 0 +1164 1168 1 +1164 1519 1 +1164 1520 -1 +1165 1166 1 +1165 1189 1 +1166 1190 0 +1167 1168 0 +1167 1191 0 +1168 1192 1 +1169 809 0 +1169 1165 1 +1169 1166 1 +1169 1173 1 +1169 1174 0 +1169 1175 0 +1169 1176 1 +1169 1527 1 +1169 1528 1 +1169 1541 0 +1169 1542 0 +1169 1543 -1 +1169 1544 1 +1170 810 1 +1170 1165 1 +1170 1166 -1 +1170 1169 0 +1170 1173 1 +1170 1174 1 +1170 1175 0 +1170 1176 1 +1170 1527 1 +1170 1528 -1 +1170 1541 1 +1170 1542 0 +1170 1543 1 +1170 1544 1 +1171 811 0 +1171 1165 1 +1171 1166 0 +1171 1173 1 +1171 1174 0 +1171 1175 1 +1171 1176 1 +1171 1517 0 +1171 1518 -1 +1171 1519 1 +1171 1520 -1 +1171 1527 0 +1171 1528 1 +1172 812 1 +1172 1165 0 +1172 1166 0 +1172 1171 1 +1172 1173 0 +1172 1174 1 +1172 1175 1 +1172 1176 1 +1172 1517 0 +1172 1518 1 +1172 1519 -1 +1172 1520 0 +1172 1527 0 +1172 1528 0 +1173 1174 1 +1173 1197 0 +1174 1198 1 +1175 1176 1 +1175 1199 0 +1176 1200 1 +1177 813 1 +1177 814 1 +1177 817 1 +1177 1175 1 +1177 1176 1 +1177 1181 -1 +1177 1182 0 +1177 1183 -1 +1177 1184 1 +1177 1189 0 +1177 1190 1 +1177 1191 1 +1177 1192 0 +1178 813 0 +1178 814 0 +1178 818 1 +1178 1175 1 +1178 1176 0 +1178 1177 -1 +1178 1181 1 +1178 1182 1 +1178 1183 0 +1178 1184 1 +1178 1189 0 +1178 1190 1 +1178 1191 1 +1178 1192 0 +1179 813 1 +1179 814 1 +1179 819 -1 +1179 1165 0 +1179 1166 0 +1179 1167 0 +1179 1168 1 +1179 1175 0 +1179 1176 0 +1179 1181 1 +1179 1182 0 +1179 1183 1 +1179 1184 1 +1180 813 1 +1180 814 0 +1180 820 1 +1180 1165 1 +1180 1166 0 +1180 1167 1 +1180 1168 1 +1180 1175 0 +1180 1176 0 +1180 1179 1 +1180 1181 1 +1180 1182 0 +1180 1183 1 +1180 1184 1 +1181 1182 1 +1181 1205 1 +1182 1206 0 +1183 1184 1 +1183 1207 1 +1184 1208 1 +1185 825 1 +1185 1181 0 +1185 1182 0 +1185 1189 0 +1185 1190 0 +1185 1191 1 +1185 1192 1 +1185 1197 1 +1185 1198 1 +1185 1199 1 +1185 1200 1 +1185 1543 0 +1185 1544 0 +1186 826 -1 +1186 1181 1 +1186 1182 1 +1186 1185 1 +1186 1189 -1 +1186 1190 1 +1186 1191 1 +1186 1192 1 +1186 1197 1 +1186 1198 0 +1186 1199 1 +1186 1200 1 +1186 1543 0 +1186 1544 1 +1187 827 0 +1187 1173 1 +1187 1174 -1 +1187 1175 0 +1187 1176 1 +1187 1181 0 +1187 1182 0 +1187 1189 1 +1187 1190 1 +1187 1191 1 +1187 1192 -1 +1187 1543 0 +1187 1544 1 +1188 828 1 +1188 1173 1 +1188 1174 0 +1188 1175 0 +1188 1176 1 +1188 1181 0 +1188 1182 -1 +1188 1187 0 +1188 1189 1 +1188 1190 0 +1188 1191 1 +1188 1192 0 +1188 1543 1 +1188 1544 1 +1189 1190 -1 +1189 1213 0 +1190 1214 0 +1191 1192 1 +1191 1215 0 +1192 1216 1 +1193 833 1 +1193 1189 0 +1193 1190 1 +1193 1197 0 +1193 1198 1 +1193 1199 1 +1193 1200 0 +1193 1551 1 +1193 1552 1 +1193 1565 1 +1193 1566 1 +1193 1567 -1 +1193 1568 0 +1194 834 1 +1194 1189 0 +1194 1190 1 +1194 1193 1 +1194 1197 0 +1194 1198 0 +1194 1199 1 +1194 1200 1 +1194 1551 0 +1194 1552 0 +1194 1565 -1 +1194 1566 1 +1194 1567 1 +1194 1568 1 +1195 835 0 +1195 1189 0 +1195 1190 1 +1195 1197 1 +1195 1198 1 +1195 1199 1 +1195 1200 -1 +1195 1541 0 +1195 1542 0 +1195 1543 1 +1195 1544 0 +1195 1551 0 +1195 1552 0 +1196 836 0 +1196 1189 1 +1196 1190 1 +1196 1195 0 +1196 1197 1 +1196 1198 1 +1196 1199 1 +1196 1200 0 +1196 1541 1 +1196 1542 0 +1196 1543 0 +1196 1544 0 +1196 1551 0 +1196 1552 0 +1197 1198 0 +1197 1221 1 +1198 1222 0 +1199 1200 1 +1199 1223 1 +1200 1224 0 +1201 837 -1 +1201 838 1 +1201 841 1 +1201 1199 1 +1201 1200 1 +1201 1205 0 +1201 1206 1 +1201 1207 1 +1201 1208 1 +1201 1213 0 +1201 1214 -1 +1201 1215 0 +1201 1216 1 +1202 837 1 +1202 838 1 +1202 842 -1 +1202 1199 0 +1202 1200 1 +1202 1201 0 +1202 1205 1 +1202 1206 -1 +1202 1207 0 +1202 1208 0 +1202 1213 0 +1202 1214 1 +1202 1215 1 +1202 1216 0 +1203 837 0 +1203 838 -1 +1203 843 1 +1203 1189 -1 +1203 1190 1 +1203 1191 1 +1203 1192 1 +1203 1199 1 +1203 1200 1 +1203 1205 1 +1203 1206 1 +1203 1207 1 +1203 1208 0 +1204 837 0 +1204 838 1 +1204 844 0 +1204 1189 0 +1204 1190 -1 +1204 1191 0 +1204 1192 1 +1204 1199 1 +1204 1200 -1 +1204 1203 -1 +1204 1205 -1 +1204 1206 1 +1204 1207 0 +1204 1208 0 +1205 1206 1 +1205 1229 1 +1206 1230 0 +1207 1208 1 +1207 1231 1 +1208 1232 1 +1209 849 1 +1209 1205 0 +1209 1206 1 +1209 1213 0 +1209 1214 1 +1209 1215 1 +1209 1216 1 +1209 1221 0 +1209 1222 0 +1209 1223 1 +1209 1224 1 +1209 1567 0 +1209 1568 0 +1210 850 0 +1210 1205 1 +1210 1206 1 +1210 1209 0 +1210 1213 1 +1210 1214 1 +1210 1215 1 +1210 1216 1 +1210 1221 1 +1210 1222 1 +1210 1223 0 +1210 1224 0 +1210 1567 -1 +1210 1568 0 +1211 851 1 +1211 1197 0 +1211 1198 0 +1211 1199 1 +1211 1200 1 +1211 1205 1 +1211 1206 0 +1211 1213 1 +1211 1214 1 +1211 1215 1 +1211 1216 0 +1211 1567 1 +1211 1568 1 +1212 852 1 +1212 1197 0 +1212 1198 1 +1212 1199 0 +1212 1200 1 +1212 1205 0 +1212 1206 1 +1212 1211 1 +1212 1213 0 +1212 1214 1 +1212 1215 -1 +1212 1216 -1 +1212 1567 -1 +1212 1568 1 +1213 1214 -1 +1213 1237 -1 +1214 1238 0 +1215 1216 1 +1215 1239 -1 +1216 1240 1 +1217 857 0 +1217 1213 1 +1217 1214 -1 +1217 1221 1 +1217 1222 1 +1217 1223 1 +1217 1224 -1 +1217 1575 0 +1217 1576 0 +1217 1589 0 +1217 1590 1 +1217 1591 1 +1217 1592 1 +1218 858 0 +1218 1213 1 +1218 1214 1 +1218 1217 1 +1218 1221 0 +1218 1222 1 +1218 1223 -1 +1218 1224 1 +1218 1575 1 +1218 1576 -1 +1218 1589 0 +1218 1590 1 +1218 1591 -1 +1218 1592 -1 +1219 859 1 +1219 1213 0 +1219 1214 0 +1219 1221 1 +1219 1222 1 +1219 1223 1 +1219 1224 1 +1219 1565 0 +1219 1566 0 +1219 1567 0 +1219 1568 1 +1219 1575 1 +1219 1576 1 +1220 860 0 +1220 1213 1 +1220 1214 1 +1220 1219 1 +1220 1221 1 +1220 1222 1 +1220 1223 1 +1220 1224 1 +1220 1565 0 +1220 1566 0 +1220 1567 1 +1220 1568 1 +1220 1575 1 +1220 1576 1 +1221 1222 0 +1221 1245 0 +1222 1246 0 +1223 1224 1 +1223 1247 1 +1224 1248 -1 +1225 861 1 +1225 862 1 +1225 865 1 +1225 1223 -1 +1225 1224 1 +1225 1229 1 +1225 1230 1 +1225 1231 -1 +1225 1232 0 +1225 1237 1 +1225 1238 0 +1225 1239 1 +1225 1240 0 +1226 861 1 +1226 862 0 +1226 866 1 +1226 1223 0 +1226 1224 0 +1226 1225 0 +1226 1229 0 +1226 1230 -1 +1226 1231 0 +1226 1232 1 +1226 1237 0 +1226 1238 1 +1226 1239 1 +1226 1240 0 +1227 861 0 +1227 862 1 +1227 867 0 +1227 1213 1 +1227 1214 1 +1227 1215 0 +1227 1216 1 +1227 1223 1 +1227 1224 0 +1227 1229 1 +1227 1230 0 +1227 1231 0 +1227 1232 1 +1228 861 1 +1228 862 1 +1228 868 1 +1228 1213 0 +1228 1214 0 +1228 1215 0 +1228 1216 -1 +1228 1223 0 +1228 1224 1 +1228 1227 1 +1228 1229 1 +1228 1230 1 +1228 1231 1 +1228 1232 0 +1229 1230 1 +1229 1253 0 +1230 1254 0 +1231 1232 1 +1231 1255 0 +1232 1256 1 +1233 873 0 +1233 1229 1 +1233 1230 1 +1233 1237 0 +1233 1238 0 +1233 1239 1 +1233 1240 1 +1233 1245 -1 +1233 1246 1 +1233 1247 0 +1233 1248 1 +1233 1591 1 +1233 1592 1 +1234 874 0 +1234 1229 1 +1234 1230 1 +1234 1233 1 +1234 1237 0 +1234 1238 1 +1234 1239 1 +1234 1240 1 +1234 1245 0 +1234 1246 -1 +1234 1247 -1 +1234 1248 1 +1234 1591 0 +1234 1592 0 +1235 875 1 +1235 1221 0 +1235 1222 0 +1235 1223 0 +1235 1224 0 +1235 1229 0 +1235 1230 1 +1235 1237 0 +1235 1238 -1 +1235 1239 0 +1235 1240 0 +1235 1591 -1 +1235 1592 1 +1236 876 -1 +1236 1221 0 +1236 1222 1 +1236 1223 1 +1236 1224 1 +1236 1229 0 +1236 1230 1 +1236 1235 0 +1236 1237 -1 +1236 1238 1 +1236 1239 0 +1236 1240 0 +1236 1591 0 +1236 1592 1 +1237 1238 0 +1237 1261 1 +1238 1262 1 +1239 1240 1 +1239 1263 0 +1240 1264 1 +1241 881 0 +1241 1237 1 +1241 1238 1 +1241 1245 0 +1241 1246 0 +1241 1247 0 +1241 1248 0 +1241 1599 1 +1241 1600 1 +1241 1613 0 +1241 1614 1 +1241 1615 1 +1241 1616 1 +1242 882 1 +1242 1237 0 +1242 1238 1 +1242 1241 0 +1242 1245 1 +1242 1246 1 +1242 1247 -1 +1242 1248 1 +1242 1599 1 +1242 1600 1 +1242 1613 1 +1242 1614 1 +1242 1615 -1 +1242 1616 -1 +1243 883 1 +1243 1237 0 +1243 1238 1 +1243 1245 0 +1243 1246 1 +1243 1247 1 +1243 1248 1 +1243 1589 1 +1243 1590 1 +1243 1591 0 +1243 1592 1 +1243 1599 1 +1243 1600 1 +1244 884 1 +1244 1237 1 +1244 1238 1 +1244 1243 0 +1244 1245 1 +1244 1246 1 +1244 1247 1 +1244 1248 1 +1244 1589 0 +1244 1590 -1 +1244 1591 0 +1244 1592 0 +1244 1599 1 +1244 1600 1 +1245 1246 1 +1245 1269 0 +1246 1270 0 +1247 1248 1 +1247 1271 0 +1248 1272 1 +1249 885 1 +1249 886 -1 +1249 889 0 +1249 1247 1 +1249 1248 0 +1249 1253 1 +1249 1254 0 +1249 1255 1 +1249 1256 0 +1249 1261 0 +1249 1262 0 +1249 1263 1 +1249 1264 0 +1250 885 1 +1250 886 1 +1250 890 1 +1250 1247 1 +1250 1248 0 +1250 1249 0 +1250 1253 1 +1250 1254 -1 +1250 1255 1 +1250 1256 -1 +1250 1261 0 +1250 1262 0 +1250 1263 0 +1250 1264 1 +1251 885 1 +1251 886 -1 +1251 891 1 +1251 1237 0 +1251 1238 0 +1251 1239 -1 +1251 1240 0 +1251 1247 1 +1251 1248 1 +1251 1253 -1 +1251 1254 1 +1251 1255 0 +1251 1256 1 +1252 885 0 +1252 886 1 +1252 892 1 +1252 1237 1 +1252 1238 1 +1252 1239 0 +1252 1240 1 +1252 1247 0 +1252 1248 1 +1252 1251 1 +1252 1253 1 +1252 1254 1 +1252 1255 -1 +1252 1256 1 +1253 1254 0 +1253 1277 1 +1254 1278 0 +1255 1256 1 +1255 1279 -1 +1256 1280 0 +1257 897 1 +1257 1253 0 +1257 1254 0 +1257 1261 1 +1257 1262 0 +1257 1263 0 +1257 1264 1 +1257 1269 1 +1257 1270 1 +1257 1271 0 +1257 1272 1 +1257 1615 1 +1257 1616 1 +1258 898 1 +1258 1253 0 +1258 1254 0 +1258 1257 1 +1258 1261 -1 +1258 1262 1 +1258 1263 0 +1258 1264 1 +1258 1269 0 +1258 1270 0 +1258 1271 1 +1258 1272 1 +1258 1615 -1 +1258 1616 1 +1259 899 1 +1259 1245 1 +1259 1246 1 +1259 1247 1 +1259 1248 1 +1259 1253 0 +1259 1254 1 +1259 1261 1 +1259 1262 0 +1259 1263 0 +1259 1264 1 +1259 1615 1 +1259 1616 -1 +1260 900 1 +1260 1245 0 +1260 1246 0 +1260 1247 1 +1260 1248 0 +1260 1253 0 +1260 1254 1 +1260 1259 1 +1260 1261 1 +1260 1262 -1 +1260 1263 0 +1260 1264 1 +1260 1615 -1 +1260 1616 0 +1261 1262 1 +1261 1285 0 +1262 1286 1 +1263 1264 1 +1263 1287 1 +1264 1288 1 +1265 905 -1 +1265 1261 -1 +1265 1262 0 +1265 1269 0 +1265 1270 1 +1265 1271 1 +1265 1272 1 +1265 1623 0 +1265 1624 0 +1265 1637 1 +1265 1638 0 +1265 1639 1 +1265 1640 1 +1266 906 1 +1266 1261 1 +1266 1262 1 +1266 1265 1 +1266 1269 0 +1266 1270 1 +1266 1271 0 +1266 1272 0 +1266 1623 -1 +1266 1624 0 +1266 1637 1 +1266 1638 1 +1266 1639 1 +1266 1640 0 +1267 907 0 +1267 1261 -1 +1267 1262 0 +1267 1269 0 +1267 1270 -1 +1267 1271 0 +1267 1272 1 +1267 1613 -1 +1267 1614 0 +1267 1615 1 +1267 1616 1 +1267 1623 0 +1267 1624 0 +1268 908 0 +1268 1261 0 +1268 1262 1 +1268 1267 1 +1268 1269 1 +1268 1270 1 +1268 1271 -1 +1268 1272 0 +1268 1613 1 +1268 1614 -1 +1268 1615 1 +1268 1616 1 +1268 1623 -1 +1268 1624 1 +1269 1270 0 +1269 1293 1 +1270 1294 1 +1271 1272 1 +1271 1295 1 +1272 1296 0 +1273 909 0 +1273 910 -1 +1273 913 0 +1273 1271 0 +1273 1272 1 +1273 1277 0 +1273 1278 1 +1273 1279 0 +1273 1280 1 +1273 1285 0 +1273 1286 1 +1273 1287 0 +1273 1288 1 +1274 909 1 +1274 910 1 +1274 914 -1 +1274 1271 1 +1274 1272 1 +1274 1273 0 +1274 1277 -1 +1274 1278 -1 +1274 1279 1 +1274 1280 1 +1274 1285 1 +1274 1286 0 +1274 1287 1 +1274 1288 1 +1275 909 0 +1275 910 0 +1275 915 1 +1275 1261 1 +1275 1262 1 +1275 1263 1 +1275 1264 1 +1275 1271 0 +1275 1272 0 +1275 1277 0 +1275 1278 0 +1275 1279 0 +1275 1280 0 +1276 909 0 +1276 910 0 +1276 916 1 +1276 1261 0 +1276 1262 1 +1276 1263 -1 +1276 1264 0 +1276 1271 1 +1276 1272 1 +1276 1275 1 +1276 1277 1 +1276 1278 1 +1276 1279 0 +1276 1280 -1 +1277 1278 0 +1277 1301 1 +1278 1302 0 +1279 1280 1 +1279 1303 1 +1280 1304 0 +1281 921 1 +1281 1277 0 +1281 1278 0 +1281 1285 0 +1281 1286 1 +1281 1287 1 +1281 1288 1 +1281 1293 -1 +1281 1294 -1 +1281 1295 0 +1281 1296 1 +1281 1639 0 +1281 1640 1 +1282 922 1 +1282 1277 1 +1282 1278 -1 +1282 1281 1 +1282 1285 1 +1282 1286 1 +1282 1287 1 +1282 1288 1 +1282 1293 1 +1282 1294 1 +1282 1295 1 +1282 1296 1 +1282 1639 1 +1282 1640 0 +1283 923 0 +1283 1269 0 +1283 1270 0 +1283 1271 0 +1283 1272 0 +1283 1277 0 +1283 1278 -1 +1283 1285 0 +1283 1286 1 +1283 1287 -1 +1283 1288 1 +1283 1639 1 +1283 1640 1 +1284 924 1 +1284 1269 1 +1284 1270 -1 +1284 1271 1 +1284 1272 1 +1284 1277 0 +1284 1278 1 +1284 1283 0 +1284 1285 1 +1284 1286 1 +1284 1287 1 +1284 1288 1 +1284 1639 0 +1284 1640 0 +1285 1286 0 +1285 1309 1 +1286 1310 1 +1287 1288 -1 +1287 1311 1 +1288 1312 -1 +1289 929 1 +1289 1285 1 +1289 1286 0 +1289 1293 0 +1289 1294 0 +1289 1295 1 +1289 1296 1 +1289 1647 -1 +1289 1648 -1 +1289 1661 -1 +1289 1662 0 +1289 1663 -1 +1289 1664 1 +1290 930 0 +1290 1285 0 +1290 1286 0 +1290 1289 1 +1290 1293 1 +1290 1294 0 +1290 1295 1 +1290 1296 -1 +1290 1647 1 +1290 1648 0 +1290 1661 1 +1290 1662 1 +1290 1663 1 +1290 1664 1 +1291 931 1 +1291 1285 1 +1291 1286 -1 +1291 1293 1 +1291 1294 0 +1291 1295 1 +1291 1296 1 +1291 1637 0 +1291 1638 0 +1291 1639 1 +1291 1640 0 +1291 1647 1 +1291 1648 0 +1292 932 0 +1292 1285 1 +1292 1286 1 +1292 1291 1 +1292 1293 1 +1292 1294 1 +1292 1295 1 +1292 1296 1 +1292 1637 1 +1292 1638 0 +1292 1639 1 +1292 1640 0 +1292 1647 -1 +1292 1648 1 +1293 1294 0 +1293 1317 1 +1294 1318 0 +1295 1296 0 +1295 1319 1 +1296 1320 1 +1297 933 0 +1297 934 1 +1297 937 1 +1297 1295 0 +1297 1296 1 +1297 1301 1 +1297 1302 1 +1297 1303 1 +1297 1304 1 +1297 1309 1 +1297 1310 0 +1297 1311 1 +1297 1312 1 +1298 933 1 +1298 934 1 +1298 938 1 +1298 1295 1 +1298 1296 1 +1298 1297 0 +1298 1301 1 +1298 1302 1 +1298 1303 1 +1298 1304 1 +1298 1309 -1 +1298 1310 1 +1298 1311 1 +1298 1312 -1 +1299 933 1 +1299 934 1 +1299 939 0 +1299 1285 1 +1299 1286 1 +1299 1287 -1 +1299 1288 1 +1299 1295 1 +1299 1296 1 +1299 1301 1 +1299 1302 1 +1299 1303 -1 +1299 1304 1 +1300 933 1 +1300 934 0 +1300 940 -1 +1300 1285 1 +1300 1286 1 +1300 1287 0 +1300 1288 1 +1300 1295 0 +1300 1296 0 +1300 1299 1 +1300 1301 1 +1300 1302 0 +1300 1303 1 +1300 1304 1 +1301 1302 0 +1301 1325 0 +1302 1326 -1 +1303 1304 0 +1303 1327 1 +1304 1328 1 +1305 945 -1 +1305 1301 -1 +1305 1302 1 +1305 1309 1 +1305 1310 1 +1305 1311 1 +1305 1312 0 +1305 1317 1 +1305 1318 1 +1305 1319 1 +1305 1320 1 +1305 1663 1 +1305 1664 1 +1306 946 1 +1306 1301 1 +1306 1302 0 +1306 1305 1 +1306 1309 -1 +1306 1310 0 +1306 1311 -1 +1306 1312 0 +1306 1317 0 +1306 1318 1 +1306 1319 1 +1306 1320 -1 +1306 1663 1 +1306 1664 1 +1307 947 1 +1307 1293 -1 +1307 1294 0 +1307 1295 0 +1307 1296 1 +1307 1301 -1 +1307 1302 1 +1307 1309 1 +1307 1310 1 +1307 1311 0 +1307 1312 1 +1307 1663 0 +1307 1664 0 +1308 948 1 +1308 1293 1 +1308 1294 -1 +1308 1295 0 +1308 1296 0 +1308 1301 1 +1308 1302 0 +1308 1307 1 +1308 1309 0 +1308 1310 1 +1308 1311 0 +1308 1312 1 +1308 1663 0 +1308 1664 1 +1309 1310 1 +1309 1333 -1 +1310 1334 1 +1311 1312 0 +1311 1335 0 +1312 1336 -1 +1313 953 1 +1313 1309 1 +1313 1310 1 +1313 1317 0 +1313 1318 1 +1313 1319 0 +1313 1320 1 +1313 1671 0 +1313 1672 -1 +1313 1685 -1 +1313 1686 1 +1313 1687 1 +1313 1688 -1 +1314 954 1 +1314 1309 0 +1314 1310 0 +1314 1313 0 +1314 1317 -1 +1314 1318 0 +1314 1319 0 +1314 1320 1 +1314 1671 0 +1314 1672 0 +1314 1685 1 +1314 1686 1 +1314 1687 1 +1314 1688 0 +1315 955 1 +1315 1309 0 +1315 1310 1 +1315 1317 0 +1315 1318 0 +1315 1319 1 +1315 1320 0 +1315 1661 -1 +1315 1662 1 +1315 1663 0 +1315 1664 1 +1315 1671 1 +1315 1672 -1 +1316 956 1 +1316 1309 0 +1316 1310 1 +1316 1315 1 +1316 1317 1 +1316 1318 1 +1316 1319 0 +1316 1320 0 +1316 1661 1 +1316 1662 0 +1316 1663 1 +1316 1664 1 +1316 1671 1 +1316 1672 1 +1317 1318 -1 +1317 1341 -1 +1318 1342 1 +1319 1320 1 +1319 1343 0 +1320 1344 1 +1321 957 -1 +1321 958 0 +1321 961 1 +1321 1319 0 +1321 1320 1 +1321 1325 1 +1321 1326 0 +1321 1327 1 +1321 1328 1 +1321 1333 1 +1321 1334 0 +1321 1335 1 +1321 1336 0 +1322 957 -1 +1322 958 1 +1322 962 0 +1322 1319 0 +1322 1320 0 +1322 1321 1 +1322 1325 0 +1322 1326 0 +1322 1327 1 +1322 1328 0 +1322 1333 1 +1322 1334 1 +1322 1335 0 +1322 1336 0 +1323 957 0 +1323 958 -1 +1323 963 1 +1323 1309 1 +1323 1310 1 +1323 1311 1 +1323 1312 1 +1323 1319 0 +1323 1320 0 +1323 1325 1 +1323 1326 -1 +1323 1327 1 +1323 1328 1 +1324 957 -1 +1324 958 0 +1324 964 0 +1324 1309 0 +1324 1310 1 +1324 1311 1 +1324 1312 0 +1324 1319 1 +1324 1320 -1 +1324 1323 0 +1324 1325 0 +1324 1326 0 +1324 1327 1 +1324 1328 -1 +1325 1326 1 +1325 1349 0 +1326 1350 -1 +1327 1328 1 +1327 1351 -1 +1328 1352 1 +1329 969 0 +1329 1325 1 +1329 1326 -1 +1329 1333 0 +1329 1334 1 +1329 1335 1 +1329 1336 1 +1329 1341 1 +1329 1342 1 +1329 1343 0 +1329 1344 0 +1329 1687 0 +1329 1688 1 +1330 970 1 +1330 1325 1 +1330 1326 1 +1330 1329 1 +1330 1333 0 +1330 1334 1 +1330 1335 1 +1330 1336 1 +1330 1341 1 +1330 1342 0 +1330 1343 1 +1330 1344 0 +1330 1687 1 +1330 1688 0 +1331 971 -1 +1331 1317 1 +1331 1318 -1 +1331 1319 0 +1331 1320 0 +1331 1325 1 +1331 1326 0 +1331 1333 0 +1331 1334 0 +1331 1335 1 +1331 1336 1 +1331 1687 1 +1331 1688 1 +1332 972 0 +1332 1317 0 +1332 1318 1 +1332 1319 1 +1332 1320 -1 +1332 1325 1 +1332 1326 0 +1332 1331 0 +1332 1333 1 +1332 1334 0 +1332 1335 -1 +1332 1336 0 +1332 1687 1 +1332 1688 0 +1333 1334 1 +1333 1357 1 +1334 1358 0 +1335 1336 1 +1335 1359 1 +1336 1360 0 +1337 977 1 +1337 1333 0 +1337 1334 1 +1337 1341 0 +1337 1342 0 +1337 1343 1 +1337 1344 1 +1337 1695 1 +1337 1696 0 +1337 1709 1 +1337 1710 1 +1337 1711 0 +1337 1712 0 +1338 978 -1 +1338 1333 1 +1338 1334 1 +1338 1337 -1 +1338 1341 0 +1338 1342 1 +1338 1343 0 +1338 1344 0 +1338 1695 0 +1338 1696 0 +1338 1709 1 +1338 1710 1 +1338 1711 1 +1338 1712 0 +1339 979 1 +1339 1333 0 +1339 1334 1 +1339 1341 -1 +1339 1342 1 +1339 1343 -1 +1339 1344 0 +1339 1685 -1 +1339 1686 1 +1339 1687 1 +1339 1688 0 +1339 1695 0 +1339 1696 1 +1340 980 1 +1340 1333 1 +1340 1334 -1 +1340 1339 0 +1340 1341 1 +1340 1342 -1 +1340 1343 1 +1340 1344 1 +1340 1685 1 +1340 1686 -1 +1340 1687 1 +1340 1688 1 +1340 1695 1 +1340 1696 1 +1341 1342 0 +1341 1365 -1 +1342 1366 1 +1343 1344 0 +1343 1367 0 +1344 1368 0 +1345 981 0 +1345 982 1 +1345 985 0 +1345 1343 1 +1345 1344 1 +1345 1349 1 +1345 1350 0 +1345 1351 1 +1345 1352 0 +1345 1357 0 +1345 1358 1 +1345 1359 0 +1345 1360 1 +1346 981 1 +1346 982 1 +1346 986 0 +1346 1343 1 +1346 1344 1 +1346 1345 1 +1346 1349 1 +1346 1350 0 +1346 1351 0 +1346 1352 -1 +1346 1357 -1 +1346 1358 1 +1346 1359 1 +1346 1360 -1 +1347 981 1 +1347 982 1 +1347 987 1 +1347 1333 0 +1347 1334 1 +1347 1335 1 +1347 1336 -1 +1347 1343 0 +1347 1344 0 +1347 1349 1 +1347 1350 1 +1347 1351 1 +1347 1352 1 +1348 981 1 +1348 982 0 +1348 988 1 +1348 1333 0 +1348 1334 0 +1348 1335 1 +1348 1336 0 +1348 1343 -1 +1348 1344 1 +1348 1347 1 +1348 1349 1 +1348 1350 0 +1348 1351 1 +1348 1352 1 +1349 1350 1 +1349 1373 1 +1350 1374 1 +1351 1352 1 +1351 1375 1 +1352 1376 0 +1353 993 1 +1353 1349 0 +1353 1350 1 +1353 1357 1 +1353 1358 1 +1353 1359 1 +1353 1360 1 +1353 1365 1 +1353 1366 1 +1353 1367 1 +1353 1368 0 +1353 1711 1 +1353 1712 1 +1354 994 1 +1354 1349 1 +1354 1350 0 +1354 1353 1 +1354 1357 1 +1354 1358 1 +1354 1359 1 +1354 1360 1 +1354 1365 1 +1354 1366 -1 +1354 1367 0 +1354 1368 0 +1354 1711 0 +1354 1712 0 +1355 995 1 +1355 1341 -1 +1355 1342 1 +1355 1343 1 +1355 1344 1 +1355 1349 1 +1355 1350 0 +1355 1357 1 +1355 1358 0 +1355 1359 1 +1355 1360 1 +1355 1711 1 +1355 1712 0 +1356 996 1 +1356 1341 1 +1356 1342 1 +1356 1343 1 +1356 1344 1 +1356 1349 0 +1356 1350 -1 +1356 1355 0 +1356 1357 1 +1356 1358 0 +1356 1359 0 +1356 1360 1 +1356 1711 1 +1356 1712 1 +1357 1358 0 +1357 1381 1 +1358 1382 1 +1359 1360 0 +1359 1383 1 +1360 1384 1 +1361 1001 1 +1361 1357 0 +1361 1358 1 +1361 1365 0 +1361 1366 -1 +1361 1367 1 +1361 1368 1 +1361 1719 0 +1361 1720 1 +1361 1733 1 +1361 1734 -1 +1361 1735 0 +1361 1736 1 +1362 1002 1 +1362 1357 1 +1362 1358 0 +1362 1361 1 +1362 1365 0 +1362 1366 1 +1362 1367 0 +1362 1368 1 +1362 1719 1 +1362 1720 0 +1362 1733 1 +1362 1734 -1 +1362 1735 0 +1362 1736 1 +1363 1003 1 +1363 1357 1 +1363 1358 1 +1363 1365 1 +1363 1366 1 +1363 1367 1 +1363 1368 1 +1363 1709 1 +1363 1710 1 +1363 1711 1 +1363 1712 1 +1363 1719 -1 +1363 1720 1 +1364 1004 1 +1364 1357 0 +1364 1358 1 +1364 1363 1 +1364 1365 0 +1364 1366 1 +1364 1367 0 +1364 1368 -1 +1364 1709 1 +1364 1710 1 +1364 1711 1 +1364 1712 1 +1364 1719 1 +1364 1720 0 +1365 1366 -1 +1365 1389 0 +1366 1390 0 +1367 1368 1 +1367 1391 1 +1368 1392 0 +1369 1005 1 +1369 1006 0 +1369 1009 0 +1369 1367 1 +1369 1368 0 +1369 1373 1 +1369 1374 0 +1369 1375 1 +1369 1376 1 +1369 1381 0 +1369 1382 1 +1369 1383 0 +1369 1384 1 +1370 1005 1 +1370 1006 0 +1370 1010 1 +1370 1367 1 +1370 1368 0 +1370 1369 0 +1370 1373 0 +1370 1374 1 +1370 1375 1 +1370 1376 1 +1370 1381 1 +1370 1382 1 +1370 1383 0 +1370 1384 0 +1371 1005 1 +1371 1006 0 +1371 1011 0 +1371 1357 1 +1371 1358 1 +1371 1359 1 +1371 1360 0 +1371 1367 1 +1371 1368 0 +1371 1373 0 +1371 1374 1 +1371 1375 0 +1371 1376 0 +1372 1005 1 +1372 1006 1 +1372 1012 -1 +1372 1357 1 +1372 1358 1 +1372 1359 1 +1372 1360 1 +1372 1367 0 +1372 1368 1 +1372 1371 -1 +1372 1373 1 +1372 1374 1 +1372 1375 1 +1372 1376 1 +1373 1374 1 +1373 1397 1 +1374 1398 1 +1375 1376 0 +1375 1399 0 +1376 1400 1 +1377 1017 0 +1377 1373 -1 +1377 1374 1 +1377 1381 1 +1377 1382 1 +1377 1383 1 +1377 1384 0 +1377 1389 0 +1377 1390 0 +1377 1391 1 +1377 1392 -1 +1377 1735 1 +1377 1736 1 +1378 1018 1 +1378 1373 -1 +1378 1374 0 +1378 1377 1 +1378 1381 -1 +1378 1382 -1 +1378 1383 1 +1378 1384 0 +1378 1389 1 +1378 1390 1 +1378 1391 1 +1378 1392 -1 +1378 1735 1 +1378 1736 0 +1379 1019 1 +1379 1365 -1 +1379 1366 1 +1379 1367 1 +1379 1368 1 +1379 1373 0 +1379 1374 1 +1379 1381 1 +1379 1382 0 +1379 1383 0 +1379 1384 1 +1379 1735 1 +1379 1736 1 +1380 1020 0 +1380 1365 1 +1380 1366 1 +1380 1367 0 +1380 1368 1 +1380 1373 -1 +1380 1374 0 +1380 1379 1 +1380 1381 1 +1380 1382 0 +1380 1383 1 +1380 1384 1 +1380 1735 1 +1380 1736 0 +1381 1382 0 +1381 1405 1 +1382 1406 1 +1383 1384 -1 +1383 1407 1 +1384 1408 -1 +1385 1025 0 +1385 1381 1 +1385 1382 1 +1385 1389 1 +1385 1390 1 +1385 1391 1 +1385 1392 1 +1385 1743 1 +1385 1744 1 +1385 1757 1 +1385 1758 1 +1385 1759 -1 +1385 1760 1 +1386 1026 1 +1386 1381 0 +1386 1382 1 +1386 1385 1 +1386 1389 1 +1386 1390 1 +1386 1391 1 +1386 1392 1 +1386 1743 0 +1386 1744 0 +1386 1757 1 +1386 1758 1 +1386 1759 0 +1386 1760 0 +1387 1027 1 +1387 1381 1 +1387 1382 1 +1387 1389 0 +1387 1390 1 +1387 1391 -1 +1387 1392 1 +1387 1733 -1 +1387 1734 -1 +1387 1735 1 +1387 1736 0 +1387 1743 1 +1387 1744 1 +1388 1028 0 +1388 1381 1 +1388 1382 1 +1388 1387 0 +1388 1389 1 +1388 1390 0 +1388 1391 -1 +1388 1392 0 +1388 1733 1 +1388 1734 1 +1388 1735 1 +1388 1736 1 +1388 1743 1 +1388 1744 1 +1389 1390 1 +1389 1413 0 +1390 1414 0 +1391 1392 0 +1391 1415 0 +1392 1416 1 +1393 1029 1 +1393 1030 1 +1393 1033 1 +1393 1391 1 +1393 1392 1 +1393 1397 0 +1393 1398 1 +1393 1399 0 +1393 1400 1 +1393 1405 1 +1393 1406 0 +1393 1407 0 +1393 1408 0 +1394 1029 1 +1394 1030 1 +1394 1034 0 +1394 1391 1 +1394 1392 1 +1394 1393 0 +1394 1397 0 +1394 1398 0 +1394 1399 1 +1394 1400 0 +1394 1405 0 +1394 1406 1 +1394 1407 -1 +1394 1408 0 +1395 1029 0 +1395 1030 0 +1395 1035 1 +1395 1381 0 +1395 1382 0 +1395 1383 1 +1395 1384 1 +1395 1391 0 +1395 1392 0 +1395 1397 0 +1395 1398 1 +1395 1399 1 +1395 1400 1 +1396 1029 -1 +1396 1030 -1 +1396 1036 0 +1396 1381 1 +1396 1382 0 +1396 1383 0 +1396 1384 0 +1396 1391 0 +1396 1392 0 +1396 1395 -1 +1396 1397 1 +1396 1398 0 +1396 1399 0 +1396 1400 1 +1397 1398 -1 +1397 1421 1 +1398 1422 0 +1399 1400 1 +1399 1423 0 +1400 1424 1 +1401 1041 1 +1401 1397 0 +1401 1398 1 +1401 1405 1 +1401 1406 1 +1401 1407 0 +1401 1408 0 +1401 1413 1 +1401 1414 -1 +1401 1415 0 +1401 1416 0 +1401 1759 0 +1401 1760 1 +1402 1042 1 +1402 1397 1 +1402 1398 0 +1402 1401 1 +1402 1405 1 +1402 1406 1 +1402 1407 1 +1402 1408 0 +1402 1413 1 +1402 1414 0 +1402 1415 1 +1402 1416 -1 +1402 1759 -1 +1402 1760 1 +1403 1043 0 +1403 1389 1 +1403 1390 0 +1403 1391 1 +1403 1392 1 +1403 1397 1 +1403 1398 1 +1403 1405 1 +1403 1406 1 +1403 1407 0 +1403 1408 1 +1403 1759 0 +1403 1760 1 +1404 1044 1 +1404 1389 1 +1404 1390 1 +1404 1391 0 +1404 1392 1 +1404 1397 1 +1404 1398 1 +1404 1403 1 +1404 1405 0 +1404 1406 1 +1404 1407 1 +1404 1408 1 +1404 1759 1 +1404 1760 0 +1405 1406 -1 +1405 1429 0 +1406 1430 0 +1407 1408 1 +1407 1431 0 +1408 1432 0 +1409 1049 1 +1409 1405 1 +1409 1406 1 +1409 1413 -1 +1409 1414 1 +1409 1415 -1 +1409 1416 0 +1409 1767 0 +1409 1768 0 +1409 1781 1 +1409 1783 1 +1409 1784 1 +1410 1050 1 +1410 1405 0 +1410 1406 0 +1410 1409 1 +1410 1413 0 +1410 1414 0 +1410 1415 1 +1410 1416 1 +1410 1767 -1 +1410 1768 0 +1410 1781 1 +1410 1783 1 +1410 1784 1 +1411 1051 0 +1411 1405 0 +1411 1406 -1 +1411 1413 1 +1411 1414 0 +1411 1415 1 +1411 1416 1 +1411 1757 1 +1411 1758 1 +1411 1759 1 +1411 1760 -1 +1411 1767 0 +1411 1768 0 +1412 1052 1 +1412 1405 1 +1412 1406 1 +1412 1411 1 +1412 1413 0 +1412 1414 0 +1412 1415 1 +1412 1416 1 +1412 1757 0 +1412 1758 -1 +1412 1759 1 +1412 1760 1 +1412 1767 1 +1412 1768 1 +1413 1414 0 +1413 1437 1 +1414 1438 0 +1415 1416 0 +1415 1439 1 +1416 1440 -1 +1417 1053 1 +1417 1054 0 +1417 1057 0 +1417 1415 -1 +1417 1416 0 +1417 1421 0 +1417 1422 1 +1417 1423 1 +1417 1424 0 +1417 1429 1 +1417 1430 1 +1417 1431 1 +1417 1432 0 +1418 1053 1 +1418 1054 1 +1418 1058 1 +1418 1415 1 +1418 1416 0 +1418 1417 0 +1418 1421 -1 +1418 1422 0 +1418 1423 0 +1418 1424 -1 +1418 1429 0 +1418 1430 1 +1418 1431 1 +1418 1432 1 +1419 1053 0 +1419 1054 -1 +1419 1059 1 +1419 1405 1 +1419 1406 0 +1419 1407 1 +1419 1408 1 +1419 1415 1 +1419 1416 0 +1419 1421 1 +1419 1422 1 +1419 1423 1 +1419 1424 0 +1420 1053 1 +1420 1054 1 +1420 1060 1 +1420 1405 1 +1420 1406 1 +1420 1407 1 +1420 1408 -1 +1420 1415 0 +1420 1416 1 +1420 1419 1 +1420 1421 1 +1420 1422 -1 +1420 1423 1 +1420 1424 1 +1421 1422 0 +1423 1424 0 +1425 1065 0 +1425 1421 1 +1425 1422 0 +1425 1429 0 +1425 1430 0 +1425 1431 1 +1425 1432 0 +1425 1437 1 +1425 1438 1 +1425 1439 1 +1425 1440 0 +1425 1783 1 +1425 1784 1 +1426 1066 -1 +1426 1421 0 +1426 1422 1 +1426 1425 1 +1426 1429 1 +1426 1430 1 +1426 1431 1 +1426 1432 1 +1426 1437 1 +1426 1438 0 +1426 1439 1 +1426 1440 1 +1426 1783 -1 +1426 1784 0 +1427 1067 0 +1427 1413 1 +1427 1414 -1 +1427 1415 0 +1427 1416 1 +1427 1421 1 +1427 1422 1 +1427 1429 1 +1427 1430 1 +1427 1431 1 +1427 1432 1 +1427 1783 1 +1427 1784 1 +1428 1068 1 +1428 1413 1 +1428 1414 1 +1428 1415 1 +1428 1416 1 +1428 1421 1 +1428 1422 0 +1428 1427 0 +1428 1429 1 +1428 1430 1 +1428 1431 1 +1428 1432 1 +1428 1783 0 +1428 1784 1 +1429 1430 1 +1431 1432 0 +1433 1073 1 +1433 1429 1 +1433 1430 1 +1433 1437 -1 +1433 1438 1 +1433 1439 1 +1433 1440 1 +1433 1791 1 +1433 1792 1 +1434 1074 1 +1434 1429 1 +1434 1430 0 +1434 1433 1 +1434 1437 0 +1434 1438 1 +1434 1439 1 +1434 1440 0 +1434 1791 1 +1434 1792 1 +1435 1075 0 +1435 1429 0 +1435 1430 1 +1435 1437 0 +1435 1438 0 +1435 1439 1 +1435 1440 -1 +1435 1781 1 +1435 1783 1 +1435 1784 -1 +1435 1791 -1 +1435 1792 1 +1436 1076 1 +1436 1429 1 +1436 1430 1 +1436 1435 0 +1436 1437 1 +1436 1438 1 +1436 1439 1 +1436 1440 0 +1436 1781 0 +1436 1783 0 +1436 1784 0 +1436 1791 1 +1436 1792 1 +1437 1438 1 +1439 1440 0 +1441 1081 0 +1441 1445 1 +1441 1446 1 +1441 1447 1 +1441 1448 1 +1441 1453 1 +1441 1454 0 +1441 1455 -1 +1441 1456 1 +1442 1082 0 +1442 1441 1 +1442 1445 -1 +1442 1446 1 +1442 1447 1 +1442 1448 0 +1442 1453 0 +1442 1454 -1 +1442 1455 0 +1442 1456 -1 +1443 1083 1 +1443 1445 1 +1443 1446 1 +1443 1447 1 +1443 1448 1 +1444 1084 1 +1444 1443 1 +1444 1445 1 +1444 1446 1 +1444 1447 1 +1444 1448 1 +1445 1446 0 +1445 1469 -1 +1446 1470 0 +1447 1448 0 +1447 1471 -1 +1448 1472 1 +1449 1089 0 +1449 1445 1 +1449 1446 1 +1449 1453 1 +1449 1454 0 +1449 1455 1 +1449 1456 -1 +1449 1461 0 +1449 1462 1 +1449 1463 0 +1449 1464 1 +1449 1807 1 +1449 1808 1 +1450 1090 1 +1450 1445 1 +1450 1446 1 +1450 1449 1 +1450 1453 0 +1450 1454 1 +1450 1455 0 +1450 1456 1 +1450 1461 0 +1450 1462 1 +1450 1463 0 +1450 1464 0 +1450 1807 -1 +1450 1808 1 +1451 1091 1 +1451 1445 0 +1451 1446 1 +1451 1453 1 +1451 1454 1 +1451 1455 1 +1451 1456 1 +1451 1807 1 +1451 1808 1 +1452 1092 0 +1452 1445 1 +1452 1446 1 +1452 1451 1 +1452 1453 0 +1452 1454 0 +1452 1455 1 +1452 1456 1 +1452 1807 1 +1452 1808 -1 +1453 1454 -1 +1453 1477 1 +1454 1478 1 +1455 1456 1 +1455 1479 0 +1456 1480 1 +1457 1097 1 +1457 1453 1 +1457 1454 1 +1457 1461 0 +1457 1462 0 +1457 1463 0 +1457 1464 0 +1457 1815 0 +1457 1816 1 +1457 1829 1 +1457 1830 0 +1457 1831 1 +1457 1832 1 +1458 1098 0 +1458 1453 0 +1458 1454 -1 +1458 1457 1 +1458 1461 1 +1458 1462 1 +1458 1463 0 +1458 1464 0 +1458 1815 -1 +1458 1816 0 +1458 1829 0 +1458 1830 1 +1458 1831 0 +1458 1832 0 +1459 1099 1 +1459 1453 0 +1459 1454 0 +1459 1461 1 +1459 1462 0 +1459 1463 1 +1459 1464 1 +1459 1805 1 +1459 1806 1 +1459 1807 1 +1459 1808 0 +1459 1815 1 +1459 1816 1 +1460 1100 -1 +1460 1453 1 +1460 1454 1 +1460 1459 0 +1460 1461 1 +1460 1462 0 +1460 1463 1 +1460 1464 1 +1460 1805 1 +1460 1806 0 +1460 1807 1 +1460 1808 1 +1460 1815 1 +1460 1816 1 +1461 1462 1 +1461 1485 0 +1462 1486 1 +1463 1464 -1 +1463 1487 1 +1464 1488 0 +1465 1101 0 +1465 1102 1 +1465 1105 0 +1465 1463 0 +1465 1464 0 +1465 1469 1 +1465 1470 1 +1465 1471 1 +1465 1472 0 +1465 1477 0 +1465 1478 1 +1465 1479 1 +1465 1480 0 +1466 1101 0 +1466 1102 0 +1466 1106 1 +1466 1463 1 +1466 1464 0 +1466 1465 1 +1466 1469 1 +1466 1470 0 +1466 1471 -1 +1466 1472 1 +1466 1477 1 +1466 1478 1 +1466 1479 0 +1466 1480 0 +1467 1101 1 +1467 1102 1 +1467 1107 1 +1467 1453 1 +1467 1454 1 +1467 1455 1 +1467 1456 1 +1467 1463 0 +1467 1464 -1 +1467 1469 0 +1467 1470 1 +1467 1471 0 +1467 1472 0 +1468 1101 1 +1468 1102 0 +1468 1108 -1 +1468 1453 1 +1468 1454 0 +1468 1455 1 +1468 1456 1 +1468 1463 0 +1468 1464 -1 +1468 1467 0 +1468 1469 1 +1468 1470 1 +1468 1471 1 +1468 1472 0 +1469 1470 1 +1469 1493 1 +1470 1494 1 +1471 1472 1 +1471 1495 1 +1472 1496 1 +1473 1113 0 +1473 1469 -1 +1473 1470 0 +1473 1477 1 +1473 1478 0 +1473 1479 1 +1473 1480 1 +1473 1485 1 +1473 1486 0 +1473 1487 1 +1473 1488 1 +1473 1831 0 +1473 1832 1 +1474 1114 1 +1474 1469 0 +1474 1470 -1 +1474 1473 -1 +1474 1477 1 +1474 1478 1 +1474 1479 1 +1474 1480 0 +1474 1485 0 +1474 1486 1 +1474 1487 -1 +1474 1488 0 +1474 1831 1 +1474 1832 -1 +1475 1115 1 +1475 1461 1 +1475 1462 -1 +1475 1463 -1 +1475 1464 1 +1475 1469 0 +1475 1470 1 +1475 1477 0 +1475 1478 0 +1475 1479 1 +1475 1480 0 +1475 1831 1 +1475 1832 1 +1476 1116 0 +1476 1461 0 +1476 1462 1 +1476 1463 1 +1476 1464 0 +1476 1469 1 +1476 1470 1 +1476 1475 1 +1476 1477 1 +1476 1478 0 +1476 1479 0 +1476 1480 0 +1476 1831 1 +1476 1832 -1 +1477 1478 -1 +1477 1501 0 +1478 1502 0 +1479 1480 0 +1479 1503 1 +1480 1504 0 +1481 1121 0 +1481 1477 1 +1481 1478 1 +1481 1485 1 +1481 1486 0 +1481 1487 1 +1481 1488 1 +1481 1839 1 +1481 1840 -1 +1481 1853 0 +1481 1854 1 +1481 1855 0 +1481 1856 0 +1482 1122 1 +1482 1477 1 +1482 1478 1 +1482 1481 1 +1482 1485 0 +1482 1486 0 +1482 1487 1 +1482 1488 1 +1482 1839 1 +1482 1840 1 +1482 1853 0 +1482 1854 1 +1482 1855 1 +1482 1856 -1 +1483 1123 -1 +1483 1477 1 +1483 1478 1 +1483 1485 1 +1483 1486 1 +1483 1487 1 +1483 1488 1 +1483 1829 1 +1483 1830 1 +1483 1831 1 +1483 1832 -1 +1483 1839 0 +1483 1840 1 +1484 1124 1 +1484 1477 0 +1484 1478 1 +1484 1483 0 +1484 1485 1 +1484 1486 1 +1484 1487 0 +1484 1488 1 +1484 1829 1 +1484 1830 0 +1484 1831 1 +1484 1832 1 +1484 1839 0 +1484 1840 0 +1485 1486 0 +1485 1509 1 +1486 1510 1 +1487 1488 1 +1487 1511 -1 +1488 1512 1 +1489 1125 0 +1489 1126 1 +1489 1129 0 +1489 1487 1 +1489 1488 0 +1489 1493 1 +1489 1494 1 +1489 1495 1 +1489 1496 1 +1489 1501 1 +1489 1502 -1 +1489 1503 1 +1489 1504 1 +1490 1125 0 +1490 1126 0 +1490 1130 1 +1490 1487 1 +1490 1488 0 +1490 1489 1 +1490 1493 1 +1490 1494 0 +1490 1495 1 +1490 1496 1 +1490 1501 0 +1490 1502 0 +1490 1503 0 +1490 1504 1 +1491 1125 1 +1491 1126 1 +1491 1131 1 +1491 1477 1 +1491 1478 -1 +1491 1479 0 +1491 1480 1 +1491 1487 0 +1491 1488 0 +1491 1493 1 +1491 1494 0 +1491 1495 1 +1491 1496 1 +1492 1125 0 +1492 1126 1 +1492 1132 1 +1492 1477 0 +1492 1478 1 +1492 1479 -1 +1492 1480 1 +1492 1487 0 +1492 1488 1 +1492 1491 1 +1492 1493 1 +1492 1494 1 +1492 1495 1 +1492 1496 -1 +1493 1494 0 +1493 1517 1 +1494 1518 1 +1495 1496 1 +1495 1519 0 +1496 1520 0 +1497 1137 1 +1497 1493 1 +1497 1494 1 +1497 1501 1 +1497 1502 1 +1497 1503 0 +1497 1504 1 +1497 1509 1 +1497 1510 0 +1497 1511 1 +1497 1512 1 +1497 1855 1 +1497 1856 0 +1498 1138 -1 +1498 1493 0 +1498 1494 0 +1498 1497 -1 +1498 1501 0 +1498 1502 1 +1498 1503 0 +1498 1504 0 +1498 1509 1 +1498 1510 0 +1498 1511 -1 +1498 1512 1 +1498 1855 1 +1498 1856 1 +1499 1139 1 +1499 1485 1 +1499 1486 0 +1499 1487 1 +1499 1488 1 +1499 1493 1 +1499 1494 1 +1499 1501 1 +1499 1502 1 +1499 1503 1 +1499 1504 0 +1499 1855 1 +1499 1856 -1 +1500 1140 1 +1500 1485 0 +1500 1486 1 +1500 1487 1 +1500 1488 -1 +1500 1493 0 +1500 1494 1 +1500 1499 -1 +1500 1501 1 +1500 1502 1 +1500 1503 1 +1500 1504 0 +1500 1855 1 +1500 1856 -1 +1501 1502 1 +1501 1525 -1 +1502 1526 1 +1503 1504 1 +1503 1527 1 +1504 1528 1 +1505 1145 1 +1505 1501 1 +1505 1502 0 +1505 1509 0 +1505 1510 1 +1505 1511 1 +1505 1512 -1 +1505 1863 1 +1505 1864 1 +1505 1877 0 +1505 1878 0 +1505 1879 1 +1505 1880 1 +1506 1146 0 +1506 1501 1 +1506 1502 1 +1506 1505 1 +1506 1509 0 +1506 1510 1 +1506 1511 -1 +1506 1512 0 +1506 1863 -1 +1506 1864 -1 +1506 1877 1 +1506 1878 1 +1506 1879 -1 +1506 1880 1 +1507 1147 1 +1507 1501 1 +1507 1502 1 +1507 1509 0 +1507 1510 1 +1507 1511 0 +1507 1512 -1 +1507 1853 0 +1507 1854 1 +1507 1855 -1 +1507 1856 1 +1507 1863 0 +1507 1864 0 +1508 1148 0 +1508 1501 1 +1508 1502 1 +1508 1507 1 +1508 1509 0 +1508 1510 1 +1508 1511 1 +1508 1512 1 +1508 1853 0 +1508 1854 1 +1508 1855 1 +1508 1856 1 +1508 1863 1 +1508 1864 1 +1509 1510 -1 +1509 1533 0 +1510 1534 1 +1511 1512 0 +1512 1536 0 +1513 1149 1 +1513 1150 1 +1513 1153 1 +1513 1511 1 +1513 1512 0 +1513 1517 1 +1513 1518 0 +1513 1519 1 +1513 1520 1 +1513 1525 1 +1513 1526 0 +1513 1527 0 +1513 1528 0 +1514 1149 0 +1514 1150 1 +1514 1154 1 +1514 1511 1 +1514 1512 -1 +1514 1513 1 +1514 1517 1 +1514 1518 0 +1514 1519 0 +1514 1520 0 +1514 1525 -1 +1514 1526 1 +1514 1527 0 +1514 1528 0 +1515 1149 0 +1515 1150 1 +1515 1155 0 +1515 1501 1 +1515 1502 0 +1515 1503 1 +1515 1504 0 +1515 1511 0 +1515 1512 1 +1515 1517 -1 +1515 1518 0 +1515 1519 1 +1515 1520 1 +1516 1149 1 +1516 1150 -1 +1516 1156 1 +1516 1501 1 +1516 1502 0 +1516 1503 0 +1516 1504 0 +1516 1511 0 +1516 1512 1 +1516 1515 1 +1516 1517 1 +1516 1518 0 +1516 1519 -1 +1516 1520 1 +1517 1518 0 +1517 1541 1 +1518 1542 1 +1519 1520 1 +1519 1543 1 +1520 1544 0 +1521 1161 1 +1521 1517 0 +1521 1518 0 +1521 1525 0 +1521 1526 0 +1521 1527 1 +1521 1528 1 +1521 1533 -1 +1521 1534 1 +1521 1535 0 +1521 1536 1 +1521 1879 -1 +1521 1880 1 +1522 1162 1 +1522 1517 1 +1522 1518 1 +1522 1521 1 +1522 1525 0 +1522 1526 0 +1522 1527 1 +1522 1528 0 +1522 1533 1 +1522 1534 1 +1522 1535 1 +1522 1536 1 +1522 1879 1 +1522 1880 1 +1523 1163 1 +1523 1509 0 +1523 1510 0 +1523 1511 1 +1523 1512 0 +1523 1517 1 +1523 1518 0 +1523 1525 1 +1523 1526 0 +1523 1527 0 +1523 1528 0 +1523 1879 -1 +1523 1880 1 +1524 1164 0 +1524 1509 1 +1524 1510 1 +1524 1511 1 +1524 1512 1 +1524 1517 1 +1524 1518 1 +1524 1523 0 +1524 1525 1 +1524 1526 1 +1524 1527 1 +1524 1528 1 +1524 1879 0 +1524 1880 1 +1525 1526 0 +1525 1549 1 +1526 1550 0 +1527 1528 1 +1527 1551 1 +1528 1552 0 +1529 1169 0 +1529 1525 1 +1529 1526 -1 +1529 1533 1 +1529 1534 0 +1529 1535 1 +1529 1536 0 +1529 1887 -1 +1529 1888 1 +1529 1901 1 +1529 1902 -1 +1529 1903 1 +1529 1904 1 +1530 1170 1 +1530 1525 -1 +1530 1526 -1 +1530 1529 1 +1530 1533 1 +1530 1534 1 +1530 1535 -1 +1530 1536 1 +1530 1887 0 +1530 1888 0 +1530 1901 0 +1530 1902 0 +1530 1903 1 +1530 1904 1 +1531 1171 1 +1531 1525 1 +1531 1526 1 +1531 1533 0 +1531 1534 0 +1531 1535 1 +1531 1536 -1 +1531 1877 1 +1531 1878 0 +1531 1879 0 +1531 1880 1 +1531 1887 0 +1531 1888 1 +1532 1172 0 +1532 1525 0 +1532 1526 1 +1532 1531 0 +1532 1533 1 +1532 1534 1 +1532 1535 -1 +1532 1536 1 +1532 1877 0 +1532 1878 1 +1532 1879 -1 +1532 1880 -1 +1532 1887 1 +1532 1888 1 +1533 1534 1 +1533 1557 1 +1534 1558 1 +1535 1536 1 +1535 1559 1 +1536 1560 1 +1537 1173 0 +1537 1174 1 +1537 1177 1 +1537 1535 1 +1537 1536 1 +1537 1541 1 +1537 1542 0 +1537 1543 0 +1537 1544 1 +1537 1549 -1 +1537 1550 1 +1537 1551 1 +1537 1552 1 +1538 1173 1 +1538 1174 0 +1538 1178 0 +1538 1535 0 +1538 1536 0 +1538 1537 0 +1538 1541 1 +1538 1542 0 +1538 1543 0 +1538 1544 1 +1538 1549 1 +1538 1550 0 +1538 1551 0 +1538 1552 1 +1539 1173 1 +1539 1174 1 +1539 1179 1 +1539 1525 1 +1539 1526 -1 +1539 1527 0 +1539 1528 1 +1539 1535 0 +1539 1536 1 +1539 1541 1 +1539 1542 0 +1539 1543 0 +1539 1544 0 +1540 1173 1 +1540 1174 -1 +1540 1180 0 +1540 1525 1 +1540 1526 1 +1540 1527 -1 +1540 1528 0 +1540 1535 1 +1540 1536 1 +1540 1539 -1 +1540 1541 1 +1540 1542 0 +1540 1543 -1 +1540 1544 1 +1541 1542 -1 +1541 1565 1 +1542 1566 1 +1543 1544 0 +1543 1567 0 +1544 1568 1 +1545 1185 1 +1545 1541 1 +1545 1542 0 +1545 1549 -1 +1545 1550 1 +1545 1551 0 +1545 1552 1 +1545 1557 0 +1545 1558 -1 +1545 1559 0 +1545 1560 -1 +1545 1903 0 +1545 1904 -1 +1546 1186 1 +1546 1541 -1 +1546 1542 1 +1546 1545 1 +1546 1549 0 +1546 1550 0 +1546 1551 0 +1546 1552 -1 +1546 1557 1 +1546 1558 -1 +1546 1559 0 +1546 1560 1 +1546 1903 1 +1546 1904 0 +1547 1187 0 +1547 1533 1 +1547 1534 -1 +1547 1535 1 +1547 1536 1 +1547 1541 -1 +1547 1542 1 +1547 1549 1 +1547 1550 1 +1547 1551 -1 +1547 1552 0 +1547 1903 1 +1547 1904 0 +1548 1188 0 +1548 1533 1 +1548 1534 0 +1548 1535 1 +1548 1536 -1 +1548 1541 1 +1548 1542 1 +1548 1547 1 +1548 1549 -1 +1548 1550 0 +1548 1551 1 +1548 1552 1 +1548 1903 1 +1548 1904 -1 +1549 1550 0 +1549 1573 0 +1550 1574 0 +1551 1552 1 +1551 1575 0 +1552 1576 0 +1553 1193 1 +1553 1549 0 +1553 1550 1 +1553 1557 1 +1553 1558 1 +1553 1559 0 +1553 1560 1 +1553 1911 1 +1553 1912 1 +1553 1925 0 +1553 1926 1 +1553 1927 1 +1553 1928 1 +1554 1194 1 +1554 1549 0 +1554 1550 1 +1554 1553 0 +1554 1557 0 +1554 1558 0 +1554 1559 0 +1554 1560 1 +1554 1911 1 +1554 1912 1 +1554 1925 1 +1554 1926 0 +1554 1927 1 +1554 1928 1 +1555 1195 1 +1555 1549 1 +1555 1550 1 +1555 1557 1 +1555 1558 0 +1555 1559 1 +1555 1560 0 +1555 1901 0 +1555 1902 0 +1555 1903 1 +1555 1904 0 +1555 1911 1 +1555 1912 0 +1556 1196 -1 +1556 1549 0 +1556 1550 1 +1556 1555 1 +1556 1557 1 +1556 1558 1 +1556 1559 1 +1556 1560 -1 +1556 1901 1 +1556 1902 1 +1556 1903 -1 +1556 1904 1 +1556 1911 0 +1556 1912 1 +1557 1558 1 +1557 1581 1 +1558 1582 1 +1559 1560 0 +1559 1583 1 +1560 1584 0 +1561 1197 1 +1561 1198 1 +1561 1201 1 +1561 1559 -1 +1561 1560 1 +1561 1565 1 +1561 1566 0 +1561 1567 1 +1561 1568 1 +1561 1573 0 +1561 1574 1 +1561 1575 -1 +1561 1576 0 +1562 1197 1 +1562 1198 0 +1562 1202 1 +1562 1559 1 +1562 1560 1 +1562 1561 1 +1562 1565 -1 +1562 1566 1 +1562 1567 1 +1562 1568 1 +1562 1573 0 +1562 1574 0 +1562 1575 0 +1562 1576 1 +1563 1197 0 +1563 1198 0 +1563 1203 1 +1563 1549 1 +1563 1550 0 +1563 1551 0 +1563 1552 -1 +1563 1559 1 +1563 1560 0 +1563 1565 0 +1563 1566 0 +1563 1567 0 +1563 1568 1 +1564 1197 1 +1564 1198 0 +1564 1204 1 +1564 1549 1 +1564 1550 0 +1564 1551 0 +1564 1552 1 +1564 1559 0 +1564 1560 1 +1564 1563 1 +1564 1565 1 +1564 1566 -1 +1564 1567 1 +1564 1568 1 +1565 1566 1 +1565 1589 1 +1566 1590 0 +1567 1568 1 +1567 1591 0 +1568 1592 -1 +1569 1209 1 +1569 1565 1 +1569 1566 1 +1569 1573 1 +1569 1574 1 +1569 1575 -1 +1569 1576 0 +1569 1581 1 +1569 1582 1 +1569 1583 0 +1569 1584 1 +1569 1927 -1 +1569 1928 1 +1570 1210 1 +1570 1565 1 +1570 1566 1 +1570 1569 0 +1570 1573 -1 +1570 1574 1 +1570 1575 0 +1570 1576 1 +1570 1581 1 +1570 1582 1 +1570 1583 0 +1570 1584 -1 +1570 1927 1 +1570 1928 1 +1571 1211 1 +1571 1557 0 +1571 1558 1 +1571 1559 1 +1571 1560 1 +1571 1565 1 +1571 1566 1 +1571 1573 -1 +1571 1574 1 +1571 1575 0 +1571 1576 0 +1571 1927 1 +1571 1928 0 +1572 1212 1 +1572 1557 0 +1572 1558 1 +1572 1559 1 +1572 1560 1 +1572 1565 0 +1572 1566 1 +1572 1571 1 +1572 1573 1 +1572 1574 0 +1572 1575 1 +1572 1576 1 +1572 1927 -1 +1572 1928 -1 +1573 1574 1 +1573 1597 1 +1574 1598 -1 +1575 1576 1 +1575 1599 1 +1576 1600 -1 +1577 1217 1 +1577 1573 1 +1577 1574 0 +1577 1581 0 +1577 1582 1 +1577 1583 1 +1577 1584 1 +1577 1935 1 +1577 1936 0 +1577 1949 -1 +1577 1950 1 +1577 1951 1 +1577 1952 0 +1578 1218 1 +1578 1573 0 +1578 1574 1 +1578 1577 1 +1578 1581 0 +1578 1582 0 +1578 1583 0 +1578 1584 0 +1578 1935 1 +1578 1936 -1 +1578 1949 1 +1578 1950 1 +1578 1951 1 +1578 1952 0 +1579 1219 0 +1579 1573 0 +1579 1574 1 +1579 1581 1 +1579 1582 1 +1579 1583 0 +1579 1584 1 +1579 1925 0 +1579 1926 1 +1579 1927 1 +1579 1928 1 +1579 1935 -1 +1579 1936 -1 +1580 1220 1 +1580 1573 1 +1580 1574 1 +1580 1579 0 +1580 1581 1 +1580 1582 -1 +1580 1583 0 +1580 1584 1 +1580 1925 0 +1580 1926 1 +1580 1927 1 +1580 1928 0 +1580 1935 1 +1580 1936 1 +1581 1582 1 +1581 1605 1 +1582 1606 0 +1583 1584 0 +1583 1607 0 +1584 1608 0 +1585 1221 1 +1585 1222 0 +1585 1225 1 +1585 1583 0 +1585 1584 1 +1585 1589 1 +1585 1590 -1 +1585 1591 1 +1585 1592 1 +1585 1597 0 +1585 1598 1 +1585 1599 0 +1585 1600 1 +1586 1221 0 +1586 1222 0 +1586 1226 0 +1586 1583 -1 +1586 1584 0 +1586 1585 1 +1586 1589 1 +1586 1590 1 +1586 1591 1 +1586 1592 1 +1586 1597 0 +1586 1598 1 +1586 1599 1 +1586 1600 1 +1587 1221 1 +1587 1222 1 +1587 1227 0 +1587 1573 1 +1587 1574 1 +1587 1575 0 +1587 1576 1 +1587 1583 1 +1587 1584 1 +1587 1589 1 +1587 1590 0 +1587 1591 0 +1587 1592 1 +1588 1221 0 +1588 1222 1 +1588 1228 1 +1588 1573 0 +1588 1574 1 +1588 1575 0 +1588 1576 0 +1588 1583 0 +1588 1584 0 +1588 1587 1 +1588 1589 1 +1588 1590 0 +1588 1591 1 +1588 1592 -1 +1589 1590 1 +1589 1613 1 +1590 1614 0 +1591 1592 1 +1591 1615 1 +1592 1616 0 +1593 1233 0 +1593 1589 0 +1593 1590 1 +1593 1597 -1 +1593 1598 0 +1593 1599 1 +1593 1600 1 +1593 1605 0 +1593 1606 0 +1593 1607 0 +1593 1608 1 +1593 1951 0 +1593 1952 1 +1594 1234 1 +1594 1589 1 +1594 1590 1 +1594 1593 -1 +1594 1597 0 +1594 1598 1 +1594 1599 1 +1594 1600 1 +1594 1605 0 +1594 1606 1 +1594 1607 1 +1594 1608 0 +1594 1951 -1 +1594 1952 -1 +1595 1235 1 +1595 1581 1 +1595 1582 1 +1595 1583 1 +1595 1584 1 +1595 1589 1 +1595 1590 1 +1595 1597 1 +1595 1598 1 +1595 1599 1 +1595 1600 0 +1595 1951 1 +1595 1952 1 +1596 1236 0 +1596 1581 1 +1596 1582 1 +1596 1583 0 +1596 1584 1 +1596 1589 1 +1596 1590 1 +1596 1595 1 +1596 1597 0 +1596 1598 1 +1596 1599 1 +1596 1600 1 +1596 1951 0 +1596 1952 1 +1597 1598 1 +1597 1621 1 +1598 1622 1 +1599 1600 0 +1599 1623 1 +1600 1624 0 +1601 1241 1 +1601 1597 -1 +1601 1598 1 +1601 1605 0 +1601 1606 1 +1601 1607 0 +1601 1608 1 +1601 1959 0 +1601 1960 1 +1601 1973 0 +1601 1974 1 +1601 1975 0 +1601 1976 0 +1602 1242 1 +1602 1597 0 +1602 1598 1 +1602 1601 1 +1602 1605 0 +1602 1606 1 +1602 1607 1 +1602 1608 1 +1602 1959 0 +1602 1960 1 +1602 1973 1 +1602 1974 -1 +1602 1975 1 +1602 1976 0 +1603 1243 1 +1603 1597 0 +1603 1598 1 +1603 1605 -1 +1603 1606 1 +1603 1607 1 +1603 1608 0 +1603 1949 0 +1603 1950 1 +1603 1951 0 +1603 1952 1 +1603 1959 1 +1603 1960 -1 +1604 1244 1 +1604 1597 -1 +1604 1598 1 +1604 1603 1 +1604 1605 1 +1604 1606 1 +1604 1607 1 +1604 1608 0 +1604 1949 1 +1604 1950 1 +1604 1951 0 +1604 1952 1 +1604 1959 1 +1604 1960 -1 +1605 1606 1 +1605 1629 0 +1606 1630 1 +1607 1608 -1 +1607 1631 1 +1608 1632 -1 +1609 1245 0 +1609 1246 0 +1609 1249 1 +1609 1607 1 +1609 1608 1 +1609 1613 0 +1609 1614 1 +1609 1615 1 +1609 1616 1 +1609 1621 1 +1609 1622 0 +1609 1623 1 +1609 1624 1 +1610 1245 1 +1610 1246 1 +1610 1250 -1 +1610 1607 0 +1610 1608 -1 +1610 1609 1 +1610 1613 1 +1610 1614 1 +1610 1615 0 +1610 1616 1 +1610 1621 0 +1610 1622 1 +1610 1623 0 +1610 1624 1 +1611 1245 0 +1611 1246 1 +1611 1251 0 +1611 1597 1 +1611 1598 1 +1611 1599 0 +1611 1600 0 +1611 1607 0 +1611 1608 0 +1611 1613 1 +1611 1614 1 +1611 1615 0 +1611 1616 0 +1612 1245 0 +1612 1246 0 +1612 1252 1 +1612 1597 1 +1612 1598 0 +1612 1599 0 +1612 1600 -1 +1612 1607 1 +1612 1608 1 +1612 1611 0 +1612 1613 1 +1612 1614 1 +1612 1615 0 +1612 1616 1 +1613 1614 1 +1613 1637 0 +1614 1638 1 +1615 1616 1 +1615 1639 0 +1616 1640 1 +1617 1257 1 +1617 1613 1 +1617 1614 0 +1617 1621 1 +1617 1622 -1 +1617 1623 0 +1617 1624 1 +1617 1629 0 +1617 1630 0 +1617 1631 1 +1617 1632 1 +1617 1975 1 +1617 1976 1 +1618 1258 0 +1618 1613 1 +1618 1614 1 +1618 1617 1 +1618 1621 1 +1618 1622 -1 +1618 1623 0 +1618 1624 1 +1618 1629 1 +1618 1630 1 +1618 1631 1 +1618 1632 0 +1618 1975 1 +1618 1976 0 +1619 1259 0 +1619 1605 1 +1619 1606 1 +1619 1607 -1 +1619 1608 1 +1619 1613 1 +1619 1614 1 +1619 1621 0 +1619 1622 1 +1619 1623 -1 +1619 1624 0 +1619 1975 1 +1619 1976 1 +1620 1260 1 +1620 1605 1 +1620 1606 0 +1620 1607 0 +1620 1608 0 +1620 1613 1 +1620 1614 0 +1620 1619 0 +1620 1621 0 +1620 1622 0 +1620 1623 1 +1620 1624 0 +1620 1975 0 +1620 1976 0 +1621 1622 0 +1621 1645 0 +1622 1646 -1 +1623 1624 1 +1623 1647 0 +1624 1648 1 +1625 1265 1 +1625 1621 0 +1625 1622 1 +1625 1629 1 +1625 1630 1 +1625 1631 1 +1625 1632 1 +1625 1983 0 +1625 1984 0 +1625 1997 0 +1625 1998 0 +1625 1999 0 +1625 2000 1 +1626 1266 -1 +1626 1621 1 +1626 1622 1 +1626 1625 1 +1626 1629 1 +1626 1630 0 +1626 1631 1 +1626 1632 0 +1626 1983 1 +1626 1984 1 +1626 1997 1 +1626 1998 0 +1626 1999 1 +1626 2000 -1 +1627 1267 1 +1627 1621 1 +1627 1622 0 +1627 1629 1 +1627 1630 0 +1627 1631 1 +1627 1632 1 +1627 1973 1 +1627 1974 1 +1627 1975 1 +1627 1976 0 +1627 1983 0 +1627 1984 1 +1629 1630 1 +1629 1653 1 +1630 1654 1 +1631 1632 0 +1631 1655 0 +1632 1656 0 +1633 1269 0 +1633 1270 0 +1633 1273 1 +1633 1631 1 +1633 1632 1 +1633 1637 1 +1633 1638 0 +1633 1639 1 +1633 1640 0 +1633 1645 0 +1633 1646 1 +1633 1647 1 +1633 1648 0 +1634 1269 1 +1634 1270 1 +1634 1274 1 +1634 1631 0 +1634 1632 1 +1634 1633 0 +1634 1637 0 +1634 1638 1 +1634 1639 0 +1634 1640 1 +1634 1645 1 +1634 1646 1 +1634 1647 1 +1634 1648 -1 +1635 1269 0 +1635 1270 0 +1635 1275 0 +1635 1621 0 +1635 1622 1 +1635 1623 0 +1635 1624 0 +1635 1631 0 +1635 1632 -1 +1635 1637 1 +1635 1638 0 +1635 1639 1 +1635 1640 0 +1636 1269 0 +1636 1270 -1 +1636 1276 1 +1636 1621 -1 +1636 1622 1 +1636 1623 1 +1636 1624 0 +1636 1631 -1 +1636 1632 0 +1636 1635 0 +1636 1637 1 +1636 1638 1 +1636 1639 1 +1636 1640 1 +1637 1638 1 +1637 1661 1 +1638 1662 1 +1639 1640 1 +1639 1663 0 +1640 1664 0 +1641 1281 0 +1641 1637 0 +1641 1638 0 +1641 1645 1 +1641 1646 1 +1641 1647 1 +1641 1648 0 +1641 1653 1 +1641 1654 0 +1641 1655 1 +1641 1656 -1 +1641 1999 1 +1641 2000 1 +1642 1282 1 +1642 1637 1 +1642 1638 0 +1642 1641 1 +1642 1645 1 +1642 1646 0 +1642 1647 1 +1642 1648 -1 +1642 1653 1 +1642 1654 1 +1642 1655 1 +1642 1656 1 +1642 1999 1 +1642 2000 0 +1643 1283 0 +1643 1629 0 +1643 1630 0 +1643 1631 0 +1643 1632 0 +1643 1637 1 +1643 1638 1 +1643 1645 0 +1643 1646 -1 +1643 1647 0 +1643 1648 1 +1643 1999 1 +1643 2000 0 +1644 1284 1 +1644 1629 1 +1644 1630 0 +1644 1631 1 +1644 1632 0 +1644 1637 0 +1644 1638 1 +1644 1643 0 +1644 1645 0 +1644 1646 0 +1644 1647 -1 +1644 1648 0 +1644 1999 0 +1644 2000 0 +1645 1646 0 +1645 1669 0 +1646 1670 1 +1647 1648 0 +1647 1671 1 +1648 1672 1 +1649 1289 -1 +1649 1645 0 +1649 1646 1 +1649 1653 1 +1649 1654 1 +1649 1655 0 +1649 1656 0 +1649 2007 0 +1649 2008 1 +1649 2021 1 +1649 2022 1 +1649 2023 -1 +1649 2024 0 +1650 1290 1 +1650 1645 1 +1650 1646 0 +1650 1649 1 +1650 1653 1 +1650 1654 1 +1650 1655 1 +1650 1656 1 +1650 2007 0 +1650 2008 1 +1650 2021 0 +1650 2022 1 +1650 2023 -1 +1650 2024 0 +1651 1291 1 +1651 1645 1 +1651 1646 1 +1651 1653 -1 +1651 1654 0 +1651 1655 1 +1651 1656 0 +1651 1997 1 +1651 1998 0 +1651 1999 1 +1651 2000 1 +1651 2007 1 +1651 2008 -1 +1652 1292 0 +1652 1645 0 +1652 1646 0 +1652 1651 1 +1652 1653 0 +1652 1654 0 +1652 1655 1 +1652 1656 0 +1652 1997 1 +1652 1998 1 +1652 1999 0 +1652 2000 0 +1652 2007 1 +1652 2008 1 +1653 1654 1 +1653 1677 -1 +1654 1678 0 +1655 1656 1 +1655 1679 -1 +1656 1680 1 +1657 1293 1 +1657 1294 1 +1657 1297 1 +1657 1655 -1 +1657 1656 1 +1657 1661 0 +1657 1662 1 +1657 1663 0 +1657 1664 1 +1657 1669 1 +1657 1670 0 +1657 1671 1 +1657 1672 -1 +1658 1293 1 +1658 1294 0 +1658 1298 0 +1658 1655 1 +1658 1656 1 +1658 1657 1 +1658 1661 1 +1658 1662 0 +1658 1663 1 +1658 1664 0 +1658 1669 0 +1658 1670 1 +1658 1671 1 +1658 1672 1 +1660 1293 0 +1660 1294 1 +1660 1300 0 +1660 1645 1 +1660 1646 1 +1660 1647 1 +1660 1648 0 +1660 1655 1 +1660 1656 1 +1660 1661 0 +1660 1662 0 +1660 1663 -1 +1660 1664 -1 +1661 1662 0 +1661 1685 1 +1662 1686 1 +1663 1664 1 +1663 1687 1 +1664 1688 1 +1665 1305 1 +1665 1661 1 +1665 1662 1 +1665 1669 1 +1665 1670 1 +1665 1671 1 +1665 1672 -1 +1665 1677 1 +1665 1678 1 +1665 1679 1 +1665 1680 1 +1665 2023 1 +1665 2024 1 +1666 1306 -1 +1666 1661 1 +1666 1662 0 +1666 1665 1 +1666 1669 1 +1666 1670 1 +1666 1671 0 +1666 1672 1 +1666 1677 1 +1666 1678 0 +1666 1679 0 +1666 1680 0 +1666 2023 0 +1666 2024 1 +1667 1307 1 +1667 1653 0 +1667 1654 1 +1667 1655 1 +1667 1656 1 +1667 1661 1 +1667 1662 1 +1667 1669 1 +1667 1670 0 +1667 1671 1 +1667 1672 -1 +1667 2023 1 +1667 2024 1 +1668 1308 0 +1668 1653 1 +1668 1654 0 +1668 1655 1 +1668 1656 1 +1668 1661 0 +1668 1662 1 +1668 1667 1 +1668 1669 1 +1668 1670 1 +1668 1671 0 +1668 1672 -1 +1668 2023 1 +1668 2024 0 +1669 1670 1 +1669 1693 1 +1670 1694 1 +1671 1672 0 +1671 1695 1 +1672 1696 -1 +1673 1313 1 +1673 1669 0 +1673 1670 1 +1673 1677 1 +1673 1678 0 +1673 1679 0 +1673 1680 1 +1673 2031 0 +1673 2032 1 +1673 2045 1 +1673 2046 1 +1673 2047 1 +1673 2048 1 +1674 1314 1 +1674 1669 -1 +1674 1670 0 +1674 1673 1 +1674 1677 1 +1674 1678 1 +1674 1679 1 +1674 1680 1 +1674 2031 0 +1674 2032 0 +1674 2045 0 +1674 2046 0 +1674 2047 1 +1674 2048 -1 +1675 1315 0 +1675 1669 1 +1675 1670 1 +1675 1677 1 +1675 1678 0 +1675 1679 1 +1675 1680 0 +1675 2021 0 +1675 2022 1 +1675 2023 0 +1675 2024 1 +1675 2031 -1 +1675 2032 1 +1676 1316 1 +1676 1669 1 +1676 1670 1 +1676 1675 1 +1676 1677 0 +1676 1678 0 +1676 1679 1 +1676 1680 0 +1676 2021 -1 +1676 2022 1 +1676 2023 1 +1676 2024 0 +1676 2031 -1 +1676 2032 0 +1677 1678 -1 +1677 1701 0 +1678 1702 0 +1679 1680 -1 +1679 1703 1 +1680 1704 1 +1681 1317 1 +1681 1318 0 +1681 1321 0 +1681 1679 0 +1681 1680 0 +1681 1685 1 +1681 1686 1 +1681 1687 -1 +1681 1688 0 +1681 1693 -1 +1681 1694 1 +1681 1695 -1 +1681 1696 1 +1682 1317 -1 +1682 1318 -1 +1682 1322 0 +1682 1679 1 +1682 1680 1 +1682 1681 -1 +1682 1685 -1 +1682 1686 1 +1682 1687 0 +1682 1688 0 +1682 1693 0 +1682 1694 1 +1682 1695 1 +1682 1696 1 +1683 1317 1 +1683 1318 0 +1683 1323 1 +1683 1669 1 +1683 1670 0 +1683 1671 1 +1683 1672 1 +1683 1679 1 +1683 1680 1 +1683 1685 1 +1683 1686 0 +1683 1687 1 +1683 1688 -1 +1684 1317 1 +1684 1318 -1 +1684 1324 -1 +1684 1669 1 +1684 1670 1 +1684 1671 0 +1684 1672 1 +1684 1679 0 +1684 1680 1 +1684 1683 1 +1684 1685 0 +1684 1686 1 +1684 1687 0 +1684 1688 1 +1685 1686 1 +1685 1709 1 +1686 1710 1 +1687 1688 1 +1687 1711 1 +1688 1712 1 +1689 1329 0 +1689 1685 0 +1689 1686 1 +1689 1693 0 +1689 1694 0 +1689 1695 0 +1689 1696 1 +1689 1701 0 +1689 1702 -1 +1689 1703 -1 +1689 1704 1 +1689 2047 0 +1689 2048 0 +1690 1330 1 +1690 1685 1 +1690 1686 1 +1690 1689 0 +1690 1693 1 +1690 1694 1 +1690 1695 1 +1690 1696 1 +1690 1701 0 +1690 1702 0 +1690 1703 -1 +1690 1704 1 +1690 2047 -1 +1690 2048 1 +1691 1331 1 +1691 1677 1 +1691 1678 0 +1691 1679 0 +1691 1680 1 +1691 1685 1 +1691 1686 1 +1691 1693 1 +1691 1694 1 +1691 1695 1 +1691 1696 0 +1691 2047 1 +1691 2048 1 +1692 1332 1 +1692 1677 1 +1692 1678 1 +1692 1679 1 +1692 1680 1 +1692 1685 0 +1692 1686 1 +1692 1691 0 +1692 1693 0 +1692 1694 1 +1692 1695 0 +1692 1696 1 +1692 2047 1 +1692 2048 0 +1693 1694 1 +1693 1717 0 +1694 1718 0 +1695 1696 1 +1695 1719 1 +1696 1720 1 +1697 1337 1 +1697 1693 1 +1697 1694 -1 +1697 1701 -1 +1697 1702 1 +1697 1703 1 +1697 1704 0 +1697 2055 1 +1697 2056 1 +1697 2069 0 +1697 2070 -1 +1697 2071 1 +1697 2072 1 +1698 1338 1 +1698 1693 1 +1698 1694 -1 +1698 1697 1 +1698 1701 1 +1698 1702 -1 +1698 1703 0 +1698 1704 -1 +1698 2055 1 +1698 2056 1 +1698 2069 0 +1698 2070 1 +1698 2071 1 +1698 2072 0 +1699 1339 1 +1699 1693 1 +1699 1694 0 +1699 1701 0 +1699 1702 1 +1699 1703 1 +1699 1704 0 +1699 2045 0 +1699 2046 1 +1699 2047 1 +1699 2048 0 +1699 2055 0 +1699 2056 1 +1700 1340 0 +1700 1693 1 +1700 1694 1 +1700 1699 0 +1700 1701 -1 +1700 1702 1 +1700 1703 0 +1700 1704 0 +1700 2045 0 +1700 2046 1 +1700 2047 -1 +1700 2048 0 +1700 2055 1 +1700 2056 1 +1701 1702 1 +1701 1725 1 +1702 1726 1 +1703 1704 1 +1703 1727 0 +1704 1728 1 +1705 1341 1 +1705 1342 -1 +1705 1345 -1 +1705 1703 0 +1705 1704 -1 +1705 1709 1 +1705 1710 0 +1705 1711 1 +1705 1712 -1 +1705 1717 1 +1705 1718 1 +1705 1719 0 +1705 1720 -1 +1706 1341 1 +1706 1342 1 +1706 1346 -1 +1706 1703 1 +1706 1704 0 +1706 1705 1 +1706 1709 1 +1706 1710 -1 +1706 1711 1 +1706 1712 0 +1706 1717 0 +1706 1718 0 +1706 1719 1 +1706 1720 0 +1707 1341 1 +1707 1342 0 +1707 1347 -1 +1707 1693 1 +1707 1694 0 +1707 1695 1 +1707 1696 0 +1707 1703 1 +1707 1704 0 +1707 1709 -1 +1707 1710 -1 +1707 1711 1 +1707 1712 0 +1708 1341 1 +1708 1342 1 +1708 1348 0 +1708 1693 0 +1708 1694 1 +1708 1695 0 +1708 1696 -1 +1708 1703 1 +1708 1704 -1 +1708 1707 1 +1708 1709 1 +1708 1710 1 +1708 1711 1 +1708 1712 1 +1709 1710 0 +1709 1733 0 +1710 1734 0 +1711 1712 0 +1711 1735 0 +1712 1736 1 +1713 1353 1 +1713 1709 0 +1713 1710 1 +1713 1717 1 +1713 1718 0 +1713 1719 1 +1713 1720 1 +1713 1725 0 +1713 1726 -1 +1713 1727 1 +1713 1728 0 +1713 2071 1 +1713 2072 1 +1714 1354 1 +1714 1709 1 +1714 1710 1 +1714 1713 1 +1714 1717 -1 +1714 1718 1 +1714 1719 1 +1714 1720 1 +1714 1725 1 +1714 1726 1 +1714 1727 1 +1714 1728 1 +1714 2071 0 +1714 2072 -1 +1715 1355 0 +1715 1701 1 +1715 1702 0 +1715 1703 0 +1715 1704 1 +1715 1709 0 +1715 1710 -1 +1715 1717 1 +1715 1718 1 +1715 1719 1 +1715 1720 1 +1715 2071 0 +1715 2072 0 +1716 1356 1 +1716 1701 0 +1716 1702 0 +1716 1703 1 +1716 1704 0 +1716 1709 0 +1716 1710 0 +1716 1715 0 +1716 1717 0 +1716 1718 1 +1716 1719 1 +1716 1720 1 +1716 2071 0 +1716 2072 -1 +1717 1718 0 +1717 1741 0 +1718 1742 0 +1719 1720 0 +1719 1743 1 +1720 1744 1 +1721 1361 -1 +1721 1717 -1 +1721 1718 1 +1721 1725 0 +1721 1726 1 +1721 1727 0 +1721 1728 1 +1721 2079 1 +1721 2080 1 +1721 2093 0 +1721 2094 0 +1721 2095 1 +1721 2096 1 +1722 1362 0 +1722 1717 -1 +1722 1718 0 +1722 1721 0 +1722 1725 0 +1722 1726 1 +1722 1727 0 +1722 1728 0 +1722 2079 1 +1722 2080 0 +1722 2093 1 +1722 2094 1 +1722 2095 1 +1722 2096 1 +1723 1363 1 +1723 1717 0 +1723 1718 1 +1723 1725 1 +1723 1726 1 +1723 1727 0 +1723 1728 1 +1723 2069 1 +1723 2070 1 +1723 2071 0 +1723 2072 1 +1723 2079 1 +1723 2080 1 +1724 1364 0 +1724 1717 0 +1724 1718 0 +1724 1723 1 +1724 1725 0 +1724 1726 1 +1724 1727 0 +1724 1728 0 +1724 2069 1 +1724 2070 0 +1724 2071 1 +1724 2072 1 +1724 2079 1 +1724 2080 0 +1725 1726 0 +1725 1749 -1 +1726 1750 1 +1727 1728 1 +1727 1751 1 +1728 1752 1 +1729 1365 1 +1729 1366 0 +1729 1369 0 +1729 1727 1 +1729 1728 1 +1729 1733 1 +1729 1734 0 +1729 1735 0 +1729 1736 0 +1729 1741 1 +1729 1742 0 +1729 1743 1 +1729 1744 0 +1730 1365 1 +1730 1366 1 +1730 1370 0 +1730 1727 1 +1730 1728 -1 +1730 1729 1 +1730 1733 1 +1730 1734 0 +1730 1735 0 +1730 1736 1 +1730 1741 1 +1730 1742 1 +1730 1743 1 +1730 1744 0 +1731 1365 0 +1731 1366 -1 +1731 1371 1 +1731 1717 1 +1731 1718 1 +1731 1719 1 +1731 1720 1 +1731 1727 0 +1731 1728 1 +1731 1733 1 +1731 1734 0 +1731 1735 0 +1731 1736 0 +1732 1365 0 +1732 1366 1 +1732 1372 0 +1732 1717 1 +1732 1718 0 +1732 1719 1 +1732 1720 1 +1732 1727 0 +1732 1728 1 +1732 1731 -1 +1732 1733 1 +1732 1734 1 +1732 1735 1 +1732 1736 0 +1733 1734 0 +1733 1757 0 +1734 1758 1 +1735 1736 1 +1735 1759 1 +1736 1760 -1 +1737 1377 0 +1737 1733 0 +1737 1734 0 +1737 1741 1 +1737 1742 0 +1737 1743 1 +1737 1744 1 +1737 1749 0 +1737 1750 1 +1737 1751 1 +1737 1752 1 +1737 2095 1 +1737 2096 0 +1738 1378 -1 +1738 1733 1 +1738 1734 1 +1738 1737 1 +1738 1741 0 +1738 1742 0 +1738 1743 1 +1738 1744 1 +1738 1749 0 +1738 1750 1 +1738 1751 1 +1738 1752 0 +1738 2095 1 +1738 2096 1 +1739 1379 1 +1739 1725 1 +1739 1726 1 +1739 1727 1 +1739 1728 0 +1739 1733 1 +1739 1734 1 +1739 1741 1 +1739 1742 0 +1739 1743 1 +1739 1744 1 +1739 2095 1 +1739 2096 1 +1740 1380 1 +1740 1725 0 +1740 1726 1 +1740 1727 1 +1740 1728 1 +1740 1733 1 +1740 1734 0 +1740 1739 -1 +1740 1741 -1 +1740 1742 1 +1740 1743 -1 +1740 1744 1 +1740 2095 1 +1740 2096 0 +1741 1742 1 +1741 1765 1 +1742 1766 0 +1743 1744 1 +1743 1767 -1 +1744 1768 -1 +1745 1385 0 +1745 1741 1 +1745 1742 -1 +1745 1749 0 +1745 1750 -1 +1745 1751 1 +1745 1752 -1 +1745 2103 1 +1745 2104 1 +1745 2117 1 +1745 2118 0 +1745 2119 1 +1745 2120 1 +1746 1386 0 +1746 1741 1 +1746 1742 1 +1746 1745 1 +1746 1749 1 +1746 1750 1 +1746 1751 -1 +1746 1752 0 +1746 2103 0 +1746 2104 0 +1746 2117 1 +1746 2118 0 +1746 2119 1 +1746 2120 0 +1747 1387 1 +1747 1741 1 +1747 1742 1 +1747 1749 -1 +1747 1750 1 +1747 1751 -1 +1747 1752 0 +1747 2093 0 +1747 2094 1 +1747 2095 1 +1747 2096 1 +1747 2103 1 +1747 2104 -1 +1748 1388 0 +1748 1741 1 +1748 1742 0 +1748 1747 0 +1748 1749 -1 +1748 1750 1 +1748 1751 0 +1748 1752 1 +1748 2093 1 +1748 2094 0 +1748 2095 1 +1748 2096 1 +1748 2103 1 +1748 2104 1 +1749 1750 1 +1749 1773 1 +1750 1774 0 +1751 1752 -1 +1751 1775 0 +1752 1776 1 +1753 1389 -1 +1753 1390 0 +1753 1393 -1 +1753 1751 1 +1753 1752 1 +1753 1757 1 +1753 1758 1 +1753 1759 -1 +1753 1760 0 +1753 1765 1 +1753 1766 0 +1753 1767 1 +1753 1768 1 +1754 1389 1 +1754 1390 1 +1754 1394 0 +1754 1751 1 +1754 1752 1 +1754 1753 1 +1754 1757 0 +1754 1758 1 +1754 1759 0 +1754 1760 0 +1754 1765 0 +1754 1766 0 +1754 1767 0 +1754 1768 1 +1755 1389 1 +1755 1390 1 +1755 1395 1 +1755 1741 1 +1755 1742 1 +1755 1743 0 +1755 1744 0 +1755 1751 0 +1755 1752 0 +1755 1757 0 +1755 1758 1 +1755 1759 1 +1755 1760 0 +1756 1389 -1 +1756 1390 -1 +1756 1396 1 +1756 1741 1 +1756 1742 1 +1756 1743 1 +1756 1744 0 +1756 1751 -1 +1756 1752 1 +1756 1755 1 +1756 1757 0 +1756 1758 0 +1756 1759 1 +1756 1760 0 +1757 1758 0 +1757 1781 1 +1759 1760 1 +1759 1783 0 +1760 1784 0 +1761 1401 1 +1761 1757 1 +1761 1758 0 +1761 1765 1 +1761 1766 0 +1761 1767 1 +1761 1768 1 +1761 1773 1 +1761 1774 0 +1761 1775 1 +1761 1776 1 +1761 2119 1 +1761 2120 0 +1762 1402 0 +1762 1757 0 +1762 1758 1 +1762 1761 0 +1762 1765 0 +1762 1766 0 +1762 1767 1 +1762 1768 0 +1762 1773 1 +1762 1774 0 +1762 1775 0 +1762 1776 1 +1762 2119 1 +1762 2120 0 +1763 1403 0 +1763 1749 1 +1763 1750 0 +1763 1751 1 +1763 1752 1 +1763 1757 0 +1763 1758 1 +1763 1765 1 +1763 1766 1 +1763 1767 0 +1763 1768 -1 +1763 2119 0 +1763 2120 1 +1764 1404 1 +1764 1749 1 +1764 1750 1 +1764 1751 1 +1764 1752 1 +1764 1757 0 +1764 1758 -1 +1764 1763 0 +1764 1765 0 +1764 1766 0 +1764 1767 1 +1764 1768 1 +1764 2119 1 +1764 2120 1 +1765 1766 1 +1765 1789 -1 +1766 1790 0 +1767 1768 1 +1767 1791 1 +1768 1792 0 +1769 1409 0 +1769 1765 1 +1769 1766 1 +1769 1773 0 +1769 1774 0 +1769 1775 1 +1769 1776 1 +1769 2127 0 +1769 2128 1 +1769 2141 0 +1769 2142 0 +1769 2143 1 +1769 2144 1 +1770 1410 0 +1770 1765 1 +1770 1766 -1 +1770 1769 -1 +1770 1773 1 +1770 1774 -1 +1770 1775 -1 +1770 1776 0 +1770 2127 1 +1770 2128 0 +1770 2141 1 +1770 2142 1 +1770 2143 1 +1770 2144 -1 +1771 1411 -1 +1771 1765 1 +1771 1766 1 +1771 1773 0 +1771 1774 0 +1771 1775 0 +1771 1776 1 +1771 2117 0 +1771 2118 1 +1771 2119 1 +1771 2120 1 +1771 2127 -1 +1771 2128 0 +1772 1412 1 +1772 1765 0 +1772 1766 0 +1772 1771 1 +1772 1773 1 +1772 1774 0 +1772 1775 1 +1772 1776 0 +1772 2117 1 +1772 2118 0 +1772 2119 1 +1772 2120 0 +1772 2127 1 +1772 2128 1 +1773 1774 1 +1773 1797 0 +1774 1798 1 +1775 1776 1 +1775 1799 1 +1776 1800 1 +1777 1413 0 +1777 1414 1 +1777 1417 1 +1777 1775 1 +1777 1776 0 +1777 1781 1 +1777 1783 1 +1777 1784 0 +1777 1789 0 +1777 1790 0 +1777 1791 0 +1777 1792 1 +1778 1413 0 +1778 1414 1 +1778 1418 1 +1778 1775 0 +1778 1776 1 +1778 1777 1 +1778 1781 1 +1778 1783 1 +1778 1784 1 +1778 1789 0 +1778 1790 0 +1778 1791 -1 +1778 1792 1 +1779 1413 0 +1779 1414 0 +1779 1419 1 +1779 1765 1 +1779 1766 1 +1779 1767 1 +1779 1768 1 +1779 1775 1 +1779 1776 1 +1779 1781 0 +1779 1783 0 +1779 1784 0 +1780 1413 1 +1780 1414 1 +1780 1420 0 +1780 1765 1 +1780 1766 0 +1780 1767 0 +1780 1768 0 +1780 1775 1 +1780 1776 0 +1780 1779 -1 +1780 1781 0 +1780 1783 1 +1780 1784 0 +1783 1784 1 +1785 1425 0 +1785 1781 1 +1785 1789 0 +1785 1790 0 +1785 1791 1 +1785 1792 -1 +1785 1797 1 +1785 1798 1 +1785 1799 1 +1785 1800 1 +1785 2143 1 +1785 2144 -1 +1786 1426 0 +1786 1781 -1 +1786 1785 0 +1786 1789 1 +1786 1790 1 +1786 1791 0 +1786 1792 0 +1786 1797 -1 +1786 1798 0 +1786 1799 1 +1786 1800 1 +1786 2143 0 +1786 2144 1 +1787 1427 1 +1787 1773 1 +1787 1774 0 +1787 1775 -1 +1787 1776 1 +1787 1781 0 +1787 1789 0 +1787 1790 0 +1787 1791 1 +1787 1792 0 +1787 2143 -1 +1787 2144 0 +1788 1428 0 +1788 1773 1 +1788 1774 0 +1788 1775 0 +1788 1776 1 +1788 1781 1 +1788 1787 1 +1788 1789 0 +1788 1790 -1 +1788 1791 1 +1788 1792 1 +1788 2143 1 +1788 2144 1 +1789 1790 1 +1791 1792 1 +1793 1433 1 +1793 1789 0 +1793 1790 1 +1793 1797 0 +1793 1798 -1 +1793 1799 1 +1793 1800 0 +1793 2151 1 +1793 2152 0 +1794 1434 1 +1794 1789 1 +1794 1790 0 +1794 1793 -1 +1794 1797 0 +1794 1798 0 +1794 1799 0 +1794 1800 1 +1794 2151 0 +1794 2152 0 +1795 1435 1 +1795 1789 1 +1795 1790 1 +1795 1797 1 +1795 1798 1 +1795 1799 -1 +1795 1800 1 +1795 2141 0 +1795 2142 1 +1795 2143 0 +1795 2144 1 +1795 2151 1 +1795 2152 1 +1796 1436 0 +1796 1789 1 +1796 1790 1 +1796 1795 0 +1796 1797 -1 +1796 1798 1 +1796 1799 0 +1796 1800 1 +1796 2141 0 +1796 2142 1 +1796 2143 1 +1796 2144 -1 +1796 2151 1 +1796 2152 0 +1797 1798 -1 +1799 1800 0 +1801 1441 1 +1801 1805 -1 +1801 1806 1 +1801 1807 1 +1801 1808 1 +1801 1813 1 +1801 1814 1 +1801 1815 0 +1801 1816 1 +1802 1442 1 +1802 1801 0 +1802 1805 1 +1802 1806 1 +1802 1807 1 +1802 1808 1 +1802 1813 1 +1802 1814 0 +1802 1815 1 +1802 1816 0 +1803 1443 1 +1803 1805 0 +1803 1806 1 +1803 1807 1 +1803 1808 0 +1804 1444 0 +1804 1803 0 +1804 1805 0 +1804 1806 0 +1804 1807 1 +1804 1808 0 +1805 1806 1 +1805 1829 0 +1806 1830 1 +1807 1808 1 +1807 1831 1 +1808 1832 0 +1809 1449 1 +1809 1805 0 +1809 1806 0 +1809 1813 1 +1809 1814 0 +1809 1815 1 +1809 1816 1 +1809 1821 0 +1809 1822 1 +1809 1823 1 +1809 1824 0 +1809 2167 1 +1809 2168 1 +1810 1450 1 +1810 1805 1 +1810 1806 0 +1810 1809 0 +1810 1813 0 +1810 1814 0 +1810 1815 1 +1810 1816 0 +1810 1821 0 +1810 1822 0 +1810 1823 1 +1810 1824 -1 +1810 2167 -1 +1810 2168 1 +1811 1451 0 +1811 1805 1 +1811 1806 1 +1811 1813 1 +1811 1814 0 +1811 1815 0 +1811 1816 1 +1811 2167 1 +1811 2168 1 +1812 1452 -1 +1812 1805 0 +1812 1806 1 +1812 1811 -1 +1812 1813 0 +1812 1814 1 +1812 1815 -1 +1812 1816 1 +1812 2167 1 +1812 2168 1 +1813 1814 0 +1813 1837 1 +1814 1838 -1 +1815 1816 -1 +1815 1839 1 +1816 1840 1 +1817 1457 1 +1817 1813 1 +1817 1814 1 +1817 1821 1 +1817 1822 1 +1817 1823 0 +1817 1824 1 +1817 2175 1 +1817 2176 1 +1817 2189 0 +1817 2190 0 +1817 2191 1 +1817 2192 1 +1818 1458 0 +1818 1813 1 +1818 1814 0 +1818 1817 0 +1818 1821 0 +1818 1822 0 +1818 1823 -1 +1818 1824 1 +1818 2175 -1 +1818 2176 -1 +1818 2189 0 +1818 2190 1 +1818 2191 0 +1818 2192 1 +1819 1459 1 +1819 1813 1 +1819 1814 1 +1819 1821 1 +1819 1822 1 +1819 1823 1 +1819 1824 1 +1819 2165 0 +1819 2166 0 +1819 2167 1 +1819 2168 1 +1819 2175 1 +1819 2176 0 +1820 1460 0 +1820 1813 0 +1820 1814 0 +1820 1819 0 +1820 1821 0 +1820 1822 1 +1820 1823 1 +1820 1824 0 +1820 2165 1 +1820 2166 1 +1820 2167 -1 +1820 2168 1 +1820 2175 0 +1820 2176 1 +1821 1822 0 +1821 1845 1 +1822 1846 1 +1823 1824 1 +1823 1847 1 +1825 1461 1 +1825 1462 1 +1825 1465 -1 +1825 1823 1 +1825 1824 1 +1825 1829 0 +1825 1830 1 +1825 1831 1 +1825 1832 -1 +1825 1837 0 +1825 1838 1 +1825 1839 1 +1825 1840 -1 +1826 1461 0 +1826 1462 1 +1826 1466 -1 +1826 1823 1 +1826 1824 0 +1826 1825 0 +1826 1829 1 +1826 1830 -1 +1826 1831 0 +1826 1832 1 +1826 1837 1 +1826 1838 1 +1826 1839 -1 +1826 1840 -1 +1827 1461 1 +1827 1462 0 +1827 1467 1 +1827 1813 -1 +1827 1814 1 +1827 1815 0 +1827 1816 0 +1827 1823 1 +1827 1824 0 +1827 1829 1 +1827 1830 0 +1827 1831 1 +1827 1832 0 +1828 1461 1 +1828 1462 1 +1828 1468 1 +1828 1813 0 +1828 1814 1 +1828 1815 1 +1828 1816 0 +1828 1823 1 +1828 1824 1 +1828 1827 0 +1828 1829 1 +1828 1830 1 +1828 1831 1 +1828 1832 1 +1829 1830 0 +1829 1853 1 +1830 1854 0 +1831 1832 1 +1831 1855 1 +1832 1856 0 +1833 1473 0 +1833 1829 1 +1833 1830 1 +1833 1837 1 +1833 1838 0 +1833 1839 1 +1833 1840 0 +1833 1845 0 +1833 1846 1 +1833 1847 0 +1833 2191 1 +1833 2192 1 +1834 1474 1 +1834 1829 0 +1834 1830 0 +1834 1833 1 +1834 1837 1 +1834 1838 1 +1834 1839 1 +1834 1840 1 +1834 1845 0 +1834 1846 1 +1834 1847 0 +1834 2191 0 +1834 2192 -1 +1835 1475 1 +1835 1821 1 +1835 1822 0 +1835 1823 -1 +1835 1824 1 +1835 1829 1 +1835 1830 1 +1835 1837 0 +1835 1838 1 +1835 1839 0 +1835 1840 1 +1835 2191 0 +1835 2192 1 +1836 1476 1 +1836 1821 0 +1836 1822 1 +1836 1823 1 +1836 1824 1 +1836 1829 1 +1836 1830 0 +1836 1835 1 +1836 1837 1 +1836 1838 -1 +1836 1839 0 +1836 1840 1 +1836 2191 1 +1836 2192 1 +1837 1838 1 +1837 1861 -1 +1838 1862 1 +1839 1840 0 +1839 1863 -1 +1840 1864 0 +1841 1481 1 +1841 1837 -1 +1841 1838 1 +1841 1845 -1 +1841 1846 0 +1841 1847 1 +1841 2199 1 +1841 2200 1 +1841 2213 1 +1841 2214 0 +1841 2215 1 +1841 2216 1 +1842 1482 1 +1842 1837 0 +1842 1838 1 +1842 1841 0 +1842 1845 -1 +1842 1846 -1 +1842 1847 0 +1842 2199 1 +1842 2200 0 +1842 2213 1 +1842 2214 -1 +1842 2215 1 +1842 2216 0 +1843 1483 1 +1843 1837 1 +1843 1838 1 +1843 1845 1 +1843 1846 1 +1843 1847 1 +1843 2189 1 +1843 2190 0 +1843 2191 0 +1843 2192 1 +1843 2199 1 +1843 2200 1 +1844 1484 0 +1844 1837 1 +1844 1838 1 +1844 1843 0 +1844 1845 1 +1844 1846 -1 +1844 1847 1 +1844 2189 1 +1844 2190 1 +1844 2191 1 +1844 2192 1 +1844 2199 1 +1844 2200 1 +1845 1846 1 +1845 1869 1 +1846 1870 0 +1847 1871 1 +1849 1485 1 +1849 1486 -1 +1849 1489 0 +1849 1847 1 +1849 1853 1 +1849 1854 0 +1849 1855 0 +1849 1856 1 +1849 1861 1 +1849 1862 1 +1849 1863 0 +1849 1864 0 +1850 1485 0 +1850 1486 1 +1850 1490 1 +1850 1847 0 +1850 1849 1 +1850 1853 1 +1850 1854 0 +1850 1855 0 +1850 1856 -1 +1850 1861 0 +1850 1862 0 +1850 1863 1 +1850 1864 1 +1851 1485 1 +1851 1486 -1 +1851 1491 0 +1851 1837 1 +1851 1838 0 +1851 1839 1 +1851 1840 1 +1851 1847 1 +1851 1853 1 +1851 1854 1 +1851 1855 1 +1851 1856 0 +1852 1485 1 +1852 1486 1 +1852 1492 1 +1852 1837 1 +1852 1838 0 +1852 1839 1 +1852 1840 1 +1852 1847 1 +1852 1851 0 +1852 1853 -1 +1852 1854 0 +1852 1855 1 +1852 1856 1 +1853 1854 -1 +1853 1877 1 +1854 1878 0 +1855 1856 1 +1855 1879 1 +1856 1880 0 +1857 1497 1 +1857 1853 1 +1857 1854 1 +1857 1861 1 +1857 1862 1 +1857 1863 1 +1857 1864 1 +1857 1869 1 +1857 1870 1 +1857 1871 1 +1857 1872 1 +1857 2215 1 +1857 2216 1 +1858 1498 1 +1858 1853 1 +1858 1854 1 +1858 1857 1 +1858 1861 0 +1858 1862 0 +1858 1863 0 +1858 1864 1 +1858 1869 0 +1858 1870 1 +1858 1871 1 +1858 1872 -1 +1858 2215 1 +1858 2216 -1 +1859 1499 0 +1859 1845 0 +1859 1846 0 +1859 1847 0 +1859 1853 0 +1859 1854 1 +1859 1861 1 +1859 1862 1 +1859 1863 1 +1859 1864 1 +1859 2215 1 +1859 2216 0 +1860 1500 1 +1860 1845 1 +1860 1846 0 +1860 1847 0 +1860 1853 0 +1860 1854 0 +1860 1859 0 +1860 1861 1 +1860 1862 1 +1860 1863 1 +1860 1864 1 +1860 2215 1 +1860 2216 0 +1861 1862 1 +1861 1885 0 +1862 1886 1 +1863 1864 1 +1863 1887 1 +1864 1888 1 +1865 1505 1 +1865 1861 1 +1865 1862 0 +1865 1869 1 +1865 1870 0 +1865 1871 1 +1865 1872 1 +1865 2223 1 +1865 2224 0 +1865 2237 0 +1865 2238 0 +1865 2239 1 +1865 2240 1 +1866 1506 1 +1866 1861 1 +1866 1862 0 +1866 1865 1 +1866 1869 1 +1866 1870 0 +1866 1871 1 +1866 1872 1 +1866 2223 0 +1866 2224 0 +1866 2237 1 +1866 2238 1 +1866 2239 1 +1866 2240 0 +1867 1507 1 +1867 1861 1 +1867 1862 -1 +1867 1869 1 +1867 1870 -1 +1867 1871 1 +1867 1872 0 +1867 2213 0 +1867 2214 1 +1867 2215 0 +1867 2216 0 +1867 2223 0 +1867 2224 0 +1868 1508 1 +1868 1861 1 +1868 1862 1 +1868 1867 0 +1868 1869 1 +1868 1870 0 +1868 1871 1 +1868 1872 0 +1868 2213 1 +1868 2214 -1 +1868 2215 -1 +1868 2216 0 +1868 2223 1 +1868 2224 1 +1869 1870 1 +1869 1893 1 +1870 1894 0 +1871 1872 0 +1871 1895 -1 +1872 1896 -1 +1873 1509 1 +1873 1510 0 +1873 1513 0 +1873 1871 1 +1873 1872 0 +1873 1877 1 +1873 1878 0 +1873 1879 1 +1873 1880 1 +1873 1885 1 +1873 1886 1 +1873 1887 -1 +1873 1888 1 +1874 1509 1 +1874 1510 1 +1874 1514 1 +1874 1871 0 +1874 1872 0 +1874 1873 1 +1874 1877 1 +1874 1878 0 +1874 1879 0 +1874 1880 1 +1874 1885 0 +1874 1886 -1 +1874 1887 1 +1874 1888 0 +1875 1509 0 +1875 1510 1 +1875 1515 1 +1875 1861 0 +1875 1862 1 +1875 1863 0 +1875 1864 1 +1875 1871 -1 +1875 1872 -1 +1875 1877 0 +1875 1878 0 +1875 1879 -1 +1875 1880 -1 +1876 1509 -1 +1876 1510 0 +1876 1516 1 +1876 1861 1 +1876 1862 0 +1876 1863 -1 +1876 1864 -1 +1876 1871 1 +1876 1872 1 +1876 1875 1 +1876 1877 0 +1876 1878 1 +1876 1879 1 +1876 1880 1 +1877 1878 0 +1877 1901 1 +1878 1902 0 +1879 1880 1 +1879 1903 -1 +1880 1904 1 +1881 1521 1 +1881 1877 1 +1881 1878 0 +1881 1885 0 +1881 1886 1 +1881 1887 1 +1881 1888 -1 +1881 1893 0 +1881 1894 0 +1881 1895 1 +1881 1896 1 +1881 2239 0 +1881 2240 0 +1882 1522 0 +1882 1877 1 +1882 1878 1 +1882 1881 0 +1882 1885 1 +1882 1886 1 +1882 1887 0 +1882 1888 0 +1882 1893 1 +1882 1894 1 +1882 1895 0 +1882 1896 1 +1882 2239 0 +1882 2240 1 +1883 1523 1 +1883 1869 1 +1883 1870 0 +1883 1871 1 +1883 1872 1 +1883 1877 1 +1883 1878 0 +1883 1885 -1 +1883 1886 -1 +1883 1887 1 +1883 1888 0 +1883 2239 0 +1883 2240 1 +1884 1524 0 +1884 1869 0 +1884 1870 0 +1884 1871 -1 +1884 1872 0 +1884 1877 0 +1884 1878 1 +1884 1883 1 +1884 1885 0 +1884 1886 -1 +1884 1887 0 +1884 1888 1 +1884 2239 0 +1884 2240 1 +1885 1886 1 +1885 1909 1 +1886 1910 1 +1887 1888 1 +1887 1911 -1 +1888 1912 1 +1889 1529 1 +1889 1885 0 +1889 1886 0 +1889 1893 1 +1889 1894 1 +1889 1895 1 +1889 1896 1 +1889 2247 1 +1889 2248 0 +1889 2261 1 +1889 2262 1 +1889 2263 0 +1889 2264 1 +1890 1530 -1 +1890 1885 1 +1890 1886 1 +1890 1889 0 +1890 1893 1 +1890 1894 0 +1890 1895 0 +1890 1896 1 +1890 2247 1 +1890 2248 1 +1890 2261 1 +1890 2262 0 +1890 2263 1 +1890 2264 -1 +1891 1531 1 +1891 1885 1 +1891 1886 -1 +1891 1893 1 +1891 1894 0 +1891 1895 1 +1891 1896 1 +1891 2237 1 +1891 2238 0 +1891 2239 1 +1891 2240 -1 +1891 2247 1 +1891 2248 1 +1892 1532 0 +1892 1885 0 +1892 1886 1 +1892 1891 0 +1892 1893 0 +1892 1894 0 +1892 1895 1 +1892 1896 0 +1892 2237 0 +1892 2238 1 +1892 2239 0 +1892 2240 1 +1892 2247 0 +1892 2248 1 +1893 1894 1 +1893 1917 -1 +1894 1918 1 +1895 1896 1 +1895 1919 1 +1896 1920 1 +1897 1533 1 +1897 1534 1 +1897 1537 0 +1897 1895 1 +1897 1896 1 +1897 1901 1 +1897 1902 1 +1897 1903 0 +1897 1904 0 +1897 1909 1 +1897 1910 0 +1897 1911 0 +1897 1912 1 +1898 1533 1 +1898 1534 0 +1898 1538 1 +1898 1895 1 +1898 1896 1 +1898 1897 1 +1898 1901 -1 +1898 1902 1 +1898 1903 0 +1898 1904 1 +1898 1909 1 +1898 1910 -1 +1898 1911 1 +1898 1912 0 +1899 1533 0 +1899 1534 1 +1899 1539 0 +1899 1885 1 +1899 1886 0 +1899 1887 0 +1899 1888 1 +1899 1895 1 +1899 1896 1 +1899 1901 0 +1899 1902 1 +1899 1903 -1 +1899 1904 0 +1900 1533 1 +1900 1534 1 +1900 1540 1 +1900 1885 1 +1900 1886 1 +1900 1887 1 +1900 1888 0 +1900 1895 0 +1900 1896 0 +1900 1899 0 +1900 1901 0 +1900 1902 1 +1900 1903 1 +1900 1904 1 +1901 1902 1 +1901 1925 1 +1902 1926 0 +1903 1904 1 +1903 1927 1 +1904 1928 1 +1905 1545 1 +1905 1901 1 +1905 1902 1 +1905 1909 1 +1905 1910 1 +1905 1911 0 +1905 1912 0 +1905 1917 1 +1905 1918 0 +1905 1919 0 +1905 1920 0 +1905 2263 -1 +1905 2264 1 +1906 1546 1 +1906 1901 1 +1906 1902 0 +1906 1905 1 +1906 1909 1 +1906 1910 0 +1906 1911 0 +1906 1912 0 +1906 1917 0 +1906 1918 1 +1906 1919 0 +1906 1920 1 +1906 2263 0 +1906 2264 1 +1907 1547 -1 +1907 1893 0 +1907 1894 -1 +1907 1895 1 +1907 1896 1 +1907 1901 1 +1907 1902 1 +1907 1909 1 +1907 1910 1 +1907 1911 1 +1907 1912 1 +1907 2263 1 +1907 2264 0 +1908 1548 0 +1908 1893 0 +1908 1894 0 +1908 1895 0 +1908 1896 0 +1908 1901 0 +1908 1902 1 +1908 1907 0 +1908 1909 0 +1908 1910 0 +1908 1911 -1 +1908 1912 1 +1908 2263 1 +1908 2264 1 +1909 1910 1 +1909 1933 0 +1910 1934 0 +1911 1912 1 +1911 1935 0 +1912 1936 0 +1913 1553 1 +1913 1909 1 +1913 1910 1 +1913 1917 1 +1913 1918 1 +1913 1919 0 +1913 1920 0 +1913 2271 0 +1913 2272 0 +1913 2285 1 +1913 2286 0 +1913 2287 1 +1913 2288 0 +1914 1554 1 +1914 1909 0 +1914 1910 0 +1914 1913 0 +1914 1917 0 +1914 1918 -1 +1914 1919 0 +1914 1920 0 +1914 2271 0 +1914 2272 0 +1914 2285 0 +1914 2286 0 +1914 2287 0 +1914 2288 1 +1915 1555 0 +1915 1909 0 +1915 1910 1 +1915 1917 1 +1915 1918 1 +1915 1919 0 +1915 1920 1 +1915 2261 0 +1915 2262 0 +1915 2263 1 +1915 2264 1 +1915 2271 1 +1915 2272 1 +1916 1556 1 +1916 1909 1 +1916 1910 0 +1916 1915 0 +1916 1917 1 +1916 1918 0 +1916 1919 1 +1916 1920 1 +1916 2261 0 +1916 2262 0 +1916 2263 1 +1916 2264 1 +1916 2271 0 +1916 2272 0 +1917 1918 1 +1917 1941 1 +1918 1942 1 +1919 1920 -1 +1919 1943 1 +1920 1944 1 +1921 1557 -1 +1921 1558 1 +1921 1561 1 +1921 1919 1 +1921 1920 1 +1921 1925 0 +1921 1926 1 +1921 1927 -1 +1921 1928 1 +1921 1933 0 +1921 1934 1 +1921 1935 -1 +1921 1936 -1 +1922 1557 1 +1922 1558 0 +1922 1562 1 +1922 1919 0 +1922 1920 1 +1922 1921 1 +1922 1925 0 +1922 1926 -1 +1922 1927 0 +1922 1928 0 +1922 1933 1 +1922 1934 0 +1922 1935 0 +1922 1936 0 +1923 1557 0 +1923 1558 1 +1923 1563 0 +1923 1909 0 +1923 1910 1 +1923 1911 1 +1923 1912 1 +1923 1919 0 +1923 1920 0 +1923 1925 1 +1923 1926 -1 +1923 1927 1 +1923 1928 1 +1924 1557 -1 +1924 1558 0 +1924 1564 1 +1924 1909 0 +1924 1910 0 +1924 1911 1 +1924 1912 1 +1924 1919 0 +1924 1920 1 +1924 1923 1 +1924 1925 0 +1924 1926 0 +1924 1927 0 +1924 1928 1 +1925 1926 0 +1925 1949 -1 +1926 1950 0 +1927 1928 1 +1927 1951 1 +1928 1952 0 +1929 1569 0 +1929 1925 1 +1929 1926 0 +1929 1933 1 +1929 1934 1 +1929 1935 0 +1929 1936 0 +1929 1941 -1 +1929 1942 0 +1929 1943 -1 +1929 1944 1 +1929 2287 1 +1929 2288 0 +1930 1570 0 +1930 1925 0 +1930 1926 1 +1930 1929 1 +1930 1933 1 +1930 1934 1 +1930 1935 1 +1930 1936 0 +1930 1941 1 +1930 1942 1 +1930 1943 0 +1930 1944 1 +1930 2287 1 +1930 2288 1 +1931 1571 1 +1931 1917 0 +1931 1918 1 +1931 1919 0 +1931 1920 1 +1931 1925 -1 +1931 1926 1 +1931 1933 1 +1931 1934 0 +1931 1935 1 +1931 1936 0 +1931 2287 0 +1931 2288 0 +1932 1572 0 +1932 1917 1 +1932 1918 1 +1932 1919 1 +1932 1920 1 +1932 1925 0 +1932 1926 0 +1932 1931 0 +1932 1933 1 +1932 1934 1 +1932 1935 0 +1932 1936 0 +1932 2287 1 +1932 2288 1 +1933 1934 -1 +1933 1957 0 +1934 1958 1 +1935 1936 0 +1935 1959 0 +1936 1960 -1 +1937 1577 0 +1937 1933 1 +1937 1934 1 +1937 1941 1 +1937 1942 1 +1937 1943 1 +1937 1944 1 +1937 2295 0 +1937 2296 0 +1937 2309 0 +1937 2310 1 +1937 2311 -1 +1937 2312 0 +1938 1578 1 +1938 1933 0 +1938 1934 1 +1938 1937 1 +1938 1941 1 +1938 1942 1 +1938 1943 1 +1938 1944 1 +1938 2295 0 +1938 2296 1 +1938 2309 0 +1938 2310 0 +1938 2311 1 +1938 2312 0 +1939 1579 1 +1939 1933 0 +1939 1934 1 +1939 1941 0 +1939 1942 -1 +1939 1943 0 +1939 1944 1 +1939 2285 0 +1939 2286 1 +1939 2287 1 +1939 2288 0 +1939 2295 1 +1939 2296 0 +1940 1580 0 +1940 1933 1 +1940 1934 0 +1940 1939 0 +1940 1941 1 +1940 1942 0 +1940 1943 1 +1940 1944 0 +1940 2285 0 +1940 2286 0 +1940 2287 1 +1940 2288 1 +1940 2295 -1 +1940 2296 -1 +1941 1942 1 +1941 1965 1 +1942 1966 1 +1943 1944 1 +1943 1967 1 +1944 1968 -1 +1945 1581 1 +1945 1582 1 +1945 1585 1 +1945 1943 1 +1945 1944 1 +1945 1949 0 +1945 1950 1 +1945 1951 0 +1945 1952 1 +1945 1957 0 +1945 1958 0 +1945 1959 0 +1945 1960 1 +1946 1581 0 +1946 1582 1 +1946 1586 0 +1946 1943 1 +1946 1944 0 +1946 1945 1 +1946 1949 0 +1946 1950 1 +1946 1951 1 +1946 1952 1 +1946 1957 1 +1946 1958 1 +1946 1959 1 +1946 1960 1 +1947 1581 0 +1947 1582 1 +1947 1587 1 +1947 1933 0 +1947 1934 1 +1947 1935 -1 +1947 1936 0 +1947 1943 0 +1947 1944 0 +1947 1949 1 +1947 1950 0 +1947 1951 1 +1947 1952 1 +1948 1581 0 +1948 1582 1 +1948 1588 1 +1948 1933 1 +1948 1934 1 +1948 1935 -1 +1948 1936 0 +1948 1943 -1 +1948 1944 1 +1948 1947 0 +1948 1949 0 +1948 1950 0 +1948 1951 1 +1948 1952 0 +1949 1950 1 +1949 1973 1 +1950 1974 0 +1951 1952 1 +1951 1975 1 +1952 1976 1 +1953 1593 1 +1953 1949 1 +1953 1950 1 +1953 1957 1 +1953 1958 1 +1953 1959 0 +1953 1960 0 +1953 1965 1 +1953 1966 1 +1953 1967 1 +1953 1968 -1 +1953 2311 1 +1953 2312 1 +1954 1594 0 +1954 1949 -1 +1954 1950 -1 +1954 1953 1 +1954 1957 0 +1954 1958 1 +1954 1959 0 +1954 1960 -1 +1954 1965 0 +1954 1966 0 +1954 1967 1 +1954 1968 1 +1954 2311 -1 +1954 2312 1 +1955 1595 0 +1955 1941 1 +1955 1942 1 +1955 1943 -1 +1955 1944 -1 +1955 1949 0 +1955 1950 1 +1955 1957 1 +1955 1958 0 +1955 1959 1 +1955 1960 0 +1955 2311 1 +1955 2312 0 +1956 1596 1 +1956 1941 1 +1956 1942 1 +1956 1943 0 +1956 1944 1 +1956 1949 1 +1956 1950 1 +1956 1955 1 +1956 1957 1 +1956 1958 1 +1956 1959 1 +1956 1960 1 +1956 2311 0 +1956 2312 1 +1957 1958 0 +1957 1981 0 +1958 1982 1 +1959 1960 -1 +1959 1983 1 +1960 1984 0 +1961 1601 1 +1961 1957 0 +1961 1958 1 +1961 1965 1 +1961 1966 1 +1961 1967 1 +1961 1968 1 +1961 2319 -1 +1961 2320 1 +1961 2333 1 +1961 2334 0 +1961 2335 1 +1961 2336 0 +1962 1602 1 +1962 1957 0 +1962 1958 1 +1962 1961 1 +1962 1965 -1 +1962 1966 0 +1962 1967 1 +1962 1968 1 +1962 2319 1 +1962 2320 0 +1962 2333 0 +1962 2334 -1 +1962 2335 1 +1962 2336 1 +1963 1603 1 +1963 1957 -1 +1963 1958 -1 +1963 1965 -1 +1963 1966 -1 +1963 1967 0 +1963 1968 -1 +1963 2309 1 +1963 2310 0 +1963 2311 1 +1963 2312 0 +1963 2319 1 +1963 2320 1 +1964 1604 1 +1964 1957 -1 +1964 1958 1 +1964 1963 0 +1964 1965 0 +1964 1966 0 +1964 1967 1 +1964 1968 0 +1964 2309 0 +1964 2310 1 +1964 2311 -1 +1964 2312 1 +1964 2319 1 +1964 2320 1 +1965 1966 1 +1965 1989 1 +1966 1990 1 +1967 1968 1 +1967 1991 -1 +1968 1992 1 +1969 1605 1 +1969 1606 0 +1969 1609 1 +1969 1967 0 +1969 1968 1 +1969 1973 1 +1969 1974 0 +1969 1975 1 +1969 1976 -1 +1969 1981 0 +1969 1982 0 +1969 1983 1 +1969 1984 0 +1970 1605 0 +1970 1606 1 +1970 1610 1 +1970 1967 1 +1970 1968 1 +1970 1969 1 +1970 1973 0 +1970 1974 1 +1970 1975 0 +1970 1976 0 +1970 1981 1 +1970 1982 1 +1970 1983 0 +1970 1984 -1 +1971 1605 0 +1971 1606 0 +1971 1611 1 +1971 1957 1 +1971 1958 0 +1971 1959 1 +1971 1960 0 +1971 1967 0 +1971 1968 1 +1971 1973 1 +1971 1974 -1 +1971 1975 1 +1971 1976 1 +1972 1605 1 +1972 1606 1 +1972 1612 1 +1972 1957 1 +1972 1958 1 +1972 1959 1 +1972 1960 1 +1972 1967 1 +1972 1968 1 +1972 1971 0 +1972 1973 0 +1972 1974 1 +1972 1975 1 +1972 1976 1 +1973 1974 1 +1973 1997 0 +1974 1998 1 +1975 1976 1 +1975 1999 1 +1976 2000 1 +1977 1617 0 +1977 1973 0 +1977 1974 1 +1977 1981 1 +1977 1982 1 +1977 1983 1 +1977 1984 1 +1977 1989 -1 +1977 1990 1 +1977 1991 1 +1977 1992 -1 +1977 2335 1 +1977 2336 0 +1978 1618 1 +1978 1973 1 +1978 1974 0 +1978 1977 0 +1978 1981 1 +1978 1982 0 +1978 1983 0 +1978 1984 1 +1978 1989 1 +1978 1990 0 +1978 1991 -1 +1978 1992 1 +1978 2335 1 +1978 2336 0 +1979 1619 1 +1979 1965 0 +1979 1966 -1 +1979 1967 -1 +1979 1968 1 +1979 1973 0 +1979 1974 1 +1979 1981 0 +1979 1982 -1 +1979 1983 1 +1979 1984 1 +1979 2335 0 +1979 2336 1 +1980 1620 0 +1980 1965 0 +1980 1966 1 +1980 1967 1 +1980 1968 1 +1980 1973 1 +1980 1974 1 +1980 1979 0 +1980 1981 0 +1980 1982 1 +1980 1983 0 +1980 1984 0 +1980 2335 1 +1980 2336 1 +1981 1982 1 +1981 2005 1 +1982 2006 1 +1983 1984 1 +1983 2007 1 +1984 2008 1 +1985 1625 1 +1985 1981 0 +1985 1982 1 +1985 1989 1 +1985 1990 0 +1985 1991 1 +1985 1992 1 +1985 2343 1 +1985 2344 0 +1985 2357 1 +1985 2358 1 +1985 2359 0 +1985 2360 1 +1986 1626 -1 +1986 1981 1 +1986 1982 1 +1986 1985 1 +1986 1989 1 +1986 1990 1 +1986 1991 1 +1986 1992 1 +1986 2343 1 +1986 2344 1 +1986 2357 1 +1986 2358 0 +1986 2359 1 +1986 2360 0 +1987 1627 1 +1987 1981 -1 +1987 1982 1 +1987 1989 1 +1987 1990 1 +1987 1991 1 +1987 1992 1 +1987 2333 -1 +1987 2334 0 +1987 2335 0 +1987 2336 0 +1987 2343 1 +1987 2344 0 +1988 1981 1 +1988 1982 1 +1988 1987 0 +1988 1989 -1 +1988 1990 1 +1988 1991 1 +1988 1992 1 +1988 2333 0 +1988 2334 1 +1988 2335 -1 +1988 2336 1 +1988 2343 1 +1988 2344 0 +1989 1990 0 +1989 2013 -1 +1990 2014 -1 +1991 1992 0 +1991 2015 1 +1992 2016 1 +1993 1629 0 +1993 1630 1 +1993 1633 0 +1993 1991 1 +1993 1992 1 +1993 1997 1 +1993 1998 1 +1993 1999 -1 +1993 2000 0 +1993 2005 0 +1993 2006 -1 +1993 2007 1 +1993 2008 0 +1994 1629 0 +1994 1630 1 +1994 1634 1 +1994 1991 1 +1994 1992 1 +1994 1993 1 +1994 1997 1 +1994 1998 0 +1994 1999 0 +1994 2000 1 +1994 2005 1 +1994 2006 1 +1994 2007 1 +1994 2008 0 +1995 1629 1 +1995 1630 1 +1995 1635 1 +1995 1981 0 +1995 1982 1 +1995 1983 -1 +1995 1984 -1 +1995 1991 0 +1995 1992 -1 +1995 1997 0 +1995 1998 1 +1995 1999 0 +1995 2000 0 +1996 1629 1 +1996 1630 0 +1996 1636 1 +1996 1981 0 +1996 1982 0 +1996 1983 1 +1996 1984 0 +1996 1991 1 +1996 1992 0 +1996 1995 0 +1996 1997 0 +1996 1998 0 +1996 1999 0 +1996 2000 1 +1997 1998 1 +1997 2021 1 +1998 2022 0 +1999 2000 1 +1999 2023 1 +2000 2024 -1 +2001 1641 0 +2001 1997 1 +2001 1998 0 +2001 2005 0 +2001 2006 0 +2001 2007 0 +2001 2008 1 +2001 2013 0 +2001 2014 1 +2001 2015 1 +2001 2016 1 +2001 2359 1 +2001 2360 1 +2002 1642 1 +2002 1997 1 +2002 1998 1 +2002 2001 1 +2002 2005 0 +2002 2006 1 +2002 2007 0 +2002 2008 0 +2002 2013 1 +2002 2014 0 +2002 2015 1 +2002 2016 1 +2002 2359 1 +2002 2360 0 +2003 1643 0 +2003 1989 0 +2003 1990 0 +2003 1991 0 +2003 1992 0 +2003 1997 1 +2003 1998 0 +2003 2005 -1 +2003 2006 1 +2003 2007 1 +2003 2008 0 +2003 2359 0 +2003 2360 1 +2004 1644 1 +2004 1989 1 +2004 1990 -1 +2004 1991 1 +2004 1992 1 +2004 1997 1 +2004 1998 1 +2004 2003 1 +2004 2005 0 +2004 2006 0 +2004 2007 0 +2004 2008 1 +2004 2359 0 +2004 2360 0 +2005 2006 1 +2005 2029 -1 +2006 2030 0 +2007 2008 -1 +2007 2031 0 +2008 2032 1 +2009 1649 1 +2009 2005 0 +2009 2006 1 +2009 2013 -1 +2009 2014 0 +2009 2015 0 +2009 2016 0 +2009 2367 0 +2009 2368 1 +2009 2381 1 +2009 2382 0 +2009 2383 0 +2009 2384 0 +2010 1650 1 +2010 2005 0 +2010 2006 1 +2010 2009 1 +2010 2013 0 +2010 2014 1 +2010 2015 1 +2010 2016 1 +2010 2367 0 +2010 2368 1 +2010 2381 1 +2010 2382 1 +2010 2383 1 +2010 2384 1 +2011 1651 1 +2011 2005 0 +2011 2006 1 +2011 2013 1 +2011 2014 0 +2011 2015 0 +2011 2016 0 +2011 2357 1 +2011 2358 0 +2011 2359 -1 +2011 2360 0 +2011 2367 -1 +2011 2368 1 +2012 1652 1 +2012 2005 1 +2012 2006 0 +2012 2011 1 +2012 2013 0 +2012 2014 1 +2012 2015 0 +2012 2016 1 +2012 2357 0 +2012 2358 0 +2012 2359 0 +2012 2360 0 +2012 2367 1 +2012 2368 0 +2013 2014 1 +2013 2037 0 +2014 2038 1 +2015 2016 1 +2015 2039 1 +2016 2040 1 +2017 1653 1 +2017 1654 0 +2017 1657 0 +2017 2015 -1 +2017 2016 1 +2017 2021 1 +2017 2022 -1 +2017 2023 0 +2017 2024 1 +2017 2029 1 +2017 2030 1 +2017 2031 -1 +2017 2032 -1 +2018 1653 1 +2018 1654 1 +2018 1658 1 +2018 2015 1 +2018 2016 0 +2018 2017 1 +2018 2021 1 +2018 2022 0 +2018 2023 1 +2018 2024 1 +2018 2029 -1 +2018 2030 1 +2018 2031 0 +2018 2032 -1 +2019 1653 -1 +2019 1654 1 +2019 2005 1 +2019 2006 1 +2019 2007 0 +2019 2008 -1 +2019 2015 1 +2019 2016 1 +2019 2021 1 +2019 2022 -1 +2019 2023 1 +2019 2024 -1 +2020 1653 1 +2020 1654 1 +2020 1660 1 +2020 2005 0 +2020 2006 1 +2020 2007 0 +2020 2008 0 +2020 2015 1 +2020 2016 0 +2020 2019 0 +2020 2021 -1 +2020 2022 0 +2020 2023 1 +2020 2024 0 +2021 2022 -1 +2021 2045 1 +2022 2046 1 +2023 2024 1 +2023 2047 0 +2024 2048 1 +2025 1665 1 +2025 2021 0 +2025 2022 1 +2025 2029 -1 +2025 2030 0 +2025 2031 1 +2025 2032 1 +2025 2037 1 +2025 2038 0 +2025 2039 0 +2025 2040 1 +2025 2383 1 +2025 2384 1 +2026 1666 0 +2026 2021 1 +2026 2022 1 +2026 2025 0 +2026 2029 0 +2026 2030 1 +2026 2031 1 +2026 2032 1 +2026 2037 0 +2026 2038 0 +2026 2039 1 +2026 2040 -1 +2026 2383 1 +2026 2384 0 +2027 1667 1 +2027 2013 -1 +2027 2014 1 +2027 2015 1 +2027 2016 1 +2027 2021 1 +2027 2022 1 +2027 2029 1 +2027 2030 1 +2027 2031 1 +2027 2032 0 +2027 2383 1 +2027 2384 -1 +2028 1668 -1 +2028 2013 -1 +2028 2014 1 +2028 2015 0 +2028 2016 1 +2028 2021 1 +2028 2022 1 +2028 2027 0 +2028 2029 0 +2028 2030 1 +2028 2031 1 +2028 2032 1 +2028 2383 1 +2028 2384 0 +2029 2030 -1 +2029 2053 -1 +2030 2054 1 +2031 2032 0 +2031 2055 1 +2032 2056 0 +2033 1673 1 +2033 2029 0 +2033 2030 0 +2033 2037 1 +2033 2038 -1 +2033 2039 1 +2033 2040 0 +2033 2391 0 +2033 2392 -1 +2033 2405 1 +2033 2406 -1 +2033 2407 1 +2033 2408 0 +2034 1674 1 +2034 2029 0 +2034 2030 0 +2034 2033 0 +2034 2037 -1 +2034 2038 1 +2034 2039 -1 +2034 2040 1 +2034 2391 1 +2034 2392 0 +2034 2405 1 +2034 2406 -1 +2034 2407 1 +2034 2408 -1 +2035 1675 -1 +2035 2029 1 +2035 2030 0 +2035 2037 -1 +2035 2038 0 +2035 2039 0 +2035 2040 0 +2035 2381 1 +2035 2382 1 +2035 2383 1 +2035 2384 1 +2035 2391 0 +2035 2392 1 +2036 1676 -1 +2036 2029 1 +2036 2030 0 +2036 2035 1 +2036 2037 0 +2036 2038 0 +2036 2039 1 +2036 2040 0 +2036 2381 1 +2036 2382 1 +2036 2383 1 +2036 2384 1 +2036 2391 0 +2036 2392 1 +2037 2038 1 +2037 2061 1 +2038 2062 1 +2039 2040 0 +2039 2063 1 +2040 2064 -1 +2041 1677 1 +2041 1678 1 +2041 1681 0 +2041 2039 0 +2041 2040 1 +2041 2045 1 +2041 2046 1 +2041 2047 1 +2041 2048 1 +2041 2053 1 +2041 2054 0 +2041 2055 0 +2041 2056 0 +2042 1677 1 +2042 1678 0 +2042 1682 0 +2042 2039 1 +2042 2040 0 +2042 2041 0 +2042 2045 0 +2042 2046 1 +2042 2047 0 +2042 2048 1 +2042 2053 -1 +2042 2054 0 +2042 2055 1 +2042 2056 -1 +2043 1677 0 +2043 1678 0 +2043 1683 1 +2043 2029 0 +2043 2030 1 +2043 2031 -1 +2043 2032 0 +2043 2039 1 +2043 2040 1 +2043 2045 1 +2043 2046 -1 +2043 2047 0 +2043 2048 0 +2044 1677 0 +2044 1678 0 +2044 1684 1 +2044 2029 1 +2044 2030 1 +2044 2031 -1 +2044 2032 -1 +2044 2039 1 +2044 2040 -1 +2044 2043 0 +2044 2045 0 +2044 2046 1 +2044 2047 0 +2044 2048 1 +2045 2046 1 +2045 2069 0 +2046 2070 -1 +2047 2048 1 +2047 2071 1 +2048 2072 0 +2049 1689 1 +2049 2045 0 +2049 2046 -1 +2049 2053 0 +2049 2054 1 +2049 2055 0 +2049 2056 0 +2049 2061 1 +2049 2062 0 +2049 2063 1 +2049 2064 1 +2049 2407 1 +2049 2408 1 +2050 1690 1 +2050 2045 0 +2050 2046 1 +2050 2049 0 +2050 2053 1 +2050 2054 1 +2050 2055 1 +2050 2056 0 +2050 2061 0 +2050 2062 1 +2050 2063 1 +2050 2064 0 +2050 2407 1 +2050 2408 0 +2051 1691 0 +2051 2037 1 +2051 2038 1 +2051 2039 1 +2051 2040 1 +2051 2045 1 +2051 2046 0 +2051 2053 0 +2051 2054 0 +2051 2055 1 +2051 2056 1 +2051 2407 1 +2051 2408 1 +2052 1692 1 +2052 2037 1 +2052 2038 0 +2052 2039 0 +2052 2040 1 +2052 2045 1 +2052 2046 1 +2052 2051 1 +2052 2053 1 +2052 2054 1 +2052 2055 0 +2052 2056 -1 +2052 2407 1 +2052 2408 0 +2053 2054 1 +2053 2077 1 +2054 2078 1 +2055 2056 0 +2055 2079 1 +2056 2080 1 +2057 1697 1 +2057 2053 0 +2057 2054 1 +2057 2061 1 +2057 2062 0 +2057 2063 1 +2057 2064 1 +2057 2415 0 +2057 2416 1 +2057 2429 0 +2057 2430 0 +2057 2431 0 +2057 2432 1 +2058 1698 0 +2058 2053 1 +2058 2054 0 +2058 2057 0 +2058 2061 0 +2058 2062 1 +2058 2063 0 +2058 2064 -1 +2058 2415 0 +2058 2416 1 +2058 2429 0 +2058 2430 1 +2058 2431 1 +2058 2432 0 +2059 1699 -1 +2059 2053 0 +2059 2054 -1 +2059 2061 1 +2059 2062 1 +2059 2063 0 +2059 2064 1 +2059 2405 1 +2059 2406 1 +2059 2407 1 +2059 2408 1 +2059 2415 -1 +2059 2416 1 +2060 1700 1 +2060 2053 1 +2060 2054 1 +2060 2059 1 +2060 2061 1 +2060 2062 1 +2060 2063 0 +2060 2064 1 +2060 2405 1 +2060 2406 1 +2060 2407 1 +2060 2408 0 +2060 2415 1 +2060 2416 1 +2061 2062 0 +2061 2085 -1 +2062 2086 0 +2063 2064 1 +2063 2087 -1 +2064 2088 0 +2065 1701 1 +2065 1702 -1 +2065 1705 1 +2065 2063 0 +2065 2064 0 +2065 2069 1 +2065 2070 1 +2065 2071 0 +2065 2072 0 +2065 2077 1 +2065 2078 1 +2065 2079 1 +2065 2080 1 +2066 1701 -1 +2066 1702 0 +2066 1706 1 +2066 2063 0 +2066 2064 0 +2066 2065 1 +2066 2069 0 +2066 2070 1 +2066 2071 1 +2066 2072 0 +2066 2077 1 +2066 2078 -1 +2066 2079 0 +2066 2080 0 +2067 1701 1 +2067 1702 0 +2067 1707 1 +2067 2053 1 +2067 2054 1 +2067 2055 1 +2067 2056 0 +2067 2063 1 +2067 2064 0 +2067 2069 0 +2067 2070 1 +2067 2071 0 +2067 2072 1 +2068 1701 0 +2068 1702 0 +2068 1708 1 +2068 2053 1 +2068 2054 1 +2068 2055 1 +2068 2056 1 +2068 2063 -1 +2068 2064 1 +2068 2067 1 +2068 2069 1 +2068 2070 -1 +2068 2071 1 +2068 2072 1 +2069 2070 1 +2069 2093 1 +2070 2094 1 +2071 2072 1 +2071 2095 1 +2072 2096 1 +2073 1713 1 +2073 2069 0 +2073 2070 0 +2073 2077 0 +2073 2078 -1 +2073 2079 1 +2073 2080 0 +2073 2085 0 +2073 2086 1 +2073 2087 0 +2073 2088 1 +2073 2431 1 +2073 2432 -1 +2074 1714 0 +2074 2069 1 +2074 2070 0 +2074 2073 0 +2074 2077 1 +2074 2078 0 +2074 2079 1 +2074 2080 0 +2074 2085 -1 +2074 2086 0 +2074 2087 1 +2074 2088 -1 +2074 2431 0 +2074 2432 1 +2075 1715 1 +2075 2061 0 +2075 2062 1 +2075 2063 0 +2075 2064 0 +2075 2069 1 +2075 2070 1 +2075 2077 1 +2075 2078 1 +2075 2079 0 +2075 2080 1 +2075 2431 1 +2075 2432 1 +2076 1716 1 +2076 2061 1 +2076 2062 1 +2076 2063 0 +2076 2064 1 +2076 2069 1 +2076 2070 0 +2076 2075 -1 +2076 2077 1 +2076 2078 1 +2076 2079 -1 +2076 2080 1 +2076 2431 0 +2076 2432 0 +2077 2078 1 +2077 2101 1 +2078 2102 0 +2079 2080 1 +2079 2103 0 +2080 2104 0 +2081 1721 1 +2081 2077 1 +2081 2078 0 +2081 2085 1 +2081 2086 1 +2081 2087 1 +2081 2088 1 +2081 2439 1 +2081 2440 0 +2081 2453 1 +2081 2454 1 +2081 2455 0 +2081 2456 1 +2082 1722 1 +2082 2077 -1 +2082 2078 0 +2082 2081 1 +2082 2085 1 +2082 2086 -1 +2082 2087 1 +2082 2088 1 +2082 2439 1 +2082 2440 0 +2082 2453 0 +2082 2454 -1 +2082 2455 -1 +2082 2456 0 +2083 1723 0 +2083 2077 1 +2083 2078 1 +2083 2085 1 +2083 2086 1 +2083 2087 1 +2083 2088 0 +2083 2429 0 +2083 2430 0 +2083 2431 -1 +2083 2432 1 +2083 2439 1 +2083 2440 1 +2084 1724 0 +2084 2077 1 +2084 2078 1 +2084 2083 0 +2084 2085 1 +2084 2086 0 +2084 2087 -1 +2084 2088 1 +2084 2429 1 +2084 2430 1 +2084 2431 0 +2084 2432 1 +2084 2439 0 +2084 2440 0 +2085 2086 0 +2085 2109 1 +2086 2110 1 +2087 2088 0 +2087 2111 -1 +2088 2112 1 +2089 1725 1 +2089 1726 0 +2089 1729 -1 +2089 2087 -1 +2089 2088 1 +2089 2093 1 +2089 2094 0 +2089 2095 1 +2089 2096 1 +2089 2101 0 +2089 2102 1 +2089 2103 1 +2089 2104 0 +2090 1725 0 +2090 1726 1 +2090 1730 1 +2090 2087 -1 +2090 2088 1 +2090 2089 0 +2090 2093 1 +2090 2094 1 +2090 2095 0 +2090 2096 1 +2090 2101 0 +2090 2102 0 +2090 2103 1 +2090 2104 0 +2091 1725 0 +2091 1726 0 +2091 1731 1 +2091 2077 1 +2091 2078 1 +2091 2079 0 +2091 2080 1 +2091 2087 0 +2091 2088 1 +2091 2093 1 +2091 2094 1 +2091 2095 1 +2091 2096 0 +2092 1725 0 +2092 1726 1 +2092 1732 0 +2092 2077 -1 +2092 2078 0 +2092 2079 1 +2092 2080 1 +2092 2087 0 +2092 2088 1 +2092 2091 0 +2092 2093 1 +2092 2094 1 +2092 2095 0 +2092 2096 1 +2093 2094 1 +2093 2117 0 +2094 2118 1 +2095 2096 1 +2095 2119 1 +2096 2120 0 +2097 1737 1 +2097 2093 1 +2097 2094 1 +2097 2101 0 +2097 2102 1 +2097 2103 1 +2097 2104 1 +2097 2109 1 +2097 2110 -1 +2097 2111 0 +2097 2112 0 +2097 2455 0 +2097 2456 1 +2098 1738 -1 +2098 2093 0 +2098 2094 0 +2098 2097 1 +2098 2101 -1 +2098 2102 0 +2098 2103 1 +2098 2104 0 +2098 2109 1 +2098 2110 1 +2098 2111 0 +2098 2112 1 +2098 2455 0 +2098 2456 1 +2099 1739 1 +2099 2085 1 +2099 2086 0 +2099 2087 1 +2099 2088 1 +2099 2093 -1 +2099 2094 1 +2099 2101 1 +2099 2102 0 +2099 2103 0 +2099 2104 1 +2099 2455 1 +2099 2456 0 +2100 1740 0 +2100 2085 0 +2100 2086 0 +2100 2087 0 +2100 2088 0 +2100 2093 0 +2100 2094 0 +2100 2099 1 +2100 2101 0 +2100 2102 1 +2100 2103 -1 +2100 2104 0 +2100 2455 1 +2100 2456 0 +2101 2102 -1 +2101 2125 0 +2102 2126 1 +2103 2104 0 +2103 2127 1 +2104 2128 1 +2105 1745 0 +2105 2101 -1 +2105 2102 -1 +2105 2109 0 +2105 2110 0 +2105 2111 -1 +2105 2112 0 +2105 2463 0 +2105 2464 1 +2105 2477 0 +2105 2478 1 +2105 2479 0 +2105 2480 0 +2106 1746 -1 +2106 2101 1 +2106 2102 1 +2106 2105 1 +2106 2109 0 +2106 2110 1 +2106 2111 1 +2106 2112 0 +2106 2463 -1 +2106 2464 1 +2106 2477 1 +2106 2478 1 +2106 2479 0 +2106 2480 1 +2107 1747 1 +2107 2101 0 +2107 2102 1 +2107 2109 0 +2107 2110 -1 +2107 2111 0 +2107 2112 0 +2107 2453 0 +2107 2454 1 +2107 2455 0 +2107 2456 1 +2107 2463 1 +2107 2464 1 +2108 1748 1 +2108 2101 1 +2108 2102 0 +2108 2107 1 +2108 2109 0 +2108 2110 0 +2108 2111 1 +2108 2112 0 +2108 2453 -1 +2108 2454 1 +2108 2455 -1 +2108 2456 1 +2108 2463 0 +2108 2464 1 +2109 2110 1 +2109 2133 0 +2110 2134 0 +2111 2112 1 +2111 2135 0 +2112 2136 0 +2113 1749 0 +2113 1750 1 +2113 1753 1 +2113 2111 1 +2113 2112 -1 +2113 2117 -1 +2113 2118 1 +2113 2119 0 +2113 2120 1 +2113 2125 -1 +2113 2126 1 +2113 2127 0 +2113 2128 1 +2114 1749 0 +2114 1750 1 +2114 1754 1 +2114 2111 1 +2114 2112 0 +2114 2113 1 +2114 2117 1 +2114 2118 1 +2114 2119 0 +2114 2120 1 +2114 2125 1 +2114 2126 0 +2114 2127 1 +2114 2128 1 +2115 1749 1 +2115 1750 0 +2115 1755 0 +2115 2101 1 +2115 2102 1 +2115 2103 0 +2115 2104 1 +2115 2111 0 +2115 2112 1 +2115 2117 1 +2115 2118 0 +2115 2119 1 +2115 2120 1 +2116 1749 1 +2116 1750 0 +2116 1756 1 +2116 2101 1 +2116 2102 0 +2116 2103 0 +2116 2104 1 +2116 2111 0 +2116 2112 0 +2116 2115 1 +2116 2117 1 +2116 2118 0 +2116 2119 1 +2116 2120 0 +2117 2118 0 +2117 2141 0 +2118 2142 1 +2119 2120 1 +2119 2143 1 +2120 2144 1 +2121 1761 0 +2121 2117 -1 +2121 2118 0 +2121 2125 -1 +2121 2126 1 +2121 2127 0 +2121 2128 0 +2121 2133 0 +2121 2134 1 +2121 2135 1 +2121 2136 1 +2121 2479 1 +2121 2480 0 +2122 1762 1 +2122 2117 1 +2122 2118 1 +2122 2121 1 +2122 2125 0 +2122 2126 0 +2122 2127 1 +2122 2128 1 +2122 2133 1 +2122 2134 1 +2122 2135 -1 +2122 2136 0 +2122 2479 0 +2122 2480 1 +2123 1763 0 +2123 2109 1 +2123 2110 -1 +2123 2111 1 +2123 2112 0 +2123 2117 0 +2123 2118 -1 +2123 2125 1 +2123 2126 0 +2123 2127 1 +2123 2128 -1 +2123 2479 -1 +2123 2480 -1 +2124 1764 1 +2124 2109 1 +2124 2110 1 +2124 2111 1 +2124 2112 0 +2124 2117 0 +2124 2118 1 +2124 2123 1 +2124 2125 1 +2124 2126 1 +2124 2127 1 +2124 2128 1 +2124 2479 1 +2124 2480 1 +2125 2126 0 +2125 2149 0 +2126 2150 0 +2127 2128 1 +2127 2151 1 +2128 2152 -1 +2129 1769 0 +2129 2125 0 +2129 2126 0 +2129 2133 1 +2129 2134 0 +2129 2135 0 +2129 2136 1 +2129 2487 1 +2129 2488 1 +2129 2501 1 +2129 2502 0 +2129 2503 0 +2129 2504 1 +2130 1770 0 +2130 2125 1 +2130 2126 1 +2130 2129 0 +2130 2133 1 +2130 2134 0 +2130 2135 1 +2130 2136 1 +2130 2487 1 +2130 2488 1 +2130 2501 -1 +2130 2502 1 +2130 2503 -1 +2130 2504 1 +2131 1771 1 +2131 2125 0 +2131 2126 1 +2131 2133 -1 +2131 2134 1 +2131 2135 0 +2131 2136 1 +2131 2477 0 +2131 2478 1 +2131 2479 1 +2131 2480 0 +2131 2487 0 +2131 2488 1 +2132 1772 1 +2132 2125 1 +2132 2126 0 +2132 2131 1 +2132 2133 1 +2132 2134 -1 +2132 2135 -1 +2132 2136 1 +2132 2477 0 +2132 2478 -1 +2132 2479 0 +2132 2480 1 +2132 2487 1 +2132 2488 1 +2133 2134 -1 +2133 2157 0 +2134 2158 0 +2135 2136 0 +2135 2159 1 +2136 2160 1 +2137 1773 0 +2137 1774 -1 +2137 1777 0 +2137 2135 1 +2137 2136 -1 +2137 2141 0 +2137 2142 0 +2137 2143 1 +2137 2144 1 +2137 2149 0 +2137 2150 0 +2137 2151 1 +2137 2152 0 +2138 1773 -1 +2138 1774 1 +2138 1778 1 +2138 2135 0 +2138 2136 0 +2138 2137 0 +2138 2141 1 +2138 2142 1 +2138 2143 1 +2138 2144 1 +2138 2149 -1 +2138 2150 0 +2138 2151 1 +2138 2152 0 +2139 1773 0 +2139 1774 1 +2139 1779 -1 +2139 2125 0 +2139 2126 1 +2139 2127 0 +2139 2128 0 +2139 2135 1 +2139 2136 1 +2139 2141 1 +2139 2142 1 +2139 2143 1 +2139 2144 1 +2140 1773 0 +2140 1774 0 +2140 1780 -1 +2140 2125 1 +2140 2126 1 +2140 2127 1 +2140 2128 -1 +2140 2135 1 +2140 2136 0 +2140 2139 0 +2140 2141 1 +2140 2142 1 +2140 2143 0 +2140 2144 1 +2141 2142 -1 +2143 2144 1 +2145 1785 0 +2145 2141 0 +2145 2142 1 +2145 2149 1 +2145 2150 1 +2145 2151 0 +2145 2152 0 +2145 2157 0 +2145 2158 1 +2145 2159 -1 +2145 2160 0 +2145 2503 0 +2145 2504 1 +2146 1786 0 +2146 2141 -1 +2146 2142 1 +2146 2145 1 +2146 2149 0 +2146 2150 1 +2146 2151 -1 +2146 2152 0 +2146 2157 1 +2146 2158 -1 +2146 2159 0 +2146 2160 0 +2146 2503 0 +2146 2504 1 +2147 1787 1 +2147 2133 0 +2147 2134 0 +2147 2135 1 +2147 2136 0 +2147 2141 1 +2147 2142 0 +2147 2149 -1 +2147 2150 1 +2147 2151 1 +2147 2152 -1 +2147 2503 1 +2147 2504 0 +2148 1788 1 +2148 2133 1 +2148 2134 -1 +2148 2135 -1 +2148 2136 1 +2148 2141 1 +2148 2142 0 +2148 2147 1 +2148 2149 -1 +2148 2150 0 +2148 2151 -1 +2148 2152 1 +2148 2503 0 +2148 2504 0 +2149 2150 0 +2151 2152 1 +2153 1793 0 +2153 2149 1 +2153 2150 1 +2153 2157 1 +2153 2158 0 +2153 2159 1 +2153 2160 -1 +2153 2511 0 +2153 2512 0 +2154 1794 0 +2154 2149 1 +2154 2150 0 +2154 2153 -1 +2154 2157 0 +2154 2158 1 +2154 2159 1 +2154 2160 0 +2154 2511 0 +2154 2512 0 +2155 1795 0 +2155 2149 0 +2155 2150 1 +2155 2157 0 +2155 2158 0 +2155 2159 1 +2155 2160 1 +2155 2501 1 +2155 2502 1 +2155 2503 0 +2155 2504 -1 +2155 2511 1 +2155 2512 0 +2156 1796 1 +2156 2149 1 +2156 2150 1 +2156 2155 0 +2156 2157 1 +2156 2158 1 +2156 2159 0 +2156 2160 -1 +2156 2501 0 +2156 2502 0 +2156 2503 1 +2156 2504 0 +2156 2511 1 +2156 2512 -1 +2157 2158 1 +2159 2160 0 +2161 1801 1 +2161 2165 1 +2161 2166 1 +2161 2167 0 +2161 2168 1 +2161 2173 0 +2161 2174 0 +2161 2175 1 +2161 2176 0 +2162 1802 0 +2162 2161 0 +2162 2165 1 +2162 2166 0 +2162 2167 -1 +2162 2168 1 +2162 2173 -1 +2162 2174 1 +2162 2175 1 +2162 2176 0 +2163 1803 1 +2163 2165 1 +2163 2166 1 +2163 2167 0 +2163 2168 1 +2164 1804 0 +2164 2163 0 +2164 2165 1 +2164 2166 0 +2164 2167 0 +2164 2168 1 +2165 2166 1 +2165 2189 1 +2166 2190 0 +2167 2168 0 +2167 2191 1 +2168 2192 0 +2169 1809 -1 +2169 2165 0 +2169 2166 1 +2169 2173 1 +2169 2174 1 +2169 2175 -1 +2169 2176 0 +2169 2181 1 +2169 2182 0 +2169 2183 1 +2169 2184 1 +2169 2527 0 +2169 2528 0 +2170 1810 1 +2170 2165 1 +2170 2166 0 +2170 2169 1 +2170 2173 0 +2170 2174 1 +2170 2175 1 +2170 2176 1 +2170 2181 0 +2170 2182 1 +2170 2183 1 +2170 2184 0 +2170 2527 1 +2170 2528 -1 +2171 1811 1 +2171 2165 1 +2171 2166 0 +2171 2173 1 +2171 2174 1 +2171 2175 1 +2171 2176 0 +2171 2527 0 +2171 2528 0 +2172 1812 0 +2172 2165 0 +2172 2166 1 +2172 2171 0 +2172 2173 1 +2172 2174 1 +2172 2175 1 +2172 2176 1 +2172 2527 0 +2172 2528 1 +2173 2174 0 +2173 2197 1 +2174 2198 0 +2175 2176 0 +2175 2199 1 +2176 2200 1 +2177 1817 0 +2177 2173 1 +2177 2174 0 +2177 2181 1 +2177 2182 1 +2177 2183 0 +2177 2184 0 +2177 2535 1 +2177 2536 -1 +2177 2549 0 +2177 2550 0 +2177 2551 1 +2177 2552 1 +2178 1818 0 +2178 2173 0 +2178 2174 0 +2178 2177 1 +2178 2181 0 +2178 2182 1 +2178 2183 1 +2178 2184 0 +2178 2535 -1 +2178 2536 1 +2178 2549 0 +2178 2550 0 +2178 2551 0 +2178 2552 1 +2179 1819 1 +2179 2173 1 +2179 2174 1 +2179 2181 1 +2179 2182 -1 +2179 2183 -1 +2179 2184 0 +2179 2525 1 +2179 2526 0 +2179 2527 1 +2179 2528 -1 +2179 2535 1 +2179 2536 -1 +2180 1820 1 +2180 2173 1 +2180 2174 1 +2180 2179 1 +2180 2181 -1 +2180 2182 1 +2180 2183 0 +2180 2184 1 +2180 2525 0 +2180 2526 0 +2180 2527 1 +2180 2528 1 +2180 2535 0 +2180 2536 1 +2181 2182 0 +2181 2205 1 +2182 2206 1 +2183 2184 1 +2183 2207 0 +2184 2208 -1 +2185 1821 1 +2185 1822 1 +2185 1825 0 +2185 2183 1 +2185 2184 0 +2185 2189 1 +2185 2190 0 +2185 2191 0 +2185 2192 1 +2185 2197 1 +2185 2198 1 +2185 2199 0 +2185 2200 1 +2186 1821 1 +2186 1822 0 +2186 1826 1 +2186 2183 1 +2186 2184 1 +2186 2185 1 +2186 2189 1 +2186 2190 1 +2186 2191 0 +2186 2192 0 +2186 2197 1 +2186 2198 0 +2186 2199 0 +2186 2200 0 +2187 1821 0 +2187 1822 1 +2187 1827 1 +2187 2173 1 +2187 2174 0 +2187 2175 -1 +2187 2176 0 +2187 2183 0 +2187 2184 1 +2187 2189 1 +2187 2190 1 +2187 2191 0 +2187 2192 1 +2188 1821 1 +2188 1822 0 +2188 1828 0 +2188 2173 0 +2188 2174 1 +2188 2175 0 +2188 2176 0 +2188 2183 0 +2188 2184 0 +2188 2187 1 +2188 2189 -1 +2188 2190 -1 +2188 2191 0 +2188 2192 0 +2189 2190 0 +2189 2213 1 +2190 2214 0 +2191 2192 0 +2191 2215 0 +2192 2216 1 +2193 1833 1 +2193 2189 1 +2193 2190 1 +2193 2197 1 +2193 2198 0 +2193 2199 0 +2193 2200 1 +2193 2205 1 +2193 2206 0 +2193 2207 -1 +2193 2208 -1 +2193 2551 1 +2193 2552 1 +2194 1834 0 +2194 2189 -1 +2194 2190 1 +2194 2193 1 +2194 2197 1 +2194 2198 1 +2194 2199 0 +2194 2200 1 +2194 2205 0 +2194 2206 1 +2194 2207 -1 +2194 2208 0 +2194 2551 0 +2194 2552 -1 +2195 1835 1 +2195 2181 1 +2195 2182 1 +2195 2183 1 +2195 2184 -1 +2195 2189 1 +2195 2190 0 +2195 2197 0 +2195 2198 1 +2195 2199 1 +2195 2200 0 +2195 2551 1 +2195 2552 1 +2196 1836 0 +2196 2181 1 +2196 2182 0 +2196 2183 0 +2196 2184 1 +2196 2189 0 +2196 2190 0 +2196 2195 0 +2196 2197 1 +2196 2198 1 +2196 2199 0 +2196 2200 0 +2196 2551 0 +2196 2552 1 +2197 2198 1 +2197 2221 0 +2198 2222 0 +2199 2200 0 +2199 2223 1 +2200 2224 1 +2201 1841 0 +2201 2197 1 +2201 2198 1 +2201 2205 1 +2201 2206 -1 +2201 2207 1 +2201 2208 -1 +2201 2559 1 +2201 2560 1 +2201 2573 1 +2201 2574 -1 +2201 2575 1 +2201 2576 0 +2202 1842 -1 +2202 2197 1 +2202 2198 0 +2202 2201 0 +2202 2205 1 +2202 2206 1 +2202 2207 1 +2202 2208 0 +2202 2559 1 +2202 2560 0 +2202 2573 -1 +2202 2574 0 +2202 2575 0 +2202 2576 0 +2203 1843 1 +2203 2197 1 +2203 2198 0 +2203 2205 1 +2203 2206 1 +2203 2207 0 +2203 2208 0 +2203 2549 1 +2203 2550 1 +2203 2551 -1 +2203 2552 0 +2203 2559 0 +2203 2560 0 +2204 1844 0 +2204 2197 0 +2204 2198 0 +2204 2203 0 +2204 2205 0 +2204 2206 0 +2204 2207 0 +2204 2208 1 +2204 2549 1 +2204 2550 1 +2204 2551 1 +2204 2552 1 +2204 2559 -1 +2204 2560 0 +2205 2206 1 +2206 2230 1 +2207 2208 1 +2207 2231 1 +2208 2232 0 +2209 1845 0 +2209 1846 1 +2209 1849 1 +2209 2207 0 +2209 2208 1 +2209 2213 1 +2209 2214 1 +2209 2215 0 +2209 2216 1 +2209 2221 -1 +2209 2222 0 +2209 2223 1 +2209 2224 1 +2210 1845 0 +2210 1846 1 +2210 1850 1 +2210 2207 1 +2210 2208 1 +2210 2209 0 +2210 2213 1 +2210 2214 0 +2210 2215 1 +2210 2216 -1 +2210 2221 1 +2210 2222 -1 +2210 2223 0 +2210 2224 0 +2211 1845 1 +2211 1846 0 +2211 1851 -1 +2211 2197 0 +2211 2198 0 +2211 2199 0 +2211 2200 1 +2211 2207 0 +2211 2208 1 +2211 2213 -1 +2211 2214 1 +2211 2215 0 +2211 2216 0 +2212 1845 1 +2212 1846 0 +2212 1852 0 +2212 2197 0 +2212 2198 0 +2212 2199 1 +2212 2200 0 +2212 2207 1 +2212 2208 -1 +2212 2211 -1 +2212 2213 1 +2212 2214 -1 +2212 2215 1 +2212 2216 1 +2213 2214 0 +2213 2237 0 +2214 2238 1 +2215 2216 0 +2215 2239 1 +2216 2240 0 +2217 1857 1 +2217 2213 0 +2217 2214 0 +2217 2221 0 +2217 2222 0 +2217 2223 1 +2217 2224 0 +2217 2230 1 +2217 2231 0 +2217 2232 0 +2217 2575 1 +2217 2576 1 +2218 1858 0 +2218 2213 1 +2218 2214 1 +2218 2217 1 +2218 2221 1 +2218 2222 1 +2218 2223 0 +2218 2224 1 +2218 2230 1 +2218 2231 1 +2218 2232 1 +2218 2575 -1 +2218 2576 -1 +2219 1859 0 +2219 2205 1 +2219 2206 0 +2219 2207 0 +2219 2208 0 +2219 2213 1 +2219 2214 0 +2219 2221 0 +2219 2222 0 +2219 2223 0 +2219 2224 0 +2219 2575 0 +2219 2576 1 +2220 1860 0 +2220 2205 0 +2220 2206 1 +2220 2207 0 +2220 2208 1 +2220 2213 0 +2220 2214 1 +2220 2219 1 +2220 2221 0 +2220 2222 1 +2220 2223 1 +2220 2224 -1 +2220 2575 0 +2220 2576 0 +2221 2222 1 +2221 2245 1 +2222 2246 0 +2223 2224 1 +2223 2247 1 +2224 2248 0 +2225 1865 1 +2225 2221 0 +2225 2222 -1 +2225 2230 0 +2225 2231 1 +2225 2232 0 +2225 2583 1 +2225 2584 -1 +2225 2597 1 +2225 2598 1 +2225 2599 1 +2225 2600 1 +2226 1866 0 +2226 2221 1 +2226 2222 0 +2226 2225 1 +2226 2230 -1 +2226 2231 0 +2226 2232 1 +2226 2583 -1 +2226 2584 0 +2226 2597 1 +2226 2598 1 +2226 2599 0 +2226 2600 1 +2227 1867 0 +2227 2221 0 +2227 2222 1 +2227 2230 1 +2227 2231 0 +2227 2232 0 +2227 2573 0 +2227 2574 1 +2227 2575 0 +2227 2576 1 +2227 2583 0 +2227 2584 1 +2228 1868 0 +2228 2221 1 +2228 2222 0 +2228 2227 1 +2228 2230 1 +2228 2231 1 +2228 2232 1 +2228 2573 1 +2228 2574 1 +2228 2575 1 +2228 2576 0 +2228 2583 1 +2228 2584 1 +2230 2254 0 +2231 2232 1 +2231 2255 1 +2232 2256 1 +2233 1869 0 +2233 1870 1 +2233 1873 0 +2233 2231 0 +2233 2232 1 +2233 2237 0 +2233 2238 -1 +2233 2239 1 +2233 2240 -1 +2233 2245 1 +2233 2246 0 +2233 2247 0 +2233 2248 0 +2234 1869 0 +2234 1870 1 +2234 1874 0 +2234 2231 0 +2234 2232 1 +2234 2233 0 +2234 2237 0 +2234 2238 1 +2234 2239 1 +2234 2240 0 +2234 2245 -1 +2234 2246 0 +2234 2247 -1 +2234 2248 -1 +2235 1869 0 +2235 1870 1 +2235 1875 1 +2235 2221 1 +2235 2222 1 +2235 2223 1 +2235 2224 1 +2235 2231 0 +2235 2232 0 +2235 2237 0 +2235 2238 1 +2235 2239 1 +2235 2240 1 +2236 1869 0 +2236 1870 1 +2236 1876 1 +2236 2221 1 +2236 2222 -1 +2236 2223 1 +2236 2224 -1 +2236 2231 1 +2236 2232 1 +2236 2235 0 +2236 2237 -1 +2236 2238 0 +2236 2239 0 +2236 2240 1 +2237 2238 0 +2237 2261 0 +2238 2262 1 +2239 2240 -1 +2239 2263 1 +2240 2264 1 +2241 1881 -1 +2241 2237 1 +2241 2238 0 +2241 2245 1 +2241 2246 1 +2241 2247 1 +2241 2248 -1 +2241 2253 1 +2241 2254 -1 +2241 2255 0 +2241 2256 1 +2241 2599 -1 +2241 2600 0 +2242 1882 1 +2242 2237 1 +2242 2238 -1 +2242 2241 1 +2242 2245 1 +2242 2246 1 +2242 2247 1 +2242 2248 0 +2242 2253 1 +2242 2254 1 +2242 2255 -1 +2242 2256 1 +2242 2599 0 +2242 2600 -1 +2243 1883 0 +2243 2230 1 +2243 2231 1 +2243 2232 0 +2243 2237 0 +2243 2238 1 +2243 2245 0 +2243 2246 1 +2243 2247 1 +2243 2248 0 +2243 2599 0 +2243 2600 -1 +2244 1884 1 +2244 2230 0 +2244 2231 1 +2244 2232 1 +2244 2237 1 +2244 2238 0 +2244 2243 1 +2244 2245 0 +2244 2246 1 +2244 2247 1 +2244 2248 0 +2244 2599 1 +2244 2600 1 +2245 2246 1 +2245 2269 1 +2246 2270 1 +2247 2248 1 +2247 2271 1 +2248 2272 0 +2249 1889 1 +2249 2245 1 +2249 2246 1 +2249 2253 1 +2249 2254 1 +2249 2255 1 +2249 2256 0 +2249 2607 0 +2249 2608 1 +2249 2621 0 +2249 2622 1 +2249 2623 1 +2249 2624 1 +2250 1890 0 +2250 2245 1 +2250 2246 1 +2250 2249 0 +2250 2253 1 +2250 2254 1 +2250 2255 0 +2250 2256 0 +2250 2607 1 +2250 2608 1 +2250 2621 0 +2250 2622 0 +2250 2623 1 +2250 2624 0 +2251 1891 0 +2251 2245 1 +2251 2246 1 +2251 2253 1 +2251 2254 1 +2251 2255 1 +2251 2256 0 +2251 2597 0 +2251 2598 -1 +2251 2599 1 +2251 2600 1 +2251 2607 1 +2251 2608 1 +2252 1892 1 +2252 2245 1 +2252 2246 0 +2252 2251 1 +2252 2253 1 +2252 2254 0 +2252 2255 1 +2252 2256 0 +2252 2597 0 +2252 2598 1 +2252 2599 1 +2252 2600 1 +2252 2607 -1 +2252 2608 -1 +2253 2254 1 +2253 2277 0 +2254 2278 1 +2255 2256 0 +2255 2279 0 +2256 2280 0 +2257 1893 0 +2257 1894 1 +2257 1897 1 +2257 2255 1 +2257 2256 0 +2257 2261 -1 +2257 2262 0 +2257 2263 1 +2257 2264 1 +2257 2269 0 +2257 2270 0 +2257 2271 1 +2257 2272 -1 +2258 1893 1 +2258 1894 1 +2258 1898 -1 +2258 2255 0 +2258 2256 0 +2258 2257 0 +2258 2261 1 +2258 2262 1 +2258 2263 1 +2258 2264 0 +2258 2269 0 +2258 2270 1 +2258 2271 1 +2258 2272 0 +2259 1893 1 +2259 1894 1 +2259 1899 1 +2259 2245 1 +2259 2246 1 +2259 2247 0 +2259 2248 0 +2259 2255 0 +2259 2256 1 +2259 2261 0 +2259 2262 0 +2259 2263 0 +2259 2264 -1 +2260 1893 1 +2260 1894 1 +2260 1900 1 +2260 2245 1 +2260 2246 -1 +2260 2247 1 +2260 2248 1 +2260 2255 1 +2260 2256 0 +2260 2259 0 +2260 2261 1 +2260 2262 0 +2260 2263 0 +2260 2264 0 +2261 2262 0 +2261 2285 0 +2262 2286 0 +2263 2264 0 +2263 2287 1 +2264 2288 1 +2265 1905 1 +2265 2261 1 +2265 2262 -1 +2265 2269 1 +2265 2270 1 +2265 2271 1 +2265 2272 0 +2265 2277 1 +2265 2278 1 +2265 2279 0 +2265 2280 1 +2265 2623 1 +2265 2624 0 +2266 1906 1 +2266 2261 0 +2266 2262 1 +2266 2265 -1 +2266 2269 1 +2266 2270 0 +2266 2271 0 +2266 2272 1 +2266 2277 0 +2266 2278 1 +2266 2279 1 +2266 2280 -1 +2266 2623 0 +2266 2624 0 +2267 1907 1 +2267 2253 0 +2267 2254 -1 +2267 2255 0 +2267 2256 1 +2267 2261 1 +2267 2262 1 +2267 2269 1 +2267 2270 1 +2267 2271 0 +2267 2272 1 +2267 2623 1 +2267 2624 1 +2268 1908 0 +2268 2253 1 +2268 2254 1 +2268 2255 0 +2268 2256 1 +2268 2261 -1 +2268 2262 0 +2268 2267 0 +2268 2269 1 +2268 2270 1 +2268 2271 0 +2268 2272 1 +2268 2623 0 +2268 2624 1 +2269 2270 1 +2269 2293 1 +2270 2294 1 +2271 2272 0 +2271 2295 0 +2272 2296 1 +2273 1913 1 +2273 2269 1 +2273 2270 -1 +2273 2277 1 +2273 2278 0 +2273 2279 -1 +2273 2280 1 +2273 2631 -1 +2273 2632 0 +2273 2645 -1 +2273 2646 0 +2273 2647 0 +2273 2648 0 +2274 1914 1 +2274 2269 -1 +2274 2270 0 +2274 2273 1 +2274 2277 1 +2274 2278 1 +2274 2279 1 +2274 2280 -1 +2274 2631 1 +2274 2632 1 +2274 2645 0 +2274 2646 1 +2274 2647 1 +2274 2648 -1 +2275 1915 1 +2275 2269 1 +2275 2270 1 +2275 2277 0 +2275 2278 0 +2275 2279 0 +2275 2280 1 +2275 2621 0 +2275 2622 1 +2275 2623 0 +2275 2624 0 +2275 2631 1 +2275 2632 0 +2276 1916 -1 +2276 2269 1 +2276 2270 0 +2276 2275 1 +2276 2277 0 +2276 2278 1 +2276 2279 1 +2276 2280 1 +2276 2621 1 +2276 2622 1 +2276 2623 0 +2276 2624 0 +2276 2631 0 +2276 2632 1 +2277 2278 1 +2277 2301 1 +2278 2302 -1 +2279 2280 0 +2279 2303 1 +2280 2304 -1 +2281 1917 1 +2281 1918 1 +2281 1921 0 +2281 2279 0 +2281 2280 1 +2281 2285 1 +2281 2286 1 +2281 2287 1 +2281 2288 1 +2281 2293 -1 +2281 2294 0 +2281 2295 1 +2281 2296 1 +2282 1917 0 +2282 1918 1 +2282 1922 0 +2282 2279 1 +2282 2280 1 +2282 2281 1 +2282 2285 1 +2282 2286 1 +2282 2287 1 +2282 2288 1 +2282 2293 1 +2282 2294 -1 +2282 2295 0 +2282 2296 0 +2283 1917 1 +2283 1918 0 +2283 1923 1 +2283 2269 1 +2283 2270 0 +2283 2271 1 +2283 2272 -1 +2283 2279 -1 +2283 2280 -1 +2283 2285 0 +2283 2286 0 +2283 2287 0 +2283 2288 1 +2284 1917 1 +2284 1918 1 +2284 1924 0 +2284 2269 0 +2284 2270 1 +2284 2271 1 +2284 2272 -1 +2284 2279 1 +2284 2280 1 +2284 2283 0 +2284 2285 0 +2284 2286 0 +2284 2287 0 +2284 2288 0 +2285 2286 0 +2285 2309 1 +2286 2310 0 +2287 2288 1 +2287 2311 0 +2288 2312 0 +2289 1929 -1 +2289 2285 1 +2289 2286 0 +2289 2293 1 +2289 2294 0 +2289 2295 1 +2289 2296 0 +2289 2301 1 +2289 2302 0 +2289 2303 1 +2289 2304 1 +2289 2647 1 +2289 2648 1 +2290 1930 1 +2290 2285 0 +2290 2286 1 +2290 2289 0 +2290 2293 1 +2290 2294 1 +2290 2295 1 +2290 2296 1 +2290 2301 -1 +2290 2302 1 +2290 2303 0 +2290 2304 1 +2290 2647 -1 +2290 2648 0 +2291 1931 1 +2291 2277 -1 +2291 2278 1 +2291 2279 1 +2291 2280 0 +2291 2285 0 +2291 2286 0 +2291 2293 0 +2291 2294 1 +2291 2295 0 +2291 2296 1 +2291 2647 0 +2291 2648 1 +2292 1932 1 +2292 2277 0 +2292 2278 1 +2292 2279 1 +2292 2280 0 +2292 2285 0 +2292 2286 0 +2292 2291 1 +2292 2293 -1 +2292 2294 1 +2292 2295 0 +2292 2296 0 +2292 2647 0 +2292 2648 0 +2293 2294 -1 +2293 2317 0 +2294 2318 1 +2295 2296 1 +2295 2319 0 +2296 2320 0 +2297 1937 1 +2297 2293 0 +2297 2294 0 +2297 2301 0 +2297 2302 1 +2297 2303 0 +2297 2304 1 +2297 2655 1 +2297 2656 1 +2297 2669 1 +2297 2670 0 +2297 2671 -1 +2297 2672 0 +2298 1938 1 +2298 2293 1 +2298 2294 1 +2298 2297 1 +2298 2301 1 +2298 2302 1 +2298 2303 0 +2298 2304 0 +2298 2655 1 +2298 2656 1 +2298 2669 0 +2298 2670 -1 +2298 2671 1 +2298 2672 1 +2299 1939 -1 +2299 2293 1 +2299 2294 1 +2299 2301 1 +2299 2302 1 +2299 2303 0 +2299 2304 0 +2299 2645 1 +2299 2646 1 +2299 2647 1 +2299 2648 1 +2299 2655 0 +2299 2656 1 +2300 1940 1 +2300 2293 0 +2300 2294 1 +2300 2299 0 +2300 2301 1 +2300 2302 0 +2300 2303 1 +2300 2304 1 +2300 2645 1 +2300 2646 1 +2300 2647 1 +2300 2648 1 +2300 2655 1 +2300 2656 0 +2301 2302 1 +2301 2325 1 +2302 2326 1 +2303 2304 0 +2303 2327 1 +2304 2328 1 +2305 1941 0 +2305 1942 1 +2305 1945 0 +2305 2303 0 +2305 2304 -1 +2305 2309 -1 +2305 2310 -1 +2305 2311 0 +2305 2312 1 +2305 2317 0 +2305 2318 1 +2305 2319 0 +2305 2320 0 +2306 1941 1 +2306 1942 0 +2306 1946 -1 +2306 2303 0 +2306 2304 1 +2306 2305 1 +2306 2309 1 +2306 2310 0 +2306 2311 1 +2306 2312 0 +2306 2317 1 +2306 2318 1 +2306 2319 0 +2306 2320 0 +2307 1941 1 +2307 1942 1 +2307 1947 0 +2307 2293 1 +2307 2294 0 +2307 2295 -1 +2307 2296 1 +2307 2303 1 +2307 2304 1 +2307 2309 1 +2307 2310 1 +2307 2311 -1 +2307 2312 1 +2308 1941 0 +2308 1942 0 +2308 1948 0 +2308 2293 1 +2308 2294 0 +2308 2295 0 +2308 2296 1 +2308 2303 1 +2308 2304 1 +2308 2307 0 +2308 2309 0 +2308 2310 1 +2308 2311 0 +2308 2312 1 +2309 2310 1 +2309 2333 -1 +2310 2334 1 +2311 2312 1 +2311 2335 0 +2312 2336 1 +2313 1953 0 +2313 2309 1 +2313 2310 0 +2313 2317 0 +2313 2318 1 +2313 2319 -1 +2313 2320 1 +2313 2325 0 +2313 2326 0 +2313 2327 1 +2313 2328 1 +2313 2671 1 +2313 2672 1 +2314 1954 1 +2314 2309 1 +2314 2310 0 +2314 2313 1 +2314 2317 0 +2314 2318 1 +2314 2319 1 +2314 2320 0 +2314 2325 0 +2314 2326 1 +2314 2327 0 +2314 2328 1 +2314 2671 1 +2314 2672 -1 +2315 1955 0 +2315 2301 1 +2315 2302 -1 +2315 2303 1 +2315 2304 1 +2315 2309 -1 +2315 2310 1 +2315 2317 -1 +2315 2318 1 +2315 2319 1 +2315 2320 1 +2315 2671 1 +2315 2672 0 +2316 1956 1 +2316 2301 1 +2316 2302 1 +2316 2303 1 +2316 2304 1 +2316 2309 0 +2316 2310 0 +2316 2315 0 +2316 2317 0 +2316 2318 1 +2316 2319 1 +2316 2320 1 +2316 2671 1 +2316 2672 0 +2317 2318 1 +2317 2341 1 +2318 2342 1 +2319 2320 1 +2319 2343 0 +2320 2344 1 +2321 1961 1 +2321 2317 0 +2321 2318 -1 +2321 2325 -1 +2321 2326 1 +2321 2327 1 +2321 2328 1 +2321 2679 1 +2321 2680 0 +2321 2693 1 +2321 2694 0 +2321 2695 0 +2321 2696 0 +2322 1962 0 +2322 2317 0 +2322 2318 0 +2322 2321 0 +2322 2325 1 +2322 2326 1 +2322 2327 0 +2322 2328 1 +2322 2679 1 +2322 2680 1 +2322 2693 1 +2322 2694 1 +2322 2695 1 +2322 2696 -1 +2323 1963 1 +2323 2317 1 +2323 2318 1 +2323 2325 0 +2323 2326 0 +2323 2327 0 +2323 2328 0 +2323 2669 0 +2323 2670 -1 +2323 2671 -1 +2323 2672 1 +2323 2679 0 +2323 2680 1 +2324 1964 1 +2324 2317 0 +2324 2318 0 +2324 2323 1 +2324 2325 1 +2324 2326 1 +2324 2327 1 +2324 2328 0 +2324 2669 0 +2324 2670 1 +2324 2671 -1 +2324 2672 1 +2324 2679 1 +2324 2680 0 +2325 2326 0 +2325 2349 1 +2326 2350 -1 +2327 2328 0 +2327 2351 0 +2328 2352 0 +2329 1965 1 +2329 1966 1 +2329 1969 1 +2329 2327 0 +2329 2328 1 +2329 2333 -1 +2329 2334 1 +2329 2335 0 +2329 2336 -1 +2329 2341 1 +2329 2342 1 +2329 2343 0 +2329 2344 1 +2330 1965 1 +2330 1966 1 +2330 1970 0 +2330 2327 1 +2330 2328 1 +2330 2329 -1 +2330 2333 1 +2330 2334 0 +2330 2335 1 +2330 2336 0 +2330 2341 0 +2330 2342 1 +2330 2343 1 +2330 2344 1 +2331 1965 1 +2331 1966 0 +2331 1971 -1 +2331 2317 0 +2331 2318 -1 +2331 2319 1 +2331 2320 1 +2331 2327 0 +2331 2328 0 +2331 2333 0 +2331 2334 0 +2331 2335 1 +2331 2336 0 +2332 1965 1 +2332 1966 0 +2332 1972 0 +2332 2317 0 +2332 2318 1 +2332 2319 0 +2332 2320 0 +2332 2327 1 +2332 2328 1 +2332 2331 -1 +2332 2333 1 +2332 2334 0 +2332 2335 0 +2332 2336 1 +2333 2334 1 +2333 2357 0 +2334 2358 1 +2335 2336 0 +2335 2359 -1 +2336 2360 1 +2337 1977 1 +2337 2333 1 +2337 2334 -1 +2337 2341 -1 +2337 2342 1 +2337 2343 0 +2337 2344 -1 +2337 2349 -1 +2337 2350 1 +2337 2351 0 +2337 2352 -1 +2337 2695 1 +2337 2696 0 +2338 1978 1 +2338 2333 1 +2338 2334 -1 +2338 2337 1 +2338 2341 0 +2338 2342 0 +2338 2343 0 +2338 2344 0 +2338 2349 0 +2338 2350 1 +2338 2351 1 +2338 2352 1 +2338 2695 0 +2338 2696 0 +2339 1979 -1 +2339 2325 1 +2339 2326 -1 +2339 2327 0 +2339 2328 1 +2339 2333 0 +2339 2334 1 +2339 2341 0 +2339 2342 1 +2339 2343 1 +2339 2344 1 +2339 2695 -1 +2339 2696 0 +2340 1980 0 +2340 2325 1 +2340 2326 -1 +2340 2327 0 +2340 2328 1 +2340 2333 0 +2340 2334 1 +2340 2339 0 +2340 2341 1 +2340 2342 0 +2340 2343 -1 +2340 2344 1 +2340 2695 0 +2340 2696 1 +2341 2342 0 +2341 2365 1 +2342 2366 1 +2343 2344 1 +2343 2367 1 +2344 2368 -1 +2345 1985 0 +2345 2341 1 +2345 2342 1 +2345 2349 1 +2345 2350 1 +2345 2351 0 +2345 2352 1 +2345 2703 -1 +2345 2704 -1 +2345 2717 1 +2345 2718 -1 +2345 2719 1 +2345 2720 1 +2346 1986 1 +2346 2341 1 +2346 2342 1 +2346 2345 1 +2346 2349 0 +2346 2350 -1 +2346 2351 1 +2346 2352 1 +2346 2703 1 +2346 2704 1 +2346 2717 0 +2346 2718 0 +2346 2719 0 +2346 2720 1 +2347 1987 -1 +2347 2341 1 +2347 2342 1 +2347 2349 1 +2347 2350 1 +2347 2351 0 +2347 2352 1 +2347 2693 1 +2347 2694 1 +2347 2695 0 +2347 2696 1 +2347 2703 1 +2347 2704 1 +2348 1988 1 +2348 2341 0 +2348 2342 1 +2348 2347 1 +2348 2349 1 +2348 2350 1 +2348 2351 0 +2348 2352 0 +2348 2693 0 +2348 2694 1 +2348 2695 1 +2348 2696 1 +2348 2703 0 +2348 2704 1 +2349 2350 1 +2349 2373 0 +2350 2374 0 +2351 2352 0 +2351 2375 1 +2352 2376 0 +2353 1989 1 +2353 1990 1 +2353 1993 1 +2353 2351 0 +2353 2352 1 +2353 2357 1 +2353 2358 1 +2353 2359 1 +2353 2360 0 +2353 2365 1 +2353 2366 1 +2353 2367 0 +2353 2368 1 +2354 1989 -1 +2354 1990 1 +2354 1994 0 +2354 2351 0 +2354 2352 0 +2354 2353 1 +2354 2357 0 +2354 2358 0 +2354 2359 1 +2354 2360 0 +2354 2365 -1 +2354 2366 1 +2354 2367 1 +2354 2368 0 +2355 1989 -1 +2355 1990 0 +2355 1995 0 +2355 2341 1 +2355 2342 0 +2355 2343 0 +2355 2344 0 +2355 2351 0 +2355 2352 1 +2355 2357 0 +2355 2358 1 +2355 2359 1 +2355 2360 0 +2356 1989 0 +2356 1990 -1 +2356 1996 0 +2356 2341 0 +2356 2342 -1 +2356 2343 1 +2356 2344 0 +2356 2351 -1 +2356 2352 0 +2356 2355 0 +2356 2357 0 +2356 2358 0 +2356 2359 -1 +2356 2360 -1 +2357 2358 0 +2357 2381 0 +2358 2382 1 +2359 2360 1 +2359 2383 1 +2360 2384 1 +2361 2001 0 +2361 2357 1 +2361 2358 0 +2361 2365 0 +2361 2366 1 +2361 2367 -1 +2361 2368 0 +2361 2373 0 +2361 2374 0 +2361 2375 1 +2361 2376 1 +2361 2719 1 +2361 2720 1 +2362 2002 1 +2362 2357 1 +2362 2358 0 +2362 2361 0 +2362 2365 0 +2362 2366 0 +2362 2367 1 +2362 2368 1 +2362 2373 1 +2362 2374 1 +2362 2375 1 +2362 2376 1 +2362 2719 1 +2362 2720 1 +2363 2003 1 +2363 2349 0 +2363 2350 1 +2363 2351 0 +2363 2352 1 +2363 2357 1 +2363 2358 1 +2363 2365 1 +2363 2366 -1 +2363 2367 1 +2363 2368 0 +2363 2719 1 +2363 2720 1 +2364 2004 0 +2364 2349 -1 +2364 2350 0 +2364 2351 0 +2364 2352 1 +2364 2357 1 +2364 2358 0 +2364 2363 1 +2364 2365 -1 +2364 2366 1 +2364 2367 0 +2364 2368 0 +2364 2719 1 +2364 2720 0 +2365 2366 0 +2365 2389 1 +2366 2390 0 +2367 2368 1 +2367 2391 0 +2368 2392 1 +2369 2009 1 +2369 2365 0 +2369 2366 1 +2369 2373 1 +2369 2374 -1 +2369 2375 1 +2369 2376 1 +2369 2727 -1 +2369 2728 0 +2369 2741 0 +2369 2742 0 +2369 2743 1 +2369 2744 1 +2370 2010 1 +2370 2365 1 +2370 2366 1 +2370 2369 0 +2370 2373 0 +2370 2374 1 +2370 2375 0 +2370 2376 1 +2370 2727 0 +2370 2728 1 +2370 2741 1 +2370 2742 0 +2370 2743 0 +2370 2744 -1 +2371 2011 0 +2371 2365 0 +2371 2366 1 +2371 2373 0 +2371 2374 0 +2371 2375 1 +2371 2376 1 +2371 2717 0 +2371 2718 1 +2371 2719 0 +2371 2720 1 +2371 2727 1 +2371 2728 1 +2372 2012 -1 +2372 2365 0 +2372 2366 1 +2372 2371 1 +2372 2373 0 +2372 2374 1 +2372 2375 0 +2372 2376 0 +2372 2717 0 +2372 2718 0 +2372 2719 1 +2372 2720 0 +2372 2727 0 +2372 2728 1 +2373 2374 1 +2373 2397 0 +2374 2398 1 +2375 2376 0 +2375 2399 1 +2376 2400 -1 +2377 2013 1 +2377 2014 0 +2377 2017 1 +2377 2375 1 +2377 2376 0 +2377 2381 1 +2377 2382 0 +2377 2383 1 +2377 2384 0 +2377 2389 0 +2377 2390 1 +2377 2391 1 +2377 2392 1 +2378 2013 1 +2378 2014 1 +2378 2018 1 +2378 2375 0 +2378 2376 1 +2378 2377 1 +2378 2381 1 +2378 2382 0 +2378 2383 0 +2378 2384 1 +2378 2389 1 +2378 2390 0 +2378 2391 0 +2378 2392 1 +2379 2013 1 +2379 2014 1 +2379 2019 1 +2379 2365 0 +2379 2366 1 +2379 2367 0 +2379 2368 1 +2379 2375 1 +2379 2376 0 +2379 2381 1 +2379 2382 0 +2379 2383 0 +2379 2384 0 +2380 2013 0 +2380 2014 0 +2380 2020 1 +2380 2365 1 +2380 2366 1 +2380 2367 0 +2380 2368 0 +2380 2375 0 +2380 2376 -1 +2380 2379 0 +2380 2381 0 +2380 2382 0 +2380 2383 0 +2380 2384 -1 +2381 2382 0 +2381 2405 0 +2382 2406 1 +2383 2384 0 +2383 2407 1 +2384 2408 -1 +2385 2025 1 +2385 2381 1 +2385 2382 1 +2385 2389 1 +2385 2390 -1 +2385 2391 -1 +2385 2392 1 +2385 2397 0 +2385 2398 0 +2385 2399 0 +2385 2400 1 +2385 2743 1 +2385 2744 0 +2386 2026 1 +2386 2381 0 +2386 2382 0 +2386 2385 0 +2386 2389 1 +2386 2390 0 +2386 2391 0 +2386 2392 0 +2386 2397 1 +2386 2398 1 +2386 2399 1 +2386 2400 1 +2386 2743 1 +2386 2744 0 +2387 2027 0 +2387 2373 0 +2387 2374 1 +2387 2375 0 +2387 2376 1 +2387 2381 1 +2387 2382 0 +2387 2389 0 +2387 2390 1 +2387 2391 1 +2387 2392 1 +2387 2743 0 +2387 2744 1 +2388 2028 -1 +2388 2373 1 +2388 2374 1 +2388 2375 0 +2388 2376 1 +2388 2381 0 +2388 2382 1 +2388 2387 1 +2388 2389 1 +2388 2390 0 +2388 2391 1 +2388 2392 1 +2388 2743 1 +2388 2744 1 +2389 2390 0 +2389 2413 0 +2390 2414 -1 +2391 2392 1 +2391 2415 1 +2392 2416 1 +2393 2033 0 +2393 2389 1 +2393 2390 -1 +2393 2397 -1 +2393 2398 1 +2393 2399 1 +2393 2400 0 +2393 2751 -1 +2393 2752 0 +2393 2765 -1 +2393 2766 0 +2393 2767 0 +2393 2768 1 +2394 2034 1 +2394 2389 1 +2394 2390 0 +2394 2393 0 +2394 2397 1 +2394 2398 1 +2394 2399 -1 +2394 2400 -1 +2394 2751 1 +2394 2752 1 +2394 2765 -1 +2394 2766 -1 +2394 2767 1 +2394 2768 0 +2395 2035 -1 +2395 2389 0 +2395 2390 0 +2395 2397 1 +2395 2398 -1 +2395 2399 0 +2395 2400 1 +2395 2741 1 +2395 2742 1 +2395 2743 1 +2395 2744 0 +2395 2751 1 +2395 2752 0 +2396 2036 1 +2396 2389 1 +2396 2390 0 +2396 2395 1 +2396 2397 -1 +2396 2398 1 +2396 2399 1 +2396 2400 1 +2396 2741 -1 +2396 2742 1 +2396 2743 0 +2396 2744 0 +2396 2751 0 +2396 2752 0 +2397 2398 -1 +2397 2421 1 +2398 2422 0 +2399 2400 0 +2399 2423 1 +2400 2424 1 +2401 2037 0 +2401 2038 -1 +2401 2041 0 +2401 2399 0 +2401 2400 1 +2401 2405 1 +2401 2406 0 +2401 2407 -1 +2401 2408 0 +2401 2413 -1 +2401 2414 0 +2401 2415 -1 +2401 2416 0 +2402 2037 0 +2402 2038 0 +2402 2042 1 +2402 2399 1 +2402 2400 0 +2402 2401 1 +2402 2405 0 +2402 2406 -1 +2402 2407 1 +2402 2408 0 +2402 2413 1 +2402 2414 1 +2402 2415 1 +2402 2416 1 +2403 2037 0 +2403 2038 1 +2403 2043 0 +2403 2389 -1 +2403 2390 1 +2403 2391 1 +2403 2392 1 +2403 2399 0 +2403 2400 -1 +2403 2405 0 +2403 2406 -1 +2403 2407 1 +2403 2408 0 +2404 2037 0 +2404 2038 0 +2404 2044 0 +2404 2389 1 +2404 2390 1 +2404 2391 -1 +2404 2392 0 +2404 2399 -1 +2404 2400 1 +2404 2403 0 +2404 2405 1 +2404 2406 1 +2404 2407 1 +2404 2408 1 +2405 2406 0 +2405 2429 0 +2406 2430 0 +2407 2408 0 +2407 2431 1 +2408 2432 1 +2409 2049 1 +2409 2405 -1 +2409 2406 -1 +2409 2413 1 +2409 2414 1 +2409 2415 1 +2409 2416 0 +2409 2421 1 +2409 2422 0 +2409 2423 1 +2409 2424 -1 +2409 2767 1 +2409 2768 0 +2410 2050 1 +2410 2405 1 +2410 2406 1 +2410 2409 1 +2410 2413 0 +2410 2414 1 +2410 2415 -1 +2410 2416 -1 +2410 2421 1 +2410 2422 1 +2410 2423 -1 +2410 2424 -1 +2410 2767 0 +2410 2768 0 +2411 2051 1 +2411 2397 -1 +2411 2398 1 +2411 2399 1 +2411 2400 0 +2411 2405 -1 +2411 2406 1 +2411 2413 -1 +2411 2414 0 +2411 2415 1 +2411 2416 0 +2411 2767 1 +2411 2768 0 +2412 2052 -1 +2412 2397 1 +2412 2398 -1 +2412 2399 -1 +2412 2400 1 +2412 2405 1 +2412 2406 -1 +2412 2411 1 +2412 2413 0 +2412 2414 1 +2412 2415 1 +2412 2416 1 +2412 2767 0 +2412 2768 1 +2413 2414 1 +2413 2437 1 +2414 2438 0 +2415 2416 1 +2415 2439 0 +2416 2440 1 +2417 2057 -1 +2417 2413 1 +2417 2414 0 +2417 2421 0 +2417 2422 1 +2417 2423 1 +2417 2424 1 +2417 2775 1 +2417 2776 0 +2417 2789 1 +2417 2790 1 +2417 2791 0 +2417 2792 1 +2418 2058 0 +2418 2413 1 +2418 2414 1 +2418 2417 0 +2418 2421 1 +2418 2422 1 +2418 2423 0 +2418 2424 1 +2418 2775 0 +2418 2776 1 +2418 2789 1 +2418 2790 0 +2418 2791 1 +2418 2792 -1 +2419 2059 1 +2419 2413 1 +2419 2414 0 +2419 2421 0 +2419 2422 1 +2419 2423 1 +2419 2424 1 +2419 2765 1 +2419 2766 0 +2419 2767 1 +2419 2768 1 +2419 2775 0 +2419 2776 1 +2420 2060 0 +2420 2413 0 +2420 2414 1 +2420 2419 1 +2420 2421 1 +2420 2422 0 +2420 2423 1 +2420 2424 1 +2420 2765 0 +2420 2766 -1 +2420 2767 1 +2420 2768 -1 +2420 2775 1 +2420 2776 1 +2421 2422 -1 +2421 2445 0 +2422 2446 1 +2423 2424 1 +2423 2447 -1 +2424 2448 1 +2425 2061 1 +2425 2062 1 +2425 2065 0 +2425 2423 1 +2425 2424 0 +2425 2429 0 +2425 2430 -1 +2425 2431 1 +2425 2432 1 +2425 2437 -1 +2425 2438 0 +2425 2439 0 +2425 2440 1 +2426 2061 -1 +2426 2062 1 +2426 2066 1 +2426 2423 0 +2426 2424 0 +2426 2425 -1 +2426 2429 1 +2426 2430 1 +2426 2431 0 +2426 2432 1 +2426 2437 1 +2426 2438 1 +2426 2439 1 +2426 2440 -1 +2427 2061 1 +2427 2062 1 +2427 2067 1 +2427 2413 0 +2427 2414 1 +2427 2415 1 +2427 2416 1 +2427 2423 0 +2427 2424 1 +2427 2429 -1 +2427 2430 0 +2427 2431 1 +2427 2432 1 +2428 2061 -1 +2428 2062 1 +2428 2068 -1 +2428 2413 1 +2428 2414 1 +2428 2415 1 +2428 2416 0 +2428 2423 1 +2428 2424 0 +2428 2427 0 +2428 2429 0 +2428 2430 1 +2428 2431 0 +2428 2432 1 +2429 2430 1 +2429 2453 0 +2430 2454 0 +2431 2432 1 +2431 2455 1 +2432 2456 -1 +2433 2073 1 +2433 2429 1 +2433 2430 0 +2433 2437 1 +2433 2438 -1 +2433 2439 0 +2433 2440 1 +2433 2445 0 +2433 2446 0 +2433 2447 1 +2433 2448 1 +2433 2791 0 +2433 2792 1 +2434 2074 1 +2434 2429 1 +2434 2430 1 +2434 2433 1 +2434 2437 0 +2434 2438 1 +2434 2439 0 +2434 2440 0 +2434 2445 -1 +2434 2446 1 +2434 2447 1 +2434 2448 -1 +2434 2791 1 +2434 2792 1 +2435 2075 0 +2435 2421 1 +2435 2422 1 +2435 2423 0 +2435 2424 0 +2435 2429 0 +2435 2430 0 +2435 2437 1 +2435 2438 1 +2435 2439 1 +2435 2440 1 +2435 2791 1 +2435 2792 1 +2436 2076 1 +2436 2421 1 +2436 2422 -1 +2436 2423 0 +2436 2424 1 +2436 2429 -1 +2436 2430 1 +2436 2435 -1 +2436 2437 1 +2436 2438 0 +2436 2439 0 +2436 2440 1 +2436 2791 1 +2436 2792 1 +2437 2438 1 +2437 2461 1 +2438 2462 0 +2439 2440 -1 +2439 2463 0 +2440 2464 1 +2441 2081 -1 +2441 2437 1 +2441 2438 1 +2441 2445 1 +2441 2446 0 +2441 2447 1 +2441 2448 1 +2441 2799 1 +2441 2800 1 +2441 2813 1 +2441 2814 1 +2441 2815 0 +2441 2816 0 +2442 2082 1 +2442 2437 1 +2442 2438 1 +2442 2441 1 +2442 2445 0 +2442 2446 1 +2442 2447 1 +2442 2448 0 +2442 2799 1 +2442 2800 0 +2442 2813 0 +2442 2814 -1 +2442 2815 1 +2442 2816 0 +2443 2083 0 +2443 2437 1 +2443 2438 1 +2443 2445 1 +2443 2446 1 +2443 2447 0 +2443 2448 0 +2443 2789 -1 +2443 2790 1 +2443 2791 -1 +2443 2792 0 +2443 2799 1 +2443 2800 -1 +2444 2084 1 +2444 2437 0 +2444 2438 1 +2444 2443 1 +2444 2445 -1 +2444 2446 1 +2444 2447 1 +2444 2448 -1 +2444 2789 1 +2444 2790 -1 +2444 2791 -1 +2444 2792 0 +2444 2799 1 +2444 2800 1 +2445 2446 0 +2445 2469 0 +2446 2470 0 +2447 2448 1 +2447 2471 -1 +2448 2472 0 +2449 2085 1 +2449 2086 1 +2449 2089 0 +2449 2447 1 +2449 2448 -1 +2449 2453 1 +2449 2454 1 +2449 2455 1 +2449 2456 0 +2449 2461 1 +2449 2462 1 +2449 2463 0 +2449 2464 1 +2450 2085 0 +2450 2086 0 +2450 2090 -1 +2450 2447 1 +2450 2448 0 +2450 2449 1 +2450 2453 0 +2450 2454 1 +2450 2455 1 +2450 2456 0 +2450 2461 1 +2450 2462 1 +2450 2463 1 +2450 2464 1 +2451 2085 1 +2451 2086 0 +2451 2091 1 +2451 2437 1 +2451 2438 0 +2451 2439 1 +2451 2440 0 +2451 2447 1 +2451 2448 1 +2451 2453 1 +2451 2454 1 +2451 2455 1 +2451 2456 1 +2452 2085 0 +2452 2086 0 +2452 2092 0 +2452 2437 1 +2452 2438 1 +2452 2439 1 +2452 2440 0 +2452 2447 0 +2452 2448 -1 +2452 2451 1 +2452 2453 1 +2452 2454 1 +2452 2455 1 +2452 2456 1 +2453 2454 1 +2453 2477 1 +2454 2478 0 +2455 2456 0 +2455 2479 0 +2456 2480 1 +2457 2097 1 +2457 2453 0 +2457 2454 1 +2457 2461 1 +2457 2462 0 +2457 2463 1 +2457 2464 1 +2457 2469 1 +2457 2470 1 +2457 2471 1 +2457 2472 0 +2457 2815 1 +2457 2816 1 +2458 2098 0 +2458 2453 1 +2458 2454 -1 +2458 2457 1 +2458 2461 -1 +2458 2462 1 +2458 2463 1 +2458 2464 0 +2458 2469 1 +2458 2470 1 +2458 2471 1 +2458 2472 1 +2458 2815 1 +2458 2816 1 +2459 2099 1 +2459 2445 -1 +2459 2446 1 +2459 2447 0 +2459 2448 1 +2459 2453 0 +2459 2454 0 +2459 2461 1 +2459 2462 1 +2459 2463 0 +2459 2464 1 +2459 2815 -1 +2459 2816 1 +2460 2100 1 +2460 2445 1 +2460 2446 1 +2460 2447 0 +2460 2448 0 +2460 2453 1 +2460 2454 0 +2460 2459 -1 +2460 2461 -1 +2460 2462 1 +2460 2463 1 +2460 2464 0 +2460 2815 0 +2460 2816 0 +2461 2462 0 +2461 2485 1 +2462 2486 -1 +2463 2464 1 +2463 2487 1 +2464 2488 0 +2465 2105 -1 +2465 2461 0 +2465 2462 1 +2465 2469 1 +2465 2470 1 +2465 2471 0 +2465 2472 1 +2465 2823 -1 +2465 2824 1 +2465 2837 -1 +2465 2838 -1 +2465 2839 1 +2465 2840 0 +2466 2106 0 +2466 2461 -1 +2466 2462 1 +2466 2465 0 +2466 2469 0 +2466 2470 1 +2466 2471 1 +2466 2472 0 +2466 2823 1 +2466 2824 1 +2466 2837 0 +2466 2838 -1 +2466 2839 -1 +2466 2840 0 +2467 2107 1 +2467 2461 1 +2467 2462 0 +2467 2469 0 +2467 2470 1 +2467 2471 0 +2467 2472 1 +2467 2813 0 +2467 2814 1 +2467 2815 1 +2467 2816 1 +2467 2823 -1 +2467 2824 1 +2468 2108 0 +2468 2461 1 +2468 2462 1 +2468 2467 0 +2468 2469 0 +2468 2470 1 +2468 2471 0 +2468 2472 1 +2468 2813 1 +2468 2814 1 +2468 2815 -1 +2468 2816 0 +2468 2823 1 +2468 2824 1 +2469 2470 1 +2469 2493 1 +2470 2494 0 +2471 2472 1 +2471 2495 1 +2472 2496 0 +2473 2109 1 +2473 2110 0 +2473 2113 1 +2473 2471 1 +2473 2472 1 +2473 2477 1 +2473 2478 1 +2473 2479 0 +2473 2480 0 +2473 2485 0 +2473 2486 1 +2473 2487 1 +2473 2488 1 +2474 2109 1 +2474 2110 1 +2474 2114 0 +2474 2471 1 +2474 2472 1 +2474 2473 0 +2474 2477 1 +2474 2478 1 +2474 2479 1 +2474 2480 0 +2474 2485 1 +2474 2486 1 +2474 2487 1 +2474 2488 0 +2475 2109 1 +2475 2110 0 +2475 2115 1 +2475 2461 1 +2475 2462 1 +2475 2463 1 +2475 2464 1 +2475 2471 1 +2475 2472 1 +2475 2477 0 +2475 2478 1 +2475 2479 1 +2475 2480 0 +2476 2109 1 +2476 2110 -1 +2476 2116 0 +2476 2461 1 +2476 2462 0 +2476 2463 1 +2476 2464 -1 +2476 2471 1 +2476 2472 0 +2476 2475 0 +2476 2477 0 +2476 2478 0 +2476 2479 1 +2476 2480 0 +2477 2478 0 +2477 2501 -1 +2478 2502 -1 +2479 2480 0 +2479 2503 0 +2480 2504 0 +2481 2121 -1 +2481 2477 -1 +2481 2478 0 +2481 2485 1 +2481 2486 1 +2481 2487 1 +2481 2488 0 +2481 2493 1 +2481 2494 0 +2481 2495 1 +2481 2496 1 +2481 2839 1 +2481 2840 1 +2482 2122 0 +2482 2477 1 +2482 2478 1 +2482 2481 0 +2482 2485 1 +2482 2486 1 +2482 2487 1 +2482 2488 0 +2482 2493 0 +2482 2494 0 +2482 2495 0 +2482 2496 1 +2482 2839 0 +2482 2840 -1 +2483 2123 0 +2483 2469 1 +2483 2470 0 +2483 2471 0 +2483 2472 1 +2483 2477 0 +2483 2478 1 +2483 2485 1 +2483 2486 1 +2483 2487 1 +2483 2488 0 +2483 2839 1 +2483 2840 1 +2484 2124 1 +2484 2469 1 +2484 2470 0 +2484 2471 0 +2484 2472 1 +2484 2477 1 +2484 2478 1 +2484 2483 1 +2484 2485 1 +2484 2486 1 +2484 2487 1 +2484 2488 0 +2484 2839 0 +2484 2840 0 +2485 2486 1 +2485 2509 0 +2486 2510 1 +2487 2488 1 +2487 2511 1 +2488 2512 0 +2489 2129 1 +2489 2485 0 +2489 2486 0 +2489 2493 0 +2489 2494 1 +2489 2495 1 +2489 2496 0 +2489 2847 1 +2489 2848 0 +2489 2861 1 +2489 2862 0 +2489 2863 0 +2489 2864 1 +2490 2130 0 +2490 2485 0 +2490 2486 1 +2490 2489 1 +2490 2493 0 +2490 2494 1 +2490 2495 1 +2490 2496 1 +2490 2847 1 +2490 2848 1 +2490 2861 0 +2490 2862 0 +2490 2863 0 +2490 2864 0 +2491 2131 0 +2491 2485 1 +2491 2486 -1 +2491 2493 -1 +2491 2494 1 +2491 2495 1 +2491 2496 0 +2491 2837 -1 +2491 2838 1 +2491 2839 0 +2491 2840 0 +2491 2847 1 +2491 2848 1 +2492 2132 0 +2492 2485 0 +2492 2486 0 +2492 2491 0 +2492 2493 1 +2492 2494 1 +2492 2495 1 +2492 2496 1 +2492 2837 0 +2492 2838 0 +2492 2839 1 +2492 2840 1 +2492 2847 0 +2492 2848 1 +2493 2494 1 +2493 2517 0 +2494 2518 0 +2495 2496 1 +2495 2519 1 +2496 2520 1 +2497 2133 1 +2497 2134 1 +2497 2137 1 +2497 2495 -1 +2497 2496 1 +2497 2501 0 +2497 2502 0 +2497 2503 -1 +2497 2504 0 +2497 2509 0 +2497 2510 0 +2497 2511 1 +2497 2512 1 +2498 2133 0 +2498 2134 1 +2498 2138 1 +2498 2495 1 +2498 2496 1 +2498 2497 -1 +2498 2501 0 +2498 2502 1 +2498 2503 1 +2498 2504 1 +2498 2509 1 +2498 2510 0 +2498 2511 1 +2498 2512 0 +2499 2133 1 +2499 2134 1 +2499 2139 1 +2499 2485 0 +2499 2486 1 +2499 2487 1 +2499 2488 0 +2499 2495 1 +2499 2496 1 +2499 2501 0 +2499 2502 -1 +2499 2503 1 +2499 2504 1 +2500 2133 1 +2500 2134 0 +2500 2140 1 +2500 2485 0 +2500 2486 -1 +2500 2487 1 +2500 2488 -1 +2500 2495 1 +2500 2496 0 +2500 2499 0 +2500 2501 1 +2500 2502 0 +2500 2503 1 +2500 2504 1 +2501 2502 1 +2503 2504 0 +2505 2145 1 +2505 2501 1 +2505 2502 1 +2505 2509 1 +2505 2510 1 +2505 2511 1 +2505 2512 1 +2505 2517 1 +2505 2518 0 +2505 2519 0 +2505 2520 1 +2505 2863 1 +2505 2864 1 +2506 2146 1 +2506 2501 1 +2506 2502 0 +2506 2505 -1 +2506 2509 0 +2506 2510 1 +2506 2511 1 +2506 2512 1 +2506 2517 0 +2506 2518 1 +2506 2519 0 +2506 2520 1 +2506 2863 1 +2506 2864 1 +2507 2147 0 +2507 2493 0 +2507 2494 0 +2507 2495 1 +2507 2496 1 +2507 2501 1 +2507 2502 1 +2507 2509 0 +2507 2510 0 +2507 2511 -1 +2507 2512 0 +2507 2863 1 +2507 2864 0 +2508 2148 0 +2508 2493 0 +2508 2494 1 +2508 2495 1 +2508 2496 1 +2508 2501 -1 +2508 2502 -1 +2508 2507 0 +2508 2509 0 +2508 2510 1 +2508 2511 1 +2508 2512 0 +2508 2863 1 +2508 2864 1 +2509 2510 1 +2511 2512 1 +2513 2153 0 +2513 2509 1 +2513 2510 0 +2513 2517 1 +2513 2518 1 +2513 2519 0 +2513 2520 1 +2513 2871 0 +2513 2872 1 +2514 2154 0 +2514 2509 1 +2514 2510 1 +2514 2513 1 +2514 2517 -1 +2514 2518 1 +2514 2519 1 +2514 2520 0 +2514 2871 0 +2514 2872 0 +2515 2155 0 +2515 2509 -1 +2515 2510 1 +2515 2517 1 +2515 2518 1 +2515 2519 1 +2515 2520 1 +2515 2861 1 +2515 2862 1 +2515 2863 -1 +2515 2864 0 +2515 2871 0 +2515 2872 1 +2516 2156 0 +2516 2509 -1 +2516 2510 -1 +2516 2515 0 +2516 2517 0 +2516 2518 0 +2516 2519 0 +2516 2520 0 +2516 2861 1 +2516 2862 -1 +2516 2863 1 +2516 2864 1 +2516 2871 1 +2516 2872 1 +2517 2518 1 +2519 2520 1 +2521 2161 1 +2521 2525 1 +2521 2526 1 +2521 2527 1 +2521 2528 1 +2521 2533 1 +2521 2534 1 +2521 2535 0 +2521 2536 0 +2522 2162 -1 +2522 2521 1 +2522 2525 1 +2522 2526 0 +2522 2527 1 +2522 2528 0 +2522 2533 -1 +2522 2534 1 +2522 2535 0 +2522 2536 1 +2523 2163 -1 +2523 2525 1 +2523 2526 0 +2523 2527 0 +2523 2528 0 +2524 2164 -1 +2524 2523 -1 +2524 2525 0 +2524 2526 -1 +2524 2527 0 +2524 2528 1 +2525 2526 1 +2525 2549 -1 +2526 2550 0 +2527 2528 -1 +2527 2551 1 +2528 2552 0 +2529 2169 1 +2529 2525 0 +2529 2526 0 +2529 2533 -1 +2529 2534 0 +2529 2535 0 +2529 2536 1 +2529 2541 0 +2529 2542 1 +2529 2543 0 +2529 2544 1 +2529 2887 1 +2529 2888 0 +2530 2170 0 +2530 2525 1 +2530 2526 0 +2530 2529 1 +2530 2533 1 +2530 2534 1 +2530 2535 1 +2530 2536 0 +2530 2541 -1 +2530 2542 1 +2530 2543 1 +2530 2544 0 +2530 2887 0 +2530 2888 -1 +2531 2171 1 +2531 2525 0 +2531 2526 -1 +2531 2533 -1 +2531 2534 1 +2531 2535 0 +2531 2536 1 +2531 2887 1 +2531 2888 0 +2532 2172 1 +2532 2525 0 +2532 2526 1 +2532 2531 1 +2532 2533 -1 +2532 2534 1 +2532 2535 1 +2532 2536 1 +2532 2887 1 +2532 2888 0 +2533 2534 1 +2533 2557 1 +2534 2558 -1 +2535 2536 0 +2535 2559 0 +2536 2560 1 +2537 2177 1 +2537 2533 1 +2537 2534 1 +2537 2541 -1 +2537 2542 0 +2537 2543 0 +2537 2544 0 +2537 2895 0 +2537 2896 0 +2537 2909 0 +2537 2910 1 +2537 2911 0 +2537 2912 1 +2538 2178 0 +2538 2533 0 +2538 2534 1 +2538 2537 0 +2538 2541 1 +2538 2542 1 +2538 2543 0 +2538 2544 -1 +2538 2895 1 +2538 2896 0 +2538 2909 1 +2538 2910 1 +2538 2911 1 +2538 2912 1 +2539 2179 0 +2539 2533 1 +2539 2534 1 +2539 2541 1 +2539 2542 1 +2539 2543 0 +2539 2544 1 +2539 2885 1 +2539 2886 0 +2539 2887 0 +2539 2888 1 +2539 2895 0 +2539 2896 0 +2540 2180 0 +2540 2533 0 +2540 2534 -1 +2540 2539 1 +2540 2541 1 +2540 2542 0 +2540 2543 1 +2540 2544 0 +2540 2885 1 +2540 2886 1 +2540 2887 0 +2540 2888 1 +2540 2895 0 +2540 2896 0 +2541 2542 0 +2541 2565 1 +2542 2566 1 +2543 2544 0 +2543 2567 1 +2544 2568 1 +2545 2181 1 +2545 2182 0 +2545 2185 0 +2545 2543 0 +2545 2544 1 +2545 2549 1 +2545 2550 -1 +2545 2551 1 +2545 2552 -1 +2545 2557 1 +2545 2558 0 +2545 2559 0 +2545 2560 1 +2546 2181 1 +2546 2182 1 +2546 2186 1 +2546 2543 0 +2546 2544 1 +2546 2545 1 +2546 2549 0 +2546 2550 -1 +2546 2551 1 +2546 2552 0 +2546 2557 0 +2546 2558 0 +2546 2559 1 +2546 2560 1 +2547 2181 -1 +2547 2182 1 +2547 2187 -1 +2547 2533 1 +2547 2534 1 +2547 2535 -1 +2547 2536 -1 +2547 2543 1 +2547 2544 0 +2547 2549 0 +2547 2550 1 +2547 2551 1 +2547 2552 -1 +2548 2181 1 +2548 2182 1 +2548 2188 1 +2548 2533 0 +2548 2534 1 +2548 2535 0 +2548 2536 0 +2548 2543 1 +2548 2544 -1 +2548 2547 0 +2548 2549 1 +2548 2550 1 +2548 2551 1 +2548 2552 0 +2549 2550 1 +2549 2573 0 +2550 2574 1 +2551 2552 1 +2551 2575 0 +2552 2576 1 +2553 2193 1 +2553 2549 0 +2553 2550 0 +2553 2557 -1 +2553 2558 0 +2553 2559 1 +2553 2560 0 +2553 2565 1 +2553 2566 1 +2553 2567 1 +2553 2568 1 +2553 2911 1 +2553 2912 0 +2554 2194 0 +2554 2549 1 +2554 2550 1 +2554 2553 0 +2554 2557 0 +2554 2558 1 +2554 2559 0 +2554 2560 1 +2554 2565 1 +2554 2566 0 +2554 2567 0 +2554 2568 0 +2554 2911 0 +2554 2912 1 +2555 2195 1 +2555 2541 1 +2555 2542 1 +2555 2543 1 +2555 2544 1 +2555 2549 0 +2555 2550 0 +2555 2557 0 +2555 2558 1 +2555 2559 1 +2555 2560 1 +2555 2911 0 +2555 2912 0 +2556 2196 1 +2556 2541 1 +2556 2542 1 +2556 2543 -1 +2556 2544 1 +2556 2549 1 +2556 2550 1 +2556 2555 1 +2556 2557 -1 +2556 2558 1 +2556 2559 1 +2556 2560 1 +2556 2911 1 +2556 2912 0 +2557 2558 0 +2557 2581 0 +2558 2582 0 +2559 2560 1 +2559 2583 0 +2560 2584 0 +2561 2201 1 +2561 2557 1 +2561 2558 0 +2561 2565 1 +2561 2566 1 +2561 2567 0 +2561 2568 0 +2561 2919 1 +2561 2920 1 +2561 2933 1 +2561 2934 1 +2561 2935 0 +2561 2936 0 +2562 2202 1 +2562 2557 0 +2562 2558 1 +2562 2561 1 +2562 2565 1 +2562 2566 -1 +2562 2567 0 +2562 2568 0 +2562 2919 1 +2562 2920 -1 +2562 2933 1 +2562 2934 1 +2562 2935 1 +2562 2936 1 +2563 2203 1 +2563 2557 -1 +2563 2558 1 +2563 2565 1 +2563 2566 1 +2563 2567 0 +2563 2568 0 +2563 2909 1 +2563 2910 1 +2563 2911 1 +2563 2912 1 +2563 2919 0 +2563 2920 1 +2564 2204 -1 +2564 2557 1 +2564 2558 1 +2564 2563 0 +2564 2565 1 +2564 2566 1 +2564 2567 1 +2564 2568 0 +2564 2909 1 +2564 2910 0 +2564 2911 -1 +2564 2912 1 +2564 2919 1 +2564 2920 1 +2565 2566 -1 +2565 2589 0 +2566 2590 1 +2567 2568 1 +2567 2591 0 +2568 2592 1 +2569 2205 1 +2569 2206 0 +2569 2209 1 +2569 2567 1 +2569 2568 -1 +2569 2573 1 +2569 2574 1 +2569 2575 -1 +2569 2576 0 +2569 2581 0 +2569 2582 1 +2569 2583 1 +2569 2584 0 +2570 2205 1 +2570 2206 0 +2570 2210 0 +2570 2567 1 +2570 2568 -1 +2570 2569 0 +2570 2573 0 +2570 2574 1 +2570 2575 0 +2570 2576 1 +2570 2581 1 +2570 2582 0 +2570 2583 1 +2570 2584 1 +2571 2205 0 +2571 2206 1 +2571 2211 -1 +2571 2557 0 +2571 2558 -1 +2571 2559 0 +2571 2560 0 +2571 2567 1 +2571 2568 1 +2571 2573 1 +2571 2574 0 +2571 2575 0 +2571 2576 0 +2572 2205 -1 +2572 2206 1 +2572 2212 1 +2572 2557 0 +2572 2558 1 +2572 2559 0 +2572 2560 0 +2572 2567 1 +2572 2568 1 +2572 2571 0 +2572 2573 0 +2572 2574 1 +2572 2575 0 +2572 2576 1 +2573 2574 0 +2573 2597 1 +2574 2598 0 +2575 2576 -1 +2575 2599 0 +2576 2600 1 +2577 2217 -1 +2577 2573 1 +2577 2574 -1 +2577 2581 -1 +2577 2582 1 +2577 2583 1 +2577 2584 1 +2577 2589 0 +2577 2590 0 +2577 2591 0 +2577 2592 0 +2577 2935 0 +2577 2936 0 +2578 2218 1 +2578 2573 0 +2578 2574 -1 +2578 2577 0 +2578 2581 1 +2578 2582 1 +2578 2583 -1 +2578 2584 1 +2578 2589 0 +2578 2590 0 +2578 2591 0 +2578 2592 1 +2578 2935 0 +2578 2936 0 +2579 2219 0 +2579 2565 0 +2579 2566 0 +2579 2567 1 +2579 2568 0 +2579 2573 1 +2579 2574 -1 +2579 2581 1 +2579 2582 0 +2579 2583 1 +2579 2584 1 +2579 2935 -1 +2579 2936 0 +2580 2220 1 +2580 2565 0 +2580 2566 0 +2580 2567 0 +2580 2568 1 +2580 2573 0 +2580 2574 1 +2580 2579 1 +2580 2581 0 +2580 2582 1 +2580 2583 1 +2580 2584 1 +2580 2935 -1 +2580 2936 0 +2581 2582 1 +2581 2605 -1 +2582 2606 0 +2583 2584 0 +2583 2607 1 +2584 2608 0 +2585 2225 1 +2585 2581 0 +2585 2582 1 +2585 2589 0 +2585 2590 0 +2585 2591 1 +2585 2592 1 +2585 2943 0 +2585 2944 -1 +2585 2957 0 +2585 2958 1 +2585 2959 1 +2585 2960 1 +2586 2226 1 +2586 2581 0 +2586 2582 0 +2586 2585 -1 +2586 2589 0 +2586 2590 1 +2586 2591 1 +2586 2592 0 +2586 2943 0 +2586 2944 1 +2586 2957 1 +2586 2958 -1 +2586 2959 0 +2586 2960 1 +2587 2227 0 +2587 2581 0 +2587 2582 1 +2587 2589 1 +2587 2590 1 +2587 2591 0 +2587 2592 1 +2587 2933 -1 +2587 2934 1 +2587 2935 0 +2587 2936 0 +2587 2943 0 +2587 2944 0 +2588 2228 1 +2588 2581 0 +2588 2582 1 +2588 2587 0 +2588 2589 1 +2588 2590 1 +2588 2591 1 +2588 2592 1 +2588 2933 -1 +2588 2934 -1 +2588 2935 1 +2588 2936 1 +2588 2943 1 +2588 2944 1 +2589 2590 1 +2589 2613 1 +2590 2614 1 +2591 2592 0 +2591 2615 0 +2592 2616 1 +2593 2230 1 +2593 2233 1 +2593 2591 1 +2593 2592 0 +2593 2597 0 +2593 2598 0 +2593 2599 0 +2593 2600 0 +2593 2605 1 +2593 2606 1 +2593 2607 1 +2593 2608 0 +2594 2230 -1 +2594 2234 1 +2594 2591 1 +2594 2592 0 +2594 2593 1 +2594 2597 -1 +2594 2598 1 +2594 2599 0 +2594 2600 0 +2594 2605 0 +2594 2606 0 +2594 2607 1 +2594 2608 1 +2595 2230 0 +2595 2235 1 +2595 2581 1 +2595 2582 0 +2595 2583 1 +2595 2584 1 +2595 2591 1 +2595 2592 1 +2595 2597 0 +2595 2598 1 +2595 2599 0 +2595 2600 1 +2596 2230 1 +2596 2236 0 +2596 2581 0 +2596 2582 1 +2596 2583 1 +2596 2584 1 +2596 2591 1 +2596 2592 1 +2596 2595 1 +2596 2597 1 +2596 2598 1 +2596 2599 0 +2596 2600 1 +2597 2598 0 +2597 2621 0 +2598 2622 0 +2599 2600 1 +2599 2623 0 +2600 2624 -1 +2601 2241 0 +2601 2597 1 +2601 2598 0 +2601 2605 -1 +2601 2606 1 +2601 2607 1 +2601 2608 0 +2601 2613 1 +2601 2614 1 +2601 2615 1 +2601 2616 1 +2601 2959 -1 +2601 2960 0 +2602 2242 1 +2602 2597 1 +2602 2598 -1 +2602 2601 -1 +2602 2605 1 +2602 2606 1 +2602 2607 1 +2602 2608 0 +2602 2613 0 +2602 2614 1 +2602 2615 -1 +2602 2616 1 +2602 2959 1 +2602 2960 1 +2603 2243 0 +2603 2589 -1 +2603 2590 0 +2603 2591 1 +2603 2592 -1 +2603 2597 0 +2603 2598 0 +2603 2605 1 +2603 2606 0 +2603 2607 1 +2603 2608 -1 +2603 2959 0 +2603 2960 0 +2604 2244 1 +2604 2589 1 +2604 2590 1 +2604 2591 1 +2604 2592 1 +2604 2597 1 +2604 2598 1 +2604 2603 1 +2604 2605 0 +2604 2606 1 +2604 2607 1 +2604 2608 1 +2604 2959 0 +2604 2960 1 +2605 2606 0 +2605 2629 1 +2606 2630 1 +2607 2608 1 +2607 2631 1 +2608 2632 1 +2609 2249 1 +2609 2605 1 +2609 2606 0 +2609 2613 0 +2609 2614 1 +2609 2615 1 +2609 2616 1 +2609 2967 0 +2609 2968 0 +2609 2981 1 +2609 2982 0 +2609 2983 1 +2609 2984 1 +2610 2250 0 +2610 2605 -1 +2610 2606 0 +2610 2609 1 +2610 2613 1 +2610 2614 1 +2610 2615 1 +2610 2616 1 +2610 2967 1 +2610 2968 1 +2610 2981 1 +2610 2982 -1 +2610 2983 1 +2610 2984 1 +2611 2251 0 +2611 2605 1 +2611 2606 1 +2611 2613 0 +2611 2614 1 +2611 2615 0 +2611 2616 1 +2611 2957 1 +2611 2958 -1 +2611 2959 1 +2611 2960 0 +2611 2967 1 +2611 2968 -1 +2612 2252 1 +2612 2605 0 +2612 2606 0 +2612 2611 1 +2612 2613 1 +2612 2614 1 +2612 2615 0 +2612 2616 1 +2612 2957 1 +2612 2958 1 +2612 2959 1 +2612 2960 0 +2612 2967 0 +2612 2968 1 +2613 2614 1 +2613 2637 0 +2614 2638 1 +2615 2616 1 +2615 2639 -1 +2616 2640 1 +2617 2253 -1 +2617 2254 -1 +2617 2257 0 +2617 2615 1 +2617 2616 0 +2617 2621 0 +2617 2622 0 +2617 2623 0 +2617 2624 1 +2617 2629 1 +2617 2630 0 +2617 2631 1 +2617 2632 1 +2618 2253 1 +2618 2254 0 +2618 2258 0 +2618 2615 1 +2618 2616 0 +2618 2617 1 +2618 2621 0 +2618 2622 0 +2618 2623 0 +2618 2624 1 +2618 2629 1 +2618 2630 1 +2618 2631 0 +2618 2632 0 +2619 2253 0 +2619 2254 0 +2619 2259 0 +2619 2605 0 +2619 2606 1 +2619 2607 -1 +2619 2608 1 +2619 2615 -1 +2619 2616 1 +2619 2621 0 +2619 2622 1 +2619 2623 0 +2619 2624 1 +2620 2253 1 +2620 2254 0 +2620 2260 -1 +2620 2605 1 +2620 2606 1 +2620 2607 1 +2620 2608 1 +2620 2615 1 +2620 2616 0 +2620 2619 -1 +2620 2621 1 +2620 2622 0 +2620 2623 1 +2620 2624 0 +2621 2622 1 +2621 2645 1 +2622 2646 -1 +2623 2624 -1 +2623 2647 0 +2624 2648 0 +2625 2265 -1 +2625 2621 1 +2625 2622 -1 +2625 2629 1 +2625 2630 1 +2625 2631 1 +2625 2632 0 +2625 2637 1 +2625 2638 1 +2625 2639 1 +2625 2640 1 +2625 2983 0 +2625 2984 1 +2626 2266 0 +2626 2621 1 +2626 2622 1 +2626 2625 -1 +2626 2629 0 +2626 2630 0 +2626 2631 1 +2626 2632 0 +2626 2637 0 +2626 2638 0 +2626 2639 1 +2626 2640 0 +2626 2983 1 +2626 2984 1 +2627 2267 1 +2627 2613 1 +2627 2614 1 +2627 2615 1 +2627 2616 -1 +2627 2621 1 +2627 2622 0 +2627 2629 0 +2627 2630 0 +2627 2631 1 +2627 2632 1 +2627 2983 0 +2627 2984 1 +2628 2268 1 +2628 2613 1 +2628 2614 -1 +2628 2615 0 +2628 2616 1 +2628 2621 1 +2628 2622 1 +2628 2627 1 +2628 2629 1 +2628 2630 0 +2628 2631 1 +2628 2632 1 +2628 2983 1 +2628 2984 -1 +2629 2630 1 +2629 2653 1 +2630 2654 0 +2631 2632 1 +2631 2655 -1 +2632 2656 1 +2633 2273 1 +2633 2629 -1 +2633 2630 1 +2633 2637 1 +2633 2638 1 +2633 2639 1 +2633 2640 0 +2633 2991 1 +2633 2992 1 +2633 3005 1 +2633 3006 0 +2633 3007 0 +2633 3008 1 +2634 2274 1 +2634 2629 0 +2634 2630 1 +2634 2633 1 +2634 2637 1 +2634 2638 -1 +2634 2639 0 +2634 2640 1 +2634 2991 0 +2634 2992 0 +2634 3005 0 +2634 3006 1 +2634 3007 0 +2634 3008 1 +2635 2275 0 +2635 2629 1 +2635 2630 1 +2635 2637 1 +2635 2638 1 +2635 2639 0 +2635 2640 1 +2635 2981 0 +2635 2982 1 +2635 2983 0 +2635 2984 -1 +2635 2991 1 +2635 2992 1 +2636 2276 0 +2636 2629 1 +2636 2630 1 +2636 2635 0 +2636 2637 1 +2636 2638 -1 +2636 2639 -1 +2636 2640 1 +2636 2981 1 +2636 2982 1 +2636 2983 0 +2636 2984 0 +2636 2991 0 +2636 2992 0 +2637 2638 0 +2637 2661 0 +2638 2662 0 +2639 2640 1 +2639 2663 0 +2640 2664 0 +2641 2277 1 +2641 2278 1 +2641 2281 1 +2641 2639 -1 +2641 2640 1 +2641 2645 0 +2641 2646 -1 +2641 2647 1 +2641 2648 0 +2641 2653 1 +2641 2654 0 +2641 2655 1 +2641 2656 1 +2642 2277 1 +2642 2278 0 +2642 2282 0 +2642 2639 1 +2642 2640 1 +2642 2641 0 +2642 2645 -1 +2642 2646 0 +2642 2647 0 +2642 2648 1 +2642 2653 -1 +2642 2654 1 +2642 2655 0 +2642 2656 1 +2643 2277 1 +2643 2278 0 +2643 2283 1 +2643 2629 1 +2643 2630 0 +2643 2631 1 +2643 2632 1 +2643 2639 -1 +2643 2640 -1 +2643 2645 1 +2643 2646 -1 +2643 2647 1 +2643 2648 1 +2644 2277 0 +2644 2278 0 +2644 2284 0 +2644 2629 1 +2644 2630 -1 +2644 2631 1 +2644 2632 -1 +2644 2639 1 +2644 2640 -1 +2644 2643 1 +2644 2645 1 +2644 2646 1 +2644 2647 0 +2644 2648 0 +2645 2646 1 +2645 2669 0 +2646 2670 1 +2647 2648 1 +2647 2671 1 +2648 2672 1 +2649 2289 1 +2649 2645 1 +2649 2646 1 +2649 2653 1 +2649 2654 1 +2649 2655 1 +2649 2656 1 +2649 2661 0 +2649 2662 0 +2649 2663 1 +2649 2664 -1 +2649 3007 1 +2649 3008 0 +2650 2290 1 +2650 2645 -1 +2650 2646 1 +2650 2649 1 +2650 2653 1 +2650 2654 1 +2650 2655 1 +2650 2656 -1 +2650 2661 1 +2650 2662 1 +2650 2663 1 +2650 2664 1 +2650 3007 0 +2650 3008 0 +2651 2291 1 +2651 2637 1 +2651 2638 0 +2651 2639 0 +2651 2640 1 +2651 2645 1 +2651 2646 1 +2651 2653 -1 +2651 2654 0 +2651 2655 -1 +2651 2656 1 +2651 3007 0 +2651 3008 -1 +2652 2292 1 +2652 2637 0 +2652 2638 0 +2652 2639 0 +2652 2640 -1 +2652 2645 1 +2652 2646 -1 +2652 2651 1 +2652 2653 1 +2652 2654 1 +2652 2655 1 +2652 2656 1 +2652 3007 1 +2652 3008 1 +2653 2654 1 +2653 2677 1 +2654 2678 1 +2655 2656 1 +2655 2679 1 +2656 2680 1 +2657 2297 1 +2657 2653 0 +2657 2654 1 +2657 2661 1 +2657 2662 1 +2657 2663 1 +2657 2664 0 +2657 3015 1 +2657 3016 1 +2657 3029 1 +2657 3030 1 +2657 3031 1 +2657 3032 1 +2658 2298 1 +2658 2653 1 +2658 2654 0 +2658 2657 1 +2658 2661 1 +2658 2662 0 +2658 2663 1 +2658 2664 0 +2658 3015 1 +2658 3016 1 +2658 3029 1 +2658 3030 1 +2658 3031 1 +2658 3032 1 +2659 2299 1 +2659 2653 0 +2659 2654 0 +2659 2661 1 +2659 2662 1 +2659 2663 0 +2659 2664 0 +2659 3005 1 +2659 3006 1 +2659 3007 0 +2659 3008 0 +2659 3015 0 +2659 3016 1 +2660 2300 -1 +2660 2653 0 +2660 2654 0 +2660 2659 0 +2660 2661 1 +2660 2662 1 +2660 2663 1 +2660 2664 1 +2660 3005 0 +2660 3006 1 +2660 3007 0 +2660 3008 0 +2660 3015 1 +2660 3016 0 +2661 2662 1 +2661 2685 1 +2662 2686 -1 +2663 2664 1 +2663 2687 1 +2664 2688 1 +2665 2301 1 +2665 2302 0 +2665 2305 1 +2665 2663 1 +2665 2664 0 +2665 2669 0 +2665 2670 0 +2665 2671 0 +2665 2672 1 +2665 2677 -1 +2665 2678 1 +2665 2679 1 +2665 2680 1 +2666 2301 1 +2666 2302 1 +2666 2306 1 +2666 2663 1 +2666 2664 1 +2666 2665 1 +2666 2669 1 +2666 2670 0 +2666 2671 0 +2666 2672 1 +2666 2677 0 +2666 2678 1 +2666 2679 0 +2666 2680 1 +2667 2301 1 +2667 2302 0 +2667 2307 0 +2667 2653 0 +2667 2654 -1 +2667 2655 0 +2667 2656 0 +2667 2663 1 +2667 2664 1 +2667 2669 1 +2667 2670 1 +2667 2671 1 +2667 2672 1 +2668 2301 -1 +2668 2302 -1 +2668 2308 0 +2668 2653 1 +2668 2654 1 +2668 2655 0 +2668 2656 0 +2668 2663 -1 +2668 2664 1 +2668 2667 0 +2668 2669 1 +2668 2670 1 +2668 2671 1 +2668 2672 1 +2669 2670 0 +2669 2693 1 +2670 2694 1 +2671 2672 1 +2671 2695 0 +2672 2696 0 +2673 2313 0 +2673 2669 1 +2673 2670 0 +2673 2677 1 +2673 2678 0 +2673 2679 0 +2673 2680 0 +2673 2685 1 +2673 2686 1 +2673 2687 1 +2673 2688 1 +2673 3031 -1 +2673 3032 -1 +2674 2314 -1 +2674 2669 0 +2674 2670 0 +2674 2673 1 +2674 2677 -1 +2674 2678 0 +2674 2679 1 +2674 2680 1 +2674 2685 1 +2674 2686 1 +2674 2687 0 +2674 2688 0 +2674 3031 1 +2674 3032 1 +2675 2315 1 +2675 2661 -1 +2675 2662 1 +2675 2663 1 +2675 2664 -1 +2675 2669 0 +2675 2670 -1 +2675 2677 1 +2675 2678 1 +2675 2679 1 +2675 2680 0 +2675 3031 1 +2675 3032 0 +2676 2316 0 +2676 2661 0 +2676 2662 1 +2676 2663 1 +2676 2664 -1 +2676 2669 1 +2676 2670 0 +2676 2675 0 +2676 2677 1 +2676 2678 0 +2676 2679 0 +2676 2680 1 +2676 3031 1 +2676 3032 1 +2677 2678 1 +2677 2701 1 +2678 2702 1 +2679 2680 0 +2679 2703 0 +2680 2704 0 +2681 2321 0 +2681 2677 0 +2681 2678 0 +2681 2685 1 +2681 2686 1 +2681 2687 -1 +2681 2688 0 +2681 3039 1 +2681 3040 1 +2681 3053 1 +2681 3054 1 +2681 3055 -1 +2681 3056 0 +2682 2322 0 +2682 2677 0 +2682 2678 1 +2682 2681 0 +2682 2685 1 +2682 2686 1 +2682 2687 0 +2682 2688 1 +2682 3039 0 +2682 3040 0 +2682 3053 0 +2682 3054 1 +2682 3055 1 +2682 3056 1 +2683 2323 0 +2683 2677 1 +2683 2678 0 +2683 2685 1 +2683 2686 -1 +2683 2687 0 +2683 2688 -1 +2683 3029 1 +2683 3030 0 +2683 3031 0 +2683 3032 1 +2683 3039 0 +2683 3040 1 +2684 2324 1 +2684 2677 -1 +2684 2678 1 +2684 2683 0 +2684 2685 1 +2684 2686 1 +2684 2687 0 +2684 2688 1 +2684 3029 1 +2684 3030 1 +2684 3031 1 +2684 3032 1 +2684 3039 1 +2684 3040 0 +2685 2686 0 +2685 2709 1 +2686 2710 0 +2687 2688 1 +2687 2711 1 +2688 2712 1 +2689 2325 0 +2689 2326 1 +2689 2329 1 +2689 2687 0 +2689 2688 1 +2689 2693 1 +2689 2694 0 +2689 2695 1 +2689 2696 0 +2689 2701 1 +2689 2702 0 +2689 2703 0 +2689 2704 1 +2690 2325 1 +2690 2326 1 +2690 2330 1 +2690 2687 0 +2690 2688 0 +2690 2689 1 +2690 2693 1 +2690 2694 0 +2690 2695 0 +2690 2696 1 +2690 2701 1 +2690 2702 1 +2690 2703 -1 +2690 2704 1 +2691 2325 0 +2691 2326 0 +2691 2331 0 +2691 2677 -1 +2691 2678 1 +2691 2679 -1 +2691 2680 1 +2691 2687 0 +2691 2688 1 +2691 2693 0 +2691 2694 0 +2691 2695 1 +2691 2696 0 +2692 2325 0 +2692 2326 0 +2692 2332 1 +2692 2677 0 +2692 2678 0 +2692 2679 0 +2692 2680 0 +2692 2687 0 +2692 2688 1 +2692 2691 0 +2692 2693 1 +2692 2694 0 +2692 2695 0 +2692 2696 0 +2693 2694 1 +2693 2717 -1 +2694 2718 0 +2695 2696 1 +2695 2719 0 +2696 2720 1 +2697 2337 1 +2697 2693 1 +2697 2694 1 +2697 2701 0 +2697 2702 1 +2697 2703 -1 +2697 2704 1 +2697 2709 1 +2697 2710 1 +2697 2711 0 +2697 2712 0 +2697 3055 -1 +2697 3056 0 +2698 2338 1 +2698 2693 0 +2698 2694 0 +2698 2697 -1 +2698 2701 0 +2698 2702 0 +2698 2703 1 +2698 2704 1 +2698 2709 1 +2698 2710 1 +2698 2711 1 +2698 2712 0 +2698 3055 1 +2698 3056 1 +2699 2339 1 +2699 2685 1 +2699 2686 1 +2699 2687 0 +2699 2688 0 +2699 2693 0 +2699 2694 -1 +2699 2701 1 +2699 2702 1 +2699 2703 0 +2699 2704 1 +2699 3055 1 +2699 3056 1 +2700 2340 1 +2700 2685 1 +2700 2686 1 +2700 2687 1 +2700 2688 0 +2700 2693 1 +2700 2694 1 +2700 2699 0 +2700 2701 0 +2700 2702 1 +2700 2703 1 +2700 2704 1 +2700 3055 1 +2700 3056 0 +2701 2702 0 +2701 2725 0 +2702 2726 1 +2703 2704 0 +2703 2727 0 +2704 2728 1 +2705 2345 0 +2705 2701 1 +2705 2702 1 +2705 2709 1 +2705 2710 -1 +2705 2711 1 +2705 2712 1 +2705 3063 0 +2705 3064 1 +2705 3077 1 +2705 3078 1 +2705 3079 -1 +2705 3080 1 +2706 2346 1 +2706 2701 -1 +2706 2702 0 +2706 2705 1 +2706 2709 1 +2706 2710 1 +2706 2711 1 +2706 2712 0 +2706 3063 0 +2706 3064 1 +2706 3077 1 +2706 3078 1 +2706 3079 1 +2706 3080 1 +2707 2347 -1 +2707 2701 0 +2707 2702 0 +2707 2709 1 +2707 2710 1 +2707 2711 1 +2707 2712 1 +2707 3053 0 +2707 3054 1 +2707 3055 -1 +2707 3056 0 +2707 3063 1 +2707 3064 0 +2708 2348 0 +2708 2701 0 +2708 2702 0 +2708 2707 1 +2708 2709 1 +2708 2710 -1 +2708 2711 1 +2708 2712 1 +2708 3053 -1 +2708 3054 -1 +2708 3055 0 +2708 3056 0 +2708 3063 1 +2708 3064 0 +2709 2710 0 +2709 2733 1 +2710 2734 0 +2711 2712 -1 +2711 2735 1 +2712 2736 0 +2713 2349 0 +2713 2350 1 +2713 2353 0 +2713 2711 0 +2713 2712 0 +2713 2717 1 +2713 2718 -1 +2713 2719 1 +2713 2720 1 +2713 2725 0 +2713 2726 -1 +2713 2727 0 +2713 2728 1 +2714 2349 1 +2714 2350 0 +2714 2354 1 +2714 2711 1 +2714 2712 0 +2714 2713 -1 +2714 2717 1 +2714 2718 1 +2714 2719 0 +2714 2720 0 +2714 2725 1 +2714 2726 1 +2714 2727 1 +2714 2728 0 +2715 2349 1 +2715 2350 -1 +2715 2355 1 +2715 2701 0 +2715 2702 0 +2715 2703 1 +2715 2704 -1 +2715 2711 1 +2715 2712 1 +2715 2717 1 +2715 2718 1 +2715 2719 1 +2715 2720 1 +2716 2349 0 +2716 2350 1 +2716 2356 1 +2716 2701 0 +2716 2702 1 +2716 2703 1 +2716 2704 0 +2716 2711 1 +2716 2712 1 +2716 2715 1 +2716 2717 0 +2716 2718 0 +2716 2719 0 +2716 2720 1 +2717 2718 0 +2717 2741 0 +2718 2742 0 +2719 2720 1 +2719 2743 1 +2720 2744 0 +2721 2361 1 +2721 2717 1 +2721 2718 -1 +2721 2725 0 +2721 2726 1 +2721 2727 1 +2721 2728 1 +2721 2733 0 +2721 2734 1 +2721 2735 1 +2721 2736 1 +2721 3079 1 +2721 3080 0 +2722 2362 1 +2722 2717 1 +2722 2718 0 +2722 2721 -1 +2722 2725 1 +2722 2726 1 +2722 2727 1 +2722 2728 1 +2722 2733 1 +2722 2734 1 +2722 2735 0 +2722 2736 0 +2722 3079 1 +2722 3080 -1 +2723 2363 1 +2723 2709 1 +2723 2710 1 +2723 2711 1 +2723 2712 0 +2723 2717 1 +2723 2718 1 +2723 2725 0 +2723 2726 1 +2723 2727 -1 +2723 2728 0 +2723 3079 1 +2723 3080 0 +2724 2364 0 +2724 2709 -1 +2724 2710 1 +2724 2711 0 +2724 2712 0 +2724 2717 1 +2724 2718 1 +2724 2723 0 +2724 2725 0 +2724 2726 1 +2724 2727 1 +2724 2728 1 +2724 3079 1 +2724 3080 0 +2725 2726 1 +2725 2749 0 +2726 2750 0 +2727 2728 1 +2727 2751 1 +2728 2752 0 +2729 2369 0 +2729 2725 1 +2729 2726 -1 +2729 2733 0 +2729 2734 1 +2729 2735 1 +2729 2736 0 +2729 3087 0 +2729 3088 0 +2729 3101 1 +2729 3102 -1 +2729 3103 1 +2729 3104 1 +2730 2370 1 +2730 2725 1 +2730 2726 1 +2730 2729 -1 +2730 2733 1 +2730 2734 1 +2730 2735 1 +2730 2736 0 +2730 3087 0 +2730 3088 -1 +2730 3101 0 +2730 3102 1 +2730 3103 -1 +2730 3104 0 +2731 2371 -1 +2731 2725 1 +2731 2726 1 +2731 2733 1 +2731 2734 1 +2731 2735 0 +2731 2736 1 +2731 3077 1 +2731 3078 1 +2731 3079 1 +2731 3080 1 +2731 3087 0 +2731 3088 0 +2732 2372 1 +2732 2725 1 +2732 2726 1 +2732 2731 1 +2732 2733 1 +2732 2734 -1 +2732 2735 0 +2732 2736 0 +2732 3077 1 +2732 3078 -1 +2732 3079 0 +2732 3080 1 +2732 3087 -1 +2732 3088 1 +2733 2734 1 +2733 2757 0 +2734 2758 1 +2735 2736 1 +2735 2759 0 +2736 2760 1 +2737 2373 1 +2737 2374 1 +2737 2377 1 +2737 2735 1 +2737 2736 1 +2737 2741 0 +2737 2742 0 +2737 2743 1 +2737 2744 1 +2737 2749 0 +2737 2750 0 +2737 2751 1 +2737 2752 0 +2738 2373 1 +2738 2374 1 +2738 2378 -1 +2738 2735 -1 +2738 2736 1 +2738 2737 0 +2738 2741 1 +2738 2742 1 +2738 2743 0 +2738 2744 1 +2738 2749 1 +2738 2750 1 +2738 2751 1 +2738 2752 0 +2739 2373 0 +2739 2374 0 +2739 2379 0 +2739 2725 0 +2739 2726 1 +2739 2727 1 +2739 2728 0 +2739 2735 1 +2739 2736 0 +2739 2741 1 +2739 2742 1 +2739 2743 0 +2739 2744 0 +2740 2373 0 +2740 2374 1 +2740 2380 1 +2740 2725 0 +2740 2726 0 +2740 2727 1 +2740 2728 1 +2740 2735 0 +2740 2736 0 +2740 2739 1 +2740 2741 1 +2740 2742 1 +2740 2743 1 +2740 2744 0 +2741 2742 0 +2741 2765 1 +2742 2766 0 +2743 2744 0 +2743 2767 1 +2744 2768 1 +2745 2385 1 +2745 2741 -1 +2745 2742 0 +2745 2749 -1 +2745 2750 1 +2745 2751 1 +2745 2752 1 +2745 2757 1 +2745 2758 1 +2745 2759 0 +2745 2760 0 +2745 3103 1 +2745 3104 0 +2746 2386 0 +2746 2741 0 +2746 2742 1 +2746 2745 0 +2746 2749 1 +2746 2750 0 +2746 2751 0 +2746 2752 1 +2746 2757 1 +2746 2758 1 +2746 2759 1 +2746 2760 1 +2746 3103 1 +2746 3104 1 +2747 2387 1 +2747 2733 0 +2747 2734 1 +2747 2735 -1 +2747 2736 1 +2747 2741 1 +2747 2742 0 +2747 2749 0 +2747 2750 1 +2747 2751 1 +2747 2752 1 +2747 3103 1 +2747 3104 1 +2748 2388 1 +2748 2733 1 +2748 2734 1 +2748 2735 -1 +2748 2736 0 +2748 2741 0 +2748 2742 1 +2748 2747 1 +2748 2749 1 +2748 2750 1 +2748 2751 1 +2748 2752 1 +2748 3103 1 +2748 3104 1 +2749 2750 0 +2749 2773 1 +2750 2774 1 +2751 2752 1 +2751 2775 0 +2752 2776 0 +2753 2393 1 +2753 2749 1 +2753 2750 0 +2753 2757 1 +2753 2758 1 +2753 2759 0 +2753 2760 1 +2753 3111 1 +2753 3112 1 +2753 3125 1 +2753 3126 1 +2753 3127 1 +2753 3128 1 +2754 2394 1 +2754 2749 1 +2754 2750 1 +2754 2753 0 +2754 2757 0 +2754 2758 0 +2754 2759 1 +2754 2760 0 +2754 3111 0 +2754 3112 1 +2754 3125 1 +2754 3126 -1 +2754 3127 1 +2754 3128 0 +2755 2395 0 +2755 2749 1 +2755 2750 -1 +2755 2757 1 +2755 2758 1 +2755 2759 -1 +2755 2760 1 +2755 3101 1 +2755 3102 1 +2755 3103 0 +2755 3104 -1 +2755 3111 1 +2755 3112 0 +2756 2396 -1 +2756 2749 1 +2756 2750 1 +2756 2755 1 +2756 2757 1 +2756 2758 0 +2756 2759 1 +2756 2760 0 +2756 3101 1 +2756 3102 1 +2756 3103 0 +2756 3104 -1 +2756 3111 0 +2756 3112 0 +2757 2758 1 +2757 2781 1 +2758 2782 0 +2759 2760 1 +2759 2783 -1 +2760 2784 0 +2761 2397 1 +2761 2398 1 +2761 2401 0 +2761 2759 0 +2761 2760 1 +2761 2765 0 +2761 2766 0 +2761 2767 1 +2761 2768 0 +2761 2773 1 +2761 2774 1 +2761 2775 0 +2761 2776 1 +2762 2397 1 +2762 2398 1 +2762 2402 1 +2762 2759 1 +2762 2760 0 +2762 2761 1 +2762 2765 0 +2762 2766 0 +2762 2767 1 +2762 2768 0 +2762 2773 1 +2762 2774 0 +2762 2775 1 +2762 2776 1 +2763 2397 0 +2763 2398 1 +2763 2403 1 +2763 2749 1 +2763 2750 1 +2763 2751 0 +2763 2752 0 +2763 2759 0 +2763 2760 1 +2763 2765 0 +2763 2766 1 +2763 2767 0 +2763 2768 0 +2764 2397 0 +2764 2398 0 +2764 2404 -1 +2764 2749 0 +2764 2750 -1 +2764 2751 1 +2764 2752 0 +2764 2759 1 +2764 2760 1 +2764 2763 1 +2764 2765 0 +2764 2766 -1 +2764 2767 -1 +2764 2768 0 +2765 2766 0 +2765 2789 1 +2766 2790 0 +2767 2768 1 +2767 2791 1 +2768 2792 1 +2769 2409 0 +2769 2765 -1 +2769 2766 0 +2769 2773 1 +2769 2774 -1 +2769 2775 1 +2769 2776 1 +2769 2781 0 +2769 2782 1 +2769 2783 1 +2769 2784 -1 +2769 3127 1 +2769 3128 1 +2770 2410 1 +2770 2765 0 +2770 2766 0 +2770 2769 0 +2770 2773 1 +2770 2774 0 +2770 2775 1 +2770 2776 0 +2770 2781 1 +2770 2782 1 +2770 2783 1 +2770 2784 -1 +2770 3127 1 +2770 3128 -1 +2771 2411 1 +2771 2757 1 +2771 2758 1 +2771 2759 1 +2771 2760 1 +2771 2765 1 +2771 2766 1 +2771 2773 1 +2771 2774 0 +2771 2775 1 +2771 2776 -1 +2771 3127 1 +2771 3128 1 +2772 2412 1 +2772 2757 -1 +2772 2758 1 +2772 2759 1 +2772 2760 -1 +2772 2765 -1 +2772 2766 0 +2772 2771 1 +2772 2773 -1 +2772 2774 0 +2772 2775 1 +2772 2776 1 +2772 3127 1 +2772 3128 1 +2773 2774 1 +2773 2797 1 +2774 2798 1 +2775 2776 1 +2775 2799 1 +2776 2800 0 +2777 2417 1 +2777 2773 1 +2777 2774 1 +2777 2782 1 +2777 2783 -1 +2777 2784 -1 +2777 3135 -1 +2777 3136 0 +2777 3149 0 +2777 3150 1 +2777 3151 -1 +2777 3152 1 +2778 2418 1 +2778 2773 1 +2778 2774 1 +2778 2777 0 +2778 2781 0 +2778 2782 0 +2778 2783 1 +2778 2784 0 +2778 3135 1 +2778 3136 0 +2778 3149 0 +2778 3150 0 +2778 3151 0 +2778 3152 1 +2779 2419 1 +2779 2773 1 +2779 2774 0 +2779 2781 0 +2779 2782 -1 +2779 2783 0 +2779 2784 1 +2779 3125 0 +2779 3126 1 +2779 3127 1 +2779 3128 1 +2779 3135 0 +2779 3136 0 +2780 2420 0 +2780 2773 0 +2780 2774 0 +2780 2779 1 +2780 2781 0 +2780 2782 -1 +2780 2783 1 +2780 2784 0 +2780 3125 1 +2780 3126 -1 +2780 3127 -1 +2780 3128 1 +2780 3135 0 +2780 3136 1 +2781 2782 0 +2781 2805 1 +2782 2806 0 +2783 2784 -1 +2783 2807 0 +2784 2808 0 +2785 2421 0 +2785 2422 0 +2785 2425 1 +2785 2783 0 +2785 2784 1 +2785 2789 0 +2785 2790 0 +2785 2791 0 +2785 2792 1 +2785 2797 -1 +2785 2798 1 +2785 2799 0 +2785 2800 -1 +2786 2421 1 +2786 2422 0 +2786 2426 1 +2786 2783 1 +2786 2784 0 +2786 2785 1 +2786 2789 0 +2786 2790 0 +2786 2791 0 +2786 2792 1 +2786 2797 0 +2786 2798 0 +2786 2799 -1 +2786 2800 0 +2787 2421 1 +2787 2422 1 +2787 2427 0 +2787 2773 1 +2787 2774 1 +2787 2775 0 +2787 2776 1 +2787 2783 -1 +2787 2784 1 +2787 2789 -1 +2787 2790 1 +2787 2791 1 +2787 2792 1 +2788 2421 1 +2788 2422 0 +2788 2428 1 +2788 2773 0 +2788 2774 1 +2788 2775 1 +2788 2776 0 +2788 2783 1 +2788 2784 -1 +2788 2787 -1 +2788 2789 0 +2788 2790 1 +2788 2791 1 +2788 2792 1 +2789 2790 1 +2789 2813 1 +2790 2814 1 +2791 2792 1 +2791 2815 0 +2792 2816 1 +2793 2433 1 +2793 2789 0 +2793 2790 1 +2793 2797 0 +2793 2798 0 +2793 2799 0 +2793 2800 1 +2793 2805 1 +2793 2806 0 +2793 2807 1 +2793 2808 0 +2793 3151 1 +2793 3152 1 +2794 2434 1 +2794 2789 1 +2794 2790 1 +2794 2793 1 +2794 2797 1 +2794 2798 1 +2794 2799 0 +2794 2800 0 +2794 2805 1 +2794 2806 0 +2794 2807 1 +2794 2808 0 +2794 3151 -1 +2794 3152 0 +2795 2435 1 +2795 2781 1 +2795 2782 0 +2795 2783 1 +2795 2784 1 +2795 2789 0 +2795 2790 1 +2795 2797 1 +2795 2798 0 +2795 2799 1 +2795 2800 0 +2795 3151 1 +2795 3152 0 +2796 2436 1 +2796 2781 0 +2796 2782 0 +2796 2783 0 +2796 2784 1 +2796 2789 0 +2796 2790 1 +2796 2795 1 +2796 2797 1 +2796 2798 -1 +2796 2799 -1 +2796 2800 -1 +2796 3151 0 +2796 3152 1 +2797 2798 0 +2797 2821 0 +2798 2822 1 +2799 2800 0 +2799 2823 1 +2800 2824 1 +2801 2441 1 +2801 2797 1 +2801 2798 1 +2801 2805 1 +2801 2806 1 +2801 2807 1 +2801 2808 1 +2801 3159 0 +2801 3160 1 +2801 3173 0 +2801 3174 1 +2801 3175 1 +2801 3176 0 +2802 2442 1 +2802 2797 1 +2802 2798 0 +2802 2801 0 +2802 2805 1 +2802 2806 1 +2802 2807 1 +2802 2808 1 +2802 3159 -1 +2802 3160 1 +2802 3173 1 +2802 3174 -1 +2802 3175 1 +2802 3176 1 +2803 2443 1 +2803 2797 1 +2803 2798 0 +2803 2805 -1 +2803 2806 1 +2803 2807 0 +2803 2808 1 +2803 3149 1 +2803 3150 1 +2803 3151 1 +2803 3152 0 +2803 3159 1 +2803 3160 1 +2804 2444 1 +2804 2797 1 +2804 2798 0 +2804 2803 1 +2804 2805 0 +2804 2806 0 +2804 2807 1 +2804 2808 -1 +2804 3149 1 +2804 3150 -1 +2804 3151 1 +2804 3152 0 +2804 3159 0 +2804 3160 1 +2805 2806 0 +2805 2829 1 +2806 2830 0 +2807 2808 1 +2807 2831 1 +2808 2832 1 +2809 2445 1 +2809 2446 0 +2809 2449 1 +2809 2807 1 +2809 2808 1 +2809 2813 0 +2809 2814 1 +2809 2815 1 +2809 2816 0 +2809 2821 0 +2809 2822 0 +2809 2823 0 +2809 2824 1 +2810 2445 1 +2810 2446 0 +2810 2450 0 +2810 2807 1 +2810 2808 1 +2810 2809 0 +2810 2813 1 +2810 2814 1 +2810 2815 0 +2810 2816 1 +2810 2821 -1 +2810 2822 1 +2810 2823 0 +2810 2824 1 +2811 2445 1 +2811 2446 0 +2811 2451 1 +2811 2797 1 +2811 2798 0 +2811 2799 1 +2811 2800 -1 +2811 2807 1 +2811 2808 1 +2811 2813 1 +2811 2814 1 +2811 2815 0 +2811 2816 -1 +2812 2445 1 +2812 2446 0 +2812 2452 1 +2812 2797 1 +2812 2798 1 +2812 2799 1 +2812 2800 1 +2812 2807 1 +2812 2808 1 +2812 2811 -1 +2812 2813 0 +2812 2814 -1 +2812 2815 1 +2812 2816 0 +2813 2814 0 +2813 2837 1 +2814 2838 1 +2815 2816 1 +2815 2839 0 +2816 2840 0 +2817 2457 1 +2817 2813 1 +2817 2814 0 +2817 2821 -1 +2817 2822 1 +2817 2823 1 +2817 2824 1 +2817 2829 1 +2817 2830 1 +2817 2831 1 +2817 2832 1 +2817 3175 -1 +2817 3176 0 +2818 2458 0 +2818 2813 1 +2818 2814 0 +2818 2817 -1 +2818 2821 1 +2818 2822 1 +2818 2823 1 +2818 2824 0 +2818 2829 1 +2818 2830 1 +2818 2831 1 +2818 2832 0 +2818 3175 1 +2818 3176 1 +2819 2459 0 +2819 2805 1 +2819 2806 1 +2819 2807 0 +2819 2808 1 +2819 2813 1 +2819 2814 1 +2819 2821 1 +2819 2822 -1 +2819 2823 1 +2819 2824 1 +2819 3175 0 +2819 3176 -1 +2820 2460 1 +2820 2805 1 +2820 2806 -1 +2820 2807 1 +2820 2808 1 +2820 2813 0 +2820 2814 1 +2820 2819 1 +2820 2821 -1 +2820 2822 -1 +2820 2823 0 +2820 2824 1 +2820 3175 0 +2820 3176 1 +2821 2822 1 +2821 2845 -1 +2822 2846 1 +2823 2824 1 +2823 2847 -1 +2824 2848 -1 +2825 2465 1 +2825 2821 -1 +2825 2822 1 +2825 2829 0 +2825 2830 1 +2825 2831 1 +2825 2832 0 +2825 3183 1 +2825 3184 1 +2825 3197 1 +2825 3198 0 +2825 3199 1 +2825 3200 1 +2826 2466 0 +2826 2821 0 +2826 2822 0 +2826 2825 1 +2826 2829 1 +2826 2830 1 +2826 2831 0 +2826 2832 -1 +2826 3183 1 +2826 3184 1 +2826 3197 -1 +2826 3198 0 +2826 3199 1 +2826 3200 1 +2827 2467 1 +2827 2821 -1 +2827 2822 1 +2827 2829 1 +2827 2830 0 +2827 2831 1 +2827 2832 0 +2827 3173 -1 +2827 3174 1 +2827 3175 1 +2827 3176 1 +2827 3183 1 +2827 3184 1 +2828 2468 1 +2828 2821 1 +2828 2822 1 +2828 2827 1 +2828 2829 0 +2828 2830 1 +2828 2831 0 +2828 2832 0 +2828 3173 1 +2828 3174 1 +2828 3175 0 +2828 3176 1 +2828 3183 1 +2828 3184 1 +2829 2830 1 +2829 2853 1 +2830 2854 1 +2831 2832 0 +2831 2855 0 +2832 2856 0 +2833 2469 1 +2833 2470 -1 +2833 2473 1 +2833 2831 0 +2833 2832 1 +2833 2837 1 +2833 2838 -1 +2833 2839 0 +2833 2840 0 +2833 2845 0 +2833 2846 1 +2833 2847 0 +2833 2848 0 +2834 2469 1 +2834 2470 0 +2834 2474 1 +2834 2831 0 +2834 2832 0 +2834 2833 0 +2834 2837 1 +2834 2838 1 +2834 2839 1 +2834 2840 0 +2834 2845 1 +2834 2846 1 +2834 2847 0 +2834 2848 0 +2835 2469 1 +2835 2470 1 +2835 2475 1 +2835 2821 0 +2835 2822 1 +2835 2823 0 +2835 2824 0 +2835 2831 1 +2835 2832 -1 +2835 2837 0 +2835 2838 1 +2835 2839 1 +2835 2840 0 +2836 2469 1 +2836 2470 0 +2836 2476 0 +2836 2821 0 +2836 2822 1 +2836 2823 1 +2836 2824 1 +2836 2831 1 +2836 2832 1 +2836 2835 1 +2836 2837 -1 +2836 2838 0 +2836 2839 0 +2836 2840 0 +2837 2838 1 +2837 2861 0 +2838 2862 0 +2839 2840 0 +2839 2863 0 +2840 2864 0 +2841 2481 1 +2841 2837 0 +2841 2838 1 +2841 2845 -1 +2841 2846 1 +2841 2847 0 +2841 2848 1 +2841 2853 1 +2841 2854 0 +2841 2855 0 +2841 2856 1 +2841 3199 0 +2841 3200 1 +2842 2482 1 +2842 2837 1 +2842 2838 1 +2842 2841 1 +2842 2845 0 +2842 2846 0 +2842 2847 1 +2842 2848 0 +2842 2853 0 +2842 2854 1 +2842 2855 1 +2842 2856 1 +2842 3199 0 +2842 3200 1 +2843 2483 0 +2843 2829 1 +2843 2830 1 +2843 2831 1 +2843 2832 1 +2843 2837 0 +2843 2838 0 +2843 2845 1 +2843 2846 0 +2843 2847 0 +2843 2848 1 +2843 3199 1 +2843 3200 1 +2844 2484 1 +2844 2829 1 +2844 2830 0 +2844 2831 1 +2844 2832 0 +2844 2837 0 +2844 2838 1 +2844 2843 0 +2844 2845 0 +2844 2846 0 +2844 2847 0 +2844 2848 0 +2844 3199 0 +2844 3200 0 +2845 2846 1 +2845 2869 0 +2846 2870 1 +2847 2848 0 +2847 2871 1 +2848 2872 1 +2849 2489 -1 +2849 2845 1 +2849 2846 -1 +2849 2853 1 +2849 2854 1 +2849 2855 0 +2849 2856 0 +2849 3207 0 +2849 3208 1 +2849 3221 0 +2849 3222 1 +2849 3223 0 +2849 3224 1 +2850 2490 1 +2850 2845 0 +2850 2846 0 +2850 2849 1 +2850 2853 0 +2850 2854 1 +2850 2855 0 +2850 2856 1 +2850 3207 -1 +2850 3208 0 +2850 3221 1 +2850 3222 1 +2850 3223 1 +2850 3224 0 +2851 2491 1 +2851 2845 0 +2851 2846 0 +2851 2853 1 +2851 2854 1 +2851 2855 1 +2851 2856 1 +2851 3197 1 +2851 3198 1 +2851 3199 0 +2851 3200 1 +2851 3207 -1 +2851 3208 1 +2852 2492 1 +2852 2845 1 +2852 2846 1 +2852 2851 0 +2852 2853 1 +2852 2854 1 +2852 2855 0 +2852 2856 1 +2852 3197 1 +2852 3198 0 +2852 3199 1 +2852 3200 1 +2852 3207 1 +2852 3208 1 +2853 2854 0 +2853 2877 1 +2854 2878 1 +2855 2856 0 +2855 2879 0 +2856 2880 1 +2857 2493 1 +2857 2494 1 +2857 2497 1 +2857 2855 1 +2857 2856 0 +2857 2861 0 +2857 2862 1 +2857 2863 0 +2857 2864 1 +2857 2869 1 +2857 2870 1 +2857 2871 1 +2857 2872 0 +2858 2493 0 +2858 2494 1 +2858 2498 0 +2858 2855 1 +2858 2856 1 +2858 2857 0 +2858 2861 0 +2858 2862 1 +2858 2863 0 +2858 2864 1 +2858 2869 1 +2858 2870 0 +2858 2871 1 +2858 2872 1 +2859 2493 1 +2859 2494 1 +2859 2499 0 +2859 2845 0 +2859 2846 1 +2859 2847 0 +2859 2848 0 +2859 2855 0 +2859 2856 0 +2859 2861 0 +2859 2862 1 +2859 2863 1 +2859 2864 1 +2860 2493 1 +2860 2494 0 +2860 2500 1 +2860 2845 0 +2860 2846 0 +2860 2847 0 +2860 2848 1 +2860 2855 0 +2860 2856 1 +2860 2859 1 +2860 2861 1 +2860 2862 0 +2860 2863 1 +2860 2864 0 +2861 2862 0 +2863 2864 0 +2865 2505 0 +2865 2861 1 +2865 2862 1 +2865 2869 1 +2865 2870 1 +2865 2871 -1 +2865 2872 1 +2865 2877 0 +2865 2878 1 +2865 2879 1 +2865 2880 1 +2865 3223 0 +2865 3224 1 +2866 2506 0 +2866 2861 1 +2866 2862 1 +2866 2865 1 +2866 2869 1 +2866 2870 1 +2866 2871 0 +2866 2872 1 +2866 2877 1 +2866 2878 1 +2866 2879 1 +2866 2880 -1 +2866 3223 -1 +2866 3224 1 +2867 2507 1 +2867 2853 1 +2867 2854 -1 +2867 2855 0 +2867 2856 0 +2867 2861 1 +2867 2862 1 +2867 2869 1 +2867 2870 0 +2867 2871 0 +2867 2872 1 +2867 3223 0 +2867 3224 1 +2868 2508 1 +2868 2853 1 +2868 2854 1 +2868 2855 1 +2868 2856 -1 +2868 2861 0 +2868 2862 0 +2868 2867 -1 +2868 2869 1 +2868 2870 0 +2868 2871 1 +2868 2872 1 +2868 3223 0 +2868 3224 -1 +2869 2870 0 +2871 2872 0 +2873 2513 1 +2873 2869 1 +2873 2870 1 +2873 2877 -1 +2873 2878 -1 +2873 2879 1 +2873 2880 0 +2873 3231 1 +2873 3232 1 +2874 2514 1 +2874 2869 0 +2874 2870 1 +2874 2873 0 +2874 2877 1 +2874 2878 0 +2874 2879 1 +2874 2880 1 +2874 3231 1 +2874 3232 1 +2875 2515 1 +2875 2869 0 +2875 2870 0 +2875 2877 1 +2875 2878 1 +2875 2879 0 +2875 2880 0 +2875 3221 0 +2875 3222 0 +2875 3223 1 +2875 3224 1 +2875 3231 0 +2875 3232 -1 +2876 2516 0 +2876 2869 -1 +2876 2870 0 +2876 2875 1 +2876 2877 0 +2876 2878 1 +2876 2879 1 +2876 2880 0 +2876 3221 1 +2876 3222 0 +2876 3223 0 +2876 3224 0 +2876 3231 0 +2876 3232 0 +2877 2878 -1 +2879 2880 1 +2881 2521 1 +2881 2885 1 +2881 2886 1 +2881 2887 1 +2881 2888 -1 +2881 2893 0 +2881 2894 1 +2881 2895 0 +2881 2896 0 +2882 2522 0 +2882 2881 0 +2882 2885 1 +2882 2886 0 +2882 2887 1 +2882 2888 1 +2882 2893 0 +2882 2894 0 +2882 2895 0 +2882 2896 0 +2883 2523 1 +2883 2885 1 +2883 2886 1 +2883 2887 1 +2883 2888 1 +2884 2524 1 +2884 2883 1 +2884 2885 1 +2884 2886 1 +2884 2887 1 +2884 2888 1 +2885 2886 1 +2885 2909 1 +2886 2910 0 +2887 2888 0 +2887 2911 1 +2888 2912 1 +2889 2529 0 +2889 2885 1 +2889 2886 1 +2889 2893 0 +2889 2894 0 +2889 2895 -1 +2889 2896 0 +2889 2901 1 +2889 2902 0 +2889 2903 0 +2889 2904 0 +2889 3247 1 +2889 3248 0 +2890 2530 -1 +2890 2885 1 +2890 2886 1 +2890 2889 1 +2890 2893 1 +2890 2894 1 +2890 2895 0 +2890 2896 0 +2890 2901 0 +2890 2902 1 +2890 2903 1 +2890 2904 0 +2890 3247 1 +2890 3248 0 +2891 2531 0 +2891 2885 0 +2891 2886 1 +2891 2893 -1 +2891 2894 -1 +2891 2895 1 +2891 2896 0 +2891 3247 -1 +2891 3248 1 +2892 2532 0 +2892 2885 1 +2892 2886 0 +2892 2891 1 +2892 2893 -1 +2892 2894 1 +2892 2895 0 +2892 2896 0 +2892 3247 1 +2892 3248 -1 +2893 2894 1 +2893 2917 1 +2894 2918 1 +2895 2896 0 +2895 2919 -1 +2896 2920 1 +2897 2537 0 +2897 2893 -1 +2897 2894 0 +2897 2901 0 +2897 2902 1 +2897 2903 1 +2897 2904 1 +2897 3255 0 +2897 3256 1 +2897 3269 0 +2897 3270 0 +2897 3271 0 +2897 3272 0 +2898 2538 1 +2898 2893 1 +2898 2894 1 +2898 2897 1 +2898 2901 0 +2898 2902 1 +2898 2903 1 +2898 2904 1 +2898 3255 0 +2898 3256 -1 +2898 3269 1 +2898 3270 1 +2898 3271 1 +2898 3272 1 +2899 2539 1 +2899 2893 1 +2899 2894 1 +2899 2901 1 +2899 2902 1 +2899 2903 1 +2899 2904 0 +2899 3245 0 +2899 3246 -1 +2899 3247 1 +2899 3248 1 +2899 3255 1 +2899 3256 1 +2900 2540 1 +2900 2893 0 +2900 2894 -1 +2900 2899 1 +2900 2901 0 +2900 2902 0 +2900 2903 -1 +2900 2904 0 +2900 3245 0 +2900 3246 1 +2900 3247 0 +2900 3248 1 +2900 3255 1 +2900 3256 0 +2901 2902 0 +2901 2925 1 +2902 2926 1 +2903 2904 -1 +2903 2927 0 +2904 2928 1 +2905 2541 1 +2905 2542 0 +2905 2545 1 +2905 2903 0 +2905 2904 1 +2905 2909 1 +2905 2910 -1 +2905 2911 1 +2905 2912 -1 +2905 2917 1 +2905 2918 1 +2905 2919 -1 +2905 2920 0 +2906 2541 0 +2906 2542 1 +2906 2546 0 +2906 2903 1 +2906 2904 0 +2906 2905 1 +2906 2909 0 +2906 2910 0 +2906 2911 1 +2906 2912 -1 +2906 2917 0 +2906 2918 1 +2906 2919 1 +2906 2920 0 +2907 2541 0 +2907 2542 0 +2907 2547 1 +2907 2893 -1 +2907 2894 1 +2907 2895 1 +2907 2896 0 +2907 2903 0 +2907 2904 0 +2907 2909 1 +2907 2910 1 +2907 2911 0 +2907 2912 1 +2908 2541 0 +2908 2542 0 +2908 2548 0 +2908 2893 1 +2908 2894 0 +2908 2895 1 +2908 2896 0 +2908 2903 0 +2908 2904 0 +2908 2907 1 +2908 2909 1 +2908 2910 -1 +2908 2911 1 +2908 2912 1 +2909 2910 0 +2909 2933 1 +2910 2934 1 +2911 2912 1 +2911 2935 1 +2912 2936 -1 +2913 2553 0 +2913 2909 1 +2913 2910 1 +2913 2917 1 +2913 2918 1 +2913 2919 -1 +2913 2920 1 +2913 2925 0 +2913 2926 1 +2913 2927 0 +2913 2928 1 +2913 3271 1 +2913 3272 1 +2914 2554 1 +2914 2909 1 +2914 2910 0 +2914 2913 1 +2914 2917 1 +2914 2918 1 +2914 2919 0 +2914 2920 0 +2914 2925 1 +2914 2926 0 +2914 2927 0 +2914 2928 1 +2914 3271 1 +2914 3272 -1 +2915 2555 1 +2915 2901 1 +2915 2902 1 +2915 2903 -1 +2915 2904 1 +2915 2909 1 +2915 2910 0 +2915 2917 0 +2915 2918 1 +2915 2919 0 +2915 2920 1 +2915 3271 1 +2915 3272 0 +2916 2556 1 +2916 2901 -1 +2916 2902 1 +2916 2903 1 +2916 2904 1 +2916 2909 -1 +2916 2910 1 +2916 2915 1 +2916 2917 1 +2916 2918 0 +2916 2919 0 +2916 2920 1 +2916 3271 -1 +2916 3272 1 +2917 2918 1 +2917 2941 -1 +2918 2942 0 +2919 2920 1 +2919 2943 0 +2920 2944 0 +2921 2561 1 +2921 2917 0 +2921 2918 0 +2921 2925 0 +2921 2926 0 +2921 2927 0 +2921 2928 0 +2921 3279 0 +2921 3280 0 +2921 3293 1 +2921 3294 -1 +2921 3295 1 +2921 3296 0 +2922 2562 1 +2922 2917 1 +2922 2918 1 +2922 2921 1 +2922 2925 1 +2922 2926 1 +2922 2927 1 +2922 2928 -1 +2922 3279 0 +2922 3280 0 +2922 3293 1 +2922 3294 1 +2922 3295 1 +2922 3296 0 +2923 2563 0 +2923 2917 1 +2923 2918 1 +2923 2925 0 +2923 2926 1 +2923 2927 1 +2923 2928 1 +2923 3269 1 +2923 3270 1 +2923 3271 0 +2923 3272 -1 +2923 3279 0 +2923 3280 -1 +2924 2564 1 +2924 2917 1 +2924 2918 -1 +2924 2923 1 +2924 2925 1 +2924 2926 1 +2924 2927 0 +2924 2928 0 +2924 3269 1 +2924 3270 0 +2924 3271 1 +2924 3272 0 +2924 3279 1 +2924 3280 -1 +2925 2926 1 +2925 2949 1 +2926 2950 -1 +2927 2928 -1 +2927 2951 1 +2928 2952 1 +2929 2565 1 +2929 2566 1 +2929 2569 1 +2929 2927 0 +2929 2928 -1 +2929 2933 1 +2929 2934 1 +2929 2935 1 +2929 2936 0 +2929 2941 1 +2929 2942 1 +2929 2943 0 +2929 2944 1 +2930 2565 1 +2930 2566 0 +2930 2570 1 +2930 2927 -1 +2930 2928 0 +2930 2929 1 +2930 2933 0 +2930 2934 0 +2930 2935 1 +2930 2936 -1 +2930 2941 1 +2930 2942 1 +2930 2943 0 +2930 2944 1 +2931 2565 -1 +2931 2566 1 +2931 2571 1 +2931 2917 1 +2931 2918 1 +2931 2919 0 +2931 2920 0 +2931 2927 0 +2931 2928 1 +2931 2933 1 +2931 2934 0 +2931 2935 1 +2931 2936 1 +2932 2565 0 +2932 2566 1 +2932 2572 1 +2932 2917 1 +2932 2918 1 +2932 2919 1 +2932 2920 -1 +2932 2927 1 +2932 2928 1 +2932 2931 1 +2932 2933 1 +2932 2934 1 +2932 2935 -1 +2932 2936 0 +2933 2934 1 +2933 2957 1 +2934 2958 1 +2935 2936 1 +2935 2959 1 +2936 2960 0 +2937 2577 1 +2937 2933 1 +2937 2934 1 +2937 2941 0 +2937 2942 1 +2937 2943 1 +2937 2944 0 +2937 2949 1 +2937 2950 1 +2937 2951 0 +2937 2952 0 +2937 3295 0 +2937 3296 1 +2938 2578 0 +2938 2933 -1 +2938 2934 0 +2938 2937 0 +2938 2941 1 +2938 2942 1 +2938 2943 1 +2938 2944 0 +2938 2949 1 +2938 2950 -1 +2938 2951 1 +2938 2952 1 +2938 3295 1 +2938 3296 1 +2939 2579 0 +2939 2925 1 +2939 2926 1 +2939 2927 1 +2939 2928 0 +2939 2933 0 +2939 2934 0 +2939 2941 1 +2939 2942 1 +2939 2943 1 +2939 2944 0 +2939 3295 0 +2939 3296 1 +2940 2580 0 +2940 2925 -1 +2940 2926 1 +2940 2927 1 +2940 2928 0 +2940 2933 0 +2940 2934 -1 +2940 2939 1 +2940 2941 0 +2940 2942 0 +2940 2943 0 +2940 2944 0 +2940 3295 0 +2940 3296 1 +2941 2942 0 +2941 2965 1 +2942 2966 1 +2943 2944 1 +2943 2967 0 +2944 2968 1 +2945 2585 0 +2945 2941 -1 +2945 2942 1 +2945 2949 1 +2945 2950 1 +2945 2951 1 +2945 2952 1 +2945 3303 0 +2945 3304 0 +2945 3317 0 +2945 3318 1 +2945 3319 1 +2945 3320 1 +2946 2586 1 +2946 2941 1 +2946 2942 1 +2946 2945 0 +2946 2949 1 +2946 2950 0 +2946 2951 0 +2946 2952 0 +2946 3303 0 +2946 3304 1 +2946 3317 0 +2946 3318 1 +2946 3319 0 +2946 3320 0 +2947 2587 1 +2947 2941 1 +2947 2942 1 +2947 2949 1 +2947 2950 0 +2947 2951 0 +2947 2952 0 +2947 3293 1 +2947 3294 0 +2947 3295 0 +2947 3296 1 +2947 3303 0 +2947 3304 -1 +2948 2588 -1 +2948 2941 0 +2948 2942 0 +2948 2947 1 +2948 2949 1 +2948 2950 0 +2948 2951 1 +2948 2952 0 +2948 3293 1 +2948 3294 1 +2948 3295 1 +2948 3296 1 +2948 3303 0 +2948 3304 1 +2949 2950 0 +2949 2973 1 +2950 2974 -1 +2951 2952 1 +2951 2975 1 +2952 2976 1 +2953 2589 1 +2953 2590 -1 +2953 2593 0 +2953 2951 1 +2953 2952 0 +2953 2957 1 +2953 2958 1 +2953 2959 1 +2953 2960 0 +2953 2965 1 +2953 2966 0 +2953 2967 0 +2953 2968 -1 +2954 2589 0 +2954 2590 1 +2954 2594 1 +2954 2951 1 +2954 2952 1 +2954 2953 1 +2954 2957 0 +2954 2958 1 +2954 2959 1 +2954 2960 1 +2954 2965 1 +2954 2966 1 +2954 2967 1 +2954 2968 1 +2955 2589 0 +2955 2590 1 +2955 2595 0 +2955 2941 0 +2955 2942 0 +2955 2943 0 +2955 2944 1 +2955 2951 0 +2955 2952 1 +2955 2957 0 +2955 2958 0 +2955 2959 1 +2955 2960 -1 +2956 2589 -1 +2956 2590 1 +2956 2596 1 +2956 2941 0 +2956 2942 0 +2956 2943 1 +2956 2944 1 +2956 2951 0 +2956 2952 1 +2956 2955 0 +2956 2957 0 +2956 2958 0 +2956 2959 0 +2956 2960 1 +2957 2958 1 +2957 2981 0 +2958 2982 0 +2959 2960 1 +2959 2983 1 +2960 2984 0 +2961 2601 1 +2961 2957 0 +2961 2958 1 +2961 2965 0 +2961 2966 0 +2961 2967 1 +2961 2968 1 +2961 2973 0 +2961 2974 1 +2961 2975 0 +2961 2976 1 +2961 3319 1 +2961 3320 0 +2962 2602 0 +2962 2957 -1 +2962 2958 1 +2962 2961 0 +2962 2965 1 +2962 2966 -1 +2962 2967 1 +2962 2968 0 +2962 2973 0 +2962 2974 1 +2962 2975 1 +2962 2976 1 +2962 3319 1 +2962 3320 1 +2963 2603 0 +2963 2949 1 +2963 2950 0 +2963 2951 1 +2963 2952 1 +2963 2957 1 +2963 2958 1 +2963 2965 1 +2963 2966 0 +2963 2967 1 +2963 2968 1 +2963 3319 0 +2963 3320 0 +2964 2604 0 +2964 2949 0 +2964 2950 0 +2964 2951 1 +2964 2952 1 +2964 2957 -1 +2964 2958 1 +2964 2963 1 +2964 2965 1 +2964 2966 0 +2964 2967 0 +2964 2968 1 +2964 3319 1 +2964 3320 0 +2965 2966 1 +2965 2989 0 +2966 2990 1 +2967 2968 1 +2967 2991 1 +2968 2992 1 +2970 2610 0 +2970 2965 -1 +2970 2966 1 +2970 2973 0 +2970 2974 -1 +2970 2975 -1 +2970 2976 0 +2970 3327 1 +2970 3328 1 +2970 3341 0 +2970 3342 1 +2970 3343 1 +2970 3344 0 +2971 2611 0 +2971 2965 1 +2971 2966 1 +2971 2973 1 +2971 2974 1 +2971 2975 1 +2971 2976 1 +2971 3317 1 +2971 3318 0 +2971 3319 0 +2971 3320 1 +2971 3327 1 +2971 3328 0 +2972 2612 1 +2972 2965 0 +2972 2966 1 +2972 2971 0 +2972 2973 1 +2972 2974 0 +2972 2975 0 +2972 2976 0 +2972 3317 0 +2972 3318 1 +2972 3319 0 +2972 3320 -1 +2972 3327 0 +2972 3328 1 +2973 2974 1 +2973 2997 -1 +2974 2998 0 +2975 2976 1 +2975 2999 1 +2976 3000 0 +2977 2613 1 +2977 2614 1 +2977 2617 1 +2977 2975 -1 +2977 2976 1 +2977 2981 1 +2977 2982 1 +2977 2983 1 +2977 2984 1 +2977 2989 1 +2977 2990 1 +2977 2991 1 +2977 2992 -1 +2978 2613 0 +2978 2614 1 +2978 2618 1 +2978 2975 -1 +2978 2976 0 +2978 2977 0 +2978 2981 1 +2978 2982 1 +2978 2983 1 +2978 2984 1 +2978 2989 1 +2978 2990 0 +2978 2991 0 +2978 2992 1 +2979 2613 1 +2979 2614 0 +2979 2619 -1 +2979 2965 1 +2979 2966 -1 +2979 2967 0 +2979 2968 0 +2979 2975 0 +2979 2976 1 +2979 2981 1 +2979 2982 -1 +2979 2983 0 +2979 2984 0 +2980 2613 1 +2980 2614 1 +2980 2620 0 +2980 2965 1 +2980 2966 1 +2980 2967 0 +2980 2968 0 +2980 2975 0 +2980 2976 -1 +2980 2979 0 +2980 2981 1 +2980 2982 0 +2980 2983 1 +2980 2984 1 +2981 2982 1 +2981 3005 1 +2982 3006 -1 +2983 2984 1 +2983 3007 1 +2984 3008 1 +2985 2625 0 +2985 2981 1 +2985 2982 0 +2985 2989 0 +2985 2990 1 +2985 2991 1 +2985 2992 -1 +2985 2997 -1 +2985 2998 1 +2985 2999 0 +2985 3000 0 +2985 3343 1 +2985 3344 -1 +2986 2626 1 +2986 2981 0 +2986 2982 1 +2986 2985 1 +2986 2989 0 +2986 2990 -1 +2986 2991 1 +2986 2992 0 +2986 2997 0 +2986 2998 1 +2986 2999 0 +2986 3000 0 +2986 3343 1 +2986 3344 0 +2987 2627 1 +2987 2973 0 +2987 2974 1 +2987 2975 1 +2987 2976 -1 +2987 2981 1 +2987 2982 1 +2987 2989 0 +2987 2990 0 +2987 2991 -1 +2987 2992 0 +2987 3343 1 +2987 3344 1 +2988 2628 0 +2988 2973 1 +2988 2974 0 +2988 2975 1 +2988 2976 1 +2988 2981 -1 +2988 2982 1 +2988 2987 0 +2988 2989 1 +2988 2990 -1 +2988 2991 -1 +2988 2992 0 +2988 3343 0 +2988 3344 0 +2989 2990 1 +2989 3013 0 +2990 3014 1 +2991 2992 0 +2991 3015 -1 +2992 3016 0 +2993 2633 1 +2993 2989 1 +2993 2990 0 +2993 2997 1 +2993 2998 1 +2993 2999 1 +2993 3000 0 +2993 3351 0 +2993 3352 -1 +2993 3365 0 +2993 3366 1 +2993 3367 1 +2993 3368 -1 +2994 2634 -1 +2994 2989 1 +2994 2990 0 +2994 2993 1 +2994 2997 -1 +2994 2998 1 +2994 2999 1 +2994 3000 0 +2994 3351 1 +2994 3352 0 +2994 3365 1 +2994 3366 -1 +2994 3367 1 +2994 3368 1 +2995 2635 0 +2995 2989 0 +2995 2990 1 +2995 2997 1 +2995 2998 1 +2995 2999 1 +2995 3000 0 +2995 3341 1 +2995 3342 1 +2995 3343 1 +2995 3344 1 +2995 3351 0 +2995 3352 0 +2996 2636 -1 +2996 2989 0 +2996 2990 1 +2996 2995 1 +2996 2997 0 +2996 2998 1 +2996 2999 0 +2996 3000 0 +2996 3341 0 +2996 3342 1 +2996 3343 0 +2996 3344 1 +2996 3351 0 +2996 3352 1 +2997 2998 1 +2997 3021 1 +2998 3022 0 +2999 3000 1 +2999 3023 1 +3000 3024 1 +3001 2637 1 +3001 2638 0 +3001 2641 -1 +3001 2999 -1 +3001 3000 1 +3001 3005 1 +3001 3006 0 +3001 3007 1 +3001 3008 -1 +3001 3013 -1 +3001 3014 0 +3001 3015 1 +3001 3016 -1 +3002 2637 1 +3002 2638 0 +3002 2642 1 +3002 2999 0 +3002 3000 1 +3002 3001 0 +3002 3005 -1 +3002 3006 1 +3002 3007 1 +3002 3008 1 +3002 3013 1 +3002 3014 1 +3002 3015 -1 +3002 3016 0 +3003 2637 0 +3003 2638 0 +3003 2643 1 +3003 2989 0 +3003 2990 0 +3003 2991 1 +3003 2992 0 +3003 2999 1 +3003 3000 1 +3003 3005 -1 +3003 3006 1 +3003 3007 1 +3003 3008 1 +3004 2637 1 +3004 2638 1 +3004 2644 0 +3004 2989 1 +3004 2990 1 +3004 2991 1 +3004 2992 1 +3004 2999 1 +3004 3000 0 +3004 3003 0 +3004 3005 0 +3004 3006 1 +3004 3007 0 +3004 3008 0 +3005 3006 1 +3005 3029 1 +3006 3030 1 +3007 3008 -1 +3007 3031 0 +3008 3032 0 +3009 2649 1 +3009 3005 0 +3009 3006 0 +3009 3013 1 +3009 3014 0 +3009 3015 1 +3009 3016 -1 +3009 3021 1 +3009 3022 1 +3009 3023 1 +3009 3024 1 +3009 3367 -1 +3009 3368 0 +3010 2650 1 +3010 3005 0 +3010 3006 0 +3010 3009 0 +3010 3013 0 +3010 3014 1 +3010 3015 1 +3010 3016 1 +3010 3021 0 +3010 3022 1 +3010 3023 0 +3010 3024 1 +3010 3367 1 +3010 3368 1 +3011 2651 1 +3011 2997 1 +3011 2998 1 +3011 2999 0 +3011 3000 1 +3011 3005 0 +3011 3006 1 +3011 3013 0 +3011 3014 1 +3011 3015 1 +3011 3016 -1 +3011 3367 0 +3011 3368 1 +3012 2652 1 +3012 2997 1 +3012 2998 1 +3012 2999 0 +3012 3000 0 +3012 3005 0 +3012 3006 0 +3012 3011 0 +3012 3013 1 +3012 3014 1 +3012 3015 1 +3012 3016 0 +3012 3367 0 +3012 3368 0 +3013 3014 0 +3013 3037 1 +3014 3038 1 +3015 3016 1 +3015 3039 1 +3016 3040 0 +3017 2657 1 +3017 3013 1 +3017 3014 0 +3017 3021 1 +3017 3022 1 +3017 3023 0 +3017 3024 1 +3017 3375 0 +3017 3376 0 +3017 3389 1 +3017 3390 1 +3017 3391 1 +3017 3392 1 +3018 2658 0 +3018 3013 1 +3018 3014 1 +3018 3017 0 +3018 3021 -1 +3018 3022 -1 +3018 3023 0 +3018 3024 1 +3018 3375 -1 +3018 3376 0 +3018 3389 0 +3018 3390 0 +3018 3391 0 +3018 3392 1 +3019 2659 1 +3019 3013 1 +3019 3014 1 +3019 3021 0 +3019 3022 0 +3019 3023 1 +3019 3024 -1 +3019 3365 1 +3019 3366 0 +3019 3367 0 +3019 3368 -1 +3019 3375 1 +3019 3376 1 +3020 2660 -1 +3020 3013 1 +3020 3014 1 +3020 3019 1 +3020 3021 0 +3020 3022 1 +3020 3023 1 +3020 3024 1 +3020 3365 0 +3020 3366 1 +3020 3367 0 +3020 3368 0 +3020 3375 1 +3020 3376 1 +3021 3022 0 +3021 3045 0 +3022 3046 1 +3023 3024 -1 +3023 3047 1 +3024 3048 1 +3025 2661 1 +3025 2662 1 +3025 2665 1 +3025 3023 1 +3025 3024 0 +3025 3029 1 +3025 3030 0 +3025 3031 -1 +3025 3032 1 +3025 3037 0 +3025 3038 0 +3025 3039 1 +3025 3040 0 +3026 2661 1 +3026 2662 0 +3026 2666 0 +3026 3023 0 +3026 3024 1 +3026 3025 1 +3026 3029 0 +3026 3030 1 +3026 3031 0 +3026 3032 1 +3026 3037 1 +3026 3038 1 +3026 3039 1 +3026 3040 0 +3027 2661 0 +3027 2662 -1 +3027 2667 -1 +3027 3013 0 +3027 3014 -1 +3027 3015 1 +3027 3016 1 +3027 3023 1 +3027 3024 0 +3027 3029 1 +3027 3030 1 +3027 3031 1 +3027 3032 1 +3028 2661 -1 +3028 2662 0 +3028 2668 1 +3028 3013 0 +3028 3014 0 +3028 3015 0 +3028 3016 0 +3028 3023 1 +3028 3024 0 +3028 3027 0 +3028 3029 0 +3028 3030 1 +3028 3031 -1 +3028 3032 -1 +3029 3030 0 +3029 3053 -1 +3030 3054 1 +3031 3032 1 +3031 3055 1 +3032 3056 0 +3033 2673 0 +3033 3029 0 +3033 3030 1 +3033 3037 -1 +3033 3038 1 +3033 3039 0 +3033 3040 0 +3033 3045 1 +3033 3046 0 +3033 3047 0 +3033 3048 0 +3033 3391 0 +3033 3392 -1 +3034 2674 1 +3034 3029 -1 +3034 3030 1 +3034 3033 0 +3034 3037 1 +3034 3038 0 +3034 3039 1 +3034 3040 1 +3034 3045 0 +3034 3046 1 +3034 3047 1 +3034 3048 1 +3034 3391 0 +3034 3392 1 +3035 2675 0 +3035 3021 0 +3035 3022 1 +3035 3023 1 +3035 3024 0 +3035 3029 0 +3035 3030 1 +3035 3037 1 +3035 3038 1 +3035 3039 -1 +3035 3040 0 +3035 3391 1 +3035 3392 1 +3036 2676 1 +3036 3021 1 +3036 3022 1 +3036 3023 1 +3036 3024 1 +3036 3029 1 +3036 3030 1 +3036 3035 0 +3036 3037 1 +3036 3038 1 +3036 3039 0 +3036 3040 1 +3036 3391 1 +3036 3392 1 +3037 3038 1 +3037 3061 1 +3038 3062 0 +3039 3040 1 +3039 3063 0 +3040 3064 1 +3041 2681 0 +3041 3037 0 +3041 3038 1 +3041 3045 1 +3041 3046 1 +3041 3047 0 +3041 3048 1 +3041 3399 -1 +3041 3400 1 +3041 3413 1 +3041 3414 1 +3041 3415 0 +3041 3416 1 +3042 2682 0 +3042 3037 1 +3042 3038 1 +3042 3041 1 +3042 3045 1 +3042 3046 -1 +3042 3047 -1 +3042 3048 0 +3042 3399 0 +3042 3400 1 +3042 3413 1 +3042 3414 1 +3042 3415 1 +3042 3416 1 +3043 2683 1 +3043 3037 0 +3043 3038 1 +3043 3045 1 +3043 3046 1 +3043 3047 1 +3043 3048 -1 +3043 3389 1 +3043 3390 0 +3043 3391 0 +3043 3392 1 +3043 3399 1 +3043 3400 -1 +3044 2684 1 +3044 3037 1 +3044 3038 1 +3044 3043 1 +3044 3045 0 +3044 3046 0 +3044 3047 0 +3044 3048 1 +3044 3389 1 +3044 3390 1 +3044 3391 0 +3044 3392 1 +3044 3399 -1 +3044 3400 1 +3045 3046 1 +3045 3069 1 +3046 3070 0 +3047 3048 1 +3047 3071 0 +3048 3072 0 +3049 2685 -1 +3049 2686 1 +3049 2689 1 +3049 3047 1 +3049 3048 1 +3049 3053 0 +3049 3054 0 +3049 3055 0 +3049 3056 1 +3049 3061 1 +3049 3062 1 +3049 3063 1 +3049 3064 0 +3050 2685 -1 +3050 2686 0 +3050 2690 1 +3050 3047 0 +3050 3048 0 +3050 3049 0 +3050 3053 1 +3050 3054 0 +3050 3055 0 +3050 3056 -1 +3050 3061 1 +3050 3062 1 +3050 3063 -1 +3050 3064 1 +3051 2685 1 +3051 2686 1 +3051 2691 1 +3051 3037 0 +3051 3038 1 +3051 3039 0 +3051 3040 -1 +3051 3047 1 +3051 3048 -1 +3051 3053 1 +3051 3054 1 +3051 3055 1 +3051 3056 0 +3052 2685 0 +3052 2686 1 +3052 2692 1 +3052 3037 0 +3052 3038 1 +3052 3039 1 +3052 3040 0 +3052 3047 1 +3052 3048 0 +3052 3051 1 +3052 3053 0 +3052 3054 0 +3052 3055 1 +3052 3056 1 +3053 3054 0 +3053 3077 1 +3054 3078 0 +3055 3056 1 +3055 3079 1 +3056 3080 1 +3057 2697 -1 +3057 3053 1 +3057 3054 1 +3057 3061 1 +3057 3062 1 +3057 3063 1 +3057 3064 1 +3057 3069 1 +3057 3070 0 +3057 3071 1 +3057 3072 0 +3057 3415 0 +3057 3416 1 +3058 2698 1 +3058 3053 -1 +3058 3054 0 +3058 3057 1 +3058 3061 1 +3058 3062 1 +3058 3063 -1 +3058 3064 -1 +3058 3069 1 +3058 3070 0 +3058 3071 0 +3058 3072 0 +3058 3415 1 +3058 3416 1 +3059 2699 0 +3059 3045 1 +3059 3046 1 +3059 3047 0 +3059 3048 1 +3059 3053 0 +3059 3054 0 +3059 3061 0 +3059 3062 0 +3059 3063 0 +3059 3064 0 +3059 3415 1 +3059 3416 1 +3060 2700 -1 +3060 3045 1 +3060 3046 0 +3060 3047 -1 +3060 3048 1 +3060 3053 0 +3060 3054 1 +3060 3059 1 +3060 3061 0 +3060 3062 1 +3060 3063 1 +3060 3064 1 +3060 3415 1 +3060 3416 1 +3061 3062 0 +3061 3085 1 +3062 3086 1 +3063 3064 1 +3063 3087 0 +3064 3088 0 +3065 2705 1 +3065 3061 0 +3065 3062 1 +3065 3069 0 +3065 3070 1 +3065 3071 0 +3065 3072 1 +3065 3423 1 +3065 3424 1 +3065 3437 1 +3065 3438 0 +3065 3439 0 +3065 3440 1 +3066 2706 1 +3066 3061 1 +3066 3062 1 +3066 3065 1 +3066 3069 1 +3066 3070 -1 +3066 3071 1 +3066 3072 0 +3066 3423 1 +3066 3424 0 +3066 3437 1 +3066 3438 1 +3066 3439 1 +3066 3440 0 +3067 2707 0 +3067 3061 0 +3067 3062 -1 +3067 3069 1 +3067 3070 1 +3067 3071 1 +3067 3072 1 +3067 3413 0 +3067 3414 1 +3067 3415 0 +3067 3416 1 +3067 3423 1 +3067 3424 0 +3068 2708 0 +3068 3061 1 +3068 3062 1 +3068 3067 1 +3068 3069 1 +3068 3070 1 +3068 3071 1 +3068 3072 0 +3068 3413 -1 +3068 3414 -1 +3068 3415 1 +3068 3416 1 +3068 3423 0 +3068 3424 0 +3069 3070 1 +3069 3093 1 +3070 3094 1 +3071 3072 1 +3071 3095 1 +3072 3096 0 +3073 2709 1 +3073 2710 1 +3073 2713 0 +3073 3071 1 +3073 3072 -1 +3073 3077 0 +3073 3078 1 +3073 3079 1 +3073 3080 1 +3073 3085 1 +3073 3086 1 +3073 3087 1 +3073 3088 -1 +3074 2709 0 +3074 2710 1 +3074 2714 1 +3074 3071 1 +3074 3072 0 +3074 3073 1 +3074 3077 0 +3074 3078 0 +3074 3079 1 +3074 3080 0 +3074 3085 0 +3074 3086 0 +3074 3087 0 +3074 3088 1 +3075 2709 1 +3075 2710 0 +3075 2715 1 +3075 3061 1 +3075 3062 -1 +3075 3063 1 +3075 3064 0 +3075 3071 1 +3075 3072 0 +3075 3077 0 +3075 3078 1 +3075 3079 0 +3075 3080 -1 +3076 2709 1 +3076 2710 1 +3076 2716 1 +3076 3061 0 +3076 3062 0 +3076 3063 1 +3076 3064 0 +3076 3071 0 +3076 3072 0 +3076 3075 1 +3076 3077 1 +3076 3078 1 +3076 3079 1 +3076 3080 1 +3077 3078 0 +3077 3101 1 +3078 3102 1 +3079 3080 1 +3079 3103 0 +3080 3104 0 +3081 2721 -1 +3081 3077 0 +3081 3078 0 +3081 3085 1 +3081 3086 -1 +3081 3087 0 +3081 3088 0 +3081 3093 0 +3081 3094 0 +3081 3095 1 +3081 3096 0 +3081 3439 0 +3081 3440 0 +3082 2722 1 +3082 3077 1 +3082 3078 1 +3082 3081 1 +3082 3085 1 +3082 3086 1 +3082 3087 1 +3082 3088 1 +3082 3093 1 +3082 3094 1 +3082 3095 0 +3082 3096 0 +3082 3439 1 +3082 3440 1 +3083 2723 0 +3083 3069 1 +3083 3070 1 +3083 3071 -1 +3083 3072 0 +3083 3077 1 +3083 3078 0 +3083 3085 0 +3083 3086 0 +3083 3087 1 +3083 3088 0 +3083 3439 0 +3083 3440 1 +3084 2724 1 +3084 3069 1 +3084 3070 0 +3084 3071 0 +3084 3072 1 +3084 3077 0 +3084 3078 0 +3084 3083 1 +3084 3085 -1 +3084 3086 1 +3084 3087 1 +3084 3088 1 +3084 3439 1 +3084 3440 1 +3085 3086 1 +3085 3109 0 +3086 3110 1 +3087 3088 -1 +3087 3111 1 +3088 3112 1 +3089 2729 0 +3089 3085 0 +3089 3086 1 +3089 3093 1 +3089 3094 0 +3089 3095 0 +3089 3096 1 +3089 3447 1 +3089 3448 0 +3089 3461 0 +3089 3462 1 +3089 3463 0 +3089 3464 -1 +3090 2730 1 +3090 3085 1 +3090 3086 0 +3090 3089 1 +3090 3093 1 +3090 3094 1 +3090 3095 0 +3090 3096 1 +3090 3447 1 +3090 3448 1 +3090 3461 1 +3090 3462 1 +3090 3463 -1 +3090 3464 1 +3091 2731 -1 +3091 3085 1 +3091 3086 -1 +3091 3093 0 +3091 3094 1 +3091 3095 1 +3091 3096 1 +3091 3437 1 +3091 3438 0 +3091 3439 1 +3091 3440 1 +3091 3447 -1 +3091 3448 1 +3092 2732 -1 +3092 3085 1 +3092 3086 1 +3092 3091 0 +3092 3093 1 +3092 3094 0 +3092 3095 1 +3092 3096 0 +3092 3437 1 +3092 3438 1 +3092 3439 1 +3092 3440 1 +3092 3447 0 +3092 3448 0 +3093 3094 -1 +3093 3117 1 +3094 3118 0 +3095 3096 1 +3095 3119 -1 +3096 3120 1 +3097 2733 1 +3097 2734 1 +3097 2737 0 +3097 3095 -1 +3097 3096 1 +3097 3101 -1 +3097 3102 1 +3097 3103 1 +3097 3104 1 +3097 3109 1 +3097 3110 -1 +3097 3111 1 +3097 3112 -1 +3098 2733 1 +3098 2734 1 +3098 2738 1 +3098 3095 1 +3098 3096 0 +3098 3097 1 +3098 3101 1 +3098 3102 0 +3098 3103 1 +3098 3104 -1 +3098 3109 1 +3098 3110 0 +3098 3111 0 +3098 3112 0 +3099 2733 0 +3099 2734 1 +3099 2739 1 +3099 3085 1 +3099 3086 1 +3099 3087 -1 +3099 3088 0 +3099 3095 0 +3099 3096 0 +3099 3101 1 +3099 3102 1 +3099 3103 1 +3099 3104 -1 +3100 2733 1 +3100 2734 1 +3100 2740 1 +3100 3085 1 +3100 3086 1 +3100 3087 1 +3100 3088 0 +3100 3095 1 +3100 3096 0 +3100 3099 0 +3100 3101 1 +3100 3102 1 +3100 3103 1 +3100 3104 1 +3101 3102 1 +3101 3125 0 +3102 3126 0 +3103 3104 1 +3103 3127 0 +3104 3128 1 +3105 2745 -1 +3105 3101 1 +3105 3102 1 +3105 3109 0 +3105 3110 1 +3105 3111 1 +3105 3112 0 +3105 3117 0 +3105 3118 -1 +3105 3119 0 +3105 3120 1 +3105 3463 1 +3105 3464 0 +3106 2746 1 +3106 3101 1 +3106 3102 1 +3106 3105 1 +3106 3109 0 +3106 3110 1 +3106 3111 -1 +3106 3112 0 +3106 3117 1 +3106 3118 1 +3106 3119 0 +3106 3120 1 +3106 3463 0 +3106 3464 1 +3107 2747 0 +3107 3093 0 +3107 3094 -1 +3107 3095 1 +3107 3096 1 +3107 3101 0 +3107 3102 1 +3107 3109 1 +3107 3110 0 +3107 3111 0 +3107 3112 1 +3107 3463 -1 +3107 3464 1 +3108 2748 0 +3108 3093 1 +3108 3094 -1 +3108 3095 0 +3108 3096 1 +3108 3101 0 +3108 3102 -1 +3108 3107 1 +3108 3109 1 +3108 3110 1 +3108 3111 1 +3108 3112 1 +3108 3463 0 +3108 3464 0 +3109 3110 0 +3109 3133 1 +3110 3134 1 +3111 3112 1 +3111 3135 1 +3112 3136 1 +3113 2753 1 +3113 3109 0 +3113 3110 0 +3113 3117 0 +3113 3118 1 +3113 3119 1 +3113 3120 1 +3113 3471 0 +3113 3472 1 +3113 3485 0 +3113 3486 1 +3113 3487 0 +3113 3488 0 +3114 2754 1 +3114 3109 1 +3114 3110 0 +3114 3113 0 +3114 3117 1 +3114 3118 1 +3114 3119 1 +3114 3120 1 +3114 3471 1 +3114 3472 0 +3114 3485 0 +3114 3486 0 +3114 3487 1 +3114 3488 0 +3115 2755 0 +3115 3109 0 +3115 3110 1 +3115 3117 0 +3115 3118 1 +3115 3119 0 +3115 3120 0 +3115 3461 1 +3115 3462 0 +3115 3463 1 +3115 3464 -1 +3115 3471 -1 +3115 3472 1 +3116 2756 1 +3116 3109 1 +3116 3110 1 +3116 3115 0 +3116 3117 1 +3116 3118 0 +3116 3119 1 +3116 3120 -1 +3116 3461 1 +3116 3462 0 +3116 3463 1 +3116 3464 1 +3116 3471 0 +3116 3472 1 +3117 3118 1 +3117 3141 1 +3118 3142 1 +3119 3120 1 +3119 3143 0 +3120 3144 0 +3121 2757 1 +3121 2758 1 +3121 2761 1 +3121 3119 1 +3121 3120 0 +3121 3125 1 +3121 3126 0 +3121 3127 0 +3121 3128 1 +3121 3133 1 +3121 3134 1 +3121 3135 1 +3121 3136 0 +3122 2757 0 +3122 2758 0 +3122 2762 0 +3122 3119 0 +3122 3120 -1 +3122 3121 1 +3122 3125 1 +3122 3126 0 +3122 3127 0 +3122 3128 0 +3122 3133 0 +3122 3134 1 +3122 3135 1 +3122 3136 1 +3123 2757 1 +3123 2758 1 +3123 2763 1 +3123 3109 1 +3123 3110 1 +3123 3111 1 +3123 3112 1 +3123 3119 1 +3123 3120 -1 +3123 3125 -1 +3123 3126 1 +3123 3127 -1 +3123 3128 1 +3124 2757 1 +3124 2758 -1 +3124 2764 1 +3124 3109 1 +3124 3110 1 +3124 3111 -1 +3124 3112 1 +3124 3119 0 +3124 3120 1 +3124 3123 1 +3124 3125 1 +3124 3126 0 +3124 3127 0 +3124 3128 0 +3125 3126 0 +3125 3149 -1 +3126 3150 0 +3127 3128 1 +3127 3151 1 +3128 3152 1 +3129 2769 1 +3129 3125 0 +3129 3126 1 +3129 3133 -1 +3129 3134 0 +3129 3135 1 +3129 3136 1 +3129 3141 1 +3129 3142 1 +3129 3143 1 +3129 3144 0 +3129 3487 1 +3129 3488 0 +3130 2770 -1 +3130 3125 1 +3130 3126 1 +3130 3129 1 +3130 3133 0 +3130 3134 1 +3130 3135 0 +3130 3136 1 +3130 3141 1 +3130 3142 1 +3130 3143 1 +3130 3144 1 +3130 3487 1 +3130 3488 1 +3131 2771 0 +3131 3117 0 +3131 3118 0 +3131 3119 0 +3131 3120 0 +3131 3125 0 +3131 3126 0 +3131 3133 -1 +3131 3134 1 +3131 3135 1 +3131 3136 0 +3131 3487 0 +3131 3488 1 +3132 2772 0 +3132 3117 1 +3132 3118 1 +3132 3119 0 +3132 3120 0 +3132 3125 1 +3132 3126 1 +3132 3131 0 +3132 3133 1 +3132 3134 1 +3132 3135 1 +3132 3136 0 +3132 3487 1 +3132 3488 1 +3133 3134 -1 +3133 3157 1 +3134 3158 -1 +3135 3136 -1 +3135 3159 0 +3136 3160 1 +3137 2777 1 +3137 3133 1 +3137 3134 1 +3137 3141 1 +3137 3142 1 +3137 3143 1 +3137 3144 1 +3137 3495 -1 +3137 3496 0 +3137 3509 1 +3137 3510 1 +3137 3511 0 +3137 3512 1 +3138 2778 1 +3138 3133 1 +3138 3134 0 +3138 3137 1 +3138 3141 1 +3138 3142 1 +3138 3143 1 +3138 3144 0 +3138 3495 1 +3138 3496 1 +3138 3509 -1 +3138 3510 0 +3138 3511 0 +3138 3512 -1 +3139 2779 1 +3139 3133 0 +3139 3134 0 +3139 3141 1 +3139 3142 1 +3139 3143 -1 +3139 3144 1 +3139 3485 0 +3139 3486 -1 +3139 3487 1 +3139 3488 0 +3139 3495 1 +3139 3496 1 +3140 2780 -1 +3140 3133 0 +3140 3134 0 +3140 3139 1 +3140 3141 1 +3140 3142 1 +3140 3143 0 +3140 3144 1 +3140 3485 0 +3140 3486 -1 +3140 3487 1 +3140 3488 1 +3140 3495 1 +3140 3496 0 +3141 3142 1 +3141 3165 1 +3142 3166 0 +3143 3144 1 +3143 3167 1 +3144 3168 1 +3145 2781 -1 +3145 2782 1 +3145 2785 -1 +3145 3143 0 +3145 3144 1 +3145 3149 1 +3145 3150 0 +3145 3151 1 +3145 3152 1 +3145 3157 0 +3145 3158 1 +3145 3159 1 +3145 3160 1 +3146 2781 1 +3146 2782 1 +3146 2786 0 +3146 3143 1 +3146 3144 0 +3146 3145 0 +3146 3149 1 +3146 3150 0 +3146 3151 1 +3146 3152 1 +3146 3157 0 +3146 3158 1 +3146 3159 -1 +3146 3160 1 +3147 2781 1 +3147 2782 1 +3147 2787 1 +3147 3133 1 +3147 3134 1 +3147 3135 1 +3147 3136 1 +3147 3143 1 +3147 3144 1 +3147 3149 1 +3147 3150 1 +3147 3151 0 +3147 3152 0 +3148 2781 1 +3148 2782 -1 +3148 2788 0 +3148 3133 0 +3148 3134 1 +3148 3135 0 +3148 3136 0 +3148 3143 -1 +3148 3144 -1 +3148 3147 1 +3148 3149 1 +3148 3150 1 +3148 3151 -1 +3148 3152 -1 +3149 3150 0 +3149 3173 0 +3150 3174 1 +3151 3152 1 +3151 3175 1 +3152 3176 1 +3153 2793 1 +3153 3149 1 +3153 3150 0 +3153 3157 1 +3153 3158 1 +3153 3159 1 +3153 3160 1 +3153 3165 1 +3153 3166 1 +3153 3167 1 +3153 3168 0 +3153 3511 0 +3153 3512 1 +3154 2794 1 +3154 3149 1 +3154 3150 0 +3154 3153 1 +3154 3157 -1 +3154 3158 1 +3154 3159 1 +3154 3160 1 +3154 3165 1 +3154 3166 0 +3154 3167 1 +3154 3168 -1 +3154 3511 1 +3154 3512 1 +3155 2795 1 +3155 3141 -1 +3155 3142 1 +3155 3143 -1 +3155 3144 -1 +3155 3149 1 +3155 3150 -1 +3155 3157 0 +3155 3158 0 +3155 3159 1 +3155 3160 1 +3155 3511 -1 +3155 3512 1 +3156 2796 1 +3156 3141 1 +3156 3142 1 +3156 3143 0 +3156 3144 1 +3156 3149 0 +3156 3150 1 +3156 3155 1 +3156 3157 1 +3156 3158 1 +3156 3159 1 +3156 3160 0 +3156 3511 0 +3156 3512 1 +3157 3158 1 +3157 3181 1 +3158 3182 1 +3159 3160 1 +3159 3183 0 +3160 3184 1 +3161 2801 1 +3161 3157 0 +3161 3158 1 +3161 3165 1 +3161 3166 1 +3161 3167 1 +3161 3168 -1 +3161 3519 1 +3161 3520 -1 +3161 3533 1 +3161 3534 1 +3161 3535 1 +3161 3536 1 +3162 2802 0 +3162 3157 1 +3162 3158 -1 +3162 3161 1 +3162 3165 1 +3162 3166 1 +3162 3167 1 +3162 3168 0 +3162 3519 0 +3162 3520 1 +3162 3533 -1 +3162 3534 1 +3162 3535 1 +3162 3536 1 +3163 2803 1 +3163 3157 1 +3163 3158 0 +3163 3165 1 +3163 3166 0 +3163 3167 1 +3163 3168 0 +3163 3509 1 +3163 3510 1 +3163 3511 1 +3163 3512 1 +3163 3519 1 +3163 3520 0 +3164 2804 1 +3164 3157 1 +3164 3158 -1 +3164 3163 0 +3164 3165 1 +3164 3166 -1 +3164 3167 1 +3164 3168 0 +3164 3509 1 +3164 3510 1 +3164 3511 1 +3164 3512 1 +3164 3519 1 +3164 3520 0 +3165 3166 0 +3165 3189 0 +3166 3190 1 +3167 3168 -1 +3167 3191 0 +3168 3192 0 +3169 2805 0 +3169 2806 1 +3169 2809 1 +3169 3167 1 +3169 3168 1 +3169 3173 0 +3169 3174 1 +3169 3175 1 +3169 3176 -1 +3169 3181 1 +3169 3182 1 +3169 3183 1 +3169 3184 1 +3170 2805 1 +3170 2806 0 +3170 2810 1 +3170 3167 1 +3170 3168 0 +3170 3169 1 +3170 3173 1 +3170 3174 0 +3170 3175 0 +3170 3176 1 +3170 3181 1 +3170 3182 1 +3170 3183 1 +3170 3184 1 +3171 2805 0 +3171 2806 -1 +3171 2811 1 +3171 3157 1 +3171 3158 0 +3171 3159 -1 +3171 3160 1 +3171 3167 0 +3171 3168 0 +3171 3173 -1 +3171 3174 1 +3171 3175 0 +3171 3176 -1 +3172 2805 1 +3172 2806 1 +3172 2812 1 +3172 3157 1 +3172 3158 1 +3172 3159 1 +3172 3160 1 +3172 3167 0 +3172 3168 1 +3172 3171 0 +3172 3173 1 +3172 3174 0 +3172 3175 1 +3172 3176 1 +3173 3174 1 +3173 3197 -1 +3174 3198 1 +3175 3176 1 +3175 3199 0 +3176 3200 0 +3177 2817 0 +3177 3173 0 +3177 3174 -1 +3177 3181 1 +3177 3182 0 +3177 3183 1 +3177 3184 1 +3177 3189 0 +3177 3190 1 +3177 3191 0 +3177 3192 0 +3177 3535 1 +3177 3536 -1 +3178 2818 0 +3178 3173 1 +3178 3174 1 +3178 3177 -1 +3178 3181 0 +3178 3182 1 +3178 3183 -1 +3178 3184 0 +3178 3189 0 +3178 3190 1 +3178 3191 1 +3178 3192 1 +3178 3535 1 +3178 3536 1 +3179 2819 1 +3179 3165 1 +3179 3166 0 +3179 3167 1 +3179 3168 1 +3179 3173 1 +3179 3174 1 +3179 3181 0 +3179 3182 1 +3179 3183 0 +3179 3184 0 +3179 3535 0 +3179 3536 1 +3180 2820 1 +3180 3165 1 +3180 3166 1 +3180 3167 0 +3180 3168 0 +3180 3173 0 +3180 3174 -1 +3180 3179 0 +3180 3181 0 +3180 3182 1 +3180 3183 1 +3180 3184 0 +3180 3535 0 +3180 3536 1 +3181 3182 0 +3181 3205 1 +3182 3206 1 +3183 3184 1 +3183 3207 1 +3184 3208 0 +3185 2825 1 +3185 3181 1 +3185 3182 1 +3185 3189 1 +3185 3190 0 +3185 3191 1 +3185 3192 0 +3185 3543 0 +3185 3544 1 +3185 3557 1 +3185 3558 0 +3185 3559 1 +3185 3560 0 +3186 2826 1 +3186 3181 0 +3186 3182 0 +3186 3185 1 +3186 3189 1 +3186 3190 1 +3186 3191 1 +3186 3192 0 +3186 3543 0 +3186 3544 1 +3186 3557 0 +3186 3558 -1 +3186 3559 0 +3186 3560 1 +3187 2827 0 +3187 3181 1 +3187 3182 0 +3187 3189 1 +3187 3190 0 +3187 3191 1 +3187 3192 0 +3187 3533 0 +3187 3534 1 +3187 3535 0 +3187 3536 1 +3187 3543 1 +3187 3544 0 +3188 2828 1 +3188 3181 1 +3188 3182 1 +3188 3187 0 +3188 3189 0 +3188 3190 -1 +3188 3191 0 +3188 3192 0 +3188 3533 1 +3188 3534 1 +3188 3535 1 +3188 3536 1 +3188 3543 0 +3188 3544 -1 +3189 3190 0 +3189 3213 0 +3190 3214 0 +3191 3192 1 +3191 3215 1 +3192 3216 1 +3193 2829 0 +3193 2830 -1 +3193 2833 0 +3193 3191 -1 +3193 3192 0 +3193 3197 1 +3193 3198 1 +3193 3199 0 +3193 3200 1 +3193 3205 1 +3193 3206 1 +3193 3207 0 +3193 3208 -1 +3194 2829 0 +3194 2830 1 +3194 2834 0 +3194 3191 1 +3194 3192 -1 +3194 3193 1 +3194 3197 1 +3194 3198 -1 +3194 3199 1 +3194 3200 1 +3194 3205 0 +3194 3206 1 +3194 3207 1 +3194 3208 0 +3195 2829 1 +3195 2830 0 +3195 2835 -1 +3195 3181 0 +3195 3182 -1 +3195 3183 1 +3195 3184 1 +3195 3191 1 +3195 3192 0 +3195 3197 0 +3195 3198 -1 +3195 3199 0 +3195 3200 0 +3196 2829 0 +3196 2830 1 +3196 2836 -1 +3196 3181 0 +3196 3182 0 +3196 3183 0 +3196 3184 1 +3196 3191 0 +3196 3192 1 +3196 3195 -1 +3196 3197 -1 +3196 3198 1 +3196 3199 1 +3196 3200 1 +3197 3198 1 +3197 3221 1 +3198 3222 1 +3199 3200 1 +3199 3223 1 +3200 3224 1 +3201 2841 1 +3201 3197 1 +3201 3198 0 +3201 3205 1 +3201 3206 1 +3201 3207 0 +3201 3208 1 +3201 3213 0 +3201 3214 0 +3201 3215 1 +3201 3216 0 +3201 3559 0 +3201 3560 1 +3202 2842 1 +3202 3197 0 +3202 3198 1 +3202 3201 1 +3202 3205 1 +3202 3206 1 +3202 3207 0 +3202 3208 1 +3202 3213 0 +3202 3214 0 +3202 3215 0 +3202 3216 0 +3202 3559 1 +3202 3560 0 +3203 2843 1 +3203 3189 -1 +3203 3190 1 +3203 3191 -1 +3203 3192 1 +3203 3197 -1 +3203 3198 -1 +3203 3205 1 +3203 3206 0 +3203 3207 0 +3203 3208 1 +3203 3559 1 +3203 3560 1 +3204 2844 0 +3204 3189 1 +3204 3190 1 +3204 3191 1 +3204 3192 1 +3204 3197 1 +3204 3198 1 +3204 3203 -1 +3204 3205 0 +3204 3206 1 +3204 3207 -1 +3204 3208 -1 +3204 3559 -1 +3204 3560 0 +3205 3206 1 +3205 3229 0 +3206 3230 0 +3207 3208 1 +3207 3231 0 +3208 3232 1 +3209 2849 1 +3209 3205 1 +3209 3206 0 +3209 3213 1 +3209 3214 1 +3209 3215 0 +3209 3216 0 +3209 3567 1 +3209 3568 0 +3209 3581 1 +3209 3582 1 +3209 3583 1 +3209 3584 1 +3210 2850 0 +3210 3205 1 +3210 3206 1 +3210 3209 1 +3210 3213 1 +3210 3214 0 +3210 3215 0 +3210 3216 1 +3210 3567 1 +3210 3568 1 +3210 3581 0 +3210 3582 1 +3210 3583 1 +3210 3584 0 +3211 2851 -1 +3211 3205 0 +3211 3206 1 +3211 3213 1 +3211 3214 -1 +3211 3215 1 +3211 3216 -1 +3211 3557 1 +3211 3558 1 +3211 3559 1 +3211 3560 0 +3211 3567 1 +3211 3568 1 +3212 2852 0 +3212 3205 -1 +3212 3206 1 +3212 3211 1 +3212 3213 1 +3212 3214 1 +3212 3215 -1 +3212 3216 1 +3212 3557 1 +3212 3558 -1 +3212 3559 1 +3212 3560 1 +3212 3567 1 +3212 3568 1 +3213 3214 1 +3213 3237 0 +3214 3238 1 +3215 3216 0 +3215 3239 0 +3216 3240 1 +3217 2853 1 +3217 2854 0 +3217 2857 1 +3217 3215 1 +3217 3216 1 +3217 3221 0 +3217 3222 1 +3217 3223 1 +3217 3224 1 +3217 3229 1 +3217 3230 1 +3217 3231 -1 +3217 3232 0 +3218 2853 0 +3218 2854 1 +3218 2858 1 +3218 3215 0 +3218 3216 -1 +3218 3217 0 +3218 3221 1 +3218 3222 0 +3218 3223 0 +3218 3224 1 +3218 3229 1 +3218 3230 1 +3218 3231 1 +3218 3232 1 +3219 2853 1 +3219 2854 1 +3219 2859 1 +3219 3205 -1 +3219 3206 1 +3219 3207 0 +3219 3208 0 +3219 3215 0 +3219 3216 1 +3219 3221 0 +3219 3222 0 +3219 3223 1 +3219 3224 1 +3220 2853 1 +3220 2854 1 +3220 2860 1 +3220 3205 1 +3220 3206 1 +3220 3207 0 +3220 3208 1 +3220 3215 0 +3220 3216 1 +3220 3219 0 +3220 3221 1 +3220 3222 -1 +3220 3223 0 +3220 3224 0 +3221 3222 1 +3223 3224 1 +3225 2865 -1 +3225 3221 1 +3225 3222 1 +3225 3229 1 +3225 3230 0 +3225 3231 1 +3225 3232 0 +3225 3237 1 +3225 3238 0 +3225 3239 0 +3225 3240 1 +3225 3583 0 +3225 3584 0 +3226 2866 0 +3226 3221 1 +3226 3222 0 +3226 3225 1 +3226 3229 1 +3226 3230 1 +3226 3231 0 +3226 3232 0 +3226 3237 1 +3226 3238 1 +3226 3239 0 +3226 3240 1 +3226 3583 1 +3226 3584 0 +3227 2867 0 +3227 3213 1 +3227 3214 1 +3227 3215 1 +3227 3216 1 +3227 3221 1 +3227 3222 0 +3227 3229 1 +3227 3230 1 +3227 3231 0 +3227 3232 1 +3227 3583 -1 +3227 3584 0 +3228 2868 1 +3228 3213 1 +3228 3214 1 +3228 3215 0 +3228 3216 0 +3228 3221 1 +3228 3222 1 +3228 3227 1 +3228 3229 1 +3228 3230 1 +3228 3231 1 +3228 3232 0 +3228 3583 1 +3228 3584 0 +3229 3230 1 +3231 3232 1 +3233 2873 -1 +3233 3229 1 +3233 3230 1 +3233 3237 0 +3233 3238 1 +3233 3239 1 +3233 3240 1 +3233 3591 0 +3233 3592 1 +3234 2874 1 +3234 3229 0 +3234 3230 0 +3234 3233 1 +3234 3237 0 +3234 3238 0 +3234 3239 0 +3234 3240 1 +3234 3591 0 +3234 3592 1 +3235 2875 1 +3235 3229 -1 +3235 3230 0 +3235 3237 0 +3235 3238 0 +3235 3239 1 +3235 3240 1 +3235 3581 0 +3235 3582 1 +3235 3583 1 +3235 3584 1 +3235 3591 1 +3235 3592 0 +3236 2876 0 +3236 3229 1 +3236 3230 1 +3236 3235 1 +3236 3237 0 +3236 3238 1 +3236 3239 0 +3236 3240 -1 +3236 3581 1 +3236 3582 0 +3236 3583 1 +3236 3584 0 +3236 3591 0 +3236 3592 1 +3237 3238 1 +3239 3240 1 +3241 2881 1 +3241 3245 1 +3241 3246 1 +3241 3247 1 +3241 3248 1 +3241 3253 1 +3241 3254 0 +3241 3255 1 +3241 3256 1 +3242 2882 1 +3242 3241 1 +3242 3245 0 +3242 3246 0 +3242 3247 0 +3242 3248 0 +3242 3253 -1 +3242 3254 1 +3242 3255 0 +3242 3256 1 +3243 2883 0 +3243 3245 1 +3243 3246 1 +3243 3247 1 +3243 3248 1 +3244 2884 1 +3244 3243 -1 +3244 3245 0 +3244 3246 1 +3244 3247 1 +3244 3248 1 +3245 3246 0 +3245 3269 0 +3246 3270 0 +3247 3248 1 +3247 3271 0 +3248 3272 -1 +3249 2889 1 +3249 3245 0 +3249 3246 1 +3249 3253 1 +3249 3254 -1 +3249 3255 -1 +3249 3256 -1 +3249 3261 1 +3249 3262 1 +3249 3263 1 +3249 3264 1 +3249 3607 -1 +3249 3608 -1 +3250 2890 1 +3250 3245 0 +3250 3246 1 +3250 3249 -1 +3250 3253 -1 +3250 3254 -1 +3250 3255 1 +3250 3256 1 +3250 3261 1 +3250 3262 1 +3250 3263 0 +3250 3264 1 +3250 3607 1 +3250 3608 0 +3251 2891 1 +3251 3245 1 +3251 3246 0 +3251 3253 1 +3251 3254 0 +3251 3255 1 +3251 3256 1 +3251 3607 -1 +3251 3608 1 +3252 2892 1 +3252 3245 1 +3252 3246 1 +3252 3251 1 +3252 3253 1 +3252 3254 0 +3252 3255 1 +3252 3256 1 +3252 3607 0 +3252 3608 0 +3253 3254 1 +3253 3277 0 +3254 3278 -1 +3255 3256 0 +3255 3279 1 +3256 3280 1 +3257 2897 0 +3257 3253 0 +3257 3254 -1 +3257 3261 0 +3257 3262 1 +3257 3263 0 +3257 3264 -1 +3257 3615 0 +3257 3616 1 +3257 3629 1 +3257 3630 1 +3257 3631 1 +3257 3632 1 +3258 2898 1 +3258 3253 1 +3258 3254 1 +3258 3257 1 +3258 3261 1 +3258 3262 1 +3258 3263 1 +3258 3264 1 +3258 3615 1 +3258 3616 1 +3258 3629 0 +3258 3630 1 +3258 3631 -1 +3258 3632 1 +3259 2899 1 +3259 3253 1 +3259 3254 1 +3259 3261 1 +3259 3262 0 +3259 3263 1 +3259 3264 1 +3259 3605 1 +3259 3606 0 +3259 3607 1 +3259 3608 1 +3259 3615 0 +3259 3616 0 +3260 2900 1 +3260 3253 1 +3260 3254 0 +3260 3259 1 +3260 3261 -1 +3260 3262 1 +3260 3263 1 +3260 3264 1 +3260 3605 0 +3260 3606 0 +3260 3607 1 +3260 3608 0 +3260 3615 1 +3260 3616 0 +3261 3262 -1 +3261 3285 1 +3262 3286 0 +3263 3264 0 +3263 3287 1 +3264 3288 0 +3265 2901 1 +3265 2902 1 +3265 2905 1 +3265 3263 0 +3265 3264 1 +3265 3269 1 +3265 3270 0 +3265 3271 1 +3265 3272 1 +3265 3277 1 +3265 3278 0 +3265 3279 1 +3265 3280 1 +3266 2901 1 +3266 2902 1 +3266 2906 -1 +3266 3263 1 +3266 3264 1 +3266 3265 1 +3266 3269 0 +3266 3270 1 +3266 3271 1 +3266 3272 0 +3266 3277 1 +3266 3278 0 +3266 3279 1 +3266 3280 0 +3267 2901 0 +3267 2902 0 +3267 2907 1 +3267 3253 0 +3267 3254 -1 +3267 3255 -1 +3267 3256 1 +3267 3263 0 +3267 3264 1 +3267 3269 0 +3267 3270 1 +3267 3271 0 +3267 3272 -1 +3268 2901 -1 +3268 2902 1 +3268 2908 1 +3268 3253 1 +3268 3254 0 +3268 3255 0 +3268 3256 1 +3268 3263 0 +3268 3264 1 +3268 3267 1 +3268 3269 1 +3268 3270 1 +3268 3271 1 +3268 3272 1 +3269 3270 0 +3269 3293 1 +3270 3294 1 +3271 3272 0 +3271 3295 1 +3272 3296 1 +3273 2913 0 +3273 3269 0 +3273 3270 0 +3273 3277 0 +3273 3278 1 +3273 3279 0 +3273 3280 1 +3273 3285 0 +3273 3286 0 +3273 3287 0 +3273 3288 1 +3273 3631 1 +3273 3632 1 +3274 2914 1 +3274 3269 1 +3274 3270 1 +3274 3273 -1 +3274 3277 1 +3274 3278 0 +3274 3279 0 +3274 3280 1 +3274 3285 -1 +3274 3286 1 +3274 3287 1 +3274 3288 0 +3274 3631 1 +3274 3632 -1 +3275 2915 1 +3275 3261 0 +3275 3262 0 +3275 3263 0 +3275 3264 1 +3275 3269 1 +3275 3270 -1 +3275 3277 0 +3275 3278 -1 +3275 3279 0 +3275 3280 1 +3275 3631 0 +3275 3632 0 +3276 2916 1 +3276 3261 1 +3276 3262 1 +3276 3263 0 +3276 3264 1 +3276 3269 1 +3276 3270 1 +3276 3275 0 +3276 3277 0 +3276 3278 1 +3276 3279 1 +3276 3280 1 +3276 3631 1 +3276 3632 0 +3277 3278 1 +3277 3301 1 +3278 3302 0 +3279 3280 1 +3279 3303 1 +3280 3304 0 +3281 2921 0 +3281 3277 1 +3281 3278 0 +3281 3285 1 +3281 3286 1 +3281 3287 1 +3281 3288 0 +3281 3639 1 +3281 3640 0 +3281 3653 1 +3281 3654 1 +3281 3655 1 +3281 3656 0 +3282 2922 0 +3282 3277 -1 +3282 3278 0 +3282 3281 1 +3282 3285 0 +3282 3286 1 +3282 3287 -1 +3282 3288 1 +3282 3639 0 +3282 3640 1 +3282 3653 1 +3282 3654 -1 +3282 3655 1 +3282 3656 1 +3283 2923 1 +3283 3277 -1 +3283 3278 1 +3283 3285 -1 +3283 3286 1 +3283 3287 -1 +3283 3288 1 +3283 3629 1 +3283 3630 -1 +3283 3631 0 +3283 3632 1 +3283 3639 1 +3283 3640 0 +3284 2924 -1 +3284 3277 0 +3284 3278 0 +3284 3283 1 +3284 3285 1 +3284 3286 1 +3284 3287 1 +3284 3288 -1 +3284 3629 -1 +3284 3630 -1 +3284 3631 1 +3284 3632 0 +3284 3639 0 +3284 3640 1 +3285 3286 0 +3285 3309 1 +3286 3310 1 +3287 3288 0 +3287 3311 0 +3288 3312 -1 +3289 2925 1 +3289 2926 1 +3289 2929 1 +3289 3287 1 +3289 3288 1 +3289 3293 -1 +3289 3294 1 +3289 3295 1 +3289 3296 1 +3289 3301 0 +3289 3302 0 +3289 3303 0 +3289 3304 1 +3290 2925 1 +3290 2926 1 +3290 2930 1 +3290 3287 1 +3290 3288 0 +3290 3289 1 +3290 3293 -1 +3290 3294 0 +3290 3295 0 +3290 3296 0 +3290 3301 1 +3290 3302 1 +3290 3303 1 +3290 3304 -1 +3291 2925 0 +3291 2926 1 +3291 2931 1 +3291 3277 1 +3291 3278 0 +3291 3279 0 +3291 3280 1 +3291 3287 -1 +3291 3288 0 +3291 3293 0 +3291 3294 1 +3291 3295 -1 +3291 3296 1 +3292 2925 1 +3292 2926 -1 +3292 2932 -1 +3292 3277 1 +3292 3278 1 +3292 3279 1 +3292 3280 0 +3292 3287 1 +3292 3288 0 +3292 3291 1 +3292 3293 1 +3292 3294 1 +3292 3295 0 +3292 3296 1 +3293 3294 0 +3293 3317 0 +3294 3318 0 +3295 3296 1 +3295 3319 0 +3296 3320 0 +3297 2937 0 +3297 3293 0 +3297 3294 0 +3297 3301 1 +3297 3302 1 +3297 3303 1 +3297 3304 1 +3297 3309 0 +3297 3310 0 +3297 3311 0 +3297 3312 -1 +3297 3655 1 +3297 3656 1 +3298 2938 1 +3298 3293 1 +3298 3294 1 +3298 3297 0 +3298 3301 1 +3298 3302 1 +3298 3303 -1 +3298 3304 1 +3298 3309 1 +3298 3310 -1 +3298 3311 1 +3298 3312 0 +3298 3655 1 +3298 3656 -1 +3299 2939 1 +3299 3285 1 +3299 3286 1 +3299 3287 1 +3299 3288 0 +3299 3293 0 +3299 3294 -1 +3299 3301 -1 +3299 3302 0 +3299 3303 1 +3299 3304 -1 +3299 3655 0 +3299 3656 1 +3300 2940 0 +3300 3285 0 +3300 3286 1 +3300 3287 1 +3300 3288 1 +3300 3293 1 +3300 3294 1 +3300 3299 1 +3300 3301 1 +3300 3302 1 +3300 3303 -1 +3300 3304 1 +3300 3655 0 +3300 3656 0 +3301 3302 1 +3301 3325 0 +3302 3326 -1 +3303 3304 0 +3303 3327 0 +3304 3328 0 +3305 2945 0 +3305 3301 0 +3305 3302 0 +3305 3309 0 +3305 3310 -1 +3305 3311 -1 +3305 3312 0 +3305 3663 -1 +3305 3664 1 +3305 3677 -1 +3305 3678 1 +3305 3679 1 +3305 3680 0 +3306 2946 0 +3306 3301 1 +3306 3302 1 +3306 3305 1 +3306 3309 1 +3306 3310 1 +3306 3311 1 +3306 3312 0 +3306 3663 1 +3306 3664 1 +3306 3677 1 +3306 3678 1 +3306 3679 1 +3306 3680 0 +3307 2947 0 +3307 3301 1 +3307 3302 1 +3307 3309 0 +3307 3310 1 +3307 3311 0 +3307 3312 -1 +3307 3653 1 +3307 3654 -1 +3307 3655 1 +3307 3656 1 +3307 3663 1 +3307 3664 0 +3308 2948 1 +3308 3301 0 +3308 3302 1 +3308 3307 1 +3308 3309 0 +3308 3310 1 +3308 3311 1 +3308 3312 1 +3308 3653 -1 +3308 3654 1 +3308 3655 0 +3308 3656 0 +3308 3663 1 +3308 3664 1 +3309 3310 -1 +3309 3333 0 +3310 3334 1 +3311 3312 1 +3311 3335 0 +3312 3336 0 +3313 2949 1 +3313 2950 0 +3313 2953 1 +3313 3311 1 +3313 3312 1 +3313 3317 0 +3313 3318 1 +3313 3319 1 +3313 3320 1 +3313 3325 1 +3313 3326 -1 +3313 3327 1 +3313 3328 1 +3314 2949 1 +3314 2950 1 +3314 2954 0 +3314 3311 1 +3314 3312 1 +3314 3313 1 +3314 3317 1 +3314 3318 0 +3314 3319 0 +3314 3320 1 +3314 3325 1 +3314 3326 1 +3314 3327 1 +3314 3328 0 +3315 2949 1 +3315 2950 -1 +3315 2955 1 +3315 3301 0 +3315 3302 -1 +3315 3303 1 +3315 3304 0 +3315 3311 0 +3315 3312 1 +3315 3317 0 +3315 3318 -1 +3315 3319 0 +3315 3320 1 +3316 2949 0 +3316 2950 1 +3316 2956 0 +3316 3301 1 +3316 3302 1 +3316 3303 0 +3316 3304 1 +3316 3311 0 +3316 3312 1 +3316 3315 -1 +3316 3317 1 +3316 3318 0 +3316 3319 -1 +3316 3320 1 +3317 3318 0 +3317 3341 1 +3318 3342 1 +3319 3320 1 +3319 3343 1 +3320 3344 1 +3321 2961 0 +3321 3317 0 +3321 3318 -1 +3321 3325 0 +3321 3326 1 +3321 3327 1 +3321 3328 0 +3321 3333 1 +3321 3334 -1 +3321 3335 1 +3321 3336 1 +3321 3679 0 +3321 3680 1 +3322 2962 1 +3322 3317 1 +3322 3318 0 +3322 3321 1 +3322 3325 -1 +3322 3326 0 +3322 3327 1 +3322 3328 -1 +3322 3333 1 +3322 3334 1 +3322 3335 0 +3322 3336 -1 +3322 3679 0 +3322 3680 1 +3323 2963 1 +3323 3309 -1 +3323 3310 1 +3323 3311 1 +3323 3312 1 +3323 3317 1 +3323 3318 0 +3323 3325 0 +3323 3326 0 +3323 3327 1 +3323 3328 1 +3323 3679 0 +3323 3680 1 +3324 2964 1 +3324 3309 0 +3324 3310 0 +3324 3311 1 +3324 3312 -1 +3324 3317 1 +3324 3318 0 +3324 3323 1 +3324 3325 1 +3324 3326 -1 +3324 3327 0 +3324 3328 0 +3324 3679 1 +3324 3680 0 +3325 3326 1 +3325 3349 0 +3326 3350 0 +3327 3328 1 +3327 3351 1 +3328 3352 1 +3329 3325 1 +3329 3326 0 +3329 3333 0 +3329 3334 1 +3329 3335 1 +3329 3336 1 +3329 3687 1 +3329 3688 1 +3329 3701 0 +3329 3702 1 +3329 3703 0 +3329 3704 1 +3330 2970 0 +3330 3325 0 +3330 3326 0 +3330 3329 0 +3330 3333 1 +3330 3334 0 +3330 3335 1 +3330 3336 1 +3330 3687 0 +3330 3688 1 +3330 3701 0 +3330 3702 -1 +3330 3703 1 +3330 3704 1 +3331 2971 -1 +3331 3325 1 +3331 3326 0 +3331 3333 0 +3331 3334 0 +3331 3335 -1 +3331 3336 -1 +3331 3677 0 +3331 3678 1 +3331 3679 0 +3331 3680 -1 +3331 3687 1 +3331 3688 1 +3332 2972 1 +3332 3325 1 +3332 3326 1 +3332 3331 0 +3332 3333 0 +3332 3334 1 +3332 3335 1 +3332 3336 0 +3332 3677 0 +3332 3678 1 +3332 3679 0 +3332 3680 1 +3332 3687 1 +3332 3688 0 +3333 3334 1 +3333 3357 0 +3334 3358 1 +3335 3336 0 +3335 3359 1 +3336 3360 1 +3337 2973 1 +3337 2974 -1 +3337 2977 1 +3337 3335 0 +3337 3336 1 +3337 3341 1 +3337 3342 1 +3337 3343 1 +3337 3344 1 +3337 3349 1 +3337 3350 -1 +3337 3351 1 +3337 3352 1 +3338 2973 0 +3338 2974 0 +3338 2978 0 +3338 3335 0 +3338 3336 1 +3338 3337 0 +3338 3341 1 +3338 3342 0 +3338 3343 0 +3338 3344 -1 +3338 3349 1 +3338 3350 1 +3338 3351 0 +3338 3352 1 +3339 2973 0 +3339 2974 1 +3339 2979 1 +3339 3325 0 +3339 3326 1 +3339 3327 1 +3339 3328 1 +3339 3335 0 +3339 3336 0 +3339 3341 1 +3339 3342 1 +3339 3343 1 +3339 3344 1 +3340 2973 0 +3340 2974 -1 +3340 2980 1 +3340 3325 0 +3340 3326 0 +3340 3327 0 +3340 3328 -1 +3340 3335 1 +3340 3336 1 +3340 3339 -1 +3340 3341 0 +3340 3342 1 +3340 3343 0 +3340 3344 1 +3341 3342 -1 +3341 3365 0 +3342 3366 1 +3343 3344 1 +3343 3367 1 +3344 3368 1 +3345 2985 -1 +3345 3341 1 +3345 3342 1 +3345 3349 0 +3345 3350 0 +3345 3351 1 +3345 3352 1 +3345 3357 -1 +3345 3358 1 +3345 3359 0 +3345 3360 1 +3345 3703 1 +3345 3704 1 +3346 2986 1 +3346 3341 -1 +3346 3342 1 +3346 3345 1 +3346 3349 1 +3346 3350 1 +3346 3351 1 +3346 3352 1 +3346 3357 1 +3346 3358 1 +3346 3359 0 +3346 3360 1 +3346 3703 1 +3346 3704 1 +3347 2987 0 +3347 3333 1 +3347 3334 0 +3347 3335 0 +3347 3336 0 +3347 3341 -1 +3347 3342 0 +3347 3349 1 +3347 3350 1 +3347 3351 1 +3347 3352 1 +3347 3703 0 +3347 3704 1 +3348 2988 0 +3348 3333 0 +3348 3334 1 +3348 3335 0 +3348 3336 0 +3348 3341 0 +3348 3342 1 +3348 3347 -1 +3348 3349 0 +3348 3350 0 +3348 3351 1 +3348 3352 0 +3348 3703 1 +3348 3704 -1 +3349 3350 0 +3349 3373 -1 +3350 3374 1 +3351 3352 1 +3351 3375 1 +3352 3376 1 +3353 2993 1 +3353 3349 0 +3353 3350 0 +3353 3357 1 +3353 3358 1 +3353 3359 1 +3353 3360 1 +3353 3711 0 +3353 3712 1 +3353 3725 1 +3353 3726 1 +3353 3727 1 +3353 3728 0 +3354 2994 1 +3354 3349 1 +3354 3350 1 +3354 3353 0 +3354 3357 1 +3354 3358 1 +3354 3359 0 +3354 3360 1 +3354 3711 1 +3354 3712 0 +3354 3725 0 +3354 3726 0 +3354 3727 1 +3354 3728 0 +3355 2995 0 +3355 3349 0 +3355 3350 1 +3355 3357 1 +3355 3358 1 +3355 3359 0 +3355 3360 0 +3355 3701 0 +3355 3702 1 +3355 3703 0 +3355 3704 1 +3355 3711 0 +3355 3712 1 +3356 2996 1 +3356 3349 0 +3356 3350 0 +3356 3355 1 +3356 3357 0 +3356 3358 1 +3356 3359 1 +3356 3360 1 +3356 3701 0 +3356 3702 1 +3356 3703 0 +3356 3704 1 +3356 3711 1 +3356 3712 1 +3357 3358 0 +3357 3381 0 +3358 3382 1 +3359 3360 1 +3359 3383 0 +3360 3384 0 +3361 2997 1 +3361 2998 1 +3361 3001 1 +3361 3359 1 +3361 3360 1 +3361 3365 1 +3361 3366 0 +3361 3367 0 +3361 3368 1 +3361 3373 1 +3361 3374 1 +3361 3375 0 +3361 3376 1 +3362 2997 0 +3362 2998 1 +3362 3002 1 +3362 3359 1 +3362 3360 1 +3362 3361 1 +3362 3365 1 +3362 3366 0 +3362 3367 0 +3362 3368 1 +3362 3373 0 +3362 3374 1 +3362 3375 1 +3362 3376 0 +3363 2997 1 +3363 2998 1 +3363 3003 1 +3363 3349 1 +3363 3350 1 +3363 3351 1 +3363 3352 0 +3363 3359 1 +3363 3360 1 +3363 3365 0 +3363 3366 1 +3363 3367 0 +3363 3368 -1 +3364 2997 1 +3364 2998 1 +3364 3004 1 +3364 3349 0 +3364 3350 0 +3364 3351 0 +3364 3352 1 +3364 3359 1 +3364 3360 1 +3364 3363 1 +3364 3365 0 +3364 3366 1 +3364 3367 0 +3364 3368 1 +3365 3366 1 +3365 3389 1 +3366 3390 1 +3367 3368 1 +3367 3391 0 +3368 3392 0 +3369 3009 1 +3369 3365 1 +3369 3366 1 +3369 3373 0 +3369 3374 1 +3369 3375 0 +3369 3376 1 +3369 3381 1 +3369 3382 1 +3369 3383 1 +3369 3384 0 +3369 3727 0 +3369 3728 1 +3370 3010 0 +3370 3365 -1 +3370 3366 0 +3370 3369 1 +3370 3373 0 +3370 3374 0 +3370 3375 1 +3370 3376 1 +3370 3381 0 +3370 3382 1 +3370 3383 1 +3370 3384 0 +3370 3727 1 +3370 3728 1 +3371 3011 1 +3371 3357 -1 +3371 3358 1 +3371 3359 0 +3371 3360 1 +3371 3365 1 +3371 3366 0 +3371 3373 1 +3371 3374 1 +3371 3375 1 +3371 3376 -1 +3371 3727 0 +3371 3728 1 +3372 3012 0 +3372 3357 1 +3372 3358 1 +3372 3359 0 +3372 3360 1 +3372 3365 -1 +3372 3366 1 +3372 3371 -1 +3372 3373 1 +3372 3374 -1 +3372 3375 1 +3372 3376 0 +3372 3727 0 +3372 3728 1 +3373 3374 1 +3373 3397 -1 +3374 3398 1 +3375 3376 -1 +3375 3399 1 +3376 3400 1 +3377 3017 0 +3377 3373 1 +3377 3374 1 +3377 3381 0 +3377 3382 1 +3377 3383 1 +3377 3384 1 +3377 3735 0 +3377 3736 1 +3377 3749 1 +3377 3750 1 +3377 3751 0 +3377 3752 0 +3378 3018 0 +3378 3373 1 +3378 3374 0 +3378 3377 0 +3378 3381 0 +3378 3382 1 +3378 3383 1 +3378 3384 1 +3378 3735 0 +3378 3736 0 +3378 3749 0 +3378 3750 1 +3378 3751 0 +3378 3752 0 +3379 3019 -1 +3379 3373 -1 +3379 3374 1 +3379 3381 1 +3379 3382 0 +3379 3383 0 +3379 3384 0 +3379 3725 1 +3379 3726 1 +3379 3727 0 +3379 3728 0 +3379 3735 1 +3379 3736 0 +3380 3020 0 +3380 3373 -1 +3380 3374 1 +3380 3379 1 +3380 3381 1 +3380 3382 1 +3380 3383 1 +3380 3384 -1 +3380 3725 1 +3380 3726 0 +3380 3727 1 +3380 3728 -1 +3380 3735 1 +3380 3736 0 +3381 3382 0 +3381 3405 0 +3382 3406 1 +3383 3384 1 +3383 3407 1 +3384 3408 0 +3385 3021 0 +3385 3022 0 +3385 3025 -1 +3385 3383 0 +3385 3384 1 +3385 3389 1 +3385 3390 1 +3385 3391 1 +3385 3392 -1 +3385 3397 1 +3385 3398 1 +3385 3399 1 +3385 3400 0 +3386 3021 0 +3386 3022 1 +3386 3026 1 +3386 3383 1 +3386 3384 0 +3386 3385 1 +3386 3389 0 +3386 3390 1 +3386 3391 1 +3386 3392 0 +3386 3397 0 +3386 3398 1 +3386 3399 0 +3386 3400 0 +3387 3021 1 +3387 3022 1 +3387 3027 1 +3387 3373 1 +3387 3374 1 +3387 3375 0 +3387 3376 1 +3387 3383 0 +3387 3384 0 +3387 3389 1 +3387 3390 -1 +3387 3391 -1 +3387 3392 1 +3388 3021 1 +3388 3022 0 +3388 3028 1 +3388 3373 -1 +3388 3374 0 +3388 3375 1 +3388 3376 0 +3388 3383 0 +3388 3384 0 +3388 3387 -1 +3388 3389 0 +3388 3390 0 +3388 3391 1 +3388 3392 -1 +3389 3390 0 +3389 3413 1 +3390 3414 1 +3391 3392 1 +3391 3415 1 +3392 3416 1 +3393 3033 1 +3393 3389 1 +3393 3390 1 +3393 3397 0 +3393 3398 0 +3393 3399 1 +3393 3400 -1 +3393 3405 1 +3393 3406 0 +3393 3407 1 +3393 3408 0 +3393 3751 0 +3393 3752 0 +3394 3034 -1 +3394 3389 1 +3394 3390 1 +3394 3393 1 +3394 3397 1 +3394 3398 0 +3394 3399 0 +3394 3400 0 +3394 3405 1 +3394 3406 0 +3394 3407 1 +3394 3408 -1 +3394 3751 0 +3394 3752 1 +3395 3035 0 +3395 3381 -1 +3395 3382 -1 +3395 3383 1 +3395 3384 1 +3395 3389 1 +3395 3390 0 +3395 3397 1 +3395 3398 -1 +3395 3399 0 +3395 3400 0 +3395 3751 0 +3395 3752 1 +3396 3036 1 +3396 3381 0 +3396 3382 1 +3396 3383 1 +3396 3384 0 +3396 3389 0 +3396 3390 0 +3396 3395 0 +3396 3397 1 +3396 3398 1 +3396 3399 1 +3396 3400 -1 +3396 3751 1 +3396 3752 1 +3397 3398 0 +3397 3421 1 +3398 3422 0 +3399 3400 0 +3399 3423 0 +3400 3424 0 +3401 3041 0 +3401 3397 1 +3401 3398 1 +3401 3405 0 +3401 3406 0 +3401 3407 1 +3401 3408 1 +3401 3759 -1 +3401 3760 1 +3401 3773 1 +3401 3774 1 +3401 3775 1 +3401 3776 1 +3402 3042 1 +3402 3397 0 +3402 3398 1 +3402 3401 -1 +3402 3405 0 +3402 3406 1 +3402 3407 1 +3402 3408 1 +3402 3759 0 +3402 3760 1 +3402 3773 1 +3402 3774 0 +3402 3775 0 +3402 3776 1 +3403 3043 0 +3403 3397 1 +3403 3398 0 +3403 3405 1 +3403 3406 0 +3403 3407 0 +3403 3408 1 +3403 3749 0 +3403 3750 0 +3403 3751 0 +3403 3752 1 +3403 3759 0 +3403 3760 1 +3404 3044 1 +3404 3397 0 +3404 3398 -1 +3404 3403 0 +3404 3405 1 +3404 3406 0 +3404 3407 0 +3404 3408 1 +3404 3749 1 +3404 3750 0 +3404 3751 0 +3404 3752 1 +3404 3759 1 +3404 3760 1 +3405 3406 0 +3405 3429 -1 +3406 3430 0 +3407 3408 1 +3407 3431 0 +3408 3432 0 +3409 3045 1 +3409 3046 1 +3409 3049 1 +3409 3407 1 +3409 3408 1 +3409 3413 -1 +3409 3414 0 +3409 3415 1 +3409 3416 0 +3409 3421 0 +3409 3422 1 +3409 3423 0 +3409 3424 1 +3410 3045 1 +3410 3046 1 +3410 3050 -1 +3410 3407 0 +3410 3408 0 +3410 3409 0 +3410 3413 -1 +3410 3414 -1 +3410 3415 0 +3410 3416 1 +3410 3421 0 +3410 3422 1 +3410 3423 1 +3410 3424 0 +3411 3045 -1 +3411 3046 1 +3411 3051 0 +3411 3397 0 +3411 3398 1 +3411 3399 0 +3411 3400 0 +3411 3407 0 +3411 3408 1 +3411 3413 1 +3411 3414 0 +3411 3415 1 +3411 3416 1 +3412 3045 1 +3412 3046 1 +3412 3052 -1 +3412 3397 1 +3412 3398 1 +3412 3399 1 +3412 3400 0 +3412 3407 -1 +3412 3408 0 +3412 3411 0 +3412 3413 1 +3412 3414 0 +3412 3415 -1 +3412 3416 1 +3413 3414 1 +3413 3437 1 +3414 3438 1 +3415 3416 0 +3415 3439 0 +3416 3440 0 +3417 3057 0 +3417 3413 0 +3417 3414 -1 +3417 3421 0 +3417 3422 1 +3417 3423 1 +3417 3424 0 +3417 3429 1 +3417 3430 0 +3417 3431 0 +3417 3432 0 +3417 3775 1 +3417 3776 -1 +3418 3058 1 +3418 3413 1 +3418 3414 0 +3418 3417 1 +3418 3421 1 +3418 3422 1 +3418 3423 1 +3418 3424 0 +3418 3429 1 +3418 3430 1 +3418 3431 1 +3418 3432 -1 +3418 3775 1 +3418 3776 0 +3419 3059 1 +3419 3405 1 +3419 3406 1 +3419 3407 1 +3419 3408 0 +3419 3413 1 +3419 3414 1 +3419 3421 0 +3419 3422 1 +3419 3423 0 +3419 3424 1 +3419 3775 1 +3419 3776 1 +3420 3060 0 +3420 3405 1 +3420 3406 0 +3420 3407 1 +3420 3408 0 +3420 3413 1 +3420 3414 1 +3420 3419 1 +3420 3421 0 +3420 3422 0 +3420 3423 1 +3420 3424 1 +3420 3775 -1 +3420 3776 0 +3421 3422 1 +3421 3445 0 +3422 3446 1 +3423 3424 1 +3423 3447 1 +3424 3448 0 +3425 3065 1 +3425 3421 0 +3425 3422 1 +3425 3429 0 +3425 3430 0 +3425 3431 0 +3425 3432 -1 +3425 3783 -1 +3425 3784 1 +3425 3797 1 +3425 3798 0 +3425 3799 0 +3425 3800 1 +3426 3066 -1 +3426 3421 -1 +3426 3422 1 +3426 3425 0 +3426 3429 1 +3426 3430 1 +3426 3431 0 +3426 3432 0 +3426 3783 0 +3426 3784 1 +3426 3797 1 +3426 3798 1 +3426 3799 -1 +3426 3800 1 +3427 3067 1 +3427 3421 0 +3427 3422 0 +3427 3429 1 +3427 3430 1 +3427 3431 1 +3427 3432 -1 +3427 3773 0 +3427 3774 1 +3427 3775 1 +3427 3776 -1 +3427 3783 0 +3427 3784 0 +3428 3068 1 +3428 3421 1 +3428 3422 -1 +3428 3427 -1 +3428 3429 0 +3428 3430 1 +3428 3431 1 +3428 3432 1 +3428 3773 1 +3428 3774 0 +3428 3775 0 +3428 3776 1 +3428 3783 1 +3428 3784 1 +3429 3430 1 +3429 3453 -1 +3430 3454 1 +3431 3432 0 +3431 3455 1 +3432 3456 1 +3433 3069 1 +3433 3070 0 +3433 3073 0 +3433 3431 1 +3433 3432 0 +3433 3437 0 +3433 3438 0 +3433 3439 1 +3433 3440 1 +3433 3445 1 +3433 3446 1 +3433 3447 0 +3433 3448 0 +3434 3069 1 +3434 3070 0 +3434 3074 1 +3434 3431 1 +3434 3432 0 +3434 3433 1 +3434 3437 1 +3434 3438 1 +3434 3439 1 +3434 3440 1 +3434 3445 0 +3434 3446 1 +3434 3447 1 +3434 3448 0 +3435 3069 1 +3435 3070 1 +3435 3075 1 +3435 3421 0 +3435 3422 1 +3435 3423 1 +3435 3424 0 +3435 3431 0 +3435 3432 -1 +3435 3437 1 +3435 3438 0 +3435 3439 1 +3435 3440 1 +3436 3069 0 +3436 3070 0 +3436 3076 -1 +3436 3421 1 +3436 3422 1 +3436 3423 -1 +3436 3424 -1 +3436 3431 0 +3436 3432 -1 +3436 3435 1 +3436 3437 0 +3436 3438 1 +3436 3439 0 +3436 3440 1 +3437 3438 -1 +3437 3461 1 +3438 3462 1 +3439 3440 1 +3439 3463 1 +3440 3464 1 +3441 3081 1 +3441 3437 1 +3441 3438 0 +3441 3445 1 +3441 3446 1 +3441 3447 1 +3441 3448 1 +3441 3453 1 +3441 3454 0 +3441 3455 0 +3441 3456 0 +3441 3799 1 +3441 3800 -1 +3442 3082 1 +3442 3437 0 +3442 3438 1 +3442 3441 1 +3442 3445 1 +3442 3446 1 +3442 3447 -1 +3442 3448 0 +3442 3453 0 +3442 3454 1 +3442 3455 1 +3442 3456 0 +3442 3799 1 +3442 3800 0 +3443 3083 0 +3443 3429 1 +3443 3430 1 +3443 3431 0 +3443 3432 1 +3443 3437 1 +3443 3438 0 +3443 3445 0 +3443 3446 0 +3443 3447 -1 +3443 3448 1 +3443 3799 1 +3443 3800 1 +3444 3084 1 +3444 3429 0 +3444 3430 1 +3444 3431 0 +3444 3432 0 +3444 3437 1 +3444 3438 1 +3444 3443 0 +3444 3445 0 +3444 3446 1 +3444 3447 0 +3444 3448 0 +3444 3799 1 +3444 3800 0 +3445 3446 1 +3445 3469 0 +3446 3470 1 +3447 3448 1 +3447 3471 0 +3448 3472 1 +3449 3089 1 +3449 3445 0 +3449 3446 0 +3449 3453 0 +3449 3454 1 +3449 3455 0 +3449 3456 0 +3449 3807 0 +3449 3808 1 +3449 3821 1 +3449 3822 1 +3449 3823 1 +3449 3824 1 +3450 3090 0 +3450 3445 0 +3450 3446 0 +3450 3449 0 +3450 3453 0 +3450 3454 1 +3450 3455 1 +3450 3456 1 +3450 3807 1 +3450 3808 0 +3450 3821 1 +3450 3822 0 +3450 3823 1 +3450 3824 0 +3451 3091 0 +3451 3445 0 +3451 3446 1 +3451 3453 0 +3451 3454 1 +3451 3455 -1 +3451 3456 1 +3451 3797 0 +3451 3798 1 +3451 3799 0 +3451 3800 0 +3451 3807 0 +3451 3808 1 +3452 3092 0 +3452 3445 1 +3452 3446 0 +3452 3451 1 +3452 3453 0 +3452 3454 1 +3452 3455 0 +3452 3456 0 +3452 3797 0 +3452 3798 1 +3452 3799 1 +3452 3800 1 +3452 3807 1 +3452 3808 1 +3453 3454 1 +3453 3477 -1 +3454 3478 0 +3455 3456 -1 +3455 3479 0 +3456 3480 0 +3457 3093 1 +3457 3094 1 +3457 3097 0 +3457 3455 1 +3457 3456 0 +3457 3461 1 +3457 3462 1 +3457 3463 0 +3457 3464 1 +3457 3469 -1 +3457 3470 0 +3457 3471 0 +3457 3472 0 +3458 3093 1 +3458 3094 1 +3458 3098 1 +3458 3455 0 +3458 3456 1 +3458 3457 0 +3458 3461 0 +3458 3462 1 +3458 3463 0 +3458 3464 0 +3458 3469 1 +3458 3470 0 +3458 3471 0 +3458 3472 0 +3459 3093 1 +3459 3094 1 +3459 3099 0 +3459 3445 0 +3459 3446 1 +3459 3447 1 +3459 3448 0 +3459 3455 0 +3459 3456 1 +3459 3461 -1 +3459 3462 1 +3459 3463 0 +3459 3464 1 +3460 3093 1 +3460 3094 1 +3460 3100 0 +3460 3445 1 +3460 3446 0 +3460 3447 0 +3460 3448 1 +3460 3455 0 +3460 3456 0 +3460 3459 0 +3460 3461 1 +3460 3462 -1 +3460 3463 1 +3460 3464 1 +3461 3462 1 +3461 3485 1 +3462 3486 0 +3463 3464 0 +3463 3487 -1 +3464 3488 -1 +3465 3105 0 +3465 3461 1 +3465 3462 1 +3465 3469 0 +3465 3470 1 +3465 3471 0 +3465 3472 1 +3465 3477 1 +3465 3478 1 +3465 3479 1 +3465 3480 1 +3465 3823 0 +3465 3824 1 +3466 3106 0 +3466 3461 1 +3466 3462 0 +3466 3465 1 +3466 3469 1 +3466 3470 1 +3466 3471 1 +3466 3472 1 +3466 3477 1 +3466 3478 0 +3466 3479 -1 +3466 3480 1 +3466 3823 1 +3466 3824 1 +3467 3107 1 +3467 3453 0 +3467 3454 0 +3467 3455 1 +3467 3456 0 +3467 3461 -1 +3467 3462 1 +3467 3469 1 +3467 3470 1 +3467 3471 1 +3467 3472 1 +3467 3823 1 +3467 3824 1 +3468 3108 1 +3468 3453 1 +3468 3454 1 +3468 3455 1 +3468 3456 1 +3468 3461 1 +3468 3462 1 +3468 3467 0 +3468 3469 -1 +3468 3470 -1 +3468 3471 0 +3468 3472 1 +3468 3823 1 +3468 3824 0 +3469 3470 1 +3469 3493 0 +3470 3494 0 +3471 3472 1 +3471 3495 -1 +3472 3496 -1 +3473 3113 1 +3473 3469 0 +3473 3470 0 +3473 3477 -1 +3473 3478 1 +3473 3479 1 +3473 3480 1 +3473 3831 0 +3473 3832 1 +3473 3845 0 +3473 3846 1 +3473 3847 0 +3473 3848 -1 +3474 3114 1 +3474 3469 1 +3474 3470 1 +3474 3473 0 +3474 3477 0 +3474 3478 1 +3474 3479 0 +3474 3480 0 +3474 3831 0 +3474 3832 0 +3474 3845 0 +3474 3846 1 +3474 3847 0 +3474 3848 1 +3475 3115 1 +3475 3469 1 +3475 3470 1 +3475 3477 1 +3475 3478 1 +3475 3479 1 +3475 3480 1 +3475 3821 0 +3475 3822 -1 +3475 3823 1 +3475 3824 1 +3475 3831 1 +3475 3832 1 +3476 3116 1 +3476 3469 0 +3476 3470 1 +3476 3475 0 +3476 3477 1 +3476 3478 1 +3476 3479 1 +3476 3480 1 +3476 3821 1 +3476 3822 1 +3476 3823 1 +3476 3824 1 +3476 3831 1 +3476 3832 0 +3477 3478 0 +3477 3501 0 +3478 3502 0 +3479 3480 1 +3479 3503 -1 +3480 3504 1 +3481 3117 1 +3481 3118 1 +3481 3121 1 +3481 3479 1 +3481 3480 0 +3481 3485 1 +3481 3486 1 +3481 3487 -1 +3481 3488 1 +3481 3493 1 +3481 3494 0 +3481 3495 -1 +3481 3496 0 +3482 3117 1 +3482 3118 1 +3482 3122 -1 +3482 3479 0 +3482 3480 1 +3482 3481 1 +3482 3485 -1 +3482 3486 0 +3482 3487 1 +3482 3488 0 +3482 3493 0 +3482 3494 1 +3482 3495 1 +3482 3496 0 +3483 3117 0 +3483 3118 1 +3483 3123 0 +3483 3469 -1 +3483 3470 1 +3483 3471 1 +3483 3472 0 +3483 3479 1 +3483 3480 1 +3483 3485 1 +3483 3486 1 +3483 3487 1 +3483 3488 0 +3484 3117 0 +3484 3118 1 +3484 3124 1 +3484 3469 0 +3484 3470 0 +3484 3471 1 +3484 3472 0 +3484 3479 1 +3484 3480 1 +3484 3483 0 +3484 3485 1 +3484 3486 0 +3484 3487 1 +3484 3488 0 +3485 3486 1 +3485 3509 0 +3486 3510 1 +3487 3488 0 +3487 3511 1 +3488 3512 1 +3489 3129 0 +3489 3485 1 +3489 3486 -1 +3489 3493 1 +3489 3494 1 +3489 3495 0 +3489 3496 1 +3489 3501 1 +3489 3502 0 +3489 3503 0 +3489 3504 0 +3489 3847 0 +3489 3848 1 +3490 3130 1 +3490 3485 1 +3490 3486 0 +3490 3489 1 +3490 3493 1 +3490 3494 1 +3490 3495 -1 +3490 3496 1 +3490 3501 0 +3490 3502 0 +3490 3503 1 +3490 3504 -1 +3490 3847 1 +3490 3848 0 +3491 3131 -1 +3491 3477 0 +3491 3478 0 +3491 3479 1 +3491 3480 0 +3491 3485 -1 +3491 3486 0 +3491 3493 1 +3491 3494 1 +3491 3495 1 +3491 3496 1 +3491 3847 1 +3491 3848 1 +3492 3132 0 +3492 3477 0 +3492 3478 0 +3492 3479 0 +3492 3480 0 +3492 3485 1 +3492 3486 0 +3492 3491 1 +3492 3493 -1 +3492 3494 0 +3492 3495 0 +3492 3496 0 +3492 3847 1 +3492 3848 1 +3493 3494 1 +3493 3517 0 +3494 3518 1 +3495 3496 1 +3495 3519 1 +3496 3520 0 +3497 3137 1 +3497 3493 -1 +3497 3494 1 +3497 3501 1 +3497 3502 1 +3497 3503 1 +3497 3504 1 +3497 3855 1 +3497 3856 0 +3497 3869 1 +3497 3870 1 +3497 3871 0 +3497 3872 1 +3498 3138 1 +3498 3493 0 +3498 3494 1 +3498 3497 1 +3498 3501 1 +3498 3502 1 +3498 3503 1 +3498 3504 1 +3498 3855 1 +3498 3856 1 +3498 3869 1 +3498 3870 0 +3498 3871 1 +3498 3872 0 +3499 3139 1 +3499 3493 0 +3499 3494 1 +3499 3501 0 +3499 3502 0 +3499 3503 0 +3499 3504 0 +3499 3845 1 +3499 3846 0 +3499 3847 -1 +3499 3848 1 +3499 3855 1 +3499 3856 1 +3500 3140 1 +3500 3493 1 +3500 3494 1 +3500 3499 0 +3500 3501 1 +3500 3502 1 +3500 3503 -1 +3500 3504 1 +3500 3845 0 +3500 3846 1 +3500 3847 -1 +3500 3848 1 +3500 3855 1 +3500 3856 1 +3501 3502 0 +3501 3525 0 +3502 3526 1 +3503 3504 1 +3503 3527 0 +3504 3528 1 +3505 3141 0 +3505 3142 0 +3505 3145 1 +3505 3503 0 +3505 3504 1 +3505 3509 1 +3505 3510 1 +3505 3511 1 +3505 3512 0 +3505 3517 1 +3505 3518 0 +3505 3519 0 +3505 3520 1 +3506 3141 0 +3506 3142 0 +3506 3146 1 +3506 3503 -1 +3506 3504 1 +3506 3505 1 +3506 3509 1 +3506 3510 1 +3506 3511 0 +3506 3512 0 +3506 3517 1 +3506 3518 0 +3506 3519 -1 +3506 3520 1 +3507 3141 0 +3507 3142 0 +3507 3147 1 +3507 3493 1 +3507 3494 1 +3507 3495 0 +3507 3496 0 +3507 3503 0 +3507 3504 1 +3507 3509 0 +3507 3510 1 +3507 3511 1 +3507 3512 1 +3508 3141 1 +3508 3142 -1 +3508 3148 1 +3508 3493 1 +3508 3494 0 +3508 3495 1 +3508 3496 1 +3508 3503 0 +3508 3504 1 +3508 3507 1 +3508 3509 0 +3508 3510 1 +3508 3511 1 +3508 3512 1 +3509 3510 1 +3509 3533 1 +3510 3534 1 +3511 3512 1 +3511 3535 0 +3512 3536 1 +3513 3153 1 +3513 3509 0 +3513 3510 1 +3513 3517 1 +3513 3518 -1 +3513 3519 1 +3513 3520 0 +3513 3525 1 +3513 3526 0 +3513 3527 1 +3513 3528 -1 +3513 3871 0 +3513 3872 0 +3514 3154 1 +3514 3509 1 +3514 3510 0 +3514 3513 -1 +3514 3517 1 +3514 3518 1 +3514 3519 1 +3514 3520 0 +3514 3525 1 +3514 3526 1 +3514 3527 0 +3514 3528 1 +3514 3871 1 +3514 3872 1 +3515 3155 1 +3515 3501 0 +3515 3502 1 +3515 3503 1 +3515 3504 0 +3515 3509 1 +3515 3510 1 +3515 3517 1 +3515 3518 1 +3515 3519 1 +3515 3520 0 +3515 3871 0 +3515 3872 0 +3516 3156 1 +3516 3501 0 +3516 3502 0 +3516 3503 0 +3516 3504 1 +3516 3509 1 +3516 3510 1 +3516 3515 1 +3516 3517 0 +3516 3518 1 +3516 3519 1 +3516 3520 1 +3516 3871 -1 +3516 3872 1 +3517 3518 1 +3517 3541 1 +3518 3542 1 +3519 3520 0 +3519 3543 0 +3520 3544 0 +3521 3161 -1 +3521 3517 1 +3521 3518 1 +3521 3525 1 +3521 3526 0 +3521 3527 1 +3521 3528 0 +3521 3879 -1 +3521 3880 0 +3521 3894 1 +3521 3895 0 +3521 3896 1 +3522 3162 1 +3522 3517 1 +3522 3518 0 +3522 3521 1 +3522 3525 0 +3522 3526 1 +3522 3527 0 +3522 3528 -1 +3522 3879 0 +3522 3880 1 +3522 3894 1 +3522 3895 1 +3522 3896 1 +3523 3163 1 +3523 3517 1 +3523 3518 1 +3523 3525 -1 +3523 3526 1 +3523 3527 0 +3523 3528 0 +3523 3869 0 +3523 3870 0 +3523 3871 0 +3523 3872 -1 +3523 3879 -1 +3523 3880 -1 +3524 3164 1 +3524 3517 0 +3524 3518 1 +3524 3523 1 +3524 3525 1 +3524 3526 -1 +3524 3527 1 +3524 3528 1 +3524 3869 0 +3524 3870 0 +3524 3871 0 +3524 3872 1 +3524 3879 0 +3524 3880 1 +3525 3526 -1 +3525 3549 1 +3526 3550 -1 +3527 3528 0 +3527 3551 0 +3528 3552 0 +3529 3165 0 +3529 3166 1 +3529 3169 0 +3529 3527 0 +3529 3528 1 +3529 3533 1 +3529 3534 0 +3529 3535 0 +3529 3536 0 +3529 3541 1 +3529 3542 0 +3529 3543 0 +3529 3544 0 +3530 3165 1 +3530 3166 0 +3530 3170 1 +3530 3527 0 +3530 3528 1 +3530 3529 0 +3530 3533 0 +3530 3534 1 +3530 3535 1 +3530 3536 -1 +3530 3541 1 +3530 3542 0 +3530 3543 1 +3530 3544 1 +3531 3165 -1 +3531 3166 1 +3531 3171 0 +3531 3517 1 +3531 3518 0 +3531 3519 1 +3531 3520 0 +3531 3527 0 +3531 3528 1 +3531 3533 1 +3531 3534 1 +3531 3535 0 +3531 3536 1 +3532 3165 0 +3532 3166 0 +3532 3172 -1 +3532 3517 1 +3532 3518 0 +3532 3519 1 +3532 3520 0 +3532 3527 1 +3532 3528 0 +3532 3531 0 +3532 3533 1 +3532 3534 0 +3532 3535 1 +3532 3536 1 +3533 3534 1 +3533 3557 1 +3534 3558 1 +3535 3536 1 +3535 3559 0 +3536 3560 1 +3537 3177 1 +3537 3533 1 +3537 3534 1 +3537 3541 1 +3537 3542 1 +3537 3543 1 +3537 3544 0 +3537 3549 1 +3537 3550 1 +3537 3551 0 +3537 3552 1 +3537 3895 1 +3537 3896 1 +3538 3178 1 +3538 3533 0 +3538 3534 1 +3538 3537 0 +3538 3541 -1 +3538 3542 -1 +3538 3543 -1 +3538 3544 1 +3538 3549 -1 +3538 3550 -1 +3538 3551 1 +3538 3552 1 +3538 3895 0 +3538 3896 0 +3539 3179 1 +3539 3525 1 +3539 3526 0 +3539 3527 0 +3539 3528 0 +3539 3533 -1 +3539 3534 -1 +3539 3541 1 +3539 3542 0 +3539 3543 0 +3539 3544 1 +3539 3895 1 +3539 3896 0 +3540 3180 1 +3540 3525 1 +3540 3526 0 +3540 3527 -1 +3540 3528 1 +3540 3533 1 +3540 3534 1 +3540 3539 0 +3540 3541 -1 +3540 3542 1 +3540 3543 -1 +3540 3544 0 +3540 3895 0 +3540 3896 1 +3541 3542 0 +3541 3565 0 +3542 3566 1 +3543 3544 0 +3543 3567 0 +3544 3568 1 +3545 3185 1 +3545 3541 0 +3545 3542 0 +3545 3549 1 +3545 3550 1 +3545 3551 0 +3545 3552 1 +3545 3903 0 +3545 3904 0 +3545 3917 1 +3545 3918 1 +3545 3919 0 +3545 3920 1 +3546 3186 0 +3546 3541 -1 +3546 3542 0 +3546 3545 0 +3546 3549 1 +3546 3550 1 +3546 3551 1 +3546 3552 1 +3546 3903 1 +3546 3904 1 +3546 3917 0 +3546 3918 1 +3546 3919 1 +3546 3920 0 +3547 3187 0 +3547 3541 1 +3547 3542 1 +3547 3549 1 +3547 3550 1 +3547 3551 1 +3547 3552 1 +3547 3894 -1 +3547 3895 1 +3547 3896 0 +3547 3903 1 +3547 3904 0 +3548 3188 0 +3548 3541 1 +3548 3542 0 +3548 3547 1 +3548 3549 1 +3548 3550 1 +3548 3551 1 +3548 3552 1 +3548 3894 -1 +3548 3895 1 +3548 3896 1 +3548 3903 0 +3548 3904 -1 +3549 3550 0 +3549 3573 1 +3550 3574 1 +3551 3552 0 +3551 3575 1 +3552 3576 0 +3553 3189 1 +3553 3190 0 +3553 3193 1 +3553 3551 1 +3553 3552 1 +3553 3557 0 +3553 3558 0 +3553 3559 1 +3553 3560 1 +3553 3565 0 +3553 3566 1 +3553 3567 0 +3553 3568 0 +3554 3189 0 +3554 3190 -1 +3554 3194 1 +3554 3551 0 +3554 3552 1 +3554 3553 0 +3554 3557 0 +3554 3558 1 +3554 3559 1 +3554 3560 1 +3554 3565 -1 +3554 3566 0 +3554 3567 1 +3554 3568 1 +3555 3189 1 +3555 3190 0 +3555 3195 1 +3555 3541 1 +3555 3542 1 +3555 3543 1 +3555 3544 1 +3555 3551 0 +3555 3552 0 +3555 3557 1 +3555 3558 0 +3555 3559 -1 +3555 3560 0 +3556 3189 0 +3556 3190 0 +3556 3196 -1 +3556 3541 0 +3556 3542 1 +3556 3543 1 +3556 3544 1 +3556 3551 1 +3556 3552 1 +3556 3555 0 +3556 3557 -1 +3556 3558 0 +3556 3559 0 +3556 3560 1 +3557 3558 0 +3557 3581 1 +3558 3582 0 +3559 3560 1 +3559 3583 0 +3560 3584 1 +3561 3201 0 +3561 3557 1 +3561 3558 1 +3561 3565 -1 +3561 3566 1 +3561 3567 0 +3561 3568 1 +3561 3573 1 +3561 3574 0 +3561 3575 0 +3561 3576 1 +3561 3919 0 +3561 3920 0 +3562 3202 1 +3562 3557 0 +3562 3558 1 +3562 3561 0 +3562 3565 1 +3562 3566 1 +3562 3567 0 +3562 3568 1 +3562 3573 -1 +3562 3574 1 +3562 3575 1 +3562 3576 0 +3562 3919 1 +3562 3920 1 +3563 3203 1 +3563 3549 1 +3563 3550 0 +3563 3551 1 +3563 3552 0 +3563 3557 0 +3563 3558 0 +3563 3565 -1 +3563 3566 0 +3563 3567 -1 +3563 3568 1 +3563 3919 1 +3563 3920 1 +3564 3204 0 +3564 3549 0 +3564 3550 1 +3564 3551 0 +3564 3552 0 +3564 3557 1 +3564 3558 1 +3564 3563 0 +3564 3565 0 +3564 3566 0 +3564 3567 1 +3564 3568 -1 +3564 3919 -1 +3564 3920 1 +3565 3566 0 +3565 3589 1 +3566 3590 -1 +3567 3568 0 +3567 3591 0 +3568 3592 1 +3569 3209 0 +3569 3565 1 +3569 3566 1 +3569 3573 1 +3569 3574 1 +3569 3575 0 +3569 3576 1 +3569 3927 1 +3569 3928 0 +3569 3941 1 +3569 3942 0 +3569 3943 1 +3569 3944 1 +3570 3210 0 +3570 3565 0 +3570 3566 1 +3570 3569 0 +3570 3573 0 +3570 3574 1 +3570 3575 1 +3570 3576 0 +3570 3927 1 +3570 3928 1 +3570 3941 1 +3570 3942 1 +3570 3943 -1 +3570 3944 0 +3571 3211 1 +3571 3565 1 +3571 3566 1 +3571 3573 1 +3571 3574 1 +3571 3575 1 +3571 3576 0 +3571 3917 1 +3571 3918 1 +3571 3919 0 +3571 3920 0 +3571 3927 1 +3571 3928 1 +3572 3212 0 +3572 3565 1 +3572 3566 -1 +3572 3571 0 +3572 3573 1 +3572 3574 1 +3572 3575 1 +3572 3576 0 +3572 3917 1 +3572 3918 1 +3572 3919 0 +3572 3920 1 +3572 3927 -1 +3572 3928 0 +3573 3574 0 +3573 3597 1 +3574 3598 -1 +3575 3576 0 +3575 3599 0 +3576 3600 0 +3577 3213 0 +3577 3214 -1 +3577 3217 1 +3577 3575 1 +3577 3576 1 +3577 3581 0 +3577 3582 1 +3577 3583 1 +3577 3584 1 +3577 3589 0 +3577 3590 1 +3577 3591 0 +3577 3592 -1 +3578 3213 0 +3578 3214 0 +3578 3218 1 +3578 3575 1 +3578 3576 1 +3578 3577 0 +3578 3581 0 +3578 3582 0 +3578 3583 1 +3578 3584 -1 +3578 3589 1 +3578 3590 -1 +3578 3591 0 +3578 3592 -1 +3579 3213 1 +3579 3214 1 +3579 3219 0 +3579 3565 1 +3579 3566 0 +3579 3567 0 +3579 3568 0 +3579 3575 1 +3579 3576 1 +3579 3581 0 +3579 3582 0 +3579 3583 0 +3579 3584 0 +3580 3213 1 +3580 3214 0 +3580 3220 1 +3580 3565 1 +3580 3566 0 +3580 3567 1 +3580 3568 1 +3580 3575 1 +3580 3576 0 +3580 3579 1 +3580 3581 0 +3580 3582 -1 +3580 3583 0 +3580 3584 1 +3581 3582 0 +3583 3584 1 +3585 3225 1 +3585 3581 0 +3585 3582 0 +3585 3589 1 +3585 3590 1 +3585 3591 1 +3585 3592 0 +3585 3597 0 +3585 3598 0 +3585 3599 1 +3585 3600 1 +3585 3943 0 +3585 3944 1 +3586 3226 0 +3586 3581 0 +3586 3582 0 +3586 3585 1 +3586 3589 1 +3586 3590 0 +3586 3591 1 +3586 3592 1 +3586 3597 1 +3586 3598 0 +3586 3599 0 +3586 3600 1 +3586 3943 1 +3586 3944 1 +3587 3227 1 +3587 3573 1 +3587 3574 1 +3587 3575 -1 +3587 3576 0 +3587 3581 1 +3587 3582 1 +3587 3589 1 +3587 3590 0 +3587 3591 0 +3587 3592 0 +3587 3943 1 +3587 3944 1 +3588 3228 0 +3588 3573 0 +3588 3574 1 +3588 3575 1 +3588 3576 0 +3588 3581 1 +3588 3582 0 +3588 3587 0 +3588 3589 0 +3588 3590 1 +3588 3591 1 +3588 3592 -1 +3588 3943 1 +3588 3944 0 +3589 3590 0 +3591 3592 0 +3593 3233 1 +3593 3589 0 +3593 3590 -1 +3593 3597 1 +3593 3598 0 +3593 3599 1 +3593 3600 0 +3593 3951 1 +3593 3952 1 +3594 3234 0 +3594 3589 1 +3594 3590 1 +3594 3593 1 +3594 3597 -1 +3594 3598 0 +3594 3599 1 +3594 3600 1 +3594 3951 0 +3594 3952 1 +3595 3235 1 +3595 3589 0 +3595 3590 0 +3595 3597 1 +3595 3598 1 +3595 3599 -1 +3595 3600 1 +3595 3941 1 +3595 3942 1 +3595 3943 1 +3595 3944 1 +3595 3951 1 +3595 3952 -1 +3596 3236 1 +3596 3589 0 +3596 3590 0 +3596 3595 0 +3596 3597 0 +3596 3598 1 +3596 3599 0 +3596 3600 1 +3596 3941 1 +3596 3942 0 +3596 3943 0 +3596 3944 0 +3596 3951 0 +3596 3952 1 +3597 3598 0 +3599 3600 -1 +3601 3241 0 +3601 3605 1 +3601 3606 1 +3601 3607 1 +3601 3608 1 +3601 3613 1 +3601 3614 0 +3601 3615 0 +3601 3616 1 +3602 3242 1 +3602 3601 0 +3602 3605 0 +3602 3606 1 +3602 3607 1 +3602 3608 1 +3602 3613 -1 +3602 3614 1 +3602 3615 1 +3602 3616 0 +3603 3243 1 +3603 3605 1 +3603 3606 1 +3603 3607 1 +3603 3608 0 +3604 3244 1 +3604 3603 1 +3604 3605 1 +3604 3606 0 +3604 3607 1 +3604 3608 1 +3605 3606 0 +3605 3629 1 +3606 3630 -1 +3607 3608 1 +3607 3631 1 +3608 3632 1 +3609 3249 1 +3609 3605 1 +3609 3606 1 +3609 3613 0 +3609 3614 1 +3609 3615 0 +3609 3616 -1 +3609 3621 -1 +3609 3622 1 +3609 3623 1 +3609 3624 1 +3609 3967 1 +3609 3968 0 +3610 3250 0 +3610 3605 0 +3610 3606 1 +3610 3609 1 +3610 3613 1 +3610 3614 1 +3610 3615 1 +3610 3616 1 +3610 3621 1 +3610 3622 1 +3610 3623 1 +3610 3624 0 +3610 3967 0 +3610 3968 0 +3611 3251 0 +3611 3605 1 +3611 3606 1 +3611 3613 0 +3611 3614 0 +3611 3615 1 +3611 3616 1 +3611 3967 1 +3611 3968 1 +3612 3252 1 +3612 3605 1 +3612 3606 1 +3612 3611 0 +3612 3613 1 +3612 3614 1 +3612 3615 -1 +3612 3616 1 +3612 3967 1 +3612 3968 0 +3613 3614 1 +3613 3637 1 +3614 3638 1 +3615 3616 1 +3615 3639 1 +3616 3640 0 +3617 3257 1 +3617 3613 1 +3617 3614 1 +3617 3621 0 +3617 3622 1 +3617 3623 -1 +3617 3624 0 +3617 3975 0 +3617 3976 -1 +3617 3989 0 +3617 3990 0 +3617 3991 0 +3617 3992 1 +3618 3258 1 +3618 3613 0 +3618 3614 1 +3618 3617 1 +3618 3621 -1 +3618 3622 1 +3618 3623 1 +3618 3624 0 +3618 3975 1 +3618 3976 1 +3618 3989 1 +3618 3990 0 +3618 3991 0 +3618 3992 1 +3619 3259 0 +3619 3613 0 +3619 3614 0 +3619 3621 0 +3619 3622 0 +3619 3623 0 +3619 3624 1 +3619 3965 0 +3619 3966 1 +3619 3967 1 +3619 3968 1 +3619 3975 0 +3619 3976 1 +3620 3260 1 +3620 3613 -1 +3620 3614 1 +3620 3619 1 +3620 3621 1 +3620 3622 0 +3620 3623 1 +3620 3624 1 +3620 3965 -1 +3620 3966 1 +3620 3967 -1 +3620 3968 1 +3620 3975 0 +3620 3976 1 +3621 3622 0 +3621 3645 0 +3622 3646 0 +3623 3624 1 +3623 3647 1 +3624 3648 1 +3625 3261 1 +3625 3262 0 +3625 3265 0 +3625 3623 1 +3625 3624 0 +3625 3629 0 +3625 3630 -1 +3625 3631 0 +3625 3632 1 +3625 3637 1 +3625 3638 1 +3625 3639 0 +3625 3640 1 +3626 3261 0 +3626 3262 0 +3626 3266 1 +3626 3623 1 +3626 3624 1 +3626 3625 -1 +3626 3629 1 +3626 3630 0 +3626 3631 0 +3626 3632 1 +3626 3637 1 +3626 3638 1 +3626 3639 0 +3626 3640 0 +3627 3261 1 +3627 3262 1 +3627 3267 0 +3627 3613 1 +3627 3614 1 +3627 3615 1 +3627 3616 0 +3627 3623 1 +3627 3624 0 +3627 3629 -1 +3627 3630 0 +3627 3631 1 +3627 3632 1 +3628 3261 0 +3628 3262 0 +3628 3268 1 +3628 3613 1 +3628 3614 1 +3628 3615 0 +3628 3616 -1 +3628 3623 0 +3628 3624 1 +3628 3627 0 +3628 3629 -1 +3628 3630 0 +3628 3631 1 +3628 3632 0 +3629 3630 0 +3629 3653 -1 +3630 3654 1 +3631 3632 1 +3631 3655 1 +3632 3656 0 +3633 3273 -1 +3633 3629 0 +3633 3630 0 +3633 3637 1 +3633 3638 0 +3633 3639 1 +3633 3640 1 +3633 3645 1 +3633 3646 1 +3633 3647 0 +3633 3648 1 +3633 3991 0 +3633 3992 0 +3634 3274 0 +3634 3629 1 +3634 3630 1 +3634 3633 0 +3634 3637 1 +3634 3638 0 +3634 3639 0 +3634 3640 1 +3634 3645 1 +3634 3646 -1 +3634 3647 1 +3634 3648 1 +3634 3991 -1 +3634 3992 1 +3635 3275 1 +3635 3621 0 +3635 3622 1 +3635 3623 1 +3635 3624 1 +3635 3629 1 +3635 3630 1 +3635 3637 1 +3635 3638 -1 +3635 3639 0 +3635 3640 0 +3635 3991 1 +3635 3992 -1 +3636 3276 1 +3636 3621 0 +3636 3622 0 +3636 3623 1 +3636 3624 -1 +3636 3629 0 +3636 3630 0 +3636 3635 0 +3636 3637 1 +3636 3638 0 +3636 3639 1 +3636 3640 0 +3636 3991 1 +3636 3992 0 +3637 3638 1 +3637 3661 0 +3638 3662 1 +3639 3640 0 +3639 3663 1 +3640 3664 0 +3641 3281 0 +3641 3637 1 +3641 3638 0 +3641 3645 -1 +3641 3646 -1 +3641 3647 1 +3641 3648 -1 +3641 3999 0 +3641 4000 1 +3641 4013 1 +3641 4014 1 +3641 4015 0 +3641 4016 -1 +3642 3282 0 +3642 3637 0 +3642 3638 1 +3642 3641 1 +3642 3645 0 +3642 3646 0 +3642 3647 1 +3642 3648 1 +3642 3999 0 +3642 4000 1 +3642 4013 0 +3642 4014 1 +3642 4015 -1 +3642 4016 0 +3643 3283 1 +3643 3637 0 +3643 3638 1 +3643 3645 1 +3643 3646 0 +3643 3647 1 +3643 3648 1 +3643 3989 0 +3643 3990 1 +3643 3991 1 +3643 3992 1 +3643 3999 -1 +3643 4000 1 +3644 3284 -1 +3644 3637 0 +3644 3638 1 +3644 3643 -1 +3644 3645 0 +3644 3646 -1 +3644 3647 1 +3644 3648 1 +3644 3989 1 +3644 3990 0 +3644 3991 1 +3644 3992 1 +3644 3999 1 +3644 4000 0 +3645 3646 1 +3645 3669 0 +3646 3670 1 +3647 3648 0 +3647 3671 1 +3648 3672 1 +3649 3285 1 +3649 3286 0 +3649 3289 1 +3649 3647 1 +3649 3648 -1 +3649 3653 1 +3649 3654 0 +3649 3655 -1 +3649 3656 1 +3649 3661 0 +3649 3662 1 +3649 3663 0 +3649 3664 0 +3650 3285 1 +3650 3286 1 +3650 3290 -1 +3650 3647 1 +3650 3648 0 +3650 3649 1 +3650 3653 0 +3650 3654 1 +3650 3655 0 +3650 3656 1 +3650 3661 1 +3650 3662 0 +3650 3663 1 +3650 3664 1 +3651 3285 1 +3651 3286 1 +3651 3291 1 +3651 3637 1 +3651 3638 0 +3651 3639 1 +3651 3640 1 +3651 3647 1 +3651 3648 1 +3651 3653 0 +3651 3654 0 +3651 3655 1 +3651 3656 1 +3652 3285 0 +3652 3286 0 +3652 3292 1 +3652 3637 0 +3652 3638 -1 +3652 3639 0 +3652 3640 0 +3652 3647 0 +3652 3648 0 +3652 3651 1 +3652 3653 0 +3652 3654 0 +3652 3655 0 +3652 3656 0 +3653 3654 -1 +3653 3677 0 +3654 3678 0 +3655 3656 0 +3655 3679 1 +3656 3680 1 +3657 3297 1 +3657 3653 1 +3657 3654 0 +3657 3661 0 +3657 3662 0 +3657 3663 1 +3657 3664 1 +3657 3669 1 +3657 3670 0 +3657 3671 -1 +3657 3672 0 +3657 4015 1 +3657 4016 -1 +3658 3298 0 +3658 3653 0 +3658 3654 0 +3658 3657 1 +3658 3661 1 +3658 3662 1 +3658 3663 0 +3658 3664 0 +3658 3669 1 +3658 3670 1 +3658 3671 1 +3658 3672 1 +3658 4015 0 +3658 4016 1 +3659 3299 0 +3659 3645 0 +3659 3646 0 +3659 3647 -1 +3659 3648 -1 +3659 3653 -1 +3659 3654 1 +3659 3661 1 +3659 3662 0 +3659 3663 -1 +3659 3664 0 +3659 4015 1 +3659 4016 -1 +3660 3300 1 +3660 3645 1 +3660 3646 1 +3660 3647 0 +3660 3648 0 +3660 3653 1 +3660 3654 0 +3660 3659 -1 +3660 3661 1 +3660 3662 0 +3660 3663 1 +3660 3664 0 +3660 4015 1 +3660 4016 1 +3661 3662 0 +3661 3685 -1 +3662 3686 0 +3663 3664 1 +3663 3687 0 +3664 3688 1 +3665 3305 1 +3665 3661 1 +3665 3662 1 +3665 3669 1 +3665 3670 1 +3665 3671 1 +3665 3672 -1 +3665 4023 -1 +3665 4024 1 +3665 4037 0 +3665 4038 -1 +3665 4039 1 +3665 4040 0 +3666 3306 0 +3666 3661 0 +3666 3662 1 +3666 3665 0 +3666 3669 0 +3666 3670 1 +3666 3671 0 +3666 3672 1 +3666 4023 1 +3666 4024 1 +3666 4037 1 +3666 4038 0 +3666 4039 0 +3666 4040 1 +3667 3307 1 +3667 3661 1 +3667 3662 0 +3667 3669 1 +3667 3670 -1 +3667 3671 -1 +3667 3672 1 +3667 4013 1 +3667 4014 1 +3667 4015 -1 +3667 4016 0 +3667 4023 1 +3667 4024 1 +3668 3308 0 +3668 3661 1 +3668 3662 0 +3668 3667 1 +3668 3669 1 +3668 3670 0 +3668 3671 -1 +3668 3672 0 +3668 4013 -1 +3668 4014 0 +3668 4015 1 +3668 4016 1 +3668 4023 0 +3668 4024 1 +3669 3670 0 +3669 3693 1 +3670 3694 1 +3671 3672 1 +3671 3695 1 +3672 3696 0 +3673 3309 0 +3673 3310 0 +3673 3313 -1 +3673 3671 1 +3673 3672 1 +3673 3677 0 +3673 3678 1 +3673 3679 0 +3673 3680 0 +3673 3685 0 +3673 3686 1 +3673 3687 0 +3673 3688 1 +3674 3309 1 +3674 3310 -1 +3674 3314 0 +3674 3671 1 +3674 3672 0 +3674 3673 -1 +3674 3677 0 +3674 3678 0 +3674 3679 -1 +3674 3680 1 +3674 3685 0 +3674 3686 1 +3674 3687 1 +3674 3688 -1 +3675 3309 1 +3675 3310 1 +3675 3315 0 +3675 3661 0 +3675 3662 1 +3675 3663 1 +3675 3664 -1 +3675 3671 1 +3675 3672 1 +3675 3677 1 +3675 3678 -1 +3675 3679 0 +3675 3680 1 +3676 3309 1 +3676 3310 0 +3676 3316 0 +3676 3661 1 +3676 3662 0 +3676 3663 1 +3676 3664 0 +3676 3671 1 +3676 3672 0 +3676 3675 1 +3676 3677 1 +3676 3678 0 +3676 3679 0 +3676 3680 1 +3677 3678 1 +3677 3701 1 +3678 3702 0 +3679 3680 1 +3679 3703 -1 +3680 3704 1 +3681 3321 1 +3681 3677 0 +3681 3678 1 +3681 3685 1 +3681 3686 0 +3681 3687 0 +3681 3688 0 +3681 3693 0 +3681 3694 1 +3681 3695 0 +3681 3696 0 +3681 4039 1 +3681 4040 1 +3682 3322 1 +3682 3677 1 +3682 3678 0 +3682 3681 0 +3682 3685 1 +3682 3686 0 +3682 3687 0 +3682 3688 1 +3682 3693 -1 +3682 3694 0 +3682 3695 0 +3682 3696 -1 +3682 4039 1 +3682 4040 0 +3683 3323 -1 +3683 3669 1 +3683 3670 0 +3683 3671 0 +3683 3672 1 +3683 3677 1 +3683 3678 1 +3683 3685 1 +3683 3686 1 +3683 3687 0 +3683 3688 1 +3683 4039 -1 +3683 4040 1 +3684 3324 0 +3684 3669 -1 +3684 3670 0 +3684 3671 1 +3684 3672 0 +3684 3677 -1 +3684 3678 1 +3684 3683 1 +3684 3685 0 +3684 3686 1 +3684 3687 -1 +3684 3688 1 +3684 4039 1 +3684 4040 -1 +3685 3686 0 +3685 3709 1 +3686 3710 1 +3687 3688 0 +3687 3711 0 +3688 3712 1 +3689 3329 1 +3689 3685 1 +3689 3686 1 +3689 3693 1 +3689 3694 0 +3689 3695 0 +3689 3696 -1 +3689 4047 1 +3689 4048 -1 +3689 4061 1 +3689 4062 0 +3689 4063 1 +3689 4064 1 +3690 3330 1 +3690 3685 1 +3690 3686 1 +3690 3689 1 +3690 3693 1 +3690 3694 1 +3690 3695 1 +3690 3696 1 +3690 4047 1 +3690 4048 0 +3690 4061 1 +3690 4062 1 +3690 4063 0 +3690 4064 1 +3691 3331 0 +3691 3685 0 +3691 3686 1 +3691 3693 0 +3691 3694 1 +3691 3695 1 +3691 3696 0 +3691 4037 1 +3691 4038 -1 +3691 4039 1 +3691 4040 1 +3691 4047 1 +3691 4048 0 +3692 3332 0 +3692 3685 -1 +3692 3686 1 +3692 3691 1 +3692 3693 0 +3692 3694 -1 +3692 3695 1 +3692 3696 0 +3692 4037 0 +3692 4038 1 +3692 4039 1 +3692 4040 1 +3692 4047 0 +3692 4048 -1 +3693 3694 1 +3693 3717 1 +3694 3718 1 +3695 3696 1 +3695 3719 1 +3696 3720 1 +3697 3333 1 +3697 3334 1 +3697 3337 1 +3697 3695 1 +3697 3696 0 +3697 3701 1 +3697 3702 1 +3697 3703 0 +3697 3704 0 +3697 3709 1 +3697 3710 1 +3697 3711 -1 +3697 3712 0 +3698 3333 0 +3698 3334 1 +3698 3338 1 +3698 3695 1 +3698 3696 0 +3698 3697 -1 +3698 3701 -1 +3698 3702 1 +3698 3703 1 +3698 3704 0 +3698 3709 1 +3698 3710 1 +3698 3711 1 +3698 3712 0 +3699 3333 0 +3699 3334 0 +3699 3339 1 +3699 3685 0 +3699 3686 1 +3699 3687 1 +3699 3688 1 +3699 3695 -1 +3699 3696 1 +3699 3701 1 +3699 3702 1 +3699 3703 0 +3699 3704 0 +3700 3333 1 +3700 3334 1 +3700 3340 -1 +3700 3685 1 +3700 3686 1 +3700 3687 -1 +3700 3688 1 +3700 3695 1 +3700 3696 1 +3700 3699 0 +3700 3701 0 +3700 3702 1 +3700 3703 0 +3700 3704 0 +3701 3702 0 +3701 3725 1 +3702 3726 1 +3703 3704 -1 +3703 3727 1 +3704 3728 1 +3705 3345 0 +3705 3701 0 +3705 3702 1 +3705 3709 1 +3705 3710 0 +3705 3711 1 +3705 3712 0 +3705 3717 -1 +3705 3718 1 +3705 3719 1 +3705 3720 0 +3705 4063 0 +3705 4064 1 +3706 3346 1 +3706 3701 1 +3706 3702 0 +3706 3705 1 +3706 3709 1 +3706 3710 1 +3706 3711 1 +3706 3712 1 +3706 3717 0 +3706 3718 -1 +3706 3719 1 +3706 3720 1 +3706 4063 1 +3706 4064 -1 +3707 3347 1 +3707 3693 1 +3707 3694 -1 +3707 3695 1 +3707 3696 0 +3707 3701 0 +3707 3702 0 +3707 3709 1 +3707 3710 1 +3707 3711 1 +3707 3712 1 +3707 4063 0 +3707 4064 0 +3708 3348 1 +3708 3693 0 +3708 3694 1 +3708 3695 0 +3708 3696 1 +3708 3701 0 +3708 3702 1 +3708 3707 0 +3708 3709 1 +3708 3710 -1 +3708 3711 1 +3708 3712 1 +3708 4063 0 +3708 4064 0 +3709 3710 1 +3709 3733 0 +3710 3734 1 +3711 3712 0 +3711 3735 1 +3712 3736 0 +3713 3353 0 +3713 3709 1 +3713 3710 0 +3713 3717 -1 +3713 3718 1 +3713 3719 0 +3713 3720 1 +3713 4071 0 +3713 4072 1 +3713 4085 0 +3713 4086 0 +3713 4087 -1 +3713 4088 1 +3714 3354 0 +3714 3709 0 +3714 3710 1 +3714 3713 1 +3714 3717 1 +3714 3718 0 +3714 3719 1 +3714 3720 0 +3714 4071 0 +3714 4072 1 +3714 4085 1 +3714 4086 1 +3714 4087 0 +3714 4088 0 +3715 3355 0 +3715 3709 1 +3715 3710 0 +3715 3717 1 +3715 3718 1 +3715 3719 1 +3715 3720 1 +3715 4061 1 +3715 4062 1 +3715 4063 1 +3715 4064 0 +3715 4071 1 +3715 4072 0 +3716 3356 -1 +3716 3709 0 +3716 3710 1 +3716 3715 1 +3716 3717 1 +3716 3718 -1 +3716 3719 1 +3716 3720 1 +3716 4061 1 +3716 4062 1 +3716 4063 0 +3716 4064 1 +3716 4071 1 +3716 4072 -1 +3717 3718 -1 +3717 3741 1 +3718 3742 0 +3719 3720 0 +3719 3743 0 +3720 3744 0 +3721 3357 -1 +3721 3358 0 +3721 3361 1 +3721 3719 -1 +3721 3720 0 +3721 3725 1 +3721 3726 0 +3721 3727 0 +3721 3728 0 +3721 3733 0 +3721 3734 1 +3721 3735 1 +3721 3736 0 +3722 3357 0 +3722 3358 1 +3722 3362 1 +3722 3719 1 +3722 3720 1 +3722 3721 1 +3722 3725 0 +3722 3726 1 +3722 3727 1 +3722 3728 0 +3722 3733 0 +3722 3734 0 +3722 3735 1 +3722 3736 -1 +3723 3357 0 +3723 3358 1 +3723 3363 1 +3723 3709 0 +3723 3710 0 +3723 3711 1 +3723 3712 1 +3723 3719 0 +3723 3720 -1 +3723 3725 0 +3723 3726 1 +3723 3727 0 +3723 3728 1 +3724 3357 1 +3724 3358 1 +3724 3364 0 +3724 3709 0 +3724 3710 1 +3724 3711 1 +3724 3712 1 +3724 3719 0 +3724 3720 1 +3724 3723 0 +3724 3725 1 +3724 3726 1 +3724 3727 1 +3724 3728 -1 +3725 3726 0 +3725 3749 0 +3726 3750 1 +3727 3728 -1 +3727 3751 0 +3728 3752 0 +3729 3369 1 +3729 3725 1 +3729 3726 1 +3729 3733 1 +3729 3734 1 +3729 3735 1 +3729 3736 0 +3729 3741 -1 +3729 3742 1 +3729 3743 1 +3729 3744 1 +3729 4087 1 +3729 4088 1 +3730 3370 0 +3730 3725 1 +3730 3726 0 +3730 3729 1 +3730 3733 1 +3730 3734 1 +3730 3735 1 +3730 3736 1 +3730 3741 0 +3730 3742 0 +3730 3743 1 +3730 3744 0 +3730 4087 0 +3730 4088 1 +3731 3371 1 +3731 3717 1 +3731 3718 0 +3731 3719 1 +3731 3720 1 +3731 3725 1 +3731 3726 0 +3731 3733 0 +3731 3734 1 +3731 3735 0 +3731 3736 1 +3731 4087 0 +3731 4088 1 +3732 3372 0 +3732 3717 0 +3732 3718 1 +3732 3719 1 +3732 3720 1 +3732 3725 1 +3732 3726 1 +3732 3731 1 +3732 3733 1 +3732 3734 1 +3732 3735 1 +3732 3736 1 +3732 4087 0 +3732 4088 1 +3733 3734 1 +3733 3757 1 +3734 3758 0 +3735 3736 0 +3735 3759 1 +3736 3760 1 +3737 3377 1 +3737 3733 1 +3737 3734 0 +3737 3741 -1 +3737 3742 0 +3737 3743 1 +3737 3744 -1 +3737 4095 0 +3737 4096 1 +3737 4109 1 +3737 4110 -1 +3737 4111 1 +3737 4112 1 +3738 3378 0 +3738 3733 0 +3738 3734 0 +3738 3737 -1 +3738 3741 0 +3738 3742 0 +3738 3743 1 +3738 3744 0 +3738 4095 1 +3738 4096 0 +3738 4109 0 +3738 4110 1 +3738 4111 0 +3738 4112 1 +3739 3379 0 +3739 3733 1 +3739 3734 0 +3739 3741 1 +3739 3742 0 +3739 3743 1 +3739 3744 0 +3739 4085 1 +3739 4086 1 +3739 4087 1 +3739 4088 1 +3739 4095 1 +3739 4096 0 +3740 3380 0 +3740 3733 1 +3740 3734 1 +3740 3739 1 +3740 3741 1 +3740 3742 1 +3740 3743 1 +3740 3744 1 +3740 4085 1 +3740 4086 1 +3740 4087 1 +3740 4088 1 +3740 4095 1 +3740 4096 0 +3741 3742 -1 +3741 3765 -1 +3742 3766 1 +3743 3744 0 +3743 3767 1 +3744 3768 1 +3745 3381 1 +3745 3382 1 +3745 3385 1 +3745 3743 1 +3745 3744 1 +3745 3749 0 +3745 3750 1 +3745 3751 1 +3745 3752 1 +3745 3757 0 +3745 3758 1 +3745 3759 1 +3745 3760 0 +3746 3381 1 +3746 3382 1 +3746 3386 1 +3746 3743 1 +3746 3744 1 +3746 3745 -1 +3746 3749 1 +3746 3750 1 +3746 3751 0 +3746 3752 1 +3746 3757 0 +3746 3758 1 +3746 3759 1 +3746 3760 1 +3747 3381 1 +3747 3382 1 +3747 3387 1 +3747 3733 1 +3747 3734 1 +3747 3735 1 +3747 3736 0 +3747 3743 1 +3747 3744 -1 +3747 3749 0 +3747 3750 1 +3747 3751 1 +3747 3752 1 +3748 3381 1 +3748 3382 0 +3748 3388 1 +3748 3733 0 +3748 3734 0 +3748 3735 0 +3748 3736 0 +3748 3743 0 +3748 3744 -1 +3748 3747 1 +3748 3749 1 +3748 3750 1 +3748 3751 0 +3748 3752 1 +3749 3750 1 +3749 3773 -1 +3750 3774 1 +3751 3752 1 +3751 3775 0 +3752 3776 1 +3753 3393 1 +3753 3749 -1 +3753 3750 1 +3753 3757 0 +3753 3758 0 +3753 3759 1 +3753 3760 1 +3753 3765 1 +3753 3766 -1 +3753 3767 0 +3753 3768 0 +3753 4111 0 +3753 4112 0 +3754 3394 0 +3754 3749 0 +3754 3750 1 +3754 3753 -1 +3754 3757 0 +3754 3758 0 +3754 3759 1 +3754 3760 1 +3754 3765 -1 +3754 3766 1 +3754 3767 1 +3754 3768 0 +3754 4111 1 +3754 4112 1 +3755 3395 1 +3755 3741 0 +3755 3742 1 +3755 3743 0 +3755 3744 0 +3755 3749 0 +3755 3750 0 +3755 3757 1 +3755 3758 1 +3755 3759 1 +3755 3760 0 +3755 4111 1 +3755 4112 1 +3756 3396 1 +3756 3741 0 +3756 3742 1 +3756 3743 1 +3756 3744 1 +3756 3749 0 +3756 3750 1 +3756 3755 -1 +3756 3757 1 +3756 3758 1 +3756 3759 -1 +3756 3760 0 +3756 4111 1 +3756 4112 0 +3757 3758 1 +3757 3781 1 +3758 3782 1 +3759 3760 1 +3759 3783 1 +3760 3784 1 +3761 3401 0 +3761 3757 1 +3761 3758 0 +3761 3765 1 +3761 3766 1 +3761 3767 1 +3761 3768 0 +3761 4119 1 +3761 4120 1 +3761 4133 1 +3761 4134 0 +3761 4135 0 +3761 4136 0 +3762 3402 1 +3762 3757 1 +3762 3758 1 +3762 3761 -1 +3762 3765 1 +3762 3766 0 +3762 3767 1 +3762 3768 1 +3762 4119 0 +3762 4120 0 +3762 4133 0 +3762 4134 0 +3762 4135 0 +3762 4136 -1 +3763 3403 0 +3763 3757 1 +3763 3758 1 +3763 3765 0 +3763 3766 1 +3763 3767 0 +3763 3768 0 +3763 4109 -1 +3763 4110 1 +3763 4111 1 +3763 4112 -1 +3763 4119 0 +3763 4120 1 +3764 3404 1 +3764 3757 1 +3764 3758 1 +3764 3763 0 +3764 3765 1 +3764 3766 1 +3764 3767 1 +3764 3768 1 +3764 4109 1 +3764 4110 1 +3764 4111 1 +3764 4112 1 +3764 4119 1 +3764 4120 1 +3765 3766 1 +3765 3789 1 +3766 3790 1 +3767 3768 1 +3767 3791 0 +3768 3792 1 +3769 3405 0 +3769 3406 0 +3769 3409 0 +3769 3767 1 +3769 3768 0 +3769 3773 0 +3769 3774 0 +3769 3775 1 +3769 3776 0 +3769 3781 0 +3769 3782 1 +3769 3783 0 +3769 3784 1 +3770 3405 1 +3770 3406 1 +3770 3410 1 +3770 3767 0 +3770 3768 1 +3770 3769 1 +3770 3773 0 +3770 3774 0 +3770 3775 0 +3770 3776 1 +3770 3781 0 +3770 3782 1 +3770 3783 1 +3770 3784 1 +3771 3405 1 +3771 3406 1 +3771 3411 1 +3771 3757 0 +3771 3758 -1 +3771 3759 0 +3771 3760 0 +3771 3767 0 +3771 3768 1 +3771 3773 -1 +3771 3774 1 +3771 3775 0 +3771 3776 -1 +3772 3405 1 +3772 3406 0 +3772 3412 1 +3772 3757 -1 +3772 3758 1 +3772 3759 -1 +3772 3760 1 +3772 3767 0 +3772 3768 1 +3772 3771 0 +3772 3773 0 +3772 3774 0 +3772 3775 0 +3772 3776 0 +3773 3774 1 +3773 3797 1 +3774 3798 0 +3775 3776 1 +3775 3799 -1 +3776 3800 0 +3777 3417 0 +3777 3773 0 +3777 3774 1 +3777 3781 1 +3777 3782 1 +3777 3783 1 +3777 3784 -1 +3777 3789 1 +3777 3790 1 +3777 3791 1 +3777 3792 1 +3777 4135 1 +3777 4136 1 +3778 3418 0 +3778 3773 1 +3778 3774 1 +3778 3777 1 +3778 3781 0 +3778 3782 1 +3778 3783 1 +3778 3784 1 +3778 3789 1 +3778 3790 1 +3778 3791 1 +3778 3792 1 +3778 4135 -1 +3778 4136 1 +3779 3419 1 +3779 3765 1 +3779 3766 0 +3779 3767 -1 +3779 3768 0 +3779 3773 0 +3779 3774 -1 +3779 3781 0 +3779 3782 1 +3779 3783 1 +3779 3784 0 +3779 4135 1 +3779 4136 1 +3780 3420 1 +3780 3765 0 +3780 3766 1 +3780 3767 0 +3780 3768 0 +3780 3773 0 +3780 3774 1 +3780 3779 1 +3780 3781 0 +3780 3782 -1 +3780 3783 0 +3780 3784 0 +3780 4135 0 +3780 4136 1 +3781 3782 1 +3781 3805 0 +3782 3806 0 +3783 3784 0 +3783 3807 1 +3784 3808 0 +3785 3425 1 +3785 3781 1 +3785 3782 0 +3785 3789 -1 +3785 3790 1 +3785 3791 1 +3785 3792 0 +3785 4143 1 +3785 4144 0 +3785 4157 0 +3785 4158 0 +3785 4159 0 +3785 4160 1 +3786 3426 1 +3786 3781 1 +3786 3782 1 +3786 3785 1 +3786 3789 1 +3786 3790 0 +3786 3791 0 +3786 3792 0 +3786 4143 -1 +3786 4144 0 +3786 4157 1 +3786 4158 0 +3786 4159 1 +3786 4160 0 +3787 3427 0 +3787 3781 -1 +3787 3782 1 +3787 3789 0 +3787 3790 1 +3787 3791 0 +3787 3792 0 +3787 4133 0 +3787 4134 1 +3787 4135 0 +3787 4136 1 +3787 4143 1 +3787 4144 0 +3788 3428 0 +3788 3781 1 +3788 3782 0 +3788 3787 0 +3788 3789 1 +3788 3790 1 +3788 3791 0 +3788 3792 0 +3788 4133 1 +3788 4134 1 +3788 4135 1 +3788 4136 0 +3788 4143 0 +3788 4144 1 +3789 3790 1 +3789 3813 0 +3790 3814 -1 +3791 3792 0 +3791 3815 1 +3792 3816 0 +3793 3429 1 +3793 3430 1 +3793 3433 0 +3793 3791 -1 +3793 3792 0 +3793 3797 0 +3793 3798 0 +3793 3799 0 +3793 3800 0 +3793 3805 1 +3793 3806 0 +3793 3807 1 +3793 3808 0 +3794 3429 1 +3794 3430 1 +3794 3434 0 +3794 3791 1 +3794 3792 1 +3794 3793 1 +3794 3797 1 +3794 3798 1 +3794 3799 1 +3794 3800 0 +3794 3805 1 +3794 3806 1 +3794 3807 1 +3794 3808 0 +3795 3429 1 +3795 3430 1 +3795 3435 1 +3795 3781 -1 +3795 3782 0 +3795 3783 -1 +3795 3784 1 +3795 3791 0 +3795 3792 0 +3795 3797 0 +3795 3798 0 +3795 3799 0 +3795 3800 0 +3796 3429 0 +3796 3430 1 +3796 3436 1 +3796 3781 1 +3796 3782 0 +3796 3783 1 +3796 3784 0 +3796 3791 0 +3796 3792 0 +3796 3795 1 +3796 3797 1 +3796 3798 1 +3796 3799 1 +3796 3800 0 +3797 3798 0 +3797 3821 1 +3798 3822 0 +3799 3800 0 +3799 3823 1 +3800 3824 1 +3801 3441 1 +3801 3797 1 +3801 3798 0 +3801 3805 0 +3801 3806 -1 +3801 3807 -1 +3801 3808 1 +3801 3813 0 +3801 3814 1 +3801 3815 0 +3801 3816 1 +3801 4159 1 +3801 4160 1 +3802 3442 -1 +3802 3797 1 +3802 3798 0 +3802 3801 0 +3802 3805 1 +3802 3806 -1 +3802 3807 1 +3802 3808 -1 +3802 3813 1 +3802 3814 0 +3802 3815 1 +3802 3816 0 +3802 4159 0 +3802 4160 -1 +3803 3443 0 +3803 3789 0 +3803 3790 1 +3803 3791 1 +3803 3792 1 +3803 3797 1 +3803 3798 0 +3803 3805 1 +3803 3806 1 +3803 3807 0 +3803 3808 0 +3803 4159 1 +3803 4160 1 +3804 3444 1 +3804 3789 1 +3804 3790 1 +3804 3791 0 +3804 3792 0 +3804 3797 0 +3804 3798 1 +3804 3803 -1 +3804 3805 0 +3804 3806 0 +3804 3807 1 +3804 3808 1 +3804 4159 1 +3804 4160 1 +3805 3806 0 +3805 3829 0 +3806 3830 0 +3807 3808 1 +3807 3831 1 +3808 3832 1 +3809 3449 1 +3809 3805 1 +3809 3806 0 +3809 3813 1 +3809 3814 1 +3809 3815 1 +3809 3816 1 +3809 4167 1 +3809 4168 1 +3809 4181 1 +3809 4182 1 +3809 4183 0 +3809 4184 0 +3810 3450 0 +3810 3805 1 +3810 3806 0 +3810 3809 1 +3810 3813 1 +3810 3814 0 +3810 3815 1 +3810 3816 1 +3810 4167 1 +3810 4168 0 +3810 4181 0 +3810 4182 1 +3810 4183 1 +3810 4184 0 +3811 3451 1 +3811 3805 1 +3811 3806 1 +3811 3813 0 +3811 3814 1 +3811 3815 1 +3811 3816 1 +3811 4157 1 +3811 4158 1 +3811 4159 0 +3811 4160 1 +3811 4167 1 +3811 4168 0 +3812 3452 1 +3812 3805 1 +3812 3806 1 +3812 3811 -1 +3812 3813 0 +3812 3814 -1 +3812 3815 0 +3812 3816 0 +3812 4157 1 +3812 4158 1 +3812 4159 1 +3812 4160 0 +3812 4167 0 +3812 4168 1 +3813 3814 0 +3813 3837 1 +3814 3838 0 +3815 3816 0 +3815 3839 1 +3816 3840 1 +3817 3453 1 +3817 3454 1 +3817 3457 -1 +3817 3815 1 +3817 3816 0 +3817 3821 -1 +3817 3822 0 +3817 3823 -1 +3817 3824 1 +3817 3829 1 +3817 3830 1 +3817 3831 1 +3817 3832 1 +3818 3453 -1 +3818 3454 0 +3818 3458 -1 +3818 3815 1 +3818 3816 -1 +3818 3817 0 +3818 3821 1 +3818 3822 1 +3818 3823 1 +3818 3824 -1 +3818 3829 1 +3818 3830 -1 +3818 3831 1 +3818 3832 1 +3819 3453 1 +3819 3454 1 +3819 3459 1 +3819 3805 1 +3819 3806 0 +3819 3807 1 +3819 3808 0 +3819 3815 1 +3819 3816 0 +3819 3821 1 +3819 3822 0 +3819 3823 1 +3819 3824 0 +3820 3453 1 +3820 3454 1 +3820 3460 -1 +3820 3805 1 +3820 3806 1 +3820 3807 1 +3820 3808 1 +3820 3815 1 +3820 3816 1 +3820 3819 1 +3820 3821 1 +3820 3822 1 +3820 3823 1 +3820 3824 0 +3821 3822 1 +3821 3845 1 +3822 3846 1 +3823 3824 -1 +3823 3847 1 +3824 3848 1 +3825 3465 0 +3825 3821 0 +3825 3822 1 +3825 3829 1 +3825 3830 0 +3825 3831 0 +3825 3832 1 +3825 3837 1 +3825 3838 -1 +3825 3839 -1 +3825 3840 0 +3825 4183 1 +3825 4184 0 +3826 3466 1 +3826 3821 -1 +3826 3822 0 +3826 3825 1 +3826 3829 0 +3826 3830 1 +3826 3831 1 +3826 3832 1 +3826 3837 0 +3826 3838 0 +3826 3839 1 +3826 3840 1 +3826 4183 -1 +3826 4184 0 +3827 3467 1 +3827 3813 -1 +3827 3814 0 +3827 3815 1 +3827 3816 1 +3827 3821 1 +3827 3822 -1 +3827 3829 0 +3827 3830 1 +3827 3831 0 +3827 3832 0 +3827 4183 0 +3827 4184 1 +3828 3468 1 +3828 3813 0 +3828 3814 0 +3828 3815 -1 +3828 3816 1 +3828 3821 1 +3828 3822 0 +3828 3827 0 +3828 3829 0 +3828 3830 1 +3828 3831 1 +3828 3832 0 +3828 4183 1 +3828 4184 1 +3829 3830 1 +3829 3853 1 +3830 3854 1 +3831 3832 1 +3831 3855 0 +3832 3856 0 +3833 3473 -1 +3833 3829 0 +3833 3830 1 +3833 3837 1 +3833 3838 1 +3833 3839 0 +3833 3840 1 +3833 4191 1 +3833 4192 0 +3833 4205 1 +3833 4206 0 +3833 4207 0 +3833 4208 1 +3834 3474 1 +3834 3829 1 +3834 3830 0 +3834 3833 -1 +3834 3837 0 +3834 3838 1 +3834 3839 0 +3834 3840 1 +3834 4191 0 +3834 4192 1 +3834 4205 0 +3834 4206 1 +3834 4207 1 +3834 4208 -1 +3835 3475 -1 +3835 3829 1 +3835 3830 0 +3835 3837 1 +3835 3838 1 +3835 3839 0 +3835 3840 0 +3835 4181 1 +3835 4182 0 +3835 4183 0 +3835 4184 0 +3835 4191 0 +3835 4192 0 +3836 3476 1 +3836 3829 1 +3836 3830 0 +3836 3835 1 +3836 3837 0 +3836 3838 1 +3836 3839 -1 +3836 3840 0 +3836 4181 1 +3836 4182 1 +3836 4183 1 +3836 4184 0 +3836 4191 1 +3836 4192 0 +3837 3838 1 +3837 3861 1 +3838 3862 0 +3839 3840 0 +3839 3863 1 +3840 3864 1 +3841 3477 0 +3841 3478 -1 +3841 3481 1 +3841 3839 0 +3841 3840 1 +3841 3845 0 +3841 3846 1 +3841 3847 0 +3841 3848 1 +3841 3853 0 +3841 3854 0 +3841 3855 1 +3841 3856 0 +3842 3477 0 +3842 3478 1 +3842 3482 0 +3842 3839 0 +3842 3840 0 +3842 3841 0 +3842 3845 1 +3842 3846 1 +3842 3847 0 +3842 3848 1 +3842 3853 0 +3842 3854 0 +3842 3855 1 +3842 3856 1 +3843 3477 0 +3843 3478 0 +3843 3483 1 +3843 3829 -1 +3843 3830 1 +3843 3831 1 +3843 3832 1 +3843 3839 0 +3843 3840 1 +3843 3845 1 +3843 3846 0 +3843 3847 -1 +3843 3848 0 +3844 3477 1 +3844 3478 0 +3844 3484 1 +3844 3829 0 +3844 3830 1 +3844 3831 1 +3844 3832 1 +3844 3839 0 +3844 3840 0 +3844 3843 1 +3844 3845 1 +3844 3846 1 +3844 3847 1 +3844 3848 1 +3845 3846 0 +3845 3869 -1 +3846 3870 0 +3847 3848 0 +3847 3871 1 +3848 3872 0 +3849 3489 1 +3849 3845 0 +3849 3846 0 +3849 3853 1 +3849 3854 1 +3849 3855 1 +3849 3856 1 +3849 3861 1 +3849 3862 1 +3849 3863 1 +3849 3864 1 +3849 4207 1 +3849 4208 1 +3850 3490 0 +3850 3845 1 +3850 3846 0 +3850 3849 0 +3850 3853 0 +3850 3854 1 +3850 3855 1 +3850 3856 -1 +3850 3861 0 +3850 3862 0 +3850 3863 1 +3850 3864 0 +3850 4207 0 +3850 4208 0 +3851 3491 0 +3851 3837 -1 +3851 3838 1 +3851 3839 1 +3851 3840 0 +3851 3845 1 +3851 3846 1 +3851 3853 -1 +3851 3854 1 +3851 3855 0 +3851 3856 0 +3851 4207 1 +3851 4208 1 +3852 3492 1 +3852 3837 1 +3852 3838 1 +3852 3839 1 +3852 3840 1 +3852 3845 -1 +3852 3846 1 +3852 3851 0 +3852 3853 -1 +3852 3854 1 +3852 3855 0 +3852 3856 -1 +3852 4207 0 +3852 4208 -1 +3853 3854 0 +3853 3877 0 +3854 3878 0 +3855 3856 0 +3855 3879 0 +3856 3880 0 +3857 3497 0 +3857 3853 1 +3857 3854 -1 +3857 3861 1 +3857 3862 1 +3857 3863 0 +3857 3864 0 +3857 4215 1 +3857 4216 1 +3857 4229 1 +3857 4230 0 +3857 4231 0 +3857 4232 0 +3858 3498 1 +3858 3853 0 +3858 3854 1 +3858 3857 1 +3858 3861 -1 +3858 3862 1 +3858 3863 1 +3858 3864 0 +3858 4215 1 +3858 4216 1 +3858 4229 0 +3858 4230 1 +3858 4231 -1 +3858 4232 0 +3859 3499 -1 +3859 3853 0 +3859 3854 1 +3859 3861 1 +3859 3862 0 +3859 3863 0 +3859 3864 0 +3859 4205 0 +3859 4206 0 +3859 4207 1 +3859 4208 1 +3859 4215 -1 +3859 4216 1 +3860 3500 0 +3860 3853 1 +3860 3854 1 +3860 3859 0 +3860 3861 -1 +3860 3862 1 +3860 3863 1 +3860 3864 1 +3860 4205 -1 +3860 4206 1 +3860 4207 0 +3860 4208 1 +3860 4215 0 +3860 4216 -1 +3861 3862 1 +3861 3885 0 +3862 3886 1 +3863 3864 -1 +3863 3887 1 +3864 3888 1 +3865 3501 1 +3865 3502 1 +3865 3505 1 +3865 3863 0 +3865 3864 1 +3865 3869 -1 +3865 3870 1 +3865 3871 0 +3865 3872 1 +3865 3877 0 +3865 3878 0 +3865 3879 0 +3865 3880 0 +3866 3501 0 +3866 3502 1 +3866 3506 0 +3866 3863 1 +3866 3864 1 +3866 3865 1 +3866 3869 1 +3866 3870 1 +3866 3871 1 +3866 3872 0 +3866 3877 1 +3866 3878 1 +3866 3879 0 +3866 3880 0 +3867 3501 0 +3867 3502 0 +3867 3507 -1 +3867 3853 -1 +3867 3854 1 +3867 3855 1 +3867 3856 1 +3867 3863 0 +3867 3864 -1 +3867 3869 1 +3867 3870 1 +3867 3871 0 +3867 3872 1 +3868 3501 1 +3868 3502 1 +3868 3508 1 +3868 3853 1 +3868 3854 0 +3868 3855 1 +3868 3856 0 +3868 3863 1 +3868 3864 0 +3868 3867 1 +3868 3869 0 +3868 3870 1 +3868 3871 1 +3868 3872 1 +3869 3870 0 +3870 3894 1 +3871 3872 1 +3871 3895 1 +3872 3896 1 +3873 3513 1 +3873 3869 1 +3873 3870 0 +3873 3877 0 +3873 3878 0 +3873 3879 1 +3873 3880 1 +3873 3885 1 +3873 3886 1 +3873 3887 0 +3873 3888 0 +3873 4231 0 +3873 4232 0 +3874 3514 1 +3874 3869 0 +3874 3870 0 +3874 3873 -1 +3874 3877 -1 +3874 3878 1 +3874 3879 1 +3874 3880 0 +3874 3885 -1 +3874 3886 -1 +3874 3887 -1 +3874 3888 1 +3874 4231 1 +3874 4232 -1 +3875 3515 0 +3875 3861 1 +3875 3862 0 +3875 3863 0 +3875 3864 0 +3875 3869 0 +3875 3870 1 +3875 3877 0 +3875 3878 -1 +3875 3879 0 +3875 3880 0 +3875 4231 1 +3875 4232 1 +3876 3516 0 +3876 3861 1 +3876 3862 1 +3876 3863 0 +3876 3864 1 +3876 3869 0 +3876 3870 1 +3876 3875 1 +3876 3877 1 +3876 3878 1 +3876 3879 1 +3876 3880 0 +3876 4231 0 +3876 4232 1 +3877 3878 1 +3877 3901 0 +3878 3902 0 +3879 3880 0 +3879 3903 1 +3880 3904 1 +3881 3521 0 +3881 3877 1 +3881 3878 1 +3881 3885 1 +3881 3886 0 +3881 3887 1 +3881 3888 -1 +3881 4239 -1 +3881 4240 0 +3881 4253 0 +3881 4254 0 +3881 4255 0 +3881 4256 1 +3882 3522 1 +3882 3877 1 +3882 3878 1 +3882 3881 0 +3882 3885 0 +3882 3886 0 +3882 3887 1 +3882 3888 1 +3882 4239 0 +3882 4240 1 +3882 4253 1 +3882 4254 0 +3882 4255 1 +3882 4256 1 +3883 3523 1 +3883 3877 1 +3883 3878 1 +3883 3885 0 +3883 3886 1 +3883 3887 1 +3883 3888 0 +3883 4229 -1 +3883 4230 0 +3883 4231 1 +3883 4232 1 +3883 4239 1 +3883 4240 0 +3884 3524 0 +3884 3877 0 +3884 3878 1 +3884 3883 0 +3884 3885 1 +3884 3886 0 +3884 3887 -1 +3884 3888 1 +3884 4229 1 +3884 4230 1 +3884 4231 1 +3884 4232 1 +3884 4239 1 +3884 4240 1 +3885 3886 -1 +3885 3909 1 +3886 3910 1 +3887 3888 1 +3887 3911 0 +3888 3912 1 +3889 3525 1 +3889 3526 0 +3889 3529 -1 +3889 3887 1 +3889 3888 1 +3889 3894 1 +3889 3895 0 +3889 3896 1 +3889 3901 1 +3889 3902 1 +3889 3903 1 +3889 3904 -1 +3890 3525 0 +3890 3526 1 +3890 3530 1 +3890 3887 0 +3890 3888 1 +3890 3889 1 +3890 3894 1 +3890 3895 1 +3890 3896 1 +3890 3901 1 +3890 3902 0 +3890 3903 -1 +3890 3904 1 +3891 3525 0 +3891 3526 1 +3891 3531 1 +3891 3877 0 +3891 3878 1 +3891 3879 1 +3891 3880 -1 +3891 3887 1 +3891 3888 0 +3891 3894 0 +3891 3895 1 +3891 3896 1 +3892 3525 0 +3892 3526 0 +3892 3532 0 +3892 3877 -1 +3892 3878 -1 +3892 3879 0 +3892 3880 -1 +3892 3887 1 +3892 3888 1 +3892 3891 1 +3892 3894 0 +3892 3895 1 +3892 3896 1 +3894 3918 1 +3895 3896 0 +3895 3919 0 +3896 3920 1 +3897 3537 1 +3897 3894 0 +3897 3901 1 +3897 3902 1 +3897 3903 0 +3897 3904 1 +3897 3909 0 +3897 3910 0 +3897 3911 1 +3897 3912 1 +3897 4255 1 +3897 4256 1 +3898 3538 -1 +3898 3894 1 +3898 3897 1 +3898 3901 1 +3898 3902 1 +3898 3903 1 +3898 3904 0 +3898 3909 1 +3898 3910 0 +3898 3911 1 +3898 3912 1 +3898 4255 1 +3898 4256 0 +3899 3539 0 +3899 3885 1 +3899 3886 1 +3899 3887 1 +3899 3888 1 +3899 3894 0 +3899 3901 0 +3899 3902 1 +3899 3903 0 +3899 3904 1 +3899 4255 0 +3899 4256 1 +3900 3540 1 +3900 3885 0 +3900 3886 1 +3900 3887 1 +3900 3888 1 +3900 3894 1 +3900 3899 1 +3900 3901 1 +3900 3902 1 +3900 3903 1 +3900 3904 0 +3900 4255 1 +3900 4256 0 +3901 3902 1 +3901 3925 1 +3902 3926 1 +3903 3904 1 +3903 3927 0 +3904 3928 0 +3905 3545 0 +3905 3901 1 +3905 3902 0 +3905 3909 0 +3905 3910 1 +3905 3911 0 +3905 3912 0 +3905 4263 1 +3905 4264 0 +3905 4277 0 +3905 4278 1 +3905 4279 1 +3905 4280 -1 +3906 3546 0 +3906 3901 -1 +3906 3902 -1 +3906 3905 1 +3906 3909 1 +3906 3910 1 +3906 3911 1 +3906 3912 0 +3906 4263 -1 +3906 4264 -1 +3906 4277 1 +3906 4278 1 +3906 4279 0 +3906 4280 0 +3907 3547 -1 +3907 3901 1 +3907 3902 0 +3907 3909 0 +3907 3910 1 +3907 3911 1 +3907 3912 1 +3907 4253 1 +3907 4254 1 +3907 4255 1 +3907 4256 1 +3907 4263 0 +3907 4264 1 +3908 3548 1 +3908 3901 1 +3908 3902 0 +3908 3907 0 +3908 3909 0 +3908 3910 0 +3908 3911 1 +3908 3912 1 +3908 4253 1 +3908 4254 1 +3908 4255 1 +3908 4256 1 +3908 4263 0 +3908 4264 1 +3909 3910 0 +3909 3933 0 +3910 3934 0 +3911 3912 1 +3911 3935 1 +3912 3936 0 +3913 3549 0 +3913 3550 1 +3913 3553 -1 +3913 3911 1 +3913 3912 1 +3913 3917 1 +3913 3918 1 +3913 3919 1 +3913 3920 1 +3913 3925 1 +3913 3926 1 +3913 3927 -1 +3913 3928 1 +3914 3549 0 +3914 3550 0 +3914 3554 1 +3914 3911 1 +3914 3912 0 +3914 3913 0 +3914 3917 1 +3914 3918 0 +3914 3919 1 +3914 3920 1 +3914 3925 0 +3914 3926 0 +3914 3927 1 +3914 3928 1 +3915 3549 1 +3915 3550 0 +3915 3555 0 +3915 3901 1 +3915 3902 1 +3915 3903 0 +3915 3904 1 +3915 3911 1 +3915 3912 1 +3915 3917 -1 +3915 3918 1 +3915 3919 0 +3915 3920 1 +3916 3549 1 +3916 3550 0 +3916 3556 0 +3916 3901 1 +3916 3902 0 +3916 3903 0 +3916 3904 1 +3916 3911 0 +3916 3912 1 +3916 3915 1 +3916 3917 0 +3916 3918 0 +3916 3919 1 +3916 3920 1 +3917 3918 0 +3917 3941 1 +3918 3942 0 +3919 3920 -1 +3919 3943 1 +3920 3944 1 +3921 3561 1 +3921 3917 -1 +3921 3918 1 +3921 3925 0 +3921 3926 0 +3921 3927 1 +3921 3928 1 +3921 3933 1 +3921 3934 1 +3921 3935 0 +3921 3936 1 +3921 4279 0 +3921 4280 1 +3922 3562 1 +3922 3917 -1 +3922 3918 -1 +3922 3921 1 +3922 3925 1 +3922 3926 -1 +3922 3927 -1 +3922 3928 0 +3922 3933 1 +3922 3934 0 +3922 3935 1 +3922 3936 1 +3922 4279 1 +3922 4280 0 +3923 3563 0 +3923 3909 0 +3923 3910 0 +3923 3911 1 +3923 3912 1 +3923 3917 0 +3923 3918 1 +3923 3925 1 +3923 3926 -1 +3923 3927 1 +3923 3928 1 +3923 4279 -1 +3923 4280 0 +3924 3564 0 +3924 3909 0 +3924 3910 1 +3924 3911 1 +3924 3912 -1 +3924 3917 0 +3924 3918 0 +3924 3923 -1 +3924 3925 0 +3924 3926 0 +3924 3927 0 +3924 3928 -1 +3924 4279 0 +3924 4280 1 +3925 3926 1 +3925 3949 1 +3926 3950 1 +3927 3928 0 +3927 3951 1 +3928 3952 0 +3929 3569 0 +3929 3925 1 +3929 3926 -1 +3929 3933 1 +3929 3934 0 +3929 3935 0 +3929 3936 1 +3929 4287 -1 +3929 4288 1 +3929 4301 0 +3929 4302 0 +3929 4303 1 +3929 4304 1 +3930 3570 1 +3930 3925 -1 +3930 3926 0 +3930 3929 1 +3930 3933 1 +3930 3934 0 +3930 3935 1 +3930 3936 -1 +3930 4287 1 +3930 4288 0 +3930 4301 0 +3930 4302 1 +3930 4303 0 +3930 4304 1 +3931 3571 1 +3931 3925 0 +3931 3926 1 +3931 3933 0 +3931 3934 1 +3931 3935 -1 +3931 3936 0 +3931 4277 0 +3931 4278 1 +3931 4279 1 +3931 4280 0 +3931 4287 1 +3931 4288 0 +3932 3572 1 +3932 3925 1 +3932 3926 1 +3932 3931 0 +3932 3933 1 +3932 3934 1 +3932 3935 0 +3932 3936 1 +3932 4277 0 +3932 4278 1 +3932 4279 0 +3932 4280 0 +3932 4287 0 +3932 4288 0 +3933 3934 1 +3933 3957 1 +3934 3958 -1 +3935 3936 1 +3935 3959 1 +3936 3960 1 +3937 3573 1 +3937 3574 0 +3937 3577 1 +3937 3935 0 +3937 3936 1 +3937 3941 1 +3937 3942 -1 +3937 3943 1 +3937 3944 0 +3937 3949 0 +3937 3950 1 +3937 3951 1 +3937 3952 1 +3938 3573 1 +3938 3574 1 +3938 3578 0 +3938 3935 1 +3938 3936 1 +3938 3937 1 +3938 3941 -1 +3938 3942 1 +3938 3943 0 +3938 3944 1 +3938 3949 0 +3938 3950 1 +3938 3951 -1 +3938 3952 1 +3939 3573 1 +3939 3574 1 +3939 3579 1 +3939 3925 1 +3939 3926 0 +3939 3927 1 +3939 3928 1 +3939 3935 0 +3939 3936 1 +3939 3941 1 +3939 3942 1 +3939 3943 0 +3939 3944 0 +3940 3573 1 +3940 3574 1 +3940 3580 1 +3940 3925 0 +3940 3926 1 +3940 3927 1 +3940 3928 1 +3940 3935 1 +3940 3936 -1 +3940 3939 0 +3940 3941 1 +3940 3942 1 +3940 3943 0 +3940 3944 1 +3941 3942 -1 +3943 3944 0 +3945 3585 1 +3945 3941 1 +3945 3942 1 +3945 3949 -1 +3945 3950 1 +3945 3951 1 +3945 3952 0 +3945 3957 -1 +3945 3958 1 +3945 3959 0 +3945 3960 1 +3945 4303 0 +3945 4304 1 +3946 3586 0 +3946 3941 1 +3946 3942 0 +3946 3945 1 +3946 3949 0 +3946 3950 1 +3946 3951 -1 +3946 3952 0 +3946 3957 0 +3946 3958 1 +3946 3959 1 +3946 3960 1 +3946 4303 0 +3946 4304 1 +3947 3587 1 +3947 3933 1 +3947 3934 1 +3947 3935 1 +3947 3936 0 +3947 3941 0 +3947 3942 1 +3947 3949 0 +3947 3950 0 +3947 3951 0 +3947 3952 -1 +3947 4303 0 +3947 4304 1 +3948 3588 1 +3948 3933 -1 +3948 3934 1 +3948 3935 1 +3948 3936 1 +3948 3941 -1 +3948 3942 0 +3948 3947 0 +3948 3949 0 +3948 3950 -1 +3948 3951 -1 +3948 3952 1 +3948 4303 0 +3948 4304 1 +3949 3950 1 +3951 3952 1 +3953 3593 1 +3953 3949 0 +3953 3950 0 +3953 3957 1 +3953 3958 0 +3953 3959 0 +3953 3960 1 +3953 4311 0 +3953 4312 0 +3954 3594 1 +3954 3949 1 +3954 3950 1 +3954 3953 1 +3954 3957 0 +3954 3958 -1 +3954 3959 -1 +3954 3960 -1 +3954 4311 0 +3954 4312 1 +3955 3595 0 +3955 3949 1 +3955 3950 0 +3955 3957 -1 +3955 3958 1 +3955 3959 1 +3955 3960 1 +3955 4301 1 +3955 4302 1 +3955 4303 0 +3955 4304 1 +3955 4311 -1 +3955 4312 0 +3956 3596 1 +3956 3949 0 +3956 3950 0 +3956 3955 0 +3956 3957 0 +3956 3958 1 +3956 3959 -1 +3956 3960 0 +3956 4301 1 +3956 4302 1 +3956 4303 0 +3956 4304 0 +3956 4311 -1 +3956 4312 0 +3957 3958 0 +3959 3960 1 +3961 3601 1 +3961 3965 0 +3961 3966 1 +3961 3967 -1 +3961 3968 1 +3961 3973 -1 +3961 3974 1 +3961 3975 0 +3961 3976 1 +3962 3602 1 +3962 3961 1 +3962 3965 0 +3962 3966 1 +3962 3967 0 +3962 3968 0 +3962 3973 -1 +3962 3974 1 +3962 3975 -1 +3962 3976 1 +3963 3603 0 +3963 3965 1 +3963 3966 1 +3963 3967 1 +3963 3968 1 +3964 3604 -1 +3964 3963 1 +3964 3965 1 +3964 3966 1 +3964 3967 1 +3964 3968 -1 +3965 3966 1 +3965 3989 1 +3966 3990 1 +3967 3968 0 +3967 3991 1 +3968 3992 0 +3969 3609 0 +3969 3965 1 +3969 3966 1 +3969 3973 0 +3969 3974 1 +3969 3975 1 +3969 3976 1 +3969 3981 1 +3969 3982 0 +3969 3983 1 +3969 3984 0 +3969 4327 -1 +3969 4328 1 +3970 3610 -1 +3970 3965 0 +3970 3966 1 +3970 3969 0 +3970 3973 1 +3970 3974 1 +3970 3975 1 +3970 3976 1 +3970 3981 0 +3970 3982 1 +3970 3983 0 +3970 3984 0 +3970 4327 1 +3970 4328 0 +3971 3611 0 +3971 3965 1 +3971 3966 0 +3971 3973 1 +3971 3974 0 +3971 3975 1 +3971 3976 -1 +3971 4327 0 +3971 4328 1 +3972 3612 0 +3972 3965 0 +3972 3966 0 +3972 3971 1 +3972 3973 0 +3972 3974 -1 +3972 3975 1 +3972 3976 0 +3972 4327 0 +3972 4328 0 +3973 3974 0 +3973 3997 1 +3974 3998 0 +3975 3976 1 +3975 3999 0 +3976 4000 1 +3977 3617 1 +3977 3973 0 +3977 3974 0 +3977 3981 0 +3977 3982 1 +3977 3983 1 +3977 3984 0 +3977 4335 -1 +3977 4336 1 +3977 4349 1 +3977 4350 0 +3977 4351 0 +3977 4352 1 +3978 3618 0 +3978 3973 1 +3978 3974 0 +3978 3977 1 +3978 3981 0 +3978 3982 1 +3978 3983 1 +3978 3984 1 +3978 4335 1 +3978 4336 0 +3978 4349 1 +3978 4350 -1 +3978 4351 1 +3978 4352 -1 +3979 3619 1 +3979 3973 1 +3979 3974 0 +3979 3981 1 +3979 3982 1 +3979 3983 0 +3979 3984 1 +3979 4325 -1 +3979 4326 1 +3979 4327 1 +3979 4328 1 +3979 4335 1 +3979 4336 1 +3980 3620 0 +3980 3973 1 +3980 3974 0 +3980 3979 0 +3980 3981 0 +3980 3982 0 +3980 3983 0 +3980 3984 0 +3980 4325 1 +3980 4326 1 +3980 4327 1 +3980 4328 1 +3980 4335 1 +3980 4336 0 +3981 3982 0 +3981 4005 0 +3982 4006 1 +3983 3984 -1 +3983 4007 1 +3984 4008 1 +3985 3621 1 +3985 3622 1 +3985 3625 1 +3985 3983 1 +3985 3984 -1 +3985 3989 1 +3985 3990 0 +3985 3991 1 +3985 3992 0 +3985 3997 0 +3985 3998 1 +3985 3999 1 +3985 4000 1 +3986 3621 1 +3986 3622 0 +3986 3626 -1 +3986 3983 1 +3986 3984 1 +3986 3985 0 +3986 3989 1 +3986 3990 0 +3986 3991 1 +3986 3992 0 +3986 3997 1 +3986 3998 0 +3986 3999 1 +3986 4000 -1 +3987 3621 1 +3987 3622 1 +3987 3627 1 +3987 3973 1 +3987 3974 1 +3987 3975 0 +3987 3976 -1 +3987 3983 1 +3987 3984 1 +3987 3989 1 +3987 3990 1 +3987 3991 0 +3987 3992 0 +3988 3621 1 +3988 3622 1 +3988 3628 -1 +3988 3973 1 +3988 3974 1 +3988 3975 0 +3988 3976 1 +3988 3983 0 +3988 3984 1 +3988 3987 0 +3988 3989 -1 +3988 3990 1 +3988 3991 0 +3988 3992 -1 +3989 3990 0 +3989 4013 1 +3990 4014 1 +3991 3992 0 +3991 4015 0 +3992 4016 1 +3993 3633 -1 +3993 3989 1 +3993 3990 0 +3993 3997 0 +3993 3998 1 +3993 3999 0 +3993 4000 1 +3993 4005 -1 +3993 4006 0 +3993 4007 1 +3993 4008 1 +3993 4351 1 +3993 4352 0 +3994 3634 1 +3994 3989 1 +3994 3990 0 +3994 3993 0 +3994 3997 1 +3994 3998 1 +3994 3999 0 +3994 4000 0 +3994 4005 1 +3994 4006 0 +3994 4007 -1 +3994 4008 0 +3994 4351 1 +3994 4352 1 +3995 3635 0 +3995 3981 1 +3995 3982 1 +3995 3983 0 +3995 3984 1 +3995 3989 0 +3995 3990 1 +3995 3997 0 +3995 3998 -1 +3995 3999 0 +3995 4000 1 +3995 4351 1 +3995 4352 0 +3996 3636 0 +3996 3981 0 +3996 3982 1 +3996 3983 0 +3996 3984 -1 +3996 3989 1 +3996 3990 0 +3996 3995 1 +3996 3997 -1 +3996 3998 1 +3996 3999 1 +3996 4000 0 +3996 4351 0 +3996 4352 1 +3997 3998 1 +3997 4021 1 +3998 4022 1 +3999 4000 1 +3999 4023 0 +4000 4024 1 +4001 3641 0 +4001 3997 1 +4001 3998 1 +4001 4005 0 +4001 4006 1 +4001 4007 -1 +4001 4008 1 +4001 4359 1 +4001 4360 0 +4001 4373 -1 +4001 4374 0 +4001 4375 0 +4001 4376 1 +4002 3642 0 +4002 3997 1 +4002 3998 1 +4002 4001 1 +4002 4005 -1 +4002 4006 1 +4002 4007 0 +4002 4008 1 +4002 4359 0 +4002 4360 1 +4002 4373 1 +4002 4374 1 +4002 4375 0 +4002 4376 0 +4003 3643 0 +4003 3997 0 +4003 3998 0 +4003 4005 0 +4003 4006 -1 +4003 4007 0 +4003 4008 1 +4003 4349 0 +4003 4350 -1 +4003 4351 1 +4003 4352 1 +4003 4359 1 +4003 4360 1 +4004 3644 -1 +4004 3997 1 +4004 3998 0 +4004 4003 0 +4004 4005 1 +4004 4006 0 +4004 4007 0 +4004 4008 0 +4004 4349 1 +4004 4350 -1 +4004 4351 1 +4004 4352 1 +4004 4359 0 +4004 4360 0 +4005 4006 0 +4005 4029 1 +4006 4030 1 +4007 4008 1 +4007 4031 1 +4008 4032 1 +4009 3645 1 +4009 3646 1 +4009 3649 0 +4009 4007 0 +4009 4008 1 +4009 4013 0 +4009 4014 1 +4009 4015 0 +4009 4016 1 +4009 4021 1 +4009 4022 1 +4009 4023 1 +4009 4024 0 +4010 3645 1 +4010 3646 0 +4010 3650 1 +4010 4007 1 +4010 4008 1 +4010 4009 -1 +4010 4013 0 +4010 4014 -1 +4010 4015 0 +4010 4016 -1 +4010 4021 1 +4010 4022 1 +4010 4023 -1 +4010 4024 1 +4011 3645 1 +4011 3646 0 +4011 3651 0 +4011 3997 0 +4011 3998 1 +4011 3999 0 +4011 4000 1 +4011 4007 1 +4011 4008 0 +4011 4013 1 +4011 4014 1 +4011 4015 1 +4011 4016 0 +4012 3645 0 +4012 3646 1 +4012 3652 0 +4012 3997 -1 +4012 3998 0 +4012 3999 1 +4012 4000 0 +4012 4007 0 +4012 4008 0 +4012 4011 1 +4012 4013 1 +4012 4014 1 +4012 4015 1 +4012 4016 0 +4013 4014 1 +4013 4037 1 +4014 4038 -1 +4015 4016 0 +4015 4039 0 +4016 4040 -1 +4017 3657 1 +4017 4013 0 +4017 4014 0 +4017 4021 0 +4017 4022 0 +4017 4023 0 +4017 4024 1 +4017 4029 1 +4017 4030 1 +4017 4031 0 +4017 4032 1 +4017 4375 1 +4017 4376 0 +4018 3658 1 +4018 4013 0 +4018 4014 0 +4018 4017 1 +4018 4021 0 +4018 4022 0 +4018 4023 1 +4018 4024 1 +4018 4029 1 +4018 4030 1 +4018 4031 1 +4018 4032 1 +4018 4375 1 +4018 4376 1 +4019 3659 0 +4019 4005 0 +4019 4006 1 +4019 4007 0 +4019 4008 1 +4019 4013 1 +4019 4014 1 +4019 4021 0 +4019 4022 0 +4019 4023 1 +4019 4024 1 +4019 4375 1 +4019 4376 -1 +4020 3660 1 +4020 4005 1 +4020 4006 1 +4020 4007 1 +4020 4008 1 +4020 4013 1 +4020 4014 1 +4020 4019 -1 +4020 4021 1 +4020 4022 1 +4020 4023 -1 +4020 4024 1 +4020 4375 1 +4020 4376 1 +4021 4022 1 +4021 4045 1 +4022 4046 0 +4023 4024 1 +4023 4047 1 +4024 4048 1 +4025 3665 0 +4025 4021 1 +4025 4022 1 +4025 4029 1 +4025 4030 1 +4025 4031 0 +4025 4032 0 +4025 4383 1 +4025 4384 0 +4025 4397 0 +4025 4398 1 +4025 4399 -1 +4025 4400 -1 +4026 3666 0 +4026 4021 -1 +4026 4022 1 +4026 4025 -1 +4026 4029 1 +4026 4030 1 +4026 4031 1 +4026 4032 1 +4026 4383 1 +4026 4384 1 +4026 4397 1 +4026 4398 0 +4026 4399 1 +4026 4400 1 +4027 3667 -1 +4027 4021 1 +4027 4022 1 +4027 4029 1 +4027 4030 1 +4027 4031 0 +4027 4032 -1 +4027 4373 1 +4027 4374 1 +4027 4375 1 +4027 4376 1 +4027 4383 0 +4027 4384 1 +4028 3668 1 +4028 4021 0 +4028 4022 1 +4028 4027 1 +4028 4029 1 +4028 4030 -1 +4028 4031 0 +4028 4032 1 +4028 4373 0 +4028 4374 -1 +4028 4375 0 +4028 4376 1 +4028 4383 1 +4028 4384 1 +4029 4030 1 +4029 4053 1 +4030 4054 1 +4031 4032 1 +4031 4055 0 +4032 4056 1 +4033 3669 1 +4033 3670 0 +4033 3673 0 +4033 4031 0 +4033 4032 0 +4033 4037 0 +4033 4038 1 +4033 4039 1 +4033 4040 1 +4033 4045 1 +4033 4046 0 +4033 4047 0 +4033 4048 1 +4034 3669 0 +4034 3670 0 +4034 3674 0 +4034 4031 1 +4034 4032 1 +4034 4033 0 +4034 4037 1 +4034 4038 0 +4034 4039 1 +4034 4040 1 +4034 4045 0 +4034 4046 0 +4034 4047 0 +4034 4048 0 +4035 3669 0 +4035 3670 -1 +4035 3675 1 +4035 4021 0 +4035 4022 0 +4035 4023 1 +4035 4024 1 +4035 4031 0 +4035 4032 0 +4035 4037 0 +4035 4038 0 +4035 4039 1 +4035 4040 1 +4036 3669 1 +4036 3670 1 +4036 3676 1 +4036 4021 0 +4036 4022 1 +4036 4023 1 +4036 4024 1 +4036 4031 0 +4036 4032 1 +4036 4035 -1 +4036 4037 1 +4036 4038 0 +4036 4039 1 +4036 4040 0 +4037 4038 0 +4037 4061 -1 +4038 4062 1 +4039 4040 0 +4039 4063 1 +4040 4064 -1 +4041 3681 0 +4041 4037 0 +4041 4038 1 +4041 4045 1 +4041 4046 1 +4041 4047 1 +4041 4048 0 +4041 4053 0 +4041 4054 1 +4041 4055 1 +4041 4056 0 +4041 4399 0 +4041 4400 0 +4042 3682 0 +4042 4037 1 +4042 4038 -1 +4042 4041 1 +4042 4045 1 +4042 4046 0 +4042 4047 0 +4042 4048 0 +4042 4053 0 +4042 4054 0 +4042 4055 0 +4042 4056 1 +4042 4399 0 +4042 4400 0 +4043 3683 0 +4043 4029 1 +4043 4030 0 +4043 4031 0 +4043 4032 1 +4043 4037 1 +4043 4038 1 +4043 4045 1 +4043 4046 1 +4043 4047 1 +4043 4048 1 +4043 4399 1 +4043 4400 1 +4044 3684 0 +4044 4029 1 +4044 4030 1 +4044 4031 -1 +4044 4032 0 +4044 4037 1 +4044 4038 0 +4044 4043 -1 +4044 4045 0 +4044 4046 1 +4044 4047 1 +4044 4048 0 +4044 4399 1 +4044 4400 1 +4045 4046 0 +4045 4069 1 +4046 4070 1 +4047 4048 1 +4047 4071 1 +4048 4072 -1 +4049 3689 0 +4049 4045 1 +4049 4046 0 +4049 4053 1 +4049 4054 1 +4049 4055 0 +4049 4056 1 +4049 4407 0 +4049 4408 1 +4049 4421 1 +4049 4422 0 +4049 4423 1 +4049 4424 1 +4050 3690 -1 +4050 4045 1 +4050 4046 1 +4050 4049 0 +4050 4053 1 +4050 4054 1 +4050 4055 1 +4050 4056 -1 +4050 4407 0 +4050 4408 1 +4050 4421 0 +4050 4422 1 +4050 4423 0 +4050 4424 1 +4051 3691 0 +4051 4045 1 +4051 4046 0 +4051 4053 1 +4051 4054 1 +4051 4055 1 +4051 4056 0 +4051 4397 1 +4051 4398 0 +4051 4399 0 +4051 4400 1 +4051 4407 1 +4051 4408 1 +4052 3692 0 +4052 4045 1 +4052 4046 -1 +4052 4051 0 +4052 4053 0 +4052 4054 1 +4052 4055 -1 +4052 4056 1 +4052 4397 0 +4052 4398 1 +4052 4399 0 +4052 4400 1 +4052 4407 0 +4052 4408 0 +4053 4054 1 +4053 4077 1 +4054 4078 0 +4055 4056 1 +4055 4079 1 +4056 4080 1 +4057 3693 0 +4057 3694 0 +4057 3697 1 +4057 4055 1 +4057 4056 1 +4057 4061 0 +4057 4062 1 +4057 4063 0 +4057 4064 1 +4057 4069 1 +4057 4070 1 +4057 4071 -1 +4057 4072 0 +4058 3693 1 +4058 3694 0 +4058 3698 1 +4058 4055 0 +4058 4056 1 +4058 4057 1 +4058 4061 1 +4058 4062 1 +4058 4063 1 +4058 4064 1 +4058 4069 0 +4058 4070 0 +4058 4071 1 +4058 4072 1 +4059 3693 0 +4059 3694 1 +4059 3699 1 +4059 4045 1 +4059 4046 0 +4059 4047 1 +4059 4048 1 +4059 4055 1 +4059 4056 1 +4059 4061 -1 +4059 4062 1 +4059 4063 0 +4059 4064 1 +4060 3693 1 +4060 3694 0 +4060 3700 1 +4060 4045 -1 +4060 4046 1 +4060 4047 1 +4060 4048 -1 +4060 4055 1 +4060 4056 1 +4060 4059 1 +4060 4061 0 +4060 4062 1 +4060 4063 0 +4060 4064 1 +4061 4062 0 +4061 4085 1 +4062 4086 0 +4063 4064 1 +4063 4087 1 +4064 4088 0 +4065 3705 -1 +4065 4061 1 +4065 4062 0 +4065 4069 1 +4065 4070 1 +4065 4071 0 +4065 4072 0 +4065 4077 0 +4065 4078 1 +4065 4079 0 +4065 4080 1 +4065 4423 1 +4065 4424 1 +4066 3706 0 +4066 4061 1 +4066 4062 1 +4066 4065 0 +4066 4069 1 +4066 4070 1 +4066 4071 1 +4066 4072 0 +4066 4077 1 +4066 4078 1 +4066 4079 0 +4066 4080 0 +4066 4423 1 +4066 4424 1 +4067 3707 -1 +4067 4053 1 +4067 4054 1 +4067 4055 1 +4067 4056 0 +4067 4061 1 +4067 4062 1 +4067 4069 1 +4067 4070 0 +4067 4071 0 +4067 4072 1 +4067 4423 0 +4067 4424 1 +4068 3708 1 +4068 4053 0 +4068 4054 1 +4068 4055 0 +4068 4056 0 +4068 4061 1 +4068 4062 1 +4068 4067 1 +4068 4069 1 +4068 4070 -1 +4068 4071 1 +4068 4072 -1 +4068 4423 0 +4068 4424 0 +4069 4070 0 +4069 4093 1 +4070 4094 1 +4071 4072 0 +4071 4095 0 +4072 4096 0 +4073 3713 0 +4073 4069 1 +4073 4070 1 +4073 4077 0 +4073 4078 0 +4073 4079 0 +4073 4080 0 +4073 4431 1 +4073 4432 1 +4073 4445 0 +4073 4446 1 +4073 4447 0 +4073 4448 1 +4074 3714 1 +4074 4069 1 +4074 4070 1 +4074 4073 0 +4074 4077 -1 +4074 4078 1 +4074 4079 1 +4074 4080 -1 +4074 4431 1 +4074 4432 0 +4074 4445 -1 +4074 4446 0 +4074 4447 0 +4074 4448 1 +4075 3715 0 +4075 4069 1 +4075 4070 0 +4075 4077 1 +4075 4078 1 +4075 4079 1 +4075 4080 -1 +4075 4421 1 +4075 4422 1 +4075 4423 0 +4075 4424 0 +4075 4431 0 +4075 4432 0 +4076 3716 1 +4076 4069 1 +4076 4070 1 +4076 4075 1 +4076 4077 -1 +4076 4078 0 +4076 4079 0 +4076 4080 0 +4076 4421 -1 +4076 4422 -1 +4076 4423 0 +4076 4424 0 +4076 4431 1 +4076 4432 1 +4077 4078 1 +4077 4101 0 +4078 4102 1 +4079 4080 0 +4079 4103 1 +4080 4104 1 +4081 3717 1 +4081 3718 0 +4081 3721 1 +4081 4079 1 +4081 4080 1 +4081 4085 -1 +4081 4086 0 +4081 4087 1 +4081 4088 0 +4081 4093 0 +4081 4094 1 +4081 4095 1 +4081 4096 -1 +4082 3717 0 +4082 3718 1 +4082 3722 1 +4082 4079 0 +4082 4080 1 +4082 4081 0 +4082 4085 -1 +4082 4086 0 +4082 4087 1 +4082 4088 1 +4082 4093 1 +4082 4094 1 +4082 4095 1 +4082 4096 0 +4083 3717 1 +4083 3718 0 +4083 3723 0 +4083 4069 -1 +4083 4070 1 +4083 4071 1 +4083 4072 1 +4083 4079 1 +4083 4080 -1 +4083 4085 1 +4083 4086 1 +4083 4087 0 +4083 4088 0 +4084 3717 0 +4084 3718 1 +4084 3724 1 +4084 4069 1 +4084 4070 1 +4084 4071 1 +4084 4072 0 +4084 4079 0 +4084 4080 0 +4084 4083 0 +4084 4085 0 +4084 4086 -1 +4084 4087 1 +4084 4088 1 +4085 4086 1 +4085 4109 0 +4086 4110 0 +4087 4088 1 +4087 4111 1 +4088 4112 1 +4089 3729 -1 +4089 4085 0 +4089 4086 0 +4089 4093 1 +4089 4094 -1 +4089 4095 0 +4089 4096 0 +4089 4101 0 +4089 4102 0 +4089 4103 -1 +4089 4104 1 +4089 4447 1 +4089 4448 0 +4090 3730 1 +4090 4085 1 +4090 4086 0 +4090 4089 1 +4090 4093 1 +4090 4094 1 +4090 4095 0 +4090 4096 1 +4090 4101 0 +4090 4102 0 +4090 4103 1 +4090 4104 0 +4090 4447 1 +4090 4448 0 +4091 3731 0 +4091 4077 1 +4091 4078 0 +4091 4079 0 +4091 4080 1 +4091 4085 1 +4091 4086 1 +4091 4093 0 +4091 4094 0 +4091 4095 1 +4091 4096 1 +4091 4447 1 +4091 4448 1 +4092 3732 1 +4092 4077 1 +4092 4078 0 +4092 4079 0 +4092 4080 1 +4092 4085 0 +4092 4086 1 +4092 4091 0 +4092 4093 1 +4092 4094 -1 +4092 4095 1 +4092 4096 1 +4092 4447 0 +4092 4448 1 +4093 4094 0 +4093 4117 1 +4094 4118 0 +4095 4096 0 +4095 4119 1 +4096 4120 0 +4097 3737 0 +4097 4093 1 +4097 4094 0 +4097 4101 0 +4097 4102 1 +4097 4103 1 +4097 4104 -1 +4097 4455 1 +4097 4456 1 +4097 4469 0 +4097 4470 0 +4097 4471 1 +4097 4472 0 +4098 3738 1 +4098 4093 1 +4098 4094 1 +4098 4097 0 +4098 4101 0 +4098 4102 0 +4098 4103 0 +4098 4104 -1 +4098 4455 -1 +4098 4456 0 +4098 4469 1 +4098 4470 1 +4098 4471 1 +4098 4472 0 +4099 3739 1 +4099 4093 0 +4099 4094 1 +4099 4101 0 +4099 4102 1 +4099 4103 1 +4099 4104 0 +4099 4445 1 +4099 4446 1 +4099 4447 1 +4099 4448 0 +4099 4455 1 +4099 4456 1 +4100 3740 0 +4100 4093 1 +4100 4094 1 +4100 4099 -1 +4100 4101 1 +4100 4102 0 +4100 4103 0 +4100 4104 1 +4100 4445 1 +4100 4446 -1 +4100 4447 0 +4100 4448 0 +4100 4455 0 +4100 4456 1 +4101 4102 1 +4101 4125 0 +4102 4126 0 +4103 4104 0 +4103 4127 1 +4104 4128 0 +4105 3741 0 +4105 3742 1 +4105 3745 0 +4105 4103 1 +4105 4104 1 +4105 4109 1 +4105 4110 1 +4105 4111 0 +4105 4112 1 +4105 4117 0 +4105 4118 0 +4105 4119 0 +4105 4120 1 +4106 3741 0 +4106 3742 1 +4106 3746 0 +4106 4103 0 +4106 4104 1 +4106 4105 1 +4106 4109 1 +4106 4110 1 +4106 4111 1 +4106 4112 0 +4106 4117 1 +4106 4118 1 +4106 4119 0 +4106 4120 1 +4107 3741 1 +4107 3742 0 +4107 3747 1 +4107 4093 1 +4107 4094 1 +4107 4095 0 +4107 4096 1 +4107 4103 0 +4107 4104 -1 +4107 4109 1 +4107 4110 1 +4107 4111 1 +4107 4112 0 +4108 3741 1 +4108 3742 1 +4108 3748 0 +4108 4093 1 +4108 4094 0 +4108 4095 0 +4108 4096 0 +4108 4103 1 +4108 4104 1 +4108 4107 1 +4108 4109 1 +4108 4110 0 +4108 4111 1 +4108 4112 1 +4109 4110 0 +4109 4133 1 +4110 4134 1 +4111 4112 1 +4111 4135 1 +4112 4136 0 +4113 3753 1 +4113 4109 1 +4113 4110 1 +4113 4117 1 +4113 4118 -1 +4113 4119 1 +4113 4120 1 +4113 4125 1 +4113 4126 1 +4113 4127 1 +4113 4128 0 +4113 4471 -1 +4113 4472 -1 +4114 3754 0 +4114 4109 0 +4114 4110 1 +4114 4113 0 +4114 4117 -1 +4114 4118 1 +4114 4119 1 +4114 4120 1 +4114 4125 1 +4114 4126 0 +4114 4127 1 +4114 4128 1 +4114 4471 0 +4114 4472 1 +4115 3755 1 +4115 4101 1 +4115 4102 1 +4115 4103 1 +4115 4104 0 +4115 4109 0 +4115 4110 1 +4115 4117 0 +4115 4118 1 +4115 4119 0 +4115 4120 1 +4115 4471 1 +4115 4472 1 +4116 3756 1 +4116 4101 1 +4116 4102 0 +4116 4103 0 +4116 4104 1 +4116 4109 -1 +4116 4110 1 +4116 4115 0 +4116 4117 1 +4116 4118 -1 +4116 4119 1 +4116 4120 -1 +4116 4471 1 +4116 4472 1 +4117 4118 0 +4117 4141 1 +4118 4142 1 +4119 4120 1 +4119 4143 1 +4120 4144 0 +4121 3761 0 +4121 4117 0 +4121 4118 0 +4121 4125 1 +4121 4126 0 +4121 4127 1 +4121 4128 0 +4121 4479 -1 +4121 4480 1 +4121 4493 -1 +4121 4494 0 +4121 4495 0 +4121 4496 1 +4122 3762 1 +4122 4117 0 +4122 4118 0 +4122 4121 0 +4122 4125 1 +4122 4126 0 +4122 4127 1 +4122 4128 -1 +4122 4479 1 +4122 4480 -1 +4122 4493 0 +4122 4494 1 +4122 4495 0 +4122 4496 1 +4123 3763 1 +4123 4117 1 +4123 4118 1 +4123 4125 0 +4123 4126 0 +4123 4127 1 +4123 4128 0 +4123 4469 0 +4123 4470 0 +4123 4471 0 +4123 4472 1 +4123 4479 1 +4123 4480 1 +4124 3764 1 +4124 4117 0 +4124 4118 0 +4124 4123 0 +4124 4125 -1 +4124 4126 1 +4124 4127 1 +4124 4128 1 +4124 4469 1 +4124 4470 0 +4124 4471 1 +4124 4472 1 +4124 4479 1 +4124 4480 0 +4125 4126 0 +4125 4149 1 +4126 4150 0 +4127 4128 1 +4127 4151 0 +4128 4152 0 +4129 3765 0 +4129 3766 1 +4129 3769 0 +4129 4127 1 +4129 4128 1 +4129 4133 0 +4129 4134 1 +4129 4135 1 +4129 4136 1 +4129 4141 1 +4129 4142 0 +4129 4143 1 +4129 4144 0 +4130 3765 0 +4130 3766 0 +4130 3770 0 +4130 4127 0 +4130 4128 1 +4130 4129 0 +4130 4133 0 +4130 4134 0 +4130 4135 0 +4130 4136 0 +4130 4141 1 +4130 4142 -1 +4130 4143 1 +4130 4144 1 +4131 3765 0 +4131 3766 1 +4131 3771 1 +4131 4117 0 +4131 4118 0 +4131 4119 0 +4131 4120 1 +4131 4127 1 +4131 4128 1 +4131 4133 1 +4131 4134 1 +4131 4135 0 +4131 4136 1 +4132 3765 1 +4132 3766 1 +4132 3772 0 +4132 4117 1 +4132 4118 1 +4132 4119 0 +4132 4120 0 +4132 4127 -1 +4132 4128 1 +4132 4131 1 +4132 4133 1 +4132 4134 1 +4132 4135 0 +4132 4136 1 +4133 4134 1 +4133 4157 1 +4134 4158 1 +4135 4136 1 +4135 4159 1 +4136 4160 1 +4137 3777 1 +4137 4133 1 +4137 4134 1 +4137 4141 1 +4137 4142 1 +4137 4143 0 +4137 4144 0 +4137 4149 1 +4137 4150 0 +4137 4151 1 +4137 4152 0 +4137 4495 -1 +4137 4496 0 +4138 3778 0 +4138 4133 -1 +4138 4134 1 +4138 4137 0 +4138 4141 -1 +4138 4142 1 +4138 4143 -1 +4138 4144 -1 +4138 4149 0 +4138 4150 0 +4138 4151 1 +4138 4152 1 +4138 4495 0 +4138 4496 0 +4139 3779 -1 +4139 4125 0 +4139 4126 0 +4139 4127 1 +4139 4128 0 +4139 4133 0 +4139 4134 1 +4139 4141 0 +4139 4142 1 +4139 4143 1 +4139 4144 1 +4139 4495 0 +4139 4496 0 +4140 3780 0 +4140 4125 -1 +4140 4126 0 +4140 4127 1 +4140 4128 1 +4140 4133 1 +4140 4134 0 +4140 4139 1 +4140 4141 -1 +4140 4142 1 +4140 4143 1 +4140 4144 1 +4140 4495 1 +4140 4496 0 +4141 4142 -1 +4141 4165 0 +4142 4166 0 +4143 4144 1 +4143 4167 0 +4144 4168 0 +4145 3785 1 +4145 4141 0 +4145 4142 0 +4145 4149 0 +4145 4150 1 +4145 4151 0 +4145 4152 0 +4145 4503 0 +4145 4504 0 +4145 4517 1 +4145 4518 1 +4145 4519 0 +4145 4520 1 +4146 3786 0 +4146 4141 1 +4146 4142 0 +4146 4145 1 +4146 4149 1 +4146 4150 1 +4146 4151 0 +4146 4152 1 +4146 4503 0 +4146 4504 -1 +4146 4517 0 +4146 4518 1 +4146 4519 0 +4146 4520 1 +4147 3787 0 +4147 4141 1 +4147 4142 0 +4147 4149 0 +4147 4150 1 +4147 4151 1 +4147 4152 1 +4147 4493 0 +4147 4494 0 +4147 4495 1 +4147 4496 0 +4147 4503 0 +4147 4504 1 +4148 3788 1 +4148 4141 1 +4148 4142 -1 +4148 4147 0 +4148 4149 0 +4148 4150 0 +4148 4151 0 +4148 4152 1 +4148 4493 1 +4148 4494 -1 +4148 4495 1 +4148 4496 0 +4148 4503 0 +4148 4504 1 +4149 4150 -1 +4149 4173 1 +4150 4174 0 +4151 4152 1 +4151 4175 1 +4152 4176 1 +4153 3789 1 +4153 3790 0 +4153 3793 1 +4153 4151 1 +4153 4152 0 +4153 4157 0 +4153 4158 1 +4153 4159 0 +4153 4160 1 +4153 4165 1 +4153 4166 1 +4153 4167 1 +4153 4168 1 +4154 3789 0 +4154 3790 1 +4154 3794 1 +4154 4151 1 +4154 4152 1 +4154 4153 1 +4154 4157 0 +4154 4158 1 +4154 4159 -1 +4154 4160 1 +4154 4165 -1 +4154 4166 0 +4154 4167 0 +4154 4168 1 +4155 3789 0 +4155 3790 1 +4155 3795 0 +4155 4141 1 +4155 4142 1 +4155 4143 1 +4155 4144 1 +4155 4151 1 +4155 4152 1 +4155 4157 0 +4155 4158 1 +4155 4159 0 +4155 4160 1 +4156 3789 0 +4156 3790 0 +4156 3796 0 +4156 4141 1 +4156 4142 1 +4156 4143 0 +4156 4144 1 +4156 4151 1 +4156 4152 0 +4156 4155 -1 +4156 4157 0 +4156 4158 1 +4156 4159 0 +4156 4160 1 +4157 4158 1 +4157 4181 0 +4158 4182 0 +4159 4160 0 +4159 4183 1 +4160 4184 0 +4161 3801 0 +4161 4157 0 +4161 4158 0 +4161 4165 1 +4161 4166 1 +4161 4167 1 +4161 4168 1 +4161 4173 1 +4161 4174 -1 +4161 4175 1 +4161 4176 -1 +4161 4519 1 +4161 4520 -1 +4162 3802 -1 +4162 4157 1 +4162 4158 -1 +4162 4161 1 +4162 4165 1 +4162 4166 1 +4162 4167 0 +4162 4168 -1 +4162 4173 1 +4162 4174 0 +4162 4175 1 +4162 4176 1 +4162 4519 -1 +4162 4520 1 +4163 3803 1 +4163 4149 0 +4163 4150 1 +4163 4151 1 +4163 4152 0 +4163 4157 1 +4163 4158 1 +4163 4165 0 +4163 4166 0 +4163 4167 1 +4163 4168 1 +4163 4519 0 +4163 4520 1 +4164 3804 0 +4164 4149 1 +4164 4150 1 +4164 4151 1 +4164 4152 -1 +4164 4157 1 +4164 4158 0 +4164 4163 -1 +4164 4165 1 +4164 4166 1 +4164 4167 0 +4164 4168 0 +4164 4519 0 +4164 4520 1 +4165 4166 1 +4165 4189 1 +4166 4190 0 +4167 4168 0 +4167 4191 0 +4168 4192 1 +4169 3809 1 +4169 4165 0 +4169 4166 1 +4169 4173 1 +4169 4174 -1 +4169 4175 -1 +4169 4176 1 +4169 4527 1 +4169 4528 1 +4169 4541 1 +4169 4542 -1 +4169 4543 1 +4169 4544 1 +4170 3810 -1 +4170 4165 0 +4170 4166 0 +4170 4169 -1 +4170 4173 -1 +4170 4174 1 +4170 4175 1 +4170 4176 0 +4170 4527 0 +4170 4528 1 +4170 4541 1 +4170 4542 1 +4170 4543 1 +4170 4544 1 +4171 3811 0 +4171 4165 1 +4171 4166 0 +4171 4173 -1 +4171 4174 0 +4171 4175 1 +4171 4176 0 +4171 4517 0 +4171 4518 1 +4171 4519 0 +4171 4520 1 +4171 4527 0 +4171 4528 1 +4172 3812 1 +4172 4165 1 +4172 4166 0 +4172 4171 1 +4172 4173 1 +4172 4174 0 +4172 4175 0 +4172 4176 0 +4172 4517 0 +4172 4518 0 +4172 4519 1 +4172 4520 1 +4172 4527 1 +4172 4528 1 +4173 4174 1 +4173 4197 1 +4174 4198 1 +4175 4176 1 +4175 4199 -1 +4176 4200 1 +4177 3813 1 +4177 3814 1 +4177 3817 1 +4177 4175 0 +4177 4176 1 +4177 4181 1 +4177 4182 0 +4177 4183 1 +4177 4184 0 +4177 4189 0 +4177 4190 1 +4177 4191 1 +4177 4192 1 +4178 3813 1 +4178 3814 -1 +4178 3818 1 +4178 4175 1 +4178 4176 0 +4178 4177 -1 +4178 4181 0 +4178 4182 1 +4178 4183 1 +4178 4184 1 +4178 4189 1 +4178 4190 1 +4178 4191 1 +4178 4192 0 +4179 3813 1 +4179 3814 1 +4179 3819 0 +4179 4165 0 +4179 4166 -1 +4179 4167 0 +4179 4168 0 +4179 4175 1 +4179 4176 1 +4179 4181 1 +4179 4182 -1 +4179 4183 -1 +4179 4184 -1 +4180 3813 1 +4180 3814 -1 +4180 3820 1 +4180 4165 1 +4180 4166 1 +4180 4167 0 +4180 4168 1 +4180 4175 1 +4180 4176 1 +4180 4179 1 +4180 4181 1 +4180 4182 0 +4180 4183 1 +4180 4184 1 +4181 4182 0 +4181 4205 1 +4182 4206 0 +4183 4184 0 +4183 4207 1 +4184 4208 -1 +4185 3825 1 +4185 4181 -1 +4185 4182 1 +4185 4189 1 +4185 4190 1 +4185 4191 1 +4185 4192 1 +4185 4197 -1 +4185 4198 1 +4185 4199 0 +4185 4200 0 +4185 4543 1 +4185 4544 0 +4186 3826 -1 +4186 4181 1 +4186 4182 -1 +4186 4185 1 +4186 4189 1 +4186 4190 1 +4186 4191 1 +4186 4192 1 +4186 4197 1 +4186 4198 1 +4186 4199 0 +4186 4200 0 +4186 4543 -1 +4186 4544 0 +4187 3827 1 +4187 4173 1 +4187 4174 1 +4187 4175 -1 +4187 4176 0 +4187 4181 1 +4187 4182 1 +4187 4189 1 +4187 4190 1 +4187 4191 1 +4187 4192 0 +4187 4543 1 +4187 4544 1 +4188 3828 1 +4188 4173 0 +4188 4174 0 +4188 4175 1 +4188 4176 1 +4188 4181 1 +4188 4182 0 +4188 4187 1 +4188 4189 1 +4188 4190 0 +4188 4191 1 +4188 4192 1 +4188 4543 0 +4188 4544 0 +4189 4190 0 +4189 4213 1 +4190 4214 0 +4191 4192 0 +4191 4215 0 +4192 4216 -1 +4193 3833 0 +4193 4189 1 +4193 4190 0 +4193 4197 1 +4193 4198 1 +4193 4199 1 +4193 4200 1 +4193 4551 1 +4193 4552 0 +4193 4565 1 +4193 4566 1 +4193 4567 1 +4193 4568 0 +4194 3834 1 +4194 4189 0 +4194 4190 0 +4194 4193 1 +4194 4197 1 +4194 4198 1 +4194 4199 0 +4194 4200 1 +4194 4551 1 +4194 4552 1 +4194 4565 1 +4194 4566 1 +4194 4567 1 +4194 4568 1 +4195 3835 0 +4195 4189 1 +4195 4190 1 +4195 4197 0 +4195 4198 0 +4195 4199 1 +4195 4200 0 +4195 4541 0 +4195 4542 1 +4195 4543 0 +4195 4544 -1 +4195 4551 1 +4195 4552 1 +4196 3836 1 +4196 4189 0 +4196 4190 0 +4196 4195 1 +4196 4197 1 +4196 4198 1 +4196 4199 -1 +4196 4200 0 +4196 4541 1 +4196 4542 -1 +4196 4543 1 +4196 4544 -1 +4196 4551 1 +4196 4552 0 +4197 4198 1 +4197 4221 0 +4198 4222 1 +4199 4200 -1 +4199 4223 1 +4200 4224 1 +4201 3837 1 +4201 3838 0 +4201 3841 1 +4201 4199 -1 +4201 4200 0 +4201 4205 1 +4201 4206 0 +4201 4207 -1 +4201 4208 1 +4201 4213 0 +4201 4214 1 +4201 4215 1 +4201 4216 1 +4202 3837 0 +4202 3838 1 +4202 3842 -1 +4202 4199 1 +4202 4200 -1 +4202 4201 -1 +4202 4205 0 +4202 4206 1 +4202 4207 1 +4202 4208 0 +4202 4213 0 +4202 4214 0 +4202 4215 1 +4202 4216 1 +4203 3837 0 +4203 3838 0 +4203 3843 0 +4203 4189 0 +4203 4190 0 +4203 4191 0 +4203 4192 -1 +4203 4199 0 +4203 4200 0 +4203 4205 0 +4203 4206 0 +4203 4207 0 +4203 4208 -1 +4204 3837 1 +4204 3838 0 +4204 3844 1 +4204 4189 1 +4204 4190 -1 +4204 4191 0 +4204 4192 1 +4204 4199 0 +4204 4200 1 +4204 4203 1 +4204 4205 0 +4204 4206 1 +4204 4207 1 +4204 4208 0 +4205 4206 -1 +4205 4229 1 +4206 4230 -1 +4207 4208 1 +4207 4231 1 +4208 4232 1 +4209 3849 0 +4209 4205 -1 +4209 4206 1 +4209 4213 0 +4209 4214 1 +4209 4215 0 +4209 4216 0 +4209 4221 1 +4209 4222 1 +4209 4223 1 +4209 4224 -1 +4209 4567 0 +4209 4568 1 +4210 3850 -1 +4210 4205 1 +4210 4206 1 +4210 4209 1 +4210 4213 1 +4210 4214 1 +4210 4215 0 +4210 4216 0 +4210 4221 1 +4210 4222 1 +4210 4223 1 +4210 4224 -1 +4210 4567 1 +4210 4568 0 +4211 3851 1 +4211 4197 1 +4211 4198 1 +4211 4199 0 +4211 4200 1 +4211 4205 1 +4211 4206 1 +4211 4213 -1 +4211 4214 1 +4211 4215 1 +4211 4216 0 +4211 4567 0 +4211 4568 -1 +4212 3852 0 +4212 4197 1 +4212 4198 1 +4212 4199 0 +4212 4200 1 +4212 4205 0 +4212 4206 1 +4212 4211 0 +4212 4213 1 +4212 4214 1 +4212 4215 -1 +4212 4216 1 +4212 4567 1 +4212 4568 0 +4213 4214 0 +4213 4237 1 +4214 4238 1 +4215 4216 0 +4215 4239 1 +4216 4240 1 +4217 3857 0 +4217 4213 0 +4217 4214 1 +4217 4221 1 +4217 4222 1 +4217 4223 1 +4217 4224 0 +4217 4575 0 +4217 4576 0 +4217 4589 0 +4217 4590 1 +4217 4591 1 +4217 4592 1 +4218 3858 1 +4218 4213 0 +4218 4214 1 +4218 4217 1 +4218 4221 0 +4218 4222 0 +4218 4223 1 +4218 4224 -1 +4218 4575 0 +4218 4576 1 +4218 4589 0 +4218 4590 1 +4218 4591 1 +4218 4592 0 +4219 3859 1 +4219 4213 1 +4219 4214 1 +4219 4221 1 +4219 4222 0 +4219 4223 1 +4219 4224 1 +4219 4565 1 +4219 4566 0 +4219 4567 0 +4219 4568 -1 +4219 4575 1 +4219 4576 1 +4220 3860 0 +4220 4213 1 +4220 4214 1 +4220 4219 0 +4220 4221 1 +4220 4222 0 +4220 4223 1 +4220 4224 0 +4220 4565 1 +4220 4566 0 +4220 4567 1 +4220 4568 1 +4220 4575 0 +4220 4576 -1 +4221 4222 -1 +4221 4245 1 +4222 4246 1 +4223 4224 1 +4223 4247 0 +4224 4248 -1 +4225 3861 -1 +4225 3862 0 +4225 3865 1 +4225 4223 1 +4225 4224 1 +4225 4229 0 +4225 4230 0 +4225 4231 1 +4225 4232 0 +4225 4237 1 +4225 4238 1 +4225 4239 1 +4225 4240 1 +4226 3861 1 +4226 3862 1 +4226 3866 0 +4226 4223 0 +4226 4224 1 +4226 4225 1 +4226 4229 -1 +4226 4230 1 +4226 4231 1 +4226 4232 0 +4226 4237 1 +4226 4238 0 +4226 4239 0 +4226 4240 0 +4227 3861 1 +4227 3862 0 +4227 3867 0 +4227 4213 0 +4227 4214 1 +4227 4215 1 +4227 4216 0 +4227 4223 1 +4227 4224 0 +4227 4229 0 +4227 4230 1 +4227 4231 1 +4227 4232 1 +4228 3861 0 +4228 3862 1 +4228 3868 0 +4228 4213 1 +4228 4214 1 +4228 4215 1 +4228 4216 0 +4228 4223 1 +4228 4224 1 +4228 4227 1 +4228 4229 1 +4228 4230 1 +4228 4231 1 +4228 4232 0 +4229 4230 -1 +4229 4253 0 +4230 4254 1 +4231 4232 1 +4231 4255 1 +4232 4256 1 +4233 3873 1 +4233 4229 1 +4233 4230 0 +4233 4237 1 +4233 4238 1 +4233 4239 0 +4233 4240 1 +4233 4245 1 +4233 4246 1 +4233 4247 0 +4233 4248 1 +4233 4591 1 +4233 4592 1 +4234 3874 1 +4234 4229 0 +4234 4230 1 +4234 4233 1 +4234 4237 1 +4234 4238 1 +4234 4239 0 +4234 4240 0 +4234 4245 1 +4234 4246 0 +4234 4247 0 +4234 4248 1 +4234 4591 1 +4234 4592 1 +4235 3875 0 +4235 4221 1 +4235 4222 1 +4235 4223 1 +4235 4224 1 +4235 4229 1 +4235 4230 0 +4235 4237 0 +4235 4238 1 +4235 4239 1 +4235 4240 1 +4235 4591 0 +4235 4592 -1 +4236 3876 1 +4236 4221 1 +4236 4222 1 +4236 4223 0 +4236 4224 1 +4236 4229 0 +4236 4230 1 +4236 4235 0 +4236 4237 1 +4236 4238 1 +4236 4239 1 +4236 4240 1 +4236 4591 1 +4236 4592 1 +4237 4238 0 +4237 4261 0 +4238 4262 1 +4239 4240 1 +4239 4263 0 +4240 4264 0 +4241 3881 1 +4241 4237 0 +4241 4238 0 +4241 4245 1 +4241 4246 -1 +4241 4247 1 +4241 4248 1 +4241 4599 0 +4241 4600 0 +4241 4613 1 +4241 4614 1 +4241 4615 1 +4241 4616 1 +4242 3882 0 +4242 4237 1 +4242 4238 1 +4242 4241 1 +4242 4245 1 +4242 4246 0 +4242 4247 -1 +4242 4248 1 +4242 4599 0 +4242 4600 1 +4242 4613 1 +4242 4614 1 +4242 4615 1 +4242 4616 0 +4243 3883 -1 +4243 4237 1 +4243 4238 1 +4243 4245 -1 +4243 4246 0 +4243 4247 1 +4243 4248 0 +4243 4589 1 +4243 4590 1 +4243 4591 0 +4243 4592 1 +4243 4599 1 +4243 4600 -1 +4244 3884 1 +4244 4237 0 +4244 4238 -1 +4244 4243 0 +4244 4245 1 +4244 4246 -1 +4244 4247 0 +4244 4248 1 +4244 4589 0 +4244 4590 1 +4244 4591 0 +4244 4592 1 +4244 4599 1 +4244 4600 1 +4245 4246 0 +4245 4269 0 +4246 4270 1 +4247 4248 -1 +4247 4271 1 +4249 3885 0 +4249 3886 1 +4249 3889 0 +4249 4247 1 +4249 4248 1 +4249 4253 0 +4249 4254 1 +4249 4255 1 +4249 4256 0 +4249 4261 1 +4249 4262 1 +4249 4263 1 +4249 4264 1 +4250 3885 -1 +4250 3886 0 +4250 3890 1 +4250 4247 1 +4250 4248 1 +4250 4249 1 +4250 4253 0 +4250 4254 1 +4250 4255 0 +4250 4256 0 +4250 4261 1 +4250 4262 1 +4250 4263 1 +4250 4264 0 +4251 3885 1 +4251 3886 -1 +4251 3891 1 +4251 4237 1 +4251 4238 1 +4251 4239 1 +4251 4240 1 +4251 4247 -1 +4251 4248 0 +4251 4253 1 +4251 4254 1 +4251 4255 1 +4251 4256 0 +4252 3885 0 +4252 3886 1 +4252 3892 1 +4252 4237 1 +4252 4238 0 +4252 4239 1 +4252 4240 0 +4252 4247 -1 +4252 4248 1 +4252 4251 1 +4252 4253 -1 +4252 4254 1 +4252 4255 1 +4252 4256 0 +4253 4254 -1 +4253 4277 1 +4254 4278 0 +4255 4256 1 +4255 4279 1 +4256 4280 1 +4257 3897 0 +4257 4253 1 +4257 4254 0 +4257 4261 0 +4257 4262 -1 +4257 4263 0 +4257 4264 1 +4257 4269 1 +4257 4270 0 +4257 4271 0 +4257 4615 0 +4257 4616 0 +4258 3898 0 +4258 4253 1 +4258 4254 1 +4258 4257 1 +4258 4261 0 +4258 4262 0 +4258 4263 1 +4258 4264 0 +4258 4269 1 +4258 4270 -1 +4258 4271 -1 +4258 4615 1 +4258 4616 0 +4259 3899 1 +4259 4245 1 +4259 4246 -1 +4259 4247 1 +4259 4248 0 +4259 4253 1 +4259 4254 1 +4259 4261 1 +4259 4262 1 +4259 4263 -1 +4259 4264 0 +4259 4615 1 +4259 4616 0 +4260 3900 0 +4260 4245 1 +4260 4246 0 +4260 4247 -1 +4260 4248 1 +4260 4253 0 +4260 4254 1 +4260 4259 1 +4260 4261 1 +4260 4262 0 +4260 4263 -1 +4260 4264 -1 +4260 4615 1 +4260 4616 0 +4261 4262 0 +4261 4285 1 +4262 4286 1 +4263 4264 1 +4263 4287 0 +4264 4288 1 +4265 3905 1 +4265 4261 1 +4265 4262 1 +4265 4269 -1 +4265 4270 0 +4265 4271 -1 +4265 4623 1 +4265 4624 1 +4265 4637 0 +4265 4638 1 +4265 4639 1 +4265 4640 -1 +4266 3906 0 +4266 4261 1 +4266 4262 0 +4266 4265 -1 +4266 4269 1 +4266 4270 -1 +4266 4271 0 +4266 4623 0 +4266 4624 1 +4266 4637 0 +4266 4638 0 +4266 4639 0 +4266 4640 0 +4267 3907 1 +4267 4261 0 +4267 4262 0 +4267 4269 0 +4267 4270 1 +4267 4271 1 +4267 4613 0 +4267 4614 1 +4267 4615 -1 +4267 4616 1 +4267 4623 1 +4267 4624 1 +4268 3908 1 +4268 4261 0 +4268 4262 0 +4268 4267 0 +4268 4269 0 +4268 4270 1 +4268 4271 0 +4268 4613 1 +4268 4614 1 +4268 4615 1 +4268 4616 0 +4268 4623 -1 +4268 4624 1 +4269 4270 -1 +4269 4293 0 +4270 4294 1 +4271 4295 1 +4273 3909 0 +4273 3910 1 +4273 3913 1 +4273 4271 -1 +4273 4277 -1 +4273 4278 1 +4273 4279 1 +4273 4280 0 +4273 4285 0 +4273 4286 0 +4273 4287 1 +4273 4288 0 +4274 3909 1 +4274 3910 1 +4274 3914 1 +4274 4271 1 +4274 4273 1 +4274 4277 0 +4274 4278 1 +4274 4279 -1 +4274 4280 1 +4274 4285 1 +4274 4286 0 +4274 4287 -1 +4274 4288 1 +4275 3909 0 +4275 3910 0 +4275 3915 0 +4275 4261 1 +4275 4262 0 +4275 4263 1 +4275 4264 0 +4275 4271 0 +4275 4277 1 +4275 4278 1 +4275 4279 0 +4275 4280 1 +4276 3909 -1 +4276 3910 1 +4276 3916 0 +4276 4261 0 +4276 4262 1 +4276 4263 1 +4276 4264 0 +4276 4271 0 +4276 4275 1 +4276 4277 1 +4276 4278 0 +4276 4279 0 +4276 4280 1 +4277 4278 1 +4277 4301 1 +4278 4302 1 +4279 4280 -1 +4279 4303 0 +4280 4304 0 +4281 3921 1 +4281 4277 1 +4281 4278 1 +4281 4285 1 +4281 4286 1 +4281 4287 1 +4281 4288 -1 +4281 4293 1 +4281 4294 1 +4281 4295 1 +4281 4296 1 +4281 4639 1 +4281 4640 1 +4282 3922 1 +4282 4277 1 +4282 4278 1 +4282 4281 1 +4282 4285 1 +4282 4286 0 +4282 4287 1 +4282 4288 0 +4282 4293 1 +4282 4294 1 +4282 4295 0 +4282 4296 0 +4282 4639 1 +4282 4640 0 +4283 3923 1 +4283 4269 1 +4283 4270 0 +4283 4271 0 +4283 4277 1 +4283 4278 1 +4283 4285 1 +4283 4286 0 +4283 4287 1 +4283 4288 1 +4283 4639 0 +4283 4640 1 +4284 3924 0 +4284 4269 1 +4284 4270 1 +4284 4271 0 +4284 4277 1 +4284 4278 0 +4284 4283 1 +4284 4285 1 +4284 4286 1 +4284 4287 0 +4284 4288 0 +4284 4639 0 +4284 4640 -1 +4285 4286 1 +4285 4309 0 +4286 4310 0 +4287 4288 1 +4287 4311 -1 +4288 4312 0 +4289 3929 0 +4289 4285 0 +4289 4286 1 +4289 4293 1 +4289 4294 1 +4289 4295 -1 +4289 4296 -1 +4289 4647 -1 +4289 4648 1 +4289 4661 1 +4289 4662 1 +4289 4663 -1 +4289 4664 1 +4290 3930 1 +4290 4285 -1 +4290 4286 0 +4290 4289 1 +4290 4293 0 +4290 4294 0 +4290 4295 1 +4290 4296 1 +4290 4647 1 +4290 4648 1 +4290 4661 0 +4290 4662 1 +4290 4663 1 +4290 4664 1 +4291 3931 0 +4291 4285 1 +4291 4286 0 +4291 4293 1 +4291 4294 1 +4291 4295 0 +4291 4296 0 +4291 4637 1 +4291 4638 0 +4291 4639 1 +4291 4640 1 +4291 4647 1 +4291 4648 0 +4292 3932 0 +4292 4285 1 +4292 4286 0 +4292 4291 0 +4292 4293 1 +4292 4294 1 +4292 4295 1 +4292 4296 1 +4292 4637 1 +4292 4638 1 +4292 4639 0 +4292 4640 0 +4292 4647 1 +4292 4648 1 +4293 4294 1 +4293 4317 0 +4294 4318 -1 +4295 4296 1 +4295 4319 1 +4296 4320 0 +4297 3933 1 +4297 3934 1 +4297 3937 1 +4297 4295 1 +4297 4296 1 +4297 4301 0 +4297 4302 0 +4297 4303 0 +4297 4304 0 +4297 4309 0 +4297 4310 0 +4297 4311 1 +4297 4312 1 +4298 3933 1 +4298 3934 1 +4298 3938 0 +4298 4295 1 +4298 4296 1 +4298 4297 1 +4298 4301 1 +4298 4302 0 +4298 4303 1 +4298 4304 0 +4298 4309 1 +4298 4310 0 +4298 4311 1 +4298 4312 1 +4299 3933 1 +4299 3934 1 +4299 3939 1 +4299 4285 1 +4299 4286 1 +4299 4287 0 +4299 4288 0 +4299 4295 0 +4299 4296 1 +4299 4301 1 +4299 4302 1 +4299 4303 1 +4299 4304 1 +4300 3933 1 +4300 3934 0 +4300 3940 0 +4300 4285 1 +4300 4286 0 +4300 4287 -1 +4300 4288 0 +4300 4295 1 +4300 4296 0 +4300 4299 0 +4300 4301 1 +4300 4302 0 +4300 4303 0 +4300 4304 1 +4301 4302 1 +4303 4304 -1 +4305 3945 1 +4305 4301 -1 +4305 4302 0 +4305 4309 1 +4305 4310 0 +4305 4311 1 +4305 4312 0 +4305 4317 1 +4305 4318 1 +4305 4319 1 +4305 4320 0 +4305 4663 1 +4305 4664 -1 +4306 3946 0 +4306 4301 -1 +4306 4302 1 +4306 4305 0 +4306 4309 1 +4306 4310 0 +4306 4311 1 +4306 4312 1 +4306 4317 1 +4306 4318 0 +4306 4319 0 +4306 4320 1 +4306 4663 1 +4306 4664 1 +4307 3947 0 +4307 4293 1 +4307 4294 1 +4307 4295 1 +4307 4296 1 +4307 4301 -1 +4307 4302 1 +4307 4309 1 +4307 4310 0 +4307 4311 1 +4307 4312 1 +4307 4663 1 +4307 4664 1 +4308 3948 0 +4308 4293 1 +4308 4294 1 +4308 4295 0 +4308 4296 1 +4308 4301 0 +4308 4302 0 +4308 4307 0 +4308 4309 1 +4308 4310 1 +4308 4311 0 +4308 4312 -1 +4308 4663 0 +4308 4664 1 +4309 4310 0 +4311 4312 0 +4313 3953 1 +4313 4309 1 +4313 4310 1 +4313 4317 0 +4313 4318 0 +4313 4319 0 +4313 4320 1 +4313 4671 1 +4313 4672 0 +4314 3954 1 +4314 4309 0 +4314 4310 0 +4314 4313 0 +4314 4317 0 +4314 4318 -1 +4314 4319 1 +4314 4320 -1 +4314 4671 0 +4314 4672 0 +4315 3955 1 +4315 4309 1 +4315 4310 0 +4315 4317 -1 +4315 4318 1 +4315 4319 0 +4315 4320 0 +4315 4661 1 +4315 4662 1 +4315 4663 1 +4315 4664 1 +4315 4671 0 +4315 4672 0 +4316 3956 1 +4316 4309 1 +4316 4310 1 +4316 4315 0 +4316 4317 1 +4316 4318 0 +4316 4319 0 +4316 4320 0 +4316 4661 1 +4316 4662 1 +4316 4663 1 +4316 4664 0 +4316 4671 0 +4316 4672 1 +4317 4318 0 +4319 4320 -1 +4321 3961 1 +4321 4325 1 +4321 4326 0 +4321 4327 1 +4321 4328 1 +4321 4333 1 +4321 4334 0 +4321 4335 1 +4321 4336 1 +4322 3962 0 +4322 4321 0 +4322 4325 1 +4322 4326 1 +4322 4327 1 +4322 4328 1 +4322 4333 1 +4322 4334 1 +4322 4335 0 +4322 4336 1 +4323 3963 1 +4323 4325 0 +4323 4326 -1 +4323 4327 0 +4323 4328 1 +4324 3964 1 +4324 4323 1 +4324 4325 0 +4324 4326 -1 +4324 4327 1 +4324 4328 1 +4325 4326 1 +4325 4349 0 +4326 4350 1 +4327 4328 1 +4327 4351 1 +4328 4352 1 +4329 3969 0 +4329 4325 1 +4329 4326 1 +4329 4333 0 +4329 4334 0 +4329 4335 0 +4329 4336 1 +4329 4341 -1 +4329 4342 1 +4329 4343 1 +4329 4344 -1 +4329 4687 1 +4329 4688 1 +4330 3970 0 +4330 4325 1 +4330 4326 0 +4330 4329 1 +4330 4333 0 +4330 4334 1 +4330 4335 1 +4330 4336 0 +4330 4341 1 +4330 4342 1 +4330 4343 1 +4330 4344 -1 +4330 4687 -1 +4330 4688 1 +4331 3971 0 +4331 4325 -1 +4331 4326 1 +4331 4333 1 +4331 4334 1 +4331 4335 1 +4331 4336 1 +4331 4687 1 +4331 4688 1 +4332 3972 1 +4332 4325 1 +4332 4326 1 +4332 4331 1 +4332 4333 -1 +4332 4334 1 +4332 4335 1 +4332 4336 1 +4332 4687 1 +4332 4688 1 +4333 4334 0 +4333 4357 -1 +4334 4358 1 +4335 4336 1 +4335 4359 0 +4336 4360 0 +4337 3977 1 +4337 4333 0 +4337 4334 1 +4337 4341 1 +4337 4342 1 +4337 4343 1 +4337 4344 1 +4337 4695 0 +4337 4696 1 +4337 4709 0 +4337 4710 0 +4337 4711 1 +4337 4712 1 +4338 3978 0 +4338 4333 0 +4338 4334 1 +4338 4337 1 +4338 4341 0 +4338 4342 1 +4338 4343 1 +4338 4344 0 +4338 4695 0 +4338 4696 0 +4338 4709 0 +4338 4710 1 +4338 4711 1 +4338 4712 0 +4339 3979 0 +4339 4333 0 +4339 4334 1 +4339 4341 1 +4339 4342 0 +4339 4343 0 +4339 4344 1 +4339 4685 0 +4339 4686 1 +4339 4687 1 +4339 4688 0 +4339 4695 -1 +4339 4696 0 +4340 3980 1 +4340 4333 0 +4340 4334 1 +4340 4339 1 +4340 4341 0 +4340 4342 0 +4340 4343 1 +4340 4344 1 +4340 4685 1 +4340 4686 0 +4340 4687 -1 +4340 4688 1 +4340 4695 0 +4340 4696 0 +4341 4342 1 +4341 4365 1 +4342 4366 1 +4343 4344 1 +4343 4367 0 +4344 4368 0 +4345 3981 1 +4345 3982 1 +4345 3985 0 +4345 4343 1 +4345 4344 0 +4345 4349 1 +4345 4350 1 +4345 4351 1 +4345 4352 1 +4345 4357 1 +4345 4358 1 +4345 4359 -1 +4345 4360 1 +4346 3981 0 +4346 3982 1 +4346 3986 0 +4346 4343 0 +4346 4344 -1 +4346 4345 1 +4346 4349 1 +4346 4350 1 +4346 4351 1 +4346 4352 -1 +4346 4357 0 +4346 4358 1 +4346 4359 0 +4346 4360 1 +4347 3981 0 +4347 3982 0 +4347 3987 0 +4347 4333 0 +4347 4334 0 +4347 4335 0 +4347 4336 -1 +4347 4343 0 +4347 4344 1 +4347 4349 0 +4347 4350 0 +4347 4351 0 +4347 4352 1 +4348 3981 1 +4348 3982 0 +4348 3988 1 +4348 4333 1 +4348 4334 1 +4348 4335 1 +4348 4336 0 +4348 4343 1 +4348 4344 1 +4348 4347 1 +4348 4349 1 +4348 4350 0 +4348 4351 1 +4348 4352 1 +4349 4350 1 +4349 4373 1 +4350 4374 1 +4351 4352 1 +4351 4375 0 +4352 4376 1 +4353 3993 1 +4353 4349 1 +4353 4350 0 +4353 4357 1 +4353 4358 0 +4353 4359 1 +4353 4360 1 +4353 4365 1 +4353 4366 0 +4353 4367 0 +4353 4368 1 +4353 4711 1 +4353 4712 1 +4354 3994 0 +4354 4349 0 +4354 4350 0 +4354 4353 1 +4354 4357 0 +4354 4358 1 +4354 4359 1 +4354 4360 0 +4354 4365 1 +4354 4366 1 +4354 4367 0 +4354 4368 1 +4354 4711 1 +4354 4712 0 +4355 3995 1 +4355 4341 1 +4355 4342 1 +4355 4343 1 +4355 4344 1 +4355 4349 1 +4355 4350 1 +4355 4357 1 +4355 4358 1 +4355 4359 1 +4355 4360 1 +4355 4711 -1 +4355 4712 1 +4356 3996 1 +4356 4341 1 +4356 4342 0 +4356 4343 -1 +4356 4344 -1 +4356 4349 1 +4356 4350 0 +4356 4355 1 +4356 4357 0 +4356 4358 1 +4356 4359 1 +4356 4360 1 +4356 4711 1 +4356 4712 0 +4357 4358 -1 +4358 4382 -1 +4359 4360 0 +4359 4383 1 +4360 4384 1 +4361 4001 1 +4361 4357 1 +4361 4358 0 +4361 4365 0 +4361 4366 1 +4361 4367 0 +4361 4368 1 +4361 4719 1 +4361 4720 0 +4361 4733 1 +4361 4734 0 +4361 4735 1 +4361 4736 1 +4362 4002 -1 +4362 4357 0 +4362 4358 0 +4362 4361 1 +4362 4365 1 +4362 4366 1 +4362 4367 1 +4362 4368 0 +4362 4719 0 +4362 4720 1 +4362 4733 1 +4362 4734 0 +4362 4735 1 +4362 4736 1 +4363 4003 1 +4363 4357 -1 +4363 4358 1 +4363 4365 0 +4363 4366 1 +4363 4367 0 +4363 4368 0 +4363 4709 1 +4363 4710 0 +4363 4711 1 +4363 4712 -1 +4363 4719 1 +4363 4720 1 +4364 4004 1 +4364 4357 0 +4364 4358 1 +4364 4363 1 +4364 4365 1 +4364 4366 0 +4364 4367 1 +4364 4368 0 +4364 4709 0 +4364 4710 1 +4364 4711 0 +4364 4712 0 +4364 4719 0 +4364 4720 -1 +4365 4366 1 +4365 4389 0 +4366 4390 1 +4367 4368 0 +4367 4391 0 +4368 4392 1 +4369 4005 1 +4369 4006 1 +4369 4009 0 +4369 4367 0 +4369 4368 0 +4369 4373 1 +4369 4374 1 +4369 4375 1 +4369 4376 1 +4369 4382 1 +4369 4383 1 +4369 4384 1 +4370 4005 0 +4370 4006 1 +4370 4010 1 +4370 4367 0 +4370 4368 -1 +4370 4369 1 +4370 4373 1 +4370 4374 1 +4370 4375 1 +4370 4376 0 +4370 4382 1 +4370 4383 1 +4370 4384 1 +4371 4005 0 +4371 4006 0 +4371 4011 1 +4371 4357 0 +4371 4358 0 +4371 4359 1 +4371 4360 1 +4371 4367 1 +4371 4368 -1 +4371 4373 -1 +4371 4374 1 +4371 4375 0 +4371 4376 1 +4372 4005 0 +4372 4006 0 +4372 4012 1 +4372 4357 1 +4372 4358 0 +4372 4359 1 +4372 4360 0 +4372 4367 -1 +4372 4368 0 +4372 4371 1 +4372 4373 0 +4372 4374 1 +4372 4375 0 +4372 4376 0 +4373 4374 1 +4373 4397 1 +4374 4398 1 +4375 4376 1 +4375 4399 0 +4376 4400 0 +4377 4017 1 +4377 4373 -1 +4377 4374 0 +4377 4382 1 +4377 4383 1 +4377 4384 0 +4377 4389 0 +4377 4390 0 +4377 4391 1 +4377 4392 1 +4377 4735 1 +4377 4736 1 +4378 4018 0 +4378 4373 0 +4378 4374 0 +4378 4377 0 +4378 4382 0 +4378 4383 1 +4378 4384 1 +4378 4389 1 +4378 4390 1 +4378 4391 0 +4378 4392 1 +4378 4735 1 +4378 4736 -1 +4379 4019 1 +4379 4365 0 +4379 4366 0 +4379 4367 1 +4379 4368 0 +4379 4373 1 +4379 4374 0 +4379 4382 1 +4379 4383 1 +4379 4384 1 +4379 4735 0 +4379 4736 1 +4380 4020 0 +4380 4365 1 +4380 4366 1 +4380 4367 1 +4380 4368 0 +4380 4373 1 +4380 4374 1 +4380 4379 1 +4380 4382 1 +4380 4383 0 +4380 4384 0 +4380 4735 1 +4380 4736 1 +4382 4406 0 +4383 4384 1 +4383 4407 1 +4384 4408 0 +4385 4025 -1 +4385 4382 1 +4385 4389 0 +4385 4390 1 +4385 4391 1 +4385 4392 1 +4385 4743 0 +4385 4744 1 +4385 4757 1 +4385 4758 1 +4385 4759 0 +4385 4760 1 +4386 4026 0 +4386 4382 0 +4386 4385 1 +4386 4389 1 +4386 4390 1 +4386 4391 1 +4386 4392 0 +4386 4743 1 +4386 4744 0 +4386 4757 1 +4386 4758 0 +4386 4759 1 +4386 4760 1 +4387 4027 1 +4387 4382 -1 +4387 4389 1 +4387 4390 1 +4387 4391 1 +4387 4392 -1 +4387 4733 1 +4387 4734 1 +4387 4735 0 +4387 4736 1 +4387 4743 0 +4387 4744 0 +4388 4028 0 +4388 4382 0 +4388 4387 0 +4388 4389 -1 +4388 4390 1 +4388 4391 1 +4388 4392 0 +4388 4733 1 +4388 4734 1 +4388 4735 1 +4388 4736 -1 +4388 4743 1 +4388 4744 1 +4389 4390 0 +4389 4413 0 +4390 4414 0 +4391 4392 0 +4391 4415 1 +4392 4416 -1 +4393 4029 1 +4393 4030 1 +4393 4033 1 +4393 4391 1 +4393 4392 -1 +4393 4397 1 +4393 4398 -1 +4393 4399 1 +4393 4400 1 +4393 4405 1 +4393 4406 0 +4393 4407 1 +4393 4408 1 +4394 4029 0 +4394 4030 1 +4394 4034 0 +4394 4391 1 +4394 4392 0 +4394 4393 1 +4394 4397 1 +4394 4398 1 +4394 4399 -1 +4394 4400 0 +4394 4405 1 +4394 4406 -1 +4394 4407 1 +4394 4408 1 +4395 4029 0 +4395 4030 0 +4395 4035 0 +4395 4382 1 +4395 4383 0 +4395 4384 1 +4395 4391 0 +4395 4392 1 +4395 4397 1 +4395 4398 0 +4395 4399 1 +4395 4400 0 +4396 4029 1 +4396 4030 0 +4396 4036 0 +4396 4382 0 +4396 4383 1 +4396 4384 0 +4396 4391 0 +4396 4392 0 +4396 4395 -1 +4396 4397 1 +4396 4398 1 +4396 4399 0 +4396 4400 1 +4397 4398 0 +4397 4421 0 +4398 4422 0 +4399 4400 1 +4399 4423 0 +4400 4424 1 +4401 4041 0 +4401 4397 0 +4401 4398 0 +4401 4405 1 +4401 4406 1 +4401 4407 1 +4401 4408 1 +4401 4413 0 +4401 4414 0 +4401 4415 1 +4401 4416 1 +4401 4759 1 +4401 4760 0 +4402 4042 0 +4402 4397 0 +4402 4398 0 +4402 4401 1 +4402 4405 1 +4402 4406 0 +4402 4407 1 +4402 4408 1 +4402 4413 0 +4402 4414 1 +4402 4415 -1 +4402 4416 1 +4402 4759 1 +4402 4760 -1 +4403 4043 0 +4403 4389 1 +4403 4390 -1 +4403 4391 1 +4403 4392 0 +4403 4397 1 +4403 4398 -1 +4403 4405 1 +4403 4406 1 +4403 4407 0 +4403 4408 0 +4403 4759 1 +4403 4760 1 +4404 4044 0 +4404 4389 -1 +4404 4390 0 +4404 4391 0 +4404 4392 1 +4404 4397 -1 +4404 4398 1 +4404 4403 0 +4404 4405 1 +4404 4406 0 +4404 4407 0 +4404 4408 0 +4404 4759 0 +4404 4760 1 +4405 4406 1 +4405 4429 1 +4406 4430 1 +4407 4408 0 +4407 4431 1 +4408 4432 -1 +4409 4049 0 +4409 4405 1 +4409 4406 1 +4409 4413 1 +4409 4414 0 +4409 4415 1 +4409 4416 0 +4409 4767 1 +4409 4768 1 +4409 4781 1 +4409 4782 -1 +4409 4783 1 +4409 4784 0 +4410 4050 0 +4410 4405 1 +4410 4406 0 +4410 4409 0 +4410 4413 1 +4410 4414 0 +4410 4415 0 +4410 4416 1 +4410 4767 1 +4410 4768 1 +4410 4781 1 +4410 4782 1 +4410 4783 0 +4410 4784 1 +4411 4051 0 +4411 4405 1 +4411 4406 0 +4411 4413 1 +4411 4414 0 +4411 4415 0 +4411 4416 -1 +4411 4757 1 +4411 4758 0 +4411 4759 0 +4411 4760 1 +4411 4767 1 +4411 4768 1 +4412 4052 0 +4412 4405 1 +4412 4406 1 +4412 4411 1 +4412 4413 0 +4412 4414 1 +4412 4415 1 +4412 4416 1 +4412 4757 1 +4412 4758 1 +4412 4759 1 +4412 4760 1 +4412 4767 0 +4412 4768 1 +4413 4414 0 +4413 4437 1 +4414 4438 1 +4415 4416 1 +4415 4439 0 +4416 4440 1 +4417 4053 0 +4417 4054 1 +4417 4057 1 +4417 4415 0 +4417 4416 0 +4417 4421 1 +4417 4422 0 +4417 4423 0 +4417 4424 0 +4417 4429 1 +4417 4430 0 +4417 4431 1 +4417 4432 0 +4418 4053 1 +4418 4054 1 +4418 4058 -1 +4418 4415 1 +4418 4416 1 +4418 4417 1 +4418 4421 1 +4418 4422 0 +4418 4423 -1 +4418 4424 1 +4418 4429 1 +4418 4430 1 +4418 4431 0 +4418 4432 0 +4419 4053 1 +4419 4054 1 +4419 4059 1 +4419 4405 1 +4419 4406 -1 +4419 4407 1 +4419 4408 0 +4419 4415 0 +4419 4416 1 +4419 4421 1 +4419 4422 0 +4419 4423 0 +4419 4424 1 +4420 4053 1 +4420 4054 1 +4420 4060 1 +4420 4405 0 +4420 4406 0 +4420 4407 1 +4420 4408 1 +4420 4415 1 +4420 4416 0 +4420 4419 0 +4420 4421 0 +4420 4422 1 +4420 4423 0 +4420 4424 1 +4421 4422 0 +4421 4445 1 +4422 4446 1 +4423 4424 0 +4423 4447 1 +4424 4448 0 +4425 4065 0 +4425 4421 -1 +4425 4422 0 +4425 4429 0 +4425 4430 1 +4425 4431 0 +4425 4432 1 +4425 4437 0 +4425 4438 -1 +4425 4439 0 +4425 4440 1 +4425 4783 0 +4425 4784 1 +4426 4066 0 +4426 4421 1 +4426 4422 0 +4426 4425 0 +4426 4429 1 +4426 4430 1 +4426 4431 1 +4426 4432 1 +4426 4437 1 +4426 4438 1 +4426 4439 0 +4426 4440 1 +4426 4783 0 +4426 4784 1 +4427 4067 1 +4427 4413 1 +4427 4414 1 +4427 4415 0 +4427 4416 0 +4427 4421 -1 +4427 4422 1 +4427 4429 0 +4427 4430 1 +4427 4431 1 +4427 4432 0 +4427 4783 0 +4427 4784 1 +4428 4068 1 +4428 4413 1 +4428 4414 1 +4428 4415 1 +4428 4416 0 +4428 4421 0 +4428 4422 0 +4428 4427 1 +4428 4429 1 +4428 4430 1 +4428 4431 1 +4428 4432 0 +4428 4783 0 +4428 4784 0 +4429 4430 1 +4429 4453 1 +4430 4454 0 +4431 4432 1 +4431 4455 1 +4432 4456 0 +4433 4073 1 +4433 4429 1 +4433 4430 0 +4433 4437 0 +4433 4438 0 +4433 4439 1 +4433 4440 0 +4433 4791 1 +4433 4792 0 +4433 4805 1 +4433 4806 1 +4433 4807 1 +4433 4808 0 +4434 4074 0 +4434 4429 1 +4434 4430 1 +4434 4433 1 +4434 4437 1 +4434 4438 1 +4434 4439 1 +4434 4440 -1 +4434 4791 1 +4434 4792 1 +4434 4805 0 +4434 4806 1 +4434 4807 1 +4434 4808 1 +4435 4075 1 +4435 4429 1 +4435 4430 1 +4435 4437 1 +4435 4438 0 +4435 4439 -1 +4435 4440 1 +4435 4781 1 +4435 4782 0 +4435 4783 0 +4435 4784 1 +4435 4791 0 +4435 4792 1 +4436 4076 0 +4436 4429 1 +4436 4430 0 +4436 4435 0 +4436 4437 0 +4436 4438 1 +4436 4439 1 +4436 4440 -1 +4436 4781 1 +4436 4782 0 +4436 4783 0 +4436 4784 1 +4436 4791 1 +4436 4792 1 +4437 4438 0 +4437 4461 1 +4438 4462 1 +4439 4440 -1 +4439 4463 0 +4440 4464 0 +4441 4077 0 +4441 4078 1 +4441 4081 0 +4441 4439 -1 +4441 4440 0 +4441 4445 1 +4441 4446 0 +4441 4447 -1 +4441 4448 1 +4441 4453 1 +4441 4454 1 +4441 4455 0 +4441 4456 1 +4442 4077 1 +4442 4078 0 +4442 4082 0 +4442 4439 0 +4442 4440 1 +4442 4441 1 +4442 4445 1 +4442 4446 1 +4442 4447 0 +4442 4448 0 +4442 4453 -1 +4442 4454 0 +4442 4455 1 +4442 4456 1 +4443 4077 1 +4443 4078 1 +4443 4083 0 +4443 4429 1 +4443 4430 1 +4443 4431 0 +4443 4432 0 +4443 4439 1 +4443 4440 1 +4443 4445 0 +4443 4446 1 +4443 4447 1 +4443 4448 0 +4444 4077 -1 +4444 4078 1 +4444 4084 1 +4444 4429 -1 +4444 4430 0 +4444 4431 1 +4444 4432 0 +4444 4439 -1 +4444 4440 1 +4444 4443 0 +4444 4445 1 +4444 4446 1 +4444 4447 1 +4444 4448 0 +4445 4446 1 +4445 4469 0 +4446 4470 0 +4447 4448 1 +4447 4471 0 +4448 4472 0 +4449 4089 0 +4449 4445 0 +4449 4446 -1 +4449 4453 1 +4449 4454 1 +4449 4455 1 +4449 4456 1 +4449 4461 1 +4449 4462 0 +4449 4463 1 +4449 4464 -1 +4449 4807 0 +4449 4808 0 +4450 4090 0 +4450 4445 0 +4450 4446 0 +4450 4449 0 +4450 4453 1 +4450 4454 1 +4450 4455 1 +4450 4456 1 +4450 4461 1 +4450 4462 0 +4450 4463 1 +4450 4464 0 +4450 4807 1 +4450 4808 1 +4451 4091 1 +4451 4437 1 +4451 4438 1 +4451 4439 -1 +4451 4440 1 +4451 4445 -1 +4451 4446 0 +4451 4453 0 +4451 4454 1 +4451 4455 0 +4451 4456 0 +4451 4807 1 +4451 4808 0 +4452 4092 1 +4452 4437 1 +4452 4438 0 +4452 4439 -1 +4452 4440 1 +4452 4445 1 +4452 4446 1 +4452 4451 1 +4452 4453 1 +4452 4454 1 +4452 4455 0 +4452 4456 1 +4452 4807 0 +4452 4808 -1 +4453 4454 0 +4453 4477 1 +4454 4478 1 +4455 4456 1 +4455 4479 0 +4456 4480 -1 +4457 4097 1 +4457 4453 1 +4457 4454 1 +4457 4461 1 +4457 4462 0 +4457 4463 1 +4457 4464 1 +4457 4815 0 +4457 4816 0 +4457 4829 0 +4457 4830 0 +4457 4831 -1 +4457 4832 1 +4458 4098 0 +4458 4453 1 +4458 4454 0 +4458 4457 0 +4458 4461 1 +4458 4462 1 +4458 4463 1 +4458 4464 1 +4458 4815 -1 +4458 4816 1 +4458 4829 1 +4458 4830 1 +4458 4831 0 +4458 4832 1 +4459 4099 0 +4459 4453 1 +4459 4454 0 +4459 4461 1 +4459 4462 0 +4459 4463 -1 +4459 4464 1 +4459 4805 0 +4459 4806 1 +4459 4807 1 +4459 4808 0 +4459 4815 1 +4459 4816 0 +4460 4100 0 +4460 4453 0 +4460 4454 0 +4460 4459 1 +4460 4461 1 +4460 4462 1 +4460 4463 0 +4460 4464 1 +4460 4805 1 +4460 4806 1 +4460 4807 0 +4460 4808 1 +4460 4815 0 +4460 4816 0 +4461 4462 0 +4461 4485 1 +4462 4486 -1 +4463 4464 1 +4463 4487 1 +4464 4488 1 +4465 4101 0 +4465 4102 0 +4465 4105 1 +4465 4463 1 +4465 4464 0 +4465 4469 1 +4465 4470 0 +4465 4471 1 +4465 4472 -1 +4465 4477 1 +4465 4478 0 +4465 4479 0 +4465 4480 -1 +4466 4101 -1 +4466 4102 1 +4466 4106 0 +4466 4463 1 +4466 4464 -1 +4466 4465 -1 +4466 4469 0 +4466 4470 -1 +4466 4471 1 +4466 4472 1 +4466 4477 1 +4466 4478 1 +4466 4479 1 +4466 4480 0 +4467 4101 -1 +4467 4102 1 +4467 4107 0 +4467 4453 0 +4467 4454 0 +4467 4455 1 +4467 4456 0 +4467 4463 1 +4467 4464 1 +4467 4469 1 +4467 4470 1 +4467 4471 0 +4467 4472 0 +4468 4101 0 +4468 4102 1 +4468 4108 1 +4468 4453 0 +4468 4454 0 +4468 4455 0 +4468 4456 1 +4468 4463 -1 +4468 4464 1 +4468 4467 1 +4468 4469 1 +4468 4470 1 +4468 4471 0 +4468 4472 0 +4469 4470 0 +4469 4493 0 +4470 4494 0 +4471 4472 1 +4471 4495 1 +4472 4496 1 +4473 4113 1 +4473 4469 1 +4473 4470 1 +4473 4477 -1 +4473 4478 1 +4473 4479 1 +4473 4480 1 +4473 4485 0 +4473 4486 1 +4473 4487 0 +4473 4488 -1 +4473 4831 1 +4473 4832 0 +4474 4114 0 +4474 4469 -1 +4474 4470 0 +4474 4473 -1 +4474 4477 1 +4474 4478 -1 +4474 4479 0 +4474 4480 0 +4474 4485 1 +4474 4486 0 +4474 4487 0 +4474 4488 1 +4474 4831 0 +4474 4832 1 +4475 4115 0 +4475 4461 1 +4475 4462 1 +4475 4463 1 +4475 4464 1 +4475 4469 0 +4475 4470 1 +4475 4477 1 +4475 4478 1 +4475 4479 1 +4475 4480 1 +4475 4831 1 +4475 4832 -1 +4476 4116 1 +4476 4461 0 +4476 4462 1 +4476 4463 1 +4476 4464 0 +4476 4469 0 +4476 4470 1 +4476 4475 1 +4476 4477 1 +4476 4478 1 +4476 4479 1 +4476 4480 0 +4476 4831 1 +4476 4832 0 +4477 4478 0 +4477 4501 1 +4478 4502 1 +4479 4480 1 +4479 4503 1 +4480 4504 0 +4481 4121 0 +4481 4477 1 +4481 4478 0 +4481 4485 1 +4481 4486 0 +4481 4487 0 +4481 4488 0 +4481 4839 1 +4481 4840 1 +4481 4853 0 +4481 4854 0 +4481 4855 1 +4481 4856 0 +4482 4122 1 +4482 4477 -1 +4482 4478 -1 +4482 4481 1 +4482 4485 1 +4482 4486 0 +4482 4487 -1 +4482 4488 1 +4482 4839 0 +4482 4840 0 +4482 4853 0 +4482 4854 1 +4482 4855 1 +4482 4856 1 +4483 4123 1 +4483 4477 1 +4483 4478 1 +4483 4485 -1 +4483 4486 0 +4483 4487 1 +4483 4488 -1 +4483 4829 0 +4483 4830 1 +4483 4831 0 +4483 4832 0 +4483 4839 0 +4483 4840 1 +4484 4124 0 +4484 4477 0 +4484 4478 0 +4484 4483 0 +4484 4485 0 +4484 4486 -1 +4484 4487 1 +4484 4488 0 +4484 4829 1 +4484 4830 0 +4484 4831 1 +4484 4832 1 +4484 4839 0 +4484 4840 0 +4485 4486 0 +4485 4509 1 +4486 4510 1 +4487 4488 1 +4487 4511 1 +4488 4512 0 +4489 4125 0 +4489 4126 0 +4489 4129 0 +4489 4487 1 +4489 4488 1 +4489 4493 -1 +4489 4494 0 +4489 4495 0 +4489 4496 0 +4489 4501 1 +4489 4502 1 +4489 4503 1 +4489 4504 1 +4490 4125 0 +4490 4126 0 +4490 4130 1 +4490 4487 1 +4490 4488 1 +4490 4489 1 +4490 4493 0 +4490 4494 1 +4490 4495 1 +4490 4496 1 +4490 4501 0 +4490 4502 0 +4490 4503 0 +4490 4504 1 +4491 4125 1 +4491 4126 0 +4491 4131 1 +4491 4477 1 +4491 4478 0 +4491 4479 0 +4491 4480 -1 +4491 4487 0 +4491 4488 1 +4491 4493 0 +4491 4494 -1 +4491 4495 1 +4491 4496 1 +4492 4125 1 +4492 4126 0 +4492 4132 -1 +4492 4477 0 +4492 4478 0 +4492 4479 0 +4492 4480 0 +4492 4487 1 +4492 4488 1 +4492 4491 1 +4492 4493 1 +4492 4494 -1 +4492 4495 1 +4492 4496 0 +4493 4494 1 +4493 4517 0 +4494 4518 -1 +4495 4496 0 +4495 4519 1 +4496 4520 1 +4497 4137 1 +4497 4493 1 +4497 4494 1 +4497 4501 0 +4497 4502 -1 +4497 4503 -1 +4497 4504 0 +4497 4509 0 +4497 4510 0 +4497 4511 0 +4497 4512 1 +4497 4855 1 +4497 4856 -1 +4498 4138 0 +4498 4493 -1 +4498 4494 1 +4498 4497 -1 +4498 4501 1 +4498 4502 0 +4498 4503 1 +4498 4504 1 +4498 4509 0 +4498 4510 0 +4498 4511 0 +4498 4512 -1 +4498 4855 1 +4498 4856 0 +4499 4139 1 +4499 4485 1 +4499 4486 1 +4499 4487 0 +4499 4488 1 +4499 4493 0 +4499 4494 -1 +4499 4501 -1 +4499 4502 0 +4499 4503 1 +4499 4504 0 +4499 4855 1 +4499 4856 -1 +4500 4140 1 +4500 4485 1 +4500 4486 0 +4500 4487 1 +4500 4488 0 +4500 4493 1 +4500 4494 -1 +4500 4499 -1 +4500 4501 -1 +4500 4502 0 +4500 4503 0 +4500 4504 1 +4500 4855 1 +4500 4856 1 +4501 4502 1 +4501 4525 1 +4502 4526 1 +4503 4504 1 +4503 4527 1 +4504 4528 0 +4505 4145 1 +4505 4501 1 +4505 4502 0 +4505 4509 0 +4505 4510 1 +4505 4511 1 +4505 4512 1 +4505 4863 1 +4505 4864 -1 +4505 4877 0 +4505 4878 -1 +4505 4879 0 +4505 4880 0 +4506 4146 1 +4506 4501 1 +4506 4502 0 +4506 4505 0 +4506 4509 -1 +4506 4510 0 +4506 4511 1 +4506 4512 1 +4506 4863 1 +4506 4864 0 +4506 4877 0 +4506 4878 0 +4506 4879 0 +4506 4880 1 +4507 4147 0 +4507 4501 0 +4507 4502 1 +4507 4509 1 +4507 4510 1 +4507 4511 0 +4507 4512 0 +4507 4853 1 +4507 4854 0 +4507 4855 1 +4507 4856 0 +4507 4863 1 +4507 4864 0 +4508 4148 1 +4508 4501 1 +4508 4502 1 +4508 4507 0 +4508 4509 1 +4508 4510 -1 +4508 4511 0 +4508 4512 1 +4508 4853 1 +4508 4854 -1 +4508 4855 1 +4508 4856 0 +4508 4863 1 +4508 4864 1 +4509 4510 0 +4509 4533 1 +4510 4534 1 +4511 4512 0 +4511 4535 0 +4513 4149 1 +4513 4150 0 +4513 4153 0 +4513 4511 -1 +4513 4512 1 +4513 4517 1 +4513 4518 1 +4513 4519 0 +4513 4520 1 +4513 4525 1 +4513 4526 0 +4513 4527 1 +4513 4528 1 +4514 4149 1 +4514 4150 1 +4514 4154 0 +4514 4511 1 +4514 4512 0 +4514 4513 0 +4514 4517 1 +4514 4518 0 +4514 4519 1 +4514 4520 1 +4514 4525 -1 +4514 4526 1 +4514 4527 1 +4514 4528 1 +4515 4149 0 +4515 4150 0 +4515 4155 0 +4515 4501 1 +4515 4502 1 +4515 4503 0 +4515 4504 1 +4515 4511 1 +4515 4512 1 +4515 4517 0 +4515 4518 1 +4515 4519 0 +4515 4520 1 +4516 4149 1 +4516 4150 0 +4516 4156 1 +4516 4501 0 +4516 4502 1 +4516 4503 -1 +4516 4504 1 +4516 4511 1 +4516 4512 1 +4516 4515 0 +4516 4517 0 +4516 4518 1 +4516 4519 1 +4516 4520 -1 +4517 4518 0 +4517 4541 0 +4518 4542 1 +4519 4520 1 +4519 4543 -1 +4520 4544 1 +4521 4161 -1 +4521 4517 -1 +4521 4518 0 +4521 4525 0 +4521 4526 0 +4521 4527 1 +4521 4528 0 +4521 4533 1 +4521 4534 1 +4521 4535 0 +4521 4879 1 +4521 4880 1 +4522 4162 1 +4522 4517 -1 +4522 4518 1 +4522 4521 0 +4522 4525 1 +4522 4526 0 +4522 4527 0 +4522 4528 1 +4522 4533 -1 +4522 4534 1 +4522 4535 1 +4522 4879 1 +4522 4880 0 +4523 4163 1 +4523 4509 1 +4523 4510 1 +4523 4511 -1 +4523 4512 0 +4523 4517 1 +4523 4518 0 +4523 4525 0 +4523 4526 1 +4523 4527 1 +4523 4528 1 +4523 4879 0 +4523 4880 1 +4524 4164 0 +4524 4509 1 +4524 4510 1 +4524 4511 0 +4524 4512 1 +4524 4517 1 +4524 4518 1 +4524 4523 1 +4524 4525 1 +4524 4526 0 +4524 4527 -1 +4524 4528 1 +4524 4879 0 +4524 4880 0 +4525 4526 0 +4525 4549 1 +4526 4550 0 +4527 4528 0 +4527 4551 0 +4528 4552 0 +4529 4169 -1 +4529 4525 1 +4529 4526 1 +4529 4533 -1 +4529 4534 0 +4529 4535 0 +4529 4887 0 +4529 4888 0 +4529 4901 1 +4529 4902 1 +4529 4903 1 +4529 4904 0 +4530 4170 0 +4530 4525 1 +4530 4526 1 +4530 4529 1 +4530 4533 1 +4530 4534 1 +4530 4535 1 +4530 4887 0 +4530 4888 0 +4530 4901 1 +4530 4902 1 +4530 4903 1 +4530 4904 1 +4531 4171 -1 +4531 4525 0 +4531 4526 1 +4531 4533 1 +4531 4534 1 +4531 4535 1 +4531 4877 1 +4531 4878 0 +4531 4879 0 +4531 4880 0 +4531 4887 1 +4531 4888 1 +4532 4172 -1 +4532 4525 -1 +4532 4526 1 +4532 4531 0 +4532 4533 1 +4532 4534 1 +4532 4535 -1 +4532 4877 -1 +4532 4878 0 +4532 4879 -1 +4532 4880 0 +4532 4887 1 +4532 4888 0 +4533 4534 1 +4533 4557 -1 +4534 4558 1 +4535 4559 0 +4537 4173 -1 +4537 4174 0 +4537 4177 1 +4537 4535 -1 +4537 4541 -1 +4537 4542 1 +4537 4543 0 +4537 4544 1 +4537 4549 1 +4537 4550 1 +4537 4551 1 +4537 4552 1 +4538 4173 0 +4538 4174 0 +4538 4178 0 +4538 4535 1 +4538 4537 1 +4538 4541 0 +4538 4542 1 +4538 4543 1 +4538 4544 1 +4538 4549 1 +4538 4550 1 +4538 4551 1 +4538 4552 -1 +4539 4173 0 +4539 4174 0 +4539 4179 0 +4539 4525 1 +4539 4526 0 +4539 4527 1 +4539 4528 0 +4539 4535 1 +4539 4541 -1 +4539 4542 1 +4539 4543 1 +4539 4544 0 +4540 4173 1 +4540 4174 0 +4540 4180 1 +4540 4525 1 +4540 4526 0 +4540 4527 1 +4540 4528 0 +4540 4535 0 +4540 4539 1 +4540 4541 1 +4540 4542 1 +4540 4543 0 +4540 4544 0 +4541 4542 1 +4541 4565 1 +4542 4566 0 +4543 4544 -1 +4543 4567 -1 +4544 4568 1 +4545 4185 0 +4545 4541 0 +4545 4542 1 +4545 4549 0 +4545 4550 -1 +4545 4551 -1 +4545 4552 1 +4545 4557 1 +4545 4558 1 +4545 4559 1 +4545 4560 1 +4545 4903 -1 +4545 4904 1 +4546 4186 1 +4546 4541 1 +4546 4542 1 +4546 4545 1 +4546 4549 0 +4546 4550 0 +4546 4551 1 +4546 4552 1 +4546 4557 1 +4546 4558 1 +4546 4559 1 +4546 4560 0 +4546 4903 1 +4546 4904 0 +4547 4187 1 +4547 4533 1 +4547 4534 0 +4547 4535 1 +4547 4541 1 +4547 4542 1 +4547 4549 1 +4547 4550 -1 +4547 4551 -1 +4547 4552 0 +4547 4903 1 +4547 4904 1 +4548 4188 1 +4548 4533 1 +4548 4534 0 +4548 4535 -1 +4548 4541 1 +4548 4542 0 +4548 4547 1 +4548 4549 -1 +4548 4550 1 +4548 4551 1 +4548 4552 1 +4548 4903 1 +4548 4904 1 +4549 4550 1 +4549 4573 0 +4550 4574 0 +4551 4552 1 +4551 4575 0 +4552 4576 -1 +4553 4193 1 +4553 4549 -1 +4553 4550 -1 +4553 4557 1 +4553 4558 0 +4553 4559 1 +4553 4560 1 +4553 4911 1 +4553 4912 0 +4553 4925 0 +4553 4926 1 +4553 4927 1 +4553 4928 0 +4554 4194 0 +4554 4549 1 +4554 4550 0 +4554 4553 1 +4554 4557 1 +4554 4558 1 +4554 4559 1 +4554 4560 1 +4554 4911 1 +4554 4912 1 +4554 4925 1 +4554 4926 1 +4554 4927 1 +4554 4928 0 +4555 4195 1 +4555 4549 1 +4555 4550 1 +4555 4557 1 +4555 4558 1 +4555 4559 1 +4555 4560 1 +4555 4901 1 +4555 4902 1 +4555 4903 1 +4555 4904 -1 +4555 4911 0 +4555 4912 1 +4556 4196 0 +4556 4549 0 +4556 4550 1 +4556 4555 1 +4556 4557 1 +4556 4558 1 +4556 4559 1 +4556 4560 1 +4556 4901 1 +4556 4902 1 +4556 4903 1 +4556 4904 0 +4556 4911 0 +4556 4912 -1 +4557 4558 -1 +4557 4581 1 +4558 4582 1 +4559 4560 1 +4559 4583 0 +4560 4584 1 +4561 4197 -1 +4561 4198 0 +4561 4201 1 +4561 4559 0 +4561 4560 0 +4561 4565 0 +4561 4566 1 +4561 4567 0 +4561 4568 1 +4561 4573 -1 +4561 4574 -1 +4561 4575 1 +4561 4576 1 +4562 4197 1 +4562 4198 -1 +4562 4202 0 +4562 4559 1 +4562 4560 1 +4562 4561 0 +4562 4565 -1 +4562 4566 -1 +4562 4567 0 +4562 4568 0 +4562 4573 1 +4562 4574 -1 +4562 4575 1 +4562 4576 1 +4563 4197 1 +4563 4198 1 +4563 4203 0 +4563 4549 0 +4563 4550 0 +4563 4551 1 +4563 4552 1 +4563 4559 1 +4563 4560 1 +4563 4565 1 +4563 4566 1 +4563 4567 1 +4563 4568 0 +4564 4197 1 +4564 4198 0 +4564 4204 1 +4564 4549 1 +4564 4550 0 +4564 4551 1 +4564 4552 1 +4564 4559 0 +4564 4560 1 +4564 4563 1 +4564 4565 1 +4564 4566 1 +4564 4567 0 +4564 4568 0 +4565 4566 0 +4565 4589 1 +4566 4590 0 +4567 4568 0 +4567 4591 1 +4568 4592 -1 +4569 4209 1 +4569 4565 1 +4569 4566 0 +4569 4573 1 +4569 4574 1 +4569 4575 -1 +4569 4576 1 +4569 4581 1 +4569 4582 0 +4569 4583 1 +4569 4584 1 +4569 4927 0 +4569 4928 1 +4570 4210 0 +4570 4565 1 +4570 4566 1 +4570 4569 1 +4570 4573 0 +4570 4574 1 +4570 4575 1 +4570 4576 0 +4570 4581 1 +4570 4582 1 +4570 4583 1 +4570 4584 0 +4570 4927 0 +4570 4928 0 +4571 4211 1 +4571 4557 0 +4571 4558 1 +4571 4559 1 +4571 4560 0 +4571 4565 1 +4571 4566 0 +4571 4573 1 +4571 4574 1 +4571 4575 0 +4571 4576 0 +4571 4927 0 +4571 4928 1 +4572 4212 1 +4572 4557 -1 +4572 4558 1 +4572 4559 -1 +4572 4560 0 +4572 4565 0 +4572 4566 0 +4572 4571 -1 +4572 4573 0 +4572 4574 1 +4572 4575 0 +4572 4576 -1 +4572 4927 1 +4572 4928 0 +4573 4574 1 +4573 4597 -1 +4574 4598 1 +4575 4576 -1 +4575 4599 1 +4576 4600 0 +4577 4217 1 +4577 4573 1 +4577 4574 1 +4577 4581 -1 +4577 4582 0 +4577 4583 0 +4577 4584 1 +4577 4935 0 +4577 4936 0 +4577 4949 1 +4577 4950 1 +4577 4951 1 +4577 4952 -1 +4578 4218 0 +4578 4573 0 +4578 4574 0 +4578 4577 1 +4578 4581 1 +4578 4582 1 +4578 4583 0 +4578 4584 0 +4578 4935 1 +4578 4936 0 +4578 4949 1 +4578 4950 1 +4578 4951 0 +4578 4952 1 +4579 4219 0 +4579 4573 1 +4579 4574 1 +4579 4581 0 +4579 4582 1 +4579 4583 0 +4579 4584 1 +4579 4925 1 +4579 4926 1 +4579 4927 1 +4579 4928 0 +4579 4935 1 +4579 4936 0 +4580 4220 0 +4580 4573 0 +4580 4574 1 +4580 4579 1 +4580 4581 1 +4580 4582 1 +4580 4583 1 +4580 4584 0 +4580 4925 1 +4580 4926 0 +4580 4927 1 +4580 4928 0 +4580 4935 1 +4580 4936 1 +4581 4582 1 +4581 4605 0 +4582 4606 1 +4583 4584 1 +4583 4607 1 +4584 4608 0 +4585 4221 0 +4585 4222 1 +4585 4225 1 +4585 4583 0 +4585 4584 1 +4585 4589 1 +4585 4590 0 +4585 4591 -1 +4585 4592 1 +4585 4597 0 +4585 4598 1 +4585 4599 1 +4585 4600 -1 +4586 4221 -1 +4586 4222 0 +4586 4226 1 +4586 4583 -1 +4586 4584 1 +4586 4585 0 +4586 4589 1 +4586 4590 1 +4586 4591 0 +4586 4592 1 +4586 4597 0 +4586 4598 0 +4586 4599 0 +4586 4600 0 +4587 4221 1 +4587 4222 0 +4587 4227 0 +4587 4573 1 +4587 4574 1 +4587 4575 1 +4587 4576 0 +4587 4583 0 +4587 4584 1 +4587 4589 1 +4587 4590 1 +4587 4591 1 +4587 4592 0 +4588 4221 1 +4588 4222 0 +4588 4228 1 +4588 4573 -1 +4588 4574 1 +4588 4575 1 +4588 4576 1 +4588 4583 -1 +4588 4584 1 +4588 4587 0 +4588 4589 1 +4588 4590 1 +4588 4591 1 +4588 4592 1 +4589 4590 1 +4589 4613 1 +4590 4614 1 +4591 4592 -1 +4591 4615 1 +4592 4616 0 +4593 4233 0 +4593 4589 -1 +4593 4590 1 +4593 4597 1 +4593 4598 1 +4593 4599 1 +4593 4600 1 +4593 4605 1 +4593 4606 0 +4593 4607 0 +4593 4608 1 +4593 4951 0 +4593 4952 1 +4594 4234 1 +4594 4589 1 +4594 4590 0 +4594 4593 0 +4594 4597 1 +4594 4598 0 +4594 4599 0 +4594 4600 -1 +4594 4605 1 +4594 4606 1 +4594 4607 1 +4594 4608 -1 +4594 4951 1 +4594 4952 0 +4595 4235 1 +4595 4581 0 +4595 4582 -1 +4595 4583 -1 +4595 4584 0 +4595 4589 1 +4595 4590 1 +4595 4597 1 +4595 4598 1 +4595 4599 0 +4595 4600 1 +4595 4951 1 +4595 4952 0 +4596 4236 -1 +4596 4581 1 +4596 4582 -1 +4596 4583 0 +4596 4584 1 +4596 4589 0 +4596 4590 1 +4596 4595 0 +4596 4597 0 +4596 4598 1 +4596 4599 -1 +4596 4600 0 +4596 4951 1 +4596 4952 0 +4597 4598 -1 +4597 4621 1 +4598 4622 0 +4599 4600 1 +4599 4623 1 +4600 4624 1 +4601 4241 1 +4601 4597 1 +4601 4598 1 +4601 4605 -1 +4601 4606 1 +4601 4607 0 +4601 4608 0 +4601 4959 1 +4601 4960 1 +4601 4973 1 +4601 4974 0 +4601 4975 0 +4601 4976 1 +4602 4242 0 +4602 4597 -1 +4602 4598 1 +4602 4601 1 +4602 4605 1 +4602 4606 0 +4602 4607 1 +4602 4608 1 +4602 4959 1 +4602 4960 1 +4602 4973 0 +4602 4974 1 +4602 4975 1 +4602 4976 1 +4603 4243 1 +4603 4597 1 +4603 4598 0 +4603 4605 1 +4603 4606 1 +4603 4607 1 +4603 4608 1 +4603 4949 0 +4603 4950 -1 +4603 4951 1 +4603 4952 1 +4603 4959 0 +4603 4960 0 +4604 4244 1 +4604 4597 1 +4604 4598 1 +4604 4603 0 +4604 4605 0 +4604 4606 1 +4604 4607 0 +4604 4608 1 +4604 4949 1 +4604 4950 -1 +4604 4951 0 +4604 4952 -1 +4604 4959 1 +4604 4960 -1 +4605 4606 0 +4605 4629 1 +4606 4630 1 +4607 4608 1 +4607 4631 1 +4608 4632 0 +4609 4245 1 +4609 4246 1 +4609 4249 0 +4609 4607 0 +4609 4608 -1 +4609 4613 1 +4609 4614 1 +4609 4615 0 +4609 4616 1 +4609 4621 -1 +4609 4622 1 +4609 4623 1 +4609 4624 1 +4610 4245 1 +4610 4246 1 +4610 4250 1 +4610 4607 1 +4610 4608 1 +4610 4609 0 +4610 4613 -1 +4610 4614 1 +4610 4615 0 +4610 4616 1 +4610 4621 0 +4610 4622 1 +4610 4623 1 +4610 4624 0 +4611 4245 0 +4611 4246 1 +4611 4251 0 +4611 4597 0 +4611 4598 0 +4611 4599 -1 +4611 4600 0 +4611 4607 1 +4611 4608 1 +4611 4613 1 +4611 4614 -1 +4611 4615 0 +4611 4616 1 +4612 4245 0 +4612 4246 1 +4612 4252 1 +4612 4597 1 +4612 4598 0 +4612 4599 0 +4612 4600 1 +4612 4607 1 +4612 4608 0 +4612 4611 1 +4612 4613 1 +4612 4614 1 +4612 4615 0 +4612 4616 1 +4613 4614 0 +4613 4637 -1 +4614 4638 1 +4615 4616 -1 +4615 4639 0 +4616 4640 0 +4617 4257 1 +4617 4613 0 +4617 4614 1 +4617 4621 1 +4617 4622 0 +4617 4623 1 +4617 4624 1 +4617 4629 -1 +4617 4630 1 +4617 4631 0 +4617 4632 1 +4617 4975 0 +4617 4976 0 +4618 4258 -1 +4618 4613 0 +4618 4614 1 +4618 4617 -1 +4618 4621 0 +4618 4622 1 +4618 4623 1 +4618 4624 1 +4618 4629 1 +4618 4630 0 +4618 4631 0 +4618 4632 -1 +4618 4975 1 +4618 4976 1 +4619 4259 0 +4619 4605 -1 +4619 4606 1 +4619 4607 1 +4619 4608 1 +4619 4613 1 +4619 4614 0 +4619 4621 1 +4619 4622 1 +4619 4623 0 +4619 4624 1 +4619 4975 0 +4619 4976 0 +4620 4260 1 +4620 4605 -1 +4620 4606 1 +4620 4607 1 +4620 4608 1 +4620 4613 1 +4620 4614 1 +4620 4619 1 +4620 4621 1 +4620 4622 1 +4620 4623 0 +4620 4624 -1 +4620 4975 1 +4620 4976 1 +4621 4622 0 +4621 4645 1 +4622 4646 1 +4623 4624 -1 +4623 4647 1 +4624 4648 1 +4625 4265 1 +4625 4621 1 +4625 4622 0 +4625 4629 1 +4625 4630 1 +4625 4631 1 +4625 4632 1 +4625 4983 1 +4625 4984 1 +4625 4997 1 +4625 4998 1 +4625 4999 1 +4625 5000 1 +4626 4266 1 +4626 4621 0 +4626 4622 0 +4626 4625 1 +4626 4629 1 +4626 4630 1 +4626 4631 1 +4626 4632 1 +4626 4983 1 +4626 4984 1 +4626 4997 0 +4626 4998 -1 +4626 4999 0 +4626 5000 1 +4627 4267 1 +4627 4621 0 +4627 4622 0 +4627 4629 -1 +4627 4630 1 +4627 4631 1 +4627 4632 0 +4627 4973 1 +4627 4974 1 +4627 4975 1 +4627 4976 1 +4627 4983 -1 +4627 4984 1 +4628 4268 -1 +4628 4621 1 +4628 4622 0 +4628 4627 1 +4628 4629 1 +4628 4630 1 +4628 4631 1 +4628 4632 0 +4628 4973 1 +4628 4974 1 +4628 4975 1 +4628 4976 1 +4628 4983 1 +4628 4984 0 +4629 4630 -1 +4629 4653 0 +4630 4654 -1 +4631 4632 1 +4631 4655 1 +4632 4656 -1 +4633 4269 0 +4633 4270 1 +4633 4273 1 +4633 4631 1 +4633 4632 1 +4633 4637 -1 +4633 4638 1 +4633 4639 0 +4633 4640 1 +4633 4645 -1 +4633 4646 1 +4633 4647 1 +4633 4648 0 +4634 4269 1 +4634 4270 0 +4634 4274 1 +4634 4631 1 +4634 4632 1 +4634 4633 0 +4634 4637 1 +4634 4638 0 +4634 4639 -1 +4634 4640 1 +4634 4645 1 +4634 4646 1 +4634 4647 0 +4634 4648 0 +4635 4269 0 +4635 4270 1 +4635 4275 0 +4635 4621 1 +4635 4622 1 +4635 4623 1 +4635 4624 -1 +4635 4631 1 +4635 4632 1 +4635 4637 0 +4635 4638 1 +4635 4639 1 +4635 4640 1 +4636 4269 1 +4636 4270 -1 +4636 4276 1 +4636 4621 1 +4636 4622 0 +4636 4623 1 +4636 4624 -1 +4636 4631 1 +4636 4632 1 +4636 4635 0 +4636 4637 0 +4636 4638 1 +4636 4639 0 +4636 4640 0 +4637 4638 1 +4637 4661 1 +4638 4662 1 +4639 4640 1 +4639 4663 1 +4640 4664 0 +4641 4281 -1 +4641 4637 1 +4641 4638 1 +4641 4645 1 +4641 4646 0 +4641 4647 0 +4641 4648 1 +4641 4653 1 +4641 4654 1 +4641 4655 -1 +4641 4656 1 +4641 4999 1 +4641 5000 1 +4642 4282 0 +4642 4637 1 +4642 4638 -1 +4642 4641 1 +4642 4645 0 +4642 4646 1 +4642 4647 1 +4642 4648 0 +4642 4653 1 +4642 4654 1 +4642 4655 -1 +4642 4656 0 +4642 4999 1 +4642 5000 0 +4643 4283 0 +4643 4629 1 +4643 4630 0 +4643 4631 0 +4643 4632 1 +4643 4637 -1 +4643 4638 1 +4643 4645 1 +4643 4646 1 +4643 4647 1 +4643 4648 1 +4643 4999 1 +4643 5000 1 +4644 4284 0 +4644 4629 1 +4644 4630 0 +4644 4631 1 +4644 4632 1 +4644 4637 1 +4644 4638 1 +4644 4643 0 +4644 4645 0 +4644 4646 0 +4644 4647 1 +4644 4648 0 +4644 4999 1 +4644 5000 1 +4645 4646 1 +4645 4669 1 +4646 4670 -1 +4647 4648 1 +4647 4671 0 +4648 4672 0 +4649 4289 1 +4649 4645 1 +4649 4646 0 +4649 4653 1 +4649 4654 0 +4649 4655 0 +4649 4656 1 +4649 5007 0 +4649 5008 0 +4649 5021 0 +4649 5022 -1 +4649 5023 0 +4649 5024 1 +4650 4290 1 +4650 4645 0 +4650 4646 1 +4650 4649 1 +4650 4653 1 +4650 4654 1 +4650 4655 -1 +4650 4656 1 +4650 5007 -1 +4650 5008 1 +4650 5021 1 +4650 5022 0 +4650 5023 1 +4650 5024 -1 +4651 4291 1 +4651 4645 0 +4651 4646 1 +4651 4653 0 +4651 4654 1 +4651 4655 1 +4651 4656 0 +4651 4997 1 +4651 4998 1 +4651 4999 1 +4651 5000 0 +4651 5007 1 +4651 5008 1 +4652 4292 1 +4652 4645 -1 +4652 4646 1 +4652 4651 0 +4652 4653 0 +4652 4654 1 +4652 4655 1 +4652 4656 1 +4652 4997 1 +4652 4998 1 +4652 4999 1 +4652 5000 -1 +4652 5007 1 +4652 5008 0 +4653 4654 1 +4653 4677 0 +4654 4678 0 +4655 4656 1 +4655 4679 1 +4656 4680 0 +4657 4293 0 +4657 4294 0 +4657 4297 0 +4657 4655 -1 +4657 4656 0 +4657 4661 1 +4657 4662 1 +4657 4663 0 +4657 4664 1 +4657 4669 1 +4657 4670 1 +4657 4671 0 +4657 4672 1 +4658 4293 -1 +4658 4294 -1 +4658 4298 0 +4658 4655 1 +4658 4656 1 +4658 4657 1 +4658 4661 1 +4658 4662 1 +4658 4663 1 +4658 4664 -1 +4658 4669 1 +4658 4670 0 +4658 4671 0 +4658 4672 0 +4659 4293 1 +4659 4294 -1 +4659 4299 1 +4659 4645 0 +4659 4646 1 +4659 4647 0 +4659 4648 1 +4659 4655 1 +4659 4656 0 +4659 4661 1 +4659 4662 0 +4659 4663 1 +4659 4664 1 +4660 4293 0 +4660 4294 0 +4660 4300 1 +4660 4645 -1 +4660 4646 0 +4660 4647 1 +4660 4648 1 +4660 4655 -1 +4660 4656 0 +4660 4659 1 +4660 4661 1 +4660 4662 1 +4660 4663 1 +4660 4664 0 +4661 4662 1 +4663 4664 1 +4665 4305 -1 +4665 4661 0 +4665 4662 0 +4665 4669 0 +4665 4670 0 +4665 4671 1 +4665 4672 0 +4665 4677 1 +4665 4678 1 +4665 4679 1 +4665 4680 1 +4665 5023 1 +4665 5024 1 +4666 4306 1 +4666 4661 0 +4666 4662 0 +4666 4665 -1 +4666 4669 1 +4666 4670 1 +4666 4671 1 +4666 4672 1 +4666 4677 1 +4666 4678 0 +4666 4679 1 +4666 4680 1 +4666 5023 1 +4666 5024 1 +4667 4307 1 +4667 4653 -1 +4667 4654 0 +4667 4655 1 +4667 4656 -1 +4667 4661 1 +4667 4662 0 +4667 4669 0 +4667 4670 0 +4667 4671 1 +4667 4672 1 +4667 5023 0 +4667 5024 1 +4668 4308 1 +4668 4653 1 +4668 4654 1 +4668 4655 0 +4668 4656 1 +4668 4661 0 +4668 4662 0 +4668 4667 -1 +4668 4669 1 +4668 4670 1 +4668 4671 1 +4668 4672 0 +4668 5023 0 +4668 5024 1 +4669 4670 1 +4671 4672 0 +4673 4313 1 +4673 4669 1 +4673 4670 0 +4673 4677 0 +4673 4678 1 +4673 4679 1 +4673 4680 1 +4673 5031 1 +4673 5032 1 +4674 4314 0 +4674 4669 -1 +4674 4670 -1 +4674 4673 0 +4674 4677 1 +4674 4678 1 +4674 4679 1 +4674 4680 1 +4674 5031 1 +4674 5032 1 +4675 4315 -1 +4675 4669 1 +4675 4670 1 +4675 4677 1 +4675 4678 -1 +4675 4679 1 +4675 4680 1 +4675 5021 1 +4675 5022 0 +4675 5023 1 +4675 5024 1 +4675 5031 0 +4675 5032 1 +4676 4316 0 +4676 4669 1 +4676 4670 1 +4676 4675 1 +4676 4677 1 +4676 4678 0 +4676 4679 1 +4676 4680 0 +4676 5021 1 +4676 5022 1 +4676 5023 1 +4676 5024 0 +4676 5031 -1 +4676 5032 0 +4677 4678 0 +4679 4680 1 +4681 4321 1 +4681 4685 0 +4681 4686 1 +4681 4687 0 +4681 4688 1 +4681 4693 -1 +4681 4694 1 +4681 4695 0 +4681 4696 0 +4682 4322 1 +4682 4681 1 +4682 4685 0 +4682 4686 1 +4682 4687 1 +4682 4688 1 +4682 4693 0 +4682 4694 1 +4682 4695 1 +4682 4696 -1 +4683 4323 1 +4683 4685 1 +4683 4686 1 +4683 4687 0 +4683 4688 1 +4684 4324 0 +4684 4683 -1 +4684 4685 0 +4684 4686 0 +4684 4687 0 +4684 4688 1 +4685 4686 -1 +4685 4709 0 +4686 4710 1 +4687 4688 0 +4687 4711 0 +4688 4712 -1 +4689 4329 1 +4689 4685 1 +4689 4686 -1 +4689 4693 -1 +4689 4694 1 +4689 4695 1 +4689 4696 1 +4689 4701 -1 +4689 4702 0 +4689 4703 0 +4689 4704 1 +4689 5047 1 +4689 5048 1 +4690 4330 0 +4690 4685 0 +4690 4686 0 +4690 4689 1 +4690 4693 1 +4690 4694 1 +4690 4695 1 +4690 4696 0 +4690 4701 0 +4690 4702 1 +4690 4703 1 +4690 4704 0 +4690 5047 1 +4690 5048 1 +4691 4331 -1 +4691 4685 1 +4691 4686 1 +4691 4693 1 +4691 4694 0 +4691 4695 0 +4691 4696 0 +4691 5047 1 +4691 5048 1 +4692 4332 0 +4692 4685 1 +4692 4686 1 +4692 4691 1 +4692 4693 1 +4692 4694 -1 +4692 4695 0 +4692 4696 0 +4692 5047 1 +4692 5048 1 +4693 4694 0 +4693 4717 1 +4694 4718 0 +4695 4696 0 +4695 4719 1 +4696 4720 -1 +4697 4337 1 +4697 4693 -1 +4697 4694 0 +4697 4701 0 +4697 4702 1 +4697 4703 -1 +4697 4704 1 +4697 5055 1 +4697 5056 0 +4697 5069 0 +4697 5070 1 +4697 5071 0 +4697 5072 1 +4698 4338 1 +4698 4693 1 +4698 4694 1 +4698 4697 0 +4698 4701 1 +4698 4702 0 +4698 4703 0 +4698 4704 1 +4698 5055 1 +4698 5056 0 +4698 5069 1 +4698 5070 0 +4698 5071 1 +4698 5072 1 +4699 4339 0 +4699 4693 0 +4699 4694 0 +4699 4701 1 +4699 4702 1 +4699 4703 1 +4699 4704 1 +4699 5045 0 +4699 5046 1 +4699 5047 1 +4699 5048 1 +4699 5055 1 +4699 5056 0 +4700 4340 1 +4700 4693 1 +4700 4694 -1 +4700 4699 0 +4700 4701 0 +4700 4702 0 +4700 4703 1 +4700 4704 0 +4700 5045 1 +4700 5046 1 +4700 5047 1 +4700 5048 1 +4700 5055 1 +4700 5056 0 +4701 4702 1 +4701 4725 -1 +4702 4726 -1 +4703 4704 0 +4703 4727 1 +4704 4728 1 +4705 4341 1 +4705 4342 1 +4705 4345 0 +4705 4703 1 +4705 4704 1 +4705 4709 1 +4705 4710 1 +4705 4711 -1 +4705 4712 1 +4705 4717 1 +4705 4718 1 +4705 4719 -1 +4705 4720 0 +4706 4341 1 +4706 4342 0 +4706 4346 0 +4706 4703 0 +4706 4704 1 +4706 4705 1 +4706 4709 1 +4706 4710 1 +4706 4711 1 +4706 4712 1 +4706 4717 1 +4706 4718 1 +4706 4719 0 +4706 4720 -1 +4707 4341 0 +4707 4342 1 +4707 4347 0 +4707 4693 0 +4707 4694 1 +4707 4695 1 +4707 4696 1 +4707 4703 1 +4707 4704 0 +4707 4709 0 +4707 4710 -1 +4707 4711 1 +4707 4712 1 +4708 4341 1 +4708 4342 1 +4708 4348 0 +4708 4693 1 +4708 4694 1 +4708 4695 -1 +4708 4696 0 +4708 4703 0 +4708 4704 1 +4708 4707 1 +4708 4709 0 +4708 4710 1 +4708 4711 -1 +4708 4712 0 +4709 4710 0 +4709 4733 0 +4710 4734 0 +4711 4712 1 +4711 4735 1 +4712 4736 0 +4713 4353 1 +4713 4709 1 +4713 4710 0 +4713 4717 1 +4713 4718 1 +4713 4719 1 +4713 4720 1 +4713 4725 1 +4713 4726 1 +4713 4727 1 +4713 4728 1 +4713 5071 0 +4713 5072 1 +4714 4354 1 +4714 4709 0 +4714 4710 0 +4714 4713 0 +4714 4717 -1 +4714 4718 1 +4714 4719 1 +4714 4720 1 +4714 4725 1 +4714 4726 -1 +4714 4727 1 +4714 4728 1 +4714 5071 -1 +4714 5072 1 +4715 4355 1 +4715 4701 1 +4715 4702 1 +4715 4703 1 +4715 4704 0 +4715 4709 0 +4715 4710 1 +4715 4717 1 +4715 4718 1 +4715 4719 1 +4715 4720 0 +4715 5071 -1 +4715 5072 1 +4716 4356 1 +4716 4701 1 +4716 4702 0 +4716 4703 -1 +4716 4704 1 +4716 4709 1 +4716 4710 0 +4716 4715 0 +4716 4717 1 +4716 4718 0 +4716 4719 1 +4716 4720 0 +4716 5071 -1 +4716 5072 -1 +4717 4718 0 +4717 4741 1 +4718 4742 0 +4719 4720 1 +4719 4743 0 +4720 4744 1 +4721 4361 0 +4721 4717 0 +4721 4718 0 +4721 4725 1 +4721 4726 1 +4721 4727 0 +4721 4728 0 +4721 5079 0 +4721 5080 1 +4721 5093 1 +4721 5094 1 +4721 5095 1 +4721 5096 0 +4722 4362 1 +4722 4717 1 +4722 4718 1 +4722 4721 0 +4722 4725 1 +4722 4726 0 +4722 4727 0 +4722 4728 1 +4722 5079 0 +4722 5080 1 +4722 5093 -1 +4722 5094 -1 +4722 5095 1 +4722 5096 1 +4723 4363 1 +4723 4717 1 +4723 4718 1 +4723 4725 -1 +4723 4726 0 +4723 4727 1 +4723 4728 1 +4723 5069 1 +4723 5070 1 +4723 5071 -1 +4723 5072 0 +4723 5079 1 +4723 5080 0 +4724 4364 1 +4724 4717 1 +4724 4718 0 +4724 4723 -1 +4724 4725 1 +4724 4726 0 +4724 4727 1 +4724 4728 1 +4724 5069 1 +4724 5070 1 +4724 5071 1 +4724 5072 1 +4724 5079 -1 +4724 5080 1 +4725 4726 0 +4725 4749 -1 +4726 4750 1 +4727 4728 0 +4727 4751 0 +4728 4752 1 +4729 4365 0 +4729 4366 0 +4729 4369 -1 +4729 4727 -1 +4729 4728 0 +4729 4733 1 +4729 4734 0 +4729 4735 0 +4729 4736 1 +4729 4741 1 +4729 4742 1 +4729 4743 1 +4729 4744 0 +4730 4365 1 +4730 4366 0 +4730 4370 -1 +4730 4727 -1 +4730 4728 0 +4730 4729 -1 +4730 4733 0 +4730 4734 1 +4730 4735 1 +4730 4736 0 +4730 4741 -1 +4730 4742 0 +4730 4743 0 +4730 4744 -1 +4731 4365 1 +4731 4366 0 +4731 4371 1 +4731 4717 0 +4731 4718 1 +4731 4719 0 +4731 4720 1 +4731 4727 0 +4731 4728 1 +4731 4733 0 +4731 4734 1 +4731 4735 1 +4731 4736 0 +4732 4365 1 +4732 4366 1 +4732 4372 1 +4732 4717 0 +4732 4718 1 +4732 4719 1 +4732 4720 1 +4732 4727 1 +4732 4728 -1 +4732 4731 1 +4732 4733 1 +4732 4734 1 +4732 4735 -1 +4732 4736 1 +4733 4734 0 +4733 4757 1 +4734 4758 0 +4735 4736 0 +4735 4759 0 +4736 4760 0 +4737 4377 1 +4737 4733 0 +4737 4734 0 +4737 4741 0 +4737 4742 0 +4737 4743 -1 +4737 4744 0 +4737 4749 1 +4737 4750 0 +4737 4751 0 +4737 4752 1 +4737 5095 0 +4737 5096 0 +4738 4378 0 +4738 4733 1 +4738 4734 -1 +4738 4737 0 +4738 4741 1 +4738 4742 0 +4738 4743 0 +4738 4744 1 +4738 4749 1 +4738 4750 0 +4738 4751 1 +4738 4752 1 +4738 5095 0 +4738 5096 1 +4739 4379 0 +4739 4725 0 +4739 4726 1 +4739 4727 0 +4739 4728 1 +4739 4733 -1 +4739 4734 1 +4739 4741 1 +4739 4742 -1 +4739 4743 0 +4739 4744 1 +4739 5095 0 +4739 5096 1 +4740 4380 1 +4740 4725 1 +4740 4726 1 +4740 4727 1 +4740 4728 1 +4740 4733 0 +4740 4734 0 +4740 4739 1 +4740 4741 -1 +4740 4742 1 +4740 4743 1 +4740 4744 1 +4740 5095 1 +4740 5096 -1 +4741 4742 1 +4741 4765 1 +4742 4766 1 +4743 4744 -1 +4743 4767 0 +4744 4768 1 +4745 4385 1 +4745 4741 0 +4745 4742 1 +4745 4749 1 +4745 4750 1 +4745 4751 0 +4745 4752 1 +4745 5103 0 +4745 5104 1 +4745 5117 1 +4745 5118 -1 +4745 5119 1 +4745 5120 0 +4746 4386 1 +4746 4741 -1 +4746 4742 0 +4746 4745 0 +4746 4749 1 +4746 4750 1 +4746 4751 0 +4746 4752 1 +4746 5103 1 +4746 5104 -1 +4746 5117 1 +4746 5118 0 +4746 5119 1 +4746 5120 1 +4747 4387 1 +4747 4741 0 +4747 4742 1 +4747 4749 1 +4747 4750 1 +4747 4751 -1 +4747 4752 1 +4747 5093 1 +4747 5094 0 +4747 5095 1 +4747 5096 1 +4747 5103 -1 +4747 5104 0 +4748 4388 1 +4748 4741 0 +4748 4742 1 +4748 4747 1 +4748 4749 -1 +4748 4750 1 +4748 4751 1 +4748 4752 0 +4748 5093 1 +4748 5094 1 +4748 5095 0 +4748 5096 1 +4748 5103 0 +4748 5104 1 +4749 4750 0 +4749 4773 0 +4750 4774 1 +4751 4752 0 +4751 4775 0 +4752 4776 1 +4753 4389 0 +4753 4390 1 +4753 4393 1 +4753 4751 1 +4753 4752 0 +4753 4757 0 +4753 4758 0 +4753 4759 1 +4753 4760 1 +4753 4765 -1 +4753 4766 -1 +4753 4767 1 +4753 4768 -1 +4754 4389 1 +4754 4390 1 +4754 4394 1 +4754 4751 -1 +4754 4752 1 +4754 4753 1 +4754 4757 1 +4754 4758 0 +4754 4759 0 +4754 4760 1 +4754 4765 -1 +4754 4766 -1 +4754 4767 1 +4754 4768 1 +4756 4389 0 +4756 4390 1 +4756 4396 0 +4756 4741 0 +4756 4742 0 +4756 4743 1 +4756 4744 0 +4756 4751 0 +4756 4752 1 +4756 4757 1 +4756 4758 0 +4756 4759 0 +4756 4760 0 +4757 4758 0 +4757 4781 1 +4758 4782 0 +4759 4760 0 +4759 4783 1 +4760 4784 0 +4761 4401 0 +4761 4757 0 +4761 4758 0 +4761 4765 1 +4761 4766 0 +4761 4767 1 +4761 4768 0 +4761 4773 1 +4761 4774 1 +4761 4775 0 +4761 4776 1 +4761 5119 0 +4761 5120 1 +4762 4402 0 +4762 4757 1 +4762 4758 1 +4762 4761 -1 +4762 4765 1 +4762 4766 1 +4762 4767 0 +4762 4768 1 +4762 4773 1 +4762 4774 0 +4762 4775 1 +4762 4776 1 +4762 5119 0 +4762 5120 1 +4763 4403 0 +4763 4749 1 +4763 4750 -1 +4763 4751 1 +4763 4752 1 +4763 4757 0 +4763 4758 -1 +4763 4765 1 +4763 4766 -1 +4763 4767 1 +4763 4768 1 +4763 5119 0 +4763 5120 -1 +4764 4404 1 +4764 4749 0 +4764 4750 1 +4764 4751 1 +4764 4752 1 +4764 4757 1 +4764 4758 0 +4764 4763 0 +4764 4765 1 +4764 4766 1 +4764 4767 1 +4764 4768 1 +4764 5119 1 +4764 5120 1 +4765 4766 1 +4765 4789 1 +4766 4790 1 +4767 4768 0 +4767 4791 -1 +4768 4792 1 +4769 4409 1 +4769 4765 1 +4769 4766 -1 +4769 4773 1 +4769 4774 0 +4769 4775 1 +4769 4776 1 +4769 5127 1 +4769 5128 1 +4769 5141 1 +4769 5142 0 +4769 5143 1 +4769 5144 0 +4770 4410 0 +4770 4765 1 +4770 4766 -1 +4770 4769 1 +4770 4773 1 +4770 4774 1 +4770 4775 1 +4770 4776 0 +4770 5127 1 +4770 5128 0 +4770 5141 0 +4770 5142 1 +4770 5143 1 +4770 5144 0 +4771 4411 1 +4771 4765 0 +4771 4766 1 +4771 4773 1 +4771 4774 1 +4771 4775 1 +4771 4776 0 +4771 5117 1 +4771 5118 0 +4771 5119 0 +4771 5120 1 +4771 5127 1 +4771 5128 0 +4772 4412 1 +4772 4765 1 +4772 4766 -1 +4772 4771 1 +4772 4773 0 +4772 4774 1 +4772 4775 1 +4772 4776 1 +4772 5117 1 +4772 5118 1 +4772 5119 0 +4772 5120 1 +4772 5127 -1 +4772 5128 1 +4773 4774 0 +4773 4797 0 +4774 4798 1 +4775 4776 1 +4775 4799 0 +4776 4800 1 +4777 4413 0 +4777 4414 0 +4777 4417 1 +4777 4775 1 +4777 4776 1 +4777 4781 0 +4777 4782 0 +4777 4783 -1 +4777 4784 1 +4777 4789 1 +4777 4790 0 +4777 4791 0 +4777 4792 1 +4778 4413 0 +4778 4414 -1 +4778 4418 1 +4778 4775 1 +4778 4776 0 +4778 4777 1 +4778 4781 1 +4778 4782 1 +4778 4783 1 +4778 4784 0 +4778 4789 -1 +4778 4790 0 +4778 4791 1 +4778 4792 1 +4779 4413 1 +4779 4414 -1 +4779 4419 1 +4779 4765 0 +4779 4766 1 +4779 4767 1 +4779 4768 0 +4779 4775 0 +4779 4776 -1 +4779 4781 0 +4779 4782 1 +4779 4783 -1 +4779 4784 1 +4780 4413 1 +4780 4414 1 +4780 4420 0 +4780 4765 1 +4780 4766 1 +4780 4767 0 +4780 4768 1 +4780 4775 1 +4780 4776 0 +4780 4779 0 +4780 4781 0 +4780 4782 1 +4780 4783 0 +4780 4784 1 +4781 4782 1 +4781 4805 1 +4782 4806 0 +4783 4784 0 +4783 4807 0 +4784 4808 1 +4785 4425 1 +4785 4781 1 +4785 4782 1 +4785 4789 0 +4785 4790 1 +4785 4791 1 +4785 4792 1 +4785 4797 1 +4785 4798 0 +4785 4799 0 +4785 4800 1 +4785 5143 0 +4785 5144 0 +4786 4426 -1 +4786 4781 0 +4786 4782 -1 +4786 4785 1 +4786 4789 -1 +4786 4790 0 +4786 4791 1 +4786 4792 -1 +4786 4797 0 +4786 4798 1 +4786 4799 0 +4786 4800 1 +4786 5143 1 +4786 5144 1 +4787 4427 1 +4787 4773 1 +4787 4774 -1 +4787 4775 1 +4787 4776 1 +4787 4781 1 +4787 4782 1 +4787 4789 1 +4787 4790 -1 +4787 4791 1 +4787 4792 1 +4787 5143 1 +4787 5144 1 +4788 4428 0 +4788 4773 1 +4788 4774 -1 +4788 4775 1 +4788 4776 0 +4788 4781 -1 +4788 4782 0 +4788 4787 -1 +4788 4789 0 +4788 4790 1 +4788 4791 0 +4788 4792 1 +4788 5143 1 +4788 5144 1 +4789 4790 0 +4789 4813 0 +4790 4814 1 +4791 4792 0 +4791 4815 1 +4792 4816 1 +4793 4433 0 +4793 4789 1 +4793 4790 0 +4793 4797 1 +4793 4798 1 +4793 4799 1 +4793 4800 0 +4793 5151 0 +4793 5152 1 +4793 5165 1 +4793 5166 0 +4793 5167 0 +4793 5168 -1 +4794 4434 1 +4794 4789 1 +4794 4790 -1 +4794 4793 0 +4794 4797 0 +4794 4798 1 +4794 4799 1 +4794 4800 1 +4794 5151 1 +4794 5152 0 +4794 5165 0 +4794 5166 1 +4794 5167 -1 +4794 5168 1 +4795 4435 1 +4795 4789 1 +4795 4790 0 +4795 4797 1 +4795 4798 0 +4795 4799 1 +4795 4800 1 +4795 5141 0 +4795 5142 1 +4795 5143 1 +4795 5144 -1 +4795 5151 0 +4795 5152 0 +4796 4436 1 +4796 4789 1 +4796 4790 1 +4796 4795 0 +4796 4797 1 +4796 4798 0 +4796 4799 1 +4796 4800 1 +4796 5141 1 +4796 5142 0 +4796 5143 1 +4796 5144 1 +4796 5151 1 +4796 5152 1 +4797 4798 1 +4797 4821 1 +4798 4822 0 +4799 4800 1 +4799 4823 1 +4800 4824 1 +4801 4437 -1 +4801 4438 1 +4801 4441 -1 +4801 4799 0 +4801 4800 0 +4801 4805 1 +4801 4806 1 +4801 4807 1 +4801 4808 1 +4801 4813 1 +4801 4814 0 +4801 4815 1 +4801 4816 1 +4802 4437 0 +4802 4438 1 +4802 4442 1 +4802 4799 1 +4802 4800 1 +4802 4801 1 +4802 4805 1 +4802 4806 0 +4802 4807 0 +4802 4808 1 +4802 4813 1 +4802 4814 1 +4802 4815 1 +4802 4816 1 +4803 4437 0 +4803 4438 1 +4803 4443 1 +4803 4789 1 +4803 4790 0 +4803 4791 -1 +4803 4792 1 +4803 4799 1 +4803 4800 1 +4803 4805 1 +4803 4806 0 +4803 4807 0 +4803 4808 1 +4804 4437 0 +4804 4438 1 +4804 4444 1 +4804 4789 0 +4804 4790 1 +4804 4791 1 +4804 4792 0 +4804 4799 1 +4804 4800 1 +4804 4803 1 +4804 4805 1 +4804 4806 1 +4804 4807 -1 +4804 4808 1 +4805 4806 1 +4805 4829 0 +4806 4830 1 +4807 4808 0 +4807 4831 -1 +4808 4832 0 +4809 4449 1 +4809 4805 1 +4809 4806 0 +4809 4813 -1 +4809 4814 0 +4809 4815 1 +4809 4816 0 +4809 4821 1 +4809 4822 1 +4809 4823 1 +4809 4824 -1 +4809 5167 0 +4809 5168 1 +4810 4450 0 +4810 4805 0 +4810 4806 1 +4810 4809 0 +4810 4813 0 +4810 4814 1 +4810 4815 1 +4810 4816 1 +4810 4821 1 +4810 4822 1 +4810 4823 1 +4810 4824 0 +4810 5167 -1 +4810 5168 0 +4811 4451 0 +4811 4797 -1 +4811 4798 -1 +4811 4799 -1 +4811 4800 0 +4811 4805 0 +4811 4806 0 +4811 4813 1 +4811 4814 0 +4811 4815 -1 +4811 4816 1 +4811 5167 0 +4811 5168 -1 +4812 4452 1 +4812 4797 1 +4812 4798 0 +4812 4799 1 +4812 4800 1 +4812 4805 1 +4812 4806 1 +4812 4811 1 +4812 4813 1 +4812 4814 1 +4812 4815 1 +4812 4816 0 +4812 5167 1 +4812 5168 1 +4813 4814 1 +4813 4837 0 +4814 4838 1 +4815 4816 1 +4815 4839 0 +4816 4840 1 +4817 4457 0 +4817 4813 0 +4817 4814 0 +4817 4821 1 +4817 4822 1 +4817 4823 1 +4817 4824 1 +4817 5175 0 +4817 5176 0 +4817 5189 1 +4817 5190 -1 +4817 5191 1 +4817 5192 0 +4818 4458 0 +4818 4813 -1 +4818 4814 1 +4818 4817 1 +4818 4821 1 +4818 4822 1 +4818 4823 1 +4818 4824 0 +4818 5175 0 +4818 5176 0 +4818 5189 -1 +4818 5190 0 +4818 5191 1 +4818 5192 1 +4819 4459 1 +4819 4813 1 +4819 4814 -1 +4819 4821 0 +4819 4822 0 +4819 4823 1 +4819 4824 1 +4819 5165 -1 +4819 5166 0 +4819 5167 1 +4819 5168 -1 +4819 5175 1 +4819 5176 1 +4820 4460 1 +4820 4813 1 +4820 4814 0 +4820 4819 1 +4820 4821 1 +4820 4822 1 +4820 4823 0 +4820 4824 0 +4820 5165 1 +4820 5166 1 +4820 5167 1 +4820 5168 -1 +4820 5175 0 +4820 5176 0 +4821 4822 1 +4821 4845 1 +4822 4846 1 +4823 4824 1 +4823 4847 0 +4824 4848 -1 +4825 4461 1 +4825 4462 0 +4825 4465 1 +4825 4823 0 +4825 4824 1 +4825 4829 1 +4825 4830 1 +4825 4831 0 +4825 4832 0 +4825 4837 1 +4825 4838 0 +4825 4839 1 +4825 4840 1 +4826 4461 0 +4826 4462 -1 +4826 4466 1 +4826 4823 0 +4826 4824 0 +4826 4825 1 +4826 4829 0 +4826 4830 1 +4826 4831 -1 +4826 4832 1 +4826 4837 1 +4826 4838 1 +4826 4839 0 +4826 4840 0 +4827 4461 0 +4827 4462 0 +4827 4467 1 +4827 4813 -1 +4827 4814 0 +4827 4815 0 +4827 4816 0 +4827 4823 0 +4827 4824 -1 +4827 4829 0 +4827 4830 1 +4827 4831 1 +4827 4832 1 +4828 4461 1 +4828 4462 1 +4828 4468 1 +4828 4813 1 +4828 4814 0 +4828 4815 0 +4828 4816 1 +4828 4823 0 +4828 4824 1 +4828 4827 1 +4828 4829 -1 +4828 4830 1 +4828 4831 1 +4828 4832 1 +4829 4830 -1 +4829 4853 1 +4830 4854 0 +4831 4832 0 +4831 4855 1 +4832 4856 1 +4833 4473 -1 +4833 4829 0 +4833 4830 0 +4833 4837 1 +4833 4838 1 +4833 4839 1 +4833 4840 1 +4833 4845 1 +4833 4846 0 +4833 4847 1 +4833 4848 -1 +4833 5191 1 +4833 5192 1 +4834 4474 1 +4834 4829 0 +4834 4830 1 +4834 4833 0 +4834 4837 0 +4834 4838 1 +4834 4839 1 +4834 4840 1 +4834 4845 -1 +4834 4846 1 +4834 4847 1 +4834 4848 -1 +4834 5191 0 +4834 5192 1 +4835 4475 1 +4835 4821 1 +4835 4822 0 +4835 4823 0 +4835 4824 0 +4835 4829 1 +4835 4830 1 +4835 4837 0 +4835 4838 1 +4835 4839 0 +4835 4840 1 +4835 5191 1 +4835 5192 1 +4836 4476 1 +4836 4821 -1 +4836 4822 1 +4836 4823 0 +4836 4824 1 +4836 4829 -1 +4836 4830 1 +4836 4835 0 +4836 4837 1 +4836 4838 1 +4836 4839 0 +4836 4840 0 +4836 5191 1 +4836 5192 0 +4837 4838 -1 +4837 4861 1 +4838 4862 -1 +4839 4840 0 +4839 4863 0 +4840 4864 1 +4841 4481 0 +4841 4837 1 +4841 4838 0 +4841 4845 0 +4841 4846 1 +4841 4847 1 +4841 4848 0 +4841 5199 1 +4841 5200 1 +4841 5214 1 +4841 5215 -1 +4841 5216 0 +4842 4482 0 +4842 4837 0 +4842 4838 0 +4842 4841 1 +4842 4845 0 +4842 4846 1 +4842 4847 1 +4842 4848 1 +4842 5199 1 +4842 5200 0 +4842 5214 0 +4842 5215 -1 +4842 5216 0 +4843 4483 1 +4843 4837 1 +4843 4838 1 +4843 4845 -1 +4843 4846 0 +4843 4847 0 +4843 4848 0 +4843 5189 0 +4843 5190 1 +4843 5191 0 +4843 5192 1 +4843 5199 1 +4843 5200 1 +4845 4846 1 +4845 4869 0 +4846 4870 1 +4847 4848 -1 +4847 4871 1 +4848 4872 0 +4849 4485 1 +4849 4486 1 +4849 4489 1 +4849 4847 1 +4849 4848 0 +4849 4853 1 +4849 4854 1 +4849 4855 1 +4849 4856 -1 +4849 4861 0 +4849 4862 1 +4849 4863 1 +4849 4864 -1 +4850 4485 1 +4850 4486 1 +4850 4490 0 +4850 4847 1 +4850 4848 1 +4850 4849 0 +4850 4853 0 +4850 4854 1 +4850 4855 1 +4850 4856 -1 +4850 4861 -1 +4850 4862 1 +4850 4863 1 +4850 4864 0 +4851 4485 1 +4851 4486 1 +4851 4491 0 +4851 4837 1 +4851 4838 -1 +4851 4839 0 +4851 4840 1 +4851 4847 1 +4851 4848 1 +4851 4853 1 +4851 4854 0 +4851 4855 1 +4851 4856 1 +4852 4485 0 +4852 4486 0 +4852 4492 0 +4852 4837 0 +4852 4838 1 +4852 4839 0 +4852 4840 0 +4852 4847 1 +4852 4848 1 +4852 4851 0 +4852 4853 1 +4852 4854 1 +4852 4855 1 +4852 4856 0 +4853 4854 1 +4853 4877 1 +4854 4878 0 +4855 4856 0 +4855 4879 0 +4856 4880 -1 +4857 4497 0 +4857 4853 1 +4857 4854 1 +4857 4861 1 +4857 4862 1 +4857 4863 1 +4857 4864 1 +4857 4869 0 +4857 4870 0 +4857 4871 1 +4857 4872 -1 +4857 5215 1 +4857 5216 0 +4858 4498 1 +4858 4853 1 +4858 4854 0 +4858 4857 0 +4858 4861 1 +4858 4862 0 +4858 4863 1 +4858 4864 1 +4858 4869 1 +4858 4870 0 +4858 4871 1 +4858 4872 1 +4858 5215 1 +4858 5216 0 +4859 4499 0 +4859 4845 1 +4859 4846 1 +4859 4847 1 +4859 4848 1 +4859 4853 0 +4859 4854 -1 +4859 4861 1 +4859 4862 1 +4859 4863 1 +4859 4864 1 +4859 5215 0 +4859 5216 1 +4860 4500 1 +4860 4845 1 +4860 4846 1 +4860 4847 1 +4860 4848 0 +4860 4853 -1 +4860 4854 0 +4860 4859 0 +4860 4861 1 +4860 4862 0 +4860 4863 0 +4860 4864 1 +4860 5215 0 +4860 5216 1 +4861 4862 0 +4861 4885 1 +4862 4886 -1 +4863 4864 1 +4863 4887 0 +4864 4888 1 +4865 4505 1 +4865 4861 1 +4865 4862 0 +4865 4869 1 +4865 4870 1 +4865 4871 0 +4865 4872 -1 +4865 5223 0 +4865 5224 0 +4865 5237 1 +4865 5238 1 +4865 5239 0 +4865 5240 -1 +4866 4506 1 +4866 4861 0 +4866 4862 0 +4866 4865 1 +4866 4869 1 +4866 4870 -1 +4866 4871 0 +4866 4872 1 +4866 5223 1 +4866 5224 0 +4866 5237 -1 +4866 5238 0 +4866 5239 0 +4866 5240 1 +4867 4507 0 +4867 4861 1 +4867 4862 1 +4867 4869 1 +4867 4870 1 +4867 4871 1 +4867 4872 0 +4867 5214 0 +4867 5215 0 +4867 5216 1 +4867 5223 1 +4867 5224 0 +4868 4508 -1 +4868 4861 1 +4868 4862 1 +4868 4867 1 +4868 4869 0 +4868 4870 -1 +4868 4871 1 +4868 4872 1 +4868 5214 1 +4868 5215 1 +4868 5216 0 +4868 5223 1 +4868 5224 0 +4869 4870 0 +4869 4893 0 +4870 4894 1 +4871 4872 1 +4871 4895 1 +4872 4896 1 +4873 4509 0 +4873 4510 1 +4873 4513 -1 +4873 4871 1 +4873 4872 0 +4873 4877 0 +4873 4878 1 +4873 4879 1 +4873 4880 1 +4873 4885 1 +4873 4886 1 +4873 4887 -1 +4873 4888 0 +4874 4509 0 +4874 4510 0 +4874 4514 0 +4874 4871 1 +4874 4872 1 +4874 4873 1 +4874 4877 0 +4874 4878 1 +4874 4879 -1 +4874 4880 1 +4874 4885 0 +4874 4886 1 +4874 4887 0 +4874 4888 -1 +4875 4509 1 +4875 4510 1 +4875 4515 0 +4875 4861 0 +4875 4862 1 +4875 4863 1 +4875 4864 1 +4875 4871 0 +4875 4872 -1 +4875 4877 0 +4875 4878 0 +4875 4879 1 +4875 4880 1 +4876 4509 1 +4876 4510 1 +4876 4516 1 +4876 4861 1 +4876 4862 0 +4876 4863 1 +4876 4864 0 +4876 4871 1 +4876 4872 0 +4876 4875 1 +4876 4877 1 +4876 4878 1 +4876 4879 0 +4876 4880 0 +4877 4878 -1 +4877 4901 -1 +4878 4902 1 +4879 4880 1 +4879 4903 1 +4880 4904 0 +4881 4521 1 +4881 4877 -1 +4881 4878 0 +4881 4885 -1 +4881 4886 -1 +4881 4887 1 +4881 4888 0 +4881 4893 0 +4881 4894 0 +4881 4895 1 +4881 4896 -1 +4881 5239 -1 +4881 5240 1 +4882 4522 1 +4882 4877 0 +4882 4878 -1 +4882 4881 0 +4882 4885 1 +4882 4886 1 +4882 4887 0 +4882 4888 1 +4882 4893 1 +4882 4894 0 +4882 4895 1 +4882 4896 1 +4882 5239 1 +4882 5240 1 +4883 4523 1 +4883 4869 0 +4883 4870 1 +4883 4871 0 +4883 4872 1 +4883 4877 1 +4883 4878 1 +4883 4885 1 +4883 4886 1 +4883 4887 0 +4883 4888 -1 +4883 5239 1 +4883 5240 -1 +4884 4524 1 +4884 4869 1 +4884 4870 0 +4884 4871 0 +4884 4872 1 +4884 4877 0 +4884 4878 0 +4884 4883 -1 +4884 4885 1 +4884 4886 1 +4884 4887 1 +4884 4888 1 +4884 5239 0 +4884 5240 1 +4885 4886 0 +4885 4909 1 +4886 4910 1 +4887 4888 1 +4887 4911 1 +4888 4912 0 +4889 4529 0 +4889 4885 1 +4889 4886 0 +4889 4893 0 +4889 4894 1 +4889 4895 1 +4889 4896 1 +4889 5247 0 +4889 5248 1 +4889 5261 0 +4889 5262 1 +4889 5263 0 +4889 5264 0 +4890 4530 1 +4890 4885 -1 +4890 4886 1 +4890 4889 -1 +4890 4893 0 +4890 4894 1 +4890 4895 1 +4890 4896 0 +4890 5247 1 +4890 5248 1 +4890 5261 0 +4890 5262 -1 +4890 5263 1 +4890 5264 0 +4891 4531 1 +4891 4885 1 +4891 4886 0 +4891 4893 -1 +4891 4894 1 +4891 4895 1 +4891 4896 1 +4891 5237 1 +4891 5238 0 +4891 5239 1 +4891 5240 1 +4891 5247 0 +4891 5248 1 +4892 4532 1 +4892 4885 1 +4892 4886 0 +4892 4891 0 +4892 4893 0 +4892 4894 1 +4892 4895 0 +4892 4896 -1 +4892 5237 -1 +4892 5238 0 +4892 5239 1 +4892 5240 1 +4892 5247 1 +4892 5248 0 +4893 4894 1 +4893 4917 1 +4895 4896 0 +4895 4919 0 +4896 4920 1 +4897 4533 1 +4897 4534 1 +4897 4537 0 +4897 4895 1 +4897 4896 -1 +4897 4901 1 +4897 4902 1 +4897 4903 1 +4897 4904 1 +4897 4909 1 +4897 4910 0 +4897 4911 1 +4897 4912 1 +4898 4533 -1 +4898 4534 1 +4898 4538 0 +4898 4895 1 +4898 4896 1 +4898 4897 1 +4898 4901 1 +4898 4902 1 +4898 4903 1 +4898 4904 0 +4898 4909 1 +4898 4910 0 +4898 4911 -1 +4898 4912 0 +4899 4533 -1 +4899 4534 -1 +4899 4539 -1 +4899 4885 1 +4899 4886 1 +4899 4887 1 +4899 4888 -1 +4899 4895 1 +4899 4896 0 +4899 4901 0 +4899 4902 1 +4899 4903 -1 +4899 4904 1 +4900 4533 1 +4900 4534 1 +4900 4540 1 +4900 4885 1 +4900 4886 0 +4900 4887 1 +4900 4888 -1 +4900 4895 1 +4900 4896 1 +4900 4899 -1 +4900 4901 1 +4900 4902 -1 +4900 4903 1 +4900 4904 1 +4901 4902 0 +4901 4925 0 +4902 4926 1 +4903 4904 -1 +4903 4927 0 +4904 4928 1 +4905 4545 1 +4905 4901 1 +4905 4902 0 +4905 4909 1 +4905 4910 0 +4905 4911 0 +4905 4912 1 +4905 4917 -1 +4905 4919 1 +4905 4920 0 +4905 5263 1 +4905 5264 1 +4906 4546 1 +4906 4901 1 +4906 4902 0 +4906 4905 -1 +4906 4909 0 +4906 4910 0 +4906 4911 1 +4906 4912 1 +4906 4917 1 +4906 4919 1 +4906 4920 1 +4906 5263 1 +4906 5264 0 +4907 4547 1 +4907 4893 1 +4907 4894 -1 +4907 4895 1 +4907 4896 1 +4907 4901 1 +4907 4902 1 +4907 4909 0 +4907 4910 1 +4907 4911 0 +4907 4912 1 +4907 5263 0 +4907 5264 1 +4908 4548 1 +4908 4893 0 +4908 4894 1 +4908 4895 1 +4908 4896 0 +4908 4901 1 +4908 4902 -1 +4908 4907 0 +4908 4909 0 +4908 4910 0 +4908 4911 0 +4908 4912 1 +4908 5263 1 +4908 5264 1 +4909 4910 -1 +4909 4933 0 +4910 4934 0 +4911 4912 1 +4911 4935 1 +4912 4936 0 +4913 4553 0 +4913 4909 1 +4913 4910 1 +4913 4917 0 +4913 4919 1 +4913 4920 1 +4913 5271 0 +4913 5272 1 +4913 5285 1 +4913 5286 1 +4913 5287 1 +4913 5288 0 +4914 4554 0 +4914 4909 1 +4914 4910 -1 +4914 4913 -1 +4914 4917 1 +4914 4919 0 +4914 4920 -1 +4914 5271 0 +4914 5272 -1 +4914 5285 1 +4914 5286 -1 +4914 5287 1 +4914 5288 1 +4915 4555 0 +4915 4909 0 +4915 4910 0 +4915 4917 0 +4915 4919 0 +4915 4920 1 +4915 5261 0 +4915 5262 1 +4915 5263 0 +4915 5264 1 +4915 5271 1 +4915 5272 1 +4916 4556 -1 +4916 4909 1 +4916 4910 1 +4916 4915 -1 +4916 4917 0 +4916 4919 0 +4916 4920 1 +4916 5261 0 +4916 5262 0 +4916 5263 1 +4916 5264 1 +4916 5271 -1 +4916 5272 1 +4917 4941 1 +4919 4920 1 +4919 4943 0 +4920 4944 1 +4921 4557 1 +4921 4558 -1 +4921 4561 0 +4921 4919 1 +4921 4920 1 +4921 4925 -1 +4921 4926 0 +4921 4927 0 +4921 4928 1 +4921 4933 0 +4921 4934 1 +4921 4935 0 +4921 4936 0 +4922 4557 -1 +4922 4558 0 +4922 4562 -1 +4922 4919 0 +4922 4920 1 +4922 4921 0 +4922 4925 1 +4922 4926 0 +4922 4927 1 +4922 4928 1 +4922 4933 0 +4922 4934 0 +4922 4935 -1 +4922 4936 -1 +4923 4557 0 +4923 4558 -1 +4923 4563 1 +4923 4909 -1 +4923 4910 0 +4923 4911 0 +4923 4912 1 +4923 4919 1 +4923 4920 1 +4923 4925 0 +4923 4926 1 +4923 4927 0 +4923 4928 0 +4924 4557 0 +4924 4558 0 +4924 4564 -1 +4924 4909 1 +4924 4910 -1 +4924 4911 0 +4924 4912 1 +4924 4919 0 +4924 4920 1 +4924 4923 1 +4924 4925 1 +4924 4926 1 +4924 4927 1 +4924 4928 1 +4925 4926 1 +4925 4949 1 +4926 4950 0 +4927 4928 0 +4927 4951 1 +4928 4952 1 +4929 4569 0 +4929 4925 1 +4929 4926 1 +4929 4933 0 +4929 4934 1 +4929 4935 1 +4929 4936 1 +4929 4941 -1 +4929 4942 1 +4929 4943 1 +4929 4944 1 +4929 5287 1 +4929 5288 0 +4930 4570 1 +4930 4925 -1 +4930 4926 1 +4930 4929 0 +4930 4933 0 +4930 4934 1 +4930 4935 1 +4930 4936 -1 +4930 4941 1 +4930 4942 0 +4930 4943 1 +4930 4944 0 +4930 5287 -1 +4930 5288 -1 +4932 4572 0 +4932 4917 0 +4932 4919 0 +4932 4920 1 +4932 4925 -1 +4932 4926 1 +4932 4933 1 +4932 4934 1 +4932 4935 1 +4932 4936 1 +4932 5287 0 +4932 5288 1 +4933 4934 0 +4933 4957 0 +4934 4958 1 +4935 4936 0 +4935 4959 1 +4936 4960 1 +4937 4577 1 +4937 4933 0 +4937 4934 1 +4937 4941 -1 +4937 4942 1 +4937 4943 0 +4937 4944 0 +4937 5295 1 +4937 5296 1 +4937 5309 0 +4937 5310 -1 +4937 5311 1 +4937 5312 1 +4938 4578 1 +4938 4933 1 +4938 4934 0 +4938 4937 0 +4938 4941 0 +4938 4942 1 +4938 4943 0 +4938 4944 1 +4938 5295 0 +4938 5296 -1 +4938 5309 1 +4938 5310 1 +4938 5311 1 +4938 5312 1 +4940 4580 1 +4940 4933 -1 +4940 4934 0 +4940 4941 0 +4940 4942 1 +4940 4943 0 +4940 4944 1 +4940 5285 1 +4940 5286 0 +4940 5287 0 +4940 5288 1 +4940 5295 1 +4940 5296 1 +4941 4942 1 +4941 4965 1 +4942 4966 0 +4943 4944 -1 +4943 4967 0 +4944 4968 0 +4945 4581 0 +4945 4582 -1 +4945 4585 -1 +4945 4943 0 +4945 4944 0 +4945 4949 0 +4945 4950 0 +4945 4951 1 +4945 4952 0 +4945 4957 1 +4945 4958 1 +4945 4959 1 +4945 4960 -1 +4946 4581 0 +4946 4582 1 +4946 4586 1 +4946 4943 0 +4946 4944 0 +4946 4945 1 +4946 4949 0 +4946 4950 0 +4946 4951 1 +4946 4952 -1 +4946 4957 1 +4946 4958 1 +4946 4959 1 +4946 4960 0 +4947 4581 1 +4947 4582 1 +4947 4587 0 +4947 4933 -1 +4947 4934 1 +4947 4935 1 +4947 4936 1 +4947 4943 1 +4947 4944 1 +4947 4949 -1 +4947 4950 1 +4947 4951 -1 +4947 4952 -1 +4948 4581 1 +4948 4582 0 +4948 4588 0 +4948 4933 1 +4948 4934 1 +4948 4935 1 +4948 4936 1 +4948 4943 1 +4948 4944 1 +4948 4947 1 +4948 4949 0 +4948 4950 1 +4948 4951 0 +4948 4952 1 +4949 4950 0 +4949 4973 1 +4950 4974 1 +4951 4952 1 +4951 4975 1 +4952 4976 0 +4953 4593 0 +4953 4949 1 +4953 4950 1 +4953 4957 0 +4953 4958 1 +4953 4959 0 +4953 4960 1 +4953 4965 1 +4953 4966 1 +4953 4967 1 +4953 4968 1 +4953 5311 0 +4953 5312 0 +4954 4594 0 +4954 4949 0 +4954 4950 1 +4954 4953 0 +4954 4957 0 +4954 4958 1 +4954 4959 -1 +4954 4960 1 +4954 4965 0 +4954 4966 1 +4954 4967 -1 +4954 4968 0 +4954 5311 1 +4954 5312 1 +4955 4595 1 +4955 4941 1 +4955 4942 1 +4955 4943 0 +4955 4944 1 +4955 4949 1 +4955 4950 -1 +4955 4957 1 +4955 4958 1 +4955 4959 0 +4955 4960 0 +4955 5311 0 +4955 5312 1 +4956 4596 1 +4956 4941 1 +4956 4942 1 +4956 4943 -1 +4956 4944 1 +4956 4949 0 +4956 4950 -1 +4956 4955 -1 +4956 4957 0 +4956 4958 1 +4956 4959 0 +4956 4960 1 +4956 5311 0 +4956 5312 0 +4957 4958 1 +4957 4981 1 +4958 4982 0 +4959 4960 1 +4959 4983 1 +4960 4984 0 +4961 4601 1 +4961 4957 1 +4961 4958 1 +4961 4965 1 +4961 4966 1 +4961 4967 1 +4961 4968 1 +4961 5319 1 +4961 5320 -1 +4961 5333 1 +4961 5334 1 +4961 5335 1 +4961 5336 0 +4962 4602 1 +4962 4957 0 +4962 4958 1 +4962 4961 1 +4962 4965 1 +4962 4966 0 +4962 4967 1 +4962 4968 1 +4962 5319 1 +4962 5320 1 +4962 5333 1 +4962 5334 1 +4962 5335 1 +4962 5336 1 +4963 4603 1 +4963 4957 0 +4963 4958 1 +4963 4965 0 +4963 4966 1 +4963 4967 1 +4963 4968 1 +4963 5309 0 +4963 5310 -1 +4963 5311 1 +4963 5312 1 +4963 5319 1 +4963 5320 0 +4964 4604 0 +4964 4957 1 +4964 4958 1 +4964 4963 -1 +4964 4965 1 +4964 4966 0 +4964 4967 -1 +4964 4968 0 +4964 5309 1 +4964 5310 1 +4964 5311 0 +4964 5312 1 +4964 5319 -1 +4964 5320 0 +4965 4966 1 +4965 4989 0 +4966 4990 -1 +4967 4968 0 +4967 4991 1 +4968 4992 1 +4969 4605 0 +4969 4606 1 +4969 4609 1 +4969 4967 0 +4969 4968 1 +4969 4973 0 +4969 4974 1 +4969 4975 0 +4969 4976 1 +4969 4981 0 +4969 4982 1 +4969 4983 1 +4969 4984 1 +4970 4605 1 +4970 4606 0 +4970 4610 0 +4970 4967 1 +4970 4968 1 +4970 4969 1 +4970 4973 1 +4970 4974 1 +4970 4975 0 +4970 4976 1 +4970 4981 0 +4970 4982 1 +4970 4983 0 +4970 4984 1 +4971 4605 1 +4971 4606 1 +4971 4611 0 +4971 4957 1 +4971 4958 -1 +4971 4959 0 +4971 4960 0 +4971 4967 1 +4971 4968 1 +4971 4973 0 +4971 4974 1 +4971 4975 0 +4971 4976 0 +4972 4605 1 +4972 4606 1 +4972 4612 1 +4972 4957 0 +4972 4958 1 +4972 4959 1 +4972 4960 0 +4972 4967 1 +4972 4968 1 +4972 4971 1 +4972 4973 -1 +4972 4974 1 +4972 4975 1 +4972 4976 0 +4973 4974 1 +4973 4997 -1 +4974 4998 1 +4975 4976 0 +4975 4999 1 +4976 5000 1 +4977 4617 1 +4977 4973 -1 +4977 4974 0 +4977 4981 0 +4977 4982 1 +4977 4983 1 +4977 4984 1 +4977 4989 0 +4977 4990 -1 +4977 4991 1 +4977 4992 1 +4977 5335 0 +4977 5336 1 +4978 4618 1 +4978 4973 1 +4978 4974 -1 +4978 4977 1 +4978 4981 -1 +4978 4982 0 +4978 4983 1 +4978 4984 1 +4978 4989 1 +4978 4990 1 +4978 4991 0 +4978 4992 1 +4978 5335 1 +4978 5336 0 +4979 4619 0 +4979 4965 1 +4979 4966 1 +4979 4967 -1 +4979 4968 1 +4979 4973 1 +4979 4974 1 +4979 4981 -1 +4979 4982 0 +4979 4983 0 +4979 4984 1 +4979 5335 1 +4979 5336 1 +4980 4620 1 +4980 4965 1 +4980 4966 1 +4980 4967 -1 +4980 4968 0 +4980 4973 1 +4980 4974 0 +4980 4979 0 +4980 4981 0 +4980 4982 1 +4980 4983 -1 +4980 4984 1 +4980 5335 1 +4980 5336 1 +4981 4982 1 +4981 5005 1 +4982 5006 1 +4983 4984 -1 +4983 5007 1 +4984 5008 0 +4985 4625 -1 +4985 4981 0 +4985 4982 0 +4985 4989 -1 +4985 4990 -1 +4985 4991 1 +4985 4992 1 +4985 5343 0 +4985 5344 0 +4985 5357 1 +4985 5358 1 +4985 5359 0 +4985 5360 1 +4986 4626 1 +4986 4981 1 +4986 4982 1 +4986 4985 -1 +4986 4989 -1 +4986 4990 0 +4986 4991 1 +4986 4992 1 +4986 5343 0 +4986 5344 1 +4986 5357 1 +4986 5358 -1 +4986 5359 1 +4986 5360 1 +4987 4627 0 +4987 4981 0 +4987 4982 1 +4987 4989 1 +4987 4990 -1 +4987 4991 1 +4987 4992 0 +4987 5333 0 +4987 5334 -1 +4987 5335 -1 +4987 5336 1 +4987 5343 1 +4987 5344 1 +4988 4628 -1 +4988 4981 1 +4988 4982 0 +4988 4987 1 +4988 4989 1 +4988 4990 1 +4988 4991 0 +4988 4992 0 +4988 5333 1 +4988 5334 0 +4988 5335 0 +4988 5336 1 +4988 5343 1 +4988 5344 -1 +4989 4990 1 +4989 5013 1 +4990 5014 1 +4991 4992 0 +4991 5015 0 +4992 5016 0 +4993 4629 1 +4993 4630 1 +4993 4633 1 +4993 4991 0 +4993 4992 0 +4993 4997 1 +4993 4998 -1 +4993 4999 1 +4993 5000 0 +4993 5005 1 +4993 5006 0 +4993 5007 0 +4993 5008 1 +4994 4629 0 +4994 4630 1 +4994 4634 0 +4994 4991 1 +4994 4992 1 +4994 4993 1 +4994 4997 0 +4994 4998 1 +4994 4999 1 +4994 5000 1 +4994 5005 0 +4994 5006 0 +4994 5007 1 +4994 5008 1 +4995 4629 1 +4995 4630 1 +4995 4635 1 +4995 4981 1 +4995 4982 1 +4995 4983 -1 +4995 4984 0 +4995 4991 -1 +4995 4992 1 +4995 4997 0 +4995 4998 1 +4995 4999 1 +4995 5000 1 +4996 4629 1 +4996 4630 0 +4996 4636 -1 +4996 4981 1 +4996 4982 1 +4996 4983 0 +4996 4984 1 +4996 4991 0 +4996 4992 1 +4996 4995 0 +4996 4997 0 +4996 4998 1 +4996 4999 0 +4996 5000 1 +4997 4998 0 +4997 5021 1 +4998 5022 1 +4999 5000 1 +4999 5023 1 +5000 5024 -1 +5001 4641 1 +5001 4997 0 +5001 4998 0 +5001 5005 0 +5001 5006 1 +5001 5007 1 +5001 5008 -1 +5001 5013 0 +5001 5014 0 +5001 5015 1 +5001 5016 -1 +5001 5359 0 +5001 5360 0 +5002 4642 0 +5002 4997 0 +5002 4998 0 +5002 5001 0 +5002 5005 0 +5002 5006 0 +5002 5007 0 +5002 5008 0 +5002 5013 1 +5002 5014 1 +5002 5015 0 +5002 5016 0 +5002 5359 1 +5002 5360 0 +5003 4643 -1 +5003 4989 1 +5003 4990 1 +5003 4991 1 +5003 4992 1 +5003 4997 0 +5003 4998 1 +5003 5005 1 +5003 5006 1 +5003 5007 1 +5003 5008 1 +5003 5359 1 +5003 5360 1 +5004 4644 0 +5004 4989 1 +5004 4990 0 +5004 4991 1 +5004 4992 0 +5004 4997 0 +5004 4998 1 +5004 5003 0 +5004 5005 0 +5004 5006 -1 +5004 5007 1 +5004 5008 0 +5004 5359 0 +5004 5360 1 +5005 5006 0 +5005 5029 0 +5006 5030 0 +5007 5008 1 +5007 5031 0 +5008 5032 0 +5009 4649 0 +5009 5005 1 +5009 5006 1 +5009 5013 1 +5009 5014 -1 +5009 5015 0 +5009 5016 1 +5009 5367 0 +5009 5368 0 +5009 5381 0 +5009 5382 1 +5009 5383 0 +5009 5384 1 +5010 4650 1 +5010 5005 1 +5010 5006 1 +5010 5009 1 +5010 5013 0 +5010 5014 0 +5010 5015 0 +5010 5016 0 +5010 5367 1 +5010 5368 1 +5010 5381 0 +5010 5382 0 +5010 5383 0 +5010 5384 0 +5011 4651 1 +5011 5005 0 +5011 5006 1 +5011 5013 1 +5011 5014 -1 +5011 5015 1 +5011 5016 1 +5011 5357 1 +5011 5358 1 +5011 5359 -1 +5011 5360 -1 +5011 5367 0 +5011 5368 0 +5012 4652 -1 +5012 5005 1 +5012 5006 0 +5012 5011 1 +5012 5013 1 +5012 5014 1 +5012 5015 1 +5012 5016 -1 +5012 5357 -1 +5012 5358 0 +5012 5359 0 +5012 5360 1 +5012 5367 0 +5012 5368 1 +5013 5014 1 +5013 5037 1 +5014 5038 0 +5015 5016 1 +5015 5039 1 +5016 5040 0 +5017 4653 -1 +5017 4654 -1 +5017 4657 0 +5017 5015 1 +5017 5016 -1 +5017 5021 0 +5017 5022 1 +5017 5023 1 +5017 5024 1 +5017 5029 1 +5017 5030 1 +5017 5031 1 +5017 5032 1 +5018 4653 0 +5018 4654 1 +5018 4658 0 +5018 5015 1 +5018 5016 1 +5018 5017 1 +5018 5021 0 +5018 5022 0 +5018 5023 0 +5018 5024 -1 +5018 5029 -1 +5018 5030 0 +5018 5031 1 +5018 5032 1 +5019 4653 0 +5019 4654 1 +5019 4659 0 +5019 5005 1 +5019 5006 1 +5019 5007 0 +5019 5008 -1 +5019 5015 -1 +5019 5016 1 +5019 5021 0 +5019 5022 1 +5019 5023 0 +5019 5024 0 +5020 4653 1 +5020 4654 1 +5020 4660 0 +5020 5005 0 +5020 5006 0 +5020 5007 0 +5020 5008 1 +5020 5015 0 +5020 5016 1 +5020 5019 -1 +5020 5021 1 +5020 5022 0 +5020 5023 1 +5020 5024 1 +5021 5022 1 +5023 5024 -1 +5025 4665 0 +5025 5021 1 +5025 5022 1 +5025 5029 -1 +5025 5030 1 +5025 5031 -1 +5025 5032 1 +5025 5037 0 +5025 5038 1 +5025 5039 0 +5025 5040 0 +5025 5383 0 +5025 5384 1 +5026 4666 1 +5026 5021 1 +5026 5022 1 +5026 5025 1 +5026 5029 1 +5026 5030 1 +5026 5031 0 +5026 5032 -1 +5026 5037 -1 +5026 5038 1 +5026 5039 1 +5026 5040 1 +5026 5383 1 +5026 5384 0 +5027 4667 1 +5027 5013 1 +5027 5014 -1 +5027 5015 1 +5027 5016 1 +5027 5021 0 +5027 5022 1 +5027 5029 0 +5027 5030 1 +5027 5031 -1 +5027 5032 0 +5027 5383 1 +5027 5384 0 +5028 4668 1 +5028 5013 1 +5028 5014 1 +5028 5015 0 +5028 5016 1 +5028 5021 1 +5028 5022 0 +5028 5027 1 +5028 5029 1 +5028 5030 0 +5028 5031 1 +5028 5032 0 +5028 5383 0 +5028 5384 1 +5029 5030 1 +5031 5032 1 +5033 4673 1 +5033 5029 0 +5033 5030 1 +5033 5037 0 +5033 5038 1 +5033 5039 0 +5033 5040 1 +5033 5391 0 +5033 5392 -1 +5034 4674 -1 +5034 5029 0 +5034 5030 0 +5034 5033 1 +5034 5037 1 +5034 5038 1 +5034 5039 0 +5034 5040 1 +5034 5391 1 +5034 5392 1 +5035 4675 1 +5035 5029 0 +5035 5030 1 +5035 5037 0 +5035 5038 0 +5035 5039 1 +5035 5040 1 +5035 5381 1 +5035 5382 1 +5035 5383 -1 +5035 5384 0 +5035 5391 1 +5035 5392 0 +5036 4676 -1 +5036 5029 -1 +5036 5030 1 +5036 5035 1 +5036 5037 1 +5036 5038 1 +5036 5039 0 +5036 5040 1 +5036 5381 1 +5036 5382 1 +5036 5383 0 +5036 5384 0 +5036 5391 1 +5036 5392 1 +5037 5038 1 +5039 5040 -1 +5041 4681 0 +5041 5045 1 +5041 5046 -1 +5041 5047 0 +5041 5048 1 +5041 5053 0 +5041 5054 0 +5041 5055 1 +5041 5056 0 +5042 4682 1 +5042 5041 1 +5042 5045 0 +5042 5046 1 +5042 5047 1 +5042 5048 1 +5042 5053 1 +5042 5054 1 +5042 5055 0 +5042 5056 0 +5043 4683 1 +5043 5045 1 +5043 5046 1 +5043 5047 0 +5043 5048 1 +5044 4684 1 +5044 5043 -1 +5044 5045 1 +5044 5046 1 +5044 5047 1 +5044 5048 0 +5045 5046 0 +5045 5069 1 +5046 5070 0 +5047 5048 1 +5047 5071 1 +5048 5072 1 +5049 4689 1 +5049 5045 1 +5049 5046 1 +5049 5053 0 +5049 5054 1 +5049 5055 1 +5049 5056 1 +5049 5061 1 +5049 5062 1 +5049 5063 0 +5049 5064 1 +5050 4690 1 +5050 5045 0 +5050 5046 1 +5050 5049 1 +5050 5053 0 +5050 5054 0 +5050 5055 0 +5050 5056 0 +5050 5061 0 +5050 5062 1 +5050 5063 1 +5050 5064 0 +5051 4691 1 +5051 5045 0 +5051 5046 0 +5051 5053 0 +5051 5054 0 +5051 5055 1 +5051 5056 1 +5052 4692 1 +5052 5045 1 +5052 5046 1 +5052 5051 1 +5052 5053 1 +5052 5054 1 +5052 5055 1 +5052 5056 1 +5053 5054 1 +5053 5077 0 +5054 5078 0 +5055 5056 -1 +5055 5079 -1 +5056 5080 1 +5057 4697 1 +5057 5053 0 +5057 5054 -1 +5057 5061 1 +5057 5062 0 +5057 5063 -1 +5057 5064 0 +5058 4698 1 +5058 5053 1 +5058 5054 1 +5058 5057 1 +5058 5061 1 +5058 5062 1 +5058 5063 1 +5058 5064 0 +5059 4699 0 +5059 5053 1 +5059 5054 1 +5059 5061 1 +5059 5062 0 +5059 5063 0 +5059 5064 1 +5060 4700 1 +5060 5053 0 +5060 5054 1 +5060 5059 1 +5060 5061 -1 +5060 5062 1 +5060 5063 -1 +5060 5064 1 +5061 5062 1 +5061 5085 0 +5062 5086 1 +5063 5064 1 +5063 5087 -1 +5064 5088 1 +5065 4701 0 +5065 4702 1 +5065 4705 1 +5065 5063 1 +5065 5064 0 +5065 5069 1 +5065 5070 1 +5065 5071 1 +5065 5072 -1 +5065 5077 1 +5065 5078 -1 +5065 5079 1 +5065 5080 1 +5066 4701 1 +5066 4702 1 +5066 4706 1 +5066 5063 1 +5066 5064 -1 +5066 5065 1 +5066 5069 0 +5066 5070 0 +5066 5071 0 +5066 5072 1 +5066 5077 1 +5066 5078 1 +5066 5079 1 +5066 5080 0 +5067 4701 -1 +5067 4702 0 +5067 4707 -1 +5067 5053 1 +5067 5054 0 +5067 5055 1 +5067 5056 1 +5067 5063 1 +5067 5064 0 +5067 5069 0 +5067 5070 -1 +5067 5071 1 +5067 5072 0 +5068 4701 0 +5068 4702 1 +5068 4708 1 +5068 5053 1 +5068 5054 1 +5068 5055 1 +5068 5056 1 +5068 5063 0 +5068 5064 1 +5068 5067 0 +5068 5069 0 +5068 5070 0 +5068 5071 0 +5068 5072 1 +5069 5070 0 +5069 5093 0 +5070 5094 0 +5071 5072 0 +5071 5095 -1 +5072 5096 1 +5073 4713 1 +5073 5069 0 +5073 5070 1 +5073 5077 1 +5073 5078 1 +5073 5079 0 +5073 5080 1 +5073 5085 1 +5073 5086 1 +5073 5087 1 +5073 5088 -1 +5074 4714 1 +5074 5069 1 +5074 5070 1 +5074 5073 0 +5074 5077 1 +5074 5078 0 +5074 5079 1 +5074 5080 0 +5074 5085 1 +5074 5086 1 +5074 5087 0 +5074 5088 1 +5075 4715 1 +5075 5061 0 +5075 5062 1 +5075 5063 0 +5075 5064 -1 +5075 5069 1 +5075 5070 1 +5075 5077 -1 +5075 5078 -1 +5075 5079 -1 +5075 5080 1 +5076 4716 0 +5076 5061 0 +5076 5062 0 +5076 5063 1 +5076 5064 1 +5076 5069 0 +5076 5070 0 +5076 5075 1 +5076 5077 -1 +5076 5078 1 +5076 5079 1 +5076 5080 0 +5077 5078 1 +5077 5101 1 +5078 5102 1 +5079 5080 1 +5079 5103 1 +5080 5104 0 +5081 4721 0 +5081 5077 1 +5081 5078 0 +5081 5085 1 +5081 5086 1 +5081 5087 0 +5081 5088 0 +5082 4722 -1 +5082 5077 0 +5082 5078 1 +5082 5081 0 +5082 5085 0 +5082 5086 1 +5082 5087 1 +5082 5088 0 +5083 4723 1 +5083 5077 1 +5083 5078 0 +5083 5085 1 +5083 5086 1 +5083 5087 1 +5083 5088 0 +5084 4724 0 +5084 5077 0 +5084 5078 1 +5084 5083 1 +5084 5085 1 +5084 5086 1 +5084 5087 1 +5084 5088 -1 +5085 5086 1 +5085 5109 0 +5086 5110 0 +5087 5088 1 +5087 5111 1 +5088 5112 1 +5089 4725 -1 +5089 4726 1 +5089 4729 1 +5089 5087 1 +5089 5088 1 +5089 5093 -1 +5089 5094 0 +5089 5095 1 +5089 5096 1 +5089 5101 0 +5089 5102 -1 +5089 5103 -1 +5089 5104 0 +5090 4725 1 +5090 4726 1 +5090 4730 1 +5090 5087 0 +5090 5088 1 +5090 5089 1 +5090 5093 1 +5090 5094 1 +5090 5095 1 +5090 5096 1 +5090 5101 1 +5090 5102 1 +5090 5103 0 +5090 5104 -1 +5091 4725 0 +5091 4726 1 +5091 4731 -1 +5091 5077 1 +5091 5078 0 +5091 5079 0 +5091 5080 1 +5091 5087 0 +5091 5088 0 +5091 5093 -1 +5091 5094 1 +5091 5095 1 +5091 5096 0 +5092 4725 0 +5092 4726 0 +5092 4732 0 +5092 5077 1 +5092 5078 0 +5092 5079 1 +5092 5080 1 +5092 5087 1 +5092 5088 1 +5092 5091 0 +5092 5093 0 +5092 5094 1 +5092 5095 1 +5092 5096 1 +5093 5094 1 +5093 5117 1 +5094 5118 1 +5095 5096 1 +5095 5119 1 +5096 5120 1 +5097 4737 1 +5097 5093 1 +5097 5094 0 +5097 5101 1 +5097 5102 -1 +5097 5103 1 +5097 5104 -1 +5097 5109 1 +5097 5110 1 +5097 5111 1 +5097 5112 -1 +5098 4738 1 +5098 5093 0 +5098 5094 0 +5098 5097 0 +5098 5101 0 +5098 5102 -1 +5098 5103 1 +5098 5104 1 +5098 5109 0 +5098 5110 0 +5098 5111 0 +5098 5112 0 +5099 4739 0 +5099 5085 1 +5099 5086 1 +5099 5087 1 +5099 5088 1 +5099 5093 0 +5099 5094 1 +5099 5101 0 +5099 5102 1 +5099 5103 0 +5099 5104 0 +5100 4740 0 +5100 5085 1 +5100 5086 1 +5100 5087 1 +5100 5088 1 +5100 5093 1 +5100 5094 1 +5100 5099 1 +5100 5101 1 +5100 5102 -1 +5100 5103 1 +5100 5104 -1 +5101 5102 0 +5101 5125 1 +5102 5126 1 +5103 5104 1 +5103 5127 1 +5104 5128 0 +5105 4745 -1 +5105 5101 0 +5105 5102 -1 +5105 5109 1 +5105 5110 1 +5105 5111 0 +5105 5112 1 +5106 4746 1 +5106 5101 1 +5106 5102 1 +5106 5105 1 +5106 5109 0 +5106 5110 0 +5106 5111 1 +5106 5112 -1 +5107 4747 0 +5107 5101 1 +5107 5102 1 +5107 5109 1 +5107 5110 0 +5107 5111 1 +5107 5112 0 +5108 4748 0 +5108 5101 0 +5108 5102 1 +5108 5107 1 +5108 5109 0 +5108 5110 0 +5108 5111 1 +5108 5112 -1 +5109 5110 1 +5109 5133 -1 +5110 5134 1 +5111 5112 1 +5111 5135 0 +5112 5136 1 +5113 4749 0 +5113 4750 1 +5113 4753 -1 +5113 5111 0 +5113 5112 0 +5113 5117 -1 +5113 5118 1 +5113 5119 -1 +5113 5120 1 +5113 5125 1 +5113 5126 0 +5113 5127 1 +5113 5128 1 +5114 4749 0 +5114 4750 0 +5114 4754 -1 +5114 5111 1 +5114 5112 0 +5114 5113 1 +5114 5117 1 +5114 5118 1 +5114 5119 1 +5114 5120 0 +5114 5125 1 +5114 5126 1 +5114 5127 1 +5114 5128 1 +5115 4749 -1 +5115 4750 -1 +5115 5101 -1 +5115 5102 0 +5115 5103 1 +5115 5104 0 +5115 5111 1 +5115 5112 1 +5115 5117 1 +5115 5118 0 +5115 5119 1 +5115 5120 0 +5116 4749 1 +5116 4750 1 +5116 4756 0 +5116 5101 0 +5116 5102 1 +5116 5103 1 +5116 5104 1 +5116 5111 1 +5116 5112 -1 +5116 5115 0 +5116 5117 1 +5116 5118 1 +5116 5119 0 +5116 5120 1 +5117 5118 0 +5117 5141 0 +5118 5142 1 +5119 5120 -1 +5119 5143 1 +5120 5144 1 +5121 4761 0 +5121 5117 1 +5121 5118 1 +5121 5125 0 +5121 5126 0 +5121 5127 1 +5121 5128 1 +5121 5133 0 +5121 5134 1 +5121 5135 0 +5121 5136 0 +5122 4762 1 +5122 5117 -1 +5122 5118 0 +5122 5121 -1 +5122 5125 0 +5122 5126 0 +5122 5127 -1 +5122 5128 1 +5122 5133 -1 +5122 5134 1 +5122 5135 0 +5122 5136 1 +5123 4763 1 +5123 5109 1 +5123 5110 -1 +5123 5111 1 +5123 5112 1 +5123 5117 0 +5123 5118 1 +5123 5125 1 +5123 5126 1 +5123 5127 1 +5123 5128 0 +5124 4764 1 +5124 5109 1 +5124 5110 0 +5124 5111 -1 +5124 5112 1 +5124 5117 1 +5124 5118 0 +5124 5123 -1 +5124 5125 1 +5124 5126 0 +5124 5127 1 +5124 5128 1 +5125 5126 1 +5125 5149 1 +5126 5150 -1 +5127 5128 1 +5127 5151 0 +5128 5152 1 +5129 4769 0 +5129 5125 1 +5129 5126 0 +5129 5133 1 +5129 5134 -1 +5129 5135 1 +5129 5136 1 +5130 4770 1 +5130 5125 0 +5130 5126 0 +5130 5129 1 +5130 5133 1 +5130 5134 1 +5130 5135 0 +5130 5136 1 +5131 4771 1 +5131 5125 0 +5131 5126 1 +5131 5133 1 +5131 5134 1 +5131 5135 0 +5131 5136 1 +5132 4772 0 +5132 5125 1 +5132 5126 1 +5132 5131 1 +5132 5133 -1 +5132 5134 1 +5132 5135 0 +5132 5136 1 +5133 5134 1 +5133 5157 0 +5134 5158 0 +5135 5136 1 +5135 5159 1 +5136 5160 0 +5137 4773 1 +5137 4774 1 +5137 4777 0 +5137 5135 1 +5137 5136 -1 +5137 5141 1 +5137 5142 1 +5137 5143 1 +5137 5144 1 +5137 5149 1 +5137 5150 0 +5137 5151 0 +5137 5152 1 +5138 4773 0 +5138 4774 0 +5138 4778 0 +5138 5135 1 +5138 5136 1 +5138 5137 -1 +5138 5141 1 +5138 5142 1 +5138 5143 1 +5138 5144 -1 +5138 5149 1 +5138 5150 1 +5138 5151 1 +5138 5152 1 +5139 4773 -1 +5139 4774 1 +5139 4779 0 +5139 5125 0 +5139 5126 1 +5139 5127 0 +5139 5128 1 +5139 5135 0 +5139 5136 1 +5139 5141 0 +5139 5142 1 +5139 5143 1 +5139 5144 0 +5140 4773 1 +5140 4774 0 +5140 4780 0 +5140 5125 -1 +5140 5126 0 +5140 5127 0 +5140 5128 1 +5140 5135 1 +5140 5136 1 +5140 5139 -1 +5140 5141 1 +5140 5142 1 +5140 5143 1 +5140 5144 1 +5141 5142 1 +5141 5165 0 +5142 5166 1 +5143 5144 1 +5143 5167 0 +5144 5168 1 +5145 4785 1 +5145 5141 0 +5145 5142 1 +5145 5149 0 +5145 5150 1 +5145 5151 0 +5145 5152 0 +5145 5157 0 +5145 5158 1 +5145 5159 0 +5145 5160 0 +5146 4786 1 +5146 5141 1 +5146 5142 -1 +5146 5145 1 +5146 5149 1 +5146 5150 1 +5146 5151 1 +5146 5152 -1 +5146 5157 1 +5146 5158 1 +5146 5159 -1 +5146 5160 1 +5147 4787 0 +5147 5133 0 +5147 5134 1 +5147 5135 1 +5147 5136 0 +5147 5141 0 +5147 5142 0 +5147 5149 1 +5147 5150 0 +5147 5151 -1 +5147 5152 -1 +5148 4788 1 +5148 5133 1 +5148 5134 1 +5148 5135 1 +5148 5136 0 +5148 5141 1 +5148 5142 0 +5148 5147 1 +5148 5149 0 +5148 5150 0 +5148 5151 1 +5148 5152 1 +5149 5150 1 +5149 5173 0 +5150 5174 1 +5151 5152 -1 +5151 5175 0 +5152 5176 -1 +5153 4793 1 +5153 5149 1 +5153 5150 1 +5153 5157 0 +5153 5158 1 +5153 5159 0 +5153 5160 0 +5154 4794 0 +5154 5149 1 +5154 5150 1 +5154 5153 1 +5154 5157 1 +5154 5158 1 +5154 5159 1 +5154 5160 1 +5155 4795 1 +5155 5149 0 +5155 5150 0 +5155 5157 -1 +5155 5158 1 +5155 5159 0 +5155 5160 1 +5156 4796 0 +5156 5149 0 +5156 5150 0 +5156 5155 1 +5156 5157 0 +5156 5158 1 +5156 5159 1 +5156 5160 1 +5157 5158 1 +5157 5181 0 +5158 5182 1 +5159 5160 1 +5159 5183 0 +5160 5184 0 +5161 4797 0 +5161 4798 1 +5161 4801 1 +5161 5159 0 +5161 5160 0 +5161 5165 0 +5161 5166 0 +5161 5167 0 +5161 5168 1 +5161 5173 1 +5161 5174 1 +5161 5175 1 +5161 5176 1 +5162 4797 1 +5162 4798 -1 +5162 4802 1 +5162 5159 0 +5162 5160 1 +5162 5161 1 +5162 5165 1 +5162 5166 0 +5162 5167 0 +5162 5168 0 +5162 5173 0 +5162 5174 0 +5162 5175 1 +5162 5176 1 +5163 4797 1 +5163 4798 0 +5163 4803 1 +5163 5149 1 +5163 5150 1 +5163 5151 0 +5163 5152 1 +5163 5159 0 +5163 5160 0 +5163 5165 0 +5163 5166 -1 +5163 5167 1 +5163 5168 1 +5164 4797 1 +5164 4798 1 +5164 4804 1 +5164 5149 1 +5164 5150 0 +5164 5151 0 +5164 5152 0 +5164 5159 1 +5164 5160 0 +5164 5163 1 +5164 5165 0 +5164 5166 1 +5164 5167 0 +5164 5168 -1 +5165 5166 1 +5165 5189 0 +5166 5190 1 +5167 5168 0 +5167 5191 1 +5168 5192 1 +5169 4809 0 +5169 5165 1 +5169 5166 1 +5169 5173 1 +5169 5174 0 +5169 5175 1 +5169 5176 0 +5169 5181 1 +5169 5182 1 +5169 5183 0 +5169 5184 1 +5170 4810 0 +5170 5165 0 +5170 5166 1 +5170 5169 1 +5170 5173 0 +5170 5174 1 +5170 5175 1 +5170 5176 1 +5170 5181 0 +5170 5182 0 +5170 5183 0 +5170 5184 0 +5171 4811 1 +5171 5157 1 +5171 5158 0 +5171 5159 1 +5171 5160 -1 +5171 5165 1 +5171 5166 0 +5171 5173 1 +5171 5174 0 +5171 5175 -1 +5171 5176 -1 +5172 4812 1 +5172 5157 -1 +5172 5158 1 +5172 5159 0 +5172 5160 -1 +5172 5165 0 +5172 5166 0 +5172 5171 1 +5172 5173 -1 +5172 5174 1 +5172 5175 0 +5172 5176 1 +5173 5174 0 +5173 5197 0 +5174 5198 1 +5175 5176 1 +5175 5199 0 +5176 5200 -1 +5177 4817 1 +5177 5173 1 +5177 5174 1 +5177 5181 1 +5177 5182 -1 +5177 5183 1 +5177 5184 -1 +5178 4818 0 +5178 5173 1 +5178 5174 1 +5178 5177 1 +5178 5181 1 +5178 5182 1 +5178 5183 1 +5178 5184 1 +5179 4819 0 +5179 5173 1 +5179 5174 1 +5179 5181 1 +5179 5182 -1 +5179 5183 0 +5179 5184 0 +5180 4820 1 +5180 5173 0 +5180 5174 1 +5180 5179 0 +5180 5181 0 +5180 5182 1 +5180 5183 1 +5180 5184 1 +5181 5182 1 +5181 5205 1 +5182 5206 1 +5183 5184 1 +5183 5207 1 +5184 5208 1 +5185 4821 1 +5185 4822 1 +5185 4825 1 +5185 5183 1 +5185 5184 -1 +5185 5189 -1 +5185 5190 0 +5185 5191 1 +5185 5192 0 +5185 5197 1 +5185 5198 1 +5185 5199 1 +5185 5200 0 +5186 4821 -1 +5186 4822 1 +5186 4826 0 +5186 5183 1 +5186 5184 0 +5186 5185 0 +5186 5189 0 +5186 5190 0 +5186 5191 0 +5186 5192 1 +5186 5197 1 +5186 5198 1 +5186 5199 -1 +5186 5200 1 +5187 4821 0 +5187 4822 0 +5187 4827 1 +5187 5173 1 +5187 5174 1 +5187 5175 0 +5187 5176 1 +5187 5183 0 +5187 5184 1 +5187 5189 1 +5187 5190 1 +5187 5191 -1 +5187 5192 0 +5188 4821 0 +5188 4822 1 +5188 4828 1 +5188 5173 1 +5188 5174 1 +5188 5175 1 +5188 5176 0 +5188 5183 1 +5188 5184 -1 +5188 5187 0 +5188 5189 1 +5188 5190 0 +5188 5191 1 +5188 5192 1 +5189 5190 1 +5190 5214 1 +5191 5192 1 +5191 5215 0 +5192 5216 1 +5193 4833 -1 +5193 5189 -1 +5193 5190 0 +5193 5197 1 +5193 5198 0 +5193 5199 1 +5193 5200 1 +5193 5205 1 +5193 5206 -1 +5193 5207 0 +5193 5208 0 +5194 4834 0 +5194 5189 -1 +5194 5190 -1 +5194 5193 -1 +5194 5197 1 +5194 5198 1 +5194 5199 1 +5194 5200 1 +5194 5205 1 +5194 5206 0 +5194 5207 1 +5194 5208 1 +5195 4835 1 +5195 5181 -1 +5195 5182 1 +5195 5183 0 +5195 5184 0 +5195 5189 1 +5195 5190 1 +5195 5197 0 +5195 5198 1 +5195 5199 1 +5195 5200 0 +5196 4836 0 +5196 5181 1 +5196 5182 1 +5196 5183 0 +5196 5184 1 +5196 5189 1 +5196 5190 1 +5196 5195 -1 +5196 5197 0 +5196 5198 0 +5196 5199 1 +5196 5200 0 +5197 5198 -1 +5197 5221 1 +5198 5222 1 +5199 5200 1 +5199 5223 1 +5200 5224 1 +5201 4841 1 +5201 5197 0 +5201 5198 0 +5201 5205 1 +5201 5206 1 +5201 5207 1 +5201 5208 1 +5202 4842 1 +5202 5197 0 +5202 5198 1 +5202 5201 1 +5202 5205 1 +5202 5206 1 +5202 5207 0 +5202 5208 0 +5203 4843 0 +5203 5197 1 +5203 5198 1 +5203 5205 0 +5203 5206 0 +5203 5207 0 +5203 5208 1 +5204 5197 -1 +5204 5198 1 +5204 5203 0 +5204 5205 1 +5204 5206 1 +5204 5207 -1 +5204 5208 0 +5205 5206 1 +5205 5229 1 +5206 5230 0 +5207 5208 1 +5207 5231 1 +5209 4845 0 +5209 4846 1 +5209 4849 1 +5209 5207 1 +5209 5208 1 +5209 5214 0 +5209 5215 1 +5209 5216 1 +5209 5221 1 +5209 5222 1 +5209 5223 0 +5209 5224 0 +5210 4845 1 +5210 4846 -1 +5210 4850 0 +5210 5207 1 +5210 5208 0 +5210 5209 1 +5210 5214 1 +5210 5215 0 +5210 5216 0 +5210 5221 0 +5210 5222 0 +5210 5223 -1 +5210 5224 1 +5211 4845 1 +5211 4846 0 +5211 4851 1 +5211 5197 1 +5211 5198 -1 +5211 5199 1 +5211 5200 -1 +5211 5207 1 +5211 5208 1 +5211 5214 1 +5211 5215 1 +5211 5216 1 +5212 4845 1 +5212 4846 0 +5212 4852 1 +5212 5197 1 +5212 5198 1 +5212 5199 1 +5212 5200 1 +5212 5207 1 +5212 5208 1 +5212 5211 0 +5212 5214 1 +5212 5215 1 +5212 5216 1 +5214 5238 0 +5215 5216 0 +5215 5239 0 +5216 5240 0 +5217 4857 0 +5217 5214 1 +5217 5221 1 +5217 5222 0 +5217 5223 1 +5217 5224 1 +5217 5229 1 +5217 5230 1 +5217 5231 1 +5218 4858 1 +5218 5214 0 +5218 5217 0 +5218 5221 0 +5218 5222 0 +5218 5223 -1 +5218 5224 1 +5218 5229 1 +5218 5230 1 +5218 5231 0 +5219 4859 1 +5219 5205 -1 +5219 5206 1 +5219 5207 1 +5219 5208 1 +5219 5214 0 +5219 5221 1 +5219 5222 1 +5219 5223 1 +5219 5224 -1 +5220 4860 0 +5220 5205 1 +5220 5206 1 +5220 5207 1 +5220 5208 1 +5220 5214 1 +5220 5219 1 +5220 5221 -1 +5220 5222 1 +5220 5223 1 +5220 5224 0 +5221 5222 1 +5221 5245 0 +5222 5246 0 +5223 5224 0 +5223 5247 1 +5224 5248 -1 +5225 4865 0 +5225 5221 0 +5225 5222 1 +5225 5229 0 +5225 5230 1 +5225 5231 1 +5226 4866 1 +5226 5221 1 +5226 5222 0 +5226 5225 1 +5226 5229 1 +5226 5230 -1 +5226 5231 1 +5227 4867 1 +5227 5221 -1 +5227 5222 1 +5227 5229 1 +5227 5230 1 +5227 5231 0 +5228 4868 -1 +5228 5221 1 +5228 5222 1 +5228 5227 0 +5228 5229 1 +5228 5230 0 +5228 5231 0 +5229 5230 0 +5229 5253 0 +5230 5254 1 +5231 5255 1 +5233 4869 1 +5233 4870 0 +5233 4873 -1 +5233 5231 1 +5233 5237 1 +5233 5238 0 +5233 5239 1 +5233 5240 1 +5233 5245 1 +5233 5246 0 +5233 5247 1 +5233 5248 -1 +5234 4869 0 +5234 4870 1 +5234 4874 1 +5234 5231 0 +5234 5233 1 +5234 5237 1 +5234 5238 0 +5234 5239 -1 +5234 5240 0 +5234 5245 0 +5234 5246 -1 +5234 5247 1 +5234 5248 0 +5235 4869 0 +5235 4870 1 +5235 4875 0 +5235 5221 1 +5235 5222 -1 +5235 5223 1 +5235 5224 1 +5235 5231 0 +5235 5237 -1 +5235 5238 1 +5235 5239 -1 +5235 5240 0 +5236 4869 1 +5236 4870 1 +5236 4876 1 +5236 5221 -1 +5236 5222 1 +5236 5223 0 +5236 5224 1 +5236 5231 0 +5236 5235 0 +5236 5237 1 +5236 5238 0 +5236 5239 1 +5236 5240 1 +5237 5238 0 +5237 5261 1 +5238 5262 0 +5239 5240 1 +5239 5263 1 +5240 5264 1 +5241 4881 0 +5241 5237 1 +5241 5238 1 +5241 5245 0 +5241 5246 1 +5241 5247 0 +5241 5248 0 +5241 5253 0 +5241 5254 0 +5241 5255 1 +5241 5256 1 +5242 4882 1 +5242 5237 0 +5242 5238 0 +5242 5241 1 +5242 5245 -1 +5242 5246 1 +5242 5247 1 +5242 5248 -1 +5242 5253 0 +5242 5254 1 +5242 5255 0 +5242 5256 1 +5243 4883 1 +5243 5229 1 +5243 5230 1 +5243 5231 1 +5243 5237 1 +5243 5238 0 +5243 5245 1 +5243 5246 1 +5243 5247 1 +5243 5248 1 +5244 4884 1 +5244 5229 1 +5244 5230 1 +5244 5231 0 +5244 5237 1 +5244 5238 1 +5244 5243 0 +5244 5245 -1 +5244 5246 1 +5244 5247 1 +5244 5248 1 +5245 5246 0 +5246 5270 1 +5247 5248 1 +5247 5271 0 +5248 5272 0 +5249 4889 -1 +5249 5245 1 +5249 5246 1 +5249 5253 1 +5249 5254 -1 +5249 5255 1 +5249 5256 1 +5250 4890 0 +5250 5245 0 +5250 5246 -1 +5250 5249 1 +5250 5253 0 +5250 5254 1 +5250 5255 1 +5250 5256 0 +5251 4891 1 +5251 5245 0 +5251 5246 0 +5251 5253 0 +5251 5254 0 +5251 5255 1 +5251 5256 1 +5252 4892 0 +5252 5245 1 +5252 5246 0 +5252 5251 0 +5252 5253 -1 +5252 5254 1 +5252 5255 0 +5252 5256 -1 +5253 5254 1 +5253 5277 1 +5254 5278 0 +5255 5256 0 +5255 5279 1 +5256 5280 0 +5257 4893 1 +5257 4894 1 +5257 4897 0 +5257 5255 1 +5257 5256 1 +5257 5261 1 +5257 5262 1 +5257 5263 1 +5257 5264 1 +5257 5270 0 +5257 5271 1 +5257 5272 -1 +5258 4893 1 +5258 4894 0 +5258 4898 0 +5258 5255 1 +5258 5256 0 +5258 5257 0 +5258 5261 1 +5258 5262 1 +5258 5263 0 +5258 5264 1 +5258 5270 1 +5258 5271 0 +5258 5272 1 +5259 4893 0 +5259 4894 0 +5259 4899 -1 +5259 5245 1 +5259 5246 1 +5259 5247 1 +5259 5248 1 +5259 5255 1 +5259 5256 1 +5259 5261 0 +5259 5262 -1 +5259 5263 0 +5259 5264 0 +5260 4893 1 +5260 4894 -1 +5260 4900 1 +5260 5245 1 +5260 5246 1 +5260 5247 1 +5260 5248 0 +5260 5255 1 +5260 5256 1 +5260 5259 1 +5260 5261 1 +5260 5262 1 +5260 5263 1 +5260 5264 0 +5261 5262 1 +5261 5285 1 +5262 5286 1 +5263 5264 1 +5263 5287 1 +5264 5288 1 +5265 4905 1 +5265 5261 0 +5265 5262 1 +5265 5270 1 +5265 5271 1 +5265 5272 1 +5265 5277 1 +5265 5278 0 +5265 5279 0 +5265 5280 -1 +5266 4906 1 +5266 5261 1 +5266 5262 0 +5266 5265 1 +5266 5270 1 +5266 5271 -1 +5266 5272 1 +5266 5277 -1 +5266 5278 -1 +5266 5279 -1 +5266 5280 1 +5267 4907 1 +5267 5253 0 +5267 5254 0 +5267 5255 1 +5267 5256 1 +5267 5261 1 +5267 5262 1 +5267 5270 1 +5267 5271 1 +5267 5272 0 +5268 4908 1 +5268 5253 1 +5268 5254 1 +5268 5255 1 +5268 5256 0 +5268 5261 1 +5268 5262 0 +5268 5267 1 +5268 5270 1 +5268 5271 -1 +5268 5272 0 +5270 5294 1 +5271 5272 0 +5271 5295 0 +5272 5296 0 +5273 4913 1 +5273 5270 1 +5273 5277 1 +5273 5278 1 +5273 5279 -1 +5273 5280 1 +5274 4914 1 +5274 5270 0 +5274 5273 1 +5274 5277 0 +5274 5278 1 +5274 5279 1 +5274 5280 1 +5275 4915 0 +5275 5270 0 +5275 5277 0 +5275 5278 0 +5275 5279 1 +5275 5280 1 +5276 4916 -1 +5276 5270 1 +5276 5275 1 +5276 5277 1 +5276 5278 0 +5276 5279 0 +5276 5280 1 +5277 5278 1 +5277 5301 1 +5278 5302 0 +5279 5280 1 +5279 5303 1 +5280 5304 1 +5282 4917 0 +5282 4922 1 +5282 5279 1 +5282 5280 1 +5282 5285 1 +5282 5286 0 +5282 5287 -1 +5282 5288 0 +5282 5293 1 +5282 5294 1 +5282 5295 1 +5282 5296 1 +5283 4917 1 +5283 4923 1 +5283 5270 1 +5283 5271 0 +5283 5272 1 +5283 5279 1 +5283 5280 0 +5283 5285 1 +5283 5286 -1 +5283 5287 1 +5283 5288 1 +5284 4917 0 +5284 4924 0 +5284 5270 0 +5284 5271 0 +5284 5272 1 +5284 5279 1 +5284 5280 1 +5284 5283 1 +5284 5285 1 +5284 5286 1 +5284 5287 1 +5284 5288 1 +5285 5286 0 +5285 5309 1 +5286 5310 0 +5287 5288 0 +5287 5311 0 +5288 5312 1 +5289 4929 1 +5289 5285 0 +5289 5286 1 +5289 5293 1 +5289 5294 1 +5289 5295 -1 +5289 5296 -1 +5289 5301 0 +5289 5302 0 +5289 5303 -1 +5289 5304 1 +5290 4930 -1 +5290 5285 1 +5290 5286 0 +5290 5289 0 +5290 5293 1 +5290 5294 0 +5290 5295 0 +5290 5296 -1 +5290 5301 0 +5290 5302 -1 +5290 5303 1 +5290 5304 -1 +5291 5277 0 +5291 5278 0 +5291 5279 1 +5291 5280 1 +5291 5285 1 +5291 5286 0 +5291 5293 1 +5291 5294 1 +5291 5295 1 +5291 5296 1 +5292 4932 0 +5292 5277 0 +5292 5278 1 +5292 5279 1 +5292 5280 1 +5292 5285 0 +5292 5286 -1 +5292 5291 0 +5292 5293 0 +5292 5294 1 +5292 5295 1 +5292 5296 1 +5293 5294 0 +5293 5317 0 +5294 5318 0 +5295 5296 0 +5295 5319 1 +5296 5320 0 +5298 4938 0 +5298 5293 0 +5298 5294 0 +5298 5301 1 +5298 5302 1 +5298 5303 0 +5298 5304 0 +5299 5293 0 +5299 5294 1 +5299 5301 1 +5299 5302 1 +5299 5303 0 +5299 5304 1 +5300 4940 0 +5300 5293 1 +5300 5294 1 +5300 5299 1 +5300 5301 1 +5300 5302 1 +5300 5303 1 +5300 5304 1 +5301 5302 0 +5301 5325 1 +5302 5326 0 +5303 5304 1 +5303 5327 0 +5304 5328 -1 +5305 4941 0 +5305 4942 -1 +5305 4945 0 +5305 5303 0 +5305 5304 1 +5305 5309 1 +5305 5310 0 +5305 5311 1 +5305 5312 0 +5305 5317 0 +5305 5318 -1 +5305 5319 0 +5305 5320 1 +5306 4941 1 +5306 4942 0 +5306 4946 0 +5306 5303 0 +5306 5304 0 +5306 5305 -1 +5306 5309 0 +5306 5310 1 +5306 5311 1 +5306 5312 1 +5306 5317 0 +5306 5318 1 +5306 5319 1 +5306 5320 1 +5307 4941 1 +5307 4942 0 +5307 4947 0 +5307 5293 0 +5307 5294 1 +5307 5295 1 +5307 5296 1 +5307 5303 1 +5307 5304 0 +5307 5309 1 +5307 5310 0 +5307 5311 1 +5307 5312 1 +5308 4941 1 +5308 4942 1 +5308 4948 1 +5308 5293 0 +5308 5294 1 +5308 5295 0 +5308 5296 0 +5308 5303 1 +5308 5304 1 +5308 5307 0 +5308 5309 1 +5308 5310 0 +5308 5311 -1 +5308 5312 -1 +5309 5310 0 +5309 5333 -1 +5310 5334 -1 +5311 5312 0 +5311 5335 1 +5312 5336 1 +5313 4953 1 +5313 5309 0 +5313 5310 1 +5313 5317 1 +5313 5318 1 +5313 5319 1 +5313 5320 1 +5313 5325 1 +5313 5326 1 +5313 5327 1 +5313 5328 0 +5314 4954 -1 +5314 5309 0 +5314 5310 -1 +5314 5313 1 +5314 5317 1 +5314 5318 1 +5314 5319 1 +5314 5320 0 +5314 5325 1 +5314 5326 1 +5314 5327 -1 +5314 5328 0 +5315 4955 1 +5315 5301 0 +5315 5302 1 +5315 5303 -1 +5315 5304 0 +5315 5309 1 +5315 5310 0 +5315 5317 1 +5315 5318 0 +5315 5319 1 +5315 5320 0 +5316 4956 -1 +5316 5301 0 +5316 5302 0 +5316 5303 1 +5316 5304 0 +5316 5309 0 +5316 5310 0 +5316 5315 1 +5316 5317 1 +5316 5318 0 +5316 5319 1 +5316 5320 1 +5317 5318 0 +5317 5341 -1 +5318 5342 1 +5319 5320 1 +5319 5343 -1 +5320 5344 1 +5321 4961 -1 +5321 5317 1 +5321 5318 -1 +5321 5325 0 +5321 5326 1 +5321 5327 0 +5321 5328 0 +5322 4962 0 +5322 5317 1 +5322 5318 0 +5322 5321 1 +5322 5325 0 +5322 5326 1 +5322 5327 1 +5322 5328 0 +5323 4963 1 +5323 5317 1 +5323 5318 1 +5323 5325 1 +5323 5326 0 +5323 5327 0 +5323 5328 1 +5324 4964 1 +5324 5317 -1 +5324 5318 1 +5324 5323 -1 +5324 5325 1 +5324 5326 -1 +5324 5327 1 +5324 5328 1 +5325 5326 1 +5325 5349 0 +5326 5350 0 +5327 5328 1 +5328 5352 -1 +5329 4965 0 +5329 4966 -1 +5329 4969 1 +5329 5327 1 +5329 5328 1 +5329 5333 1 +5329 5334 0 +5329 5335 1 +5329 5336 0 +5329 5341 1 +5329 5342 1 +5329 5343 1 +5329 5344 1 +5330 4965 1 +5330 4966 0 +5330 4970 1 +5330 5327 1 +5330 5328 1 +5330 5329 1 +5330 5333 1 +5330 5334 1 +5330 5335 1 +5330 5336 1 +5330 5341 1 +5330 5342 1 +5330 5343 1 +5330 5344 -1 +5331 4965 0 +5331 4966 -1 +5331 4971 -1 +5331 5317 0 +5331 5318 -1 +5331 5319 1 +5331 5320 0 +5331 5327 1 +5331 5328 0 +5331 5333 1 +5331 5334 1 +5331 5335 1 +5331 5336 0 +5332 4965 1 +5332 4966 0 +5332 4972 1 +5332 5317 0 +5332 5318 0 +5332 5319 1 +5332 5320 1 +5332 5327 1 +5332 5328 0 +5332 5331 1 +5332 5333 1 +5332 5334 0 +5332 5335 1 +5332 5336 1 +5333 5334 1 +5333 5357 1 +5334 5358 1 +5335 5336 0 +5335 5359 0 +5336 5360 0 +5337 4977 0 +5337 5333 -1 +5337 5334 -1 +5337 5341 0 +5337 5342 1 +5337 5343 0 +5337 5344 1 +5337 5349 0 +5337 5350 0 +5337 5352 1 +5338 4978 -1 +5338 5333 -1 +5338 5334 0 +5338 5337 0 +5338 5341 0 +5338 5342 -1 +5338 5343 1 +5338 5344 0 +5338 5349 -1 +5338 5350 0 +5338 5352 0 +5339 4979 1 +5339 5325 1 +5339 5326 0 +5339 5327 1 +5339 5328 0 +5339 5333 1 +5339 5334 1 +5339 5341 -1 +5339 5342 0 +5339 5343 1 +5339 5344 0 +5340 4980 1 +5340 5325 -1 +5340 5326 0 +5340 5327 1 +5340 5328 -1 +5340 5333 1 +5340 5334 0 +5340 5339 0 +5340 5341 1 +5340 5342 1 +5340 5343 0 +5340 5344 0 +5341 5342 1 +5341 5365 1 +5342 5366 0 +5343 5344 1 +5343 5367 1 +5344 5368 0 +5345 4985 1 +5345 5341 0 +5345 5342 1 +5345 5349 1 +5345 5350 1 +5345 5352 0 +5346 4986 1 +5346 5341 0 +5346 5342 1 +5346 5345 1 +5346 5349 1 +5346 5350 1 +5346 5352 1 +5347 4987 1 +5347 5341 0 +5347 5342 0 +5347 5349 0 +5347 5350 0 +5347 5352 0 +5348 4988 0 +5348 5341 1 +5348 5342 0 +5348 5347 1 +5348 5349 0 +5348 5350 0 +5348 5352 1 +5349 5350 1 +5349 5373 1 +5350 5374 0 +5352 5376 0 +5353 4989 0 +5353 4990 1 +5353 4993 0 +5353 5352 1 +5353 5357 -1 +5353 5358 1 +5353 5359 0 +5353 5360 1 +5353 5365 0 +5353 5366 0 +5353 5367 1 +5353 5368 1 +5354 4989 1 +5354 4990 1 +5354 4994 1 +5354 5352 1 +5354 5353 0 +5354 5357 1 +5354 5358 0 +5354 5359 1 +5354 5360 0 +5354 5365 0 +5354 5366 0 +5354 5367 0 +5354 5368 1 +5355 4989 1 +5355 4990 1 +5355 4995 1 +5355 5341 1 +5355 5342 1 +5355 5343 0 +5355 5344 1 +5355 5352 1 +5355 5357 1 +5355 5358 1 +5355 5359 1 +5355 5360 0 +5356 4989 0 +5356 4990 0 +5356 4996 0 +5356 5341 0 +5356 5342 1 +5356 5343 1 +5356 5344 0 +5356 5352 0 +5356 5355 1 +5356 5357 0 +5356 5358 0 +5356 5359 0 +5356 5360 1 +5357 5358 1 +5357 5381 0 +5358 5382 0 +5359 5360 1 +5359 5383 0 +5360 5384 0 +5361 5001 0 +5361 5357 0 +5361 5358 -1 +5361 5365 0 +5361 5366 0 +5361 5367 0 +5361 5368 1 +5361 5373 0 +5361 5374 0 +5361 5375 1 +5361 5376 1 +5362 5002 0 +5362 5357 1 +5362 5358 -1 +5362 5361 1 +5362 5365 0 +5362 5366 0 +5362 5367 1 +5362 5368 0 +5362 5373 0 +5362 5374 1 +5362 5375 0 +5362 5376 0 +5363 5003 -1 +5363 5349 1 +5363 5350 1 +5363 5352 0 +5363 5357 0 +5363 5358 0 +5363 5365 1 +5363 5366 1 +5363 5367 1 +5363 5368 1 +5364 5004 0 +5364 5349 0 +5364 5350 1 +5364 5352 1 +5364 5357 1 +5364 5358 0 +5364 5363 1 +5364 5365 1 +5364 5366 0 +5364 5367 1 +5364 5368 1 +5365 5366 -1 +5365 5389 1 +5366 5390 1 +5367 5368 -1 +5367 5391 1 +5368 5392 0 +5369 5009 1 +5369 5365 1 +5369 5366 0 +5369 5373 0 +5369 5374 1 +5369 5375 1 +5369 5376 1 +5370 5010 1 +5370 5365 0 +5370 5366 0 +5370 5369 0 +5370 5373 1 +5370 5374 1 +5370 5375 0 +5370 5376 1 +5371 5011 0 +5371 5365 0 +5371 5366 0 +5371 5373 0 +5371 5374 0 +5371 5375 1 +5371 5376 -1 +5372 5012 -1 +5372 5365 1 +5372 5366 0 +5372 5371 0 +5372 5373 -1 +5372 5374 0 +5372 5375 0 +5372 5376 0 +5373 5374 1 +5373 5397 1 +5374 5398 1 +5375 5376 1 +5375 5399 1 +5376 5400 -1 +5377 5013 0 +5377 5014 1 +5377 5017 -1 +5377 5375 0 +5377 5376 -1 +5377 5381 0 +5377 5382 -1 +5377 5383 1 +5377 5384 1 +5377 5389 0 +5377 5390 1 +5377 5391 1 +5377 5392 -1 +5378 5013 1 +5378 5014 1 +5378 5018 0 +5378 5375 1 +5378 5376 1 +5378 5377 0 +5378 5381 0 +5378 5382 1 +5378 5383 1 +5378 5384 1 +5378 5389 1 +5378 5390 1 +5378 5391 1 +5378 5392 0 +5379 5013 1 +5379 5014 0 +5379 5019 1 +5379 5365 0 +5379 5366 1 +5379 5367 0 +5379 5368 1 +5379 5375 0 +5379 5376 1 +5379 5381 1 +5379 5382 1 +5379 5383 0 +5379 5384 0 +5380 5013 1 +5380 5014 0 +5380 5020 0 +5380 5365 0 +5380 5366 -1 +5380 5367 1 +5380 5368 1 +5380 5375 1 +5380 5376 -1 +5380 5379 1 +5380 5381 0 +5380 5382 -1 +5380 5383 1 +5380 5384 0 +5381 5382 1 +5383 5384 0 +5385 5025 1 +5385 5381 1 +5385 5382 0 +5385 5389 0 +5385 5390 1 +5385 5391 -1 +5385 5392 0 +5385 5397 1 +5385 5398 0 +5385 5399 0 +5385 5400 -1 +5386 5026 1 +5386 5381 1 +5386 5382 0 +5386 5385 1 +5386 5389 0 +5386 5390 1 +5386 5391 -1 +5386 5392 1 +5386 5397 1 +5386 5398 0 +5386 5399 1 +5386 5400 0 +5387 5027 0 +5387 5373 0 +5387 5374 0 +5387 5375 1 +5387 5376 0 +5387 5381 1 +5387 5382 1 +5387 5389 -1 +5387 5390 0 +5387 5391 1 +5387 5392 1 +5388 5028 1 +5388 5373 0 +5388 5374 0 +5388 5375 0 +5388 5376 1 +5388 5381 1 +5388 5382 1 +5388 5387 0 +5388 5389 1 +5388 5390 0 +5388 5391 1 +5388 5392 0 +5389 5390 1 +5391 5392 -1 +5393 5033 1 +5393 5389 1 +5393 5390 1 +5393 5397 1 +5393 5398 1 +5393 5399 1 +5393 5400 1 +5394 5034 0 +5394 5389 -1 +5394 5390 1 +5394 5393 -1 +5394 5397 1 +5394 5398 0 +5394 5399 0 +5394 5400 1 +5395 5035 1 +5395 5389 0 +5395 5390 1 +5395 5397 1 +5395 5398 0 +5395 5399 1 +5395 5400 0 +5396 5036 1 +5396 5389 1 +5396 5390 1 +5396 5395 0 +5396 5397 1 +5396 5398 1 +5396 5399 0 +5396 5400 0 +5397 5398 1 +5399 5400 -1 diff --git a/examples/jld_example.jl b/examples/jld_example.jl new file mode 100644 index 00000000..e9b33263 --- /dev/null +++ b/examples/jld_example.jl @@ -0,0 +1,12 @@ +using Pkg +Pkg.add("JLD") + +using JLD +r = rand(3, 3, 3) +save("$(@__DIR__)/data.jld", "data", r) +load("$(@__DIR__)/data.jld")["data"] + + + + + diff --git a/examples/pegasus.jl b/examples/pegasus.jl new file mode 100644 index 00000000..3b4e061b --- /dev/null +++ b/examples/pegasus.jl @@ -0,0 +1,49 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + +using SpinGlassExhaustive + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +function bench(instance::String, β::Real, bond_dim::Integer, num_states::Integer) + m, n, t = 15, 15, 3 + + + + dE = 3.0 + δp = exp(-β * dE) + all_betas = [β/8, β/4, β/2, β] + + cl_h = clustered_hamiltonian( + ising_graph(instance), + spectrum=my_brute_force, + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + + params = MpsParameters(bond_dim, 1E-8, 10, 1E-16) + search_params = SearchParameters(num_states, δp) + Strategy = Zipper + Sparsity = Sparse + Layout = GaugesEnergy + transform = rotation(0) + Gauge = NoUpdate + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, all_betas, :graduate_truncate, params; onGPU=onGPU) + + sol = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + + sol +end + +β = 0.5 +bond_dim = 8 +num_states = 5 + +instance = "$(@__DIR__)/instances/P16_CBFM-P.txt" + +bench(instance, β, bond_dim, num_states) \ No newline at end of file diff --git a/examples/truncation_BP.jl b/examples/truncation_BP.jl new file mode 100644 index 00000000..072f5e73 --- /dev/null +++ b/examples/truncation_BP.jl @@ -0,0 +1,78 @@ +using SpinGlassExhaustive +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics +using LowRankApprox +using CUDA + +disable_logging(LogLevel(1)) +CUDA.allowscalar(false) + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +m, n, t = 3, 3, 3 + +Dcut = 8 +β = 0.5 +tolV = 1E-16 +tolS = 1E-16 +max_sweeps = 0 +indβ = 1 +ITERS_SVD = 2 +ITERS_VAR = 1 +DTEMP_MULT = 2 +MAX_STATES = 128 +METHOD = :psvd_sparse #:psvd_sparse #:svd +DE = 16.0 +δp = 1E-5*exp(-β * DE) +ig = ising_graph("$(@__DIR__)/../test/instances/pegasus_random/P4/CBFM-P/SpinGlass/single/001_sg.txt") + +params = MpsParameters(Dcut, tolV, max_sweeps, tolS, ITERS_SVD, ITERS_VAR, DTEMP_MULT, METHOD) +search_params = SearchParameters(MAX_STATES, δp) + +Strategy = Zipper # MPSAnnealing SVDTruncate +Layout = GaugesEnergy +Gauge = NoUpdate +cl_states = [2^10,] +iter = 1 +inst = "001" +results_folder = "$(@__DIR__)/../test/instances/pegasus_random/P4/CBFM-P/SpinGlass/BP" + +for cs ∈ cl_states + println("===================================") + println("Cluster states ", cs) + println("===================================") + + for tran ∈ [LatticeTransformation((1, 2, 3, 4), false),]#all_lattice_transformations + println("===============") + println("Transform ", tran) + println("Iter ", iter) + + cl_h = clustered_hamiltonian( + ig, + spectrum= full_spectrum, #rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + + @time cl_h = truncate_clustered_hamiltonian(cl_h, β, cs, results_folder, inst; tol=1e-6, iter=iter) + # @time cl_h = truncate_clustered_hamiltonian_2site_energy(cl_h, cs) + for v in vertices(cl_h) + println(length(get_prop(cl_h, v, :spectrum).states)) + end + # net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparse}(m, n, cl_h, tran) + # ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + # sol, schmidts = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + # println("sol ", sol) + # println("Schmidts ", schmidts) + end +end diff --git a/src/PEPS.jl b/src/PEPS.jl index 82813852..8465bab2 100644 --- a/src/PEPS.jl +++ b/src/PEPS.jl @@ -1,155 +1,377 @@ -export PEPSNetwork, generate_boundary, node_from_index, conditional_probability +# PEPS.jl: This file provides all tools needed to build PEPS tensor network. -const IntOrRational = Union{Int,Rational{Int}} +using LabelledGraphs + +export + AbstractGibbsNetwork, + interaction_energy, + connecting_tensor, + normalize_probability, + fuse_projectors, + initialize_gauges!, + decode_state, + PEPSNetwork, + mod_wo_zero, + bond_energy, + outer_projector, + projector, + spectrum, + is_compatible, + ones_like, + _equalize, + _normalize, + branch_solution, + local_spins, + local_energy + +# T: type of the vertex of network +# S: type of the vertex of underlying factor graph +abstract type AbstractGibbsNetwork{S, T} end """ - PEPSNetwork +$(TYPEDSIGNATURES) + +Construct a Projected Entangled Pair States (PEPS) network. -Structure that stores PEPS tensor network +# Arguments +- `m::Int`: Number of rows in the PEPS lattice. +- `n::Int`: Number of columns in the PEPS lattice. +- `clustered_hamiltonian::LabelledGraph`: clustered hamiltonian representing the Hamiltonian. +- `transformation::LatticeTransformation`: Transformation of the PEPS lattice, as it can be rotated or reflected. +- `gauge_type::Symbol=:id`: Type of gauge to initialize (default is identity). + +# Type Parameters +- `T <: AbstractGeometry`: Type of geometry for the PEPS lattice. It can be `SquareSingleNode`, `SquareDoubleNode`, `SquareCrossSingleNode`, `SquareCrossDoubleNode`. +- `S <: AbstractSparsity`: Type of sparsity for the PEPS tensors: `Dense` or `Sparse`. + +# Returns +An instance of PEPSNetwork{T, S}. """ -struct PEPSNetwork <: AbstractGibbsNetwork{NTuple{2,Int},NTuple{2,Int}} - factor_graph::LabelledGraph{T,NTuple{2,Int}} where {T} - network_graph::LabelledGraph{S,NTuple{2,Int}} where {S} +mutable struct PEPSNetwork{ + T <: AbstractGeometry, S <: AbstractSparsity +} <: AbstractGibbsNetwork{Node, PEPSNode} + clustered_hamiltonian::LabelledGraph vertex_map::Function + lp::PoolOfProjectors m::Int n::Int nrows::Int ncols::Int - β::Real - bond_dim::Int - var_tol::Real - sweeps::Int - gauges::Dict{Tuple{Rational,IntOrRational},Vector{Float64}} - tensor_spiecies::Dict{NTuple{2,IntOrRational},Symbol} - columns_MPO::NTuple{N,IntOrRational} where {N} - layers_MPS::NTuple{M,IntOrRational} where {M} - layers_left_env::NTuple{K,IntOrRational} where {K} - layers_right_env::NTuple{L,IntOrRational} where {L} - - - function PEPSNetwork( + tensors_map::Dict{PEPSNode, Symbol} + gauges::Gauges{T} + + function PEPSNetwork{T, S}( m::Int, n::Int, - factor_graph::LabelledGraph, - transformation::LatticeTransformation; - β::Real, - bond_dim::Int = typemax(Int), - var_tol::Real = 1E-8, - sweeps::Int = 4, - columns_MPO = (-1 // 2, 0), # from left to right - layers_MPS = (4 // 6, 3 // 6, 0, -1 // 6), # from bottom to top - layers_left_env = (4 // 6, 3 // 6), - layers_right_env = (0, -3 // 6), - ) - vmap = vertex_map(transformation, m, n) - ng = peps_lattice(m, n) - nrows, ncols = transformation.flips_dimensions ? (n, m) : (m, n) - - if !is_compatible(factor_graph, ng) + clustered_hamiltonian::LabelledGraph, + transformation::LatticeTransformation, + gauge_type::Symbol=:id + ) where {T <: AbstractGeometry, S <: AbstractSparsity} + lp = get_prop(clustered_hamiltonian, :pool_of_projectors) + net = new(clustered_hamiltonian, vertex_map(transformation, m, n), lp, m, n) + net.nrows, net.ncols = transformation.flips_dimensions ? (n, m) : (m, n) + + if !is_compatible(net.clustered_hamiltonian, T.name.wrapper(m, n)) throw(ArgumentError("Factor graph not compatible with given network.")) end - _gauges = Dict{Tuple{Rational,Int},Vector{Float64}}() - _tensor_spiecies = Dict{NTuple{2,IntOrRational},Symbol}() - - network = new( - factor_graph, - ng, - vmap, - m, - n, - nrows, - ncols, - β, - bond_dim, - var_tol, - sweeps, - _gauges, - _tensor_spiecies, - columns_MPO, - layers_MPS, - layers_left_env, - layers_right_env, - ) - - assign_tensors!(network) - update_gauges!(network, :id) - network + net.tensors_map = tensor_map(T, S, net.nrows, net.ncols) + net.gauges = Gauges{T}(net.nrows, net.ncols) + initialize_gauges!(net, gauge_type) + net end end -function peps_lattice(m::Int, n::Int) - labels = [(i, j) for j ∈ 1:n for i ∈ 1:m] - LabelledGraph(labels, grid((m, n))) +""" +$(TYPEDSIGNATURES) + +Calculate the modulo operation of `k` with respect to `m`, ensuring the result is not zero. + +## Arguments +- `k`: The dividend. +- `m`: The divisor. + +## Returns +- `result::Int`: The result of `k % m`, ensuring it is not zero. +""" +mod_wo_zero(k, m) = k % m == 0 ? m : k % m + +""" +$(TYPEDSIGNATURES) +Create an identity with the same type as the input number `x`. + +## Arguments +- `x`: A numeric value. + +## Returns +- a multiplicative identity with the same type as `x`. +""" +ones_like(x::Number) = one(typeof(x)) + +""" +$(TYPEDSIGNATURES) + +Create an array of ones with the same element type and size as the input array `x`. + +## Arguments +- `x::AbstractArray`: An array serving as a template. + +## Returns +- `result::Array`: An array of ones with the same element type and size as `x`. +""" +ones_like(x::AbstractArray) = ones(eltype(x), size(x)) + +""" +$(TYPEDSIGNATURES) + +Calculate the bond energy between nodes `u` and `v` for a given index `σ` in the Gibbs network `net`. + +## Arguments +- `net::AbstractGibbsNetwork{T, S}`: The Gibbs network. +- `u::Node`: One of the nodes connected by the bond. +- `v::Node`: The other node connected by the bond. +- `σ::Int`: The index for which the bond energy is calculated. + +## Returns +- `energies::Vector{T}`: Vector containing the bond energies between nodes `u` and `v` for index `σ`. +""" +function bond_energy(net::AbstractGibbsNetwork{T, S}, u::Node, v::Node, σ::Int) where {T, S} + cl_h_u, cl_h_v = net.vertex_map(u), net.vertex_map(v) + energies = SpinGlassNetworks.bond_energy(net.clustered_hamiltonian, cl_h_u, cl_h_v, σ) + vec(energies) +end + +""" +$(TYPEDSIGNATURES) + +Compute the projector between two nodes `v` and `w` in the Gibbs network `network`. + +## Arguments +- `network::AbstractGibbsNetwork{S, T}`: The Gibbs network. +- `v::S`: Source node. +- `w::S`: Target node. + +## Returns +- `projector::Matrix{T}`: Projector matrix between nodes `v` and `w`. +""" +function projector(network::AbstractGibbsNetwork{S, T}, v::S, w::S) where {S, T} + cl_h = network.clustered_hamiltonian + cl_h_v, cl_h_w = network.vertex_map(v), network.vertex_map(w) + SpinGlassNetworks.projector(cl_h, cl_h_v, cl_h_w) end -function projectors(network::PEPSNetwork, vertex::NTuple{2,Int}) - i, j = vertex - neighbours = ((i, j - 1), (i - 1, j), (i, j + 1), (i + 1, j)) - projector.(Ref(network), Ref(vertex), neighbours) +""" +$(TYPEDSIGNATURES) + +Compute the projector matrix for the given node `v` onto a tuple of target nodes `vertices` in the Gibbs network `net`. + +## Arguments +- `net::AbstractGibbsNetwork{S, T}`: The Gibbs network. +- `v::S`: Source node. +- `vertices::NTuple{N, S}`: Tuple of target nodes onto which the projector is computed. + +## Returns +- first fused projector matrix for node `v` onto the specified target nodes. + +""" +function projector( + net::AbstractGibbsNetwork{S, T}, v::S, vertices::NTuple{N, S} +) where {S, T, N} + first(fuse_projectors(projector.(Ref(net), Ref(v), vertices))) end +""" +$(TYPEDSIGNATURES) +Fuse a tuple of projector matrices into a single projector matrix using rank-revealing techniques. + +## Arguments +- `projectors::NTuple{N, K}`: Tuple of projector matrices to be fused. + +## Returns +- `fused::Matrix{Float64}`: Fused projector matrix. +- `transitions::NTuple{N, Vector{Int}}`: Tuple of transition vectors indicating the indices of the non-zero rows in each original projector. +""" +function fuse_projectors( + projectors::NTuple{N, K} + #projectors::Union{Vector{S}, NTuple{N, S}} + ) where {N, K} + fused, transitions_matrix = rank_reveal(hcat(projectors...), :PE) + # transitions = collect(eachcol(transitions_matrix)) + transitions = Tuple(Array(t) for t ∈ eachcol(transitions_matrix)) + fused, transitions +end -node_index(peps::AbstractGibbsNetwork, node::NTuple{2,Int}) = - peps.ncols * (node[1] - 1) + node[2] +function outer_projector(p1::Array{T, 1}, p2::Array{T, 1}) where T <: Number + reshape(reshape(p1, :, 1) .+ maximum(p1) .* reshape(p2 .- 1, 1, :), :) +end +""" +$(TYPEDSIGNATURES) +Retrieve the spectrum associated with a specific vertex in the Gibbs network. -node_from_index(peps::AbstractGibbsNetwork, index::Int) = - ((index - 1) ÷ peps.ncols + 1, mod1(index, peps.ncols)) +## Arguments +- `network::AbstractGibbsNetwork{S, T}`: Gibbs network containing the clustered Hamiltonian. +- `vertex::S`: Vertex for which the spectrum is to be retrieved. -function boundary(peps::PEPSNetwork, node::NTuple{2,Int}) - i, j = node - x = (-4, -2) - vcat( - [[(x, x), ((i, k), (i + 1, k))] for k ∈ 1:j-1]..., - (x, x), - ((i, j - 1), (i, j)), - [[(x, x), ((i - 1, k), (i, k))] for k ∈ j:peps.ncols]..., - ) +## Returns +- Spectrum associated with the specified vertex. +""" +function spectrum(network::AbstractGibbsNetwork{S, T}, vertex::S) where {S, T} + get_prop(network.clustered_hamiltonian, network.vertex_map(vertex), :spectrum) end +""" +$(TYPEDSIGNATURES) +Retrieve the local energy spectrum associated with a specific vertex in the Gibbs network. + +## Arguments +- `network::AbstractGibbsNetwork{S, T}`: Gibbs network containing the clustered Hamiltonian. +- `vertex::S`: Vertex for which the local energy spectrum is to be retrieved. -function conditional_probability(peps::PEPSNetwork, w::Vector{Int}) - i, j = node_from_index(peps, length(w) + 1) - ∂v = boundary_state(peps, w, (i, j)) +## Returns +- Local energy spectrum associated with the specified vertex. +""" +function local_energy(network::AbstractGibbsNetwork{S, T}, vertex::S) where {S, T} + spectrum(network, vertex).energies +end - L = left_env(peps, i, ∂v[1:2*j-1]) - R = right_env(peps, i, ∂v[2*j+3:2*peps.ncols+2]) - A = reduced_site_tensor(peps, (i, j), ∂v[2*j], ∂v[2*j+2]) - ψ = dressed_mps(peps, i) - M = ψ[2*j] +""" +$(TYPEDSIGNATURES) +Determine the cluster size associated with a specific vertex in the Gibbs network. - @tensor prob[σ] := L[x] * M[x, d, y] * A[r, d, σ] * R[y, r] order = (x, d, r, y) +## Arguments +- `net::AbstractGibbsNetwork{S, T}`: Gibbs network containing the clustered Hamiltonian. +- `v::S`: Vertex for which the cluster size is to be determined. - normalize_probability(prob) +## Returns +- `size::Int`: Number of states in the local energy spectrum associated with the specified vertex. +""" +function SpinGlassNetworks.cluster_size(net::AbstractGibbsNetwork{S, T}, v::S) where {S, T} + length(local_energy(net, v)) end +""" +$(TYPEDSIGNATURES) +Compute the interaction energy between two vertices in a Gibbs network. + +## Arguments +- `network::AbstractGibbsNetwork{S, T}`: Gibbs network containing the clustered Hamiltonian. +- `v::S`: First vertex. +- `w::S`: Second vertex. -function bond_energy( - network::AbstractGibbsNetwork, - u::NTuple{2,Int}, - v::NTuple{2,Int}, - σ::Int, -) - fg_u, fg_v = network.vertex_map(u), network.vertex_map(v) - if has_edge(network.factor_graph, fg_u, fg_v) - pu, en, pv = - get_prop.(Ref(network.factor_graph), Ref(fg_u), Ref(fg_v), (:pl, :en, :pr)) - energies = (pu * (en * pv[:, σ:σ]))' - elseif has_edge(network.factor_graph, fg_v, fg_u) - pv, en, pu = - get_prop.(Ref(network.factor_graph), Ref(fg_v), Ref(fg_u), (:pl, :en, :pr)) - energies = (pv[σ:σ, :] * en) * pu +## Returns +- `energy::Matrix{T}`: Interaction energy matrix between vertices `v` and `w`. +""" +function interaction_energy(network::AbstractGibbsNetwork{S, T}, v::S, w::S) where {S, T} + cl_h = network.clustered_hamiltonian + cl_h_v, cl_h_w = network.vertex_map(v), network.vertex_map(w) + if has_edge(cl_h, cl_h_w, cl_h_v) + get_prop(cl_h, cl_h_w, cl_h_v, :en)' + elseif has_edge(cl_h, cl_h_v, cl_h_w) + get_prop(cl_h, cl_h_v, cl_h_w, :en) else - energies = zeros(length(local_energy(network, u))) + zeros(1, 1) + end +end + +""" +$(TYPEDSIGNATURES) +Check if a clustered Hamiltonian is compatible with a given network graph. + +## Arguments +- `clustered_hamiltonian::LabelledGraph`: Graph representing the clustered Hamiltonian. +- `network_graph::LabelledGraph`: Graph representing the network. + +## Returns +- `compatibility::Bool`: `true` if the clustered Hamiltonian is compatible with the network graph, `false` otherwise. +""" +function is_compatible(clustered_hamiltonian::LabelledGraph, network_graph::LabelledGraph) + all(has_edge(network_graph, src(edge), dst(edge)) for edge ∈ edges(clustered_hamiltonian)) +end + +""" +$(TYPEDSIGNATURES) +Initialize gauge tensors in a Gibbs network. + +## Arguments +- `net::AbstractGibbsNetwork{S, T}`: Gibbs network to initialize. +- `type::Symbol=:id`: Type of initialization, either `:id` for identity or `:rand` for random values. + +## Description +This function initializes gauge tensors in a Gibbs network according to the specified type. +Each gauge tensor is associated with two positions in the network and a type. +The positions are determined by the gauge's `positions` field, and the type is specified by the gauge's `type` field. +The initialization type can be either `:id` for identity tensors or `:rand` for random tensors. +""" +function initialize_gauges!(net::AbstractGibbsNetwork{S, T}, type::Symbol=:id) where {S, T} + @assert type ∈ (:id, :rand) + for gauge ∈ net.gauges.info + n1, n2 = gauge.positions + push!(net.tensors_map, n1 => gauge.type, n2 => gauge.type) + d = size(net, gauge.attached_tensor)[gauge.attached_leg] + X = type == :id ? ones(d) : rand(d) .+ 0.42 + push!(net.gauges.data, n1 => X, n2 => 1 ./ X) end - vec(energies) end -function update_energy(network::PEPSNetwork, σ::Vector{Int}) - i, j = node_from_index(network, length(σ) + 1) - bond_energy(network, (i, j), (i, j - 1), local_state_for_node(network, σ, (i, j - 1))) + - bond_energy(network, (i, j), (i - 1, j), local_state_for_node(network, σ, (i - 1, j))) + - local_energy(network, (i, j)) +""" +$(TYPEDSIGNATURES) +Normalize a probability distribution. + +## Arguments +- `probs::Vector{<:Real}`: A vector representing a probability distribution. + +## Returns +- `Vector{Float64}`: Normalized probability distribution. +""" +_normalize(probs::Vector{<:Real}) = probs ./ sum(probs) + +""" +$(TYPEDSIGNATURES) +Equalize a probability distribution. + +## Arguments +- `probs::Vector{<:Real}`: A vector representing a probability distribution. + +## Returns +- `Vector{Float64}`: Equalized probability distribution. +""" +function _equalize(probs::Vector{<:Real}) + mp = abs(minimum(probs)) + _normalize(replace(p -> p < mp ? mp : p, probs)) +end + +""" +$(TYPEDSIGNATURES) +Normalize a probability distribution. + +## Arguments +- `probs::Vector{<:Real}`: A vector representing a probability distribution. + +## Returns +- `Vector{Float64}`: Normalized probability distribution. +""" +function normalize_probability(probs::Vector{<:Real}) + if minimum(probs) < 0 return _equalize(probs) end + _normalize(probs) +end + +""" +$(TYPEDSIGNATURES) +Decode a state vector into a dictionary representation. + +## Arguments +- `peps::AbstractGibbsNetwork{S, T}`: The Gibbs network. +- `σ::Vector{Int}`: State vector to be decoded. +- `cl_h_order::Bool=false`: If true, use the order of nodes in the clustered Hamiltonian. + +## Returns +- `Dict{Symbol, Int}`: A dictionary mapping node symbols to corresponding values in the state vector. +""" +function decode_state( + peps::AbstractGibbsNetwork{S, T}, σ::Vector{Int}, cl_h_order::Bool=false +) where {S, T} + nodes = cl_h_order ? peps.vertex_map.(nodes_search_order_Mps(peps)) : vertices(peps.clustered_hamiltonian) + Dict(nodes[1:length(σ)] .=> σ) end diff --git a/src/SpinGlassEngine.jl b/src/SpinGlassEngine.jl index a8740e3d..2740f2cb 100644 --- a/src/SpinGlassEngine.jl +++ b/src/SpinGlassEngine.jl @@ -1,31 +1,32 @@ module SpinGlassEngine using Base: Tuple -using SpinGlassTensors, SpinGlassNetworks -using TensorOperations, TensorCast +using Base.Cartesian +using CUDA +using SpinGlassTensors +using SpinGlassNetworks +using TensorOperations +using TensorCast using MetaGraphs -using Memoize -using LinearAlgebra -using LightGraphs +using Memoization +using LinearAlgebra, MKL +using Graphs using ProgressMeter +using Statistics +using DocStringExtensions +using NNlib -SpinGlassNetworks.local_basis(ψ::AbstractMPS, i::Int) = - SpinGlassNetworks.local_basis(physical_dim(ψ, i)) - -function LinearAlgebra.dot(ψ::AbstractMPS, state::Union{AbstractVector,NTuple}) - C = I - - for (M, σ) ∈ zip(ψ, state) - i = idx(σ) - C = M[:, i, :]' * (C * M[:, i, :]) - end - tr(C) -end - -include("network_operations.jl") -include("network_interface.jl") +include("operations.jl") +include("geometry.jl") include("PEPS.jl") -include("network_tensors.jl") +include("contractor.jl") +include("square_single_node.jl") +include("square_cross_single_node.jl") +include("square_double_node.jl") +include("square_cross_double_node.jl") +include("tensors.jl") +include("droplets.jl") include("search.jl") +include("util.jl") end # module diff --git a/src/contractor.jl b/src/contractor.jl new file mode 100644 index 00000000..a8b38112 --- /dev/null +++ b/src/contractor.jl @@ -0,0 +1,858 @@ +export + SVDTruncate, + MPSAnnealing, + Zipper, + MpoLayers, + MpsParameters, + MpsContractor, + NoUpdate, + GaugeStrategy, + GaugeStrategyWithBalancing, + clear_memoize_cache, + clear_memoize_cache_after_row, + mpo, + mps_top, + mps, + mps_top_approx, + mps_approx, + update_gauges!, + sweep_gauges!, + update_gauges_with_balancing!, + boundary_states, + dressed_mps, + conditional_probability, + update_energy, + boundary, + local_state_for_node, + boundary_indices, + layout, + sparsity, + strategy, + left_env, + right_env + +abstract type AbstractContractor end +abstract type AbstractStrategy end +abstract type AbstractGauge end + +struct SVDTruncate <: AbstractStrategy end +struct MPSAnnealing <: AbstractStrategy end +struct Zipper <: AbstractStrategy end +struct GaugeStrategyWithBalancing <: AbstractGauge end +struct GaugeStrategy <: AbstractGauge end +struct NoUpdate <: AbstractGauge end + +""" +$(TYPEDSIGNATURES) + +A struct representing different layers of a Matrix Product Operator (MPO) used in contraction algorithms. + +# Fields +- `main::Dict{Site, Sites}`: A dictionary mapping sites to the main layers of the MPO. +- `dress::Dict{Site, Sites}`: A dictionary mapping sites to the dress layers of the MPO. +- `right::Dict{Site, Sites}`: A dictionary mapping sites to the right layers of the MPO. + +The `MpoLayers` struct distinguishes the various layers of an MPO, which is often used in tensor network contraction algorithms. MPOs are commonly employed in quantum many-body physics and condensed matter physics to represent operators acting on quantum states in a factorized form. +""" +struct MpoLayers + main::Dict{Site, Sites} + dress::Dict{Site, Sites} + right::Dict{Site, Sites} +end + +""" +$(TYPEDSIGNATURES) + +A struct representing control parameters for the MPO-MPS (Matrix Product Operator - Matrix Product State) scheme used to contract a PEPS (Projected Entangled Pair States) network. + +# Fields +- `bond_dimension::Int`: The maximum bond dimension to be used during contraction. +- `variational_tol::Real`: The tolerance for the variational solver used in MPS optimization. It gives the condition for overlap convergence during one sweep in boundary MPS. Default is 1E-8. +- `max_num_sweeps::Int`: The maximum number of sweeps to perform during variational compression. Default is 4. +- `tol_SVD::Real`: The tolerance used in singular value decomposition (SVD) operations. It means that smaller singular values are truncated. Default is 1E-16. +- `iters_svd::Int`: The number of iterations to perform in SVD computations. Default is 1. +- `iters_var::Int`: The number of iterations for variational optimization. Default is 1. +- `Dtemp_multiplier::Int`: A multiplier for the bond dimension when temporary bond dimensions are computed. Default is 2. +- `method::Symbol`: The type of SVD method to use (e.g., `:psvd_sparse`). Default is `:psvd_sparse`. + +The `MpsParameters` struct encapsulates various control parameters that influence the behavior and accuracy of the MPO-MPS contraction scheme used for PEPS network calculations. +""" +struct MpsParameters + bond_dimension::Int + variational_tol::Real + max_num_sweeps::Int + tol_SVD::Real + iters_svd::Int + iters_var::Int + Dtemp_multiplier::Int + method::Symbol + + MpsParameters( + bd = typemax(Int), + ϵ = 1E-8, + sw = 4, + ts = 1E-16, + is = 1, + iv = 1, + dm = 2, + m = :psvd_sparse + ) = new(bd, ϵ, sw, ts, is, iv, dm, m) +end + +""" +$(TYPEDSIGNATURES) +A function that provides the layout used to construct the PEPS (Projected Entangled Pair States) network. + +# Arguments +- `net::PEPSNetwork{T, S}`: The PEPS network for which the layout is provided. + +# Returns +- The layout type `T` used to construct the PEPS network. + +The `layout` function returns the layout type used in the construction of a PEPS network. This layout type specifies the geometric arrangement and sparsity pattern of the tensors in the PEPS network. +""" +layout(net::PEPSNetwork{T, S}) where {T, S} = T + +""" +$(TYPEDSIGNATURES) +A function that provides the sparsity used to construct the PEPS (Projected Entangled Pair States) network. + +# Arguments +- `net::PEPSNetwork{T, S}`: The PEPS network for which the sparsity is provided. + +# Returns +- The sparsity type `S` used to construct the PEPS network. + +The `sparsity` function returns the sparsity type used in the construction of a PEPS network. This sparsity type specifies the pattern of zero elements in the tensors of the PEPS network, which can affect the computational efficiency and properties of the network. +""" +sparsity(net::PEPSNetwork{T, S}) where {T, S} = S + +""" +$(TYPEDSIGNATURES) +A mutable struct representing a contractor for contracting a PEPS (Projected Entangled Pair States) network using the MPO-MPS (Matrix Product Operator - Matrix Product State) scheme. + +# Fields +- `peps::PEPSNetwork{T, S}`: The PEPS network to be contracted. +- `betas::Vector{<:Real}`: A vector of inverse temperatures (β) used during the search. The last one is the target one. This parameter plays a crucial role: a larger β enables a finer focus on low-energy states, although it may compromise the numerical stability of tensor network contraction. Determining the optimal β could be instance-dependent, and experimental exploration might be necessary for different classes of instances. +- `graduate_truncation::Symbol`: The truncation method to use for gradually truncating MPS bond dimensions. +- `params::MpsParameters`: Control parameters for the MPO-MPS contraction. + +# Optional Arguments +- `onGPU::Bool`: A flag indicating whether the contraction is performed on a GPU. Default is `true`. +- `depth`: An integer specifying the iteration depth for variational sweeps in Zipper algorithm. Default is `0` which means variational sweep is done on all lattice sites. + +The `MpsContractor` function defines the contractor structure responsible for contracting a PEPS network using the MPO-MPS scheme. +It encapsulates various components and settings required for the contraction process. +""" +mutable struct MpsContractor{T <: AbstractStrategy, R <: AbstractGauge} <: AbstractContractor + peps::PEPSNetwork{T, S} where {T, S} + betas::Vector{<:Real} + graduate_truncation::Symbol + depth::Int + params::MpsParameters + layers::MpoLayers + statistics#::Dict{Vector{Int}, <:Real} + nodes_search_order::Vector{Node} + node_outside::Node + node_search_index::Dict{Node, Int} + current_node::Node + onGPU::Bool + + function MpsContractor{T, R}(net, βs, graduate_truncation::Symbol, params; onGPU=true, depth::Int=0) where {T, R} + ml = MpoLayers(layout(net), net.ncols) + stat = Dict() + ord, node_out = nodes_search_order_Mps(net) + enum_ord = Dict(node => i for (i, node) ∈ enumerate(ord)) + node = ord[begin] + new(net, βs, graduate_truncation, depth, params, ml, stat, ord, node_out, enum_ord, node, onGPU) + end +end + +""" +$(TYPEDSIGNATURES) +Get the strategy used to contract the PEPS network. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. + +# Returns +- `T`: The strategy used for network contraction. +""" +strategy(ctr::MpsContractor{T}) where {T} = T + +""" +$(TYPEDSIGNATURES) +Construct and memoize a Matrix Product Operator (MPO) for a given set of layers. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. +- `layers::Dict{Site, Sites}`: A dictionary mapping sites to their corresponding layers. +- `r::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMpo`: The constructed MPO for the specified layers. + +This function constructs an MPO by iterating through the specified layers and assembling the corresponding tensors. The resulting MPO is memoized for efficient reuse. +""" +@memoize Dict function mpo( + ctr::MpsContractor{T}, layers::Dict{Site, Sites}, r::Int, indβ::Int +) where T <: AbstractStrategy + mpo = Dict{Site, MpoTensor{Float64}}() # Float64 - for now + for (site, coordinates) ∈ layers + lmpo = TensorMap{Float64}() # Float64 - for now + for dr ∈ coordinates + ten = tensor(ctr.peps, PEPSNode(r + dr, site), ctr.betas[indβ]) + push!(lmpo, dr => ten) + end + push!(mpo, site => MpoTensor(lmpo)) + end + ctr.onGPU ? move_to_CUDA!(QMpo(mpo)) : QMpo(mpo) +end + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the top Matrix Product State (MPS) using Singular Value Decomposition (SVD) for a given row. + +# Arguments +- `ctr::MpsContractor{SVDTruncate}`: The MpsContractor object representing the PEPS network contraction with SVD truncation. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed top MPS for the specified row. + +This function constructs the top MPS using SVD for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing canonicalization, truncation, and compression steps as needed based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps_top(ctr::MpsContractor{SVDTruncate}, i::Int, indβ::Int) + Dcut = ctr.params.bond_dimension + tolV = ctr.params.variational_tol + tolS = ctr.params.tol_SVD + max_sweeps = ctr.params.max_num_sweeps + + if i < 1 + W = mpo(ctr, ctr.layers.main, 1, indβ) + return IdentityQMps(Float64, local_dims(W, :up); onGPU=ctr.onGPU) # F64 for now + end + + ψ = mps_top(ctr, i-1, indβ) + W = transpose(mpo(ctr, ctr.layers.main, i, indβ)) + ψ0 = dot(W, ψ) + + canonise!(ψ0, :right) + if ctr.graduate_truncation == :graduate_truncate + canonise_truncate!(ψ0, :left, Dcut * 2, tolS / 2) + variational_sweep!(ψ0, W, ψ, Val(:right)) + end + canonise_truncate!(ψ0, :left, Dcut, tolS) + variational_compress!(ψ0, W, ψ, tolV, max_sweeps) + ψ0 +end + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the (bottom) Matrix Product State (MPS) using Singular Value Decomposition (SVD) for a given row. + +# Arguments +- `ctr::MpsContractor{SVDTruncate}`: The MpsContractor object representing the PEPS network contraction with SVD truncation. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed (bottom) MPS for the specified row. + +This function constructs the (bottom) MPS using SVD for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing canonicalization, truncation, and compression steps as needed based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps(ctr::MpsContractor{SVDTruncate}, i::Int, indβ::Int) + Dcut = ctr.params.bond_dimension + tolV = ctr.params.variational_tol + tolS = ctr.params.tol_SVD + max_sweeps = ctr.params.max_num_sweeps + + if i > ctr.peps.nrows + W = mpo(ctr, ctr.layers.main, ctr.peps.nrows, indβ) + return IdentityQMps(Float64, local_dims(W, :down); onGPU=ctr.onGPU) # Float64 fror now + end + + ψ = mps(ctr, i+1, indβ) + W = mpo(ctr, ctr.layers.main, i, indβ) + + ψ0 = dot(W, ψ) + canonise!(ψ0, :right) + if ctr.graduate_truncation == :graduate_truncate + canonise_truncate!(ψ0, :left, Dcut * 2, tolS / 2) + variational_sweep!(ψ0, W, ψ, Val(:right)) + end + canonise_truncate!(ψ0, :left, Dcut, tolS) + variational_compress!(ψ0, W, ψ, tolV, max_sweeps) + ψ0 +end + + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the (bottom) Matrix Product State (MPS) approximation using Singular Value Decomposition (SVD) for a given row. + +# Arguments +- `ctr::MpsContractor{SVDTruncate}`: The MpsContractor object representing the PEPS network contraction with SVD truncation. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed (bottom) MPS approximation for the specified row. + +This function constructs the (bottom) MPS approximation using SVD for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing canonicalization, and truncation steps based on the specified parameters in `ctr.params`. The resulting MPS approximation is memoized for efficient reuse. +""" +@memoize Dict function mps_approx(ctr::MpsContractor{SVDTruncate}, i::Int, indβ::Int) + if i > ctr.peps.nrows + W = mpo(ctr, ctr.layers.main, ctr.peps.nrows, indβ) + return IdentityQMps(Float64, local_dims(W, :down); onGPU=ctr.onGPU) # F64 for now + end + + W = mpo(ctr, ctr.layers.main, i, indβ) + ψ = IdentityQMps(Float64, local_dims(W, :down); onGPU=ctr.onGPU) # F64 for now + + ψ0 = dot(W, ψ) + truncate!(ψ0, :left, ctr.params.bond_dimension) + ψ0 +end + +#= +function (ctr::MpsContractor)(peps::PEPSNetwork, ...., :mps_top) + +for ctr ∈ [ctr_1, ctr_2] + mpo_1 = ctr_1(peps, ..., :mpo) + mpo_2 = ctr_2(peps, ..., :mpo) + + #@nexprs 2 k k -> mpo_k = ctr_k(peps, ..., :mpo) +end +=# + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the top Matrix Product State (MPS) using the Zipper (truncated Singular Value Decomposition) method for a given row. + +# Arguments +- `ctr::MpsContractor{Zipper}`: The MpsContractor object representing the PEPS network contraction with the Zipper method. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed top MPS using the Zipper method for the specified row. + +This function constructs the top Matrix Product State (MPS) using the Zipper (truncated Singular Value Decomposition) method for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing canonicalization, and truncation steps based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps_top(ctr::MpsContractor{Zipper}, i::Int, indβ::Int) + Dcut = ctr.params.bond_dimension + tolV = ctr.params.variational_tol + tolS = ctr.params.tol_SVD + max_sweeps = ctr.params.max_num_sweeps + iters_svd = ctr.params.iters_svd + iters_var = ctr.params.iters_var + Dtemp_multiplier = ctr.params.Dtemp_multiplier + method = ctr.params.method + depth = ctr.depth + if i < 1 + W = mpo(ctr, ctr.layers.main, 1, indβ) + return IdentityQMps(Float64, local_dims(W, :up); onGPU=ctr.onGPU) # F64 for now + end + + ψ = mps_top(ctr, i-1, indβ) + W = transpose(mpo(ctr, ctr.layers.main, i, indβ)) + + canonise!(ψ, :left) + ψ0 = zipper(W, ψ; method=method, Dcut=Dcut, tol=tolS, iters_svd=iters_svd, + iters_var=iters_var, Dtemp_multiplier = Dtemp_multiplier, depth=depth) + canonise!(ψ0, :left) + variational_compress!(ψ0, W, ψ, tolV, max_sweeps) + ψ0 +end + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the (bottom) Matrix Product State (MPS) using the Zipper (truncated Singular Value Decomposition) method for a given row. + +# Arguments +- `ctr::MpsContractor{Zipper}`: The MpsContractor object representing the PEPS network contraction with the Zipper method. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed (bottom) MPS using the Zipper method for the specified row. + +This function constructs the (bottom) Matrix Product State (MPS) using the Zipper (truncated Singular Value Decomposition) method for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing canonicalization, and truncation steps based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps(ctr::MpsContractor{Zipper}, i::Int, indβ::Int) + Dcut = ctr.params.bond_dimension + tolV = ctr.params.variational_tol + tolS = ctr.params.tol_SVD + max_sweeps = ctr.params.max_num_sweeps + iters_svd = ctr.params.iters_svd + iters_var = ctr.params.iters_var + Dtemp_multiplier = ctr.params.Dtemp_multiplier + method = ctr.params.method + depth = ctr.depth + + if i > ctr.peps.nrows + W = mpo(ctr, ctr.layers.main, ctr.peps.nrows, indβ) + ψ0 = IdentityQMps(Float64, local_dims(W, :down); onGPU=ctr.onGPU) # Float64 for now + else + ψ = mps(ctr, i+1, indβ) + W = mpo(ctr, ctr.layers.main, i, indβ) + canonise!(ψ, :left) + ψ0 = zipper(W, ψ; method=method, Dcut=Dcut, tol=tolS, iters_svd=iters_svd, + iters_var=iters_var, Dtemp_multiplier=Dtemp_multiplier, depth=depth) + canonise!(ψ0, :left) + variational_compress!(ψ0, W, ψ, tolV, max_sweeps) + end + ψ0 +end + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the (bottom) top Matrix Product State (MPS) using the Annealing method for a given row. + +# Arguments +- `ctr::MpsContractor{MPSAnnealing}`: The MpsContractor object representing the PEPS network contraction with the Annealing method. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed (bottom) top MPS using the Annealing method for the specified row. + +This function constructs the (bottom) top Matrix Product State (MPS) using the Annealing method for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing variational compression steps based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps_top(ctr::MpsContractor{MPSAnnealing}, i::Int, indβ::Int) + if i < 1 + W = mpo(ctr, ctr.layers.main, 1, indβ) + return IdentityQMps(Float64, local_dims(W, :up); onGPU=ctr.onGPU) # F64 for now + end + + ψ = mps_top(ctr, i-1, indβ) + W = transpose(mpo(ctr, ctr.layers.main, i, indβ)) + + if indβ > 1 + ψ0 = mps_top(ctr, i, indβ-1) + else + ψ0 = IdentityQMps(Float64, local_dims(W, :up), ctr.params.bond_dimension; onGPU=ctr.onGPU) # F64 for now + # ψ0 = IdentityQMps(Float64, local_dims(W, :down), ctr.params.bond_dimension) # F64 for now + canonise!(ψ0, :left) + end + variational_compress!( + ψ0, + W, + ψ, + ctr.params.variational_tol, + ctr.params.max_num_sweeps, + ) + ψ0 +end + +""" +$(TYPEDSIGNATURES) + +Construct and memoize the (bottom) Matrix Product State (MPS) using the Annealing method for a given row. + +# Arguments +- `ctr::MpsContractor{MPSAnnealing}`: The MpsContractor object representing the PEPS network contraction with the Annealing method. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta values. + +# Returns +- `QMps`: The constructed (bottom) MPS using the Annealing method for the specified row. + +This function constructs the (bottom) Matrix Product State (MPS) using the Annealing method for a given row in the PEPS network contraction. It recursively builds the MPS row by row, performing variational compression steps based on the specified parameters in `ctr.params`. The resulting MPS is memoized for efficient reuse. +""" +@memoize Dict function mps(ctr::MpsContractor{MPSAnnealing}, i::Int, indβ::Int) + if i > ctr.peps.nrows + W = mpo(ctr, ctr.layers.main, ctr.peps.nrows, indβ) + return IdentityQMps(Float64, local_dims(W, :down); onGPU=ctr.onGPU) # F64 for now + end + + ψ = mps(ctr, i+1, indβ) + W = mpo(ctr, ctr.layers.main, i, indβ) + + if indβ > 1 + ψ0 = mps(ctr, i, indβ-1) + else + ψ0 = IdentityQMps(Float64, local_dims(W, :up), ctr.params.bond_dimension; onGPU=ctr.onGPU) # F64 for now + canonise!(ψ0, :left) + end + + variational_compress!( + ψ0, + W, + ψ, + ctr.params.variational_tol, + ctr.params.max_num_sweeps + ) + ψ0 +end + +""" +$(TYPEDSIGNATURES) + +Construct dressed Matrix Product State (MPS) for a given row and strategy. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. +- `i::Int`: The current row index. + +# Returns +- `QMps`: The constructed dressed MPS for the specified row. + +This function constructs the dressed Matrix Product State (MPS) for a given row in the PEPS network contraction using the specified strategy. It internally calculates the length of the `ctr.betas` vector and then calls `dressed_mps(ctr, i, length(ctr.betas))` to construct the dressed MPS with the given parameters. +""" +function dressed_mps(ctr::MpsContractor{T}, i::Int) where T <: AbstractStrategy + dressed_mps(ctr, i, length(ctr.betas)) +end + +""" +$(TYPEDSIGNATURES) + +Construct (and memoize) dressed Matrix Product State (MPS) for a given row and strategy. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. +- `i::Int`: The current row index. +- `indβ::Int`: The index of the beta parameter vector used for construction. + +# Returns +- `QMps`: The constructed dressed MPS for the specified row and strategy. + +This function constructs the dressed Matrix Product State (MPS) for a given row in the PEPS network contraction using the specified strategy and memoizes the result for future use. It takes into account the beta parameter index `indβ` and internally calls other functions such as `mps` and `mpo` to construct the dressed MPS. Additionally, it normalizes the MPS tensors to ensure numerical stability. + +Note: The memoization ensures that the dressed MPS is only constructed once for each combination of arguments and is reused when needed. +""" +@memoize Dict function dressed_mps( + ctr::MpsContractor{T}, i::Int, indβ::Int +) where T <: AbstractStrategy + + ψ = mps(ctr, i+1, indβ) + caches = Memoization.find_caches(mps) + delete!(caches[mps], ((ctr, i+1, indβ), ())) + if ctr.onGPU + ψ = move_to_CUDA!(ψ) + end + W = mpo(ctr, ctr.layers.dress, i, indβ) + ϕ = dot(W, ψ) + for j ∈ ϕ.sites + nrm = maximum(abs.(ϕ[j])) + if !iszero(nrm) ϕ[j] ./= nrm end + end + ϕ +end + +""" +$(TYPEDSIGNATURES) + +Construct (and memoize) the right environment tensor for a given node in the PEPS network contraction. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. +- `i::Int`: The current row index. +- `∂v::Vector{Int}`: A vector representing the partial environment configuration. +- `indβ::Int`: The index of the beta parameter vector used for construction. + +# Returns +- `Array{Float64,2}`: The constructed right environment tensor for the specified node. + +This function constructs the right environment tensor for a given node in the PEPS network contraction using the specified strategy and memoizes the result for future use. It takes into account the beta parameter index `indβ` and internally calls other functions such as `dressed_mps` and `mpo` to construct the right environment tensor. Additionally, it normalizes the right environment tensor to ensure numerical stability. + +Note: The memoization ensures that the right environment tensor is only constructed once for each combination of arguments and is reused when needed. +""" +@memoize Dict function right_env( + ctr::MpsContractor{T}, i::Int, ∂v::Vector{Int}, indβ::Int +) where T <: AbstractStrategy + l = length(∂v) + if l == 0 return ctr.onGPU ? CUDA.ones(Float64, 1, 1) : ones(Float64, 1, 1) end + + R̃ = right_env(ctr, i, ∂v[2:l], indβ) + if ctr.onGPU + R̃ = CuArray(R̃) + end + ϕ = dressed_mps(ctr, i, indβ) + W = mpo(ctr, ctr.layers.right, i, indβ) + k = length(ϕ.sites) + site = ϕ.sites[k-l+1] + M = W[site] + B = ϕ[site] + + RR = update_reduced_env_right(R̃, ∂v[1], M, B) + + ls_mps = left_nbrs_site(site, ϕ.sites) + ls = left_nbrs_site(site, W.sites) + + while ls > ls_mps + RR = update_reduced_env_right(RR, W[ls].ctr) + ls = left_nbrs_site(ls, W.sites) + end + nmr = maximum(abs.(RR)) + if ~iszero(nmr) + RR ./= nmr + end + if typeof(RR) <: CuArray + RR = Array(RR) + end + RR +end + + +""" +$(TYPEDSIGNATURES) +Construct (and memoize) the left environment tensor for a given node in the PEPS network contraction. + +# Arguments +- `ctr::MpsContractor{T}`: The MpsContractor object representing the PEPS network contraction. +- `i::Int`: The current row index. +- `∂v::Vector{Int}`: A vector representing the partial environment configuration. +- `indβ::Int`: The index of the beta parameter vector used for construction. + +# Returns +- `Array{Float64,2}`: The constructed left environment tensor for the specified node. + +This function constructs the left environment tensor for a given node in the PEPS network contraction using the specified strategy and memoizes the result for future use. It takes into account the beta parameter index `indβ` and internally calls other functions such as `dressed_mps` to construct the left environment tensor. Additionally, it normalizes the left environment tensor to ensure numerical stability. + +Note: The memoization ensures that the left environment tensor is only constructed once for each combination of arguments and is reused when needed. + +""" +@memoize Dict function left_env( + ctr::MpsContractor{T}, i::Int, ∂v::Vector{Int}, indβ::Int +) where T + l = length(∂v) + if l == 0 return ctr.onGPU ? CUDA.ones(Float64, 1) : ones(Float64, 1) end + + L̃ = left_env(ctr, i, ∂v[1:l-1], indβ) + ϕ = dressed_mps(ctr, i, indβ) + m = ∂v[l] + site = ϕ.sites[l] + M = ϕ[site] + + @matmul L[x] := sum(α) L̃[α] * M[α, x, $m] + nmr = maximum(abs.(L)) + iszero(nmr) ? L : L ./ nmr +end + +""" +$(TYPEDSIGNATURES) +Clear all memoization caches used by the PEPS network contraction. + +This function clears all memoization caches that store previously computed results for various operations and environments in the PEPS network contraction. +Memoization is used to optimize the contraction process by avoiding redundant computations. +Calling this function removes all cached results, which can be useful when you want to free up memory or ensure that the caches are refreshed with updated data. +""" +function clear_memoize_cache() + Memoization.empty_all_caches!() +end + +""" +$(TYPEDSIGNATURES) + +Clear memoization caches for specific operations after processing a row. +This function clears the memoization caches for specific operations used in the PEPS network contraction after processing a row. +The cleared operations include `left_env`, `right_env`, `mpo`, and `dressed_mps`. Memoization is used to optimize the contraction process by avoiding redundant computations. +Calling this function allows you to clear the caches for these specific operations, which can be useful when you want to free up memory or ensure that the caches are refreshed with updated data after processing a row in the contraction. +""" +function clear_memoize_cache_after_row() + Memoization.empty_cache!.((left_env, right_env, mpo, dressed_mps)) +end + +""" +$(TYPEDSIGNATURES) +Clear memoization cache for specific operations for a given row and index beta. + +This function clears the memoization cache for specific operations used in the PEPS network contraction for a given row and index beta (indβ). +The cleared operations include `mps_top`, `mps`, `mpo`, `dressed_mps`, and related operations. +Memoization is used to optimize the contraction process by avoiding redundant computations. +Calling this function allows you to clear the cache for these specific operations for a particular row and index beta, which can be useful when you want to free up memory or ensure that the cache is refreshed with updated data for a specific computation. + +# Arguments +- `ctr::MpsContractor{T, S}`: The PEPS network contractor object. +- `row::Site`: The row for which the cache should be cleared. +- `indβ::Int`: The index beta for which the cache should be cleared. + +""" +function clear_memoize_cache(ctr::MpsContractor{T, S}, row::Site, indβ::Int) where {T, S} + for ind ∈ 1:indβ # indbeta a vector? + for i ∈ row:ctr.peps.nrows + delete!(Memoization.caches[mps_top], ((ctr, i, ind), ())) + end + for i ∈ 1:row+1 + delete!(Memoization.caches[mps], ((ctr, i, ind), ())) + end + for i ∈ row:row+2 + cmpo = Memoization.caches[mpo] + delete!(cmpo, ((ctr, ctr.layers.main, i, ind), ())) + delete!(cmpo, ((ctr, ctr.layers.dress, i, ind), ())) + delete!(cmpo, ((ctr, ctr.layers.right, i, ind), ())) + end + + end +end + + +function sweep_gauges!( + ctr::MpsContractor{T, GaugeStrategy}, + row::Site, + indβ::Int, + tol::Real=1E-4, + max_sweeps::Int=10 +) where T + clm = ctr.layers.main + ψ_top = mps_top(ctr, row, indβ) + ψ_bot = mps(ctr, row + 1, indβ) + + ψ_top = deepcopy(ψ_top) + ψ_bot = deepcopy(ψ_bot) + + onGPU = ψ_top.onGPU && ψ_bot.onGPU + + gauges = optimize_gauges_for_overlaps!!(ψ_top, ψ_bot, tol, max_sweeps) + + for i ∈ ψ_top.sites + g = gauges[i] + g_inv = 1.0 ./ g + @inbounds n_bot = PEPSNode(row + 1 + clm[i][begin], i) + @inbounds n_top = PEPSNode(row + clm[i][end], i) + top = ctr.peps.gauges.data[n_top] + bot = ctr.peps.gauges.data[n_bot] + onGPU ? top = CuArray(top) : top + onGPU ? bot = CuArray(bot) : bot + g_top = top .* g + g_bot = bot .* g_inv + push!(ctr.peps.gauges.data, n_top => g_top, n_bot => g_bot) + end + clear_memoize_cache(ctr, row, indβ) +end + + +function sweep_gauges!( + ctr::MpsContractor{T, GaugeStrategyWithBalancing}, + row::Site, + indβ::Int, + ) where T + clm = ctr.layers.main + ψ_top = mps_top(ctr, row, indβ) + ψ_bot = mps(ctr, row + 1, indβ) + ψ_top = deepcopy(ψ_top) + ψ_bot = deepcopy(ψ_bot) + for i ∈ ψ_top.sites + @inbounds n_bot = PEPSNode(row + 1 + clm[i][begin], i) + @inbounds n_top = PEPSNode(row + clm[i][end], i) + ρ = overlap_density_matrix(ψ_top, ψ_bot, i) + _, _, scale = LinearAlgebra.LAPACK.gebal!('S', ρ) + push!(ctr.peps.gauges.data, n_top => 1.0 ./ scale, n_bot => scale) + end + clear_memoize_cache(ctr, row, indβ) + ψ_top * ψ_bot +end + + +function sweep_gauges!( + ctr::MpsContractor{T, NoUpdate}, + row::Site, + indβ::Int, + tol::Real=1E-4, + max_sweeps::Int=10 +) where T + +end + + +function update_gauges!( + ctr::MpsContractor{T, S}, + row::Site, + indβ::Vector{Int}, + ::Val{:down} +) where {T, S} + for j ∈ indβ, i ∈ 1:row-1 + sweep_gauges!(ctr, i, j) + end +end + + +function update_gauges!( + ctr::MpsContractor{T, S}, + row::Site, + indβ::Vector{Int}, + ::Val{:up} +) where {T, S} + for j ∈ indβ, i ∈ row-1:-1:1 + sweep_gauges!(ctr, i, j) + end +end + +function boundary_states( + ctr::MpsContractor{T}, states::Vector{Vector{Int}}, node::S +) where {T, S} + boundary_recipe = boundary(ctr, node) + res = ones(Int, length(states), length(boundary_recipe)) + for (i, node) ∈ enumerate(boundary_recipe) + @inbounds res[:, i] = boundary_indices(ctr, node, states) + end + [res[r, :] for r ∈ 1:size(res, 1)] +end + + +function boundary(ctr::MpsContractor{T}, node::Node) where T + boundary(layout(ctr.peps), ctr, node) +end + + +function local_state_for_node( + ctr::MpsContractor{T}, σ::Vector{Int}, w::S +) where {T, S} + k = get(ctr.node_search_index, w, 0) + 0 < k <= length(σ) ? σ[k] : 1 +end + + +function boundary_indices( + ctr::MpsContractor{T}, + nodes::Union{NTuple{2, S}, Tuple{S, NTuple{N, S}}}, + states::Vector{Vector{Int}} +) where {T, S, N} + v, w = nodes + if ctr.peps.vertex_map(v) ∈ vertices(ctr.peps.clustered_hamiltonian) + @inbounds idx = [σ[ctr.node_search_index[v]] for σ ∈ states] + return @inbounds projector(ctr.peps, v, w)[idx] + end + ones(Int, length(states)) +end + +""" +$(TYPEDSIGNATURES) + +boundary index formed from outer product of two projectors +""" +function boundary_indices( + ctr::MpsContractor{T}, + nodes::Union{NTuple{4, S}, Tuple{S, NTuple{2, S}, S, NTuple{2, S}}}, + states::Vector{Vector{Int}} +) where {S, T} + v, w, k, l = nodes + pv = projector(ctr.peps, v, w) + i = boundary_indices(ctr, (v, w), states) + j = boundary_indices(ctr, (k, l), states) + (j .- 1) .* maximum(pv) .+ i +end + +function boundary_indices( + ctr::MpsContractor{T}, + nodes::Tuple{S, NTuple{2, S}, S, NTuple{2, S}, S, NTuple{2, S}, S, NTuple{2, S}}, + states::Vector{Vector{Int}} +) where {S, T} + v1, v2, v3, v4, v5, v6, v7, v8 = nodes + pv1 = projector(ctr.peps, v1, v2) + pv3 = projector(ctr.peps, v3, v4) + mm = maximum(pv1) * maximum(pv3) + i = boundary_indices(ctr, (v1, v2, v3, v4), states) + j = boundary_indices(ctr, (v5, v6, v7, v8), states) + (j .- 1) .* mm .+ i +end diff --git a/src/droplets.jl b/src/droplets.jl new file mode 100644 index 00000000..82055d66 --- /dev/null +++ b/src/droplets.jl @@ -0,0 +1,553 @@ +# droplets.jl: This file provides functions for finding droplets and operating on them. + +export + NoDroplets, + SingleLayerDroplets, + Flip, + Droplet, + Droplets, + hamming_distance, + unpack_droplets, + perm_droplet, + filter_droplets, + my_push!, + diversity_metric, + merge_droplets, + flip_state + +struct NoDroplets end + +Base.iterate(drop::NoDroplets) = nothing +Base.copy(s::NoDroplets) = s +Base.getindex(s::NoDroplets, ::Any) = NoDroplets() + +""" +A data structure representing the properties and criteria for single-layer droplets in the context of the SpinGlassPEPS package. + +A `SingleLayerDroplets` object is used to specify the maximum energy, minimum size, and metric for single-layer droplets in the SpinGlassPEPS system. + +## Fields +- `max_energy::Real`: The maximum allowed excitation energy for single-layer droplets. It is typically a real number. +- `min_size::Int`: The minimum size (Hamming cutoff) required for a single-layer droplet to be considered significant. +- `metric::Symbol`: The metric used to evaluate the significance of a single-layer droplet. Default is `:no_metric`. `:hamming` treats Hamming distances as matric. +- `mode::Symbol`: `:Ising` assumes Ising-type representation of the problem. `:RMF` assumes a Random Markov Field type model. Default is `:Ising`. + +## Constructors +- `SingleLayerDroplets(max_energy::Real = 1.0, min_size::Int = 1, metric::Symbol = :no_metric, mode = :Ising)`: Creates a new `SingleLayerDroplets` object with the specified maximum energy, minimum size, metric and mode. + +""" +struct SingleLayerDroplets + max_energy::Real + min_size::Int + metric::Symbol + mode::Symbol + SingleLayerDroplets( + max_energy = 1.0, + min_size = 1, + metric = :no_metric, + mode = :Ising + ) = new(max_energy, min_size, metric, mode) +end + +""" +A data structure representing a set of flips or changes in states for nodes in the SpinGlassPEPS package. + +A `Flip` object contains information about the support, state changes, and spinxor values for a set of node flips in the SpinGlassPEPS system. + +## Fields +- `support::Vector{Int}`: An array of integers representing the indices of nodes where flips occur. +- `state::Vector{Int}`: An array of integers representing the new states for the nodes in the `support`. +- `spinxor::Vector{Int}`: An array of integers representing the spin-xor values for the nodes in the `support`. + +## Constructors +- `Flip(support::Vector{Int}, state::Vector{Int}, spinxor::Vector{Int})`: +Creates a new `Flip` object with the specified support, state changes, and spinxor values. + +""" +struct Flip + support::Vector{Int} + state::Vector{Int} + spinxor::Vector{Int} + statexor::Vector{Int} +end + +""" +$(TYPEDSIGNATURES) +A data structure representing a droplet in the context of the SpinGlassPEPS package. +A `Droplet` represents an excitation in the SpinGlassPEPS system. It contains information about the excitation energy, +the site where the droplet starts, the site where it ends, the states of nodes flipped by the droplet, +and any sub-droplets on top of the current droplet. + +## Fields +- `denergy::Real`: The excitation energy of the droplet, typically a real number. +- `first::Int`: The site index where the droplet starts. +- `last::Int`: The site index where the droplet ends. +- `flip::Flip`: The states of nodes flipped by the droplet, often represented using a `Flip` type. +- `droplets::Union{NoDroplets, Vector{Droplet}}`: A field that can be either `NoDroplets()` if there are no sub-droplets +on top of the current droplet or a vector of `Droplet` objects representing sub-droplets. +This field may be used to build a hierarchy of droplets in more complex excitations. + +""" +mutable struct Droplet + denergy::Real # excitation energy + first::Int # site where droplet starts + last::Int + flip::Flip # states of nodes flipped by droplet + droplets::Union{NoDroplets, Vector{Droplet}} # subdroplets on top of the current droplet; can be empty +end + +Droplets = Union{NoDroplets, Vector{Droplet}} # Can't be defined before Droplet struct + +""" +$(TYPEDSIGNATURES) + +This is a method used to calculate excitation information for the `NoDroplets` strategy in the context of a SpinGlassPEPS contractor. +The `NoDroplets` strategy represents a scenario in which no droplets are present in the system, and therefore, no excitation information is calculated. + +## Arguments +- `method::NoDroplets`: An instance of the `NoDroplets` strategy. +- `ctr::MpsContractor{T}`: A SpinGlassPEPS contractor of type `T` representing the system. +- `best_idx::Int`: The index of the best state. +- `energies::Vector{<:Real}`: A vector of energies associated with different states. +- `states::Vector{Vector{Int}}`: A vector of states represented as arrays of integers. +- `droplets::Vector{Droplets}`: A vector of droplets in the system. +- `spins::Vector{Vector{Int}}`: A vector of spin configurations associated with states. + +## Returns +- `NoDroplets()`: An instance of the `NoDroplets` strategy indicating that no excitation information is calculated in this scenario. +""" +(method::NoDroplets)( + ctr::MpsContractor{T}, + best_idx::Int, + energies::Vector{<:Real}, + states::Vector{Vector{Int}}, + droplets::Vector{Droplets}, + spins::Vector{Vector{Int}} +) where T = NoDroplets() + +# """ +# $(TYPEDSIGNATURES) + +# This method calculates excitation information for the `SingleLayerDroplets` strategy in the context of a SpinGlassPEPS contractor. +# The `SingleLayerDroplets` strategy represents a scenario in which excitations are calculated for single-layer droplets. + +# ## Arguments +# - `method::SingleLayerDroplets`: An instance of the `SingleLayerDroplets` strategy. +# - `ctr::MpsContractor{T}`: A SpinGlassPEPS contractor of type `T` representing the system. +# - `best_idx::Int`: The index of the best state. +# - `energies::Vector{<:Real}`: A vector of energies associated with different states. +# - `states::Vector{Vector{Int}}`: A vector of states represented as arrays of integers. +# - `droplets::Vector{Droplets}`: A vector of droplets in the system. +# - `spins::Vector{Vector{Int}}`: A vector of spin configurations associated with states. + +# ## Returns +# A new `Droplets` object representing the updated droplets based on the `SingleLayerDroplets` strategy +# """ +function (method::SingleLayerDroplets)( + ctr::MpsContractor{T}, + best_idx::Int, + energies::Vector{<:Real}, + states::Vector{Vector{Int}}, + droplets::Vector{Droplets}, + spins::Vector{Vector{Int}} +) where T + ndroplets = copy(droplets[best_idx]) + bstate = states[best_idx] + benergy = energies[best_idx] + bspin = spins[best_idx] + + for ind ∈ (1 : best_idx - 1..., best_idx + 1 : length(energies)...) + flip_support = findall(bstate .!= states[ind]) + flip_state = states[ind][flip_support] + flip_spinxor = bspin[flip_support] .⊻ spins[ind][flip_support] + flip_statexor = bstate[flip_support] .⊻ states[ind][flip_support] + flip = Flip(flip_support, flip_state, flip_spinxor, flip_statexor) + denergy = energies[ind] - benergy + droplet = Droplet(denergy, flip_support[1], length(bstate), flip, NoDroplets()) + if droplet.denergy <= method.max_energy && hamming_distance(droplet.flip, method.mode) >= method.min_size + ndroplets = my_push!(ndroplets, droplet, method) + end + for subdroplet ∈ droplets[ind] + new_droplet = merge_droplets(method, droplet, subdroplet) + if new_droplet.denergy <= method.max_energy && hamming_distance(new_droplet.flip, method.mode) >= method.min_size + ndroplets = my_push!(ndroplets, new_droplet, method) + end + end + end + if typeof(ndroplets) == NoDroplets + return ndroplets + else + return filter_droplets(ndroplets, method) + end +end + +""" +$(TYPEDSIGNATURES) + +Filter a vector of droplets based on specified criteria and strategy parameters. + +## Arguments +- `all_droplets::Vector{Droplet}`: A vector of `Droplet` objects representing the droplets to be filtered. +- `method::SingleLayerDroplets`: An instance of the `SingleLayerDroplets` strategy used to determine filtering criteria. + +## Returns +- `filtered_droplets::Vector{Droplet}`: A filtered vector of `Droplet` objects based on the specified criteria and strategy parameters. +""" +function filter_droplets(all_droplets::Vector{Droplet}, method::SingleLayerDroplets) + sorted_droplets = sort(all_droplets, by = droplet -> (droplet.denergy)) + if method.metric == :hamming + cutoff = method.min_size + else #method.metric == :no_metric + cutoff = -Inf + end + + filtered_droplets = Droplet[] + for droplet in sorted_droplets + should_push = true + for existing_drop in filtered_droplets + if diversity_metric(existing_drop, droplet, method.metric, method.mode) < cutoff + should_push = false + break + end + end + if should_push + push!(filtered_droplets, droplet) + end + end + filtered_droplets +end + +""" +$(TYPEDSIGNATURES) + +Push a 'Droplet' object into a vector of droplets ('Droplets') while considering the strategy parameters. + +## Arguments +- `ndroplets::Droplets`: A vector of 'Droplet' objects to which the new 'Droplet' object will be added. +- `droplet::Droplet`: The 'Droplet' object to be added to the vector. +- `method`: The strategy parameter that determines whether or not the 'Droplet' object is added based on the defined criteria. + +## Returns +- `ndroplets::Droplets`: The updated vector of 'Droplet' objects after the addition of the new 'Droplet' object. +""" +function my_push!(ndroplets::Droplets, droplet::Droplet, method) + if typeof(ndroplets) == NoDroplets + ndroplets = Droplet[] + end + push!(ndroplets, droplet) + ndroplets +end + +""" +$(TYPEDSIGNATURES) +Calculate the diversity metric between two 'Droplet' objects based on the specified metric. + +## Arguments +- `drop1::Droplet`: The first 'Droplet' object for comparison. +- `drop2::Droplet`: The second 'Droplet' object for comparison. +- `metric::Symbol`: A symbol specifying the metric to be used for the diversity calculation. Currently, only the "hamming" metric is supported. + +## Returns +- `d::Real`: The calculated diversity metric value between the two 'Droplet' objects. +""" +function diversity_metric(drop1::Droplet, drop2::Droplet, metric::Symbol, mode::Symbol) + if metric == :hamming + d = hamming_distance(drop1.flip, drop2.flip, mode) + else + d = Inf + end + d +end + +""" +$(TYPEDSIGNATURES) + +Calculate the Hamming distance for a 'Flip' object. +## Arguments +- `flip::Flip`: The 'Flip' object for which the Hamming distance will be calculated. + +## Returns +- `d::Int`: The computed Hamming distance. +""" +hamming_distance(flip::Flip, s::Symbol) = hamming_distance(flip, Val(s)) + +hamming_distance(flip::Flip, ::Val{:Ising}) = sum(count_ones(st) for st ∈ flip.spinxor) + +hamming_distance(flip::Flip, ::Val{:RMF}) = sum(count_ones(st) for st ∈ flip.statexor) + +""" +$(TYPEDSIGNATURES) + +Calculate the Hamming distance between two vectors of states. + +## Arguments +- `state1::Vector{Int}`: The first vector. +- `state2::Vector{Int}`: The second vector. + +## Returns +- `d::Int`: The computed Hamming distance. +""" +hamming_distance(state1, state2, s::Symbol) = hamming_distance(state1, state2, Val(s)) + +hamming_distance(state1, state2, ::Val{:Ising}) = sum(count_ones(st) for st ∈ state1 .⊻ state2) + +# hamming_distance(state1, state2) = sum(state1 .!== state2) +hamming_distance(state1, state2, ::Val{:RMF}) = state1 == state2 ? 0 : 1 + +""" +$(TYPEDSIGNATURES) + +Calculate the Hamming distance between two Flip objects representing states with support and flip information. + +## Arguments +- `flip1::Flip`: The first Flip object, containing support, state, and spinxor information. +- `flip2::Flip`: The second Flip object, with support, state, and spinxor information. + +## Returns +- `hd::Int`: The computed Hamming distance between the two Flip objects. +""" +hamming_distance(flip1::Flip, flip2::Flip, s::Symbol) = hamming_distance(flip1, flip2, Val(s)) + +function hamming_distance(flip1::Flip, flip2::Flip, ::Val{:Ising}) + n1, n2, hd = 1, 1, 0 + l1, l2 = length(flip1.support), length(flip2.support) + while (n1 <= l1) && (n2 <= l2) + if flip1.support[n1] == flip2.support[n2] + if flip1.state[n1] != flip2.state[n2] + hd += count_ones(flip1.spinxor[n1] ⊻ flip2.spinxor[n2]) + end + n1 += 1 + n2 += 1 + elseif flip1.support[n1] < flip2.support[n2] + hd += count_ones(flip1.spinxor[n1]) + n1 += 1 + else + hd += count_ones(flip2.spinxor[n2]) + n2 += 1 + end + end + while n1 <= l1 + hd += count_ones(flip1.spinxor[n1]) + n1 += 1 + end + while n2 <= l2 + hd += count_ones(flip2.spinxor[n2]) + n2 += 1 + end + hd +end + +function hamming_distance(flip1::Flip, flip2::Flip, ::Val{:RMF}) + n1, n2, hd = 1, 1, 0 + l1, l2 = length(flip1.support), length(flip2.support) + while (n1 < l1) && (n2 < l2) + if flip1.support[n1] == flip2.support[n2] + if flip1.state[n1] != flip2.state[n2] + hd += 1 + end + n1 += 1 + n2 += 1 + elseif flip1.support[n1] < flip2.support[n2] + n1 += 1 + hd += 1 + else + n2 += 1 + hd += 1 + end + end + if n1 < l1 + hd += l1 - n1 + elseif n2 < l2 + hd += l2 - n2 + end + hd +end + +""" +$(TYPEDSIGNATURES) +Merge two Droplets according to the specified `SingleLayerDroplets` method. + +## Arguments +- `method::SingleLayerDroplets`: The method used to determine whether and how to merge the droplets. +- `droplet::Droplet`: The main droplet to be merged. +- `subdroplet::Droplet`: The subdroplet to be merged with the main droplet. + +## Returns +- `merged_droplet::Droplet`: The merged droplet created based on the merging method. +""" +function merge_droplets(method::SingleLayerDroplets, droplet::Droplet, subdroplet::Droplet) + denergy = droplet.denergy + subdroplet.denergy + first = min(droplet.first, subdroplet.first) + last = max(droplet.last, subdroplet.last) + + flip = droplet.flip + subflip = subdroplet.flip + + i1, i2, i3 = 1, 1, 1 + ln = length(union(flip.support, subflip.support)) + + new_support = zeros(Int, ln) + new_state = zeros(Int, ln) + new_spinxor = zeros(Int, ln) + new_statexor = zeros(Int, ln) + + while i1 <= length(flip.support) && i2 <= length(subflip.support) + if flip.support[i1] == subflip.support[i2] + new_support[i3] = flip.support[i1] + new_state[i3] = subflip.state[i2] + new_spinxor[i3] = flip.spinxor[i1] ⊻ subflip.spinxor[i2] + new_statexor[i3] = flip.statexor[i1] ⊻ subflip.statexor[i2] + i1 += 1 + i2 += 1 + i3 += 1 + elseif flip.support[i1] < subflip.support[i2] + new_support[i3] = flip.support[i1] + new_state[i3] = flip.state[i1] + new_spinxor[i3] = flip.spinxor[i1] + new_statexor[i3] = flip.statexor[i1] + i1 += 1 + i3 += 1 + else # flip.support[i1] > subflip.support[i2] + new_support[i3] = subflip.support[i2] + new_state[i3] = subflip.state[i2] + new_spinxor[i3] = subflip.spinxor[i2] + new_statexor[i3] = subflip.statexor[i2] + i2 += 1 + i3 += 1 + end + end + while i1 <= length(flip.support) + new_support[i3] = flip.support[i1] + new_state[i3] = flip.state[i1] + new_spinxor[i3] = flip.spinxor[i1] + new_statexor[i3] = flip.statexor[i1] + i1 += 1 + i3 += 1 + end + while i2 <= length(subflip.support) + new_support[i3] = subflip.support[i2] + new_state[i3] = subflip.state[i2] + new_spinxor[i3] = subflip.spinxor[i2] + new_statexor[i3] = subflip.statexor[i2] + i2 += 1 + i3 += 1 + end + flip = Flip(new_support, new_state, new_spinxor, new_statexor) + Droplet(denergy, first, last, flip, NoDroplets()) +end + +""" +$(TYPEDSIGNATURES) + +Apply a flip operation to a state. + +## Arguments +- `state::Vector{Int}`: The original state vector. +- `flip::Flip`: The flip operation to be applied to the state. + +## Returns +- `new_state::Vector{Int}`: The modified state after applying the flip operation. +""" +function flip_state(state::Vector{Int}, flip::Flip) + new_state = copy(state) + new_state[flip.support] .= flip.state + new_state +end + +""" +$(TYPEDSIGNATURES) + +Unpack droplets in a solution structure to create a new solution with individual excitations. + +## Arguments +- `sol`: The input solution containing droplets to be unpacked. +- `β::Real`: The inverse temperature parameter used for probability adjustments. + +## Returns +- `new_sol`: A new solution where droplets are unpacked into individual excitations. +""" +function unpack_droplets(sol, β) # have β in sol ? + energies = typeof(sol.energies[begin])[] + states = typeof(sol.states[begin])[] + probs = typeof(sol.probabilities[begin])[] + degeneracy = typeof(sol.degeneracy[begin])[] + droplets = Droplets[] + spins = typeof(sol.spins[begin])[] + + for i in 1:length(sol.energies) + push!(energies, sol.energies[i]) + push!(states, sol.states[i]) + push!(probs, sol.probabilities[i]) + push!(degeneracy, 1) + push!(droplets, NoDroplets()) + push!(spins, sol.spins[i]) + + for droplet in sol.droplets[i] + push!(energies, sol.energies[i] + droplet.denergy) + push!(states, flip_state(sol.states[i], droplet.flip)) + push!(probs, sol.probabilities[i] - β * droplet.denergy) + push!(degeneracy, 1) + push!(droplets, NoDroplets()) + push!(spins, sol.spins[i]) + end + end + + inds = sortperm(energies) + Solution( + energies[inds], + states[inds], + probs[inds], + degeneracy[inds], + sol.largest_discarded_probability, + droplets[inds], + spins[inds] + ) +end + +""" +$(TYPEDSIGNATURES) +Apply a permutation to a 'NoDroplets' object, resulting in an unchanged 'NoDroplets'. + +## Arguments +- `drop::NoDroplets`: The 'NoDroplets' object that remains unchanged. +- `perm::Vector{Int}`: A permutation vector that is applied to indices. + +## Returns +- `result::NoDroplets`: The 'NoDroplets' object, which remains the same. +""" +perm_droplet(drop::NoDroplets, perm::Vector{Int}) = drop + +""" +$(TYPEDSIGNATURES) +Apply a permutation to a collection of 'Droplet' objects. + +## Arguments +- `drops::Vector{Droplet}`: A vector of 'Droplet' objects to which the permutation is applied. +- `perm::Vector{Int}`: A permutation vector that is applied to indices. + +## Returns +- `result::Vector{Droplet}`: A vector of 'Droplet' objects after applying the permutation. + +""" +function perm_droplet(drops::Vector{Droplet}, perm::Vector{Int}) + [perm_droplet(drop, perm) for drop in drops] +end + +""" +$(TYPEDSIGNATURES) +Apply a permutation to a 'Droplet' object. + +## Arguments +- `drop::Droplet`: A 'Droplet' object to which the permutation is applied. +- `perm::Vector{Int}`: A permutation vector that is applied to indices. + +## Returns +- `result::Droplet`: A 'Droplet' object after applying the permutation. +""" +function perm_droplet(drop::Droplet, perm::Vector{Int}) + flip = drop.flip + support = perm[flip.support] + ind = sortperm(support) + flip = Flip(support[ind], flip.state[ind], flip.spinxor[ind], flip.statexor[ind]) + Droplet(drop.denergy, drop.first, drop.last, flip, perm_droplet(drop.droplets, perm)) +end \ No newline at end of file diff --git a/src/geometry.jl b/src/geometry.jl new file mode 100644 index 00000000..77afe36e --- /dev/null +++ b/src/geometry.jl @@ -0,0 +1,88 @@ +# geometry.jl: This file provides basic stuctures and types needed for constructing PEPS tensor +# network. + +export + site, + Node, + PEPSNode, + AbstractGeometry, + AbstractSparsity, + AbstractTensorsLayout, + Dense, + Sparse, + Gauges, + GaugeInfo, + GaugesEnergy, + EnergyGauges, + EngGaugesEng, + SuperPEPSNode + +abstract type AbstractGeometry end +abstract type AbstractSparsity end +abstract type AbstractTensorsLayout end + +struct Dense <: AbstractSparsity end +struct Sparse <: AbstractSparsity end + +struct GaugesEnergy{T} <: AbstractTensorsLayout end +struct EnergyGauges{T} <: AbstractTensorsLayout end +struct EngGaugesEng{T} <: AbstractTensorsLayout end + +const Node = NTuple{N, Int} where N + +# """ +# $(TYPEDSIGNATURES) +# """ +@inline site(i::Site) = denominator(i) == 1 ? numerator(i) : i + +""" +$(TYPEDSIGNATURES) + +Node for the SquareSingleNode and SquareCrossSingleNode. +""" +struct PEPSNode + i::Site + j::Site + PEPSNode(i::Site, j::Site) = new(site(i), site(j)) +end +Node(node::PEPSNode) = (node.i, node.j) + +""" +$(TYPEDSIGNATURES) + +Node for the Pegasus type. +""" +struct SuperPEPSNode + i::Site + j::Site + k::Int + + SuperPEPSNode(i::Site, j::Site, k::Int) = new(site(i), site(j), k) +end +Node(node::SuperPEPSNode) = (node.i, node.j, node.k) + +""" +$(TYPEDSIGNATURES) + +Defines information how to create gauges. +""" +struct GaugeInfo + positions::NTuple{2, PEPSNode} + attached_tensor::PEPSNode + attached_leg::Int + type::Symbol +end + +""" +$(TYPEDSIGNATURES) + +Stores gauges and corresponding information. +""" +struct Gauges{T <: AbstractGeometry} + data::Dict{PEPSNode, AbstractArray{<:Real}} + info::Vector{GaugeInfo} + + function Gauges{T}(nrows::Int, ncols::Int) where T <: AbstractGeometry + new(Dict{PEPSNode, AbstractArray{<:Real}}(), gauges_list(T, nrows, ncols)) + end +end diff --git a/src/network_operations.jl b/src/network_operations.jl deleted file mode 100644 index eca0477e..00000000 --- a/src/network_operations.jl +++ /dev/null @@ -1,87 +0,0 @@ -export LatticeTransformation, rotation, reflection, all_lattice_transformations - - -struct LatticeTransformation - permutation::NTuple{4,Int} - flips_dimensions::Bool -end - -Base.:(∘)(op1::LatticeTransformation, op2::LatticeTransformation) = LatticeTransformation( - op1.permutation[collect(op2.permutation)], - op1.flips_dimensions ⊻ op2.flips_dimensions, -) - - -function reflection(axis::Symbol) - if axis == :x - perm = (4, 3, 2, 1) - flips = false - elseif axis == :y - perm = (2, 1, 4, 3) - flips = false - elseif axis == :diag - perm = (1, 4, 3, 2) - flips = true - elseif axis == :antydiag - perm = (3, 2, 1, 4) - flips = true - else - throw(ArgumentError("Unknown reflection axis: $(axis)")) - end - LatticeTransformation(perm, flips) -end - - -function rotation(θ::Int) - if θ % 90 != 0 - ArgumentError("Only integral multiplicities of 90° can be passed as θ.") - end - θ = θ % 360 - if θ == 0 - LatticeTransformation((1, 2, 3, 4), false) - elseif θ == 90 - LatticeTransformation((4, 1, 2, 3), true) - else - rotation(θ - 90) ∘ rotation(90) - end -end - - -function check_bounds(m, n) - function _check(i, j) - if i < 1 || i > m || j < 1 || j > n - throw(ArgumentError("Point ($(i), $(j)) not in $(m)x$(n) lattice.")) - end - true - end -end - - -function vertex_map(vert_permutation::NTuple{4,Int}, nrows, ncols) - if vert_permutation == (1, 2, 3, 4) # - f = (i, j) -> (i, j) - elseif vert_permutation == (4, 1, 2, 3) # 90 deg rotation - f = (i, j) -> (nrows - j + 1, i) - elseif vert_permutation == (3, 4, 1, 2) # 180 deg rotation - f = (i, j) -> (nrows - i + 1, ncols - j + 1) - elseif vert_permutation == (2, 3, 4, 1) # 270 deg rotation - f = (i, j) -> (j, ncols - i + 1) - elseif vert_permutation == (2, 1, 4, 3) # :y reflection - f = (i, j) -> (i, ncols - j + 1) - elseif vert_permutation == (4, 3, 2, 1) # :x reflection - f = (i, j) -> (nrows - i + 1, j) - elseif vert_permutation == (1, 4, 3, 2) # :diag reflection - f = (i, j) -> (j, i) - elseif vert_permutation == (3, 2, 1, 4) # :antydiag reflection - f = (i, j) -> (nrows - j + 1, ncols - i + 1) - else - ArgumentError("$(vert_permutation) does not define square isometry.") - end - (tuple) -> f(tuple[1], tuple[2]) -end - -vertex_map(trans::LatticeTransformation, m::Int, n::Int) = - vertex_map(trans.permutation, m, n) - -const all_lattice_transformations = - (rotation.([0, 90, 180, 270])..., reflection.([:x, :y, :diag, :antydiag])...) diff --git a/src/operations.jl b/src/operations.jl new file mode 100644 index 00000000..0ce65e0f --- /dev/null +++ b/src/operations.jl @@ -0,0 +1,181 @@ +# operations.jl: This file profides functions and structs for perfoming operations +# on the whole PEPS tensor network ("lattice"). + +export + LatticeTransformation, + rotation, + reflection, + all_lattice_transformations, + vertex_map, + check_bounds + +""" +$(TYPEDSIGNATURES) + +A struct representing a lattice transformation. + +# Fields +- `permutation::NTuple{4, Int}`: A tuple defining a permutation of the vertex labels. +- `flips_dimensions::Bool`: A boolean indicating whether dimension flips are applied. + +The `LatticeTransformation` struct defines a transformation that can be applied to the vertices of a lattice. +It specifies a permutation of vertex labels, allowing for rotations and reflections, as well as an option to flip dimensions. +""" +struct LatticeTransformation + permutation::NTuple{4, Int} + flips_dimensions::Bool +end + +# """ +# $(TYPEDSIGNATURES) +# """ +function Base.:(∘)(op1::LatticeTransformation, op2::LatticeTransformation) + LatticeTransformation( + op1.permutation[collect(op2.permutation)], + op1.flips_dimensions ⊻ op2.flips_dimensions + ) +end + +""" +$(TYPEDSIGNATURES) +Create a reflection transformation along the specified axis. + +# Arguments +- `axis::Symbol`: The axis of reflection, which can be one of the following: + - `:x` for reflection along the x-axis. + - `:y` for reflection along the y-axis. + - `:diag` for reflection along the main diagonal. + - `:antydiag` for reflection along the anti-diagonal. + +# Returns +A `LatticeTransformation` object representing the specified reflection transformation. +""" +function reflection(axis::Symbol) + if axis == :x + perm = (4, 3, 2, 1) + flips = false + elseif axis == :y + perm = (2, 1, 4, 3) + flips = false + elseif axis == :diag + perm = (1, 4, 3, 2) + flips = true + elseif axis == :antydiag + perm = (3, 2, 1, 4) + flips = true + else + throw(ArgumentError("Unknown reflection axis: $(axis)")) + end + LatticeTransformation(perm, flips) +end + +""" +$(TYPEDSIGNATURES) +Create a rotation transformation by a specified angle. + +# Arguments +- `θ::Int`: The angle of rotation, expressed in degrees. Only integral multiples of 90° can be passed as θ. + +# Returns +A `LatticeTransformation` object representing the specified rotation transformation. +""" +function rotation(θ::Int) + if θ % 90 != 0 + ArgumentError("Only integral multiplicities of 90° can be passed as θ.") + end + θ = θ % 360 + if θ == 0 + LatticeTransformation((1, 2, 3, 4), false) + elseif θ == 90 + LatticeTransformation((4, 1, 2, 3), true) + else + rotation(θ - 90) ∘ rotation(90) + end +end + +""" +$(TYPEDSIGNATURES) +Create a bounds-checking function for a lattice of size (m, n). + +# Arguments +- `m::Int`: The number of rows in the lattice. +- `n::Int`: The number of columns in the lattice. + +# Returns +A bounds-checking function that can be used to ensure that lattice points are within the specified bounds. +""" +function check_bounds(m, n) + function _check(i, j) + if i < 1 || i > m || j < 1 || j > n + throw(ArgumentError("Point ($(i), $(j)) not in $(m)x$(n) lattice.")) + end + true + end +end + +""" +$(TYPEDSIGNATURES) +Create a vertex mapping function for a lattice transformation. + +# Arguments +- `vert_permutation::NTuple{4, Int}`: A permutation of vertex labels, defining a specific lattice transformation. +- `nrows::Int`: The number of rows in the lattice. +- `ncols::Int`: The number of columns in the lattice. + +# Returns +A vertex mapping function `vmap` that takes a tuple of vertex coordinates and returns their new coordinates after applying the specified lattice transformation. +""" +function vertex_map(vert_permutation::NTuple{4, Int}, nrows, ncols) + if vert_permutation == (1, 2, 3, 4) # + f = (i, j) -> (i, j) + elseif vert_permutation == (4, 1, 2, 3) # 90 deg rotation + f = (i, j) -> (nrows - j + 1, i) + elseif vert_permutation == (3, 4, 1, 2) # 180 deg rotation + f = (i, j) -> (nrows - i + 1, ncols - j + 1) + elseif vert_permutation == (2, 3, 4, 1) # 270 deg rotation + f = (i, j) -> (j, ncols - i + 1) + elseif vert_permutation == (2, 1, 4, 3) # :y reflection + f = (i, j) -> (i, ncols - j + 1) + elseif vert_permutation == (4, 3, 2, 1) # :x reflection + f = (i, j) -> (nrows - i + 1, j) + elseif vert_permutation == (1, 4, 3, 2) # :diag reflection + f = (i, j) -> (j, i) + elseif vert_permutation == (3, 2, 1, 4) # :antydiag reflection + f = (i, j) -> (nrows - j + 1, ncols - i + 1) + else + ArgumentError("$(vert_permutation) does not define square isometry.") + end + vmap(node::NTuple{2, Int}) = f(node[1], node[2]) + vmap(node::NTuple{3, Int}) = (f(node[1], node[2])..., node[3]) + vmap +end + +""" +$(TYPEDSIGNATURES) +Create a vertex map function based on a given lattice transformation. + +This function generates a vertex map function that can be used to transform lattice vertex coordinates according to a specified lattice transformation. The `trans` argument should be a `LatticeTransformation` object, and `m` and `n` specify the dimensions of the lattice. + +# Arguments +- `trans::LatticeTransformation`: The lattice transformation to apply. +- `m::Int`: The number of rows in the lattice. +- `n::Int`: The number of columns in the lattice. + +# Returns +A vertex map function that takes vertex coordinates and returns the transformed coordinates. +""" +function vertex_map(trans::LatticeTransformation, m::Int, n::Int) + vertex_map(trans.permutation, m, n) +end + +""" +$(TYPEDSIGNATURES) +A tuple containing all possible lattice transformations. + +This constant includes rotations at angles 0, 90, 180, and 270 degrees, as well as reflections across the x-axis, y-axis, diagonal, and antidiagonal axes. +These lattice transformations can be applied to the PEPS lattice to achieve various orientations and reflections in order to start the search on a different sites of lattice. +""" +const all_lattice_transformations = ( + rotation.([0, 90, 180, 270])..., + reflection.([:x, :y, :diag, :antydiag])... +) diff --git a/src/search.jl b/src/search.jl index ece063d9..377faa98 100644 --- a/src/search.jl +++ b/src/search.jl @@ -1,199 +1,669 @@ -export AbstractGibbsNetwork, - low_energy_spectrum, branch_state, bound_solution, merge_branches, Solution, Memoize - +export + SearchParameters, + merge_branches, + merge_branches_blur, + low_energy_spectrum, + Solution, + bound_solution, + gibbs_sampling, + decode_to_spin, + empty_solution, + branch_energy, + no_merge, + sampling, + branch_probability, + discard_probabilities!, + branch_energies, + branch_states """ -Store results from branch-and-bound search. +$(TYPEDSIGNATURES) +A struct representing search parameters for low-energy spectrum search. + +## Fields +- `max_states::Int`: The maximum number of states to be considered during the search. Default is 1, indicating a single state search. +- `cut_off_prob::Real`: The cutoff probability for terminating the search. Default is 0.0, meaning no cutoff based on probability. -# Fields +SearchParameters encapsulates parameters that control the behavior of low-energy spectrum search algorithms in the SpinGlassPEPS package. +""" +struct SearchParameters + max_states::Int + cut_off_prob::Real - energies::Vector{Float64}: A vector storing the energies of the system. - states::Vector{Vector{Int}}: A vector storing states of the system. These - are states of factor graph representation of the system. - probabilities::Vector{Float64}: A vector storing representing the probabilities - of each state in the states field. Probabilities are kept as `log2`. - degeneracy::Vector{Int}: A vector storing the degeneracy of each energy level in the energies field. - largest_discarded_probability::Float64: A value representing the largest probability that was discarded during the branch-and-bound search . + function SearchParameters(max_states::Int=1, cut_off_prob::Real=0.0) + new(max_states, cut_off_prob) + end +end +""" +$(TYPEDSIGNATURES) +A struct representing a solution obtained from a low-energy spectrum search. + +## Fields +- `energies::Vector{<:Real}`: A vector containing the energies of the discovered states. +- `states::Vector{Vector{Int}}`: A vector of state configurations corresponding to the energies. +- `probabilities::Vector{<:Real}`: The probabilities associated with each discovered state. +- `degeneracy::Vector{Int}`: The degeneracy of each energy level. +- `largest_discarded_probability::Real`: The largest probability of the largest discarded state. +- `droplets::Vector{Droplets}`: A vector of droplets associated with each state. +- `spins::Vector{Vector{Int}}`: The spin configurations corresponding to each state. + +The `Solution` struct holds information about the results of a low-energy spectrum search, including the energy levels, +state configurations, probabilities, degeneracy, and additional details such as droplets and spin configurations. +Users can access this information to analyze and interpret the search results. """ struct Solution - energies::Vector{Float64} + energies::Vector{<:Real} states::Vector{Vector{Int}} - probabilities::Vector{Float64} + probabilities::Vector{<:Real} degeneracy::Vector{Int} - largest_discarded_probability::Float64 + largest_discarded_probability::Real + droplets::Vector{Droplets} + spins::Vector{Vector{Int}} end """ - Solution() +$(TYPEDSIGNATURES) +Create an empty `Solution` object with a specified number of states. + +This function creates an empty `Solution` object with the given number of states, initializing its fields with default values. + +## Arguments +- `n::Int`: The number of states for which the `Solution` object is created. -Creates empty `Solution` +## Returns +An empty `Solution` object with default field values, ready to store search results for a specified number of states. """ -Solution() = Solution([0.0], [[]], [1.0], [1], -Inf) +@inline empty_solution(n::Int=1) = Solution(zeros(n), fill(Vector{Int}[], n), zeros(n), ones(Int, n), + -Inf, repeat([NoDroplets()], n), fill(Vector{Int}[], n)) +""" +$(TYPEDSIGNATURES) +Create a new `Solution` object by selecting specific states from an existing `Solution`. -function branch_state(network, σ) - node = node_from_index(network, length(σ) + 1) - basis = collect(1:length(local_energy(network, node))) - vcat.(Ref(σ), basis) -end +This constructor allows you to create a new `Solution` object by selecting specific states from an existing `Solution`. +It copies the energies, states, probabilities, degeneracy, droplets, and spins information for the selected states +while allowing you to set a custom `largest_discarded_probability`. +## Arguments +- `sol::Solution`: The original `Solution` object from which states are selected. +- `idx::Vector{Int}`: A vector of indices specifying the states to be selected from the original `Solution`. +- `ldp::Real=sol.largest_discarded_probability`: (Optional) The largest discarded probability for the new `Solution`. +By default, it is set to the largest discarded probability of the original `Solution`. -function branch_solution(partial_sol::Solution, network::AbstractGibbsNetwork) - local_dim = length( - local_energy(network, node_from_index(network, length(partial_sol.states[1]) + 1)), - ) - new_energies = vcat( - [ - (en .+ update_energy(network, state)) for - (en, state) ∈ zip(partial_sol.energies, partial_sol.states) - ]..., +## Returns +A new `Solution` object containing information only for the selected states. +""" +function Solution( + sol::Solution, idx::Vector{Int}, ldp::Real=sol.largest_discarded_probability +) + Solution( + sol.energies[idx], + sol.states[idx], + sol.probabilities[idx], + sol.degeneracy[idx], + ldp, + sol.droplets[idx], + sol.spins[idx] ) - new_states = vcat(branch_state.(Ref(network), partial_sol.states)...) - new_probabilities = vcat( - [ - partial_sol.probabilities[i] .+ log.(p) for (i, p) ∈ - enumerate(conditional_probability.(Ref(network), partial_sol.states)) - ]..., +end + +""" +$(TYPEDSIGNATURES) +Calculates the energy contribution of a branch given a base energy and a spin configuration. + +This function calculates the energy contribution of a branch in a SpinGlassPEPS calculation. +It takes a `MpsContractor` object `ctr` and a tuple `eσ` containing a base energy as the first element +and a spin configuration represented as a vector of integers as the second element. +The function calculates the branch energy by adding the base energy to the energy contribution +of the given spin configuration obtained from the `update_energy` function. + +## Arguments +- `ctr::MpsContractor{T}`: An instance of the `MpsContractor` type parameterized by the strategy type `T`. +- `eσ::Tuple{<:Real, Vector{Int}}`: A tuple containing the base energy as the first element (a real number) +and the spin configuration as the second element (a vector of integers). + +## Returns +The branch energy, which is the sum of the base energy and the energy contribution of the spin configuration. +""" +@inline function branch_energy(ctr::MpsContractor{T}, eσ::Tuple{<:Real, Vector{Int}}) where T + eσ[begin] .+ update_energy(ctr, eσ[end]) +end + +""" +$(TYPEDSIGNATURES) +Compute and branch the energies from different branches in a solution. + +## Arguments +- `ctr::MpsContractor{T}`: The MPS contractor. +- `psol::Solution`: The partial solution. + +## Returns +- `Vector{<:Real}`: A vector containing the energies of individual branches. + +## Description +This function computes the energies of branches in a solution by applying the `branch_energy` function +to each pair of energy and state in the given partial solution. +The result is a vector of energies corresponding to the branches. +""" +@inline function branch_energies(ctr::MpsContractor{T}, psol::Solution) where T + reduce(vcat, branch_energy.(Ref(ctr), zip(psol.energies, psol.states))) +end + +""" +$(TYPEDSIGNATURES) +Constructs branch states based on a local basis and vectorized states. + +## Arguments +- `local_basis::Vector{Int}`: The local basis states. +- `vec_states::Vector{Vector{Int}}`: Vectorized states for each branch. + +## Returns +- `Vector{Vector{Int}}`: A vector containing the constructed branch states. + +## Description +This function constructs branch states by combining a local basis with vectorized states. +The local basis provides the unique states for each branch, and the vectorized states represent the state configuration for each branch. +The resulting vector contains the constructed branch states. +""" +function branch_states(local_basis::Vector{Int}, vec_states::Vector{Vector{Int}}) + states = reduce(hcat, vec_states) + num_states = length(local_basis) + lstate, nstates = size(states) + ns = Array{Int}(undef, lstate+1, num_states, nstates) + ns[1:lstate, :, :] .= reshape(states, lstate, 1, nstates) + ns[lstate+1, :, :] .= reshape(local_basis, num_states, 1, 1) + collect(eachcol(reshape(ns, lstate+1, nstates * num_states))) +end + +""" +$(TYPEDSIGNATURES) +Calculates the branch probability for a given state. + +## Arguments +- `ctr::MpsContractor{T}`: The MPS contractor object. +- `pσ::Tuple{<:Real, Vector{Int}}`: Tuple containing the energy and state configuration. + +## Returns +- `Real`: The calculated branch probability. + +## Description +This function calculates the branch probability for a specific state configuration using the conditional probability +provided by the MPS contractor. +The branch probability is computed as the logarithm of the conditional probability of the given state. +The conditional probability is obtained from the MPS contractor. +""" +function branch_probability(ctr::MpsContractor{T}, pσ::Tuple{<:Real, Vector{Int}}) where T + pσ[begin] .+ log.(conditional_probability(ctr, pσ[end])) +end + +""" +$(TYPEDSIGNATURES) +Discards low-probability states from the given solution. + +## Arguments +- `psol::Solution`: The input solution containing states and their probabilities. +- `cut_off_prob::Real`: The cutoff probability below which states will be discarded. + +## Returns +- `Solution`: A new solution with low-probability states discarded. + +## Description +This function removes states from the solution `psol` whose probabilities are below the specified `cut_off_prob`. +It calculates a cutoff probability (`pcut`) based on the maximum probability in `psol` and the provided `cut_off_prob`. +States with probabilities lower than `pcut` are considered discarded. +The largest discarded probability (`ldp`) in the resulting solution is updated based on the +maximum discarded probability among the removed states and the existing `ldp` in `psol`. +""" +function discard_probabilities!(psol::Solution, cut_off_prob::Real) + pcut = maximum(psol.probabilities) + log(cut_off_prob) + if minimum(psol.probabilities) >= pcut return psol end + local_ldp = maximum(psol.probabilities[psol.probabilities .< pcut]) + ldp = max(local_ldp, psol.largest_discarded_probability) + Solution(psol, findall(p -> p >= pcut, psol.probabilities), ldp) +end + +""" +$(TYPEDSIGNATURES) +Retrieve the local spin configurations associated with a vertex in the Gibbs network. + +## Arguments +- `network::AbstractGibbsNetwork{S, T}`: The Gibbs network. +- `vertex::S`: The vertex for which local spins are requested. + +## Returns +- `Vector{Int}`: An array representing the local spin configurations. + +## Description +This function retrieves the local spin configurations associated with a given vertex in the Gibbs network. +The local spins are extracted from the spectrum of the clustered Hamiltonian associated with the vertex. +""" +function local_spins(network::AbstractGibbsNetwork{S, T}, vertex::S) where {S, T} + spectrum(network, vertex).states_int +end + +""" +$(TYPEDSIGNATURES) +Generate a new solution by branching the given partial solution in a contracting Gibbs network. + +## Arguments +- `psol::Solution`: The partial solution. +- `ctr::T`: The contractor representing the contracting Gibbs network. + +## Returns +- `Solution`: A new solution obtained by branching the partial solution in the contracting network. + +## Description +This function generates a new solution by branching the given partial solution in a contracting Gibbs network. +It computes the energies, states, probabilities, degeneracies, discarded probabilities, droplets, and spins for the resulting solution. +The branching process involves considering the current node in the contractor and updating the solution accordingly. +""" +function branch_solution(psol::Solution, ctr::T) where T <: AbstractContractor + num_states = cluster_size(ctr.peps, ctr.current_node) + basis_states = collect(1:num_states) + basis_spins = local_spins(ctr.peps, ctr.current_node) + boundaries = boundary_states(ctr, psol.states, ctr.current_node) + Solution( + branch_energies(ctr, psol), + branch_states(basis_states, psol.states), + reduce(vcat, branch_probability.(Ref(ctr), zip(psol.probabilities, boundaries))), + repeat(psol.degeneracy, inner=num_states), + psol.largest_discarded_probability, + repeat(psol.droplets, inner=num_states),#, + branch_states(basis_spins, psol.spins) ) - degeneracies = repeat(partial_sol.degeneracy, inner = local_dim) - ldp = partial_sol.largest_discarded_probability - Solution(new_energies, new_states, new_probabilities, degeneracies, ldp) end -function merge_branches(network::AbstractGibbsNetwork{S,T}) where {S,T} - function _merge(partial_sol::Solution) - node = node_from_index(network, length(partial_sol.states[1]) + 1) - boundaries = hcat(boundary_state.(Ref(network), partial_sol.states, Ref(node))...)' - _unique_boundaries, indices = SpinGlassNetworks.unique_dims(boundaries, 1) +""" +$(TYPEDSIGNATURES) +Merge branches of a contractor based on specified merge type and droplet update strategy. - sorting_idx = sortperm(indices) - sorted_indices = indices[sorting_idx] - start = 1 +This function merges branches of a contractor (`ctr`) based on a specified merge type (`merge_type`) +and an optional droplet update strategy (`update_droplets`). +It returns a function `_merge` that can be used to merge branches in a solution. - energies = partial_sol.energies[sorting_idx] - states = partial_sol.states[sorting_idx] - probs = partial_sol.probabilities[sorting_idx] - degeneracy = partial_sol.degeneracy[sorting_idx] +## Arguments +- `ctr::MpsContractor{T}`: A contractor for which branches will be merged. +- `merge_type::Symbol=:nofit`: (Optional) The merge type to use. Defaults to `:nofit`. Possible values are `:nofit`, `:fit`, and `:python`. +- `update_droplets=NoDroplets()`: (Optional) The droplet update strategy. Defaults to `NoDroplets()`. You can provide a custom droplet update strategy if needed. - new_energies = [] - new_states = [] - new_probs = [] - new_degeneracy = [] +## Returns +A function `_merge` that can be used to merge branches in a solution. + +## Details +The `_merge` function can be applied to a `Solution` object to merge its branches based on the specified merge type and droplet update strategy. +""" +function merge_branches(ctr::MpsContractor{T}, merge_type::Symbol=:nofit, update_droplets=NoDroplets()) where {T} + function _merge(psol::Solution) + node = get(ctr.nodes_search_order, length(psol.states[1])+1, ctr.node_outside) + boundaries = boundary_states(ctr, psol.states, node) + _, bnd_types = SpinGlassNetworks.unique_dims(boundaries, 1) + sorting_idx = sortperm(bnd_types) + sorted_bnd_types = bnd_types[sorting_idx] + nsol = Solution(psol, Vector{Int}(sorting_idx)) #TODO Vector{Int} should be rm + energies = typeof(nsol.energies[begin])[] + states = typeof(nsol.states[begin])[] + spins = typeof(nsol.spins[begin])[] + probs = typeof(nsol.probabilities[begin])[] + degeneracy = typeof(nsol.degeneracy[begin])[] + droplets = Droplets[] - while start <= size(boundaries, 1) + start = 1 + bsize = size(boundaries, 1) + while start <= bsize stop = start - while stop + 1 <= size(boundaries, 1) && - sorted_indices[start] == sorted_indices[stop+1] + while stop + 1 <= bsize && sorted_bnd_types[start] == sorted_bnd_types[stop+1] stop = stop + 1 end + best_idx_bnd = argmin(@view nsol.energies[start:stop]) + best_idx = best_idx_bnd + start - 1 + + new_degeneracy = 0 + ind_deg = [] + for i in start:stop + if nsol.energies[i] <= nsol.energies[best_idx] + 1E-12 # this is hack for now + new_degeneracy += nsol.degeneracy[i] + push!(ind_deg, i) + end + end - best_idx = argmin(@view energies[start:stop]) + start - 1 + if merge_type == :fit + c = Statistics.median( + ctr.betas[end] .* nsol.energies[start:stop] .+ nsol.probabilities[start:stop] + ) + new_prob = -ctr.betas[end] .* nsol.energies[best_idx] .+ c + push!(probs, new_prob) + elseif merge_type == :nofit + push!(probs, nsol.probabilities[best_idx]) + elseif merge_type == :python + push!(probs, Statistics.mean(nsol.probabilities[ind_deg])) + end - push!(new_energies, energies[best_idx]) - push!(new_states, states[best_idx]) - push!(new_probs, probs[best_idx]) - push!(new_degeneracy, degeneracy[best_idx]) + ## states with unique boundary => we take the one with best energy + ## treat other states with the same boundary as droplets on top of the best one + excitation = update_droplets(ctr, best_idx_bnd, nsol.energies[start:stop], nsol.states[start:stop], + nsol.droplets[start:stop], nsol.spins[start:stop]) + push!(droplets, excitation) + push!(energies, nsol.energies[best_idx]) + push!(states, nsol.states[best_idx]) + push!(degeneracy, new_degeneracy) + push!(spins, nsol.spins[best_idx]) start = stop + 1 end - Solution( - new_energies, - new_states, - new_probs, - new_degeneracy, - partial_sol.largest_discarded_probability, - ) + Solution(energies, states, probs, degeneracy, psol.largest_discarded_probability, droplets, spins) end _merge end +""" +$(TYPEDSIGNATURES) +Generate a function for merging branches in a Gibbs network with a Hamming distance blur. + +## Arguments +- `ctr::MpsContractor{T}`: The contractor representing the contracted Gibbs network. +- `hamming_cutoff::Int`: The Hamming distance cutoff for blur. +- `merge_type::Symbol=:nofit`: The merging strategy, defaults to `:nofit`. +- `update_droplets=NoDroplets()`: Droplet update method, defaults to `NoDroplets()`. + +## Returns +A function `_merge_blur` that can be used to merge branches with Hamming distance blur in a solution. + +## Description +This function generates a function for merging branches in a Gibbs network with Hamming distance blur. +The resulting function takes a partial solution as an input and performs the merging process, considering Hamming distance constraints. +It returns a new solution with the merged branches. +The Hamming distance blur helps in selecting diverse states during the merging process. +States with Hamming distances greater than or equal to the specified cutoff are considered distinct. +""" +function merge_branches_blur(ctr::MpsContractor{T}, hamming_cutoff::Int, merge_type::Symbol=:nofit, update_droplets=NoDroplets()) where {T} + function _merge_blur(psol::Solution) + psol = merge_branches(ctr, merge_type, update_droplets)(psol) + node = get(ctr.nodes_search_order, length(psol.states[1])+1, ctr.node_outside) + boundaries = boundary_states(ctr, psol.states, node) + sorted_indices = sortperm(psol.probabilities, rev=true) + sorted_boundaries = boundaries[sorted_indices] + nsol = Solution(psol, Vector{Int}(sorted_indices)) #TODO Vector{Int} should be rm + selected_boundaries = [] + selected_idx = [] + for (i, state) in enumerate(sorted_boundaries) + if all(hamming_distance(state, s, :Ising) >= hamming_cutoff for s in selected_boundaries) #TODO case with :RMF + push!(selected_boundaries, state) + push!(selected_idx, i) + end + end + Solution(nsol, Vector{Int}(selected_idx)) + end + _merge_blur +end + +""" +$(TYPEDSIGNATURES) +No-op merge function that returns the input `partial_sol` as is. + +This function is a no-op merge function that takes a `Solution` object `partial_sol` as input and returns it unchanged. +It is used as a merge strategy when you do not want to perform any merging of branches in a solution. + +## Arguments +- `partial_sol::Solution`: A `Solution` object representing partial solutions. + +## Returns +The input `partial_sol` object, unchanged. +""" no_merge(partial_sol::Solution) = partial_sol -function bound_solution(partial_sol::Solution, max_states::Int, merge_strategy = no_merge) - if length(partial_sol.probabilities) <= max_states - probs = vcat(partial_sol.probabilities, -Inf) - k = length(probs) - else - probs = partial_sol.probabilities - k = max_states + 1 - end +""" +$(TYPEDSIGNATURES) +Bound the solution to a specified number of states while discarding low-probability states. - indices = partialsortperm(probs, 1:k, rev = true) - new_max_discarded_prob = - max(partial_sol.largest_discarded_probability, probs[indices[end]]) +This function takes a `Solution` object `psol`, bounds it to a specified number of states `max_states`, +and discards low-probability states based on the probability threshold `δprob`. +You can specify a `merge_strategy` for merging branches in the `psol` object. - indices = @view indices[1:k-1] +## Arguments +- `psol::Solution`: A `Solution` object representing the solution to be bounded. +- `max_states::Int`: The maximum number of states to retain in the bounded solution. +- `δprob::Real`: The probability threshold for discarding low-probability states. +- `merge_strategy=no_merge`: (Optional) Merge strategy for branches. Defaults to `no_merge`. - merge_strategy( - Solution( - partial_sol.energies[indices], - partial_sol.states[indices], - partial_sol.probabilities[indices], - partial_sol.degeneracy[indices], - new_max_discarded_prob, - ), - ) +## Returns +A `Solution` object representing the bounded solution with a maximum of `max_states` states. + +""" +function bound_solution( + psol::Solution, max_states::Int, δprob::Real, merge_strategy=no_merge +) + psol = discard_probabilities!(merge_strategy(psol), δprob) + if length(psol.probabilities) <= max_states return psol end + idx = partialsortperm(psol.probabilities, 1:max_states + 1, rev=true) + ldp = max(psol.largest_discarded_probability, psol.probabilities[idx[end]]) + Solution(psol, idx[1:max_states], ldp) end +""" +$(TYPEDSIGNATURES) +Generate a new solution by sampling states based on their probabilities. + +## Arguments +- `psol::Solution`: The partial solution from which to sample states. +- `max_states::Int`: The maximum number of states to sample. +- `δprob::Real`: The probability threshold for discarding states. +- `merge_strategy=no_merge`: The merging strategy, defaults to `no_merge`. + +## Returns +- `Solution`: A new solution obtained by sampling states. + +## Description +This function generates a new solution by sampling states from the given partial solution. +The sampling is performed based on the probabilities associated with each state. +The number of sampled states is determined by the `max_states` argument. +Additionally, states with probabilities below the threshold `δprob` are discarded. +The optional argument `merge_strategy` specifies the merging strategy to be used during the sampling process. +It defaults to `no_merge`, indicating no merging. +""" +function sampling(psol::Solution, max_states::Int, δprob::Real, merge_strategy=no_merge) + prob = exp.(psol.probabilities) + new_prob = cumsum(reshape(prob, :, max_states), dims = 1) + + rr = rand(max_states) + idx = zeros(max_states) + idx_lin = zeros(Int, max_states) + for (i, m) in enumerate(rr) + np = new_prob[:, i] + new_prob[:, i] = np / np[end] + idx[i] = searchsortedfirst(new_prob[:, i], m) + idx_lin[i] = Int((i-1) * size(new_prob, 1) + idx[i]) + end + ldp = 0.0 + Solution(psol, idx_lin, ldp) +end -#TODO: incorporate "going back" move to improve alghoritm """ - low_energy_spectrum( - network::AbstractGibbsNetwork, - max_states::Int, - merge_strategy = no_merge, +$(TYPEDSIGNATURES) +Compute the low-energy spectrum on a quasi-2D graph using branch-and-bound search. + +Merge matching configurations during branch-and-bound search going line by line. +Information about excited states (droplets) is collected during merging, +which allows reconstructing the low-energy spectrum. +It takes as input a `ctr` object representing the PEPS network and the parameters for controlling its contraction, +`sparams` specifying search parameters, `merge_strategy` for merging branches, +and `symmetry` indicating any symmetry constraints. Optionally, you can disable caching using the `no_cache` flag. +Probabilities are kept as log. Results are stored in Solution structure. + +## Arguments +- `ctr::T`: The contractor object representing the PEPS network, which should be a subtype of `AbstractContractor`. +- `sparams::SearchParameters`: Parameters for controlling the search, including the maximum number of states and a cutoff probability. +- `merge_strategy=no_merge`: (Optional) Merge strategy for branches. Defaults to `no_merge`. +- `symmetry::Symbol=:noZ2`: (Optional) Symmetry constraint. Defaults to `:noZ2`. If Z2 symmetry is present in your system, use `:Z2`. +- `no_cache=false`: (Optional) If `true`, disables caching. Defaults to `false`. + +## Returns +A tuple `(sol, s)` containing: +- `sol::Solution`: A `Solution` object representing the computed low-energy spectrum. +- `s::Dict`: A dictionary containing Schmidt spectra for each row of the PEPS network. +""" +function low_energy_spectrum( + ctr::T, sparams::SearchParameters, merge_strategy=no_merge, symmetry::Symbol=:noZ2; no_cache=false, +) where T <: AbstractContractor + # Build all boundary mps + CUDA.allowscalar(false) + + schmidts = Dict() + @showprogress "Preprocessing: " for i ∈ ctr.peps.nrows + 1 : -1 : 2 + ψ0 = mps(ctr, i, length(ctr.betas)) + push!(schmidts, i=> measure_spectrum(ψ0)) + clear_memoize_cache_after_row() + Memoization.empty_cache!(SpinGlassTensors.sparse) + empty!(ctr.peps.lp, :GPU) + if i <= ctr.peps.nrows + ψ0 = mps(ctr, i + 1, length(ctr.betas)) + move_to_CPU!(ψ0) + end + end + + s = Dict() + for k in keys(schmidts) + B = schmidts[k] + v = [] + B = sort!(collect(B)) + for (i, _) in enumerate(B) + push!(v, minimum(B[i][2])) + end + push!(s, k => v) + end + + ψ0 = mps(ctr, 2, length(ctr.betas)) + move_to_CPU!(ψ0) + + # Start branch and bound search + sol = empty_solution() + old_row = ctr.nodes_search_order[1][1] + @showprogress "Search: " for node ∈ ctr.nodes_search_order + ctr.current_node = node + current_row = node[1] + if current_row > old_row + old_row = current_row + clear_memoize_cache_after_row() + empty!(ctr.peps.lp, :GPU) + end + sol = branch_solution(sol, ctr) + if symmetry == :Z2 && length(sol.states[1]) == 1 + indices_with_even_numbers = Int[] + for (index, vector) in enumerate(sol.spins) + if any(iseven, vector) + push!(indices_with_even_numbers, index) + end + end + # if !isempty(indices_with_odd_numbers) + sol = Solution(sol, indices_with_even_numbers) + # end + end + sol = bound_solution(sol, sparams.max_states, sparams.cut_off_prob, merge_strategy) + Memoization.empty_cache!(precompute_conditional) + if no_cache Memoization.empty_all_caches!() end + end + clear_memoize_cache_after_row() + empty!(ctr.peps.lp, :GPU) + + # Translate variable order (network --> factor graph) + inner_perm = sortperm([ + ctr.peps.clustered_hamiltonian.reverse_label_map[idx] + for idx ∈ ctr.peps.vertex_map.(ctr.nodes_search_order) + ]) + + inner_perm_inv = zeros(Int, length(inner_perm)) + inner_perm_inv[inner_perm] = collect(1:length(inner_perm)) + + # Sort using energies as keys + outer_perm = sortperm(sol.energies) + sol = Solution( + sol.energies[outer_perm], + [σ[inner_perm] for σ ∈ sol.states[outer_perm]], + sol.probabilities[outer_perm], + sol.degeneracy[outer_perm], + sol.largest_discarded_probability, + [perm_droplet(drop, inner_perm_inv) for drop in sol.droplets[outer_perm] ], + sol.spins[outer_perm] + # sol.pool_of_flips # TODO + ) + + # Final check if states correspond energies + @assert sol.energies ≈ energy.( + Ref(ctr.peps.clustered_hamiltonian), decode_state.(Ref(ctr.peps), sol.states) ) + sol, s +end -Search for the low-energy spectrum on a quasi-2d graph. +""" +$(TYPEDSIGNATURES) +Perform Gibbs sampling on a spin glass PEPS network. -# Details -Compute the low energy spectrum of an Ising system represented -by a `network` object, using a branch-and-bound search algorithm with a -maximum number of `max_states` states and an optional `merge_strategy`. +This function performs Gibbs sampling on a spin glass PEPS (Projected Entangled Pair State) network using a branch-and-bound search algorithm. It takes as input a `ctr` object representing the PEPS network, `sparams` specifying search parameters, and `merge_strategy` for merging branches. Optionally, you can disable caching using the `no_cache` flag. -# Arguments -- `network::AbstractGibbsNetwork`: PEPS tesnor network representing Ising system. -- `max_states::Int`: The maximum number of states to use in the search algorithm. -- `merge_strategy=no_merge`: An optional argument that specifies the strategy to use - when merging states. The default is no_merge, which means no merging will be performed. +## Arguments -Return value +- `ctr::T`: The contractor object representing the PEPS network, which should be a subtype of `AbstractContractor`. +- `sparams::SearchParameters`: Parameters for controlling the search, including the maximum number of states and a cutoff probability. +- `merge_strategy=no_merge`: (Optional) Merge strategy for branches. Defaults to `no_merge`. +- `no_cache=false`: (Optional) If `true`, disables caching. Defaults to `false`. -The function returns a `Solution` object representing the low energy spectrum of the system. +## Returns +A `Solution` object representing the result of the Gibbs sampling. """ -function low_energy_spectrum( - network::AbstractGibbsNetwork, - max_states::Int, - merge_strategy = no_merge, -) +function gibbs_sampling( + ctr::T, sparams::SearchParameters, merge_strategy=no_merge; no_cache=false, +) where T <: AbstractContractor # Build all boundary mps - @showprogress "Preprocesing: " for i ∈ network.nrows:-1:1 - dressed_mps(network, i) + CUDA.allowscalar(false) + + @showprogress "Preprocessing: " for i ∈ ctr.peps.nrows:-1:1 + dressed_mps(ctr, i) + clear_memoize_cache_after_row() end # Start branch and bound search - sol = Solution() - @showprogress "Search: " for _ ∈ 1:nv(network_graph(network)) - sol = branch_solution(sol, network) - sol = bound_solution(sol, max_states, merge_strategy) - # _clear_cache(network, sol) + sol = empty_solution(sparams.max_states) + old_row = ctr.nodes_search_order[1][1] + @showprogress "Search: " for node ∈ ctr.nodes_search_order + ctr.current_node = node + current_row = node[1] + if current_row > old_row + old_row = current_row + clear_memoize_cache_after_row() + end + sol = branch_solution(sol, ctr) + sol = sampling(sol, sparams.max_states, sparams.cut_off_prob, merge_strategy) + Memoization.empty_cache!(precompute_conditional) + # TODO: clear memoize cache partially + if no_cache Memoization.empty_all_caches!() end end + clear_memoize_cache_after_row() - # Translate variable order (from network to factor graph) + # Translate variable order (network --> factor graph) inner_perm = sortperm([ - factor_graph(network).reverse_label_map[idx] for - idx ∈ network.vertex_map.(iteration_order(network)) + ctr.peps.clustered_hamiltonian.reverse_label_map[idx] + for idx ∈ ctr.peps.vertex_map.(ctr.nodes_search_order) ]) + inner_perm_inv = zeros(Int, length(inner_perm)) + inner_perm_inv[inner_perm] = collect(1:length(inner_perm)) + # Sort using energies as keys outer_perm = sortperm(sol.energies) - Solution( + sol = Solution( sol.energies[outer_perm], [σ[inner_perm] for σ ∈ sol.states[outer_perm]], sol.probabilities[outer_perm], sol.degeneracy[outer_perm], sol.largest_discarded_probability, + [perm_droplet(drop, inner_perm_inv) for drop in sol.droplets[outer_perm]], + sol.spins[outer_perm] + ) + + # Final check if states correspond energies + @assert sol.energies ≈ energy.( + Ref(ctr.peps.clustered_hamiltonian), decode_state.(Ref(ctr.peps), sol.states) ) + sol end diff --git a/src/square_cross_double_node.jl b/src/square_cross_double_node.jl new file mode 100644 index 00000000..0622aa61 --- /dev/null +++ b/src/square_cross_double_node.jl @@ -0,0 +1,793 @@ +export + SquareCrossDoubleNode, + precompute_conditional, + VirtualDoubleNode + + +""" +$(TYPEDSIGNATURES) + +A geometric structure representing a 2-layer grid with nodes arranged in rows and columns, +and additional diagonal edges forming a cross pattern between neighboring nodes. +Each node is labeled with a tuple (i, j, k), where i is the row index, j is the column index, and k is the layer index (1 or 2). + +## Type Parameters +- `T <: AbstractTensorsLayout`: The layout of decomposition of tensors into MPS. Can be `GaugesEnergy`, `EnergyGauges` or `EngGaugesEng`. + +# Constructors +- `SquareCrossSingleNode(layout::T)`: Create a `SquareCrossDoubleNode` with the specified tensor layout. + +## Description +`SquareCrossDoubleNode` is a geometry type that models a double unit cell square lattice with diagonal interaction. +This geometry is suitable for systems with tensors laid out according to the specified `AbstractTensorsLayout`. +It can be used in Pegasus and Zephyr graphs. +""" +struct SquareCrossDoubleNode{T <: AbstractTensorsLayout} <: AbstractGeometry end + +""" +$(TYPEDSIGNATURES) +Create a graph representing a double unit cell square lattice with diagonal interactions. + +## Arguments +- `m::Int`: The number of rows in the lattice. +- `n::Int`: The number of columns in the lattice. + +## Returns +- `AbstractGraph`: A graph representing the double unit cell square lattice with diagonal interactions. + +## Description +The `SquareCrossDoubleNode` function creates a graph representing a double unit cell square lattice +where each lattice site interacts with its nearest neighbor and next nearest neighbor. +The lattice is specified by the number of rows (`m`) and columns (`n`). +The resulting graph is suitable for systems with tensors laid out according to the specified geometry. +""" +function SquareCrossDoubleNode(m::Int, n::Int) + lg = SquareDoubleNode(m, n) + for i ∈ 1:m-1, j ∈ 1:n-1 + add_edge!(lg, (i, j, 1), (i+1, j+1, 1)) + add_edge!(lg, (i, j, 1), (i+1, j+1, 2)) + add_edge!(lg, (i, j, 2), (i+1, j+1, 1)) + add_edge!(lg, (i, j, 2), (i+1, j+1, 2)) + add_edge!(lg, (i+1, j, 1), (i, j+1, 1)) + add_edge!(lg, (i+1, j, 1), (i, j+1, 2)) + add_edge!(lg, (i+1, j, 2), (i, j+1, 1)) + add_edge!(lg, (i+1, j, 2), (i, j+1, 2)) + end + lg +end + +""" +$(TYPEDSIGNATURES) +Create a symbol representing a virtual double node for a dense tensor layout. + +## Arguments +- `::Type{Dense}`: The `Dense` tensor layout type. + +## Returns +- `Symbol`: A symbol representing the virtual double node. + +## Description +The `VirtualDoubleNode` function generates a symbol (`:virtual_double_node`) that represents a virtual double node in the context of a dense tensor layout. +This symbol is often used to indicate the presence of a virtual double node when working with certain tensors. +""" +VirtualDoubleNode(::Type{Dense}) = :virtual_double_node + +""" +$(TYPEDSIGNATURES) +Create a symbol representing a virtual double node for a sparse tensor layout. + +## Arguments +- `::Type{Sparse}`: The `Sparse` tensor layout type. + +## Returns +- `Symbol`: A symbol representing the virtual double node. + +## Description +The `VirtualDoubleNode` function generates a symbol (`:virtual_double_node`) that represents a virtual double node in the context of a sparse tensor layout. +This symbol is often used to indicate the presence of a virtual double node when working with certain tensors. +""" +VirtualDoubleNode(::Type{Sparse}) = :sparse_virtual_double_node + +""" +$(TYPEDSIGNATURES) + +Create a mapping of tensor network nodes for a square cross double node geometry. + +## Arguments +- `::Type{SquareCrossDoubleNode{T}}`: Type representing a square cross double node geometry. +- `::Type{S}`: Type representing sparsity in the tensor network. +- `nrows::Int`: Number of rows in the tensor network. +- `ncols::Int`: Number of columns in the tensor network. + +## Returns +- `Dict{PEPSNode, Symbol}`: A dictionary mapping PEPS nodes to symbols representing their corresponding tensor network nodes. + +## Description +The `tensor_map` function generates a mapping of tensor network nodes for a square cross double node geometry. +The mapping includes different types of nodes, such as site double nodes, virtual double nodes, central vertical double nodes, and central diagonal double nodes. +""" +function tensor_map( + ::Type{SquareCrossDoubleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: Union{EnergyGauges, GaugesEnergy}, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + + for i ∈ 1:nrows, j ∈ 1:ncols + push!( + map, + PEPSNode(i, j) => site_double_node(S), + PEPSNode(i, j - 1//2) => VirtualDoubleNode(S), + PEPSNode(i + 1//2, j) => :central_v_double_node + ) + end + + for i ∈ 1:nrows-1, j ∈ 0:ncols-1 # why from 0? + push!(map, PEPSNode(i + 1//2, j + 1//2) => :central_d_double_node) + end + map +end + + +""" +$(TYPEDSIGNATURES) +Create a list of gauge information for a square cross double node geometry and GaugesEnergy Layout. + +## Arguments +- `::Type{SquareCrossDoubleNode{T}}`: Type representing a square cross double node geometry. +- `nrows::Int`: Number of rows in the tensor network. +- `ncols::Int`: Number of columns in the tensor network. + +## Returns +- `Vector{GaugeInfo}`: A vector of `GaugeInfo` objects representing gauge information for the specified geometry. + +## Description +The `gauges_list` function generates a list of `GaugeInfo` objects for a square cross double node geometry. +Each `GaugeInfo` object contains information about the positions of gauge links, the position of the attached tensor, the leg index, and the type of gauge. +""" +function gauges_list(::Type{SquareCrossDoubleNode{T}}, nrows::Int, ncols::Int) where T <: GaugesEnergy + [ + GaugeInfo( + (PEPSNode(i + 1//6, j), PEPSNode(i + 2//6, j)), + PEPSNode(i + 1//2, j), + 1, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1//2:1//2:ncols + ] +end + +""" +$(TYPEDSIGNATURES) +Create a list of gauge information for a square cross double node geometry and EnergyGauges Layout. + +## Arguments +- `::Type{SquareCrossDoubleNode{T}}`: Type representing a square cross double node geometry. +- `nrows::Int`: Number of rows in the tensor network. +- `ncols::Int`: Number of columns in the tensor network. + +## Returns +- `Vector{GaugeInfo}`: A vector of `GaugeInfo` objects representing gauge information for the specified geometry. + +## Description +The `gauges_list` function generates a list of `GaugeInfo` objects for a square cross double node geometry. +Each `GaugeInfo` object contains information about the positions of gauge links, the position of the attached tensor, the leg index, and the type of gauge. +""" +function gauges_list(::Type{SquareCrossDoubleNode{T}}, nrows::Int, ncols::Int) where T <: EnergyGauges + [ + GaugeInfo( + (PEPSNode(i + 4//6, j), PEPSNode(i + 5//6, j)), + PEPSNode(i + 1//2, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1//2:1//2:ncols + ] +end + + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareCrossDoubleNode geometry with the EnergyGauges layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareCrossDoubleNode{EnergyGauges} + MpoLayers( + Dict(site(i) => (-1//6, 0, 3//6, 4//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (3//6, 4//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (-3//6, 0) for i ∈ 1//2:1//2:ncols), + ) +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareCrossDoubleNode geometry with the GaugesEnergy layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareCrossDoubleNode{GaugesEnergy} + MpoLayers( + Dict(site(i) => (-4//6, -1//2, 0, 1//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (1//6,) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (-3//6, 0) for i ∈ 1//2:1//2:ncols) + ) +end + +""" +$(TYPEDSIGNATURES) + +Precompute conditional probabilities and energies for a square cross double node tensor contraction. + +## Arguments +- `::Type{T}`: Type representing a square cross double node tensor network. +- `ctr::MpsContractor{S}`: Tensor contractor for the tensor network. +- `current_node`: Current node position in the tensor network. + +## Returns +- Tuple: A tuple containing precomputed conditional probabilities and energies. + +## Description +The `precompute_conditional` function computes and returns precomputed conditional probabilities and energies for the specified square cross double node tensor contraction. +It takes into account the geometry of the tensor network, interaction energies, and projectors. +The precomputed values are used during the tensor contraction process to speed up the computation. +The function is specialized for the `SquareCrossDoubleNode` tensor network type and is parametrized by the layout type `S` of the contractor. +""" +@memoize Dict function precompute_conditional( + ::Type{T}, ctr::MpsContractor{S}, current_node +) where {T <: SquareCrossDoubleNode, S} + i, j, k = current_node + β = last(ctr.betas) + if k == 1 + en12 = interaction_energy(ctr.peps, (i, j, 1), (i, j, 2)) + p12 = projector(ctr.peps, (i, j, 1), (i, j, 2)) + p21 = projector(ctr.peps, (i, j, 2), (i, j, 1)) + + plb1 = projector(ctr.peps, (i, j, 1), ((i+1, j-1, 1), (i+1, j-1, 2))) + plb2 = projector(ctr.peps, (i, j, 2), ((i+1, j-1, 1), (i+1, j-1, 2))) + prf1 = projector( + ctr.peps, (i, j, 1), ((i+1, j+1, 1), (i+1, j+1, 2), (i, j+1, 1), (i, j+1, 2), (i-1, j+1, 1), (i-1, j+1, 2)) + ) + prf2 = projector( + ctr.peps, (i, j, 2), ((i+1, j+1, 1), (i+1, j+1, 2), (i, j+1, 1), (i, j+1, 2), (i-1, j+1, 1), (i-1, j+1, 2)) + ) + pd1 = projector(ctr.peps, (i, j, 1), ((i+1, j, 1), (i+1, j, 2))) + pd2 = projector(ctr.peps, (i, j, 2), ((i+1, j, 1), (i+1, j, 2))) + + plb = outer_projector(plb1, plb2) + prf = outer_projector(prf1, prf2) + pd = outer_projector(pd1, pd2) + + eng_loc = [local_energy(ctr.peps, (i, j, k)) for k ∈ 1:2] + + el = [interaction_energy(ctr.peps, (i, j, k), (i, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + pl = [projector(ctr.peps, (i, j, k), (i, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + eng_l = [el[k, m][pl[k, m], :] for k ∈ 1:2, m ∈ 1:2] + + elu = [interaction_energy(ctr.peps, (i, j, k), (i-1, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + plu = [projector(ctr.peps, (i, j, k), (i-1, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + eng_lu = [elu[k, m][plu[k, m], :] for k ∈ 1:2, m ∈ 1:2] + + eu = [interaction_energy(ctr.peps, (i, j, k), (i-1, j, m)) for k ∈ 1:2, m ∈ 1:2] + pu = [projector(ctr.peps, (i, j, k), (i-1, j, m)) for k ∈ 1:2, m ∈ 1:2] + eng_u = [eu[k, m][pu[k, m], :] for k ∈ 1:2, m ∈ 1:2] + + le = en12[p12, p21] + ele = exp.(-β .* (le .- minimum(le))) + + splb = maximum(plb) + + if ctr.onGPU + ele = CuArray(ele) + eng_loc = [CuArray(eng_loc[k]) for k ∈ 1:2] + eng_l = [CuArray(eng_l[k, m]) for k ∈ 1:2, m ∈ 1:2] + eng_lu = [CuArray(eng_lu[k, m]) for k ∈ 1:2, m ∈ 1:2] + eng_u = [CuArray(eng_u[k, m]) for k ∈ 1:2, m ∈ 1:2] + plb = CuArray(plb) + prf = CuArray(prf) + pd = CuArray(pd) + end + + return (ele, eng_loc, eng_l, eng_lu, eng_u, plb, prf, pd, splb) + else + eng_loc = local_energy(ctr.peps, (i, j, 2)) + + el = [interaction_energy(ctr.peps, (i, j, 2), (i, j-1, m)) for m ∈ 1:2] + pl = [projector(ctr.peps, (i, j, 2), (i, j-1, m)) for m ∈ 1:2] + eng_l = [el[m][pl[m], :] for m ∈ 1:2] + + elu = [interaction_energy(ctr.peps, (i, j, 2), (i-1, j-1, m)) for m ∈ 1:2] + plu = [projector(ctr.peps, (i, j, 2), (i-1, j-1, m)) for m ∈ 1:2] + eng_lu = [elu[m][plu[m], :] for m ∈ 1:2] + + eu = [interaction_energy(ctr.peps, (i, j, 2), (i-1, j, m)) for m ∈ 1:2] + pu = [projector(ctr.peps, (i, j, 2), (i-1, j, m)) for m ∈ 1:2] + eng_u = [eu[m][pu[m], :] for m ∈ 1:2] + + en12 = interaction_energy(ctr.peps, (i, j, 1), (i, j, 2)) + p21 = projector(ctr.peps, (i, j, 2), (i, j, 1)) + eng_12 = @view en12[:, p21] + + plb1 = projector(ctr.peps, (i, j, 1), ((i+1, j-1, 1), (i+1, j-1, 2))) + plb2 = projector(ctr.peps, (i, j, 2), ((i+1, j-1, 1), (i+1, j-1, 2))) + prf2 = projector( + ctr.peps, (i, j, 2), ((i+1, j+1, 1), (i+1, j+1, 2), (i, j+1, 1), (i, j+1, 2), (i-1, j+1, 1), (i-1, j+1, 2)) + ) + pd2 = projector(ctr.peps, (i, j, 2), ((i+1, j, 1), (i+1, j, 2))) + + splb1, splb2, sprf2, spd2 = maximum.((plb1, plb2, prf2, pd2)) + + if ctr.onGPU + eng_loc = CuArray(eng_loc) + eng_l = [CuArray(eng_l[m]) for m ∈ 1:2] + eng_lu = [CuArray(eng_lu[m]) for m ∈ 1:2] + eng_u = [CuArray(eng_u[m]) for m ∈ 1:2] + eng_12 = CuArray(eng_12) + plb2 = CuArray(plb2) + prf2 = CuArray(prf2) + pd2 = CuArray(pd2) + end + return (eng_loc, eng_l, eng_lu, eng_u, eng_12, plb2, prf2, pd2, splb1, splb2, sprf2, spd2) + end +end + +""" +$(TYPEDSIGNATURES) +Compute the conditional probability of states for a square cross double node tensor geometry. + +## Arguments +- `::Type{T}`: Type representing a square cross double node tensor network. +- `ctr::MpsContractor{S}`: Tensor contractor for the tensor network. +- `∂v::Vector{Int}`: Vector of indices representing the contracted environment indices. + +## Returns +- Vector{Float64}: Conditional probabilities for different states. + +## Description +The `conditional_probability` function computes the conditional probabilities of different states for a specified square cross double node tensor geometry. +It takes into account the geometry of the tensor network, interaction energies, and precomputed values. +The function supports both left and right environments, and the resulting probabilities are normalized. +The function is specialized for the `SquareCrossDoubleNode` tensor network type and is parametrized by the layout type `S` of the contractor. +""" +function conditional_probability( + ::Type{T}, ctr::MpsContractor{S}, ∂v::Vector{Int} +) where {T <: SquareCrossDoubleNode, S} + indβ, β = length(ctr.betas), last(ctr.betas) + i, j, k = ctr.current_node + + L = left_env(ctr, i, ∂v[1:2*j-2], indβ) + ψ = dressed_mps(ctr, i, indβ) + MX, M = ψ[j - 1//2], ψ[j] + @tensor LMX[y, z] := L[x] * MX[x, y, z] + + if k == 1 # here has to avarage over s2 + R = right_env(ctr, i, ∂v[(2 * j + 12) : end], indβ) + if ctr.onGPU + R = CuArray(R) + end + + ele, eng_loc, eng_l, eng_lu, eng_u, plb, prf, pd, splb = precompute_conditional(T, ctr, ctr.current_node) + + eng_l = [@view eng_l[k, m][:, ∂v[2 * j - 1 + k + (m - 1) * 2]] for k ∈ 1:2, m ∈ 1:2] + eng_lu = [@view eng_lu[k, m][:, ∂v[2 * j + 3 + k + (m - 1) * 2]] for k ∈ 1:2, m ∈ 1:2] + eng_u = [@view eng_u[k, m][:, ∂v[2 * j + 7 + k + (m - 1) * 2]] for k ∈ 1:2, m ∈ 1:2] + en = [ + eng_loc[k] .+ eng_l[k, 1] .+ eng_l[k, 2] .+ eng_lu[k, 1] .+ + eng_lu[k, 2] .+ eng_u[k, 1] .+ eng_u[k, 2] for k ∈ 1:2 + ] + en = [exp.(-β .* (en[k] .- minimum(en[k]))) for k ∈ 1:2] + tele = reshape(en[1], (:, 1)) .* ele .* reshape(en[2], (1, :)) + + @cast LMX4[x, y, v, p] := LMX[(x, y), (v, p)] (x ∈ 1:1, p ∈ 1:splb) + LMX3 = LMX4[:, :, ∂v[2 * j - 1], :] + @cast R3[x, y, p] := R[(x, y), p] (y ∈ 1:1) + + from = 1 + total_size = length(pd) + + total_memory = 2^33 + s1, s2, _ = size(M) + batch_size = max(Int(floor(total_memory / (8 * (s1 * s2 + s1 + s2 + 1)))), 1) + batch_size = Int(2^floor(log2(batch_size) + 1e-6)) + LR = typeof(M) <: CuArray ? CUDA.zeros(eltype(M), total_size) : zeros(eltype(M), total_size) + while from <= total_size + to = min(total_size, from + batch_size - 1) + vplb = @view plb[from:to] + vpd = @view pd[from:to] + vprf = @view prf[from:to] + @inbounds LMX3p = LMX3[:, :, vplb] + @inbounds Mp = M[:, :, vpd] + @inbounds R3p = R3[:, :, vprf] + @inbounds LR[from:to] = dropdims(LMX3p ⊠ Mp ⊠ R3p, dims=(1, 2)) + from = to + 1 + end + LR = reshape(LR, size(tele)) + LR .*= tele + probs = Array(dropdims(sum(LR, dims=2), dims=2)) + else # k == 2 + R = right_env(ctr, i, ∂v[(2 * j + 10) : end], indβ) + if ctr.onGPU + R = CuArray(R) + end + + eng_loc, eng_l, eng_lu, eng_u, eng_12, plb2, prf2, pd2, splb1, splb2, sprf2, spd2 = precompute_conditional(T, ctr, ctr.current_node) #TODO split the line + + eng_l = [@view eng_l[m][:, ∂v[2 * j - 1 + m]] for m ∈ 1:2] + eng_lu = [@view eng_lu[m][:, ∂v[2 * j + 1 + m]] for m ∈ 1:2] + eng_u = [@view eng_u[m][:, ∂v[2 * j + 3 + m]] for m ∈ 1:2] + eng_12 = @view eng_12[∂v[2 * j + 6], :] + + le = eng_loc .+ eng_l[1] .+ eng_l[2] .+ eng_lu[1] .+ eng_lu[2] .+ eng_u[1] .+ eng_u[2] .+ eng_12 + ele = exp.(-β .* (le .- minimum(le))) + + @cast LMX5[x, y, v, p1, p2] := LMX[(x, y), (v, p1, p2)] (p1 ∈ 1:splb1, p2 ∈ 1:splb2, x ∈ 1:1) + LMX3 = LMX5[:, :, ∂v[2 * j - 1], ∂v[2 * j + 7], :] + @cast M4[x, y, p1, p2] := M[x, y, (p1, p2)] (p2 ∈ 1:spd2) + M2 = M4[:, :, ∂v[2 * j + 8], :] + @cast R4[x, y, p1, p2] := R[(x, y), (p1, p2)] (p2 ∈ 1:sprf2, y ∈ 1:1) + R2 = R4[:, :, ∂v[2 * j + 9], :] + LR = dropdims(LMX3[:, :, plb2] ⊠ M2[:, :, pd2] ⊠ R2[:, :, prf2], dims=(1, 2)) + probs = Array(ele .* LR) + end + push!(ctr.statistics, ((i, j), ∂v) => error_measure(probs)) + normalize_probability(probs) +end + +""" +$(TYPEDSIGNATURES) +Generate the search order of nodes for a matrix product states (MPS). + +## Arguments +- `peps::PEPSNetwork{T, S}`: PEPS tensor network with a specific tensor layout. + +## Returns +- Tuple{Vector{Tuple{Int, Int, Int}}, Tuple{Int, Int, Int}}: Tuple containing the list of node coordinates and the size of the tensor network. + +## Description +The `nodes_search_order_Mps` function generates the search order of nodes for a matrix product states (MPS). +It creates a list of node coordinates `(i, j, k)` representing rows, columns, and index of group of spins, respectively. +The resulting order is suitable for traversing the nodes in the tensor network during contraction. +The function is specialized for the `SquareCrossDoubleNode` tensor network type and is parametrized by the layout type `S`. +""" +function nodes_search_order_Mps(peps::PEPSNetwork{T, S}) where {T <: SquareCrossDoubleNode, S} + ([(i, j, k) for i ∈ 1:peps.nrows for j ∈ 1:peps.ncols for k ∈ 1:2], (peps.nrows+1, 1, 1)) +end + +""" +$(TYPEDSIGNATURES) +Compute the boundary states for a specific node in a matrix product states (MPS). + +## Arguments +- `T::Type`: Tensor network type, specialized for `SquareCrossDoubleNode`. +- `ctr::MpsContractor{S}`: MPS tensor network contractor containing relevant information. +- `node::Node`: Tuple representing the coordinates of the node in the tensor network. + +## Returns +- Vector{Tuple{Tuple, Tuple}}: Vector of tuples representing the boundary states for the given node. +Each tuple contains pairs of indices representing connected sites in the tensor network. + +## Description +The `boundary` function computes the boundary states for a specific node in a matrix product states (MPS). +The boundary states are determined by analyzing the connections between the current node and its neighboring nodes, considering different physical indices. +The function is specialized for the `SquareCrossDoubleNode` tensor network type and is parametrized by the layout type `S`. +""" +function boundary(::Type{T}, ctr::MpsContractor{S}, node::Node) where {T <: SquareCrossDoubleNode, S} + i, j, k = node # todo + if k == 1 + bnd = vcat( + [ + [((i, m-1, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m-1, 2), ((i+1, m, 1), (i+1, m, 2)), + (i, m, 1), ((i+1, m-1, 1), (i+1, m-1, 2)), (i, m, 2), ((i+1, m-1, 1), (i+1, m-1, 2))), + ((i, m, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m, 2), ((i+1, m, 1), (i+1, m, 2)))] + for m ∈ 1:(j-1) + ]..., + ((i, j-1, 1), ((i+1, j, 1), (i+1, j, 2)), (i, j-1, 2), ((i+1, j, 1), (i+1, j, 2))), + ((i, j-1, 1), (i, j, 1)), + ((i, j-1, 1), (i, j, 2)), + ((i, j-1, 2), (i, j, 1)), + ((i, j-1, 2), (i, j, 2)), + ((i-1, j-1, 1), (i, j, 1)), + ((i-1, j-1, 1), (i, j, 2)), + ((i-1, j-1, 2), (i, j, 1)), + ((i-1, j-1, 2), (i, j, 2)), + ((i-1, j, 1), (i, j, 1)), + ((i-1, j, 1), (i, j, 2)), + ((i-1, j, 2), (i, j, 1)), + ((i-1, j, 2), (i, j, 2)), + [ + [((i-1, m-1, 1), ((i, m, 1), (i, m, 2)), (i-1, m-1, 2), ((i, m, 1), (i, m, 2)), + (i-1, m, 1), ((i, m-1, 1), (i, m-1, 2)), (i-1, m, 2), ((i, m-1, 1), (i, m-1, 2))), + ((i-1, m, 1), ((i, m, 1), (i, m, 2)), (i-1, m, 2), ((i, m, 1), (i, m, 2)))] + for m ∈ (j+1):ctr.peps.ncols + ]... + ) + else # k == 2 + bnd = vcat( + [ + [((i, m-1, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m-1, 2), ((i+1, m, 1), (i+1, m, 2)), + (i, m, 1), ((i+1, m-1, 1), (i+1, m-1, 2)), (i, m, 2), ((i+1, m-1, 1), (i+1, m-1, 2))), + ((i, m, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m, 2), ((i+1, m, 1), (i+1, m, 2)))] + for m ∈ 1:(j-1) + ]..., + ((i, j-1, 1), ((i+1, j, 1), (i+1, j, 2)), (i, j-1, 2), ((i+1, j, 1), (i+1, j, 2))), + ((i, j-1, 1), (i, j, 2)), + ((i, j-1, 2), (i, j, 2)), + ((i-1, j-1, 1), (i, j, 2)), + ((i-1, j-1, 2), (i, j, 2)), + ((i-1, j, 1), (i, j, 2)), + ((i-1, j, 2), (i, j, 2)), + ((i, j, 1), (i, j, 2)), + ((i, j, 1), ((i+1, j-1, 1), (i+1, j-1, 2))), + ((i, j, 1), ((i+1, j, 1), (i+1, j, 2))), + ((i, j, 1), ((i+1, j+1, 1), (i+1, j+1, 2), (i, j+1, 1), (i, j+1, 2), (i-1, j+1, 1), (i-1, j+1, 2))), + [ + [((i-1, m-1, 1), ((i, m, 1), (i, m, 2)), (i-1, m-1, 2), ((i, m, 1), (i, m, 2)), + (i-1, m, 1), ((i, m-1, 1), (i, m-1, 2)), (i-1, m, 2), ((i, m-1, 1), (i, m-1, 2))), + ((i-1, m, 1), ((i, m, 1), (i, m, 2)), (i-1, m, 2), ((i, m, 1), (i, m, 2)))] + for m ∈ (j+1):ctr.peps.ncols + ]... + ) + end + bnd +end + +""" +$(TYPEDSIGNATURES) +Update the energy of a specific tensor node in a matrix product states (MPS). + +## Arguments +- `T::Type`: Tensor network type, specialized for `SquareCrossDoubleNode`. +- `ctr::MpsContractor{S}`: MPS tensor network contractor containing relevant information for contraction. +- `σ::Vector{Int}`: State vector representing the current configuration of the tensor network. + +## Returns +- Real: Updated energy value for the specified tensor node. + +## Description +The `update_energy` function calculates the energy contribution of a specific tensor node in a matrix product states (MPS). +The energy is computed based on the local energy at the node and the interaction energies with its neighboring nodes, considering the provided state vector `σ`. +The function is specialized for the `SquareCrossDoubleNode` tensor network type and is parametrized by the layout type `S`. +""" +function update_energy( + ::Type{T}, ctr::MpsContractor{S}, σ::Vector{Int} +) where {T <: SquareCrossDoubleNode, S} + net = ctr.peps + i, j, k = ctr.current_node + + en = local_energy(net, (i, j, k)) + for v ∈ ( + (i, j-1, 1), (i, j-1, 2), (i-1, j, 1), (i-1, j, 2), (i-1, j-1, 1), (i-1, j-1, 2), (i-1, j+1, 1), (i-1, j+1, 2) + ) + en += bond_energy(net, (i, j, k), v, local_state_for_node(ctr, σ, v)) + end + if k != 2 return en end + en += bond_energy(net, (i, j, k), (i, j, 1), local_state_for_node(ctr, σ, (i, j, 1))) # here k=2 + en +end + +""" +$(TYPEDSIGNATURES) +Generate the tensor for a central double node in a projected entangled pair states (PEPS) tensor network. + +## Arguments +- `net::PEPSNetwork{T, Sparse}`: PEPS tensor network. +- `node::PEPSNode`: Node representing the position of the central double node. +- `β::Real`: Inverse temperature parameter. +- `::Val{:central_d_double_node}`: symbol to indicate the central double node. + +## Returns +- `DiagonalTensor`: Tensor representing the central double node. + +## Description +The `tensor` function generates the tensor for a central double node in a PEPS tensor network. +It uses the inverse temperature parameter `β` to construct the central tensor based on the geometry of the tensor network. +The function is specialized for PEPS tensor networks with sparse tensors (`Sparse`) and is parametrized by the abstract geometry type `T`. +""" +function tensor( + net::PEPSNetwork{T, Sparse}, node::PEPSNode, β::Real, ::Val{:central_d_double_node} +) where {T <: AbstractGeometry} + i, j = floor(Int, node.i), floor(Int, node.j) + T_NW_SE = CentralTensor(net, β, (i, j), (i+1, j+1)) + T_NE_SW = CentralTensor(net, β, (i, j+1), (i+1, j)) + DiagonalTensor(T_NW_SE, T_NE_SW) +end + +""" +$(TYPEDSIGNATURES) +Determine the size of the tensor corresponding to a central double node in a projected entangled pair states (PEPS) tensor network. + +## Arguments +- `net::PEPSNetwork{SquareCrossDoubleNode{T}, S}`: PEPS tensor network with square cross double nodes. +- `node::PEPSNode`: Node representing the position of the central double node. +- `::Val{:central_d_double_node}`: symbol to indicate the central double node. + +## Returns +- `Tuple{Int, Int}`: Tuple representing the size of the tensor for the central double node. + +## Description +The `Base.size` function is used to determine the size of the tensor corresponding to a central double node in a PEPS tensor network. +It calculates the size by considering the sizes of the two central tensors associated with neighboring positions. +The function is parametrized by the abstract tensors layout type `T` and the abstract sparsity type `S`. +""" +function Base.size( + net::PEPSNetwork{SquareCrossDoubleNode{T}, S}, node::PEPSNode, ::Val{:central_d_double_node} +) where {T <: AbstractTensorsLayout, S <: AbstractSparsity} + i, j = floor(Int, node.i), floor(Int, node.j) + s_1 = CentralTensor_size(net, (i, j), (i+1, j+1)) + s_2 = CentralTensor_size(net, (i, j+1), (i+1, j)) + (s_1[1] * s_2[1], s_1[2] * s_2[2]) +end + +""" +$(TYPEDSIGNATURES) +Create a sparse virtual double node tensor in a projected entangled pair states (PEPS) tensor network. + +## Arguments +- `net::PEPSNetwork{SquareCrossDoubleNode{T}, S}`: PEPS tensor network with square cross double nodes. +- `node::PEPSNode`: Node representing the position of the virtual double node. +- `β::Real`: Inverse temperature parameter. +- `::Val{:sparse_virtual_double_node}`: symbol to indicate the creation of a sparse virtual double node tensor. + +## Returns +- `VirtualTensor{T, S}`: Sparse virtual double node tensor. + +## Description +The `tensor` function is used to create a sparse virtual double node tensor in a PEPS tensor network. +It constructs the tensor by incorporating information about the central tensor and surrounding projectors associated with the specified position. +The function is parametrized by the abstract tensors layout type `T`, and the abstract sparsity type `S`, which can be either `Sparse` or `Dense`. + +""" +function tensor( #TODO + net::PEPSNetwork{SquareCrossDoubleNode{T}, S}, node::PEPSNode, β::Real, ::Val{:sparse_virtual_double_node} +) where {T <: AbstractTensorsLayout, S <: Union{Sparse, Dense}} + v = Node(node) + i, j = node.i, floor(Int, node.j) + + p_lb = [projector(net, (i, j, k), ((i+1, j+1, 1), (i+1, j+1, 2))) for k ∈ 1:2] + p_l = [projector(net, (i, j, k), ((i, j+1, 1), (i, j+1, 2))) for k ∈ 1:2] + p_lt = [projector(net, (i, j, k), ((i-1, j+1, 1), (i-1, j+1, 2))) for k ∈ 1:2] + + p_rb = [projector(net, (i, j+1, k), ((i+1, j, 1), (i+1, j, 2))) for k ∈ 1:2] + p_r = [projector(net, (i, j+1, k), ((i, j, 1), (i, j, 2))) for k ∈ 1:2] + p_rt = [projector(net, (i, j+1, k), ((i-1, j, 1), (i-1, j, 2))) for k ∈ 1:2] + + p_lb[1], p_l[1], p_lt[1] = last(fuse_projectors((p_lb[1], p_l[1], p_lt[1]))) + p_lb[2], p_l[2], p_lt[2] = last(fuse_projectors((p_lb[2], p_l[2], p_lt[2]))) + + p_rb[1], p_r[1], p_rt[1] = last(fuse_projectors((p_rb[1], p_r[1], p_rt[1]))) + p_rb[2], p_r[2], p_rt[2] = last(fuse_projectors((p_rb[2], p_r[2], p_rt[2]))) + + p_lb = outer_projector(p_lb[1], p_lb[2]) + p_l = outer_projector(p_l[1], p_l[2]) + p_lt = outer_projector(p_lt[1], p_lt[2]) + + p_rb = outer_projector(p_rb[1], p_rb[2]) + p_r = outer_projector(p_r[1], p_r[2]) + p_rt = outer_projector(p_rt[1], p_rt[2]) + + VirtualTensor( + net.lp, + CentralTensor(net, β, (i, j), (i, j+1)), + (p_lb, p_l, p_lt, p_rb, p_r, p_rt), + ) +end + +""" +$(TYPEDSIGNATURES) + +Create a dense virtual double node tensor in a projected entangled pair states (PEPS) tensor network. + +## Arguments +- `net::PEPSNetwork{T, Dense}`: PEPS tensor network with nodes of type `T` and dense tensors. +- `node::PEPSNode`: Node representing the position of the virtual double node. +- `β::Real`: Inverse temperature parameter. +- `::Val{:virtual_double_node}`: symbol to indicate the creation of a dense virtual double node tensor. + +## Returns +- `Tensor{T}`: Dense virtual double node tensor. + +## Description +The `tensor` function is used to create a dense virtual double node tensor in a PEPS tensor network. +It constructs the tensor by combining information from the sparse virtual double node tensor, including projectors and the dense central tensor associated with the specified position. +The function is parametrized by the abstract geometry type `T`. +""" +function tensor( + net::PEPSNetwork{T, Dense}, node::PEPSNode, β::Real, ::Val{:virtual_double_node} +) where{T <: AbstractGeometry} + sp = tensor(net, node, β, Val(:sparse_virtual_double_node)) + p_lb, p_l, p_lt, p_rb, p_r, p_rt = (get_projector!(net.lp, x) for x in sp.projs) + dense_con = dense_central_tensor(sp.con) + + A = zeros( + eltype(dense_con), + length(p_l), maximum.((p_lt, p_rt))..., length(p_r), maximum.((p_lb, p_rb))... + ) + for l ∈ 1:length(p_l), r ∈ 1:length(p_r) + A[l, p_lt[l], p_rt[r], r, p_lb[l], p_rb[r]] = dense_con[p_l[l], p_r[r]] + end + @cast B[l, (uu, u), r, (dd, d)] := A[l, uu, u, r, dd, d] + B +end + +""" +$(TYPEDSIGNATURES) + +Construct the set of projectors associated with a site tensor in a projected entangled pair states (PEPS) tensor network. + +## Arguments +- `net::PEPSNetwork{T, S}`: PEPS tensor network with nodes of type `T` and tensors of sparsity type `S`. +- `vertex::Node`: Node representing the position of the site tensor. + +## Returns +- `(plf, pt, prf, pb)`: Tuple of projectors associated with the site tensor, corresponding to the left (plf), top (pt), right (prf), and bottom (pb) directions. + +## Description +The `projectors_site_tensor` function constructs the set of projectors associated with a site tensor at the specified position in a PEPS tensor network. +The projectors are created based on the neighboring tensors and directions in the network. +The function is parametrized by the abstract node type `T` and the abstract sparsity type `S`. +""" +function projectors_site_tensor( + net::PEPSNetwork{T, S}, vertex::Node +) where {T <: SquareCrossDoubleNode, S} + i, j = vertex + plf = outer_projector( + (projector( + net, (i, j, k), ((i+1, j-1, 1), (i+1, j-1, 2), (i, j-1, 1), (i, j-1, 2), (i-1, j-1, 1), (i-1, j-1, 2)) + ) for k ∈ 1:2)... + ) + pt = outer_projector((projector(net, (i, j, k), ((i-1, j, 1), (i-1, j, 2))) for k ∈ 1:2)...) + prf = outer_projector( + (projector( + net, (i, j, k), ((i+1, j+1, 1), (i+1, j+1, 2), (i, j+1, 1), (i, j+1, 2), (i-1, j+1, 1), (i-1, j+1, 2)) + ) for k ∈ 1:2)... + ) + pb = outer_projector((projector(net, (i, j, k), ((i+1, j, 1), (i+1, j, 2))) for k ∈ 1:2)...) + (plf, pt, prf, pb) +end + +""" +$(TYPEDSIGNATURES) + +Determine the size of the virtual tensor associated with a virtual double node in a tensor network. + +## Arguments +- `net::AbstractGibbsNetwork{Node, PEPSNode}`: Abstract Gibbs PEPS tensor network with nodes and virtual tensors. +- `node::PEPSNode`: PEPS node representing the position of the virtual double node. +- `::Union{Val{:virtual_double_node}, Val{:sparse_virtual_double_node}}`: Tag indicating whether the virtual tensor is dense or sparse. + +## Returns +- Tuple `(s1, s2, s3, s4)`: Size information for the virtual tensor. + +## Description +The `size` function determines the size of the virtual tensor associated with a virtual double node in an Abstract Gibbs PEPS tensor network. +The size is specified by the dimensions along the left, top, right, and bottom directions. +The function is parametrized by the types of nodes (`Node` and `PEPSNode`) and the tag indicating whether the virtual tensor is dense or sparse. +""" +function Base.size( + net::AbstractGibbsNetwork{Node, PEPSNode}, + node::PEPSNode, + ::Union{Val{:virtual_double_node}, Val{:sparse_virtual_double_node}} +) + v = Node(node) + i, j = node.i, floor(Int, node.j) + + p_lb = [projector(net, (i, j, k), ((i+1, j+1, 1), (i+1, j+1, 2))) for k ∈ 1:2] + p_l = [projector(net, (i, j, k), ((i, j+1, 1), (i, j+1, 2))) for k ∈ 1:2] + p_lt = [projector(net, (i, j, k), ((i-1, j+1, 1), (i-1, j+1, 2))) for k ∈ 1:2] + + p_rb = [projector(net, (i, j+1, k), ((i+1, j, 1), (i+1, j, 2))) for k ∈ 1:2] + p_r = [projector(net, (i, j+1, k), ((i, j, 1), (i, j, 2))) for k ∈ 1:2] + p_rt = [projector(net, (i, j+1, k), ((i-1, j, 1), (i-1, j, 2))) for k ∈ 1:2] + + p_lb[1], p_l[1], p_lt[1] = last(fuse_projectors((p_lb[1], p_l[1], p_lt[1]))) + p_lb[2], p_l[2], p_lt[2] = last(fuse_projectors((p_lb[2], p_l[2], p_lt[2]))) + + p_rb[1], p_r[1], p_rt[1] = last(fuse_projectors((p_rb[1], p_r[1], p_rt[1]))) + p_rb[2], p_r[2], p_rt[2] = last(fuse_projectors((p_rb[2], p_r[2], p_rt[2]))) + + p_lb = outer_projector(p_lb[1], p_lb[2]) + p_l = outer_projector(p_l[1], p_l[2]) + p_lt = outer_projector(p_lt[1], p_lt[2]) + + p_rb = outer_projector(p_rb[1], p_rb[2]) + p_r = outer_projector(p_r[1], p_r[2]) + p_rt = outer_projector(p_rt[1], p_rt[2]) + + (size(p_l, 1), maximum(p_lt) * maximum(p_rt), size(p_r, 1), maximum(p_lb) * maximum(p_rb)) +end diff --git a/src/square_cross_single_node.jl b/src/square_cross_single_node.jl new file mode 100644 index 00000000..a17ed683 --- /dev/null +++ b/src/square_cross_single_node.jl @@ -0,0 +1,318 @@ +export SquareCrossSingleNode + +""" +$(TYPEDSIGNATURES) + +A geometric structure representing a 1-layer grid with nodes arranged in a grid of rows and columns, +and additional diagonal edges forming a cross pattern between neighboring nodes. + +# Type Parameters +- `T <: AbstractTensorsLayout`: The layout of decomposition of tensors into MPS. Can be `GaugesEnergy`, `EnergyGauges` or `EngGaugesEng`. + +# Constructors +- `SquareCrossSingleNode(layout::T)`: Create a `SquareCrossSingleNode` with the specified tensor layout. +""" +struct SquareCrossSingleNode{T <: AbstractTensorsLayout} <: AbstractGeometry end + +""" +$(TYPEDSIGNATURES) + +Create a labeled grid graph with nodes arranged in an m x n grid and additional diagonal +edges forming a cross pattern between neighboring nodes. + +# Arguments +- `m::Int`: The number of rows in the grid. +- `n::Int`: The number of columns in the grid. + +# Returns +A `LabelledGraph` representing a grid graph with nodes arranged in an m x n grid, +and additional diagonal edges forming a cross pattern between neighboring nodes. +""" +function SquareCrossSingleNode(m::Int, n::Int) + lg = SquareSingleNode(m, n) + for i ∈ 1:m-1, j ∈ 1:n-1 + add_edge!(lg, (i, j), (i+1, j+1)) + add_edge!(lg, (i+1, j), (i, j+1)) + end + lg +end + + +VirtualSingleNode(::Type{Dense}) = :virtual_single_node + + +VirtualSingleNode(::Type{Sparse}) = :sparse_virtual_single_node + + +function tensor_map( + ::Type{SquareCrossSingleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: Union{EnergyGauges, GaugesEnergy}, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + for i ∈ 1:nrows, j ∈ 1:ncols + push!( + map, + PEPSNode(i, j) => site(S), + PEPSNode(i, j - 1//2) => VirtualSingleNode(S), + PEPSNode(i + 1//2, j) => :central_v_single_node + ) + end + + for i ∈ 1:nrows-1, j ∈ 0:ncols-1 + push!(map, PEPSNode(i + 1//2, j + 1//2) => :central_d_single_node) + end + map +end + + +function tensor_map( + ::Type{SquareCrossSingleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: EngGaugesEng, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + for i ∈ 1:nrows, j ∈ 1:ncols + push!( + map, + PEPSNode(i, j) => site(S), + PEPSNode(i, j - 1//2) => VirtualSingleNode(S), + PEPSNode(i + 1//5, j) => :sqrt_up, + PEPSNode(i + 4//5, j) => :sqrt_down + ) + end + + for i ∈ 1:nrows-1, j ∈ 0:ncols-1 + push!( + map, + PEPSNode(i + 1//5, j + 1//2) => :sqrt_up_d, + PEPSNode(i + 4//5, j + 1//2) => :sqrt_down_d + ) + end + map +end + + +function gauges_list(::Type{SquareCrossSingleNode{T}}, nrows::Int, ncols::Int) where T <: GaugesEnergy + [ + GaugeInfo( + (PEPSNode(i + 1//6, j), PEPSNode(i + 2//6, j)), + PEPSNode(i + 1//2, j), + 1, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1//2:1//2:ncols + ] +end + + +function gauges_list(::Type{SquareCrossSingleNode{T}}, nrows::Int, ncols::Int) where T <: EnergyGauges + [ + GaugeInfo( + (PEPSNode(i + 4//6, j), PEPSNode(i + 5//6, j)), + PEPSNode(i + 1//2, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1//2:1//2:ncols + ] +end + + +function gauges_list(::Type{SquareCrossSingleNode{T}}, nrows::Int, ncols::Int) where T <: EngGaugesEng + [ + GaugeInfo( + (PEPSNode(i + 2//5, j), PEPSNode(i + 3//5, j)), + PEPSNode(i + 1//5, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1//2:1//2:ncols + ] +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareCrossSingleNode geometry with the EnergyGauges layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareCrossSingleNode{EnergyGauges} + MpoLayers( + Dict(site(i) => (-1//6, 0, 3//6, 4//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (3//6, 4//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (-3//6, 0) for i ∈ 1//2:1//2:ncols), + ) +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareCrossSingleNode geometry with the GaugesEnergy layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareCrossSingleNode{GaugesEnergy} + MpoLayers( + Dict(site(i) => (-4//6, -1//2, 0, 1//6) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (1//6,) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (-3//6, 0) for i ∈ 1//2:1//2:ncols), + ) +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareCrossSingleNode geometry with the EngGaugesEng layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareCrossSingleNode{EngGaugesEng} + MpoLayers( + Dict(site(i) => (-2//5, -1//5, 0, 1//5, 2//5) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (1//5, 2//5) for i ∈ 1//2:1//2:ncols), + Dict(site(i) => (-4//5, -1//5, 0) for i ∈ 1//2:1//2:ncols), + ) +end + + +# TODO: rewrite this using brodcasting if possible +function conditional_probability( + ::Type{T}, ctr::MpsContractor{S}, ∂v::Vector{Int} +) where {T <: SquareCrossSingleNode, S} + indβ, β = length(ctr.betas), last(ctr.betas) + i, j = ctr.current_node + + L = left_env(ctr, i, ∂v[1:2*j-2], indβ) + R = right_env(ctr, i, ∂v[(2*j+3):2*ctr.peps.ncols+2], indβ) + if ctr.onGPU + R = CuArray(R) + end + + ψ = dressed_mps(ctr, i, indβ) + + MX, M = ψ[j-1//2], ψ[j] + @tensor LMX[y, z] := L[x] * MX[x, y, z] + + v = ((i, j-1), (i-1, j-1), (i-1, j)) + @nexprs 3 k->( + en_k = projected_energy(ctr.peps, (i, j), v[k], ∂v[2*j-1+k]); + ) + probs = probability(local_energy(ctr.peps, (i, j)) .+ en_1 .+ en_2 .+ en_3, β) + + p_rb = projector(ctr.peps, (i, j), (i+1, j-1)) + pr = projector(ctr.peps, (i, j), @ntuple 3 k->(i+2-k, j+1)) + pd = projector(ctr.peps, (i, j), (i+1, j)) + + @cast lmx2[d, b, c] := LMX[d, (b, c)] (c ∈ 1:maximum(p_rb)) + + lmx2, M, R = Array.((lmx2, M, R)) # REWRITE + + for σ ∈ 1:length(probs) # REWRITE on CUDA + parallelize + lmx = @inbounds lmx2[:, ∂v[2*j-1], p_rb[σ]] + m = @inbounds M[:, :, pd[σ]] + r = @inbounds R[:, pr[σ]] + @inbounds probs[σ] *= (lmx' * m * r)[] + end + + push!(ctr.statistics, ((i, j), ∂v) => error_measure(probs)) + normalize_probability(probs) +end + + +function projectors_site_tensor( + network::PEPSNetwork{T, S}, vertex::Node +) where {T <: SquareCrossSingleNode, S} + i, j = vertex + nbrs = ( + (@ntuple 3 k -> (i+2-k, j-1)), (i-1, j), (@ntuple 3 k -> (i+2-k, j+1)), (i+1, j) + ) + projector.(Ref(network), Ref(vertex), nbrs) +end + + +function nodes_search_order_Mps(peps::PEPSNetwork{T, S}) where {T <: SquareCrossSingleNode, S} + ([(i, j) for i ∈ 1:peps.nrows for j ∈ 1:peps.ncols], (peps.nrows+1, 1)) +end + + +function boundary(::Type{T}, ctr::MpsContractor{S}, node::Node) where {T <: SquareCrossSingleNode, S} + i, j = node + vcat( + [ + [((i, k-1), (i+1, k), (i, k), (i+1, k-1)), ((i, k), (i+1, k))] + for k ∈ 1:(j-1) + ]..., + ((i, j-1), (i+1, j)), + ((i, j-1), (i, j)), + ((i-1, j-1), (i, j)), + ((i-1, j), (i, j)), + [ + [((i-1, k-1), (i, k), (i-1, k), (i, k-1)), ((i-1, k), (i, k))] + for k ∈ (j+1):ctr.peps.ncols + ]... + ) +end + + +function update_energy( + ::Type{T}, ctr::MpsContractor{S}, σ::Vector{Int} +) where {T <: SquareCrossSingleNode, S} + net = ctr.peps + i, j = ctr.current_node + en = local_energy(net, (i, j)) + for v ∈ ((i, j-1), (i-1, j), (i-1, j-1), (i-1, j+1)) + en += bond_energy(net, (i, j), v, local_state_for_node(ctr, σ, v)) + end + en +end + + +function tensor( + net::PEPSNetwork{SquareCrossSingleNode{T}, S}, node::PEPSNode, β::Real, ::Val{:central_d_single_node} +) where {T <: AbstractTensorsLayout, S <: AbstractSparsity} + i, j = floor(Int, node.i), floor(Int, node.j) + T_NW_SE = connecting_tensor(net, (i, j), (i+1, j+1), β) + T_NE_SW = connecting_tensor(net, (i, j+1), (i+1, j), β) + @cast A[(u, uu), (dd, d)] := T_NW_SE[u, d] * T_NE_SW[uu, dd] + A +end + + +function Base.size( + network::PEPSNetwork{SquareCrossSingleNode{T}, S}, node::PEPSNode, ::Val{:central_d_single_node} +) where {T <: AbstractTensorsLayout, S <: AbstractSparsity} + i, j = floor(Int, node.i), floor(Int, node.j) + s_NW_SE = size(interaction_energy(network, (i, j), (i+1, j+1))) + s_NE_SW = size(interaction_energy(network, (i, j+1), (i+1, j))) + (s_NW_SE[1] * s_NE_SW[1], s_NW_SE[2] * s_NE_SW[2]) +end + + +function tensor( + net::PEPSNetwork{SquareCrossSingleNode{T}, S}, node::PEPSNode, β::Real, ::Val{:sparse_virtual_single_node} +) where {T <: AbstractTensorsLayout, S <: Union{Sparse, Dense}} + v = Node(node) + i, j = node.i, floor(Int, node.j) + + pl = last(fuse_projectors( + @ntuple 3 k->projector(net, (i, j), (i+2-k, j+1)) # p_lb, p_l, p_lt + )) + pr = last(fuse_projectors( + @ntuple 3 k->projector(net, (i, j+1), (i+2-k, j)) # p_rb, p_r, p_rt + )) + VirtualTensor( + net.lp, + connecting_tensor(net, floor.(Int, v), ceil.(Int, v), β), + (pl..., pr...) + ) +end + + +function tensor( + net::PEPSNetwork{SquareCrossSingleNode{T}, Dense}, node::PEPSNode, β::Real, ::Val{:virtual_single_node} +) where T <: AbstractTensorsLayout + sp = tensor(net, node, β, Val(:sparse_virtual_single_node)) + p_lb, p_l, p_lt, p_rb, p_r, p_rt = (get_projector!(net.lp, x) for x in sp.projs) + + A = zeros( + eltype(sp.con), + length(p_l), maximum.((p_lt, p_rt))..., length(p_r), maximum.((p_lb, p_rb))... + ) + for l ∈ 1:length(p_l), r ∈ 1:length(p_r) + @inbounds A[l, p_lt[l], p_rt[r], r, p_lb[l], p_rb[r]] = sp.con[p_l[l], p_r[r]] + end + @cast B[l, (uu, u), r, (dd, d)] := A[l, uu, u, r, dd, d] + B +end diff --git a/src/square_double_node.jl b/src/square_double_node.jl new file mode 100644 index 00000000..5f07280b --- /dev/null +++ b/src/square_double_node.jl @@ -0,0 +1,433 @@ +export SquareDoubleNode, tensor, site_double_node + +""" +$(TYPEDSIGNATURES) + +A geometric structure representing a 2-layer grid with nodes arranged in rows and columns. +Each node is labeled with a tuple (i, j, k), where i is the row index, j is the column index, and k is the layer index (1 or 2). + +# Type Parameters +- `T <: AbstractTensorsLayout`: The layout of decomposition of tensors into MPS. Can be `GaugesEnergy`, `EnergyGauges` or `EngGaugesEng`. + +# Constructors +- `SquareDoubleNode(layout::T)`: Create a `SquareDoubleNode` with the specified tensor layout. +""" +struct SquareDoubleNode{T <: AbstractTensorsLayout} <: AbstractGeometry end + +""" +$(TYPEDSIGNATURES) + +Create a labeled graph representing a 2-layer grid graph with nodes arranged in an m x n grid. +Each node is labeled with a tuple (i, j, k), where i is the row index, j is the column index, and k is the layer index (1 or 2). + +# Arguments +- `m::Int`: The number of rows in the grid. +- `n::Int`: The number of columns in the grid. + +# Returns +A `LabelledGraph` representing a 2-layer grid graph with nodes arranged in an m x n grid. +Each node in layer 1 is connected to the corresponding node in layer 2, and neighboring nodes in both layers are connected. +""" +function SquareDoubleNode(m::Int, n::Int) + labels = [(i, j, k) for j ∈ 1:n for i ∈ 1:m for k ∈ 1:2] + lg = LabelledGraph(labels) + for i ∈ 1:m, j ∈ 1:n + add_edge!(lg, (i, j, 1), (i, j, 2)) + end + + for i ∈ 1:m-1, j ∈ 1:n + add_edge!(lg, (i, j, 1), (i+1, j, 1)) + add_edge!(lg, (i, j, 1), (i+1, j, 2)) + add_edge!(lg, (i, j, 2), (i+1, j, 1)) + add_edge!(lg, (i, j, 2), (i+1, j, 2)) + end + + for i ∈ 1:m, j ∈ 1:n-1 + add_edge!(lg, (i, j, 2), (i, j+1, 2)) + add_edge!(lg, (i, j, 2), (i, j+1, 1)) + add_edge!(lg, (i, j, 1), (i, j+1, 2)) + add_edge!(lg, (i, j, 1), (i, j+1, 1)) + end + lg +end + + +site_double_node(::Type{Dense}) = :site_square_double_node + + +site_double_node(::Type{Sparse}) = :sparse_site_square_double_node + + +function tensor_map( + ::Type{SquareDoubleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: Union{GaugesEnergy, EnergyGauges}, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + for i ∈ 1:nrows, j ∈ 1:ncols + push!(map, PEPSNode(i, j) => site_double_node(S)) + if j < ncols push!(map, PEPSNode(i, j + 1//2) => :central_h_double_node) end + if i < nrows push!(map, PEPSNode(i + 1//2, j) => :central_v_double_node) end + end + map +end + + +""" +$(TYPEDSIGNATURES) +Assigns gauges and corresponding information to GaugeInfo structure for a given Layout. +""" +function gauges_list(::Type{SquareDoubleNode{T}}, nrows::Int, ncols::Int) where T <: GaugesEnergy + [ + GaugeInfo( + (PEPSNode(i + 1//6, j), PEPSNode(i + 2//6, j)), + PEPSNode(i + 1//2, j), + 1, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1:ncols + ] +end + +""" +$(TYPEDSIGNATURES) +Assigns gauges and corresponding information to GaugeInfo structure for a given Layout. +""" +function gauges_list(::Type{SquareDoubleNode{T}}, nrows::Int, ncols::Int) where T <: EnergyGauges + [ + GaugeInfo( + (PEPSNode(i + 4//6, j), PEPSNode(i + 5//6, j)), + PEPSNode(i + 1//2, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1:ncols + ] +end + +""" +$(TYPEDSIGNATURES) +Defines the MPO layers for the SquareSingleNode geometry with the EnergyGauges layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareDoubleNode{EnergyGauges} + main = Dict{Site, Sites}(i => (-1//6, 0, 3//6, 4//6) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 + push!(main, i + 1//2 => (0,)) + end + right = Dict{Site, Sites}(i => (-3//6, 0) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 + push!(right, i + 1//2 => (0,)) + end + MpoLayers(main, Dict(i => (3//6, 4//6) for i ∈ 1:ncols), right) +end + +""" +$(TYPEDSIGNATURES) +Defines the MPO layers for the SquareSingleNode geometry with the GaugesEnergy layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareDoubleNode{GaugesEnergy} + main = Dict{Site, Sites}(i => (-4//6, -1//2, 0, 1//6) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(main, i + 1//2 => (0,)) end + + right = Dict{Site, Sites}(i => (-3//6, 0) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(right, i + 1//2 => (0,)) end + + MpoLayers(main, Dict(i => (1//6,) for i ∈ 1:ncols), right) +end + + +function conditional_probability( + ::Type{T}, ctr::MpsContractor{S}, ∂v::Vector{Int} +) where {T <: SquareDoubleNode, S} + indβ, β = length(ctr.betas), last(ctr.betas) + i, j, k = ctr.current_node + + L = left_env(ctr, i, ∂v[1:j-1], indβ) + M = dressed_mps(ctr, i, indβ)[j] + @tensor LM[y, z] := L[x] * M[x, y, z] + + if k == 1 # here has to avarage over s2 + R = right_env(ctr, i, ∂v[(j+8):end], indβ) + if ctr.onGPU + R = CuArray(R) + end + + eng_loc = [local_energy(ctr.peps, (i, j, k)) for k ∈ 1:2] + el = [interaction_energy(ctr.peps, (i, j, k), (i, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + pl = [projector(ctr.peps, (i, j, k), (i, j-1, m)) for k ∈ 1:2, m ∈ 1:2] + eng_l = [@view el[k, m][pl[k, m], ∂v[j - 1 + k + (m - 1) * 2]] for k ∈ 1:2, m ∈ 1:2] + + eu = [interaction_energy(ctr.peps, (i, j, k), (i-1, j, m)) for k ∈ 1:2, m ∈ 1:2] + pu = [projector(ctr.peps, (i, j, k), (i-1, j, m)) for k ∈ 1:2, m ∈ 1:2] + eng_u = [@view eu[k, m][pu[k, m], ∂v[j + 3 + k + (m - 1) * 2]] for k ∈ 1:2, m ∈ 1:2] + + en = [eng_loc[k] .+ eng_l[k, 1] .+ eng_l[k, 2] .+ eng_u[k, 1] .+ eng_u[k, 2] for k ∈ 1:2] + + en12 = interaction_energy(ctr.peps, (i, j, 1), (i, j, 2)) + p12 = projector(ctr.peps, (i, j, 1), (i, j, 2)) + p21 = projector(ctr.peps, (i, j, 2), (i, j, 1)) + + pr1 = projector(ctr.peps, (i, j, 1), ((i, j+1, 1), (i, j+1, 2))) + pr2 = projector(ctr.peps, (i, j, 2), ((i, j+1, 1), (i, j+1, 2))) + pd1 = projector(ctr.peps, (i, j, 1), ((i+1, j, 1), (i+1, j, 2))) + pd2 = projector(ctr.peps, (i, j, 2), ((i+1, j, 1), (i+1, j, 2))) + + le = reshape(en[1], (:, 1)) .+ en12[p12, p21] .+ reshape(en[2], (1, :)) + ele = exp.(-β .* (le .- minimum(le))) + + @cast LM3[x, s1, s2] := LM[x, (s1, s2)] (s2 ∈ 1:maximum(pd2)) + @cast R3[x, s1, s2] := R[x, (s1, s2)] (s2 ∈ 1:maximum(pr2)) + LR = dropdims(sum(LM3[:, pd1, pd2] .* R3[:, pr1, pr2], dims=1), dims=1) + + probs = dropdims(sum(Array(LR) .* ele, dims=2), dims=2) + else # k == 2 ; here s1 is fixed + R = right_env(ctr, i, ∂v[(j+7):end], indβ) + if ctr.onGPU + R = CuArray(R) + end + eng_loc = local_energy(ctr.peps, (i, j, 2)) + + el = [interaction_energy(ctr.peps, (i, j, 2), (i, j-1, m)) for m ∈ 1:2] + pl = [projector(ctr.peps, (i, j, 2), (i, j-1, m)) for m ∈ 1:2] + eng_l = [@view el[m][pl[m], ∂v[j - 1 + m]] for m ∈ 1:2] + + eu = [interaction_energy(ctr.peps, (i, j, 2), (i-1, j, m)) for m ∈ 1:2] + pu = [projector(ctr.peps, (i, j, 2), (i-1, j, m)) for m ∈ 1:2] + eng_u = [@view eu[m][pu[m], ∂v[j + 1 + m]] for m ∈ 1:2] + + e21 = interaction_energy(ctr.peps, (i, j, 2), (i, j, 1)) + p21 = projector(ctr.peps, (i, j, 2), (i, j, 1)) + eng_21 = @inbounds @view e21[p21, ∂v[j + 4]] + + le = eng_loc .+ eng_l[1] .+ eng_l[2] .+ eng_u[1] .+ eng_u[2] .+ eng_21 + ele = exp.(-β .* (le .- minimum(le))) + + pr2 = projector(ctr.peps, (i, j, 2), ((i, j+1, 1), (i, j+1, 2))) + pd2 = projector(ctr.peps, (i, j, 2), ((i+1, j, 1), (i+1, j, 2))) + + @cast R3[x, p1, p2] := R[x, (p1, p2)] (p2 ∈ 1:maximum(pr2)) + R2 = R3[:, ∂v[j + 5], :] + @cast LM3[x, p1, p2] := LM[x, (p1, p2)] (p2 ∈ 1:maximum(pd2)) + LM2 = LM3[:, ∂v[j + 6], :] + LR = dropdims(sum(R2[:, pr2] .* LM2[:, pd2], dims=1), dims=1) + probs = ele .* Array(LR) + end + + push!(ctr.statistics, ((i, j, k), ∂v) => error_measure(probs)) + normalize_probability(probs) +end + + + +function nodes_search_order_Mps(peps::PEPSNetwork{T, S}) where {T <: SquareDoubleNode, S} + ([(i, j, k) for i ∈ 1:peps.nrows for j ∈ 1:peps.ncols for k ∈ 1:2], (peps.nrows+1, 1, 1)) +end + + +function boundary(::Type{T}, ctr::MpsContractor{S}, node::Node) where {T <: SquareDoubleNode, S} # TODO + i, j, k = node + if k == 1 + bnd = vcat( + [((i, m, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m, 2), ((i+1, m, 1), (i+1, m, 2))) for m ∈ 1:j-1]..., + ((i, j-1, 1), (i, j, 1)), + ((i, j-1, 1), (i, j, 2)), + ((i, j-1, 2), (i, j, 1)), + ((i, j-1, 2), (i, j, 2)), + ((i-1, j, 1), (i, j, 1)), + ((i-1, j, 1), (i, j, 2)), + ((i-1, j, 2), (i, j, 1)), + ((i-1, j, 2), (i, j, 2)), + [((i-1, m, 1), ((i, m, 1), (i, m, 2)), (i-1, m, 2), ((i, m, 1), (i, m, 2))) for m ∈ j+1:ctr.peps.ncols]... + ) + else # k == 2 + bnd = vcat( + [((i, m, 1), ((i+1, m, 1), (i+1, m, 2)), (i, m, 2), ((i+1, m, 1), (i+1, m, 2))) for m ∈ 1:j-1]..., + ((i, j-1, 1), (i, j, 2)), + ((i, j-1, 2), (i, j, 2)), + ((i-1, j, 1), (i, j, 2)), + ((i-1, j, 2), (i, j, 2)), + ((i, j, 1), (i, j, 2)), + ((i, j, 1), ((i, j+1, 1), (i, j+1, 2))), + ((i, j, 1), ((i+1, j, 1), (i+1, j, 2))), + [((i-1, m, 1), ((i, m, 1), (i, m, 2)), (i-1, m, 2), ((i, m, 1), (i, m, 2))) for m ∈ j+1:ctr.peps.ncols]... + ) + end + bnd +end + + +function update_energy( + ::Type{T}, ctr::MpsContractor{S}, σ::Vector{Int}) where {T <: SquareDoubleNode, S} + net = ctr.peps + i, j, k = ctr.current_node + + en = local_energy(net, (i, j, k)) + for v ∈ ((i, j-1, 1), (i, j-1, 2), (i-1, j, 1), (i-1, j, 2)) + en += bond_energy(net, (i, j, k), v, local_state_for_node(ctr, σ, v)) + end + if k != 2 return en end + en += bond_energy(net, (i, j, k), (i, j, 1), local_state_for_node(ctr, σ, (i, j, 1))) # here k=2 + en +end + + +function tensor( + net::PEPSNetwork{T, S}, node::PEPSNode, β::Real, ::Val{:sparse_site_square_double_node} +) where {T <: AbstractGeometry, S} + @nexprs 2 k->( + v_k = (node.i, node.j, k); + en_k = local_energy(net, v_k) + ) + en12 = projected_energy(net, v_1, v_2) + @cast eloc12[(x, y)] := en12[x, y] + en_1[x] + en_2[y] + + SiteTensor( + net.lp, + exp.(-β .* (eloc12 .- minimum(eloc12))), + projectors_site_tensor(net, Node(node)), + ) +end + + +function tensor( + net::PEPSNetwork{T, S}, node::PEPSNode, β::Real, ::Val{:site_square_double_node} +) where {T <: AbstractGeometry, S} + sp = tensor(net, node, β, Val(:sparse_site_square_double_node)) + projs = Tuple(get_projector!(net.lp, x) for x in sp.projs) + A = zeros(maximum.(projs)) + for (σ, lexp) ∈ enumerate(sp.loc_exp) + @inbounds A[getindex.(projs, Ref(σ))...] += lexp + end + A +end + + +function tensor( + network::PEPSNetwork{T, Sparse}, node::PEPSNode, β::Real, ::Val{:central_h_double_node} +) where {T <: AbstractGeometry} + i, j = node.i, floor(Int, node.j) + CentralTensor(network, β, (i, j), (i, j+1)) +end + + +function tensor( + network::PEPSNetwork{T, Dense}, node::PEPSNode, β::Real, ::Val{:central_h_double_node} +) where {T <: AbstractGeometry} + i, j = node.i, floor(Int, node.j) + dense_central(CentralTensor(network, β, (i, j), (i, j+1))) +end + + +function tensor( + network::PEPSNetwork{T, Sparse}, node::PEPSNode, β::Real, ::Val{:central_v_double_node} +) where {T <: AbstractGeometry} + i, j = floor(Int, node.i), node.j + CentralTensor(network, β, (i, j), (i+1, j)) +end + + +function tensor( + network::PEPSNetwork{T, Dense}, node::PEPSNode, β::Real, ::Val{:central_v_double_node} +) where {T <: AbstractGeometry} + i, j = floor(Int, node.i), node.j + dense_central(CentralTensor(network, β, (i, j), (i+1, j))) +end + + +function CentralTensor( + network::PEPSNetwork{T, S}, β::Real, node1::NTuple{2, Int64}, node2::NTuple{2, Int64} +) where {T <: AbstractGeometry, S} + i1, j1 = node1 + i2, j2 = node2 + + p21l = projector(network, (i1, j1, 2), (i2, j2, 1)) + p22l = projector(network, (i1, j1, 2), (i2, j2, 2)) + p12l = projector(network, (i1, j1, 1), (i2, j2, 2)) + p11l = projector(network, (i1, j1, 1), (i2, j2, 1)) + + p1l, (p11l, p12l) = fuse_projectors((p11l, p12l)) + p2l, (p21l, p22l) = fuse_projectors((p21l, p22l)) + + p11r = projector(network, (i2, j2, 1), (i1, j1, 1)) + p21r = projector(network, (i2, j2, 1), (i1, j1, 2)) + p12r = projector(network, (i2, j2, 2), (i1, j1 ,1)) + p22r = projector(network, (i2, j2, 2), (i1, j1, 2)) + + p1r, (p11r, p21r) = fuse_projectors((p11r, p21r)) + p2r, (p12r, p22r) = fuse_projectors((p12r, p22r)) + + e11 = interaction_energy(network, (i1, j1, 1), (i2, j2, 1)) + e12 = interaction_energy(network, (i1, j1, 1), (i2, j2, 2)) + e21 = interaction_energy(network, (i1, j1, 2), (i2, j2, 1)) + e22 = interaction_energy(network, (i1, j1, 2), (i2, j2, 2)) + + e11 = e11[p11l, p11r] + e21 = e21[p21l, p21r] + e12 = e12[p12l, p12r] + e22 = e22[p22l, p22r] + + le11 = exp.(-β .* (e11 .- minimum(e11))) + le21 = exp.(-β .* (e21 .- minimum(e21))) + le12 = exp.(-β .* (e12 .- minimum(e12))) + le22 = exp.(-β .* (e22 .- minimum(e22))) + + SpinGlassTensors.CentralTensor(le11, le12, le21, le22) +end + +function CentralTensor_size(network::PEPSNetwork{T, S}, node1::NTuple{2, Int64}, node2::NTuple{2, Int64} + ) where {T <: AbstractGeometry, S} + i1, j1 = node1 + i2, j2 = node2 + + p21l = projector(network, (i1, j1, 2), (i2, j2, 1)) + p22l = projector(network, (i1, j1, 2), (i2, j2, 2)) + p12l = projector(network, (i1, j1, 1), (i2, j2, 2)) + p11l = projector(network, (i1, j1, 1), (i2, j2, 1)) + + p1l, _ = fuse_projectors((p11l, p12l)) + p2l, _ = fuse_projectors((p21l, p22l)) + + p11r = projector(network, (i2, j2, 1), (i1, j1, 1)) + p21r = projector(network, (i2, j2, 1), (i1, j1, 2)) + p12r = projector(network, (i2, j2, 2), (i1, j1 ,1)) + p22r = projector(network, (i2, j2, 2), (i1, j1, 2)) + + p1r, _ = fuse_projectors((p11r, p21r)) + p2r, _ = fuse_projectors((p12r, p22r)) + + sl = maximum(p1l) * maximum(p2l) + sr = maximum(p1r) * maximum(p2r) + (sl, sr) +end + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:central_v_double_node} +) + i, j = floor(Int, node.i), node.j + CentralTensor_size(network, (i, j), (i+1, j)) +end + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:central_h_double_node} +) + i, j = node.i, floor(Int, node.j) + CentralTensor_size(network, (i, j), (i, j+1)) +end + + + +function projectors_site_tensor(net::PEPSNetwork{T, S}, vertex::Node) where {T <: SquareDoubleNode, S} + i, j = vertex + ( + outer_projector( + (projector(net, (i, j, k), ((i, j-1, 1), (i, j-1, 2))) for k ∈ 1:2)... # l + ), + outer_projector( + (projector(net, (i, j, k), ((i-1, j, 1), (i-1, j, 2))) for k ∈ 1:2)... # t + ), + outer_projector( + (projector(net, (i, j, k), ((i, j+1, 1), (i, j+1, 2))) for k ∈ 1:2)... # r + ), + outer_projector( + (projector(net, (i, j, k), ((i+1, j, 1), (i+1, j, 2))) for k ∈ 1:2)... # b + ), + ) +end diff --git a/src/square_single_node.jl b/src/square_single_node.jl new file mode 100644 index 00000000..d8cf8d21 --- /dev/null +++ b/src/square_single_node.jl @@ -0,0 +1,274 @@ + +export + site, + SquareSingleNode, + tensor_map, + gauges_list, + MpoLayers, + conditional_probability, + projectors_site_tensor, + nodes_search_order_Mps, + boundary, + update_energy, + projected_energy + + +""" +$(TYPEDSIGNATURES) + +A geometric structure representing a 1-layer grid with nodes arranged in a grid of rows and columns. + +# Type Parameters +- `T <: AbstractTensorsLayout`: The layout of decomposition of tensors into MPS. Can be `GaugesEnergy`, `EnergyGauges` or `EngGaugesEng`. + +# Constructors +- `SquareDoubleNode(layout::T)`: Create a `SquareDoubleNode` with the specified tensor layout. +""" +struct SquareSingleNode{T <: AbstractTensorsLayout} <: AbstractGeometry end + +""" +$(TYPEDSIGNATURES) + +Creates SquareSingleNode geometry as a LabelledGraph. +Create a labelled grid graph with nodes arranged in an m x n grid. + +# Arguments +- `m::Int`: The number of rows in the grid. +- `n::Int`: The number of columns in the grid. + +# Returns +A `LabelledGraph` representing a grid graph with nodes arranged in an m x n grid. +Each node is labeled with its coordinates (m, n), where m is the row index and n is the column index. +""" +function SquareSingleNode(m::Int, n::Int) + labels = [(i, j) for j ∈ 1:n for i ∈ 1:m] + LabelledGraph(labels, grid((m, n))) +end + + +site(::Type{Dense}) = :site + + +site(::Type{Sparse}) = :sparse_site + +""" +$(TYPEDSIGNATURES) + +Assigns type of tensor to a PEPS node coordinates for a given Layout and Sparsity. +""" +function tensor_map( + ::Type{SquareSingleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: Union{GaugesEnergy, EnergyGauges}, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + + for i ∈ 1:nrows, j ∈ 1:ncols + push!(map, PEPSNode(i, j) => site(S)) + if j < ncols push!(map, PEPSNode(i, j + 1//2) => :central_h_single_node) end + if i < nrows push!(map, PEPSNode(i + 1//2, j) => :central_v_single_node) end + end + map +end + +""" +$(TYPEDSIGNATURES) + +Assigns type of tensor to a PEPS node coordinates for a given Layout and Sparsity. +""" +function tensor_map( + ::Type{SquareSingleNode{T}}, ::Type{S}, nrows::Int, ncols::Int +) where {T <: EngGaugesEng, S <: AbstractSparsity} + map = Dict{PEPSNode, Symbol}() + + for i ∈ 1:nrows, j ∈ 1:ncols + push!(map, PEPSNode(i, j) => site(S)) + if j < ncols push!(map, PEPSNode(i, j + 1//2) => :central_h_single_node) end + if i < nrows + push!( + map, + PEPSNode(i + 1//5, j) => :sqrt_up, + PEPSNode(i + 4//5, j) => :sqrt_down + ) + end + end + map +end + +""" +$(TYPEDSIGNATURES) + +Assigns gauges and corresponding information to GaugeInfo structure for a given Layout. +""" +function gauges_list(::Type{SquareSingleNode{T}}, nrows::Int, ncols::Int) where T <: GaugesEnergy + [ + GaugeInfo( + (PEPSNode(i + 1//6, j), PEPSNode(i + 2//6, j)), + PEPSNode(i + 1//2, j), + 1, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1:ncols + ] +end + +""" +$(TYPEDSIGNATURES) + +Assigns gauges and corresponding information to GaugeInfo structure for a given Layout. +""" +function gauges_list(::Type{SquareSingleNode{T}}, nrows::Int, ncols::Int) where T <: EnergyGauges + [ + GaugeInfo( + (PEPSNode(i + 4//6, j), PEPSNode(i + 5//6, j)), + PEPSNode(i + 1//2, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1:ncols + ] +end + +""" +$(TYPEDSIGNATURES) + +Assigns gauges and corresponding information to GaugeInfo structure for a given Layout. +""" +function gauges_list(::Type{SquareSingleNode{T}}, nrows::Int, ncols::Int) where T <: EngGaugesEng + [ + GaugeInfo( + (PEPSNode(i + 2//5, j), PEPSNode(i + 3//5, j)), + PEPSNode(i + 1//5, j), + 2, + :gauge_h + ) + for i ∈ 1:nrows-1 for j ∈ 1:ncols + ] +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareSingleNode geometry with the EnergyGauges layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareSingleNode{EnergyGauges} + main = Dict{Site, Sites}(i => (-1//6, 0, 3//6, 4//6) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(main, i + 1//2 => (0,)) end + + right = Dict{Site, Sites}(i => (-3//6, 0) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(right, i + 1//2 => (0,)) end + + MpoLayers(main, Dict(i => (3//6, 4//6) for i ∈ 1:ncols), right) +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareSingleNode geometry with the GaugesEnergy layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareSingleNode{GaugesEnergy} + main = Dict{Site, Sites}(i => (-4//6, -1//2, 0, 1//6) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(main, i + 1//2 => (0,)) end + + right = Dict{Site, Sites}(i => (-3//6, 0) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(right, i + 1//2 => (0,)) end + + MpoLayers(main, Dict(i => (1//6,) for i ∈ 1:ncols), right) +end + +""" +$(TYPEDSIGNATURES) + +Defines the MPO layers for the SquareSingleNode geometry with the EngGaugesEng layout. +""" +function MpoLayers(::Type{T}, ncols::Int) where T <: SquareSingleNode{EngGaugesEng} + main = Dict{Site, Sites}(i => (-2//5, -1//5, 0, 1//5, 2//5) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(main, i + 1//2 => (0,)) end + + right = Dict{Site, Sites}(i => (-4//5, -1//5, 0) for i ∈ 1:ncols) + for i ∈ 1:ncols - 1 push!(right, i + 1//2 => (0,)) end + + MpoLayers(main, Dict(i => (1//5, 2//5) for i ∈ 1:ncols), right) +end + +function projected_energy( + net::PEPSNetwork, v::T, w::T, k::Int +) where {T <: NTuple{N, Int} where N} + en = interaction_energy(net, v, w) + @inbounds en[projector(net, v, w), k] +end + +function projected_energy( + net::PEPSNetwork, v::T, w::T +) where {T <: NTuple{N, Int} where N} + en = interaction_energy(net, v, w) + + @inbounds en[projector(net, v, w), projector(net, w, v)] +end + +""" +$(TYPEDSIGNATURES) + +Calculates conditional probability for a SquareSingleNode Layout. +""" +function conditional_probability( + ::Type{T}, ctr::MpsContractor{S}, ∂v::Vector{Int} +) where {T <: SquareSingleNode, S} + indβ, β = length(ctr.betas), last(ctr.betas) + i, j = ctr.current_node + + L = left_env(ctr, i, ∂v[1:j-1], indβ) + R = right_env(ctr, i, ∂v[(j+2):ctr.peps.ncols+1], indβ) + if ctr.onGPU + R = CuArray(R) + end + M = dressed_mps(ctr, i, indβ)[j] + + @tensor LM[y, z] := L[x] * M[x, y, z] + + @nexprs 2 k->( + en_k = projected_energy(ctr.peps, (i, j), (i+1-k, j-2+k), ∂v[j-1+k]); + p_k = projector(ctr.peps, (i, j), (i+2-k, j-1+k)); + ) + probs = probability(local_energy(ctr.peps, (i, j)) .+ en_1 .+ en_2, β) + + A = LM[:, p_1] .* R[:, p_2] + @reduce bnd_exp[x] := sum(y) A[y, x] + probs .*= Array(bnd_exp) + + push!(ctr.statistics, ((i, j), ∂v) => error_measure(probs)) + normalize_probability(probs) +end + + + +function projectors_site_tensor(network::PEPSNetwork{T, S}, vertex::Node) where {T <: SquareSingleNode, S} + i, j = vertex + projector.(Ref(network), Ref(vertex), ((i, j-1), (i-1, j), (i, j+1), (i+1, j))) +end + + +function nodes_search_order_Mps(peps::PEPSNetwork{T, S}) where {T <: SquareSingleNode, S} + ([(i, j) for i ∈ 1:peps.nrows for j ∈ 1:peps.ncols], (peps.nrows+1, 1)) +end + + +function boundary(::Type{T}, ctr::MpsContractor{S}, node::Node) where {T <: SquareSingleNode, S} + i, j = node + vcat( + [((i, k), (i+1, k)) for k ∈ 1:j-1]..., + ((i, j-1), (i, j)), + [((i-1, k), (i, k)) for k ∈ j:ctr.peps.ncols]... + ) +end + + +function update_energy( + ::Type{T}, ctr::MpsContractor{S}, σ::Vector{Int}, +) where {T <: SquareSingleNode, S} + net = ctr.peps + i, j = ctr.current_node + en = local_energy(net, (i, j)) + for v ∈ ((i, j-1), (i-1, j)) + en += bond_energy(net, (i, j), v, local_state_for_node(ctr, σ, v)) + end + en +end diff --git a/src/tensors.jl b/src/tensors.jl new file mode 100644 index 00000000..3e9cdcbd --- /dev/null +++ b/src/tensors.jl @@ -0,0 +1,198 @@ +export tensor, probability + + +function tensor(network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real) + if v ∉ keys(network.tensors_map) return ones(Float64, 1, 1) end + tensor(network, v, β, Val(network.tensors_map[v])) +end + + +function Base.size(network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode) + if v ∉ keys(network.tensors_map) return (1, 1) end + size(network, v, Val(network.tensors_map[v])) +end + + +function tensor( + net::PEPSNetwork{T, S}, v::PEPSNode, β::Real, ::Val{:sparse_site} +) where {T <: AbstractGeometry, S} + SiteTensor( + net.lp, + probability(local_energy(net, Node(v)), β), + projectors_site_tensor(net, Node(v)) + ) +end + + +function tensor( + net::PEPSNetwork{T, Dense}, v::PEPSNode, β::Real, ::Val{:site} +) where T <: AbstractGeometry + sp = tensor(net, v, β, Val(:sparse_site)) + projs = Tuple(get_projector!(net.lp, x) for x in sp.projs) + A = zeros(maximum.(projs)) + for (σ, lexp) ∈ enumerate(sp.loc_exp) + @inbounds A[getindex.(projs, Ref(σ))...] += lexp + end + A +end + + +function Base.size( + network::PEPSNetwork{T, S}, + v::PEPSNode, + ::Union{Val{:site}, Val{:sparse_site}, Val{:sparse_site_square_double_node}} +) where {T <: AbstractGeometry, S <: AbstractSparsity} + maximum.(projectors_site_tensor(network, Node(v))) +end + + + + +function tensor( + net::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, β::Real, ::Val{:central_v_single_node} +) + i = floor(Int, node.i) + connecting_tensor(net, (i, node.j), (i+1, node.j), β) +end + + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:central_v_single_node} +) + i = floor(Int, node.i) + size(interaction_energy(network, (i, node.j), (i+1, node.j))) +end + + +function tensor( + net::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, β::Real, ::Val{:central_h_single_node} +) + j = floor(Int, node.j) + connecting_tensor(net, (node.i, j), (node.i, j+1), β) +end + + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:central_h_single_node} +) + j = floor(Int, node.j) + size(interaction_energy(network, (node.i, j), (node.i, j+1))) +end + + +function tensor( + network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real, ::Val{:gauge_h} +) + Diagonal(network.gauges.data[v]) # |> Array +end + + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, ::Val{:gauge_h} +) + u = size(network.gauges.data[v], 1) + (u, u) +end + + +function probability(en::T, β::Real) where T <: AbstractArray + en_min = minimum(en) + exp.(-β .* (en .- en_min)) +end + + +function connecting_tensor( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::Node, w::Node, β::Real +) + probability(interaction_energy(net, v, w), β) +end + + +function sqrt_tensor_up( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::Node, w::Node, β::Real +) + U, Σ, _ = svd(connecting_tensor(net, v, w, β)) + U * Diagonal(sqrt.(Σ)) +end + + +function sqrt_tensor_down( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::Node, w::Node, β::Real +) + _, Σ, V = svd(connecting_tensor(net, v, w, β)) + Diagonal(sqrt.(Σ)) * V' +end + + +function tensor( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real, ::Val{:sqrt_up} +) + r, j = Node(v) + i = floor(Int, r) + sqrt_tensor_up(net, (i, j), (i+1, j), β) +end + + +function Base.size( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, ::Val{:sqrt_up} +) + r, j = Node(v) + i = floor(Int, r) + u, d = size(interaction_energy(net, (i, j), (i+1, j))) + (u, min(d, u)) +end + + +function tensor( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real, ::Val{:sqrt_down} +) + r, j = Node(v) + i = floor(Int, r) + sqrt_tensor_down(net, (i, j), (i+1, j), β) +end + + +function Base.size( + net::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, ::Val{:sqrt_down} +) + r, j = Node(v) + i = floor(Int, r) + u, d = size(interaction_energy(net, (i, j), (i+1, j))) + (min(u, d), d) +end + + +function tensor( + network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real, ::Val{:sqrt_up_d} +) + U, Σ, _ = svd(tensor(network, v, β, Val(:central_d_single_node))) + U * Diagonal(sqrt.(Σ)) +end + + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:sqrt_up_d} +) + i, j = floor(Int, node.i), floor(Int, node.j) + u, d = size(interaction_energy(network, (i, j), (i + 1, j + 1))) + ũ, d̃ = size(interaction_energy(network, (i, j + 1), (i + 1, j))) + (u * ũ, min(u * ũ, d * d̃)) +end + + +function tensor( + network::AbstractGibbsNetwork{Node, PEPSNode}, v::PEPSNode, β::Real, ::Val{:sqrt_down_d} +) + _, Σ, V = svd(tensor(network, v, β, Val(:central_d_single_node))) + Diagonal(sqrt.(Σ)) * V' +end + + +function Base.size( + network::AbstractGibbsNetwork{Node, PEPSNode}, node::PEPSNode, ::Val{:sqrt_down_d} +) + i, j = floor(Int, node.i), floor(Int, node.j) + u, d = size(interaction_energy(network, (i, j), (i + 1, j + 1))) + ũ, d̃ = size(interaction_energy(network, (i, j + 1), (i + 1, j))) + (min(u * ũ, d * d̃), d * d̃) +end diff --git a/src/util.jl b/src/util.jl new file mode 100644 index 00000000..c53848a6 --- /dev/null +++ b/src/util.jl @@ -0,0 +1,144 @@ +export + exact_marginal_probability, + exact_conditional_probability, + conditional_probability, + update_energy, + error_measure, + exact_spectrum + +""" +$(TYPEDSIGNATURES) + +Calculate the exact spectrum and corresponding eigenstates for a clustered Hamiltonian using memoization. + +## Arguments +- `clustered_hamiltonian::LabelledGraph{S, T}`: A clustered Hamiltonian represented as a labelled graph. + +## Returns +- Tuple `(energies, states)`: A tuple containing the calculated energies and corresponding eigenstates. + +## Description +The `exact_spectrum` function calculates the exact spectrum and corresponding eigenstates for a clustered Hamiltonian using memoization. +The function utilizes memoization to efficiently store and retrieve previously computed results for different inputs, reducing redundant calculations. +The Hamiltonian is represented as a labelled graph (`LabelledGraph`) with vertices corresponding to clusters and edges +representing interactions between clusters. +""" +@memoize function exact_spectrum(clustered_hamiltonian::LabelledGraph{S, T}) where {S, T} + # TODO: Not going to work without PoolOfProjectors + ver = vertices(clustered_hamiltonian) + rank = cluster_size.(Ref(clustered_hamiltonian), ver) + states = [Dict(ver .=> σ) for σ ∈ Iterators.product([1:r for r ∈ rank]...)] + energy.(Ref(clustered_hamiltonian), states), states +end + +""" +$(TYPEDSIGNATURES) +Calculate the exact marginal probability of a target state within the context of an MPS (Matrix Product State) contractor. + +## Arguments +- `ctr::MpsContractor{T}`: An MPS contractor representing the contracted state and associated parameters. +- `σ::Vector{Int}`: A vector representing the encoded state. + +## Returns +- `Float64`: The calculated exact marginal probability of the target state. + +## Description +The `exact_marginal_probability` function calculates the exact marginal probability of a target state within the context of an MPS contractor. +It decodes the provided state vector `σ` using the `decode_state` function, obtains the exact spectrum and states +from the clustered Hamiltonian of the associated PEPS, and computes the marginal probability of the target state using the Boltzmann distribution. +The function utilizes the `exact_spectrum` function to obtain the energies and states of the clustered Hamiltonian, +exponentiates the negative energies multiplied by the inverse temperature (`ctr.betas[end]`), normalizes the probabilities, +and calculates the marginal probability of the target state. +""" +function exact_marginal_probability(ctr::MpsContractor{T}, σ::Vector{Int}) where T + # TODO: Not going to work without PoolOfProjectors + target_state = decode_state(ctr.peps, σ, true) + energies, states = exact_spectrum(ctr.peps.clustered_hamiltonian) + prob = exp.(-ctr.betas[end] .* energies) + prob ./= sum(prob) + sum(prob[findall([all(s[k] == v for (k, v) ∈ target_state) for s ∈ states])]) +end + +""" +$(TYPEDSIGNATURES) +Calculate the exact conditional probability of a target state within the context of an MPS (Matrix Product State) contractor. + +## Arguments +- `ctr::MpsContractor{T}`: An MPS contractor representing the contracted state and associated parameters. +- `σ::Vector{Int}`: A vector representing the encoded state. + +## Returns +- `Vector{Float64}`: The calculated exact conditional probabilities for each possible outcome. + +## Description +The `exact_conditional_probability` function calculates the exact conditional probability distribution of a target state within the context of an MPS contractor. +It uses the `exact_marginal_probability` function for different branch states generated by `branch_state` and normalizes the probabilities. +""" +function exact_conditional_probability(ctr::MpsContractor{T}, σ::Vector{Int}) where T + # TODO: Not going to work without PoolOfProjectors + local_basis = collect(1:cluster_size(ctr.peps, ctr.current_node)) + probs = exact_marginal_probability.(Ref(ctr), branch_state(local_basis, σ)) + probs ./= sum(probs) +end + +""" +$(TYPEDSIGNATURES) +Calculate the conditional probability of a given state within the context of an MPS (Matrix Product State) contractor. + +## Arguments +- `ctr::MpsContractor{S}`: An MPS contractor representing the contracted state and associated parameters. +- `w::Vector{Int}`: A vector representing the encoded state. + +## Returns +- `Vector{Float64}`: The calculated conditional probabilities for each possible outcome. + +## Description +The `conditional_probability` function calculates the conditional probability distribution of a given state within the context of an MPS contractor. +It delegates the calculation to the `conditional_probability` function with a specified tensor layout using the `layout` function. +This function is a convenience wrapper that allows users to calculate conditional probabilities without explicitly specifying the tensor layout. + +""" +function conditional_probability(ctr::MpsContractor{S}, w::Vector{Int}) where S + conditional_probability(layout(ctr.peps), ctr, w) +end + +""" +$(TYPEDSIGNATURES) +Update the energy associated with the current state within the context of an MPS (Matrix Product State) contractor. + +## Arguments +- `ctr::MpsContractor{S}`: An MPS contractor representing the contracted state and associated parameters. +- `w::Vector{Int}`: A vector representing the encoded state. + +## Description +The `update_energy` function updates the energy associated with the current state within the context of an MPS contractor. +It delegates the calculation to the `update_energy` function with a specified tensor layout using the `layout` function. +This function is a convenience wrapper that allows users to update the energy without explicitly specifying the tensor layout. + +""" +function update_energy(ctr::MpsContractor{S}, w::Vector{Int}) where S + update_energy(layout(ctr.peps), ctr, w) +end + +""" +$(TYPEDSIGNATURES) +Calculate an error measure based on the given probability distribution. + +## Arguments +- `probs`: An array representing a probability distribution. + +## Description +The `error_measure` function calculates an error measure based on the provided probability distribution. +The error measure is designed to capture discrepancies or irregularities in the distribution. +The function checks for extreme cases, such as when the maximum probability less or equal zero, and returns a predefined value (`2.0`). +If the minimum probability is negative, the error measure is calculated as the absolute value of the minimum +probability divided by the maximum absolute value of the probabilities. +If neither of these conditions is met, the error measure is set to `0.0`. +The error measure provides a quantitative assessment of the deviation from a well-behaved probability distribution, +helping to identify potential issues or anomalies. +""" +function error_measure(probs) + if maximum(probs) <= 0 return 2.0 end + if minimum(probs) < 0 return abs(minimum(probs)) / maximum(abs.(probs)) end + return 0.0 +end diff --git a/test/branch_and_bound.jl b/test/branch_and_bound.jl index edf73d37..69476ce7 100644 --- a/test/branch_and_bound.jl +++ b/test/branch_and_bound.jl @@ -4,6 +4,8 @@ const example_solution_short = Solution( [0.25, 0.1, 0.2], [1, 1, 1], 0.666, + [Droplet[], Droplet[], Droplet[]], + [[0], [0], [0]] ) const example_degenerate_solution = Solution( @@ -12,11 +14,12 @@ const example_degenerate_solution = Solution( [0.23, 0.1, 0.23, 0.25, 0.05], [1, 1, 1, 1, 1], 0.22, + [Droplet[], Droplet[], Droplet[], Droplet[], Droplet[]], + [[0], [0], [0], [0], [0]] ) - @testset "Bounding solution of size ≥ max_states gives solution of max_states length" begin - bounded = bound_solution(example_solution_short, 2) + bounded = bound_solution(example_solution_short, 2, 0.0) @test length(bounded.energies) == 2 @test length(bounded.states) == 2 @test length(bounded.probabilities) == 2 @@ -25,17 +28,16 @@ const example_degenerate_solution = Solution( end @testset "Bounding solution of size < max_states gives the same solution (up to permutation)" begin - bounded = bound_solution(example_solution_short, 10) - @test bounded.energies == [-1.5, -1.3, -1.2] - @test bounded.probabilities == [0.25, 0.2, 0.1] - @test bounded.states == [[1, 2], [3, 4], [0, 1]] + bounded = bound_solution(example_solution_short, 10, 0.0) + @test bounded.energies == [-1.5, -1.2, -1.3] + @test bounded.probabilities == [0.25, 0.1, 0.2] + @test bounded.states == [[1, 2], [0, 1], [3, 4]] @test bounded.degeneracy == [1, 1, 1] end @testset "Bounding solution clips at correct probability" begin - @testset "when max_states=$(max_states)" for (max_states, expected_prob) ∈ - [(1, 0.23), (2, 0.23), (3, 0.22)] - bounded = bound_solution(example_degenerate_solution, max_states) + @testset "when max_states=$(max_states)" for (max_states, expected_prob) ∈ [(1, 0.23), (2, 0.23), (3, 0.22)] + bounded = bound_solution(example_degenerate_solution, max_states, 0.0) @test bounded.largest_discarded_probability == expected_prob @test all(bounded.probabilities .≥ expected_prob) end @@ -43,13 +45,11 @@ end @testset "Bounding solution preserves correspondence between energies, states and probabilities" begin - sorted_idx = sortperm(example_degenerate_solution.probabilities, rev = true) - for max_states ∈ 1:5 - bounded = bound_solution(example_degenerate_solution, max_states) - @test bounded.energies == - example_degenerate_solution.energies[sorted_idx][1:max_states] - @test bounded.probabilities == - example_degenerate_solution.probabilities[sorted_idx][1:max_states] + sorted_idx = sortperm(example_degenerate_solution.probabilities, rev=true) + for max_states ∈ 1:4 # problem for max_states = 5 + bounded = bound_solution(example_degenerate_solution, max_states, 0.0) + @test bounded.energies == example_degenerate_solution.energies[sorted_idx][1:max_states] + @test bounded.probabilities == example_degenerate_solution.probabilities[sorted_idx][1:max_states] @test bounded.states == example_degenerate_solution.states[sorted_idx][1:max_states] end end diff --git a/test/chimera_overlap_python.jl b/test/chimera_overlap_python.jl new file mode 100644 index 00000000..cf710707 --- /dev/null +++ b/test/chimera_overlap_python.jl @@ -0,0 +1,58 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + +m = 4 +n = 4 +t = 8 + +L = n * m * t +max_cl_states = 2^(t-0) + +ground_energy = -3336.773383 + +β = 0.5 +bond_dim = 16 +δp = 1E-3 +num_states = 1000 + +instance = "$(@__DIR__)/instances/chimera_droplets/128power/001.txt" + +cl_h = clustered_hamiltonian( + ising_graph(instance), + spectrum= full_spectrum, #my_brute_force, + cluster_assignment_rule=super_square_lattice((m, n, t)) +) + +params = MpsParameters(bond_dim, 1E-8, 10) +search_params = SearchParameters(num_states, δp) + +Strategy = SVDTruncate +Gauge = NoUpdate +@testset "Compare the results for GaugesEnergy with Python (Sparsity = $Sparsity)" for Sparsity ∈ (Dense, Sparse) + network = PEPSNetwork{SquareSingleNode{GaugesEnergy}, Sparsity}(m, n, cl_h, rotation(0)) + ctr = MpsContractor{Strategy, Gauge}(network, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + @testset "Compare the results with Python" begin + overlap_python = [0.2637787707674837, 0.2501621729619047, 0.2951954406837012] + for i in 1:n-1 + psi_top = mps_top(ctr, i, 4) + psi_bottom = mps(ctr, i+1, 4) + overlap = psi_top * psi_bottom + @test isapprox(overlap, overlap_python[i], atol=1e-5) + end + end + clear_memoize_cache() +end + +@testset "Compare the results for EnergyGauges with Python (Sparsity = $Sparsity)" for Sparsity ∈ (Dense, Sparse) + overlap_python = [0.18603559878582027, 0.36463028391550056, 0.30532555472025247] + net = PEPSNetwork{SquareSingleNode{EnergyGauges}, Sparsity}(m, n, cl_h, rotation(0)) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + for i in 1:n-1 + psi_top = mps_top(ctr, i, 4) + psi_bottom = mps(ctr, i+1, 4) + overlap = psi_top * psi_bottom + @test isapprox(overlap, overlap_python[i], atol=1e-5) + end + clear_memoize_cache() +end diff --git a/test/experimental/gauges.jl b/test/experimental/gauges.jl new file mode 100644 index 00000000..9a9ad747 --- /dev/null +++ b/test/experimental/gauges.jl @@ -0,0 +1,135 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + +m = 4 +n = 4 +t = 8 + +L = n * m * t +max_cl_states = 2^(t-0) + +β =0.5 +bond_dim = 32 +δp = 1E-3 +num_states = 1000 + +instance = "$(@__DIR__)/instances/chimera_droplets/128power/001.txt" + +cl_h = clustered_hamiltonian( + ising_graph(instance), + max_cl_states, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) +) + +params = MpsParameters(bond_dim, 1E-8, 10) +search_params = SearchParameters(num_states, δp) + +# @testset "Overlaps calculated differently are the same." begin +# for Lattice ∈ (SquareSingleNode, SquareCrossSingleNode) +# for Sparsity ∈ (Dense, Sparse), transform ∈ all_lattice_transformations[[1]] +# for Layout ∈ (GaugesEnergy, EnergyGauges, EngGaugesEng) +# net = PEPSNetwork{Lattice{Layout}, Sparsity}(m, n, cl_h, transform, :id) +# ctr_svd = MpsContractor{SVDTruncate, GaugeStrategy}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) +# ctr_anneal = MpsContractor{MPSAnnealing, GaugeStrategy}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + +# @testset "Overlaps calculated for different Starategies are the same." begin +# indβ = 3 +# for i ∈ 1:m-1 +# ψ_top = mps_top(ctr_svd, i, indβ) +# ϕ_top = mps_top(ctr_anneal, i, indβ) +# @test ψ_top * ψ_top ≈ 1 +# @test ϕ_top * ϕ_top ≈ 1 +# @test ψ_top * ϕ_top ≈ 1 +# end +# end +# end +# clear_memoize_cache() + +# for Layout ∈ (GaugesEnergy,) +# net = PEPSNetwork{Lattice{Layout}, Sparsity}(m, n, cl_h, transform, :id) +# ctr_svd = MpsContractor{SVDTruncate, GaugeStrategy}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) +# @testset "Overlaps calculated in Python are the same as in Julia." begin +# indβ = [4, ] +# overlap_python = [0.2637787707674837, 0.2501621729619047, 0.2951954406837012] + +# for i ∈ vcat(1:m-1)#, m-1:-1:1) +# ψ_top = mps_top(ctr_svd, i, indβ[begin]) +# ψ_bot = mps(ctr_svd, i+1, indβ[begin]) +# overlap1 = ψ_top * ψ_bot +# @test isapprox(overlap1, overlap_python[i], atol=1e-5) +# end +# clear_memoize_cache() +# end +# end +# end +# end +# end + +@testset "Updating gauges works correctly." begin +for Strategy ∈ (SVDTruncate, MPSAnnealing), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (GaugesEnergy,) + for Gauge ∈ (GaugeStrategy, ) + for Lattice ∈ (SquareSingleNode, SquareCrossSingleNode), transform ∈ all_lattice_transformations + net = PEPSNetwork{Lattice{Layout}, Sparsity}(m, n, cl_h, transform, :id) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + + @testset "Overlaps calculated differently are the same." begin + indβ = 3 + for i ∈ 1:m-1 + + ψ_top = mps_top(ctr, i, indβ) + ψ_bot = mps(ctr, i+1, indβ) + + try + overlap = tr(overlap_density_matrix(ψ_top, ψ_bot, indβ)) + @test overlap ≈ ψ_bot * ψ_top + catch + println(Strategy, " ", Sparsity, " ", Lattice, " ", i) + overlap = Inf + @test overlap ≈ ψ_bot * ψ_top + + end + + end + end + clear_memoize_cache() + + # @testset "ψ_bot and ψ_top are not updated in place though memoize!" begin + # indβ = [3,] + # for aba in 1:3, i ∈ 1:m-1 + # println(aba," ", i) + # ψ_top = mps_top(ctr, i, indβ[begin]) + # ψ_bot = mps(ctr, i+1, indβ[begin]) + + # overlap_old = ψ_top * ψ_bot + + # update_gauges!(ctr, i, indβ, Val(:down)) + + # # assert that ψ_bot and ψ_top are not updated in place though memoize! + # overlap_old2 = ψ_bot * ψ_top + + # @test overlap_old ≈ overlap_old2 + + + # end + # end + # break + # clear_memoize_cache() + + # @testset "Updating gauges from top and bottom gives the same energy." begin + # indβ = [3,] + # update_gauges!(ctr, m, indβ, Val(:down)) + # sol_l, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + # clear_memoize_cache() + # update_gauges!(ctr, m, indβ, Val(:up)) + # sol_r, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + # @test sol_l.energies[begin] ≈ sol_r.energies[begin] + # end + # clear_memoize_cache() + end + end + end +end +end \ No newline at end of file diff --git a/test/experimental/gauges_cuda.jl b/test/experimental/gauges_cuda.jl new file mode 100644 index 00000000..4bc7459b --- /dev/null +++ b/test/experimental/gauges_cuda.jl @@ -0,0 +1,56 @@ +using SpinGlassExhaustive + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +@testset "Pegasus instance has the correct spectrum for all transformations" begin + + m, n, t = 1, 1, 3 + + β = 1.0 + BOND_DIM = 2 + MAX_STATES = 500 + MAX_SWEEPS = 2 + VAR_TOL = 1E-16 + TOL_SVD = 1E-16 + DE = 16.0 + δp = 1E-5*exp(-β * DE) + ig = ising_graph("$(@__DIR__)/../instances/pegasus_random/minimal.txt") + INDβ = [1, 2, 3,] + cl_h = clustered_hamiltonian( + ig, + spectrum=my_brute_force, + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + + params = MpsParameters(BOND_DIM, VAR_TOL, MAX_SWEEPS, TOL_SVD) + search_params = SearchParameters(MAX_STATES, δp) + Gauge = GaugeStrategy + Strategy = Zipper + Sparsity = Sparse + Layout = GaugesEnergy + + energies = Vector{Float64}[] + + for transform ∈ all_lattice_transformations + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + update_gauges!(ctr, m, INDβ, Val(:up)) + sol, s = low_energy_spectrum(ctr, search_params) + #sol = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + # println( maximum(abs.(norm_prob ./ exp.(-β .* (sol.energies .- sol.energies[1]))) .- 1 )) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) # test up to 1e-5 + push!(energies, sol.energies[1 : Int(ceil(MAX_STATES / 4))]) + clear_memoize_cache() + end + #println(energies) + @test all(e -> e ≈ first(energies), energies) +end \ No newline at end of file diff --git a/test/experimental/mpo_size.jl b/test/experimental/mpo_size.jl new file mode 100644 index 00000000..b713f872 --- /dev/null +++ b/test/experimental/mpo_size.jl @@ -0,0 +1,95 @@ +using SpinGlassExhaustive +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics +using LowRankApprox +using CUDA + +disable_logging(LogLevel(1)) +CUDA.allowscalar(false) + + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +m, n, t = 7, 7, 3 + +Dcut = 8 +β = 1. +tolV = 1E-16 +tolS = 1E-16 +max_sweeps = 1 +indβ = 1 +ITERS_SVD = 1 +ITERS_VAR = 1 +DTEMP_MULT = 2 +MAX_STATES = 128 +METHOD = :psvd_sparse #:psvd_sparse #:svd +DE = 16.0 +δp = 1E-5*exp(-β * DE) +cluster_states = [2^4, 2^8, 2^12, 2^16, 2^20,] + +ig = ising_graph("$(@__DIR__)/../instances/pegasus_random/P8/CBFM-P/SpinGlass/001_sg.txt") + +for cl_states in cluster_states + println("====================") + + println("cluster states: ", cl_states) + # cl_h = clustered_hamiltonian( + # ig, + # cl_states, + # spectrum=my_brute_force, #rm _gpu to use CPU + # cluster_assignment_rule=pegasus_lattice((m, n, t)) + # ) + + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + + cl_h = truncate_clustered_hamiltonian_2site_energy(cl_h, cl_states) + + params = MpsParameters(Dcut, tolV, max_sweeps, tolS, ITERS_SVD, ITERS_VAR, DTEMP_MULT, METHOD) + search_params = SearchParameters(MAX_STATES, δp) + + Strategy = Zipper + tran = LatticeTransformation((1, 2, 3, 4), false) + Layout = GaugesEnergy + Gauge = NoUpdate + + i = div(m, 2) + indβ = 1 + + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparse}(m, n, cl_h, tran) + ctr = MpsContractor{Strategy, Gauge}(net, [β], :graduate_truncate, params; onGPU=onGPU) + Ws = SpinGlassEngine.mpo(ctr, ctr.layers.main, i, indβ) + # println(" Ws -> ", which_device(Ws), " ", format_bytes.(measure_memory(Ws))) + # println(ctr.layers.main) + site = Ws[3].ctr + virtual = Ws[5//2].ctr + println("SITE TENSOR ") + println("loc exp ", size(site.loc_exp)) + println("dims ", site.dims) + # println("projs ", size(site.projs)) + + println("VIRTUAL TENSOR ") + # println("con ", size(virtual.con)) + println("dims ", virtual.dims) + + # println("projs ", size(virtual.projs)) +end \ No newline at end of file diff --git a/test/experimental/sampling.jl b/test/experimental/sampling.jl new file mode 100644 index 00000000..07156e2b --- /dev/null +++ b/test/experimental/sampling.jl @@ -0,0 +1,48 @@ +using SpinGlassExhaustive + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +function overlap_states(state1::Vector{Int}, state2::Vector{Int}) + s1 = reshape(state1, :, length(state1)) + s2 = reshape(state2, :, length(state2)) + n1 = sqrt(dot(s1, s1)) + n2 = sqrt(dot(s2, s2)) + dot(s1, s2) / (n1 * n2) +end + +m, n, t = 12, 12, 1 + +β = 1.0 +bond_dim = 2 +num_states = 7 #22 + +ig = ising_graph("$(@__DIR__)/../instances/square_gauss/S12/001.txt") +cl_h = clustered_hamiltonian( + ig, + spectrum=my_brute_force, + cluster_assignment_rule=super_square_lattice((m, n, t)) +) +params = MpsParameters(bond_dim, 1E-8, 4) +search_params = SearchParameters(num_states, 0.0) +Gauge = NoUpdate + +energies = Vector{Float64}[] +Strategy = Zipper +Sparsity = Sparse +Layout = EnergyGauges +Lattice = SquareSingleNode +transform = rotation(0) + +net = PEPSNetwork{Lattice{Layout}, Sparsity}(m, n, cl_h, transform) +ctr = MpsContractor{Strategy, Gauge}(net, [β/8., β/4., β/2., β], :graduate_truncate, params; onGPU=onGPU) +sol = gibbs_sampling(ctr, search_params) + +for i in 1:num_states-1 + o = overlap_states(sol.states[i], sol.states[i+1]) + println("Overlap between states ", i, " and ", i+1, " is ", o) +end + +println(sol.energies) +#println(sol.states) \ No newline at end of file diff --git a/test/experimental/search_chimera_gauge.jl b/test/experimental/search_chimera_gauge.jl new file mode 100644 index 00000000..85488696 --- /dev/null +++ b/test/experimental/search_chimera_gauge.jl @@ -0,0 +1,52 @@ +@testset "Smallest chimera pathological instance has the correct spectrum for all transformations" begin + + m, n, t = 8, 8, 8 + L = n * m * t + + β = 2.0 + BOND_DIM = 32 + MAX_STATES = 500 + MAX_SWEEPS = 10 + VAR_TOL = 1E-8 + TOL_SVD = 1E-16 + DE = 16.0 + δp = 1E-5*exp(-β * DE) + instance = "$(@__DIR__)/instances/chimera_droplets/512power/001.txt" + INDβ = [1, 2, 3,] + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + + params = MpsParameters(BOND_DIM, VAR_TOL, MAX_SWEEPS, TOL_SVD) + search_params = SearchParameters(MAX_STATES, δp) + Gauge = GaugeStrategy + + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, Zipper), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (GaugesEnergy,) + for transform ∈ all_lattice_transformations + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + update_gauges!(ctr, m, INDβ, Val(:up)) + sol, s = low_energy_spectrum(ctr, search_params) + #sol = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + # println( maximum(abs.(norm_prob ./ exp.(-β .* (sol.energies .- sol.energies[1]))) .- 1 )) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) # test up to 1e-5 + push!(energies, sol.energies[1 : Int(ceil(MAX_STATES / 4))]) + clear_memoize_cache() + end + end + end + println(energies) + @test all(e -> e ≈ first(energies), energies) +end \ No newline at end of file diff --git a/test/experimental/squarestar_double_node_pegasus.jl b/test/experimental/squarestar_double_node_pegasus.jl new file mode 100644 index 00000000..4ab18c7e --- /dev/null +++ b/test/experimental/squarestar_double_node_pegasus.jl @@ -0,0 +1,75 @@ +using SpinGlassExhaustive + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +function check_ground_state(cl_h) + ground_state = [982, 751, 433, 421, 659, 290, 577, 144, 531, 554, 217, 432, 875, 964, 434, 180, 167, 303] + gs = Dict(56 => 1, 35 => 1, 60 => -1, 67 => 1, 215 => 1, 73 => 1, 115 => 1, 112 => 1, 185 => 1, 86 => 1, 168 => 1, 207 => 1, 183 => -1, 177 => -1, 12 => 1, 75 => 1, 23 => 1, 111 => 1, 41 => 1, 68 => 1, 82 => -1, 130 => -1, 125 => 1, 77 => 1, 172 => 1, 71 => 1, 66 => -1, 103 => -1, 59 => -1, 208 => 1, 26 => -1, 211 => 1, 127 => 1, 116 => -1, 100 => 1, 79 => -1, 195 => 1, 141 => -1, 135 => 1, 138 => -1, 107 => 1, 46 => 1, 57 => 1, 152 => -1, 170 => 1, 129 => 1, 78 => -1, 133 => 1, 72 => -1, 184 => -1, 1 => -1, 137 => 1, 22 => -1, 154 => 1, 206 => 1, 33 => -1, 40 => -1, 113 => 1, 165 => -1, 142 => 1, 5 => -1, 55 => -1, 114 => 1, 136 => -1, 117 => 1, 45 => -1, 145 => -1, 158 => 1, 176 => 1, 28 => -1, 148 => -1, 92 => 1, 36 => -1, 118 => -1, 162 => -1, 84 => -1, 7 => -1, 25 => 1, 95 => -1, 203 => 1, 93 => -1, 18 => 1, 147 => 1, 157 => 1, 16 => 1, 19 => -1, 44 => 1, 31 => 1, 146 => -1, 74 => -1, 61 => 1, 29 => -1, 212 => -1, 159 => -1, 193 => -1, 101 => -1, 105 => 1, 17 => 1, 166 => 1, 89 => 1, 198 => 1, 214 => -1, 80 => -1, 51 => 1, 143 => 1, 48 => -1, 15 => -1, 97 => -1, 134 => -1, 110 => -1, 30 => -1, 6 => 1, 182 => -1, 164 => 1, 153 => 1, 186 => 1, 64 => 1, 90 => -1, 139 => -1, 4 => -1, 13 => -1, 104 => 1, 52 => 1, 179 => 1, 43 => -1, 11 => 1, 69 => -1, 171 => -1, 85 => -1, 119 => -1, 39 => -1, 216 => -1, 126 => -1, 108 => -1, 156 => -1, 2 => -1, 10 => -1, 27 => 1, 124 => 1, 144 => -1, 200 => -1, 20 => 1, 81 => 1, 187 => 1, 213 => -1, 9 => 1, 189 => -1, 109 => 1, 161 => 1, 88 => -1, 209 => -1, 120 => 1, 24 => 1, 8 => -1, 37 => -1, 83 => -1, 190 => 1, 201 => -1, 99 => 1, 121 => 1, 14 => 1, 174 => -1, 123 => 1, 32 => 1, 197 => 1, 196 => -1, 210 => -1, 151 => 1, 54 => -1, 63 => 1, 191 => -1, 91 => -1, 62 => -1, 205 => 1, 150 => 1, 122 => 1, 58 => -1, 199 => 1, 173 => 1, 188 => -1, 98 => -1, 204 => -1, 76 => -1, 34 => 1, 50 => 1, 194 => -1, 167 => 1, 42 => -1, 87 => 1, 132 => 1, 140 => -1, 202 => -1, 169 => 1, 180 => -1, 160 => 1, 49 => -1, 106 => 1, 94 => 1, 102 => 1, 128 => -1, 70 => -1, 21 => 1, 38 => 1, 163 => 1, 131 => -1, 192 => -1, 53 => 1, 47 => 1, 175 => 1, 3 => -1, 178 => -1, 96 => -1, 149 => 1, 155 => 1, 181 => -1, 65 => -1) + decoded_states=zeros(18) + for (i, node) in enumerate(vertices(cl_h)) + node_states = get_prop(cl_h, node, :spectrum).states + spins = get_prop(cl_h, node, :cluster).labels + decoded_from_ig = [gs[key] for key in spins] + + if decoded_from_ig in node_states + decoded_states[i]=1 + end + end + println(decoded_states) +end + + +m = 3 +n = 3 +t = 3 + +β = 0.5 +bond_dim = 12 +DE = 16.0 +δp = 0 #1E-5*exp(-β * DE) +num_states = 256 + +VAR_TOL = 1E-16 +MS = 0 +TOL_SVD = 1E-16 +ITERS_SVD = 1 +ITERS_VAR = 1 +DTEMP_MULT = 2 +iter = 2 +cs = 2^16 +eng=7 +hamming_dist=14 +inst="006" +ig = ising_graph("$(@__DIR__)/../instances/pegasus_random/P4/RAU/SpinGlass/006_sg.txt") +results_folder = "$(@__DIR__)/../instances/pegasus_random/P4/RAU/SpinGlass/BP_idx" +if !Base.Filesystem.isdir(results_folder) + Base.Filesystem.mkpath(results_folder) +end + +cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) +) +cl_h = truncate_clustered_hamiltonian(cl_h, β, cs, results_folder, inst; tol=1e-6, iter=iter) +check_ground_state(cl_h) +params = MpsParameters(bond_dim, VAR_TOL, MS, TOL_SVD, ITERS_SVD, ITERS_VAR, DTEMP_MULT) +search_params = SearchParameters(num_states, δp) +energies = Vector{Float64}[] +Strategy = Zipper # MPSAnnealing # SVDTruncate +Sparsity = Sparse #Dense +Layout = GaugesEnergy +Gauge = NoUpdate + +for tran ∈ all_lattice_transformations #[LatticeTransformation((1, 2, 3, 4), false), ] + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, tran) + ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + sol, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(eng, hamming_dist, :hamming))) + println(sol.energies) + # println(sol.states) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + # println(ig_states) + clear_memoize_cache() +end \ No newline at end of file diff --git a/test/experimental/squarestar_double_node_zephyr.jl b/test/experimental/squarestar_double_node_zephyr.jl new file mode 100644 index 00000000..c0fddb83 --- /dev/null +++ b/test/experimental/squarestar_double_node_zephyr.jl @@ -0,0 +1,52 @@ +using SpinGlassExhaustive + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +m = 6 # for Z3 +n = 6 +t = 4 + +β = 0.5 +DE = 16.0 +bond_dim = 5 +δp = 1E-5*exp(-β * DE) +num_states = 128 +iter = 1 +cs = 2^10 +ig = ising_graph("$(@__DIR__)/../instances/zephyr_random/Z3/RAU/SpinGlass/001_sg.txt") +results_folder = "$(@__DIR__)/../instances/zephyr_random/Z3/RAU/SpinGlass/BP" +inst = "001" +cl_h = clustered_hamiltonian( + ig, + # max_cl_states, + spectrum = full_spectrum, #brute_force_gpu, # rm _gpu to use CPU + cluster_assignment_rule = zephyr_lattice((m, n, t)) +) +@time cl_h = truncate_clustered_hamiltonian(cl_h, β, cs, results_folder, inst; tol=1e-6, iter=iter) + +params = MpsParameters(bond_dim, 1E-8, 10, 1E-16) +search_params = SearchParameters(num_states, δp) + +# Solve using PEPS search +energies = Vector{Float64}[] +Strategy = Zipper # SVDTruncate +Sparsity = Sparse #Dense +tran = LatticeTransformation((4, 1, 2, 3), true) +Layout = GaugesEnergy +Gauge = NoUpdate + +net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, tran) +ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + +# for i in 1//2 : 1//2 : m +# for j in 1 : 1//2 : n +# println("Size", (i,j)," = ", log2.(size(net, PEPSNode(i, j)))) +# end +# end + +sol, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) +println(sol.energies) + +clear_memoize_cache() diff --git a/test/experimental/truncate.jl b/test/experimental/truncate.jl new file mode 100644 index 00000000..80fa4a16 --- /dev/null +++ b/test/experimental/truncate.jl @@ -0,0 +1,78 @@ +using SpinGlassExhaustive +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics +using LowRankApprox +using CUDA + +disable_logging(LogLevel(1)) +CUDA.allowscalar(false) + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +m, n, t = 3, 3, 3 + +Dcut = 8 +β = 0.5 +tolV = 1E-16 +tolS = 1E-16 +max_sweeps = 0 +indβ = 1 +ITERS_SVD = 2 +ITERS_VAR = 1 +DTEMP_MULT = 2 +MAX_STATES = 128 +METHOD = :psvd_sparse #:psvd_sparse #:svd +DE = 16.0 +δp = 1E-5*exp(-β * DE) +ig = ising_graph("$(@__DIR__)/../instances/pegasus_random/P4/CBFM-P/SpinGlass/001_sg.txt") +results_folder = "$(@__DIR__)/../instances/pegasus_random/P4/CBFM-P/SpinGlass/BP" +inst = "001" +params = MpsParameters(Dcut, tolV, max_sweeps, tolS, ITERS_SVD, ITERS_VAR, DTEMP_MULT, METHOD) +search_params = SearchParameters(MAX_STATES, δp) + +Strategy = Zipper # MPSAnnealing SVDTruncate +Layout = GaugesEnergy +Gauge = NoUpdate +cl_states = [2^10,] +iter = 2 + +for cs ∈ cl_states + println("===================================") + println("Cluster states ", cs) + println("===================================") + + for tran ∈ [LatticeTransformation((1, 2, 3, 4), false),]#all_lattice_transformations + println("===============") + println("Transform ", tran) + + cl_h = clustered_hamiltonian( + ig, + spectrum= full_spectrum, #rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + + println("Truncate iter ", iter) + #@time cl_h = truncate_clustered_hamiltonian_2site_energy(cl_h, cs) + @time cl_h = truncate_clustered_hamiltonian(cl_h, β, cs, results_folder, inst; tol=1e-6, iter=iter) + for v ∈ vertices(cl_h) + println(v, " -> ", length(get_prop(cl_h, v, :spectrum).energies)) + end + + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparse}(m, n, cl_h, tran) + ctr = MpsContractor{Strategy, Gauge}(net, [β/6, β/3, β/2, β], :graduate_truncate, params; onGPU=onGPU) + sol, schmidts = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + println("sol ", sol) + # println("Schmidts ", schmidts) + end +end diff --git a/test/experimental/truncate_small.jl b/test/experimental/truncate_small.jl new file mode 100644 index 00000000..5311bc2e --- /dev/null +++ b/test/experimental/truncate_small.jl @@ -0,0 +1,84 @@ +using SpinGlassExhaustive +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics +using LowRankApprox +using CUDA + +disable_logging(LogLevel(1)) +CUDA.allowscalar(false) + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +function run_test(instance, m, n, t) + β = 2 + bond_dim = 16 + δp = 1e-10 + num_states = 512 + + tolV = 1E-16 + tolS = 1E-16 + max_sweeps = 1 + indβ = 1 + ITERS_SVD = 1 + ITERS_VAR = 1 + DTEMP_MULT = 2 + METHOD = :psvd_sparse + + ig = ising_graph(instance) + + params = MpsParameters(bond_dim, tolV, max_sweeps, tolS, ITERS_SVD, ITERS_VAR, DTEMP_MULT, METHOD) + + # params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + energies = [] + Gauge = NoUpdate + βs = [β/16, β/8, β/4, β/2, β] + Strategy = Zipper + Sparsity = Sparse + Layout = GaugesEnergy + cl_states = [3,4,5,6,7,8,9,10,15,20] + + + for cl in cl_states + println("===================================") + println("Cluster states ", cl) + println("===================================") + + for tran ∈ all_lattice_transformations #[LatticeTransformation((1, 2, 3, 4), false),] + println("===============") + println("Transform ", tran) + + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #_gpu, # rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + cl_h = truncate_clustered_hamiltonian_2site_energy(cl_h, cl) + + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, tran) + + ctr = MpsContractor{Strategy, Gauge}(net, βs, :graduate_truncate, params; onGPU=onGPU) + + sol, schmidts = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) #, merge_branches(ctr)) + + println("sol ", sol) + clear_memoize_cache() + end + end +end + + +instance = "$(@__DIR__)/../instances/pathological/pegasus_3_4_1.txt" +m, n, t = 3, 4, 1 +run_test(instance, m, n, t) diff --git a/test/experimental/zipper.jl b/test/experimental/zipper.jl new file mode 100644 index 00000000..3aedfcf5 --- /dev/null +++ b/test/experimental/zipper.jl @@ -0,0 +1,139 @@ +using SpinGlassExhaustive +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors +using Logging +using Graphs +using LinearAlgebra +using TensorCast +using MetaGraphs +using Statistics +using LowRankApprox +using CUDA + +disable_logging(LogLevel(1)) +CUDA.allowscalar(false) + +onGPU = true + +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +m, n, t = 8, 8, 8 + +β = 1 +Dcut = 8 + +β = 1. +Dcut = 7 +tolV = 0.01 +tolS = 0. +max_sweeps = 4 +indβ = 1 + +ig = ising_graph("$(@__DIR__)/../instances/chimera_droplets/512power/001.txt") + +cl_h = clustered_hamiltonian( + ig, + spectrum=my_brute_force, #rm _gpu to use CPU + cluster_assignment_rule=super_square_lattice((m, n, t)) +) + +params = MpsParameters(Dcut, tolV, max_sweeps) + +Strategy = SVDTruncate +tran = LatticeTransformation((1, 2, 3, 4), false) +Layout = EnergyGauges +Gauge = NoUpdate + +i = div(m, 2) +indβ = 1 + +net = PEPSNetwork{SquareSingleNode{Layout}, Sparse}(m, n, cl_h, tran) +ctr = MpsContractor{Strategy, Gauge}(net, [β], :graduate_truncate, params; onGPU=onGPU) +Ws = SpinGlassEngine.mpo(ctr, ctr.layers.main, i, indβ) +println(" Ws -> ", which_device(Ws), " ", format_bytes.(measure_memory(Ws))) + +net = PEPSNetwork{SquareSingleNode{Layout}, Dense}(m, n, cl_h, tran) +ctr = MpsContractor{Strategy, Gauge}(net, [β], :graduate_truncate, params; onGPU=onGPU) +Wd = SpinGlassEngine.mpo(ctr, ctr.layers.main, i, indβ) +println(" Wd -> ", which_device(Wd), " ", format_bytes.(measure_memory(Wd))) + +println("Dcut = ", Dcut, " tolV = ", tolV, " tolS = ", tolS, " max_sweeps = ", max_sweeps, " i = ", i) + +ψ = rand(QMps{Float64}, local_dims(Wd, :down), Dcut; onGPU=onGPU) # F64 for now +println(" ψ -> ", which_device(ψ), " ", format_bytes.(measure_memory(ψ))) +canonise!(ψ, :left) + +for (W, msg) ∈ [(Ws, "SPARSE"), (Wd, "DENSE")] # + println(msg) + println("dot") + ψ0 = dot(W, ψ) + println(" ψ0 -> ", which_device(ψ0), " ", format_bytes.(measure_memory(ψ0))) + println(bond_dimensions(ψ0)) + + println("canonize_truncate!") + ψ1 = dot(W, ψ) + canonise!(ψ1, :left) + canonise_truncate!(ψ1, :right, Dcut, tolS) + println(" ψ0 -> ", which_device(ψ1), " ", format_bytes.(measure_memory(ψ))) + println(dot(ψ0, ψ1) / (norm(ψ0) * norm(ψ1)), " ", dot(ψ0, ψ1) / norm(ψ0)) + canonise!(ψ1, :left) + + println("zipper dense svd") + ψ2 = zipper(W, ψ, method=:svd, Dcut=Dcut, tol=tolS, iters_svd=1, iters_var=1, Dtemp_multiplier=2) + println(dot(ψ0, ψ2) / (norm(ψ0) * norm(ψ2)), " ", dot(ψ0, ψ2) / norm(ψ0)) + canonise!(ψ2, :left) + + println("zipper psvd") + ψ3 = zipper(W, ψ, method=:psvd, Dcut=Dcut, tol=tolS, iters_svd=1, iters_var=1, Dtemp_multiplier=2) + println(dot(ψ0, ψ3) / (norm(ψ0) * norm(ψ3)), " ", dot(ψ0, ψ3) / norm(ψ0)) + canonise!(ψ3, :left) + + println("zipper psvd_sparse") + ψ3 = zipper(W, ψ, method=:psvd_sparse, Dcut=Dcut, tol=tolS, iters_svd=1, iters_var=1, Dtemp_multiplier=2) + println(dot(ψ0, ψ3) / (norm(ψ0) * norm(ψ3)), " ", dot(ψ0, ψ3) / norm(ψ0)) + canonise!(ψ3, :left) + + println("variational compressions") + overlap, env = variational_compress!(ψ1, W, ψ, tolV, max_sweeps) + println(dot(ψ0, ψ1) / (norm(ψ0) * norm(ψ1))) + println(dot(ψ0, ψ1), " vs ", exp(overlap)) + + overlap, env = variational_compress!(ψ2, W, ψ, tolV, max_sweeps) + println(dot(ψ0, ψ2) / (norm(ψ0) * norm(ψ2))) + println(dot(ψ0, ψ2), " vs ", exp(overlap)) + + overlap, env = variational_compress!(ψ3, W, ψ, tolV, max_sweeps) + println(dot(ψ0, ψ3) / (norm(ψ0) * norm(ψ3))) + println(dot(ψ0, ψ3), " vs ", exp(overlap)) + + # overlap, env = variational_compress!(ψ4, W, ψ, tolV, max_sweeps) + # println(dot(ψ0, ψ4) / (norm(ψ0) * norm(ψ4))) +end + +# @time ψ4 = zipper(Ws, ψ, method=:psvd, Dcut=Dcut, tol=tolS) +# @time ψ7 = zipper(Wd, ψ, method=:tsvd, Dcut=Dcut, tol=tolS) #, maxiter=Dcut+1, tolconv=100, tolreorth=100) +# @time ψ8 = zipper(Ws, ψ, method=:tsvd, Dcut=Dcut, tol=tolS) #, maxiter=Dcut+1, tolconv=100, tolreorth=100) +# @time ψ9 = zipper(Wd, ψ, method=:tsvd_sparse, Dcut=Dcut, tol=tolS) #, maxiter=Dcut+1, tolconv=100, tolreorth=100) +# @time ψ10 = zipper(Ws, ψ, method=:tsvd_sparse, Dcut=Dcut, tol=tolS) #, maxiter=Dcut+1, tolconv=100, tolreorth=100) + +# println(dot(ψ0, ψ0)) +# println(dot(ψ1, ψ1)) +# println(dot(ψ2, ψ2)) + +# println(dot(ψ0, ψ1) / (norm(ψ0) * norm(ψ1))) +# println(dot(ψ0, ψ2) / (norm(ψ0) * norm(ψ2))) +# println(dot(ψ1, ψ2) / (norm(ψ1) * norm(ψ2))) +# println(dot(ψ1, ψ3) / (norm(ψ1) * norm(ψ3))) +# println(dot(ψ1, ψ4) / (norm(ψ1) * norm(ψ4))) +# println(dot(ψ1, ψ5) / (norm(ψ1) * norm(ψ5))) +# println(dot(ψ1, ψ6) / (norm(ψ1) * norm(ψ6))) +# # println(dot(ψ1, ψ7) / (norm(ψ1) * norm(ψ7))) +# # println(dot(ψ1, ψ8) / (norm(ψ1) * norm(ψ8))) +# # println(dot(ψ1, ψ9) / (norm(ψ1) * norm(ψ9))) +# # println(dot(ψ1, ψ10) / (norm(ψ1) * norm(ψ10))) + + +# println(" ψ0 -> ", format_bytes.(measure_memory(ψ0))) diff --git a/test/hamming.jl b/test/hamming.jl new file mode 100644 index 00000000..44a65414 --- /dev/null +++ b/test/hamming.jl @@ -0,0 +1,49 @@ +using Test +using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors + + +@testset "count_ones() method" begin +# Julia program to illustrate the use of count_ones() method +# Getting number of ones present in the binary representation of the specified number. + for t in [0, 1, 15, 20] + @test count_ones(t) == count(==('1'), bitstring(t)) + end +end + +@testset "XOR Operation Tests" begin + @test 0 ⊻ 0 == xor(0, 0) == 0 + @test 0 ⊻ 1 == xor(0, 1) == 1 + @test 1 ⊻ 0 == xor(1, 0) == 1 + @test 1 ⊻ 1 == xor(1, 1) == 0 + @test 10 ⊻ 5 == xor(10, 5) == 15 + @test 15 ⊻ 5 == xor(15, 5) == 10 + @test 255 ⊻ 85 == xor(255, 85) == 170 + @test 170 ⊻ 85 == xor(170, 85) == 255 + + binary_string = "1111" + integer_value = parse(Int, binary_string, base=2) + @test 10 ⊻ 5 == xor(10, 5) == 15 +end + +flip1 = Flip([1,3,4,5], [2,3,5,6], [1, 1, 0, 1], [1, 1, 0, 1]) +flip2 = Flip([1,3,4,5], [1,2,3,4], [1, 1, 0, 1], [1, 1, 0, 1]) +flip3 = Flip([1,3,4,5], [2,3,5,6], [1, 1, 0, 0], [1, 1, 0, 0]) + +@testset "Hamming Distance Calculation" begin + @test hamming_distance(flip1, :Ising) == 3 + @test hamming_distance(flip2, :Ising) == 3 + @test hamming_distance(flip3, :Ising) == 2 + @test hamming_distance(flip1, :RMF) == 3 + @test hamming_distance(flip2, :RMF) == 3 + @test hamming_distance(flip3, :RMF) == 2 +end + +@testset "Hamming distance between two droplets" begin + @test hamming_distance(flip1, flip2, :Ising) == 0 + @test hamming_distance(flip2, flip3, :Ising) == 1 + @test hamming_distance(flip1, flip2, :RMF) == 3 + @test hamming_distance(flip2, flip3, :RMF) == 3 + +end \ No newline at end of file diff --git a/test/instances/pathological/chim_1_3_1.txt b/test/instances/pathological/chim_1_3_1.txt new file mode 100644 index 00000000..031e571d --- /dev/null +++ b/test/instances/pathological/chim_1_3_1.txt @@ -0,0 +1,5 @@ +1 1 1.0 +2 2 0.75 +3 3 -0.5 +1 2 0.25 +2 3 0.6 \ No newline at end of file diff --git a/test/instances/pathological/chim_3_4_3_Z2.txt b/test/instances/pathological/chim_3_4_3_Z2.txt new file mode 100644 index 00000000..4e918ad7 --- /dev/null +++ b/test/instances/pathological/chim_3_4_3_Z2.txt @@ -0,0 +1,33 @@ +# i j Jij +1 4 1.0 +1 5 0.75 +1 6 -0.5 +4 7 0.5 +5 7 0.25 +6 8 -0.25 +6 9 0.5 +1 13 1.0 +5 16 -1.0 +6 16 1.0 +6 18 -0.5 +13 16 -0.75 +13 18 0.75 +18 28 0.75 +28 31 -0.75 +28 32 0.5 +28 33 0.25 +29 31 -0.25 +29 32 0.5 +29 33 0.25 +30 31 1.0 +30 32 -1.0 +30 33 0.5 +4 5 -0.5 +4 6 0.75 +5 6 0.5 +7 8 0.25 +7 9 -0.25 +16 18 0.5 +28 29 -0.5 +28 30 1.0 +29 30 -0.5 \ No newline at end of file diff --git a/test/instances/pathological/cross_2_4_mdd.txt b/test/instances/pathological/cross_2_4_mdd.txt new file mode 100644 index 00000000..759adf52 --- /dev/null +++ b/test/instances/pathological/cross_2_4_mdd.txt @@ -0,0 +1,52 @@ +# i j Jij +1 2 0.034238 +1 3 0.750061 +1 4 0.589578 +2 3 0.429516 +3 14 -0.928508 +4 5 -0.870021 +5 6 0.951815 +6 16 0.574823 +13 14 0.144119 +13 17 -0.277623 +14 15 -0.190409 +14 16 0.254528 +15 18 0.278264 +16 17 -0.188157 +16 18 -0.622391 +17 18 0.240160 +1 1 0.200000 +2 2 0.146667 +3 3 -0.173333 +4 4 -0.200000 +5 5 0.013333 +6 6 0.040000 +13 13 0.093333 +14 14 0.040000 +15 15 -0.146667 +16 16 -0.146667 +17 17 -0.146667 +18 18 -0.013333 +2 17 -2.189869 +4 14 -0.397741 +5 15 -0.157941 +7 16 0.080566 +7 7 0.013333 +8 8 0.120000 +9 9 -0.093333 +19 19 0.173333 +20 20 -0.066667 +21 21 0.066667 +17 19 -0.891268 +17 20 0.737441 +17 21 -0.493823 +18 19 -0.293740 +18 20 -0.830321 +18 21 -0.900943 +16 19 0.866969 +16 20 0.684857 +16 21 -0.643313 +9 19 -0.984943 +5 9 -0.443220 +6 8 0.590863 +6 9 -0.251337 diff --git a/test/instances/pathological/cross_3_2.txt b/test/instances/pathological/cross_3_2.txt new file mode 100644 index 00000000..ce508349 --- /dev/null +++ b/test/instances/pathological/cross_3_2.txt @@ -0,0 +1,16 @@ +#1 1 0.75 +#2 2 -0.5 +#3 3 1.0 +#4 4 0.5 +#5 5 0.1 +#6 6 0.1 +1 2 0.25 +1 4 0.1 +2 3 0.5 +2 4 1.0 +4 5 0.1 +#2 5 0.1 +#3 4 0.5 +#3 6 0.25 +#4 5 0.1 +#5 6 0.75 \ No newline at end of file diff --git a/test/instances/pathological/pegasus_3_4_1.txt b/test/instances/pathological/pegasus_3_4_1.txt new file mode 100644 index 00000000..66c2cf6d --- /dev/null +++ b/test/instances/pathological/pegasus_3_4_1.txt @@ -0,0 +1,204 @@ +# on site +1 1 0.8345026330734298 +2 2 -2.685390107478381 +3 3 -0.32827700710861407 +4 4 -0.8445755206605527 +5 5 1.130799056757481 +6 6 -0.8901468862481865 +7 7 -3.7378777024175545 +8 8 -1.8397414258596188 +9 9 2.9214523394364944 +10 10 1.6971497310312982 +11 11 -2.2907667412976105 +12 12 3.9128710341147315 +13 13 -2.285572302320568 +14 14 -2.7719568618942096 +15 15 3.874608793196203 +16 16 2.116658011257652 +17 17 1.5190354427747046 +18 18 -0.16113110911545458 +19 19 1.2976293218961175 +20 20 -3.252977378876828 +21 21 -2.101597823485033 +22 22 -1.34846740140744 +23 23 0.07881815427137973 +33 33 -0.29864657398653716 +34 34 0.1581416426225184 +35 35 -2.6200966445055727 +36 36 0.4830692222632189 +37 37 -1.9805407077247406 +38 38 -1.7243675791196473 +39 39 -0.6988872670807771 +40 40 1.6011937665735454 +42 42 -1.6751846998471454 +43 43 3.8462046951293214 +44 44 -1.5027655091854966 +45 45 -1.7989351424899267 +46 46 2.2917042724542576 +47 47 -0.7534974760125852 +48 48 -0.31649237734003677 +49 49 2.5699911658192427 +50 50 -2.6609289614077953 +52 52 -2.6666459869927204 +53 53 0.5381526678859361 +54 54 2.843913477438674 +73 73 3.8674825865603495 +74 74 -2.1859774333850313 +75 75 0.32726404320889646 +76 76 -2.5938445845723406 +77 77 -0.5775444198376611 +78 78 0.8695432732514883 +79 79 2.8266871018754784 +80 80 3.1391283952052618 +81 81 -3.339699263621612 +84 84 0.4079636198410075 +85 85 1.2644493450915544 +86 86 1.0402004620593548 +87 87 -2.2747235637032395 +88 88 -0.6712938274753331 + +# horizontal/vertical groups in cluster +1 2 0.44567983857884585 +2 3 -0.3680316291478529 +3 4 0.7824626586477434 +5 6 0.012741856044478972 +7 8 0.899997100447486 +13 14 0.16795795885453524 +14 15 0.9948307879328075 +15 16 0.5025312806063136 +17 18 -0.8112284185889673 +22 23 -0.8359130659828806 +33 34 0.8490609565220064 +34 35 -0.30256098264549225 +38 39 -0.05658643136696839 +39 40 -0.8959631784603801 +43 44 0.23310883761399315 +46 47 0.10025148913566917 +50 52 -0.3350358463983447 +53 54 -0.3141596735205183 +73 74 -0.6366446071351095 +73 75 -0.13539163830054313 +73 76 -0.1407277443331274 +74 75 0.10025148913566917 +74 76 -0.3350358463983447 +75 76 -0.3141596735205183 +77 79 -0.13539163830054313 +77 80 -0.1407277443331274 +78 79 -0.6366446071351095 +78 80 -0.6366446071351095 +85 86 0.5006986163316893 +86 87 0.5498008049010348 +87 88 0.2266621402769553 + +# (i, j, 1) <--> (i, j, 2) +1 5 -1.2988496438111907 +1 6 1.956206654019626 +1 7 1.0974703844519738 +1 8 -2.930004830484094 +2 5 0.6308020967958035 +2 6 3.9559521021726605 +2 7 1.2150617931014498 +2 8 1.9671910899568257 +3 5 0.640551501257594 +3 6 -2.7773265623511554 +3 7 1.1455277822809418 +3 8 -2.0270806237240944 +4 5 -3.2959499522793116 +4 6 1.4429397139879887 +4 7 -2.6937058504633216 +4 8 -2.08657919576324 +9 13 0.23044206630903208 +10 14 -0.6639745121942555 +11 15 -1.050547736907637 +12 16 -3.9481885004653323 +17 23 2.469090329488993 +19 21 1.5950382806140828 +20 21 0.6809685166558497 +33 38 3.554263923332054 +33 39 2.9750210713058376 +34 40 -0.5969865221502841 +35 37 2.680741537486112 +36 38 -0.10186055793878257 +42 48 -1.249848388759374 +43 45 -1.9568422988130934 +44 45 -3.885575436793081 +49 53 -1.3898780342887553 +50 54 0.349975758275213 +81 85 -3.03982220678294 +81 88 2.624721176912792 +84 85 0.8329051704031283 +84 88 0.02252866976253909 + +# (i, j, 1) <--> (i, j+1, 1) +1 10 0.543816930246914 +1 11 0.026361948674996194 +12 17 -0.25720290528656076 +42 49 -0.11209651762224193 +74 84 -0.15354286760543312 + +# (i, j, 1) <--> (i+1, j, 1) +4 33 0.08823414876833002 +11 43 0.6101690914627518 +44 73 -0.26937692528918933 + +# (i, j, 1) <--> (i, j+1, 2) +4 16 -0.4572530924316711 +33 46 0.8258428607956774 +42 53 0.6101690914627518 +73 85 -0.9194556665254012 +75 87 -0.11884820257405049 +76 88 -0.910733726280115 +76 86 -0.034282524404182446 + +# (i, j, 1) <--> (i+1, j, 2) +11 45 0.7561722413151104 +20 53 0.043582757286906526 +44 78 0.2867875098973265 + +# (i, j, 2) <--> (i, j+1, 2) +7 14 0.41669240557446563 +15 21 -0.8831153747620597 +40 48 -0.4260964742832829 + +# (i, j, 2) <--> (i, j+1, 1) +6 11 -0.23985817100564732 +13 19 -0.9231048098538319 +38 44 -0.8312557105709544 +46 52 -0.41514262654827383 + +# (i, j, 2) <--> (i+1, j, 1) +16 42 0.13622389263648493 +21 52 -0.9117110650627138 + +# (i, j, 2) <--> (i+1, j, 2) +13 48 -0.4260964742832829 +21 54 0.7561722413151104 +48 78 0.043582757286906526 + +# diagonal (i, j, 1) <--> (i+1, j+1, 2) +4 45 -0.3141596735205183 +36 77 0.23310883761399315 + +# diagonal (i, j, 2) <--> (i+1, j+1, 1) +5 44 0.5498008049010348 +8 43 0.029288454102605277 +14 52 0.512535091819559 +38 76 0.2867875098973265 + +# diagonal (i, j, 1) <--> (i+1, j+1, 1) +3 44 0.5973386727667047 + +# diagonal (i, j, 2) <--> (i+1, j+1, 2) +7 46 -0.18892349212059245 + +# diagonal (i+1, j+1, 1) <--> (i, j, 2) +50 78 0.5035960677468618 + +# diagonal (i+1, j+1, 2) <--> (i, j, 1) +23 42 0.21378703521632958 + +# diagonal (i+1, j+1, 1) <--> (i, j, 1) +50 74 0.0890097277204065 + +# diagonal (i+1, j+1, 2) <--> (i, j, 2) +16 37 0.43905757016096003 diff --git a/test/instances/pathological/pegasus_nd_3_4_1.txt b/test/instances/pathological/pegasus_nd_3_4_1.txt new file mode 100644 index 00000000..3d116a25 --- /dev/null +++ b/test/instances/pathological/pegasus_nd_3_4_1.txt @@ -0,0 +1,176 @@ +# on site +1 1 0.8345026330734298 +2 2 -2.685390107478381 +3 3 -0.32827700710861407 +4 4 -0.8445755206605527 +5 5 1.130799056757481 +6 6 -0.8901468862481865 +7 7 -3.7378777024175545 +8 8 -1.8397414258596188 +9 9 2.9214523394364944 +10 10 1.6971497310312982 +11 11 -2.2907667412976105 +12 12 3.9128710341147315 +13 13 -2.285572302320568 +14 14 -2.7719568618942096 +15 15 3.874608793196203 +16 16 2.116658011257652 +17 17 1.5190354427747046 +18 18 -0.16113110911545458 +19 19 1.2976293218961175 +20 20 -3.252977378876828 +21 21 -2.101597823485033 +22 22 -1.34846740140744 +23 23 0.07881815427137973 +33 33 -0.29864657398653716 +34 34 0.1581416426225184 +35 35 -2.6200966445055727 +36 36 0.4830692222632189 +37 37 -1.9805407077247406 +38 38 -1.7243675791196473 +39 39 -0.6988872670807771 +40 40 1.6011937665735454 +42 42 -1.6751846998471454 +43 43 3.8462046951293214 +44 44 -1.5027655091854966 +45 45 -1.7989351424899267 +46 46 2.2917042724542576 +47 47 -0.7534974760125852 +48 48 -0.31649237734003677 +49 49 2.5699911658192427 +50 50 -2.6609289614077953 +52 52 -2.6666459869927204 +53 53 0.5381526678859361 +54 54 2.843913477438674 +73 73 3.8674825865603495 +74 74 -2.1859774333850313 +75 75 0.32726404320889646 +76 76 -2.5938445845723406 +77 77 -0.5775444198376611 +78 78 0.8695432732514883 +79 79 2.8266871018754784 +80 80 3.1391283952052618 +81 81 -3.339699263621612 +84 84 0.4079636198410075 +85 85 1.2644493450915544 +86 86 1.0402004620593548 +87 87 -2.2747235637032395 +88 88 -0.6712938274753331 + +# horizontal/vertical groups in cluster +1 2 0.44567983857884585 +2 3 -0.3680316291478529 +3 4 0.7824626586477434 +5 6 0.012741856044478972 +7 8 0.899997100447486 +13 14 0.16795795885453524 +14 15 0.9948307879328075 +15 16 0.5025312806063136 +17 18 -0.8112284185889673 +22 23 -0.8359130659828806 +33 34 0.8490609565220064 +34 35 -0.30256098264549225 +38 39 -0.05658643136696839 +39 40 -0.8959631784603801 +43 44 0.23310883761399315 +46 47 0.10025148913566917 +50 52 -0.3350358463983447 +53 54 -0.3141596735205183 +73 74 -0.6366446071351095 +73 75 -0.13539163830054313 +73 76 -0.1407277443331274 +74 75 0.10025148913566917 +74 76 -0.3350358463983447 +75 76 -0.3141596735205183 +77 79 -0.13539163830054313 +77 80 -0.1407277443331274 +78 79 -0.6366446071351095 +78 80 -0.6366446071351095 +85 86 0.5006986163316893 +86 87 0.5498008049010348 +87 88 0.2266621402769553 + +# (i, j, 1) <--> (i, j, 2) +1 5 -1.2988496438111907 +1 6 1.956206654019626 +1 7 1.0974703844519738 +1 8 -2.930004830484094 +2 5 0.6308020967958035 +2 6 3.9559521021726605 +2 7 1.2150617931014498 +2 8 1.9671910899568257 +3 5 0.640551501257594 +3 6 -2.7773265623511554 +3 7 1.1455277822809418 +3 8 -2.0270806237240944 +4 5 -3.2959499522793116 +4 6 1.4429397139879887 +4 7 -2.6937058504633216 +4 8 -2.08657919576324 +9 13 0.23044206630903208 +10 14 -0.6639745121942555 +11 15 -1.050547736907637 +12 16 -3.9481885004653323 +17 23 2.469090329488993 +19 21 1.5950382806140828 +20 21 0.6809685166558497 +33 38 3.554263923332054 +33 39 2.9750210713058376 +34 40 -0.5969865221502841 +35 37 2.680741537486112 +36 38 -0.10186055793878257 +42 48 -1.249848388759374 +43 45 -1.9568422988130934 +44 45 -3.885575436793081 +49 53 -1.3898780342887553 +50 54 0.349975758275213 +81 85 -3.03982220678294 +81 88 2.624721176912792 +84 85 0.8329051704031283 +84 88 0.02252866976253909 + +# (i, j, 1) <--> (i, j+1, 1) +1 10 0.543816930246914 +1 11 0.026361948674996194 +12 17 -0.25720290528656076 +42 49 -0.11209651762224193 +74 84 -0.15354286760543312 + +# (i, j, 1) <--> (i+1, j, 1) +4 33 0.08823414876833002 +11 43 0.6101690914627518 +44 73 -0.26937692528918933 + +# (i, j, 1) <--> (i, j+1, 2) +4 16 -0.4572530924316711 +33 46 0.8258428607956774 +42 53 0.6101690914627518 +73 85 -0.9194556665254012 +75 87 -0.11884820257405049 +76 88 -0.910733726280115 +76 86 -0.034282524404182446 + +# (i, j, 1) <--> (i+1, j, 2) +11 45 0.7561722413151104 +20 53 0.043582757286906526 +44 78 0.2867875098973265 + +# (i, j, 2) <--> (i, j+1, 2) +7 14 0.41669240557446563 +15 21 -0.8831153747620597 +40 48 -0.4260964742832829 + +# (i, j, 2) <--> (i, j+1, 1) +6 11 -0.23985817100564732 +13 19 -0.9231048098538319 +38 44 -0.8312557105709544 +46 52 -0.41514262654827383 + +# (i, j, 2) <--> (i+1, j, 1) +16 42 0.13622389263648493 +21 52 -0.9117110650627138 + +# (i, j, 2) <--> (i+1, j, 2) +13 48 -0.4260964742832829 +21 54 0.7561722413151104 +48 78 0.043582757286906526 \ No newline at end of file diff --git a/test/instances/pegasus_droplets/2_2_3_00.txt b/test/instances/pegasus_droplets/2_2_3_00.txt new file mode 100644 index 00000000..ff853a5b --- /dev/null +++ b/test/instances/pegasus_droplets/2_2_3_00.txt @@ -0,0 +1,583 @@ +# +1 1 0.031250 +2 2 0.031250 +3 3 -0.031250 +4 4 -0.031250 +5 5 -0.062500 +6 6 0.031250 +8 8 0.031250 +9 9 0.062500 +10 10 0.031250 +11 11 -0.062500 +12 12 -0.062500 +14 14 -0.062500 +16 16 -0.062500 +17 17 -0.031250 +18 18 -0.062500 +19 19 0.031250 +20 20 -0.031250 +22 22 0.031250 +23 23 -0.031250 +24 24 0.031250 +25 25 0.031250 +26 26 0.031250 +28 28 -0.031250 +29 29 -0.062500 +30 30 -0.062500 +32 32 -0.062500 +33 33 0.062500 +34 34 0.062500 +35 35 -0.031250 +36 36 0.031250 +38 38 0.031250 +39 39 0.031250 +40 40 0.062500 +42 42 0.062500 +43 43 0.031250 +44 44 0.062500 +46 46 0.031250 +47 47 -0.031250 +49 49 0.031250 +50 50 -0.031250 +51 51 0.031250 +52 52 0.031250 +53 53 0.031250 +54 54 0.062500 +55 55 -0.031250 +57 57 0.062500 +58 58 0.062500 +59 59 -0.062500 +60 60 -0.031250 +61 61 0.062500 +62 62 -0.062500 +63 63 0.062500 +64 64 0.062500 +65 65 -0.031250 +66 66 0.062500 +67 67 -0.062500 +68 68 -0.031250 +69 69 -0.062500 +70 70 -0.031250 +71 71 0.062500 +72 72 -0.062500 +73 73 -0.031250 +74 74 -0.062500 +75 75 -0.031250 +76 76 0.062500 +78 78 -0.062500 +79 79 0.062500 +80 80 0.062500 +81 81 0.031250 +82 82 0.031250 +83 83 0.062500 +84 84 0.062500 +85 85 0.062500 +86 86 -0.031250 +87 87 -0.062500 +88 88 -0.062500 +89 89 0.062500 +90 90 0.031250 +91 91 -0.031250 +92 92 -0.062500 +93 93 0.031250 +94 94 0.031250 +95 95 0.062500 +96 96 -0.062500 +1 2 -0.250000 +1 5 0.156250 +1 6 -0.125000 +1 7 0.125000 +1 8 -0.218750 +1 13 0.187500 +1 14 -0.031250 +1 15 0.187500 +1 16 0.031250 +1 25 0.031250 +2 5 -0.125000 +2 7 -0.250000 +2 8 -0.125000 +2 13 -0.187500 +2 14 -0.250000 +2 15 0.156250 +2 16 -0.187500 +2 26 -0.125000 +3 4 0.156250 +3 5 0.250000 +3 6 0.093750 +3 7 0.093750 +3 8 0.250000 +3 27 -0.187500 +4 5 0.093750 +4 6 -0.250000 +4 7 -0.187500 +4 8 0.062500 +4 28 0.250000 +5 6 -0.125000 +5 9 -0.062500 +5 10 -0.031250 +5 11 -0.187500 +5 53 0.218750 +6 9 0.218750 +6 10 0.125000 +6 12 0.031250 +6 54 -0.031250 +7 8 0.250000 +7 55 -0.156250 +8 56 0.031250 +9 10 -0.250000 +9 13 -0.218750 +9 15 0.093750 +9 16 -0.250000 +9 21 0.187500 +9 22 0.125000 +9 23 -0.062500 +9 24 0.031250 +9 31 0.093750 +9 32 0.187500 +9 33 0.250000 +10 13 0.062500 +10 14 -0.187500 +10 15 0.062500 +10 16 0.250000 +10 21 0.250000 +10 22 -0.250000 +10 23 -0.250000 +10 24 -0.125000 +10 31 1.000000 +10 34 0.093750 +11 12 -0.156250 +11 13 0.781250 +11 14 0.062500 +11 16 0.156250 +11 31 -0.031250 +11 32 -0.250000 +11 35 -0.187500 +12 13 0.125000 +12 14 -0.031250 +12 15 -0.093750 +12 16 -0.031250 +12 31 -0.187500 +12 32 0.031250 +12 36 -0.031250 +13 14 -0.250000 +13 17 -0.781250 +13 19 -0.062500 +13 20 0.093750 +13 52 -0.093750 +13 61 0.093750 +14 17 -0.031250 +14 19 0.031250 +14 20 -0.093750 +14 51 -0.125000 +14 52 0.156250 +14 62 0.031250 +15 16 0.406250 +15 51 0.250000 +15 52 0.750000 +15 63 -0.156250 +16 51 0.062500 +16 52 0.156250 +16 64 -0.031250 +17 18 0.437500 +17 21 0.093750 +17 23 0.187500 +17 24 -0.031250 +17 39 0.906250 +17 40 0.062500 +17 77 -0.125000 +17 78 -1.000000 +17 79 -0.031250 +17 80 -0.250000 +18 21 -0.218750 +18 22 -0.156250 +18 23 -0.218750 +18 24 0.156250 +18 39 0.187500 +18 40 -0.218750 +18 42 0.843750 +18 77 0.218750 +18 78 -0.062500 +18 79 1.000000 +18 80 -0.187500 +19 20 -0.125000 +19 21 -0.218750 +19 22 0.062500 +19 23 0.187500 +19 24 -0.031250 +19 29 -0.218750 +19 30 -0.218750 +19 31 -0.031250 +19 32 -0.250000 +19 39 -0.250000 +19 40 -0.031250 +19 43 -0.062500 +20 21 0.031250 +20 22 0.125000 +20 23 0.156250 +20 24 -0.062500 +20 29 0.187500 +20 30 0.250000 +20 31 -0.093750 +20 32 0.187500 +20 39 -0.031250 +20 40 0.218750 +21 22 0.937500 +21 59 0.062500 +21 60 0.218750 +21 69 -0.062500 +21 74 0.937500 +21 75 0.218750 +21 76 -0.031250 +22 59 -0.843750 +22 60 0.156250 +22 70 -0.875000 +22 73 -0.062500 +22 74 -0.968750 +22 75 -0.062500 +22 76 -0.906250 +23 24 -0.187500 +23 49 0.187500 +23 50 -0.187500 +23 51 -0.218750 +23 52 0.093750 +23 59 0.218750 +23 60 -0.031250 +23 71 0.031250 +24 49 0.218750 +24 50 0.187500 +24 51 -0.156250 +24 52 0.156250 +24 59 -0.156250 +24 60 0.156250 +24 72 0.156250 +25 26 0.125000 +25 29 0.156250 +25 30 0.125000 +25 31 -0.187500 +25 32 -0.125000 +25 37 -0.187500 +25 38 -0.062500 +25 39 0.906250 +25 40 -0.031250 +26 29 -0.156250 +26 30 -0.187500 +26 31 0.250000 +26 32 -0.031250 +26 37 0.187500 +26 38 -0.125000 +26 39 -0.093750 +26 40 0.093750 +27 28 -0.062500 +27 29 0.062500 +27 30 0.093750 +27 31 0.093750 +27 32 0.031250 +28 29 0.218750 +28 30 0.093750 +28 31 -0.218750 +28 32 0.062500 +29 30 0.125000 +29 33 -0.031250 +29 34 -0.250000 +29 35 -0.218750 +29 36 0.156250 +29 77 -0.250000 +30 33 0.187500 +30 34 -0.156250 +30 35 -0.031250 +30 78 -0.125000 +31 32 0.031250 +31 79 -1.000000 +32 80 -0.906250 +33 34 -0.875000 +33 37 -0.062500 +33 38 0.250000 +33 39 -0.093750 +33 40 0.156250 +33 45 0.843750 +33 46 0.125000 +33 47 0.656250 +33 48 -0.062500 +34 37 0.250000 +34 38 -0.875000 +34 39 0.093750 +34 40 -0.031250 +34 45 -0.968750 +34 46 0.218750 +34 47 0.187500 +34 48 0.906250 +35 36 -0.093750 +35 37 0.125000 +35 38 -0.156250 +35 39 -0.031250 +35 40 0.250000 +36 37 -0.125000 +36 38 -0.218750 +36 40 0.250000 +37 38 0.093750 +37 41 -0.187500 +37 42 0.937500 +37 43 -0.218750 +37 44 0.250000 +37 75 -0.031250 +37 76 -0.187500 +37 85 0.218750 +38 41 -0.031250 +38 42 -0.125000 +38 43 0.875000 +38 44 -0.031250 +38 75 0.062500 +38 76 -0.093750 +38 86 -0.968750 +39 40 -0.187500 +39 75 -0.156250 +39 76 0.125000 +39 87 0.250000 +40 75 -0.093750 +40 76 0.062500 +40 88 0.031250 +41 45 -0.843750 +41 46 0.093750 +41 47 0.250000 +41 48 -0.218750 +42 45 -0.156250 +42 46 0.062500 +42 47 0.187500 +42 48 -0.500000 +43 44 -0.187500 +43 45 0.125000 +43 46 0.156250 +43 47 -0.968750 +43 48 0.062500 +44 45 0.468750 +44 46 0.250000 +44 47 -0.156250 +44 48 -0.875000 +45 46 0.250000 +45 83 -0.156250 +45 84 0.156250 +45 93 -0.156250 +46 83 -0.156250 +46 84 -0.218750 +46 94 0.093750 +47 48 0.218750 +47 73 -0.250000 +47 74 0.062500 +47 75 0.125000 +47 76 0.156250 +47 83 -0.093750 +47 84 -0.125000 +47 95 0.187500 +48 73 0.031250 +48 74 0.187500 +48 75 0.187500 +48 76 0.250000 +48 83 -0.031250 +48 84 0.250000 +48 96 -0.031250 +49 50 0.250000 +49 53 -0.031250 +49 54 0.156250 +49 55 -0.718750 +49 56 0.250000 +49 61 0.062500 +49 62 0.062500 +49 63 -0.187500 +49 64 -0.093750 +49 73 -0.250000 +50 53 -0.187500 +50 54 0.093750 +50 55 -0.125000 +50 56 -0.125000 +50 61 -0.250000 +50 62 0.843750 +50 63 0.093750 +50 64 0.031250 +51 52 0.906250 +51 53 0.062500 +51 54 -0.156250 +51 55 -0.125000 +51 56 -0.093750 +51 75 -0.031250 +52 53 -0.062500 +52 54 0.250000 +52 55 0.125000 +52 56 0.187500 +52 76 -0.156250 +53 54 -0.156250 +53 57 0.187500 +53 58 0.250000 +53 59 -0.062500 +53 60 0.250000 +54 57 0.218750 +54 58 -0.187500 +54 59 0.812500 +55 56 -0.031250 +57 58 0.125000 +57 61 -0.125000 +57 62 -0.093750 +57 63 0.031250 +57 64 0.031250 +57 69 -0.031250 +57 70 1.000000 +57 72 -0.250000 +57 79 0.968750 +57 80 -0.218750 +57 81 -0.250000 +58 61 0.218750 +58 62 -0.031250 +58 63 -0.156250 +58 64 0.218750 +58 69 -0.125000 +58 70 0.218750 +58 71 -0.156250 +58 72 -0.062500 +58 79 0.156250 +58 80 0.156250 +58 82 0.250000 +59 60 -0.187500 +59 61 -0.062500 +59 62 -0.125000 +59 63 0.906250 +59 64 -0.218750 +59 80 0.625000 +59 83 0.062500 +60 61 -0.187500 +60 62 0.843750 +60 63 0.250000 +60 64 0.250000 +60 79 0.937500 +60 80 0.031250 +60 84 0.156250 +61 62 0.250000 +61 65 -0.250000 +61 66 -0.250000 +61 67 0.187500 +62 65 -0.250000 +62 66 -0.250000 +62 67 -0.937500 +62 68 0.156250 +63 64 0.156250 +65 66 0.031250 +65 69 -0.062500 +65 70 0.187500 +65 71 0.125000 +65 72 0.187500 +65 87 -0.125000 +65 88 0.093750 +65 89 0.093750 +66 69 -0.093750 +66 70 0.250000 +66 71 -0.218750 +66 72 -0.093750 +66 87 -0.156250 +66 88 0.031250 +66 90 0.125000 +67 68 0.062500 +67 69 0.093750 +67 70 0.156250 +67 71 0.031250 +67 72 0.031250 +67 77 0.875000 +67 78 -0.156250 +67 79 -0.750000 +67 80 0.187500 +67 87 -0.093750 +67 91 0.218750 +68 69 -0.218750 +68 71 0.250000 +68 72 0.156250 +68 78 0.125000 +68 79 0.312500 +68 80 -0.250000 +68 88 0.062500 +68 92 0.093750 +69 70 0.156250 +71 72 0.125000 +73 74 0.093750 +73 77 0.062500 +73 78 0.218750 +73 79 -0.125000 +73 80 0.187500 +73 85 -0.250000 +73 86 0.156250 +73 87 -0.093750 +73 88 -0.031250 +74 77 -0.218750 +74 78 0.593750 +74 79 0.062500 +74 80 0.250000 +74 85 1.000000 +74 86 0.843750 +74 87 0.218750 +74 88 0.031250 +75 76 -0.093750 +75 77 -0.093750 +75 78 0.187500 +75 80 0.156250 +76 77 -0.187500 +76 78 0.062500 +76 79 -0.062500 +76 80 0.125000 +77 78 -0.125000 +77 81 0.156250 +77 82 0.031250 +77 83 -0.156250 +77 84 -0.187500 +78 81 0.093750 +78 82 0.156250 +78 83 0.093750 +78 84 -0.062500 +79 80 0.156250 +81 82 0.062500 +81 85 0.812500 +81 86 -0.062500 +81 87 -0.250000 +81 88 0.062500 +81 94 -0.156250 +81 95 -0.062500 +81 96 -0.062500 +82 85 -0.250000 +82 86 0.093750 +82 87 0.031250 +82 88 0.156250 +82 93 0.125000 +82 94 -0.031250 +82 95 -0.156250 +82 96 -0.093750 +83 84 -0.125000 +83 85 0.125000 +83 86 -0.125000 +83 87 0.156250 +83 88 0.093750 +84 85 0.031250 +84 87 -0.156250 +84 88 0.156250 +85 86 0.031250 +85 89 -0.093750 +85 90 -0.156250 +85 92 -0.250000 +86 89 -0.218750 +86 90 -0.062500 +86 91 -0.187500 +86 92 -0.906250 +87 88 -0.218750 +89 90 -0.156250 +89 93 0.031250 +89 94 -0.093750 +89 95 -0.031250 +89 96 0.125000 +90 93 0.031250 +90 94 0.125000 +90 95 -0.031250 +90 96 -0.218750 +91 92 -0.062500 +91 93 0.093750 +91 94 0.187500 +91 95 -0.062500 +91 96 0.093750 +92 93 -0.187500 +92 94 -0.093750 +92 95 -0.031250 +92 96 0.031250 +93 94 -0.093750 \ No newline at end of file diff --git a/test/instances/pegasus_nondiag/3x2x1.txt b/test/instances/pegasus_nondiag/3x2x1.txt new file mode 100644 index 00000000..e8f5116c --- /dev/null +++ b/test/instances/pegasus_nondiag/3x2x1.txt @@ -0,0 +1,38 @@ +# on site +1 1 -0.111 +5 5 0.122 +9 9 -0.133 +13 13 0.15 +17 17 -0.11 +21 21 0.12 +25 25 -0.17 +29 29 0.19 +33 33 -0.11 +37 37 0.12 +41 41 -0.17 +45 45 0.19 +# (i, j, 1) <--> (i, j, 2) +1 5 -0.216 +9 13 -0.227 +17 21 0.239 +25 29 0.24 +33 37 0.239 +41 45 0.24 +# (i, j, 1) <--> (i+1, j, 1) +1 17 -0.111 +9 25 -0.121 +17 33 0.113 +25 41 0.114 +# (i, j, 1) <--> (i+1, j, 2) +1 21 -0.151 +9 29 -0.161 +17 37 0.171 +25 45 0.181 +# (i, j, 2) <--> (i, j+1, 2) +5 13 -0.161 +21 29 0.212 +37 45 -0.353 +# (i, j, 2) <--> (i, j+1, 1) +5 9 -0.151 +21 25 0.232 +37 41 -0.313 diff --git a/test/instances/pegasus_nondiag/4x4.txt b/test/instances/pegasus_nondiag/4x4.txt new file mode 100644 index 00000000..c6a19f4b --- /dev/null +++ b/test/instances/pegasus_nondiag/4x4.txt @@ -0,0 +1,2720 @@ +1 1 0.96460645 +1 2 -0.76874824 +2 2 0.53805817 +3 3 0.16289298 +3 4 -0.89710341 +4 4 0.85662612 +1 5 0.68312017 +2 5 0.91476805 +3 5 -0.25287238 +4 5 -0.90989779 +5 5 0.16018073 +1 6 0.46845938 +2 6 -0.46935593 +3 6 -0.8249993 +4 6 0.44634696 +5 6 -0.39130211 +6 6 -0.96603412 +1 7 0.14205175 +2 7 0.84916179 +3 7 0.2802331 +4 7 -0.30512471 +7 7 -0.75828086 +1 8 -0.64628988 +2 8 -0.55245919 +3 8 -0.63876622 +4 8 0.32123365 +7 8 0.16038367 +8 8 0.72542144 +5 9 -0.72904359 +6 9 0.23057648 +9 9 -0.031406978 +5 10 -0.33576422 +6 10 0.16626594 +9 10 0.061928905 +10 10 0.68971135 +5 11 0.79495978 +6 11 0.39650785 +11 11 -0.58118983 +5 12 -0.00070244431 +6 12 -0.94133531 +11 12 0.80241619 +12 12 0.10458268 +1 13 0.95191504 +2 13 -0.26993475 +9 13 -0.2322628 +10 13 0.60111731 +11 13 0.23455846 +12 13 -0.50274208 +13 13 0.25976677 +1 14 -0.92714897 +2 14 -0.38170076 +9 14 0.254693 +10 14 0.49169497 +11 14 0.15098972 +12 14 -0.096722459 +13 14 0.08110085 +14 14 -0.93601797 +1 15 -0.34751085 +2 15 -0.75817523 +9 15 -0.95670037 +10 15 0.62622563 +11 15 0.06010341 +12 15 -0.54457435 +15 15 0.22942684 +1 16 0.94602725 +2 16 0.83153141 +9 16 0.82113998 +10 16 -0.23338736 +11 16 -0.44986049 +12 16 0.60889917 +15 16 -0.13603878 +16 16 -0.27517708 +13 17 -0.90442542 +14 17 0.19725705 +17 17 -0.90093484 +13 18 -0.89204468 +14 18 -0.77193993 +17 18 0.085333975 +18 18 -0.020860022 +13 19 -0.95876393 +14 19 0.5924907 +19 19 -0.61497921 +13 20 0.36295703 +14 20 0.23570117 +19 20 0.42482961 +20 20 -0.7538325 +9 21 0.055765375 +10 21 0.69342192 +17 21 0.97220848 +18 21 0.60418288 +19 21 -0.96364493 +20 21 0.7707189 +21 21 -0.58901166 +9 22 -0.93585431 +10 22 -0.50786087 +17 22 -0.9400161 +18 22 0.97828982 +19 22 0.36767723 +20 22 0.7980098 +21 22 -0.96665057 +22 22 -0.70697018 +9 23 0.65428465 +10 23 0.1629825 +17 23 0.071328381 +18 23 -0.86610748 +19 23 0.56747296 +20 23 0.25187525 +23 23 -0.62185565 +9 24 -0.32002759 +10 24 0.87535376 +17 24 -0.82584556 +18 24 0.87879672 +19 24 0.068275136 +20 24 -0.72426202 +23 24 0.60184176 +24 24 -0.91469518 +1 25 0.23618248 +25 25 0.27039583 +2 26 0.13428872 +25 26 -0.71498135 +26 26 -0.43626629 +3 27 0.92392932 +27 27 0.077193356 +4 28 0.49221094 +27 28 -0.043051054 +28 28 0.39032608 +19 29 0.71670552 +20 29 0.032541132 +25 29 -0.56439681 +26 29 0.23288697 +27 29 0.96869883 +28 29 0.53366277 +29 29 -0.001767973 +19 30 0.39639953 +20 30 -0.34722373 +25 30 -0.63571785 +26 30 0.87932202 +27 30 0.89115838 +28 30 -0.32660147 +29 30 -0.48632929 +30 30 0.071602112 +9 31 -0.53325246 +10 31 0.20167788 +11 31 -0.77507524 +12 31 0.031531306 +19 31 0.46748427 +20 31 0.32355239 +25 31 -0.91636027 +26 31 -0.29108854 +27 31 0.35328936 +28 31 0.32476372 +31 31 -0.10963367 +9 32 0.67568138 +10 32 0.84158022 +11 32 -0.0035441411 +12 32 -0.44477776 +19 32 0.30106125 +20 32 -0.76486903 +25 32 -0.78611668 +26 32 -0.17874182 +27 32 0.97660452 +28 32 -0.51166943 +31 32 -0.26181662 +32 32 -0.75213544 +9 33 0.3250322 +29 33 -0.40119923 +30 33 0.59674052 +33 33 -0.019285413 +10 34 0.046626637 +29 34 0.18316707 +30 34 0.0034021047 +33 34 0.32352983 +34 34 0.70599631 +11 35 -0.48021144 +29 35 -0.59340171 +30 35 0.30162427 +35 35 0.74785481 +12 36 0.92398753 +29 36 0.2717664 +30 36 0.59190997 +35 36 -0.66078237 +36 36 -0.45941134 +25 37 0.87663168 +26 37 -0.46450493 +33 37 -0.4089855 +34 37 0.20527644 +35 37 0.16714124 +36 37 0.99231222 +37 37 -0.58307728 +25 38 -0.48914509 +26 38 -0.49983076 +33 38 0.36035674 +34 38 0.50104011 +35 38 0.02363984 +36 38 -0.29093139 +37 38 -0.44243196 +38 38 0.12995914 +17 39 0.18765521 +18 39 -0.43454497 +19 39 -0.68955676 +20 39 -0.99868266 +25 39 0.066326481 +26 39 0.85534544 +33 39 0.055693661 +34 39 0.16706635 +35 39 -0.83481455 +36 39 0.94251763 +39 39 0.28062365 +17 40 -0.43280917 +18 40 0.10162175 +19 40 0.74180438 +20 40 -0.91549315 +25 40 0.90950974 +26 40 -0.8628353 +33 40 -0.17681297 +34 40 0.10358503 +35 40 0.43914027 +36 40 -0.30710248 +39 40 -0.60355641 +40 40 -0.1659421 +17 41 0.080408075 +37 41 -0.15848863 +38 41 -0.19582276 +41 41 -0.58804897 +18 42 -0.93945967 +37 42 -0.37704928 +38 42 -0.40963839 +41 42 -0.60985693 +42 42 0.89586624 +19 43 0.39262893 +37 43 0.38768634 +38 43 -0.38700644 +43 43 -0.83585759 +20 44 0.039432316 +37 44 -0.81625633 +38 44 -0.78887774 +43 44 -0.3463207 +44 44 -0.78858115 +33 45 0.30503992 +34 45 -0.60544212 +41 45 0.77308772 +42 45 -0.74869083 +43 45 0.38757523 +44 45 0.54190844 +45 45 -0.71591776 +33 46 0.83459761 +34 46 -0.77763003 +41 46 -0.09061027 +42 46 -0.38217081 +43 46 -0.9803955 +44 46 -0.91468029 +45 46 0.76067572 +46 46 -0.66707912 +33 47 0.019678907 +34 47 -0.40529141 +41 47 -0.17314542 +42 47 0.45220886 +43 47 0.68642668 +44 47 -0.24362773 +47 47 0.24191729 +33 48 0.94838297 +34 48 -0.20716293 +41 48 -0.56453586 +42 48 0.56574415 +43 48 0.844664 +44 48 0.40867925 +47 48 -0.05779627 +48 48 0.14741953 +25 49 -0.88193889 +49 49 -0.89584422 +26 50 0.78007247 +49 50 -0.19206126 +50 50 0.86240277 +27 51 -0.33959551 +51 51 0.45732336 +28 52 -0.5405976 +51 52 -0.64153705 +52 52 0.47568331 +43 53 -0.65285568 +44 53 0.03986451 +49 53 0.45902609 +50 53 -0.045015605 +51 53 0.65928677 +52 53 -0.63554499 +53 53 -0.873191 +43 54 0.15036722 +44 54 0.97837162 +49 54 -0.55144586 +50 54 0.24743283 +51 54 0.53384334 +52 54 -0.80180944 +53 54 0.93784999 +54 54 0.72088113 +33 55 0.75976716 +34 55 -0.91184174 +35 55 0.37344004 +36 55 0.46754581 +43 55 0.21243587 +44 55 -0.020169675 +49 55 -0.46189054 +50 55 -0.52711013 +51 55 0.86895655 +52 55 -0.020472396 +55 55 0.86881024 +33 56 -0.12565513 +34 56 -0.24032217 +35 56 0.95931488 +36 56 -0.20201315 +43 56 -0.57110852 +44 56 0.38974642 +49 56 0.34606233 +50 56 -0.64575249 +51 56 -0.78422219 +52 56 -0.61350934 +55 56 -0.18508852 +56 56 0.96879662 +33 57 -0.77210272 +53 57 -0.83070162 +54 57 -0.25655338 +57 57 0.71787763 +34 58 -0.37815457 +53 58 0.4677466 +54 58 0.65643054 +57 58 0.68897479 +58 58 0.57111798 +35 59 -0.54313536 +53 59 -0.33602133 +54 59 -0.64696274 +59 59 0.026754837 +36 60 0.30399433 +53 60 0.67949907 +54 60 -0.74096028 +59 60 0.23065019 +60 60 -0.64479508 +49 61 -0.9677604 +50 61 0.21288442 +57 61 0.79178315 +58 61 0.54499013 +59 61 -0.57970873 +60 61 -0.79693222 +61 61 -0.20282101 +49 62 0.79190926 +50 62 0.52087244 +57 62 -0.8018207 +58 62 -0.37611989 +59 62 0.02030504 +60 62 -0.21829049 +61 62 -0.24677784 +62 62 -0.7321375 +41 63 -0.57097551 +42 63 0.35980937 +43 63 0.11458536 +44 63 0.70135781 +49 63 0.030750114 +50 63 0.71069374 +57 63 -0.91166886 +58 63 -0.64203504 +59 63 0.81272865 +60 63 -0.89076677 +63 63 -0.9382209 +41 64 0.11713098 +42 64 0.80354733 +43 64 -0.16096459 +44 64 -0.28374329 +49 64 0.089043877 +50 64 -0.2342631 +57 64 0.11459031 +58 64 -0.32208864 +59 64 0.25784788 +60 64 0.0025658264 +63 64 0.7543635 +64 64 0.87828341 +41 65 -0.86767975 +61 65 0.41602179 +62 65 -0.076524323 +65 65 -0.39738787 +42 66 -0.44913724 +61 66 -0.71272481 +62 66 -0.93922195 +65 66 0.56970485 +66 66 -0.40893233 +43 67 -0.43635952 +61 67 0.74264413 +62 67 0.50640107 +67 67 -0.33412744 +44 68 0.76013252 +61 68 -0.83368821 +62 68 0.40008534 +67 68 -0.070091433 +68 68 -0.065863626 +57 69 -0.11962617 +58 69 0.78900133 +65 69 -0.13655766 +66 69 0.78889551 +67 69 0.83498766 +68 69 0.87205465 +69 69 0.29639681 +57 70 -0.68638422 +58 70 -0.50595164 +65 70 0.9951207 +66 70 -0.72490681 +67 70 0.42714802 +68 70 -0.75045192 +69 70 0.62795385 +70 70 -0.94954364 +57 71 -0.34793143 +58 71 -0.37864197 +65 71 0.62320516 +66 71 -0.21999017 +67 71 0.23667477 +68 71 0.46117072 +71 71 0.68441322 +57 72 -0.37187614 +58 72 -0.18226218 +65 72 -0.02869666 +66 72 0.85471245 +67 72 -0.31342422 +68 72 0.29295486 +71 72 0.79688827 +72 72 0.11806509 +49 73 -0.11133928 +73 73 0.7081999 +50 74 0.51182824 +73 74 -0.14152291 +74 74 -0.30424161 +51 75 0.20659275 +75 75 -0.1079467 +52 76 0.56653187 +75 76 -0.33134116 +76 76 -0.89152103 +67 77 -0.63631984 +68 77 -0.55661091 +73 77 0.66630397 +74 77 -0.35507921 +75 77 -0.33915278 +76 77 -0.1721985 +77 77 -0.64578493 +67 78 0.71250223 +68 78 -0.56201176 +73 78 -0.20343554 +74 78 0.10452323 +75 78 0.23894311 +76 78 -0.015309791 +77 78 0.19329421 +78 78 0.32561612 +57 79 0.34159422 +58 79 0.047184089 +59 79 -0.40236918 +60 79 0.40793816 +67 79 0.16840245 +68 79 0.044464886 +73 79 0.49964442 +74 79 0.95825826 +75 79 -0.27872686 +76 79 0.38948647 +79 79 -0.33834201 +57 80 -0.23677825 +58 80 0.13537 +59 80 0.77572191 +60 80 0.68589858 +67 80 -0.25284243 +68 80 -0.13315457 +73 80 0.67044102 +74 80 0.098617066 +75 80 0.51301909 +76 80 0.94546777 +79 80 0.80398162 +80 80 0.79697228 +57 81 -0.77213872 +77 81 -0.63294361 +78 81 0.0038068383 +81 81 -0.7636896 +58 82 0.95712777 +77 82 0.47414531 +78 82 -0.14900634 +81 82 0.4041329 +82 82 0.97683586 +59 83 0.69719335 +77 83 0.39342971 +78 83 0.22247426 +83 83 0.079964198 +60 84 -0.898707 +77 84 0.55398581 +78 84 0.71154378 +83 84 -0.2450898 +84 84 0.41383484 +73 85 -0.65168951 +74 85 0.8341135 +81 85 -0.34449008 +82 85 -0.93615474 +83 85 -0.53923387 +84 85 0.32087593 +85 85 0.99898324 +73 86 0.45722132 +74 86 0.51638906 +81 86 0.67560637 +82 86 -0.28626203 +83 86 0.4222571 +84 86 -0.90489065 +85 86 0.46991185 +86 86 -0.42430131 +65 87 -0.72375919 +66 87 0.015597911 +67 87 0.71331295 +68 87 -0.23137276 +73 87 0.0685821 +74 87 0.77406146 +81 87 0.47814445 +82 87 0.32530767 +83 87 0.24914583 +84 87 -0.30243038 +87 87 -0.17095492 +65 88 0.39138185 +66 88 0.25580836 +67 88 -0.099223691 +68 88 -0.052764116 +73 88 -0.49387142 +74 88 -0.86240366 +81 88 0.90834891 +82 88 -0.43699688 +83 88 0.18121731 +84 88 -0.097318839 +87 88 0.90820557 +88 88 -0.070320117 +65 89 -0.067596332 +85 89 -0.15183036 +86 89 -0.40300111 +89 89 0.52791416 +66 90 -0.34869345 +85 90 -0.31787006 +86 90 -0.32383041 +89 90 0.085626226 +90 90 0.63640808 +67 91 0.26041025 +85 91 0.082707867 +86 91 0.71896021 +91 91 -0.79955692 +68 92 -0.53940167 +85 92 0.85233817 +86 92 -0.31904338 +91 92 0.080211665 +92 92 -0.64376609 +81 93 0.79759711 +82 93 -0.9938186 +89 93 -0.51819001 +90 93 0.46210166 +91 93 0.17641877 +92 93 -0.020811323 +93 93 -0.28073017 +81 94 0.87800618 +82 94 -0.82506237 +89 94 0.43009003 +90 94 -0.72447421 +91 94 -0.2676864 +92 94 0.75409745 +93 94 -0.37778072 +94 94 -0.88659062 +81 95 0.63087031 +82 95 -0.4785453 +89 95 0.71236458 +90 95 0.67344556 +91 95 0.61351909 +92 95 -0.29371637 +95 95 0.043771347 +81 96 -0.99728434 +82 96 -0.95440266 +89 96 -0.43698461 +90 96 -0.72279657 +91 96 0.0075615716 +92 96 -0.10111289 +95 96 -0.85753086 +96 96 -0.32830205 +23 97 0.50907328 +24 97 0.50747215 +97 97 -0.64866194 +23 98 0.1162361 +24 98 0.79675265 +97 98 -0.63603907 +98 98 -0.58210665 +13 99 -0.86523337 +14 99 0.77678187 +15 99 -0.53366463 +16 99 0.72319152 +23 99 -0.14441481 +24 99 0.45688807 +99 99 0.81030712 +13 100 0.42347019 +14 100 0.74562599 +15 100 0.87600401 +16 100 -0.72062144 +23 100 -0.46561189 +24 100 -0.18633973 +99 100 -0.81402215 +100 100 0.35078235 +5 101 -0.99931708 +97 101 0.92706057 +98 101 0.3342406 +99 101 0.24055685 +100 101 0.94960333 +101 101 -0.0630636 +6 102 0.081756646 +97 102 -0.9154044 +98 102 0.17287923 +99 102 0.62230177 +100 102 0.30269906 +101 102 -0.073021504 +102 102 0.82426495 +7 103 -0.58453876 +97 103 0.94591667 +98 103 0.35022483 +99 103 -0.96148505 +100 103 -0.53752437 +103 103 -0.79197685 +8 104 -0.56143282 +97 104 -0.62158631 +98 104 -0.2779559 +99 104 -0.83225298 +100 104 -0.19301771 +103 104 -0.98133498 +104 104 0.49109215 +101 105 -0.21219971 +102 105 -0.035539189 +105 105 0.47253491 +101 106 0.96112566 +102 106 -0.97181385 +105 106 0.83005182 +106 106 0.12372285 +21 107 0.2176429 +22 107 0.91595038 +23 107 -0.80910695 +24 107 -0.92881887 +101 107 0.28958805 +102 107 0.24576069 +107 107 -0.6316118 +21 108 0.77247022 +22 108 -0.50611727 +23 108 -0.98216989 +24 108 0.62984054 +101 108 0.79281956 +102 108 -0.53780927 +107 108 0.28548348 +108 108 0.1944227 +13 109 -0.34838747 +97 109 0.49236988 +98 109 -0.0037910258 +105 109 -0.75595896 +106 109 -0.69553197 +107 109 -0.81144322 +108 109 -0.31525299 +109 109 -0.40012602 +14 110 -0.80810117 +97 110 -0.064179068 +98 110 -0.025138691 +105 110 -0.46312236 +106 110 -0.30398468 +107 110 0.86008125 +108 110 0.47193232 +109 110 -0.99716188 +110 110 -0.73175413 +15 111 0.49506732 +97 111 0.7216547 +98 111 -0.54106245 +105 111 -0.48430766 +106 111 -0.75668309 +107 111 -0.20196006 +108 111 0.58936431 +111 111 -0.57479693 +16 112 0.49701791 +97 112 -0.066975975 +98 112 -0.82889554 +105 112 -0.33666952 +106 112 0.76830612 +107 112 -0.90519708 +108 112 0.089811796 +111 112 -0.93922946 +112 112 0.78988335 +109 113 -0.71900113 +110 113 0.18684114 +113 113 -0.85709437 +109 114 0.75973288 +110 114 0.17036328 +113 114 -0.58305955 +114 114 -0.51502688 +109 115 -0.80924643 +110 115 0.33536353 +115 115 -0.89249122 +109 116 -0.2948798 +110 116 0.29605423 +115 116 -0.09006771 +116 116 -0.11655589 +21 117 0.086598866 +105 117 0.054867926 +106 117 -0.13313032 +113 117 0.37244693 +114 117 -0.90761689 +115 117 0.75559814 +116 117 0.60074418 +117 117 -0.9734336 +22 118 -0.32373537 +105 118 0.44998392 +106 118 -0.51165421 +113 118 0.78726539 +114 118 -0.60904647 +115 118 0.16486593 +116 118 -0.42810629 +117 118 -0.74546793 +118 118 0.7943827 +23 119 0.66466732 +105 119 0.21483158 +106 119 -0.14207929 +113 119 -0.89041642 +114 119 0.44033161 +115 119 -0.85863133 +116 119 0.087326466 +119 119 -0.60668362 +24 120 0.10514436 +105 120 0.17673289 +106 120 -0.97964509 +113 120 -0.39267724 +114 120 0.44350655 +115 120 0.84548914 +116 120 0.96955247 +119 120 -0.98270462 +120 120 -0.81325897 +47 121 0.47895901 +48 121 -0.62105704 +97 121 0.15976995 +121 121 -0.3852662 +47 122 0.049480328 +48 122 -0.75261309 +98 122 0.20631264 +121 122 0.4541592 +122 122 -0.087884666 +37 123 0.66271951 +38 123 -0.93033236 +39 123 0.51567742 +40 123 0.91422436 +47 123 0.60904175 +48 123 0.64199296 +99 123 0.19975819 +123 123 -0.79666121 +37 124 -0.31425897 +38 124 0.27648742 +39 124 -0.31398838 +40 124 -0.56705721 +47 124 0.63382236 +48 124 0.27579524 +100 124 -0.10314424 +123 124 -0.29176707 +124 124 0.99077946 +29 125 0.91508623 +115 125 -0.93708013 +116 125 0.091772418 +121 125 0.43135613 +122 125 0.12142682 +123 125 0.29361933 +124 125 -0.27508144 +125 125 -0.33581433 +30 126 0.78566664 +115 126 0.6708091 +116 126 0.88633968 +121 126 0.67793919 +122 126 -0.46181691 +123 126 -0.38450884 +124 126 0.57622686 +125 126 0.56089189 +126 126 -0.40530637 +31 127 -0.28699277 +105 127 -0.44346596 +106 127 -0.32048567 +107 127 -0.42530078 +108 127 -0.65819353 +115 127 0.6714267 +116 127 -0.35705386 +121 127 -0.13347888 +122 127 0.49803694 +123 127 -0.72255073 +124 127 0.56059164 +127 127 -0.87590956 +32 128 0.092803786 +105 128 -0.20147337 +106 128 0.39529914 +107 128 -0.59264713 +108 128 0.33265298 +115 128 -0.900285 +116 128 0.61293361 +121 128 -0.058750569 +122 128 0.0077755469 +123 128 -0.048854132 +124 128 0.33702443 +127 128 -0.12668672 +128 128 -0.40351206 +105 129 -0.92915308 +125 129 0.57240125 +126 129 -0.15798844 +129 129 -0.90729747 +106 130 0.02762967 +125 130 0.44617992 +126 130 -0.81586259 +129 130 -0.12689044 +130 130 0.010856285 +45 131 0.42894327 +46 131 0.35843931 +47 131 0.91876116 +48 131 0.55066862 +107 131 -0.18453968 +125 131 -0.44232219 +126 131 -0.95194535 +131 131 0.52285177 +45 132 0.21545393 +46 132 0.89600472 +47 132 -0.88071675 +48 132 -0.46257531 +108 132 -0.78390793 +125 132 0.16486286 +126 132 -0.017708392 +131 132 -0.90157364 +132 132 0.26214 +37 133 -0.3066365 +121 133 0.71918691 +122 133 0.048212019 +129 133 -0.73299228 +130 133 0.87881943 +131 133 0.7922227 +132 133 0.098316175 +133 133 -0.8202167 +38 134 0.24560558 +121 134 -0.94474198 +122 134 -0.75960097 +129 134 -0.95688823 +130 134 0.96180727 +131 134 0.19505315 +132 134 0.45677365 +133 134 -0.9007362 +134 134 -0.83827515 +39 135 0.59324937 +113 135 -0.9406645 +114 135 -0.05535787 +115 135 -0.33325463 +116 135 0.95168961 +121 135 0.79831287 +122 135 -0.64441182 +129 135 0.11968141 +130 135 -0.42675922 +131 135 0.76803347 +132 135 0.1535166 +135 135 0.55448107 +40 136 0.4917498 +113 136 0.11088708 +114 136 0.69260728 +115 136 -0.18387301 +116 136 -0.075963672 +121 136 0.799871 +122 136 0.41221519 +129 136 -0.39836196 +130 136 0.60164057 +131 136 0.88746308 +132 136 -0.94828506 +135 136 -0.81779965 +136 136 0.81026949 +113 137 -0.080248742 +133 137 0.97336009 +134 137 -0.16613049 +137 137 0.067543904 +114 138 -0.098234493 +133 138 0.54441346 +134 138 -0.23970159 +137 138 0.18807406 +138 138 -0.78169158 +115 139 0.10228067 +133 139 -0.0492914 +134 139 -0.57345922 +139 139 0.65161772 +116 140 0.61080863 +133 140 0.36179911 +134 140 -0.23412402 +139 140 -0.51783189 +140 140 -0.32380456 +45 141 -0.74892754 +129 141 -0.11386782 +130 141 0.23284266 +137 141 -0.10693804 +138 141 0.87426933 +139 141 0.18636915 +140 141 -0.58644708 +141 141 -0.41205389 +46 142 0.64478801 +129 142 -0.13340947 +130 142 -0.46197878 +137 142 0.29260391 +138 142 0.65906565 +139 142 0.74510513 +140 142 0.30770118 +141 142 0.6827382 +142 142 0.49262686 +47 143 -0.949699 +129 143 -0.64952112 +130 143 0.11935586 +137 143 0.042405905 +138 143 0.69817096 +139 143 0.86700322 +140 143 -0.8558969 +143 143 -0.97932676 +48 144 -0.17114224 +129 144 -0.61359538 +130 144 0.88956798 +137 144 -0.25537468 +138 144 -0.25493152 +139 144 0.33692855 +140 144 -0.18654617 +143 144 0.71442553 +144 144 -0.90310532 +71 145 0.086089967 +72 145 0.52957511 +121 145 0.40170015 +145 145 0.33583224 +71 146 -0.67535062 +72 146 -0.1578613 +122 146 0.74447101 +145 146 0.9272244 +146 146 0.20693597 +61 147 0.67005493 +62 147 -0.061212996 +63 147 -0.17246012 +64 147 0.0054925277 +71 147 -0.98869386 +72 147 -0.88637364 +123 147 -0.8956157 +147 147 0.052204932 +61 148 -0.74912008 +62 148 -0.73542935 +63 148 0.74095073 +64 148 0.20590036 +71 148 0.54297029 +72 148 0.17149399 +124 148 -0.56063738 +147 148 -0.022200428 +148 148 0.4594189 +53 149 0.46281494 +139 149 0.91921856 +140 149 0.82377963 +145 149 0.33386307 +146 149 0.51349842 +147 149 0.72829506 +148 149 0.56884619 +149 149 0.41450697 +54 150 0.562748 +139 150 0.29269213 +140 150 -0.97029229 +145 150 0.86745132 +146 150 -0.16590509 +147 150 -0.22223245 +148 150 0.76567521 +149 150 -0.5593798 +150 150 0.5627541 +55 151 -0.26542817 +129 151 0.78847143 +130 151 0.55672132 +131 151 -0.86126479 +132 151 -0.44243094 +139 151 -0.24085303 +140 151 -0.68661231 +145 151 0.62190006 +146 151 0.94357199 +147 151 -0.090516344 +148 151 0.82742336 +151 151 -0.42404605 +56 152 0.48973571 +129 152 -0.24126033 +130 152 0.72934509 +131 152 -0.16007926 +132 152 -0.52024505 +139 152 -0.046850638 +140 152 -0.056864247 +145 152 -0.030903456 +146 152 0.9759494 +147 152 -0.5066256 +148 152 0.11656985 +151 152 -0.54758272 +152 152 0.38506397 +129 153 -0.08071598 +149 153 -0.46939655 +150 153 0.44441929 +153 153 0.11333967 +130 154 0.91706719 +149 154 0.72960516 +150 154 -0.3220017 +153 154 0.073575609 +154 154 -0.20695841 +69 155 -0.86952039 +70 155 -0.32817766 +71 155 -0.99132985 +72 155 0.65619121 +131 155 0.58009071 +149 155 -0.88378108 +150 155 -0.19756029 +155 155 -0.87681867 +69 156 0.014870755 +70 156 -0.26767513 +71 156 -0.54672056 +72 156 0.069663419 +132 156 -0.096250782 +149 156 -0.08449223 +150 156 0.053959504 +155 156 0.52421942 +156 156 0.56035106 +61 157 0.78453438 +145 157 0.088835398 +146 157 0.79955204 +153 157 0.19773621 +154 157 -0.58865532 +155 157 -0.43009956 +156 157 -0.18536315 +157 157 -0.32483227 +62 158 -0.51479323 +145 158 0.74988544 +146 158 -0.56426975 +153 158 -0.70224656 +154 158 0.79930198 +155 158 0.34645197 +156 158 -0.4494261 +157 158 -0.3048657 +158 158 0.21573181 +63 159 -0.74080605 +137 159 -0.292722 +138 159 -0.75964376 +139 159 0.13822205 +140 159 0.75006545 +145 159 -0.75799983 +146 159 -0.84604183 +153 159 0.79942697 +154 159 0.52517108 +155 159 0.32855981 +156 159 0.43333948 +159 159 0.4825081 +64 160 -0.54986424 +137 160 -0.30285005 +138 160 -0.91615799 +139 160 -0.71532056 +140 160 -0.84681433 +145 160 0.71270154 +146 160 -0.051569679 +153 160 -0.099212839 +154 160 0.76497261 +155 160 -0.75437001 +156 160 -0.43323124 +159 160 -0.077536481 +160 160 -0.79037352 +137 161 -0.33314363 +157 161 -0.42103027 +158 161 -0.180367 +161 161 -0.74422324 +138 162 -0.88180937 +157 162 -0.86325821 +158 162 -0.75323724 +161 162 0.27864752 +162 162 0.099080214 +139 163 0.48181061 +157 163 -0.83005851 +158 163 -0.11396681 +163 163 -0.029541183 +140 164 0.013589048 +157 164 -0.86332106 +158 164 0.79787947 +163 164 0.83467208 +164 164 0.78095136 +69 165 -0.29997216 +153 165 0.19530903 +154 165 0.63577367 +161 165 0.79239771 +162 165 0.38961039 +163 165 -0.34791566 +164 165 0.44171134 +165 165 0.59792056 +70 166 -0.42583077 +153 166 -0.041191193 +154 166 0.41781796 +161 166 0.65315778 +162 166 0.668738 +163 166 -0.087150798 +164 166 -0.96277445 +165 166 -0.67685485 +166 166 0.46868217 +71 167 0.85497601 +153 167 0.797095 +154 167 0.48644114 +161 167 -0.21994697 +162 167 0.21925938 +163 167 0.42759117 +164 167 0.34955293 +167 167 -0.89733623 +72 168 -0.89737249 +153 168 0.86941848 +154 168 0.79941957 +161 168 -0.0041941141 +162 168 0.14947432 +163 168 0.76881009 +164 168 -0.12298235 +167 168 0.43127081 +168 168 -0.8542294 +95 169 0.89941271 +96 169 0.17514253 +145 169 -0.60014917 +169 169 -0.82294508 +95 170 -0.83300488 +96 170 0.75526828 +146 170 -0.1456129 +169 170 0.15547775 +170 170 0.59670173 +85 171 0.55060971 +86 171 -0.64126181 +87 171 -0.78127758 +88 171 0.81031668 +95 171 -0.44034216 +96 171 -0.06179896 +147 171 -0.66261944 +171 171 0.88601628 +85 172 0.75270201 +86 172 0.99958513 +87 172 0.72850937 +88 172 -0.92624496 +95 172 -0.10598538 +96 172 -0.12516305 +148 172 0.50338918 +171 172 -0.13340205 +172 172 0.36743114 +77 173 0.18533351 +163 173 0.75082722 +164 173 0.42848481 +169 173 -0.12435964 +170 173 -0.50754377 +171 173 0.12384031 +172 173 0.31506108 +173 173 -0.73583409 +78 174 -0.6742022 +163 174 -0.064965962 +164 174 -0.38402794 +169 174 -0.76592636 +170 174 -0.31457356 +171 174 -0.20835554 +172 174 0.9018304 +173 174 0.76848557 +174 174 0.44544908 +79 175 0.67681154 +153 175 -0.13707589 +154 175 -0.32431087 +155 175 0.44144686 +156 175 -0.97268887 +163 175 -0.71732794 +164 175 0.34232794 +169 175 0.62936338 +170 175 -0.24861572 +171 175 -0.20373824 +172 175 0.44469703 +175 175 -0.77929304 +80 176 -0.66487814 +153 176 -0.25187961 +154 176 0.84537044 +155 176 0.092959296 +156 176 -0.05222626 +163 176 -0.86373109 +164 176 0.30484167 +169 176 -0.35028912 +170 176 0.093107586 +171 176 0.030734438 +172 176 -0.19984051 +175 176 -0.21389649 +176 176 -0.7650143 +153 177 -0.26329832 +173 177 0.089364884 +174 177 -0.85955706 +177 177 0.28143585 +154 178 0.88363559 +173 178 0.99523236 +174 178 0.97507747 +177 178 -0.64204969 +178 178 -0.34237157 +93 179 -0.57357044 +94 179 -0.61350104 +95 179 0.66550849 +96 179 0.4532742 +155 179 -0.96565492 +173 179 0.022016308 +174 179 0.84542686 +179 179 0.30762405 +93 180 0.059491388 +94 180 0.65816147 +95 180 0.023748863 +96 180 0.10392369 +156 180 0.65811182 +173 180 0.74702435 +174 180 0.12852184 +179 180 0.26666716 +180 180 0.49826293 +85 181 0.0044012308 +169 181 0.020080676 +170 181 -0.39609306 +177 181 0.66374268 +178 181 -0.67220336 +179 181 0.079810188 +180 181 0.71864082 +181 181 0.16637146 +86 182 0.99865896 +169 182 -0.0087115618 +170 182 -0.82077613 +177 182 -0.73132332 +178 182 -0.35156016 +179 182 -0.80925461 +180 182 0.94844326 +181 182 0.24800111 +182 182 0.48006466 +87 183 -0.2891857 +161 183 0.25981589 +162 183 0.11061525 +163 183 -0.74484188 +164 183 -0.66160334 +169 183 0.30273669 +170 183 0.65193096 +177 183 -0.87906646 +178 183 -0.39654645 +179 183 -0.70697029 +180 183 0.14167685 +183 183 -0.53034617 +88 184 -0.90584458 +161 184 -0.99800116 +162 184 -0.16367506 +163 184 -0.023028642 +164 184 -0.68026231 +169 184 0.48741229 +170 184 -0.22082598 +177 184 -0.8315059 +178 184 -0.97663802 +179 184 0.26228241 +180 184 0.99370043 +183 184 -0.34411681 +184 184 0.46991508 +161 185 0.25318195 +181 185 -0.57343021 +182 185 0.36661583 +185 185 0.94119705 +162 186 0.07749303 +181 186 0.17564125 +182 186 0.21711896 +185 186 0.60593063 +186 186 0.73386058 +163 187 0.30101527 +181 187 -0.71447355 +182 187 -0.56068813 +187 187 -0.82753094 +164 188 0.45325906 +181 188 -0.89555294 +182 188 -0.18744012 +187 188 0.99895572 +188 188 -0.26712677 +93 189 -0.57267883 +177 189 -0.0069253631 +178 189 0.027126207 +185 189 0.10708315 +186 189 -0.016387493 +187 189 -0.12763009 +188 189 0.63728147 +189 189 -0.26160239 +94 190 -0.20432175 +177 190 -0.38205784 +178 190 0.98517964 +185 190 0.03091691 +186 190 -0.85792583 +187 190 0.65325901 +188 190 0.77247008 +189 190 0.96195632 +190 190 0.37005695 +95 191 -0.33266364 +177 191 0.90167512 +178 191 -0.088312596 +185 191 -0.33863587 +186 191 0.77547843 +187 191 -0.21093063 +188 191 0.86222325 +191 191 0.19588327 +96 192 -0.54079494 +177 192 0.96398656 +178 192 -0.14791824 +185 192 -0.1399964 +186 192 -0.87073282 +187 192 0.22694976 +188 192 -0.6184307 +191 192 -0.74592612 +192 192 0.57872789 +119 193 0.49697982 +120 193 0.77312759 +193 193 -0.26469416 +119 194 0.1356823 +120 194 -0.10639827 +193 194 -0.53551971 +194 194 -0.58794428 +109 195 -0.24235374 +110 195 0.26390942 +111 195 -0.51346096 +112 195 0.14282614 +119 195 -0.40207167 +120 195 0.63197451 +195 195 -0.82666691 +109 196 0.96345755 +110 196 0.69936404 +111 196 -0.43311163 +112 196 0.36491533 +119 196 -0.48778044 +120 196 -0.8033254 +195 196 -0.95273507 +196 196 0.54386783 +101 197 0.87224036 +193 197 -0.4828355 +194 197 0.22561918 +195 197 -0.092213069 +196 197 0.3907799 +197 197 -0.58865096 +102 198 0.36637757 +193 198 0.79573137 +194 198 0.63884448 +195 198 -0.14417816 +196 198 0.44032922 +197 198 0.21486522 +198 198 -0.22345674 +103 199 0.92422759 +193 199 0.18672372 +194 199 0.063778339 +195 199 0.9321055 +196 199 -0.30620962 +199 199 0.10355706 +104 200 -0.12405364 +193 200 0.0076801637 +194 200 -0.59584981 +195 200 0.24011011 +196 200 0.033980841 +199 200 -0.77838136 +200 200 -0.5420935 +197 201 -0.28375094 +198 201 0.62269323 +201 201 0.28388124 +197 202 0.97385354 +198 202 -0.83115379 +201 202 -0.18508098 +202 202 -0.031039255 +117 203 0.2803885 +118 203 -0.67412086 +119 203 0.13182118 +120 203 0.86323227 +197 203 -0.83202741 +198 203 0.062507927 +203 203 -0.69630895 +117 204 0.56620377 +118 204 0.37137427 +119 204 -0.06756143 +120 204 -0.47936381 +197 204 -0.49938823 +198 204 0.60124596 +203 204 0.76815361 +204 204 0.56386393 +109 205 0.88067331 +193 205 -0.51424767 +194 205 -0.9955236 +201 205 0.11338926 +202 205 -0.14708893 +203 205 -0.091575256 +204 205 -0.13944431 +205 205 -0.79878736 +110 206 -0.98833135 +193 206 0.66854033 +194 206 -0.24055212 +201 206 -0.68700956 +202 206 0.67254084 +203 206 -0.2272202 +204 206 0.38750515 +205 206 0.096265555 +206 206 -0.41186733 +111 207 0.22061406 +193 207 0.62718238 +194 207 0.80881139 +201 207 0.12411209 +202 207 0.46277413 +203 207 0.55110928 +204 207 0.89042697 +207 207 -0.52525396 +112 208 0.60215151 +193 208 0.25794621 +194 208 0.36070333 +201 208 0.38960658 +202 208 -0.27993792 +203 208 0.46854221 +204 208 0.5684652 +207 208 -0.26199385 +208 208 0.061744514 +205 209 0.13853634 +206 209 0.77044008 +209 209 -0.81700254 +205 210 -0.50245867 +206 210 0.58917885 +209 210 -0.58330803 +210 210 -0.18936916 +205 211 -0.36139682 +206 211 0.85161961 +211 211 -0.79030751 +205 212 0.82160446 +206 212 -0.6423201 +211 212 -0.11811345 +212 212 -0.77543208 +117 213 -0.53403693 +201 213 0.47764648 +202 213 -0.043005006 +209 213 0.41114372 +210 213 -0.081239904 +211 213 -0.96871061 +212 213 0.00042264856 +213 213 0.56885578 +118 214 0.86493735 +201 214 -0.71667404 +202 214 0.1748068 +209 214 -0.78133152 +210 214 -0.89932003 +211 214 0.72742173 +212 214 -0.5640124 +213 214 0.9123923 +214 214 -0.41685936 +119 215 0.52652555 +201 215 -0.12421148 +202 215 -0.70838861 +209 215 -0.22013869 +210 215 -0.54262483 +211 215 -0.84386189 +212 215 0.14323145 +215 215 0.20706688 +120 216 0.65289908 +201 216 -0.29923926 +202 216 0.81066121 +209 216 0.18180946 +210 216 0.66837812 +211 216 0.33808518 +212 216 -0.7556217 +215 216 -0.75194817 +216 216 0.92884533 +143 217 0.21751741 +144 217 0.65560786 +193 217 -0.81102287 +217 217 -0.13503001 +143 218 -0.49250159 +144 218 0.67401254 +194 218 0.75514787 +217 218 -0.058473508 +218 218 0.38950439 +133 219 0.5812898 +134 219 -0.59101484 +135 219 0.35621216 +136 219 -0.89502891 +143 219 -0.73477055 +144 219 0.66669729 +195 219 -0.97127571 +219 219 0.51619855 +133 220 0.60234472 +134 220 0.35713728 +135 220 0.89201789 +136 220 -0.81688371 +143 220 0.090009782 +144 220 -0.59256913 +196 220 -0.41139475 +219 220 0.71379266 +220 220 -0.13471535 +125 221 0.14692718 +211 221 -0.83000587 +212 221 -0.76229345 +217 221 0.34233247 +218 221 -0.69499873 +219 221 0.23478034 +220 221 0.81610441 +221 221 0.31099608 +126 222 0.58516333 +211 222 0.844716 +212 222 -0.23971402 +217 222 0.1991711 +218 222 -0.96075787 +219 222 0.040258831 +220 222 -0.78396661 +221 222 -0.91321906 +222 222 -0.7804899 +127 223 -0.34191761 +201 223 0.24478287 +202 223 0.9951038 +203 223 0.034688266 +204 223 0.98102243 +211 223 -0.89280437 +212 223 0.62566507 +217 223 -0.88804769 +218 223 -0.12964891 +219 223 0.72773645 +220 223 0.033993516 +223 223 0.8675197 +128 224 -0.55307605 +201 224 -0.54693107 +202 224 -0.20398963 +203 224 0.39313738 +204 224 -0.87071848 +211 224 0.054049905 +212 224 -0.51180817 +217 224 -0.88731396 +218 224 0.66444295 +219 224 -0.80460416 +220 224 -0.71368796 +223 224 0.38325029 +224 224 -0.62507839 +201 225 -0.64017024 +221 225 0.81687674 +222 225 -0.84502504 +225 225 -0.46764232 +202 226 0.85258854 +221 226 0.019906074 +222 226 0.70122813 +225 226 0.95797093 +226 226 0.59566052 +141 227 -0.80273953 +142 227 0.46911825 +143 227 0.27461258 +144 227 -0.85231625 +203 227 -0.86363913 +221 227 0.22980713 +222 227 -0.71094619 +227 227 -0.024792449 +141 228 -0.75898367 +142 228 0.96319242 +143 228 -0.0064011564 +144 228 -0.95517269 +204 228 0.16218646 +221 228 -0.3678576 +222 228 -0.25902841 +227 228 -0.4334642 +228 228 0.53791653 +133 229 -0.37522732 +217 229 -0.81807662 +218 229 -0.28993336 +225 229 0.11874114 +226 229 0.83364254 +227 229 -0.79849898 +228 229 -0.8340747 +229 229 -0.20798651 +134 230 0.16904696 +217 230 0.12853765 +218 230 -0.37043299 +225 230 -0.99084075 +226 230 0.97393655 +227 230 0.015697662 +228 230 0.32319239 +229 230 -0.732439 +230 230 -0.45412241 +135 231 0.65982828 +209 231 -0.42286938 +210 231 -0.46190637 +211 231 0.18838835 +212 231 -0.048241952 +217 231 -0.62523422 +218 231 0.45348294 +225 231 0.533364 +226 231 0.010266204 +227 231 0.17121825 +228 231 0.033958029 +231 231 -0.92553073 +136 232 -0.41907502 +209 232 -0.26337792 +210 232 0.31122218 +211 232 0.87640081 +212 232 0.24085037 +217 232 0.063379172 +218 232 0.031545716 +225 232 0.69741845 +226 232 -0.45715675 +227 232 0.52577419 +228 232 -0.65790396 +231 232 0.37055937 +232 232 0.34658983 +209 233 0.27430245 +229 233 -0.8923369 +230 233 0.12171348 +233 233 -0.14087108 +210 234 0.30253853 +229 234 -0.7182524 +230 234 -0.011087305 +233 234 0.81890911 +234 234 -0.09652153 +211 235 0.72924403 +229 235 0.78694862 +230 235 -0.86442902 +235 235 0.21971434 +212 236 -0.88809494 +229 236 -0.068359854 +230 236 0.79529308 +235 236 0.22173796 +236 236 -0.88119341 +141 237 -0.19489122 +225 237 0.49532316 +226 237 -0.36186436 +233 237 0.87711573 +234 237 0.31182764 +235 237 0.10777413 +236 237 0.15784698 +237 237 -0.36837712 +142 238 0.7241146 +225 238 -0.15919914 +226 238 0.97210213 +233 238 0.18096635 +234 238 -0.096108581 +235 238 0.36013106 +236 238 0.73377411 +237 238 0.79996559 +238 238 0.54544426 +143 239 0.2294791 +225 239 0.62263484 +226 239 0.43636181 +233 239 -0.11873064 +234 239 0.67939484 +235 239 -0.26562019 +236 239 -0.18644648 +239 239 0.39286598 +144 240 0.98237558 +225 240 -0.24078943 +226 240 -0.17363328 +233 240 0.88383786 +234 240 0.065247005 +235 240 -0.52141879 +236 240 -0.77476972 +239 240 -0.6131325 +240 240 -0.74933564 +167 241 -0.51915289 +168 241 -0.56966077 +217 241 0.63371035 +241 241 -0.7396971 +167 242 0.36981699 +168 242 0.52068669 +218 242 0.057844933 +241 242 0.50884916 +242 242 -0.81529532 +157 243 0.3043992 +158 243 0.65399666 +159 243 -0.38384618 +160 243 -0.19527284 +167 243 0.67850723 +168 243 0.1682057 +219 243 0.38870112 +243 243 -0.98435941 +157 244 0.76846263 +158 244 0.40115902 +159 244 -0.51625541 +160 244 0.51966363 +167 244 0.94028927 +168 244 -0.19409684 +220 244 -0.57519021 +243 244 -0.30747857 +244 244 -0.15378123 +149 245 -0.59260225 +235 245 -0.8923514 +236 245 0.13372166 +241 245 -0.11230833 +242 245 -0.19274267 +243 245 -0.47973961 +244 245 -0.40488923 +245 245 0.31114635 +150 246 0.65441817 +235 246 0.72437486 +236 246 0.36078998 +241 246 -0.3996312 +242 246 -0.21964812 +243 246 -0.8263698 +244 246 -0.15028318 +245 246 -0.16274917 +246 246 0.44584505 +151 247 0.35172324 +225 247 0.87336722 +226 247 0.72038048 +227 247 -0.20554348 +228 247 -0.041161791 +235 247 -0.11413067 +236 247 -0.25724284 +241 247 -0.19722629 +242 247 -0.27910221 +243 247 -0.14120533 +244 247 -0.76158548 +247 247 0.062418587 +152 248 -0.50210106 +225 248 0.12999219 +226 248 -0.020761221 +227 248 -0.46037673 +228 248 0.97948028 +235 248 0.096018315 +236 248 -0.84354258 +241 248 0.66672713 +242 248 -0.71948928 +243 248 -0.48543443 +244 248 -0.0098661524 +247 248 -0.68856034 +248 248 -0.78236412 +225 249 0.086559892 +245 249 -0.41814853 +246 249 -0.12613444 +249 249 0.26353275 +226 250 0.40504054 +245 250 -0.44512256 +246 250 -0.39140306 +249 250 0.63800117 +250 250 -0.74700027 +165 251 0.086540471 +166 251 -0.49717305 +167 251 0.15714462 +168 251 0.8309532 +227 251 0.91286911 +245 251 -0.98778439 +246 251 -0.41827934 +251 251 -0.73139339 +165 252 0.79119305 +166 252 -0.034986765 +167 252 -0.11452004 +168 252 -0.3764901 +228 252 -0.11091567 +245 252 -0.25057772 +246 252 -0.51496738 +251 252 0.24984706 +252 252 -0.80281181 +157 253 -0.048428747 +241 253 -0.1388096 +242 253 -0.098073021 +249 253 0.41281446 +250 253 -0.21223315 +251 253 -0.62164066 +252 253 -0.72270206 +253 253 -0.7159455 +158 254 -0.20184955 +241 254 0.46143603 +242 254 0.28014902 +249 254 -0.51285325 +250 254 -0.99321175 +251 254 -0.71503189 +252 254 0.19777122 +253 254 0.47712084 +254 254 -0.6634974 +159 255 0.1988765 +233 255 -0.42385871 +234 255 -0.49931423 +235 255 -0.02324073 +236 255 0.45807223 +241 255 -0.47764766 +242 255 -0.73592237 +249 255 0.57014016 +250 255 -0.55864622 +251 255 -0.463848 +252 255 0.80211581 +255 255 -0.60750216 +160 256 0.60104553 +233 256 -0.59476781 +234 256 -0.56744759 +235 256 0.95266903 +236 256 0.18647158 +241 256 -0.81038464 +242 256 -0.09435514 +249 256 -0.85182085 +250 256 -0.99739886 +251 256 -0.65021587 +252 256 0.87875953 +255 256 0.61022484 +256 256 -0.36504045 +233 257 -0.82920434 +253 257 -0.88937246 +254 257 -0.20825807 +257 257 -0.367142 +234 258 -0.8853197 +253 258 0.50758355 +254 258 0.77104245 +257 258 -0.86555468 +258 258 -0.56487338 +235 259 0.25890097 +253 259 -0.73610504 +254 259 -0.9575209 +259 259 -0.49791631 +236 260 0.59235813 +253 260 -0.28815576 +254 260 0.68816144 +259 260 0.90158063 +260 260 0.78584481 +165 261 -0.78986246 +249 261 -0.63264861 +250 261 0.49749399 +257 261 -0.55763109 +258 261 -0.47025481 +259 261 -0.94778578 +260 261 0.52482897 +261 261 0.40644645 +166 262 0.64288439 +249 262 0.72331345 +250 262 0.28873292 +257 262 -0.034657249 +258 262 -0.86328556 +259 262 0.90935655 +260 262 -0.98530268 +261 262 -0.004845978 +262 262 0.11147589 +167 263 0.68217266 +249 263 -0.93473486 +250 263 -0.66152407 +257 263 -0.24797777 +258 263 -0.12734585 +259 263 -0.13880696 +260 263 0.36007728 +263 263 -0.63113266 +168 264 -0.29098751 +249 264 -0.33608396 +250 264 0.9044102 +257 264 0.047560074 +258 264 -0.65229393 +259 264 0.92311715 +260 264 0.41190151 +263 264 0.51029181 +264 264 -0.57593831 +191 265 0.33367715 +192 265 0.95170794 +241 265 0.38238267 +265 265 -0.84530638 +191 266 -0.96415926 +192 266 -0.93817092 +242 266 -0.30938428 +265 266 0.48481014 +266 266 0.82760082 +181 267 0.022128178 +182 267 -0.94449982 +183 267 0.98077056 +184 267 0.0018798475 +191 267 -0.76064929 +192 267 -0.012236312 +243 267 0.89363333 +267 267 0.41343044 +181 268 -0.33600503 +182 268 -0.65223372 +183 268 0.25127279 +184 268 0.15026967 +191 268 0.90425062 +192 268 0.72544426 +244 268 0.040380636 +267 268 0.66225915 +268 268 0.11557793 +173 269 -0.13986107 +259 269 -0.92195405 +260 269 -0.98498519 +265 269 0.29025757 +266 269 -0.54394335 +267 269 -0.1951329 +268 269 0.81819638 +269 269 -0.37314202 +174 270 0.14447844 +259 270 0.19638905 +260 270 0.37786673 +265 270 0.10461969 +266 270 -0.25827056 +267 270 -0.36396177 +268 270 0.18318882 +269 270 -0.68699631 +270 270 -0.66759287 +175 271 0.40164946 +249 271 0.60382394 +250 271 -0.0051834305 +251 271 0.075685683 +252 271 0.74182505 +259 271 0.20862701 +260 271 0.89204075 +265 271 -0.56378254 +266 271 0.78185764 +267 271 0.21727086 +268 271 -0.33485719 +271 271 0.24499452 +176 272 0.48493951 +249 272 0.44568714 +250 272 0.33617186 +251 272 -0.64234442 +252 272 0.10099071 +259 272 0.032864821 +260 272 0.74707291 +265 272 0.54473243 +266 272 0.71275382 +267 272 0.82039045 +268 272 0.70612726 +271 272 -0.085382559 +272 272 0.97586947 +249 273 0.90762605 +269 273 0.50197077 +270 273 0.70121531 +273 273 -0.65913595 +250 274 -0.85280873 +269 274 -0.6929624 +270 274 -0.32426052 +273 274 0.23620099 +274 274 -0.4844155 +189 275 -0.97241089 +190 275 -0.052578502 +191 275 0.90239418 +192 275 -0.50209544 +251 275 -0.5859361 +269 275 -0.28642561 +270 275 -0.44960701 +275 275 -0.20640136 +189 276 -0.2271544 +190 276 -0.13713325 +191 276 0.66177297 +192 276 0.64929364 +252 276 0.55005563 +269 276 -0.7120984 +270 276 -0.98797805 +275 276 0.86436671 +276 276 -0.85201046 +181 277 0.5157683 +265 277 -0.036686039 +266 277 -0.50560029 +273 277 -0.11520421 +274 277 0.43299469 +275 277 -0.35614563 +276 277 0.10546427 +277 277 0.36819213 +182 278 -0.22174247 +265 278 0.7036119 +266 278 -0.89162232 +273 278 0.80871096 +274 278 -0.64139631 +275 278 -0.19228658 +276 278 -0.45037719 +277 278 0.67017647 +278 278 -0.19522333 +183 279 -0.14139503 +257 279 -0.095652995 +258 279 0.69839742 +259 279 -0.21913834 +260 279 0.47675302 +265 279 0.61982761 +266 279 0.21792291 +273 279 -0.93364119 +274 279 -0.32693415 +275 279 0.0971326 +276 279 -0.51699652 +279 279 0.9656704 +184 280 0.91268932 +257 280 0.95287711 +258 280 0.046598116 +259 280 -0.1401694 +260 280 -0.58568383 +265 280 -0.62648091 +266 280 0.55446486 +273 280 0.064852965 +274 280 -0.6245741 +275 280 -0.90252281 +276 280 -0.51370964 +279 280 0.79084703 +280 280 -0.19563203 +257 281 0.82837564 +277 281 -0.094002775 +278 281 0.47526615 +281 281 0.24134389 +258 282 0.5651013 +277 282 -0.23887966 +278 282 0.893832 +281 282 0.16503705 +282 282 -0.69126039 +259 283 -0.40893161 +277 283 0.85173709 +278 283 0.020199411 +283 283 -0.23730959 +260 284 -0.69630856 +277 284 0.48168725 +278 284 0.58375837 +283 284 0.16549361 +284 284 -0.67773206 +189 285 0.14594273 +273 285 0.91975016 +274 285 0.7718489 +281 285 -0.6916811 +282 285 0.4565237 +283 285 -0.99760321 +284 285 0.086124351 +285 285 0.51622486 +190 286 0.69944411 +273 286 0.19204334 +274 286 -0.57232599 +281 286 0.91283272 +282 286 -0.64837654 +283 286 -0.36716097 +284 286 -0.12192559 +285 286 0.70985188 +286 286 0.74222224 +191 287 -0.44730937 +273 287 0.61714142 +274 287 -0.93073988 +281 287 0.87132275 +282 287 -0.27925805 +283 287 0.39923397 +284 287 -0.42514547 +287 287 -0.29844651 +192 288 0.24464723 +273 288 0.96906471 +274 288 -0.097752417 +281 288 0.63742887 +282 288 -0.62242005 +283 288 0.25051036 +284 288 0.0033182135 +287 288 -0.9302686 +288 288 0.37107142 +215 289 0.24055624 +216 289 -0.4795888 +289 289 -0.41170273 +215 290 0.49336926 +216 290 0.75493907 +289 290 0.77084019 +290 290 0.061258608 +205 291 0.34490193 +206 291 0.80366274 +207 291 -0.60168564 +208 291 -0.4034317 +215 291 0.9545113 +216 291 0.61219197 +291 291 0.66484677 +205 292 -0.0069594595 +206 292 0.77980846 +207 292 0.0028291797 +208 292 -0.44600952 +215 292 -0.23217297 +216 292 -0.07775784 +291 292 -0.18453838 +292 292 0.19498038 +197 293 0.17672337 +289 293 0.52309237 +290 293 0.29106901 +291 293 -0.81570463 +292 293 -0.13697763 +293 293 -0.32937734 +198 294 0.92693693 +289 294 0.5248161 +290 294 -0.75356096 +291 294 -0.70430106 +292 294 0.38880782 +293 294 -0.92723594 +294 294 -0.40154995 +199 295 -0.82819461 +289 295 0.1521118 +290 295 0.0087957202 +291 295 -0.6036606 +292 295 -0.48643087 +295 295 -0.094814917 +200 296 0.00099778321 +289 296 0.49532568 +290 296 -0.30547737 +291 296 0.34454047 +292 296 -0.9804827 +295 296 0.49229589 +296 296 -0.15470869 +293 297 0.067916357 +294 297 0.40552961 +297 297 -0.28078736 +293 298 0.14849911 +294 298 0.013494303 +297 298 -0.69034246 +298 298 0.1166384 +213 299 -0.66940476 +214 299 0.82443779 +215 299 -0.36158844 +216 299 -0.34044066 +293 299 -0.1743912 +294 299 -0.2374678 +299 299 0.48509073 +213 300 -0.59152866 +214 300 0.53442947 +215 300 -0.8600537 +216 300 0.9000679 +293 300 -0.97047267 +294 300 -0.87013693 +299 300 -0.71218334 +300 300 -0.15133043 +205 301 0.043179353 +289 301 0.54861942 +290 301 -0.33076123 +297 301 0.064566142 +298 301 -0.21463085 +299 301 0.94299928 +300 301 0.37327563 +301 301 -0.14128842 +206 302 -0.819668 +289 302 -0.75947446 +290 302 0.14923313 +297 302 -0.44121607 +298 302 -0.95028953 +299 302 -0.88613423 +300 302 0.43886551 +301 302 0.21191811 +302 302 -0.75025448 +207 303 0.80933296 +289 303 0.2509003 +290 303 0.72787528 +297 303 0.89246031 +298 303 0.34287359 +299 303 -0.099352375 +300 303 0.3000815 +303 303 -0.95113197 +208 304 0.76877788 +289 304 -0.30670263 +290 304 -0.60287386 +297 304 0.81288653 +298 304 0.67434127 +299 304 0.1649406 +300 304 0.4538291 +303 304 -0.49103831 +304 304 -0.41962947 +301 305 -0.68358043 +302 305 0.024173301 +305 305 -0.36495883 +301 306 -0.42710827 +302 306 0.44265385 +305 306 -0.35169159 +306 306 0.30738027 +301 307 0.37425823 +302 307 0.85769027 +307 307 0.91387185 +301 308 -0.71770035 +302 308 0.4642077 +307 308 -0.19641816 +308 308 0.87146175 +213 309 -0.12202067 +297 309 -0.28284008 +298 309 -0.21313081 +305 309 -0.25230467 +306 309 0.95953045 +307 309 -0.62844347 +308 309 -0.21866493 +309 309 -0.084227332 +214 310 0.56344523 +297 310 -0.53149751 +298 310 -0.89284966 +305 310 0.16316417 +306 310 -0.43035255 +307 310 -0.61392037 +308 310 -0.45356658 +309 310 -0.18725336 +310 310 -0.51904321 +215 311 -0.70306995 +297 311 -0.59299189 +298 311 -0.24989684 +305 311 -0.76776297 +306 311 0.1899486 +307 311 -0.31671179 +308 311 -0.69610584 +311 311 0.52779589 +216 312 0.23963185 +297 312 0.62755917 +298 312 0.54998835 +305 312 -0.88469128 +306 312 0.92432206 +307 312 0.86579579 +308 312 -0.20578231 +311 312 -0.22761772 +312 312 0.51865477 +239 313 -0.5181904 +240 313 -0.2865885 +289 313 0.69582104 +313 313 0.48129613 +239 314 -0.48006944 +240 314 0.50571568 +290 314 0.56970918 +313 314 0.21960365 +314 314 0.48737668 +229 315 0.19067284 +230 315 0.50574824 +231 315 -0.0065555923 +232 315 0.73026531 +239 315 0.51794832 +240 315 -0.77990301 +291 315 -0.458337 +315 315 -0.78815917 +229 316 -0.86394461 +230 316 0.93709188 +231 316 -0.80248738 +232 316 0.093954173 +239 316 0.98668553 +240 316 0.19409046 +292 316 -0.54437859 +315 316 -0.66621855 +316 316 0.36312086 +221 317 -0.47875264 +307 317 0.49969604 +308 317 -0.56184528 +313 317 -0.25055507 +314 317 0.22925392 +315 317 -0.52926645 +316 317 -0.0074222287 +317 317 -0.073478843 +222 318 -0.10868758 +307 318 -0.18536079 +308 318 0.68477581 +313 318 -0.73777059 +314 318 -0.97804182 +315 318 -0.10396057 +316 318 0.28463047 +317 318 -0.62381585 +318 318 -0.57567359 +223 319 0.68799902 +297 319 0.88805839 +298 319 0.7429043 +299 319 0.015204416 +300 319 0.57764633 +307 319 -0.52101661 +308 319 0.32586582 +313 319 -0.12991856 +314 319 0.14652077 +315 319 0.13871637 +316 319 -0.55746854 +319 319 -0.80296252 +224 320 -0.60759016 +297 320 -0.053938718 +298 320 0.6576034 +299 320 -0.35503682 +300 320 0.95229307 +307 320 0.04170095 +308 320 0.63247057 +313 320 -0.81697367 +314 320 0.57945972 +315 320 -0.87719712 +316 320 0.67411289 +319 320 -0.81074226 +320 320 0.64714895 +297 321 -0.35795357 +317 321 -0.19406018 +318 321 0.56593639 +321 321 -0.64998053 +298 322 0.65912361 +317 322 -0.78591969 +318 322 0.13324116 +321 322 -0.35362745 +322 322 -0.67286018 +237 323 -0.073410242 +238 323 0.6415005 +239 323 0.90381301 +240 323 -0.84745422 +299 323 0.64436439 +317 323 0.44833234 +318 323 0.62263832 +323 323 0.33197443 +237 324 0.41734213 +238 324 -0.53014711 +239 324 -0.20220888 +240 324 -0.46375115 +300 324 0.1413657 +317 324 0.2273647 +318 324 0.15355172 +323 324 0.53919386 +324 324 0.78877875 +229 325 -0.39229675 +313 325 0.5877552 +314 325 0.97370445 +321 325 0.94215046 +322 325 0.49323444 +323 325 0.20052429 +324 325 0.71714106 +325 325 0.033116417 +230 326 -0.033410865 +313 326 -0.061789593 +314 326 0.53986775 +321 326 0.69274578 +322 326 -0.52613923 +323 326 -0.654791 +324 326 0.82213411 +325 326 -0.531764 +326 326 0.40540461 +231 327 -0.32437591 +305 327 0.26915897 +306 327 -0.27354276 +307 327 -0.18476111 +308 327 -0.26260055 +313 327 -0.38095004 +314 327 0.65916169 +321 327 0.011998912 +322 327 0.91469056 +323 327 -0.81930652 +324 327 0.39926753 +327 327 -0.69281925 +232 328 0.59697166 +305 328 -0.063202479 +306 328 0.0068276866 +307 328 0.82107156 +308 328 -0.58713796 +313 328 0.3751585 +314 328 0.41216953 +321 328 -0.44224878 +322 328 0.24052007 +323 328 -0.48947559 +324 328 0.45036471 +327 328 0.48073094 +328 328 0.90691414 +305 329 0.14365927 +325 329 0.66502663 +326 329 0.8646064 +329 329 0.081768162 +306 330 -0.42796346 +325 330 0.99074762 +326 330 0.3753051 +329 330 0.38563683 +330 330 0.3594678 +307 331 0.39826712 +325 331 0.29950197 +326 331 0.13670784 +331 331 -0.92687396 +308 332 0.59251589 +325 332 0.40790566 +326 332 -0.23830494 +331 332 0.64815643 +332 332 0.6184077 +237 333 0.97497515 +321 333 -0.44357792 +322 333 0.84467619 +329 333 -0.54022784 +330 333 0.97687853 +331 333 -0.87878727 +332 333 0.65996486 +333 333 0.49723774 +238 334 -0.68190489 +321 334 -0.85433839 +322 334 -0.34595141 +329 334 0.15210691 +330 334 -0.82000237 +331 334 0.45137585 +332 334 0.71751807 +333 334 0.6559551 +334 334 -0.75962596 +239 335 -0.52624043 +321 335 0.50244721 +322 335 0.60813853 +329 335 0.62125621 +330 335 -0.35811793 +331 335 0.1131115 +332 335 0.57805785 +335 335 0.05009033 +240 336 0.40447327 +321 336 0.66237724 +322 336 0.076500667 +329 336 -0.19231326 +330 336 0.022817878 +331 336 0.058719805 +332 336 -0.36433389 +335 336 -0.41326413 +336 336 -0.34833274 +263 337 0.56218453 +264 337 0.98585688 +313 337 -0.11682189 +337 337 0.09289888 +263 338 -0.29780314 +264 338 -0.67504703 +314 338 -0.10756878 +337 338 -0.38126152 +338 338 -0.2022385 +253 339 0.32167219 +254 339 -0.29224167 +255 339 -0.3056274 +256 339 -0.4925638 +263 339 -0.89140529 +264 339 -0.77286732 +315 339 -0.068675183 +339 339 -0.16981323 +253 340 0.90505629 +254 340 -0.40359802 +255 340 -0.68318784 +256 340 -0.27740589 +263 340 0.41740923 +264 340 0.82575085 +316 340 -0.44192163 +339 340 0.046059597 +340 340 -0.63852448 +245 341 -0.24905667 +331 341 -0.32279265 +332 341 0.15918693 +337 341 -0.095585092 +338 341 -0.46023267 +339 341 -0.37628011 +340 341 0.27855229 +341 341 -0.48922652 +246 342 0.94740981 +331 342 0.14825124 +332 342 0.7566554 +337 342 0.50445594 +338 342 0.049274691 +339 342 -0.41708574 +340 342 -0.4892594 +341 342 -0.34940202 +342 342 -0.95892845 +247 343 0.94461111 +321 343 -0.40440964 +322 343 -0.74997124 +323 343 -0.22328866 +324 343 0.63537549 +331 343 -0.026135121 +332 343 -0.87809956 +337 343 -0.78027659 +338 343 0.94530215 +339 343 0.70071467 +340 343 -0.82266832 +343 343 0.84735123 +248 344 0.2873961 +321 344 0.96235141 +322 344 0.72397967 +323 344 -0.83235824 +324 344 -0.32457602 +331 344 -0.47556203 +332 344 -0.11824706 +337 344 -0.78051526 +338 344 0.42081737 +339 344 0.82329485 +340 344 0.67651118 +343 344 0.66368502 +344 344 0.30739978 +321 345 0.35075064 +341 345 0.48325819 +342 345 -0.2513088 +345 345 0.86522714 +322 346 0.80732905 +341 346 0.41180002 +342 346 0.80299124 +345 346 0.62058958 +346 346 -0.67297526 +261 347 -0.78975174 +262 347 0.49018619 +263 347 0.45874388 +264 347 0.4349392 +323 347 0.8170518 +341 347 0.40178435 +342 347 -0.36331034 +347 347 0.84219451 +261 348 -0.73313646 +262 348 -0.108422 +263 348 0.017574462 +264 348 0.060980582 +324 348 0.49439389 +341 348 -0.98754843 +342 348 0.19416585 +347 348 0.11399652 +348 348 0.58931577 +253 349 0.72019775 +337 349 -0.831484 +338 349 -0.53381946 +345 349 0.16943724 +346 349 -0.42978383 +347 349 -0.21317699 +348 349 -0.36379055 +349 349 0.15478839 +254 350 -0.1962332 +337 350 0.12647523 +338 350 0.17472348 +345 350 0.89621747 +346 350 0.65546435 +347 350 0.65314796 +348 350 -0.73237803 +349 350 -0.47407193 +350 350 -0.11992881 +255 351 0.2638616 +329 351 -0.038199327 +330 351 0.36972756 +331 351 -0.58348322 +332 351 0.21632198 +337 351 0.078621161 +338 351 -0.082052266 +345 351 -0.87794214 +346 351 -0.61802712 +347 351 0.35374219 +348 351 0.34292578 +351 351 -0.48477253 +256 352 0.97047328 +329 352 -0.34764766 +330 352 0.7616944 +331 352 -0.73321077 +332 352 -0.79518442 +337 352 0.5361158 +338 352 0.72196304 +345 352 0.16928261 +346 352 -0.11494008 +347 352 -0.58479393 +348 352 0.14198215 +351 352 0.3611324 +352 352 0.50389279 +329 353 -0.47897699 +349 353 0.71943409 +350 353 0.91179168 +353 353 -0.54266104 +330 354 0.37927568 +349 354 0.35544982 +350 354 -0.86664611 +353 354 -0.53269371 +354 354 -0.87162583 +331 355 -0.73633867 +349 355 0.61167652 +350 355 0.083036055 +355 355 0.53465902 +332 356 -0.75299834 +349 356 0.062485739 +350 356 -0.43667931 +355 356 -0.087149271 +356 356 0.34240437 +261 357 0.11895481 +345 357 -0.52774167 +346 357 0.49850252 +353 357 -0.66046587 +354 357 0.10435005 +355 357 -0.097250291 +356 357 0.06469987 +357 357 0.43042503 +262 358 0.86718383 +345 358 -0.36438922 +346 358 0.68370347 +353 358 -0.70468845 +354 358 -0.93412021 +355 358 -0.23470754 +356 358 0.42331341 +357 358 -0.23086621 +358 358 0.28412166 +263 359 0.44068641 +345 359 0.96889681 +346 359 -0.66622059 +353 359 -0.047840563 +354 359 -0.89227415 +355 359 0.57928741 +356 359 0.74295304 +359 359 -0.16190341 +264 360 -0.031922966 +345 360 0.096501783 +346 360 0.80619522 +353 360 0.81620483 +354 360 0.61012646 +355 360 -0.27142626 +356 360 -0.34262078 +359 360 0.077202877 +360 360 -0.21847584 +287 361 -0.35319724 +288 361 -0.31578966 +337 361 -0.61819429 +361 361 0.63228021 +287 362 -0.77825956 +288 362 0.6342377 +338 362 -0.7085358 +361 362 0.98340744 +362 362 -0.36514427 +277 363 -0.52722607 +278 363 -0.53139433 +279 363 -0.070601203 +280 363 0.2387736 +287 363 -0.24957989 +288 363 0.063370628 +339 363 0.17008723 +363 363 0.62907955 +277 364 0.2306588 +278 364 -0.7547522 +279 364 -0.75241294 +280 364 -0.43108202 +287 364 -0.34019204 +288 364 0.042244097 +340 364 -0.85327662 +363 364 0.5104408 +364 364 0.57814703 +269 365 0.27806219 +355 365 0.91823381 +356 365 -0.82086119 +361 365 0.30023605 +362 365 -0.172227 +363 365 0.99043196 +364 365 0.98471795 +365 365 0.70452778 +270 366 0.77527373 +355 366 -0.694196 +356 366 -0.091150877 +361 366 0.9496723 +362 366 -0.38172715 +363 366 -0.62685711 +364 366 0.60452314 +365 366 0.9609097 +366 366 0.011273235 +271 367 -0.6025265 +345 367 -0.35951288 +346 367 -0.014131363 +347 367 -0.55669449 +348 367 0.87854749 +355 367 -0.69492384 +356 367 0.33779139 +361 367 -0.84806528 +362 367 -0.47233192 +363 367 0.56229054 +364 367 -0.15154658 +367 367 0.27132278 +272 368 -0.20926745 +345 368 -0.035389421 +346 368 0.079992174 +347 368 -0.5578858 +348 368 -0.80811 +355 368 -0.68889482 +356 368 0.66260336 +361 368 0.17403833 +362 368 0.51753253 +363 368 -0.60840404 +364 368 0.45772774 +367 368 -0.53043472 +368 368 0.90178883 +345 369 0.64465244 +365 369 0.47146561 +366 369 -0.20186668 +369 369 -0.11207169 +346 370 0.44580595 +365 370 -0.17738379 +366 370 -0.89557724 +369 370 0.057118177 +370 370 -0.87996236 +285 371 -0.93261641 +286 371 -0.15149346 +287 371 -0.020032654 +288 371 0.16700894 +347 371 0.85171608 +365 371 0.65796379 +366 371 0.1423722 +371 371 0.73349979 +285 372 -0.8334605 +286 372 0.32030926 +287 372 -0.89538956 +288 372 0.11366107 +348 372 -0.014722803 +365 372 0.87022823 +366 372 0.49533995 +371 372 -0.89712789 +372 372 0.26237747 +277 373 0.9843506 +361 373 0.58047027 +362 373 0.91611896 +369 373 -0.003292835 +370 373 0.18198291 +371 373 0.49831946 +372 373 0.1176411 +373 373 -0.2898527 +278 374 -0.19529677 +361 374 0.42542184 +362 374 0.011551125 +369 374 0.61798053 +370 374 0.82037566 +371 374 -0.92163103 +372 374 -0.63231411 +373 374 0.51375094 +374 374 0.99400654 +279 375 0.31771296 +353 375 -0.47427838 +354 375 -0.51742877 +355 375 0.2458481 +356 375 0.045855524 +361 375 -0.05480499 +362 375 -0.38989377 +369 375 -0.28698213 +370 375 -0.61246813 +371 375 0.89264998 +372 375 -0.00410237 +375 375 -0.551657 +280 376 0.80269625 +353 376 -0.17352451 +354 376 -0.56441593 +355 376 0.71710723 +356 376 0.72201651 +361 376 0.4171763 +362 376 0.57962237 +369 376 -0.85351313 +370 376 -0.13526442 +371 376 0.52734665 +372 376 0.0356912 +375 376 0.20395953 +376 376 0.30490215 +353 377 0.3097658 +373 377 0.4240505 +374 377 0.29131732 +377 377 0.20998128 +354 378 0.78024696 +373 378 -0.024178749 +374 378 -0.23871542 +377 378 0.71433742 +378 378 -0.22550914 +355 379 0.077051149 +373 379 0.23520129 +374 379 -0.79257432 +379 379 -0.71562568 +356 380 -0.43558967 +373 380 -0.57244485 +374 380 -0.24497696 +379 380 0.97655428 +380 380 -0.94973003 +285 381 0.99076355 +369 381 -0.87966917 +370 381 0.79023631 +377 381 0.98848602 +378 381 -0.19299722 +379 381 -0.2074195 +380 381 0.99096212 +381 381 -0.15777549 +286 382 0.30632656 +369 382 0.63901775 +370 382 0.36860029 +377 382 0.70970337 +378 382 0.86995817 +379 382 0.41015495 +380 382 0.92486281 +381 382 0.85896894 +382 382 -0.63179942 +287 383 -0.78312714 +369 383 0.54295661 +370 383 0.31369296 +377 383 0.92480788 +378 383 -0.041030909 +379 383 0.11711807 +380 383 0.070134211 +383 383 0.45155053 +288 384 -0.92777194 +369 384 -0.60860854 +370 384 0.9807624 +377 384 0.35788202 +378 384 -0.53641678 +379 384 0.5132614 +380 384 0.92774026 +383 384 -0.18097013 +384 384 -0.25927463 \ No newline at end of file diff --git a/test/instances/pegasus_random/P4/CBFM-P/SpinGlass/001_sg.txt b/test/instances/pegasus_random/P4/CBFM-P/SpinGlass/001_sg.txt new file mode 100644 index 00000000..79e4030c --- /dev/null +++ b/test/instances/pegasus_random/P4/CBFM-P/SpinGlass/001_sg.txt @@ -0,0 +1,1541 @@ +# +1 1 0 +2 2 0 +3 3 -1 +4 4 0 +5 5 -1 +6 6 -1 +7 7 -1 +8 8 -1 +9 9 -1 +10 10 -1 +11 11 -1 +12 12 -1 +13 13 0 +14 14 -1 +15 15 0 +16 16 -1 +17 17 -1 +18 18 -1 +19 19 0 +20 20 -1 +21 21 -1 +22 22 -1 +23 23 -1 +24 24 -1 +25 25 -1 +26 26 -1 +27 27 -1 +28 28 -1 +29 29 -1 +30 30 0 +31 31 -1 +32 32 -1 +33 33 -1 +34 34 -1 +35 35 -1 +36 36 0 +37 37 -1 +38 38 -1 +39 39 -1 +40 40 0 +41 41 -1 +42 42 -1 +43 43 -1 +44 44 -1 +45 45 -1 +46 46 -1 +47 47 -1 +48 48 -1 +49 49 -1 +50 50 -1 +51 51 -1 +52 52 -1 +53 53 -1 +54 54 -1 +55 55 -1 +56 56 0 +57 57 -1 +58 58 0 +59 59 -1 +60 60 -1 +61 61 0 +62 62 -1 +63 63 -1 +64 64 -1 +65 65 0 +66 66 0 +67 67 0 +68 68 -1 +69 69 -1 +70 70 -1 +71 71 0 +72 72 0 +73 73 -1 +74 74 -1 +75 75 -1 +76 76 -1 +77 77 -1 +78 78 -1 +79 79 -1 +80 80 0 +81 81 -1 +82 82 -1 +83 83 -1 +84 84 -1 +85 85 0 +86 86 -1 +87 87 -1 +88 88 -1 +89 89 -1 +90 90 -1 +91 91 -1 +92 92 -1 +93 93 -1 +94 94 -1 +95 95 0 +96 96 -1 +97 97 -1 +98 98 0 +99 99 -1 +100 100 -1 +101 101 -1 +102 102 -1 +103 103 -1 +104 104 -1 +105 105 -1 +106 106 -1 +107 107 0 +108 108 -1 +109 109 -1 +110 110 -1 +111 111 -1 +112 112 -1 +113 113 -1 +114 114 -1 +115 115 0 +116 116 -1 +117 117 -1 +118 118 0 +119 119 -1 +120 120 -1 +121 121 -1 +122 122 -1 +123 123 -1 +124 124 -1 +125 125 -1 +126 126 -1 +127 127 -1 +128 128 -1 +129 129 0 +130 130 -1 +131 131 -1 +132 132 -1 +133 133 0 +134 134 -1 +135 135 -1 +136 136 -1 +137 137 -1 +138 138 -1 +139 139 0 +140 140 -1 +141 141 0 +142 142 0 +143 143 -1 +144 144 0 +145 145 -1 +146 146 -1 +147 147 0 +148 148 -1 +149 149 -1 +150 150 -1 +151 151 -1 +152 152 0 +153 153 -1 +154 154 -1 +155 155 -1 +156 156 -1 +157 157 -1 +158 158 -1 +159 159 0 +160 160 -1 +161 161 -1 +162 162 -1 +163 163 0 +164 164 0 +165 165 -1 +166 166 0 +167 167 -1 +168 168 -1 +169 169 -1 +170 170 -1 +171 171 0 +172 172 -1 +173 173 0 +174 174 0 +175 175 -1 +176 176 -1 +177 177 -1 +178 178 -1 +179 179 -1 +180 180 -1 +181 181 -1 +182 182 -1 +183 183 -1 +184 184 -1 +185 185 -1 +186 186 -1 +187 187 -1 +188 188 0 +189 189 -1 +190 190 -1 +191 191 -1 +192 192 -1 +193 193 -1 +194 194 -1 +195 195 0 +196 196 -1 +197 197 -1 +198 198 -1 +199 199 0 +200 200 -1 +201 201 0 +202 202 -1 +203 203 -1 +204 204 -1 +205 205 -1 +206 206 -1 +207 207 -1 +208 208 -1 +209 209 -1 +210 210 -1 +211 211 -1 +212 212 -1 +213 213 -1 +214 214 -1 +215 215 -1 +216 216 -1 +1 5 1 +1 6 1 +1 7 0 +1 8 1 +1 13 0 +1 14 1 +1 15 1 +1 16 1 +2 1 -1 +2 5 1 +2 6 1 +2 7 1 +2 8 0 +2 13 1 +2 14 0 +2 15 0 +2 16 1 +3 5 0 +3 6 1 +3 7 1 +3 8 -1 +4 3 -1 +4 5 0 +4 6 1 +4 7 -1 +4 8 -1 +5 6 1 +5 29 0 +6 30 1 +7 8 1 +7 31 0 +8 32 1 +9 5 0 +9 6 0 +9 13 1 +9 14 1 +9 15 1 +9 16 0 +9 21 1 +9 22 0 +9 23 1 +9 24 0 +9 79 0 +9 80 1 +10 5 0 +10 6 0 +10 9 1 +10 13 1 +10 14 -1 +10 15 1 +10 16 1 +10 21 1 +10 22 1 +10 23 1 +10 24 1 +10 79 1 +10 80 0 +11 5 -1 +11 6 1 +11 13 0 +11 14 1 +11 15 1 +11 16 0 +11 79 1 +11 80 0 +12 5 1 +12 6 0 +12 11 0 +12 13 1 +12 14 1 +12 15 0 +12 16 1 +12 79 0 +12 80 1 +13 14 1 +13 37 0 +14 38 1 +15 16 1 +15 39 1 +16 40 1 +17 13 1 +17 14 1 +17 21 1 +17 22 0 +17 23 1 +17 24 1 +17 87 1 +17 88 -1 +17 101 1 +17 102 0 +17 103 0 +17 104 1 +18 13 1 +18 14 1 +18 17 1 +18 21 1 +18 22 0 +18 23 1 +18 24 0 +18 87 -1 +18 88 1 +18 101 -1 +18 102 0 +18 103 1 +18 104 1 +19 13 0 +19 14 0 +19 21 0 +19 22 0 +19 23 1 +19 24 0 +19 77 1 +19 78 0 +19 79 1 +19 80 0 +19 87 0 +19 88 1 +20 13 1 +20 14 1 +20 19 0 +20 21 0 +20 22 1 +20 23 -1 +20 24 0 +20 77 0 +20 78 1 +20 79 0 +20 80 1 +20 87 0 +20 88 0 +21 22 1 +21 45 1 +22 46 1 +23 24 0 +23 47 1 +24 48 1 +25 23 -1 +25 24 1 +25 29 0 +25 30 1 +25 31 0 +25 32 0 +25 37 0 +25 38 -1 +25 39 0 +25 40 1 +26 23 1 +26 24 1 +26 25 1 +26 29 -1 +26 30 1 +26 31 1 +26 32 1 +26 37 0 +26 38 1 +26 39 1 +26 40 1 +27 13 0 +27 14 0 +27 15 1 +27 16 0 +27 23 0 +27 24 1 +27 29 0 +27 30 1 +27 31 1 +27 32 1 +28 13 1 +28 14 0 +28 15 1 +28 16 1 +28 23 0 +28 24 1 +28 27 0 +28 29 1 +28 30 0 +28 31 0 +28 32 0 +29 30 0 +29 53 0 +30 54 1 +31 32 -1 +31 55 0 +32 56 1 +33 29 0 +33 30 1 +33 37 1 +33 38 1 +33 39 1 +33 40 1 +33 45 1 +33 46 1 +33 47 1 +33 48 0 +33 103 0 +33 104 1 +34 29 1 +34 30 0 +34 33 0 +34 37 1 +34 38 0 +34 39 1 +34 40 1 +34 45 1 +34 46 -1 +34 47 1 +34 48 1 +34 103 1 +34 104 1 +35 21 1 +35 22 0 +35 23 1 +35 24 -1 +35 29 1 +35 30 1 +35 37 0 +35 38 1 +35 39 0 +35 40 1 +35 103 1 +35 104 0 +36 21 1 +36 22 0 +36 23 1 +36 24 -1 +36 29 1 +36 30 1 +36 35 1 +36 37 1 +36 38 1 +36 39 -1 +36 40 0 +36 103 1 +36 104 -1 +37 38 0 +37 61 0 +38 62 1 +39 40 0 +39 63 1 +40 64 1 +41 37 1 +41 38 1 +41 45 1 +41 46 0 +41 47 1 +41 48 1 +41 111 1 +41 112 1 +41 125 0 +41 126 1 +41 127 0 +41 128 1 +42 37 1 +42 38 1 +42 41 0 +42 45 0 +42 46 1 +42 47 1 +42 48 1 +42 111 1 +42 112 1 +42 125 1 +42 126 -1 +42 127 0 +42 128 1 +43 37 1 +43 38 0 +43 45 0 +43 46 0 +43 47 0 +43 48 -1 +43 101 1 +43 102 0 +43 103 0 +43 104 0 +43 111 0 +43 112 0 +44 37 1 +44 38 1 +44 43 1 +44 45 0 +44 46 0 +44 47 0 +44 48 0 +44 101 0 +44 102 1 +44 103 1 +44 104 1 +44 111 0 +44 112 0 +45 46 0 +45 69 1 +46 70 0 +47 48 1 +47 71 1 +48 72 0 +49 47 1 +49 48 0 +49 53 -1 +49 54 -1 +49 55 -1 +49 56 1 +49 61 1 +49 62 1 +49 63 1 +49 64 1 +50 47 1 +50 48 -1 +50 49 0 +50 53 -1 +50 54 1 +50 55 1 +50 56 1 +50 61 1 +50 62 1 +50 63 0 +50 64 0 +51 37 0 +51 38 1 +51 39 -1 +51 40 1 +51 47 0 +51 48 1 +51 53 -1 +51 54 1 +51 55 0 +51 56 1 +52 37 0 +52 38 0 +52 39 1 +52 40 0 +52 47 1 +52 48 1 +52 51 0 +52 53 -1 +52 54 1 +52 55 -1 +52 56 1 +53 54 1 +55 56 1 +57 53 0 +57 54 1 +57 61 -1 +57 62 0 +57 63 1 +57 64 0 +57 69 1 +57 70 1 +57 71 0 +57 72 1 +57 127 0 +57 128 1 +58 53 1 +58 54 1 +58 57 1 +58 61 1 +58 62 0 +58 63 -1 +58 64 1 +58 69 0 +58 70 0 +58 71 1 +58 72 1 +58 127 1 +58 128 1 +59 45 0 +59 46 1 +59 47 1 +59 48 1 +59 53 1 +59 54 1 +59 61 0 +59 62 0 +59 63 1 +59 64 0 +59 127 0 +59 128 0 +60 45 1 +60 46 1 +60 47 1 +60 48 0 +60 53 1 +60 54 1 +60 59 1 +60 61 1 +60 62 0 +60 63 1 +60 64 0 +60 127 1 +60 128 -1 +61 62 1 +63 64 0 +65 61 1 +65 62 -1 +65 69 0 +65 70 1 +65 71 1 +65 72 1 +65 135 1 +65 136 0 +66 61 0 +66 62 1 +66 65 0 +66 69 1 +66 70 0 +66 71 0 +66 72 1 +66 135 1 +66 136 1 +67 61 -1 +67 62 1 +67 69 -1 +67 70 0 +67 71 0 +67 72 1 +67 125 1 +67 126 0 +67 127 0 +67 128 1 +67 135 1 +67 136 1 +68 61 0 +68 62 0 +68 67 0 +68 69 0 +68 70 0 +68 71 1 +68 72 1 +68 125 0 +68 126 0 +68 127 1 +68 128 0 +68 135 0 +68 136 1 +69 70 1 +71 72 1 +73 1 0 +73 77 1 +73 78 1 +73 79 1 +73 80 1 +73 85 1 +73 86 1 +73 87 0 +73 88 1 +74 2 0 +74 73 0 +74 77 -1 +74 78 1 +74 79 1 +74 80 -1 +74 85 0 +74 86 0 +74 87 -1 +74 88 1 +75 3 0 +75 77 0 +75 78 0 +75 79 1 +75 80 1 +76 4 0 +76 75 1 +76 77 0 +76 78 1 +76 79 1 +76 80 1 +77 78 1 +77 101 1 +78 102 0 +79 80 1 +79 103 1 +80 104 1 +81 9 1 +81 77 1 +81 78 1 +81 85 0 +81 86 0 +81 87 0 +81 88 0 +81 93 -1 +81 94 1 +81 95 -1 +81 96 -1 +81 151 1 +81 152 1 +82 10 1 +82 77 -1 +82 78 -1 +82 81 1 +82 85 0 +82 86 -1 +82 87 0 +82 88 0 +82 93 1 +82 94 1 +82 95 -1 +82 96 1 +82 151 1 +82 152 0 +83 11 1 +83 77 1 +83 78 0 +83 85 -1 +83 86 0 +83 87 -1 +83 88 -1 +83 151 1 +83 152 0 +84 12 1 +84 77 1 +84 78 1 +84 83 1 +84 85 1 +84 86 1 +84 87 0 +84 88 -1 +84 151 0 +84 152 0 +85 86 1 +85 109 1 +86 110 -1 +87 88 1 +87 111 1 +88 112 1 +89 17 0 +89 85 1 +89 86 1 +89 93 1 +89 94 1 +89 95 1 +89 96 0 +89 159 1 +89 160 1 +89 173 1 +89 174 0 +89 175 1 +89 176 0 +90 18 1 +90 85 0 +90 86 1 +90 89 0 +90 93 1 +90 94 0 +90 95 1 +90 96 0 +90 159 1 +90 160 0 +90 173 1 +90 174 1 +90 175 1 +90 176 1 +91 19 -1 +91 85 1 +91 86 1 +91 93 0 +91 94 0 +91 95 0 +91 96 1 +91 149 -1 +91 150 1 +91 151 0 +91 152 1 +91 159 1 +91 160 1 +92 20 0 +92 85 1 +92 86 1 +92 91 1 +92 93 -1 +92 94 0 +92 95 1 +92 96 1 +92 149 0 +92 150 1 +92 151 1 +92 152 0 +92 159 0 +92 160 1 +93 94 1 +93 117 1 +94 118 0 +95 96 1 +95 119 1 +96 120 1 +97 21 1 +97 22 1 +97 25 1 +97 95 1 +97 96 1 +97 101 1 +97 102 1 +97 103 1 +97 104 1 +97 109 1 +97 110 1 +97 111 1 +97 112 0 +98 21 1 +98 22 1 +98 26 0 +98 95 1 +98 96 1 +98 97 0 +98 101 1 +98 102 1 +98 103 1 +98 104 0 +98 109 -1 +98 110 0 +98 111 1 +98 112 1 +99 21 0 +99 22 -1 +99 27 1 +99 85 1 +99 86 0 +99 87 0 +99 88 1 +99 95 0 +99 96 0 +99 101 0 +99 102 1 +99 103 -1 +99 104 1 +100 21 1 +100 22 1 +100 28 0 +100 85 1 +100 86 1 +100 87 1 +100 88 1 +100 95 -1 +100 96 1 +100 99 1 +100 101 1 +100 102 1 +100 103 0 +100 104 1 +101 102 1 +101 125 0 +102 126 0 +103 104 1 +103 127 0 +104 128 1 +105 33 0 +105 101 -1 +105 102 1 +105 109 -1 +105 110 1 +105 111 1 +105 112 -1 +105 117 0 +105 118 0 +105 119 -1 +105 120 0 +105 175 0 +105 176 1 +106 34 1 +106 101 0 +106 102 0 +106 105 1 +106 109 0 +106 110 1 +106 111 1 +106 112 1 +106 117 1 +106 118 1 +106 119 -1 +106 120 0 +106 175 1 +106 176 0 +107 35 1 +107 93 1 +107 94 0 +107 95 1 +107 96 1 +107 101 1 +107 102 0 +107 109 1 +107 110 1 +107 111 0 +107 112 0 +107 175 0 +107 176 1 +108 36 -1 +108 93 1 +108 94 -1 +108 95 1 +108 96 1 +108 101 1 +108 102 1 +108 107 0 +108 109 -1 +108 110 1 +108 111 1 +108 112 1 +108 175 1 +108 176 1 +109 110 1 +109 133 1 +110 134 0 +111 112 1 +111 135 1 +112 136 1 +113 41 1 +113 109 1 +113 110 -1 +113 117 1 +113 118 1 +113 119 0 +113 120 1 +113 183 0 +113 184 1 +113 197 1 +113 198 1 +113 199 0 +113 200 1 +114 42 1 +114 109 0 +114 110 0 +114 113 0 +114 117 1 +114 118 0 +114 119 0 +114 120 1 +114 183 1 +114 184 -1 +114 197 1 +114 198 -1 +114 199 0 +114 200 1 +115 43 0 +115 109 0 +115 110 1 +115 117 1 +115 118 1 +115 119 0 +115 120 0 +115 173 0 +115 174 0 +115 175 0 +115 176 -1 +115 183 1 +115 184 0 +116 44 0 +116 109 1 +116 110 1 +116 115 -1 +116 117 0 +116 118 0 +116 119 0 +116 120 0 +116 173 1 +116 174 0 +116 175 1 +116 176 0 +116 183 1 +116 184 0 +117 118 0 +117 141 0 +118 142 1 +119 120 0 +119 143 1 +120 144 0 +121 45 0 +121 46 1 +121 49 0 +121 119 0 +121 120 1 +121 125 -1 +121 126 1 +121 127 0 +121 128 0 +121 133 0 +121 134 0 +121 135 0 +121 136 0 +122 45 1 +122 46 1 +122 50 1 +122 119 1 +122 120 1 +122 121 -1 +122 125 1 +122 126 0 +122 127 1 +122 128 0 +122 133 0 +122 134 0 +122 135 1 +122 136 1 +123 45 -1 +123 46 0 +123 51 1 +123 109 1 +123 110 0 +123 111 0 +123 112 0 +123 119 0 +123 120 1 +123 125 1 +123 126 0 +123 127 0 +123 128 1 +124 45 1 +124 46 1 +124 52 1 +124 109 1 +124 110 0 +124 111 1 +124 112 1 +124 119 0 +124 120 0 +124 123 0 +124 125 0 +124 126 1 +124 127 0 +124 128 1 +125 126 1 +127 128 0 +129 57 1 +129 125 1 +129 126 1 +129 133 0 +129 134 0 +129 135 1 +129 136 1 +129 141 -1 +129 142 1 +129 143 1 +129 144 0 +129 199 1 +129 200 0 +130 58 1 +130 125 -1 +130 126 0 +130 129 1 +130 133 1 +130 134 1 +130 135 1 +130 136 1 +130 141 0 +130 142 1 +130 143 1 +130 144 1 +130 199 1 +130 200 -1 +131 59 0 +131 117 -1 +131 118 0 +131 119 1 +131 120 -1 +131 125 1 +131 126 0 +131 133 0 +131 134 1 +131 135 1 +131 136 1 +131 199 1 +131 200 1 +132 60 0 +132 117 0 +132 118 1 +132 119 -1 +132 120 1 +132 125 1 +132 126 1 +132 131 0 +132 133 -1 +132 134 0 +132 135 1 +132 136 1 +132 199 1 +132 200 1 +133 134 1 +135 136 -1 +137 65 0 +137 133 -1 +137 134 0 +137 141 0 +137 142 1 +137 143 0 +137 144 0 +137 207 0 +137 208 1 +138 66 1 +138 133 1 +138 134 0 +138 137 0 +138 141 1 +138 142 1 +138 143 1 +138 144 1 +138 207 1 +138 208 0 +139 67 1 +139 133 1 +139 134 1 +139 141 1 +139 142 0 +139 143 -1 +139 144 1 +139 197 1 +139 198 -1 +139 199 0 +139 200 -1 +139 207 1 +139 208 1 +140 68 1 +140 133 1 +140 134 0 +140 139 1 +140 141 1 +140 142 0 +140 143 1 +140 144 0 +140 197 0 +140 198 0 +140 199 0 +140 200 1 +140 207 1 +140 208 1 +141 142 1 +143 144 1 +145 73 1 +145 149 0 +145 150 -1 +145 151 1 +145 152 1 +145 157 1 +145 158 1 +145 159 1 +145 160 1 +146 74 0 +146 145 1 +146 149 1 +146 150 0 +146 151 1 +146 152 1 +146 157 0 +146 158 0 +146 159 1 +146 160 0 +147 75 1 +147 149 1 +147 150 -1 +147 151 1 +147 152 0 +148 76 0 +148 147 1 +148 149 0 +148 150 0 +148 151 0 +148 152 -1 +149 150 1 +149 173 0 +150 174 -1 +151 152 1 +151 175 1 +152 176 1 +153 81 0 +153 149 1 +153 150 1 +153 157 1 +153 158 1 +153 159 1 +153 160 -1 +153 165 0 +153 166 1 +153 167 1 +153 168 0 +154 82 0 +154 149 1 +154 150 0 +154 153 1 +154 157 1 +154 158 -1 +154 159 1 +154 160 1 +154 165 -1 +154 166 0 +154 167 1 +154 168 1 +155 83 1 +155 149 0 +155 150 1 +155 157 0 +155 158 1 +155 159 1 +155 160 0 +156 84 1 +156 149 0 +156 150 0 +156 155 1 +156 157 -1 +156 158 0 +156 159 0 +156 160 1 +157 158 1 +157 181 1 +158 182 1 +159 160 1 +159 183 0 +160 184 1 +161 89 1 +161 157 1 +161 158 1 +161 165 1 +161 166 0 +161 167 0 +161 168 1 +162 90 1 +162 157 1 +162 158 1 +162 161 1 +162 165 1 +162 166 0 +162 167 0 +162 168 1 +163 91 0 +163 157 0 +163 158 1 +163 165 1 +163 166 -1 +163 167 1 +163 168 0 +164 92 1 +164 157 1 +164 158 -1 +164 163 -1 +164 165 0 +164 166 1 +164 167 0 +164 168 0 +165 166 0 +165 189 1 +166 190 0 +167 168 1 +167 191 1 +168 192 1 +169 93 1 +169 94 1 +169 97 0 +169 167 1 +169 168 0 +169 173 1 +169 174 1 +169 175 0 +169 176 1 +169 181 1 +169 182 0 +169 183 1 +169 184 1 +170 93 0 +170 94 0 +170 98 -1 +170 167 -1 +170 168 1 +170 169 0 +170 173 0 +170 174 0 +170 175 1 +170 176 0 +170 181 0 +170 182 1 +170 183 1 +170 184 0 +171 93 0 +171 94 1 +171 99 1 +171 157 0 +171 158 0 +171 159 0 +171 160 -1 +171 167 1 +171 168 1 +171 173 1 +171 174 1 +171 175 1 +171 176 0 +172 93 0 +172 94 0 +172 100 0 +172 157 1 +172 158 1 +172 159 0 +172 160 1 +172 167 1 +172 168 0 +172 171 -1 +172 173 1 +172 174 1 +172 175 0 +172 176 1 +173 174 1 +173 197 0 +174 198 1 +175 176 1 +175 199 1 +176 200 0 +177 105 0 +177 173 1 +177 174 1 +177 181 1 +177 182 0 +177 183 1 +177 184 1 +177 189 0 +177 190 1 +177 191 0 +177 192 1 +178 106 0 +178 173 1 +178 174 1 +178 177 0 +178 181 1 +178 182 1 +178 183 0 +178 184 -1 +178 189 0 +178 190 1 +178 191 0 +178 192 -1 +179 107 1 +179 165 1 +179 166 1 +179 167 1 +179 168 1 +179 173 0 +179 174 1 +179 181 1 +179 182 0 +179 183 1 +179 184 1 +180 108 0 +180 165 1 +180 166 0 +180 167 1 +180 168 0 +180 173 1 +180 174 0 +180 179 1 +180 181 1 +180 182 1 +180 183 0 +180 184 1 +181 182 1 +181 205 1 +182 206 1 +183 184 0 +183 207 -1 +184 208 1 +185 113 1 +185 181 0 +185 182 -1 +185 189 0 +185 190 1 +185 191 -1 +185 192 0 +186 114 0 +186 181 1 +186 182 1 +186 185 1 +186 189 1 +186 190 0 +186 191 1 +186 192 1 +187 115 1 +187 181 -1 +187 182 1 +187 189 0 +187 190 1 +187 191 0 +187 192 1 +188 116 1 +188 181 -1 +188 182 0 +188 187 1 +188 189 1 +188 190 1 +188 191 1 +188 192 1 +189 190 1 +189 213 0 +190 214 1 +191 192 1 +191 215 1 +192 216 1 +193 117 1 +193 118 1 +193 121 1 +193 191 0 +193 192 1 +193 197 -1 +193 198 1 +193 199 1 +193 200 1 +193 205 0 +193 206 0 +193 207 1 +193 208 0 +194 117 1 +194 118 0 +194 122 0 +194 191 0 +194 192 1 +194 193 0 +194 197 1 +194 198 0 +194 199 1 +194 200 0 +194 205 0 +194 206 0 +194 207 1 +194 208 1 +195 117 0 +195 118 1 +195 123 1 +195 181 0 +195 182 1 +195 183 1 +195 184 0 +195 191 0 +195 192 1 +195 197 0 +195 198 -1 +195 199 0 +195 200 1 +196 117 0 +196 118 -1 +196 124 1 +196 181 1 +196 182 1 +196 183 1 +196 184 1 +196 191 0 +196 192 -1 +196 195 0 +196 197 1 +196 198 0 +196 199 1 +196 200 1 +197 198 0 +199 200 0 +201 129 0 +201 197 1 +201 198 0 +201 205 0 +201 206 1 +201 207 -1 +201 208 0 +201 213 1 +201 214 1 +201 215 0 +201 216 1 +202 130 1 +202 197 0 +202 198 1 +202 201 1 +202 205 0 +202 206 1 +202 207 0 +202 208 0 +202 213 0 +202 214 1 +202 215 1 +202 216 0 +203 131 1 +203 189 1 +203 190 0 +203 191 1 +203 192 1 +203 197 0 +203 198 0 +203 205 0 +203 206 0 +203 207 -1 +203 208 1 +204 132 1 +204 189 1 +204 190 0 +204 191 0 +204 192 1 +204 197 0 +204 198 -1 +204 203 0 +204 205 0 +204 206 -1 +204 207 -1 +204 208 1 +205 206 -1 +207 208 -1 +209 137 -1 +209 205 1 +209 206 0 +209 213 -1 +209 214 1 +209 215 1 +209 216 -1 +210 138 1 +210 205 1 +210 206 1 +210 209 1 +210 213 0 +210 214 -1 +210 215 1 +210 216 -1 +211 139 1 +211 205 0 +211 206 1 +211 213 1 +211 214 1 +211 215 0 +211 216 1 +212 140 1 +212 205 1 +212 206 1 +212 211 -1 +212 213 -1 +212 214 -1 +212 215 1 +212 216 0 +213 214 1 +215 216 1 diff --git a/test/network_operations.jl b/test/operations.jl similarity index 100% rename from test/network_operations.jl rename to test/operations.jl diff --git a/test/random_markov_field.jl b/test/random_markov_field.jl new file mode 100644 index 00000000..df2d749d --- /dev/null +++ b/test/random_markov_field.jl @@ -0,0 +1,23 @@ +@testset "Example image is correcly loaded and computed" begin + instance_dir = "$(@__DIR__)/instances/rmf/n4/penguin-small.h5" + onGPU = true + β = 1.0 + bond_dim = 8 + δp = 1E-4 + num_states = 64 + cl_h = clustered_hamiltonian(instance_dir) + Nx, Ny = get_prop(cl_h, :Nx), get_prop(cl_h, :Ny) + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + Gauge = NoUpdate + graduate_truncation = :graduate_truncate + energies = Vector{Float64}[] + Strategy = Zipper + Layout = GaugesEnergy + Sparsity = Sparse + transform = rotation(0) + net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(Nx, Ny, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], graduate_truncation, params; onGPU=onGPU, mode=:RMF) + sol_peps, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + # sol_peps, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(100.0, 100, :hamming, :RMF))) +end \ No newline at end of file diff --git a/test/runtests.jl b/test/runtests.jl index d05d0629..cd4e4ed3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,51 +1,68 @@ + using SpinGlassEngine +using SpinGlassNetworks +using SpinGlassTensors using Logging -using SpinGlassNetworks, SpinGlassTensors -using LightGraphs +using Graphs using LinearAlgebra using TensorCast +using Statistics using MetaGraphs disable_logging(LogLevel(1)) +onGPU = true + using Test +my_tests = [] -function proj(state, dims::Union{Vector,NTuple}) - P = Matrix{Float64}[] - for (σ, r) ∈ zip(state, dims) - v = zeros(r) - v[idx(σ)...] = 1.0 - push!(P, v * v') - end - P -end +push!(my_tests, +# quick tests: + "operations.jl", + "branch_and_bound.jl", + "search_chimera_pathological.jl", + "search_chimera_smallest.jl", + "search_cross_square_star.jl", + "search_smallest_cross_square_cross.jl", + "search_pegasus_square_cross.jl", + "search_pegasus_nodiag_square_cross.jl", + "search_square_double_node_basic.jl", + "search_squarecross_double_node_basic.jl", + "chimera_overlap_python.jl", + "hamming.jl", + "search_chimera_smallest_droplets.jl", + "search_chimera_pathological_droplets.jl", + "search_chimera_pathological_hamming.jl", + "search_chimera_droplets.jl", + "search_pegasus_droplets.jl", + "search_chimera_pathological_Z2.jl", -function SpinGlassEngine.tensor(ψ::AbstractMPS, state::State) - C = I - for (A, σ) ∈ zip(ψ, state) - C *= A[:, idx(σ), :] - end - tr(C) -end +# time consuming tests: +# "search_chimera_full.jl", -function SpinGlassEngine.tensor(ψ::MPS) - dims = rank(ψ) - Θ = Array{eltype(ψ)}(undef, dims) +) - for σ ∈ all_states(dims) - Θ[idx.(σ)...] = tensor(ψ, σ) - end - Θ -end +# This is work in progress (may or may not be included in future versions) -my_tests = [ - "network_operations.jl", - "branch_and_bound.jl", - "network_interface.jl", - "search_chimera.jl", - "search_full_chimera.jl", -] +push!(my_tests, + # "experimental/zipper.jl", + # "experimental/truncate.jl", + # "experimental/truncate_small.jl", + # "experimental/mpo_size.jl", + # "experimental/squarestar_double_node_pegasus.jl", + # "experimental/squarestar_double_node_zephyr.jl", + # "experimental/gauges_cuda.jl", + # "experimental/sampling.jl" + # "experimental/search_chimera_gauge.jl", + # "experimental/gauges.jl" +) -for my_test in my_tests - include(my_test) +function my_brute_force(ig::IsingGraph; num_states::Int) + brute_force(ig, onGPU ? :GPU : :CPU, num_states=num_states) +end + +@time begin + for my_test ∈ my_tests + include(my_test) + end end diff --git a/test/search_chimera_droplets.jl b/test/search_chimera_droplets.jl new file mode 100644 index 00000000..9dee2932 --- /dev/null +++ b/test/search_chimera_droplets.jl @@ -0,0 +1,62 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + +using SpinGlassExhaustive + +function bench(instance::String) + m, n, t = 16, 16, 8 + + max_cl_states = 2^(t-0) + + ground_energy = -3336.773383 + + β = 3.0 + bond_dim = 32 + dE = 3.0 + δp = exp(-β * dE) + num_states = 500 + all_betas = [β/8, β/4, β/2, β] + + cl_h = clustered_hamiltonian( + ising_graph(instance), + max_cl_states, + spectrum=my_brute_force, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10, 1E-16) + search_params = SearchParameters(num_states, δp) + + energies = Vector{Float64}[] + for Strategy ∈ (Zipper, ), Sparsity ∈ (Dense, ) + for Gauge ∈ (NoUpdate, ) + for Layout ∈ (GaugesEnergy,), transform ∈ all_lattice_transformations[[1]] + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, all_betas, :graduate_truncate, params; onGPU=onGPU) + # sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, NoDroplets())) + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(1.0, 1000, :hamming))) + + sol2 = unpack_droplets(sol1, β) + + @test sol1.energies[begin] ≈ ground_energy + @test sol2.energies[begin] ≈ ground_energy + push!(energies, sol1.energies) + + for sol ∈ (sol1, sol2) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ SpinGlassNetworks.energy.(Ref(ising_graph(instance)), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ SpinGlassNetworks.energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + end + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end + +bench("$(@__DIR__)/instances/chimera_droplets/2048power/001.txt") diff --git a/test/search_chimera_full.jl b/test/search_chimera_full.jl new file mode 100644 index 00000000..61bd3d22 --- /dev/null +++ b/test/search_chimera_full.jl @@ -0,0 +1,48 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + + +function bench(instance::String) + m, n, t = 16, 16, 8 + + max_cl_states = 2^(t-0) + + ground_energy = -3336.773383 + + β = 3.0 + bond_dim = 32 + dE = 3.0 + δp = exp(-β * dE) + num_states = 500 + all_betas = [β/8, β/4, β/2, β] + + cl_h = clustered_hamiltonian( + ising_graph(instance), + max_cl_states, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10, 1E-16) + search_params = SearchParameters(num_states, δp) + + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, Zipper), Sparsity ∈ (Dense, Sparse) + for Gauge ∈ (NoUpdate, GaugeStrategy, GaugeStrategyWithBalancing) + for Layout ∈ (GaugesEnergy,), transform ∈ all_lattice_transformations + + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, all_betas, :graduate_truncate, params; onGPU=onGPU) + sol, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit)) + + @test sol.energies[begin] ≈ ground_energy + + push!(energies, sol.energies) + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end + +bench("$(@__DIR__)/instances/chimera_droplets/2048power/001.txt") diff --git a/test/search_chimera_pathological.jl b/test/search_chimera_pathological.jl new file mode 100644 index 00000000..cd756d04 --- /dev/null +++ b/test/search_chimera_pathological.jl @@ -0,0 +1,158 @@ +@testset "Chimera-like (pathological) instance has the correct energy spectrum for all heuristics +Sparsity = $Sparsity +Strategy = $Strategy +Layout = $Layout +Lattice = $Lattice +transform = $transform +" for + Sparsity ∈ (Dense, Sparse), + Strategy ∈ + ( + SVDTruncate, + MPSAnnealing, + Zipper, + ), + Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng), + Lattice ∈ (SquareSingleNode, SquareCrossSingleNode), + transform ∈ all_lattice_transformations + + m, n, t = 3, 4, 3 + + β = 1.0 + bond_dim = 16 + num_states = 22 + + # energies + exact_energies = [ + -16.4, + -16.4, + -16.4, + -16.4, + -16.1, + -16.1, + -16.1, + -16.1, + -15.9, + -15.9, + -15.9, + -15.9, + -15.9, + -15.9, + -15.6, + -15.6, + -15.6, + -15.6, + -15.6, + -15.6, + -15.4, + -15.4, + ] + + # degenerate cl_h solutions + exact_states = [ # E =-16.4 + [ + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 6, 1], + ], + # E =-16.1 + [ + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 7, 1], + ], + # E = -15.9 + [ + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 6, 1], + ], + # E = -15.6 + [ + [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 7, 1], + ], + # E = -15.4 + [[1, 4, 7, 1, 2, 2, 1, 1, 1, 2, 6, 1], [1, 4, 5, 1, 2, 2, 1, 1, 1, 2, 6, 1]], + ] + + deg = Dict( + 1 => 1, + 2 => 1, + 3 => 1, + 4 => 1, + # + 5 => 2, + 6 => 2, + 7 => 2, + 8 => 2, + # + 9 => 3, + 10 => 3, + 11 => 3, + 12 => 3, + 13 => 3, + 14 => 3, + # + 15 => 4, + 16 => 4, + 17 => 4, + 18 => 4, + 19 => 4, + 20 => 4, + # + 21 => 5, + 22 => 5, + ) + + ig = ising_graph("$(@__DIR__)/instances/pathological/chim_$(m)_$(n)_$(t).txt") + cl_h = clustered_hamiltonian( + ig, + spectrum = full_spectrum, + cluster_assignment_rule = super_square_lattice((m, n, t)), + ) + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + + + net = PEPSNetwork{Lattice{Layout},Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy,Gauge}( + net, + [β / 8.0, β / 4.0, β / 2.0, β], + :graduate_truncate, + params; + onGPU = onGPU, + ) + sol, s = low_energy_spectrum(ctr, search_params) + + @test sol.energies ≈ exact_energies + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + for (i, σ) ∈ enumerate(sol.states) + @test σ ∈ exact_states[deg[i]] + end + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + + push!(energies, sol.energies) + clear_memoize_cache() + @test all(e -> e ≈ first(energies), energies) +end diff --git a/test/search_chimera_pathological_Z2.jl b/test/search_chimera_pathological_Z2.jl new file mode 100644 index 00000000..e390cb43 --- /dev/null +++ b/test/search_chimera_pathological_Z2.jl @@ -0,0 +1,93 @@ +@testset "Chimera-like (pathological) instance has the correct energy spectrum for all heuristics" begin + m, n, t = 3, 4, 3 + + β = 1.0 + bond_dim = 16 + num_states = 2^8 + + # energies + exact_energies = + [ + -16.4, -16.4, -16.4, -16.4, -16.1, -16.1, -16.1, -16.1, -15.9, + -15.9, -15.9, -15.9, -15.9, -15.9, -15.6, -15.6, -15.6, -15.6, + -15.6, -15.6, -15.4, -15.4 + ] + + # degenerate cl_h solutions + exact_states = + [ # E =-16.4 + [ + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E =-16.1 + [ + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 7, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.9 + [ + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E = -15.6 + [ + [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.4 + [ + [1, 4, 7, 1, 2, 2, 1, 1, 1, 2, 6, 1], [1, 4, 5, 1, 2, 2, 1, 1, 1, 2, 6, 1] + ], + ] + + deg = Dict( + 1 => 1, 2 => 1, 3 => 1, 4 => 1, + # + 5 => 2, 6 => 2, 7 => 2, 8 => 2, + # + 9 => 3, 10 => 3, 11 => 3, 12 => 3, 13 => 3, 14 => 3, + # + 15 => 4, 16 => 4, 17 => 4, 18 => 4, 19 => 4, 20 => 4, + # + 21 => 5, 22 => 5, + ) + + ig = ising_graph("$(@__DIR__)/instances/pathological/chim_$(m)_$(n)_$(t)_Z2.txt") + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng) + for Lattice ∈ (SquareSingleNode, SquareCrossSingleNode), transform ∈ all_lattice_transformations + + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8., β/4., β/2., β], :graduate_truncate, params; onGPU=onGPU) + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(10.0, 0, :hamming)), :Z2) + sol2 = unpack_droplets(sol1, β) + + for sol ∈ (sol1, sol2 ) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + end + + clear_memoize_cache() + end + end + end +end diff --git a/test/search_chimera_pathological_droplets.jl b/test/search_chimera_pathological_droplets.jl new file mode 100644 index 00000000..706984cf --- /dev/null +++ b/test/search_chimera_pathological_droplets.jl @@ -0,0 +1,104 @@ +@testset "Chimera-like (pathological) instance has the correct energy spectrum for all heuristics" begin + m, n, t = 3, 4, 3 + + β = 1.0 + bond_dim = 16 + num_states = 2^8 + hamming_dist = 1 + + # energies + exact_energies = + [ + -16.4, -16.4, -16.4, -16.4, -16.1, -16.1, -16.1, -16.1, -15.9, + -15.9, -15.9, -15.9, -15.9, -15.9, -15.6, -15.6, -15.6, -15.6, + -15.6, -15.6, -15.4, -15.4 + ] + + # degenerate cl_h solutions + exact_states = + [ # E =-16.4 + [ + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E =-16.1 + [ + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 7, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.9 + [ + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E = -15.6 + [ + [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.4 + [ + [1, 4, 7, 1, 2, 2, 1, 1, 1, 2, 6, 1], [1, 4, 5, 1, 2, 2, 1, 1, 1, 2, 6, 1] + ], + ] + + deg = Dict( + 1 => 1, 2 => 1, 3 => 1, 4 => 1, + # + 5 => 2, 6 => 2, 7 => 2, 8 => 2, + # + 9 => 3, 10 => 3, 11 => 3, 12 => 3, 13 => 3, 14 => 3, + # + 15 => 4, 16 => 4, 17 => 4, 18 => 4, 19 => 4, 20 => 4, + # + 21 => 5, 22 => 5, + ) + + ig = ising_graph("$(@__DIR__)/instances/pathological/chim_$(m)_$(n)_$(t).txt") + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + # for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), Sparsity ∈ (Dense, Sparse) + # for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng) + # for Lattice ∈ (SquareSingleNode, SquareCrossSingleNode), transform ∈ all_lattice_transformations + for Strategy ∈ (Zipper,), Sparsity ∈ (Dense,) + for Layout ∈ (EnergyGauges,) + for transform ∈ all_lattice_transformations + + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8., β/4., β/2., β], :graduate_truncate, params; onGPU=onGPU) + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches_blur(ctr, hamming_dist, :nofit, SingleLayerDroplets(1.01, 1, :hamming))) + # sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(1.01, 1, :hamming))) + + @test sol1.energies ≈ [exact_energies[1]] + sol2 = unpack_droplets(sol1, β) + + @test sol2.energies[1:length(exact_energies)] ≈ exact_energies + + for sol ∈ (sol1, sol2 ) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + end + + # for (i, σ) ∈ enumerate(sol.states) @test σ ∈ exact_states[deg[i]] end + + clear_memoize_cache() + end + end + end +end diff --git a/test/search_chimera_pathological_hamming.jl b/test/search_chimera_pathological_hamming.jl new file mode 100644 index 00000000..b6efb35f --- /dev/null +++ b/test/search_chimera_pathological_hamming.jl @@ -0,0 +1,99 @@ +function hamming_distance_test(dict1::Dict, dict2::Dict) + # Initialize a counter for different occurrences + different_count = 0 + # Iterate through the keys and compare values + for (key, value1) in dict1 + value2 = dict2[key] + if value1 != value2 + different_count += 1 + end + end + different_count +end + +@testset "Chimera-like (pathological) instance has the correct energy spectrum for all heuristics" begin + m, n, t = 3, 4, 3 + + β = 1.0 + bond_dim = 16 + num_states = 2^8 + hamming_dist = 1 + # energies + exact_energies = + [ + -16.4, -16.4, -16.4, -16.4, -16.1, -16.1, -16.1, -16.1, -15.9, + -15.9, -15.9, -15.9, -15.9, -15.9, -15.6, -15.6, -15.6, -15.6, + -15.6, -15.6, -15.4, -15.4 + ] + + # degenerate cl_h solutions + exact_states = + [ # E =-16.4 + [ + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 5, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 7, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E =-16.1 + [ + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 7, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 3, 1], + [2, 5, 4, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 2, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.9 + [ + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 2, 1], + [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 2, 1], [1, 4, 3, 1, 2, 2, 1, 1, 1, 4, 6, 1], + [1, 4, 1, 1, 2, 2, 1, 1, 1, 4, 6, 1], [1, 4, 6, 1, 2, 2, 1, 1, 1, 4, 6, 1] + ], + # E = -15.6 + [ + [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 3, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 7, 1], + [2, 5, 6, 1, 1, 3, 1, 1, 1, 5, 3, 1], [2, 5, 8, 1, 1, 3, 1, 1, 1, 5, 7, 1] + ], + # E = -15.4 + [ + [1, 4, 7, 1, 2, 2, 1, 1, 1, 2, 6, 1], [1, 4, 5, 1, 2, 2, 1, 1, 1, 2, 6, 1] + ], + ] + + deg = Dict( + 1 => 1, 2 => 1, 3 => 1, 4 => 1, + # + 5 => 2, 6 => 2, 7 => 2, 8 => 2, + # + 9 => 3, 10 => 3, 11 => 3, 12 => 3, 13 => 3, 14 => 3, + # + 15 => 4, 16 => 4, 17 => 4, 18 => 4, 19 => 4, 20 => 4, + # + 21 => 5, 22 => 5, + ) + + ig = ising_graph("$(@__DIR__)/instances/pathological/chim_$(m)_$(n)_$(t).txt") + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, ), Sparsity ∈ (Sparse,) + for Layout ∈ (EnergyGauges, ) + for Lattice ∈ (SquareCrossSingleNode,), transform ∈ all_lattice_transformations[[1]] + + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8., β/4., β/2., β], :graduate_truncate, params; onGPU=onGPU) + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches_blur(ctr, hamming_dist, :nofit, SingleLayerDroplets(1.01, 10, :hamming))) + @test sol1.energies ≈ [exact_energies[1]] + sol2 = unpack_droplets(sol1, β) + (dict1, dict2) = decode_clustered_hamiltonian_state.(Ref(cl_h), sol2.states) + @test hamming_distance(sol1.droplets[1][1].flip, Flip([],[],[],[]), :Ising) == hamming_distance_test(dict1, dict2) + + clear_memoize_cache() + end + end + end +end diff --git a/test/search_chimera_smallest.jl b/test/search_chimera_smallest.jl new file mode 100644 index 00000000..dcf12d3f --- /dev/null +++ b/test/search_chimera_smallest.jl @@ -0,0 +1,47 @@ +@testset "Smallest chimera pathological instance has the correct spectrum for all transformations" begin + exact_energies = [-2.6, -1.1, -0.6, -0.4, -0.4, 1.1, 1.9, 2.1] + + m, n, t = 3, 1, 1 + L = n * m * t + + β = 1.0 + bond_dim = 16 + num_states = 2^8 + instance = "$(@__DIR__)/instances/pathological/chim_$(n)_$(m)_$(t).txt" + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, Zipper), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng) + for transform ∈ all_lattice_transformations + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + sol, s = low_energy_spectrum(ctr, search_params) + + @test sol.energies ≈ exact_energies + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + + push!(energies, sol.energies) + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end diff --git a/test/search_chimera_smallest_droplets.jl b/test/search_chimera_smallest_droplets.jl new file mode 100644 index 00000000..715915bd --- /dev/null +++ b/test/search_chimera_smallest_droplets.jl @@ -0,0 +1,50 @@ +@testset "Smallest chimera pathological instance has the correct spectrum for all transformations" begin + exact_energies = [-2.6, -1.1, -0.6, -0.4, -0.4, 1.1, 1.9, 2.1] + + m, n, t = 3, 1, 1 + L = n * m * t + + β = 1.0 + bond_dim = 16 + num_states = 2^8 + instance = "$(@__DIR__)/instances/pathological/chim_$(n)_$(m)_$(t).txt" + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + for Strategy ∈ (Zipper,), Sparsity ∈ (Dense,) + for Layout ∈ (EnergyGauges,) + for transform ∈ all_lattice_transformations + net = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(2.2, 1, :hamming))) + + @test sol1.energies ≈ exact_energies[[1]] + sol2 = unpack_droplets(sol1, β) + @test sol2.energies ≈ exact_energies[1:5] + + for sol ∈ (sol1, sol2) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + end + clear_memoize_cache() + end + end + end +end diff --git a/test/search_cross_square_star.jl b/test/search_cross_square_star.jl new file mode 100644 index 00000000..a58a08a2 --- /dev/null +++ b/test/search_cross_square_star.jl @@ -0,0 +1,44 @@ + +@testset "Pegasus-like (cross-square-star) instance has the correct ground state energy" begin + m, n, t = 2, 4, 3 + L = n * m * t + + β = 3.0 + bond_dim = 16 + num_states = 128 + + instance = "$(@__DIR__)/instances/pathological/cross_$(m)_$(n)_mdd.txt" + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + Gauge = NoUpdate + + energies = Vector{Float64}[] + for Strategy ∈ (MPSAnnealing, Zipper, SVDTruncate), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (GaugesEnergy, EngGaugesEng, EnergyGauges,) # + for transform ∈ all_lattice_transformations, Lattice ∈ (SquareCrossSingleNode, ) + net = PEPSNetwork{Lattice{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/2, β], :graduate_truncate, params; onGPU=onGPU) + sol, s = low_energy_spectrum(ctr, search_params) + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + + push!(energies, sol.energies) + clear_memoize_cache() + end + end + end +end diff --git a/test/search_pegasus_droplets.jl b/test/search_pegasus_droplets.jl new file mode 100644 index 00000000..35c7acee --- /dev/null +++ b/test/search_pegasus_droplets.jl @@ -0,0 +1,64 @@ +using SpinGlassNetworks +using SpinGlassTensors +using SpinGlassEngine + +using SpinGlassExhaustive + +function bench(instance::String) + m, n, t = 3, 3, 3 + + # max_cl_states = 2^(t-0) + + ground_energy = -469.0 + + β = 0.5 + bond_dim = 8 + dE = 3.0 + δp = exp(-β * dE) + num_states = 500 + all_betas = [β/8, β/4, β/2, β] + + cl_h = clustered_hamiltonian( + ising_graph(instance), + # max_cl_states, + spectrum=my_brute_force, + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10, 1E-16) + search_params = SearchParameters(num_states, δp) + + energies = Vector{Float64}[] + for Strategy ∈ (Zipper, ), Sparsity ∈ (Sparse, ) + for Gauge ∈ (NoUpdate, ) + for Layout ∈ (GaugesEnergy,), transform ∈ all_lattice_transformations[[1]] + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, all_betas, :graduate_truncate, params; onGPU=onGPU) + # sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, NoDroplets())) + sol1, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr, :nofit, SingleLayerDroplets(0.01, 20, :hamming))) + + sol2 = unpack_droplets(sol1, β) + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol2.states) + # cl_h_states = decode_state.(Ref(net), sol2.states) + + # @test sol1.energies[begin] ≈ ground_energy + # @test sol2.energies[begin] ≈ ground_energy + # push!(energies, sol1.energies) + + # for sol ∈ (sol1, sol2) + # ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + # @test sol.energies ≈ energy.(Ref(ising_graph(instance)), ig_states) + + # cl_h_states = decode_state.(Ref(net), sol.states) + # @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + # norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + # @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + # end + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end + +bench("$(@__DIR__)/instances/pegasus_random/P4/CBFM-P/SpinGlass/001_sg.txt") diff --git a/test/search_pegasus_nodiag_square_cross.jl b/test/search_pegasus_nodiag_square_cross.jl new file mode 100644 index 00000000..a642c774 --- /dev/null +++ b/test/search_pegasus_nodiag_square_cross.jl @@ -0,0 +1,40 @@ +using SpinGlassExhaustive + + + +function bench(instance::String) + m, n, t = 4, 4, 24 + + max_cl_states = 2^4 + + β = 1. + bond_dim = 16 + δp = 1E-4 + num_states = 1000 + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + max_cl_states, + spectrum=my_brute_force, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + + # Solve using PEPS search + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), transform ∈ all_lattice_transformations + for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng), Sparsity ∈ (Dense, ) + net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, NoUpdate}(net, [β/8, β/4, β/2, β], :graduate_truncate, params; onGPU=onGPU) + sol_peps, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + push!(energies, sol_peps.energies) + clear_memoize_cache() + end + end + @test all(e -> e ≈ first(energies), energies) +end + +# best ground found for max_cl_states = 2^4: -537.0007291019799 +bench("$(@__DIR__)/instances/pegasus_nondiag/4x4.txt") diff --git a/test/search_pegasus_square_cross.jl b/test/search_pegasus_square_cross.jl new file mode 100644 index 00000000..fe4b4c54 --- /dev/null +++ b/test/search_pegasus_square_cross.jl @@ -0,0 +1,40 @@ +using SpinGlassExhaustive + +function bench(instance::String) + m, n, t = 2, 2, 24 + + max_cl_states = 2^8 + + β = 2.0 + bond_dim = 64 + δp = 1E-4 + num_states = 20 + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + max_cl_states, + spectrum = my_brute_force, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + Gauge = NoUpdate + graduate_truncation = :graduate_truncate + + # Solve using PEPS search + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), transform ∈ all_lattice_transformations + for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng), Sparsity ∈ (Dense, ) + net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], graduate_truncation, params; onGPU=onGPU) + sol_peps, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + push!(energies, sol_peps.energies) + clear_memoize_cache() + end + end + @test all(e -> e ≈ first(energies), energies) +end + +# best ground found: -59.65625 +bench("$(@__DIR__)/instances/pegasus_droplets/2_2_3_00.txt") diff --git a/test/search_smallest_cross_square_cross.jl b/test/search_smallest_cross_square_cross.jl new file mode 100644 index 00000000..c44f20c6 --- /dev/null +++ b/test/search_smallest_cross_square_cross.jl @@ -0,0 +1,41 @@ + +@testset "Pegasus-like (smallest cross-square-star) instance has the correct solution" begin + m, n, t = 2, 3, 1 + L = n * m * t + + β = 1. + bond_dim = 16 + num_states = 22 + + instance = "$(@__DIR__)/instances/pathological/cross_3_2.txt" + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 4) + search_params = SearchParameters(num_states, 0.0) + + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (EnergyGauges, GaugesEnergy, EngGaugesEng) + for transform ∈ all_lattice_transformations + net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, NoUpdate}(net, [β/8., β/4., β/2., β], :graduate_truncate, params; onGPU=onGPU) + sol, s = low_energy_spectrum(ctr, search_params) + + ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + @test sol.energies ≈ energy.(Ref(ig), ig_states) + + cl_h_states = decode_state.(Ref(net), sol.states) + @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + @test norm_prob ≈ exp.(-β .* (sol.energies .- sol.energies[1])) + + clear_memoize_cache() + end + end + end +end diff --git a/test/search_square_double_node_basic.jl b/test/search_square_double_node_basic.jl new file mode 100644 index 00000000..f77c73e1 --- /dev/null +++ b/test/search_square_double_node_basic.jl @@ -0,0 +1,87 @@ +using SpinGlassEngine + +function run_test_square_double_node(instance, m, n, t) + β = 2 + bond_dim = 16 + δp = 1e-10 + num_states = 512 + βs = [β/16, β/8, β/4, β/2, β] + + ig = ising_graph(instance) + + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #_gpu, # rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + cl_h2 = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #_gpu, # rm _gpu to use CPU + cluster_assignment_rule=super_square_lattice((m, n, 8)) + ) + + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + energies = [] + Gauge = NoUpdate + + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), Sparsity ∈ (Dense, Sparse) + for Layout ∈ (EnergyGauges, GaugesEnergy) + for tran ∈ all_lattice_transformations + + net = PEPSNetwork{SquareDoubleNode{Layout}, Sparsity}(m, n, cl_h, tran) + net2 = PEPSNetwork{SquareSingleNode{Layout}, Sparsity}(m, n, cl_h2, tran) + + ctr = MpsContractor{Strategy, Gauge}(net, βs, :graduate_truncate, params; onGPU=onGPU) + ctr2 = MpsContractor{Strategy, Gauge}(net2, βs, :graduate_truncate, params; onGPU=onGPU) + + sol, s = low_energy_spectrum(ctr, search_params) #, merge_branches(ctr)) + sol2, s = low_energy_spectrum(ctr2, search_params) # , merge_branches(ctr2)) + + # ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + # @test sol.energies ≈ energy.(Ref(ig), ig_states) + # cl_h_states = decode_state.(Ref(net), sol.states) + # @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + #@test sol.energies ≈ sol2.energies + @test sol.energies[1: div(num_states, 8)] ≈ sol2.energies[1: div(num_states, 8)] + #@test sol.states == sol2.states + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + exct_prob = exp.(-β .* (sol.energies .- sol.energies[1])) + @test norm_prob ≈ exct_prob + + push!(energies, sol.energies[1]) + + norm_prob = exp.(sol2.probabilities .- sol2.probabilities[1]) + exct_prob = exp.(-β .* (sol2.energies .- sol2.energies[1])) + @test norm_prob ≈ exct_prob + + for ii ∈ 1 : ctr.peps.nrows + 1, jj ∈ 1 : length(βs) + ψ1, ψ2 = mps(ctr, ii, jj), mps(ctr2, ii, jj) + o = ψ1 * ψ2 / sqrt((ψ1 * ψ1) * (ψ2 * ψ2)) + @test o ≈ 1. + end + for ii ∈ 0 : ctr.peps.nrows, jj ∈ 1 : length(βs) + ψ1_top, ψ2_top = mps_top(ctr, ii, jj), mps_top(ctr2, ii, jj) + o_top = ψ1_top * ψ2_top / sqrt((ψ1_top * ψ1_top) * (ψ2_top * ψ2_top)) + @test o_top ≈ 1. + end + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end + +instance = "$(@__DIR__)/instances/pegasus_nondiag/3x2x1.txt" +m, n, t = 3, 2, 1 +run_test_square_double_node(instance, m, n, t) + +# instance = "$(@__DIR__)/instances/chimera_droplets/128power/001.txt" +# m, n, t = 4, 4, 1 +# run_test(instance, m, n, t) + +instance = "$(@__DIR__)/instances/pathological/pegasus_nd_3_4_1.txt" +m, n, t = 3, 4, 1 +run_test_square_double_node(instance, m, n, t) diff --git a/test/search_square_lattice.jl b/test/search_square_lattice.jl new file mode 100644 index 00000000..d7b953e4 --- /dev/null +++ b/test/search_square_lattice.jl @@ -0,0 +1,36 @@ +using SpinGlassExhaustive + +function bench(instance::String) + m, n, t = 5, 5, 4 + + eng_sbm = -215.2368 + β = 1.0 + bond_dim = 12 + δp = 1E-4 + num_states = 20 + + ig = ising_graph(instance) + cl_h = clustered_hamiltonian( + ig, + spectrum = full_spectrum, + cluster_assignment_rule=super_square_lattice((m, n, t)) + ) + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + Gauge = NoUpdate + graduate_truncation = :graduate_truncate + energies = Vector{Float64}[] + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), transform ∈ all_lattice_transformations + for Layout ∈ (GaugesEnergy, EnergyGauges, EngGaugesEng), Sparsity ∈ (Dense, Sparse) + net = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h, transform) + ctr = MpsContractor{Strategy, Gauge}(net, [β/8, β/4, β/2, β], graduate_truncation, params; onGPU=onGPU) + sol_peps, s = low_energy_spectrum(ctr, search_params, merge_branches(ctr)) + push!(energies, sol_peps.energies) + @test energies[begin][1] ≈ eng_sbm + clear_memoize_cache() + end + end +end + +# bench("$(@__DIR__)/instances/square_diagonal/square_5x5.txt") +bench("$(@__DIR__)/instances/square_diagonal/diagonal_5x5.txt") \ No newline at end of file diff --git a/test/search_squarecross_double_node_basic.jl b/test/search_squarecross_double_node_basic.jl new file mode 100644 index 00000000..62b4422b --- /dev/null +++ b/test/search_squarecross_double_node_basic.jl @@ -0,0 +1,80 @@ +using SpinGlassEngine +using Test + +function run_test_squarecross_double_node(instance, m, n, t) + β = 2 + bond_dim = 16 + δp = 1e-10 + num_states = 512 + + ig = ising_graph(instance) + + cl_h = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #_gpu, # rm _gpu to use CPU + cluster_assignment_rule=pegasus_lattice((m, n, t)) + ) + cl_h2 = clustered_hamiltonian( + ig, + spectrum=full_spectrum, #_gpu, # rm _gpu to use CPU + cluster_assignment_rule=super_square_lattice((m, n, 8)) + ) + + params = MpsParameters(bond_dim, 1E-8, 10) + search_params = SearchParameters(num_states, δp) + energies = [] + Gauge = NoUpdate + βs = [β/16, β/8, β/4, β/2, β] + + for Strategy ∈ (SVDTruncate, MPSAnnealing, Zipper), Sparsity ∈ (Sparse,) + for Layout ∈ (EnergyGauges, GaugesEnergy) + for tran ∈ all_lattice_transformations + + net = PEPSNetwork{SquareCrossDoubleNode{Layout}, Sparsity}(m, n, cl_h, tran) + net2 = PEPSNetwork{SquareCrossSingleNode{Layout}, Sparsity}(m, n, cl_h2, tran) + + ctr = MpsContractor{Strategy, Gauge}(net, βs, :graduate_truncate, params; onGPU=onGPU) + ctr2 = MpsContractor{Strategy, Gauge}(net2, βs, :graduate_truncate, params; onGPU=onGPU) + + sol, s = low_energy_spectrum(ctr, search_params) #, merge_branches(ctr)) + sol2, s = low_energy_spectrum(ctr2, search_params) #, merge_branches(ctr2)) + + # ig_states = decode_clustered_hamiltonian_state.(Ref(cl_h), sol.states) + # @test sol.energies ≈ energy.(Ref(ig), ig_states) + # cl_h_states = decode_state.(Ref(net), sol.states) + # @test sol.energies ≈ energy.(Ref(cl_h), cl_h_states) + + @test sol.energies[1: div(num_states, 2)] ≈ sol2.energies[1: div(num_states, 2)] + #@test sol.states == sol2.states + + norm_prob = exp.(sol.probabilities .- sol.probabilities[1]) + exct_prob = exp.(-β .* (sol.energies .- sol.energies[1])) + @test norm_prob ≈ exct_prob + + push!(energies, sol.energies[1]) + + norm_prob = exp.(sol2.probabilities .- sol2.probabilities[1]) + exct_prob = exp.(-β .* (sol2.energies .- sol2.energies[1])) + @test norm_prob ≈ exct_prob + + for ii ∈ 1 : ctr.peps.nrows + 1, jj ∈ 1 : length(βs) + ψ1, ψ2 = mps(ctr, ii, jj), mps(ctr2, ii, jj) + o = ψ1 * ψ2 / sqrt((ψ1 * ψ1) * (ψ2 * ψ2)) + @test o ≈ 1. + end + for ii ∈ 0 : ctr.peps.nrows, jj ∈ 1 : length(βs) + ψ1_top, ψ2_top = mps_top(ctr, ii, jj), mps_top(ctr2, ii, jj) + o_top = ψ1_top * ψ2_top / sqrt((ψ1_top * ψ1_top) * (ψ2_top * ψ2_top)) + @test o_top ≈ 1. + end + clear_memoize_cache() + end + end + end + @test all(e -> e ≈ first(energies), energies) +end + + +instance = "$(@__DIR__)/instances/pathological/pegasus_3_4_1.txt" +m, n, t = 3, 4, 1 +run_test_squarecross_double_node(instance, m, n, t)