From 7e1f9b3c23da64a087e3b95b00522a6076c58506 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Fri, 28 May 2021 19:59:58 -0400 Subject: [PATCH 01/27] modify Sepchrom and trimming --- LepWrap | 26 +++++++++----- rules/LepMap3.smk | 1 - rules/distances.smk | 2 +- rules/generate_map.smk | 26 +++++++------- rules/order.smk | 4 +-- rules/reorder.smk | 4 +-- scripts/LepWrapTrim.r | 72 +++++++++++++++++++++++---------------- scripts/MapSummary.r | 6 ++-- scripts/iterate_js2all.sh | 4 +-- 9 files changed, 82 insertions(+), 63 deletions(-) diff --git a/LepWrap b/LepWrap index 8acd85f..c9a0e61 100755 --- a/LepWrap +++ b/LepWrap @@ -15,13 +15,21 @@ if [[ -z "$1" ]]; then exit 1 fi -echo "Running Lep-Map3" -sleep 2s -snakemake --cores $1 --snakefile ./rules/LepMap3.smk --directory . +lepmap(){ + echo "Running Lep-Map3" + sleep 2s + snakemake --cores $1 --snakefile ./rules/LepMap3.smk --directory . +} -LA=$(grep "run_lepanchor" config.yaml | cut -d":" -f2 | xargs | tr '[:upper:]' '[:lower:]') -if [ $LA == "true" ]; then -echo -e "\nRunning Lep-Anchor" -sleep 2s -snakemake --cores $1 --snakefile ./rules/LepAnchor.smk --directory . -fi +lepanchor(){ + LA=$(grep "run_lepanchor" config.yaml | cut -d":" -f2 | xargs | tr '[:upper:]' '[:lower:]') + if [ $LA == "true" ]; then + echo -e "\nRunning Lep-Anchor" + sleep 2s + snakemake --cores $1 --snakefile ./rules/LepAnchor.smk --directory . + else + exit 1 + fi +} + +lepmap && lepanchor \ No newline at end of file diff --git a/rules/LepMap3.smk b/rules/LepMap3.smk index ad62f8a..d54a6d1 100644 --- a/rules/LepMap3.smk +++ b/rules/LepMap3.smk @@ -20,7 +20,6 @@ lod_diff = config["lod_difference"] # ordering # lg_range = list(range(1, config["exp_lg"]+1)) lg_count = config["exp_lg"] -threads_per = config["threads_per"] dist_method = config["dist_method"] ITER = config["iterations"] phasenum = config["phase_iterations"] diff --git a/rules/distances.smk b/rules/distances.smk index 196664f..352bbb0 100644 --- a/rules/distances.smk +++ b/rules/distances.smk @@ -13,7 +13,7 @@ rule calculate_distances: params: dist_method = dist_method, lg = "{lg_range}" - threads: threads_per + threads: 2 shell: """ cp {input.lg} {output.distance} diff --git a/rules/generate_map.smk b/rules/generate_map.smk index 7605f03..c2496da 100644 --- a/rules/generate_map.smk +++ b/rules/generate_map.smk @@ -1,8 +1,8 @@ rule separate_chromosomes: input: "2_Filtering/data.filtered.lepmap3.gz" - output: "3_SeparateChromosomes/map.{lod_range}" - log: "3_SeparateChromosomes/logs/map.{lod_range}.log" - message: "Creating map for lodLimit={params.lod} >> {output}" + output: "3_SeparateChromosomes/LOD.{lod_range}" + log: "3_SeparateChromosomes/logs/LOD.{lod_range}.log" + message: "Clustering markers for lodLimit={params.lod} >> {output}" threads: 30 params: lod = "{lod_range}", @@ -13,17 +13,17 @@ rule separate_chromosomes: """ rule map_summary: - input: expand("3_SeparateChromosomes/map.{LOD}", LOD = lod_range) - output: "3_SeparateChromosomes/all.maps.summary" + input: expand("3_SeparateChromosomes/LOD.{LOD}", LOD = lod_range) + output: "3_SeparateChromosomes/all.LOD.summary" message: "Summarizing SeperateChromosomes2 maps >> {output}" shell: "scripts/MapSummary.r 3_SeparateChromosomes" rule join_singles: input: datacall = "2_Filtering/data.filtered.lepmap3.gz", - map_summ = "3_SeparateChromosomes/all.maps.summary" - output: "map.master" - log: "3_SeparateChromosomes/chosen.map" + map_summ = "3_SeparateChromosomes/all.LOD.summary" + output: "LOD.master" + log: "3_SeparateChromosomes/chosen.LOD" threads: 30 message: "Joining singles to linkage groups" params: @@ -33,16 +33,16 @@ rule join_singles: iterate = "iterate=1", shell: """ - echo -n -e '\nWhich map would you like to use (e.g. map.15)? map.' + echo -n -e '\nWhich map would you like to use (e.g. LOD.15)? LOD.' read -r - echo -e "# the map chosen to use with OrderMarkers2\nmap.$REPLY" > {log} + echo -e "# the map chosen to use with OrderMarkers2\nLOD.$REPLY" > {log} echo "A record of your choice can be found in {log}" JS2A=$(echo {params.run_js2all} | tr '[:upper:]' '[:lower:]') if [ $JS2A == "true" ]; then - zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/map.$REPLY data=- {params.lod_limit} {params.lod_diff} {params.iterate} numThreads={threads} > {output} + zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/LOD.$REPLY data=- {params.lod_limit} {params.lod_diff} {params.iterate} numThreads={threads} > {output} else echo -e "\nSkipping JoinSingles2All and creating a symlink instead" - ln -sr 3_SeparateChromosomes/map.$REPLY {output} + ln -sr 3_SeparateChromosomes/LOD.$REPLY {output} fi - sleep 4s + sleep 2s """ diff --git a/rules/order.smk b/rules/order.smk index cfd1ed0..8242820 100644 --- a/rules/order.smk +++ b/rules/order.smk @@ -1,7 +1,7 @@ rule order_markers: input: datacall = "2_Filtering/data.filtered.lepmap3.gz", - filt_map = "map.master" + filt_map = "LOD.master" output: "4_OrderMarkers/ordered.{lg_range}" log: run = "4_OrderMarkers/logs/ordered.{lg_range}.log", @@ -12,7 +12,7 @@ rule order_markers: chrom = "{lg_range}", iterations = ITER, phase = phasenum - threads: threads_per + threads: 2 shell: """ zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} data=- numThreads={threads} numMergeIterations={params.iterations} {params.dist_method} chromosome={params.chrom} phasingIterations={params.phase} &> {log.run}.tmp diff --git a/rules/reorder.smk b/rules/reorder.smk index 9f3ad9d..23042ff 100644 --- a/rules/reorder.smk +++ b/rules/reorder.smk @@ -1,7 +1,7 @@ rule reorder_markers: input: datacall = "2_Filtering/data.filtered.lepmap3.gz", - filt_map = "map.master", + filt_map = "LOD.master", lg_order = "5_Trim/ordered.{lg_range}.trimmed" output: "6_OrderMarkers/ordered.{lg_range}" @@ -13,7 +13,7 @@ rule reorder_markers: dist_method = dist_method, lg = "{lg_range}", iterations = ITER - threads: threads_per + threads: 2 shell: """ zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} {params.dist_method} numMergeIterations={params.iterations} &> {log.run}.tmp diff --git a/scripts/LepWrapTrim.r b/scripts/LepWrapTrim.r index 8bddfe4..4b9ee3a 100755 --- a/scripts/LepWrapTrim.r +++ b/scripts/LepWrapTrim.r @@ -3,10 +3,8 @@ suppressMessages(if (!require("tidyverse")) install.packages("tidyverse")) suppressMessages(library("tidyverse")) args <- commandArgs(trailingOnly = TRUE) -#args <- c("~/ordered.1", 10, 15) - # args[1] is the OrderMarkers2 output file -# args[2] is the centimorgan cutoff distance +# args[2] is the centimorgan cutoff threshold # args[3] is the % of edge markers to scan lgfile <- read.delim( @@ -15,7 +13,7 @@ lgfile <- read.delim( sep = "\t", comment.char="#" ) %>% - mutate(Mpass = TRUE, Fpass = TRUE) + mutate(Mpass = "PASS", Fpass = "PASS") ## setup output file names ## # split the filename by path @@ -31,49 +29,67 @@ plotfile_base <- paste("5_Trim", "plots", filename, sep = "/") plotfile <- paste(plotfile_base, "trim.pdf", sep = ".") ##### Pruning the ends ##### -dist_thresh <- as.numeric(args[2]) # if the percent threshold is given as an interger, convert it to a decimal +dist_thresh <- as.numeric(args[2]) +if(dist_thresh >= 1){ + dist_thresh <- dist_thresh * .01 +} +dist_thresh_m <- abs(max(lgfile$V2) - min(lgfile$V2)) * dist_thresh +dist_thresh_f <- abs(max(lgfile$V3) - min(lgfile$V3)) * dist_thresh + edge_length <- as.numeric(args[3]) if(edge_length >= 1){ edge_length <- edge_length * .01 } +n_markers <- length(lgfile$V1) +front_edge <- round(n_markers * edge_length, digits = 0) +back_edge <- round(n_markers - front_edge, digits = 0) + for (j in 2:3){ # iterate over male (2) and female (3) + # sort on column + if (j == 2){ + lgfile <- arrange(lgfile, V2) + dist_thresh <- dist_thresh_m + } else { + lgfile <- arrange(lgfile, V3) + dist_thresh <- dist_thresh_f + } # trim beginning - n_markers <- length(lgfile$V1) * edge_length - for(a in 1:n_markers){ #first n% of total markers from the beginning - diff <- abs(lgfile[a+1,j]-lgfile[a,j]) # difference between two points + for(a in front_edge:2){ #first n% of total markers from the beginning + diff <- abs(lgfile[a,j]-lgfile[a-1,j]) # difference between two points if( diff > dist_thresh ){ # is the difference between the two points > distance argument? - lgfile[1:a, j+4] <- FALSE # mark that marker and all markers BEFORE it as FALSE + lgfile[(a-1):1, j+4] <- "FAIL" # mark that marker and all markers BEFORE it as FAIL + break() } } # trim end - filelen<-length(lgfile$V1) # get new file lengths for each time we remove NA's - for(z in filelen:(filelen-n_markers)){ #iterate n% total markers in starting from the end - diff <- abs(lgfile[z,j]-lgfile[z-1,j]) # difference between two points + for(z in back_edge:(n_markers-1)){ #last n% total markers starting from the back edge going out + diff <- abs(lgfile[z+1,j]-lgfile[z,j]) # difference between two points if( diff > dist_thresh ){ # is the difference between the two points > distance argument? - lgfile[filelen:z,j+4] <- FALSE # mark that marker and all markers AFTER it as FALSE + lgfile[(z+1):n_markers,j+4] <- "FAIL" # mark that marker and all markers AFTER it as FAIL + break() } } - - # create new table of markers passing QC - cleaned_markers <- lgfile %>% filter(Mpass == TRUE & Fpass == TRUE) + } ### +# create new table of markers passing QC +cleaned_markers <- lgfile %>% filter(Mpass == "PASS" & Fpass == "PASS") # isolate bad markers -removed_markers <- (lgfile %>% filter(Mpass == FALSE | Fpass == FALSE))$V1 +removed_markers <- (lgfile %>% filter(Mpass == "FAIL" | Fpass == "FAIL"))$V1 # get simple counts -rm_male <- (lgfile %>% filter(Mpass == FALSE & Fpass == TRUE))$V1 %>% length() -rm_female <- (lgfile %>% filter(Fpass == FALSE & Mpass == TRUE))$V1 %>% length() -rm_both <- (lgfile %>% filter(Mpass == FALSE & Fpass == FALSE))$V1 %>% length() +rm_male <- (lgfile %>% filter(Mpass == "FAIL" & Fpass == "PASS"))$V1 %>% length() +rm_female <- (lgfile %>% filter(Fpass == "FAIL" & Mpass == "PASS"))$V1 %>% length() +rm_both <- (lgfile %>% filter(Mpass == "FAIL" & Fpass == "FAIL"))$V1 %>% length() QA <- function(x,y){ - if(x & y) return("pass") - if(!x & !y) return("both") - if(!x & y) return("male") - if(x & !y) return("female") + if(x == "PASS" & y == "PASS") return("pass") + if(x != "PASS" & y != "PASS") return("both") + if(x == "FAIL" & y == "PASS") return("male") + if(x == "PASS" & y == "FAIL") return("female") } QAfix <- function (x,y){ @@ -89,6 +105,7 @@ QAfix <- function (x,y){ plot_df <- lgfile %>% rename(Male = V2, Female = V3) %>% + arrange(Male) %>% mutate(Marker = seq_along(Mpass)) %>% rowwise() %>% mutate(Fail = QA(Mpass, Fpass)) %>% @@ -97,11 +114,6 @@ plot_df <- lgfile %>% rowwise() %>% mutate(Fail = QAfix(Fail, Sex)) -# locations for vertical lines -n_markers <- length(lgfile$V1) -front_edge <- round(n_markers * edge_length, digits = 0) -back_edge <- round(n_markers - (front_edge), digits = 0) - plot_df %>% ggplot(aes(Marker, Position)) + geom_point(aes(color = Fail), shape = 19) + @@ -111,7 +123,7 @@ plot_df %>% labs( title = paste("Edge Cluster Trimming Results for Linkage Group", lg), subtitle = paste0("Markers Failing QC: ", rm_female, " female, ", rm_male, " male, ", rm_both, " both (", rm_female+rm_male+rm_both, " total)" ), - caption = paste0("edge length: ", edge_length*100, "% of markers, cM threshold: ", dist_thresh), + caption = paste0(edge_length*100, "% of edge markers, ", args[2], "% cM threshold: ", dist_thresh_m, "(M) & ", dist_thresh_f, "(F)"), x = "Marker Number", y = "Position (cM)", color = "QA Status" diff --git a/scripts/MapSummary.r b/scripts/MapSummary.r index 183f41e..0df8b32 100755 --- a/scripts/MapSummary.r +++ b/scripts/MapSummary.r @@ -25,7 +25,7 @@ library(stringr) targetdir <- args[1] # pattern match to find the map files -flist <- list.files(targetdir, full.names = TRUE, pattern = "^map.") +flist <- list.files(targetdir, full.names = TRUE, pattern = "^LOD.") # natural language sort flist <- str_sort(flist, numeric = TRUE) @@ -54,8 +54,8 @@ summtable[is.na(summtable)] <- 0 summtable <- summtable[order(summtable$LG),] # generate output filenames -out_tmp <-paste0(targetdir, "/all.map.summary") -out_file <- paste0(targetdir, "/all.maps.summary") +out_tmp <-paste0(targetdir, "/.all.LOD.summary") +out_file <- paste0(targetdir, "/all.LOD.summary") write.table(summtable, file = out_tmp, quote = FALSE, row.names = FALSE, col.names = TRUE) # use GNU column command to make the table fixed-width and remove the tmp file diff --git a/scripts/iterate_js2all.sh b/scripts/iterate_js2all.sh index bbf69f9..8a7642b 100755 --- a/scripts/iterate_js2all.sh +++ b/scripts/iterate_js2all.sh @@ -33,10 +33,10 @@ fi for i in $(seq $LODMIN $LODMAX); do zcat 2_Filtering/data.filtered.lepmap3.gz | java -cp software/LepMap3 JoinSingles2All map=$TARGETMAP data=- lodLimit=$i lodDifference=4 iterate=1 distortionLod=1 numThreads=10 informativeMask=$INFMASK > JoinSingles2All_iter/logs/map.$i.$4.js2all - cut -f1 JoinSingles2All_iter/logs/map.$i.$4.js2all > JoinSingles2All_iter/map.$i.$4.js2all + cut -f1 JoinSingles2All_iter/logs/map.$i.$4.js2all > JoinSingles2All_iter/LOD.$i.$4.js2all done -echo "The generated maps are named map.LODlim.LODdiff.js2all" +echo "The generated maps are named LOD.LODlim.LODdiff.js2all" # generate a summary of the results scripts/MapSummary.r JoinSingles2All_iter From 8560ec61df85338334fceffa2c80873a4cc20b96 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Fri, 28 May 2021 20:00:24 -0400 Subject: [PATCH 02/27] modify config --- config.yaml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/config.yaml b/config.yaml index d32e040..ea217e7 100644 --- a/config.yaml +++ b/config.yaml @@ -8,7 +8,7 @@ # ParentCall2 # #---------------# # the filtered VCF file with your genotype likelihoods: -vcf: "out.14.missrecode.vcf" +vcf: "out.15.miss95recode.vcf" # Instructions to create pedigree file: https://sourceforge.net/p/lep-map3/wiki/software/LepMap3 Home/#parentcall2 # the pedigree file associated with your data @@ -18,7 +18,7 @@ pedigree: "pedigree.txt" # Filtering2 # #---------------# # data tolerance value-- set this to 0 if you want to skip the Filtering2 module -data_tol: 0.1 +data_tol: 0 #------------------------# # SeperateChromosomes2 # @@ -27,10 +27,10 @@ data_tol: 0.1 # LOD score in the range of lod_min to lod_max # The minimum LOD for SeperateChromosomes2 -lod_min: 5 +lod_min: 20 # The maximum LOD for SeperateChromosomes2 -lod_max: 30 +lod_max: 40 # Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) informative: "informativeMask=123" @@ -59,8 +59,11 @@ exp_lg: 24 # Set iterations to the number of iterations you want per chromosome (more is better). Recommend 30 or more iterations: 100 +## deprecated ## # Set threads_per to the number of threads you would like to use per linkage group for ordering -threads_per: 2 +# OrderMarkers2 uses at most 2 threads per ordering, so this has been deprecated +#threads_per: 2 +#### # Choose your distance method by commenting the line you dont want dist_method: "useKosambi=1" @@ -75,15 +78,15 @@ phase_iterations: 2 #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group # and remove clusters that are N centimorgans away from the next marker -# you can "skip" trimming by making edge_length really low (e.g. 1) +# you can "skip" trimming by making edge_length really high (e.g. 100) # and trim_cutoff really high (e.g. 50) # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group # Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" edge_length: 1 -# Set trim_cuttoff to the centiMorgan distance cutoff (10 is reasonable) -trim_cutoff: 40 +# Set trim_cuttoff to the centiMorgan distance cutoff (5 is reasonable) +trim_cutoff: 100 @@ -121,7 +124,7 @@ OS_info: "Ubuntu" #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group # and remove clusters that are N% centimorgans (of the total cM span) away from -# the next marker. You can "skip" trimming by making edge_length really low (e.g. 1) +# the next marker. You can "skip" trimming by making edge_length really high (e.g. 100) # and trim_cutoff really high (e.g. 50) # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group From 18a1e841487069f88680f26a58deec38dac6965d Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sat, 29 May 2021 12:25:45 -0400 Subject: [PATCH 03/27] consolidate params and config --- config.yaml | 37 +++++++++++++++++-------------------- rules/LepMap3.smk | 3 ++- rules/order.smk | 6 +++--- rules/reorder.smk | 6 +++--- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/config.yaml b/config.yaml index ea217e7..2f3dcd1 100644 --- a/config.yaml +++ b/config.yaml @@ -23,7 +23,7 @@ data_tol: 0 #------------------------# # SeperateChromosomes2 # #------------------------# -# LepMak3r will iteratively perform SeperateChromosomes2 for each +# LepWrap will iteratively perform SeperateChromosomes2 for each # LOD score in the range of lod_min to lod_max # The minimum LOD for SeperateChromosomes2 @@ -59,36 +59,33 @@ exp_lg: 24 # Set iterations to the number of iterations you want per chromosome (more is better). Recommend 30 or more iterations: 100 -## deprecated ## -# Set threads_per to the number of threads you would like to use per linkage group for ordering -# OrderMarkers2 uses at most 2 threads per ordering, so this has been deprecated -#threads_per: 2 -#### +# If there are any additional parameters you would like to use for OrderMarkers2 (e.g. hyperPhaser=1), add them here +extra_params_OrderMarkers: "useKosambi=1 phasingIterations=2" -# Choose your distance method by commenting the line you dont want -dist_method: "useKosambi=1" -#dist_method: "useMorgan=1" - -# number of iterations to use of OrderMarkers2 phasing. -# this number is typically 1-2 -phase_iterations: 2 #-----------------# # Edge Trimming # #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group -# and remove clusters that are N centimorgans away from the next marker -# you can "skip" trimming by making edge_length really high (e.g. 100) -# and trim_cutoff really high (e.g. 50) +# and remove clusters that are N% centimorgans (of the total cM span) away from +# the next marker. You can "skip" trimming by making edge_length really low (e.g. 1) +# and trim_cutoff really high (e.g. 80-100). # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group -# Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" +# Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" (10-20 is reasonable) edge_length: 1 # Set trim_cuttoff to the centiMorgan distance cutoff (5 is reasonable) trim_cutoff: 100 +#--------------------# +# Re-OrderMarkers2 # +#--------------------# +# The second round of OrderMarkers will use the same basic parameters as the first round (but not the extra params) +# If there are additional parameters you would like to use, add them here: +extra_params_reOrderMarkers: "useKosambi=1" + #################### #### Lep-Anchor #### @@ -107,7 +104,7 @@ lg_count: 24 PAF_file: "alnPB.paf" # if you have a proximity file add it here, otherwise leave the text as "/dev/null". -# This isn't yet implemented in the official Lep-Anchor wrapper, so don't change this. +# This isn't yet implemented in Lep-Anchor, so don't change this. proximity_file: "/dev/null" # Which system is appropriate for running the HaploMerger2 section? Comment out the one that doesn't apply. @@ -124,8 +121,8 @@ OS_info: "Ubuntu" #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group # and remove clusters that are N% centimorgans (of the total cM span) away from -# the next marker. You can "skip" trimming by making edge_length really high (e.g. 100) -# and trim_cutoff really high (e.g. 50) +# the next marker. You can "skip" trimming by making edge_length really low (e.g. 1) +# and trim_cutoff really high (e.g. 80-100) # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group # Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" diff --git a/rules/LepMap3.smk b/rules/LepMap3.smk index d54a6d1..963b272 100644 --- a/rules/LepMap3.smk +++ b/rules/LepMap3.smk @@ -20,9 +20,10 @@ lod_diff = config["lod_difference"] # ordering # lg_range = list(range(1, config["exp_lg"]+1)) lg_count = config["exp_lg"] -dist_method = config["dist_method"] ITER = config["iterations"] phasenum = config["phase_iterations"] +order_extra = config["extra_params_OrderMarkers"] +reorder_extra = config["extra_params_reOrderMarkers"] # trimming # edge_len = str(config["edge_length"]) trim_thresh = str(config["trim_cutoff"]) diff --git a/rules/order.smk b/rules/order.smk index 8242820..d58940b 100644 --- a/rules/order.smk +++ b/rules/order.smk @@ -8,14 +8,14 @@ rule order_markers: recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" message: "Ordering the markers with {params.dist_method} on linkage group {params.chrom}" params: - dist_method = dist_method, chrom = "{lg_range}", iterations = ITER, - phase = phasenum + phase = phasenum, + extra = order_extra threads: 2 shell: """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} data=- numThreads={threads} numMergeIterations={params.iterations} {params.dist_method} chromosome={params.chrom} phasingIterations={params.phase} &> {log.run}.tmp + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} {params.extra} data=- numThreads={threads} numMergeIterations={params.iterations} chromosome={params.chrom} &> {log.run}.tmp sed -n '/\*\*\* LG \=/,$p' {log.run}.tmp > {output} grep "recombin" {log.run}.tmp > {log.recomb} awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.run}.tmp > {log.run} && rm {log.run}.tmp diff --git a/rules/reorder.smk b/rules/reorder.smk index 23042ff..62a41ed 100644 --- a/rules/reorder.smk +++ b/rules/reorder.smk @@ -10,13 +10,13 @@ rule reorder_markers: recomb = "6_OrderMarkers/recombination/ordered.{lg_range}.recombination" message: "Reordering linkage group {params.lg} with {params.iterations} iterations" params: - dist_method = dist_method, lg = "{lg_range}", - iterations = ITER + iterations = ITER, + extra = reorder_extra threads: 2 shell: """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} {params.dist_method} numMergeIterations={params.iterations} &> {log.run}.tmp + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 {params.extra} map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} numMergeIterations={params.iterations} &> {log.run}.tmp sed -n '/\*\*\* LG \=/,$p' {log.run}.tmp > {output} grep "recombin" {log.run}.tmp > {log.recomb} awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.run}.tmp > {log.run} && rm {log.run}.tmp From df177f9eb8a882eda6986768dba56b4269a3c51a Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sat, 29 May 2021 12:32:16 -0400 Subject: [PATCH 04/27] update scripts to stop making Rplots.pdf --- scripts/LASummary.r | 4 +++- scripts/LASummarySexAvg.r | 5 ++++- scripts/MarkerPlot.r | 2 ++ scripts/TrimSummaryPlot.r | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/LASummary.r b/scripts/LASummary.r index 5d7b440..63ab938 100755 --- a/scripts/LASummary.r +++ b/scripts/LASummary.r @@ -12,7 +12,9 @@ allmaps <- suppressMessages(read_tsv(gzfile(args[1]), col_names = FALSE)) %>% group_by(lg) %>% mutate(marker = seq_along(Mb)) %>% pivot_longer(c(male, female), names_to = "sex", values_to = "cM" ) - + +pdf(NULL) + allmaps %>% ggplot(aes(x = Mb, y = cM, color = sex)) + geom_point(size = 0.6) + diff --git a/scripts/LASummarySexAvg.r b/scripts/LASummarySexAvg.r index e176af4..8537843 100755 --- a/scripts/LASummarySexAvg.r +++ b/scripts/LASummarySexAvg.r @@ -12,7 +12,10 @@ allmaps <- suppressMessages(read_tsv(gzfile(args[1]), col_names = FALSE)) %>% mutate(Mb = Mb/1000000) %>% group_by(lg) %>% mutate(marker = seq_along(Mb)) - + +pdf(NULL) + + allmaps %>% ggplot(aes(x = Mb, y = cM)) + geom_point(size = 0.6, color = "dodgerblue") + diff --git a/scripts/MarkerPlot.r b/scripts/MarkerPlot.r index 66cd2a4..a55d67e 100755 --- a/scripts/MarkerPlot.r +++ b/scripts/MarkerPlot.r @@ -4,6 +4,8 @@ suppressMessages(library(tidyverse, quietly = TRUE, warn.conflicts = FALSE)) args <- commandArgs(trailingOnly = TRUE) +pdf(NULL) + lgfile <- read.delim( args[1], header = FALSE, diff --git a/scripts/TrimSummaryPlot.r b/scripts/TrimSummaryPlot.r index 8b4cd60..72573b9 100755 --- a/scripts/TrimSummaryPlot.r +++ b/scripts/TrimSummaryPlot.r @@ -7,6 +7,7 @@ args <- commandArgs(trailingOnly = TRUE) # read in the summary table and pop out the LG number tbl <- read_table(args[1]) %>% suppressMessages() +pdf(NULL) tbl %>% ggplot(aes(lg, n_removed)) + From 5a5002fb68a90181d3f1a111b526e1afe9d8a5f3 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sat, 29 May 2021 12:51:07 -0400 Subject: [PATCH 05/27] consolidate config for extra params --- config.yaml | 16 ++++++++++++++++ rules/LepMap3.smk | 7 ++++++- rules/generate_map.smk | 8 ++++---- rules/prepare_data.smk | 12 ++++++++---- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/config.yaml b/config.yaml index 2f3dcd1..4108c83 100644 --- a/config.yaml +++ b/config.yaml @@ -14,12 +14,20 @@ vcf: "out.15.miss95recode.vcf" # the pedigree file associated with your data pedigree: "pedigree.txt" +# If there are any additional parameters you would like to use for ParentCall2 (e.g. halfSibs=1), add them here +extra_params_ParentCall: "removeNonInformative=1" + + #---------------# # Filtering2 # #---------------# # data tolerance value-- set this to 0 if you want to skip the Filtering2 module data_tol: 0 +# If there are any additional parameters you would like to use for Filtering2 (e.g. convert2Biallelic=1), add them here +extra_params_Filtering: "" + + #------------------------# # SeperateChromosomes2 # #------------------------# @@ -35,6 +43,10 @@ lod_max: 40 # Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) informative: "informativeMask=123" +# If there are any additional parameters you would like to use for SeparateChromosomes2 (e.g. distrotionLOD=1), add them here +extra_params_SeparateChromosomes: "sizeLimit=5 distortionLOD=1" + + #-------------------# # JoinSingles2ALL # #-------------------# @@ -48,6 +60,10 @@ lod_limit: "lodLimit=2" # start with lower values for lod_limit and increase as necessary lod_difference: "lodDifference=2" +# If there are any additional parameters you would like to use for JoinSingles2All (e.g. iterate=1), add them here +extra_params_JoinSingles: "iterate=1 distortionLOD=1" + + #-----------------# # OrderMarkers2 # #-----------------# diff --git a/rules/LepMap3.smk b/rules/LepMap3.smk index 963b272..5c18d93 100644 --- a/rules/LepMap3.smk +++ b/rules/LepMap3.smk @@ -7,26 +7,31 @@ configfile: "config.yaml" # data # vcf = config["vcf"] pedigree = config["pedigree"] +parentcall_extra = config["extra_params_ParentCall"] # filtering # data_tol=config["data_tol"] +filtering_extra = config["extra_params_Filtering"] # separate chromosomes # lod_max = str(config["lod_max"]) lod_range = list(range(config["lod_min"], config["lod_max"]+1)) informative = config["informative"] +sepchrom_extra = config["extra_params_SeparateChromosomes"] # join singles # joinsingles = config["run_joinsingles2all"] lod_lim = config["lod_limit"] lod_diff = config["lod_difference"] +js2a_extra = config["extra_params_JoinSingles"] # ordering # lg_range = list(range(1, config["exp_lg"]+1)) lg_count = config["exp_lg"] ITER = config["iterations"] phasenum = config["phase_iterations"] order_extra = config["extra_params_OrderMarkers"] -reorder_extra = config["extra_params_reOrderMarkers"] # trimming # edge_len = str(config["edge_length"]) trim_thresh = str(config["trim_cutoff"]) +# ordering II # +reorder_extra = config["extra_params_reOrderMarkers"] include: "prepare_data.smk" include: "generate_map.smk" diff --git a/rules/generate_map.smk b/rules/generate_map.smk index c2496da..1adb2cb 100644 --- a/rules/generate_map.smk +++ b/rules/generate_map.smk @@ -6,10 +6,10 @@ rule separate_chromosomes: threads: 30 params: lod = "{lod_range}", - dist_lod = "distortionLod=1", + extra = sepchrom_extra, shell: """ - zcat {input} | java -cp software/LepMap3 SeparateChromosomes2 data=- sizeLimit=5 {informative} lodLimit={params.lod} {params.dist_lod} numThreads={threads} > {output} 2> {log} + zcat {input} | java -cp software/LepMap3 SeparateChromosomes2 data=- {params.extra} {informative} lodLimit={params.lod} numThreads={threads} > {output} 2> {log} """ rule map_summary: @@ -30,7 +30,7 @@ rule join_singles: run_js2all = joinsingles, lod_limit = lod_lim, lod_diff = lod_diff, - iterate = "iterate=1", + extra = js2a_extra shell: """ echo -n -e '\nWhich map would you like to use (e.g. LOD.15)? LOD.' @@ -39,7 +39,7 @@ rule join_singles: echo "A record of your choice can be found in {log}" JS2A=$(echo {params.run_js2all} | tr '[:upper:]' '[:lower:]') if [ $JS2A == "true" ]; then - zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/LOD.$REPLY data=- {params.lod_limit} {params.lod_diff} {params.iterate} numThreads={threads} > {output} + zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/LOD.$REPLY data=- {params.extra} {params.lod_limit} {params.lod_diff} numThreads={threads} > {output} else echo -e "\nSkipping JoinSingles2All and creating a symlink instead" ln -sr 3_SeparateChromosomes/LOD.$REPLY {output} diff --git a/rules/prepare_data.smk b/rules/prepare_data.smk index 02e8cc5..68d4a5d 100644 --- a/rules/prepare_data.smk +++ b/rules/prepare_data.smk @@ -5,20 +5,24 @@ rule parent_call: output: "1_ParentCall/data.lepmap3.gz" message: "Creating Lep-Map3 data file from {input.vcf} and {input.pedigree}" + params: + extra = parentcall_extra shell: - "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} removeNonInformative=1 | gzip > {output}" + "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} {params} | gzip > {output}" rule filtering: input: "1_ParentCall/data.lepmap3.gz" output: "2_Filtering/data.filtered.lepmap3.gz" message: "Filtering {input}" params: - data_tolerance = data_tol + data_tolerance = data_tol, + extra = filtering_extra shell: """ - if [ {params} == 0 ]; then + if [ {params.data_tolerance} == 0 ]; then + echo "Skipping Filtering2 and creating symlink {output} instead" ln -sr {input} {output} else - zcat {input} | java -cp software/LepMap3 Filtering2 data=- dataTolerance={params} | gzip > {output} + zcat {input} | java -cp software/LepMap3 Filtering2 data=- dataTolerance={params.data_tolerance} {params.extra} | gzip > {output} fi """ From 42e56cfa121df97be10635df8f067d87bf0fcb49 Mon Sep 17 00:00:00 2001 From: "Pavel V. Dimens" Date: Sat, 29 May 2021 13:31:57 -0400 Subject: [PATCH 06/27] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 13cde6c..26db42f 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,11 @@ where `` is an integer of the maximum number of cores/threads y ### Something to keep in mind -Lep-Map3 is a **very** comprehensive software, and LepWrap doesn't incorporate all the features and nuances. Your study is unique, so you are encouraged to clone or fork this repo and adapt LepWrap to your needs! All of the code in LepWrap is written in human-readable bash or aggressively annotated R, so give it a shot and adapt it to your workflow. If using LepWrap in a publication, cite **Pasi Rastas** for his work on Lep-Map3 and please include a link to this repository. If you like using it, give me (Pavel) a shout out on Twitter [@pvdimens](https://twitter.com/PVDimens) [![alt text](http://i.imgur.com/wWzX9uB.png)](https://twitter.com/PVDimens) =) +Lep-Map3 is a **very** comprehensive software, and LepWrap doesn't incorporate all the features and nuances. Your study is unique, so you are encouraged to clone or fork this repo and adapt LepWrap to your needs! All of the code in LepWrap is written in human-readable bash or aggressively annotated R, so give it a shot and adapt it to your workflow. If using LepWrap in a publication, cite **Pasi Rastas** for their work on Lep-Map3/Lep-Anchor and please include a link to this repository. If you like using it, give me (Pavel) a shout out on Twitter [@pvdimens](https://twitter.com/PVDimens) [![alt text](http://i.imgur.com/wWzX9uB.png)](https://twitter.com/PVDimens) =) ## Citation - Pasi Rastas, Lep-MAP3: robust linkage mapping even for low-coverage whole genome sequencing data, Bioinformatics, Volume 33, Issue 23, 01 December 2017, Pages 3726–3732,https://doi.org/10.1093/bioinformatics/btx494 + +Pasi Rastas, Lep-Anchor: automated construction of linkage map anchored haploid genomes, Bioinformatics, Volume 36, Issue 8, 15 April 2020, Pages 2359–2364, https://doi.org/10.1093/bioinformatics/btz978 From 63f0a9d6248341fc82458cb9821ee9ebdc1fa89d Mon Sep 17 00:00:00 2001 From: "Pavel V. Dimens" Date: Sat, 29 May 2021 13:36:16 -0400 Subject: [PATCH 07/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26db42f..dd02616 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ git clone https://github.com/pdimens/LepWrap.git Assuming you have `anaconda` or `miniconda` installed: ```bash cd LepWrap -conda create -f conda_LepWrap.yml +conda env create -f conda_setup.yml ``` This will create an environment called `lepwrap` that can be activated with: ```bash From f70706f93860acb2b6493540b61e308bb44d4947 Mon Sep 17 00:00:00 2001 From: "Pavel V. Dimens" Date: Sat, 29 May 2021 13:45:46 -0400 Subject: [PATCH 08/27] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dd02616..cae9931 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![logo](.misc/logo.png) -_It's Lep-Map3, but with snakes_ +_It's Lep-Map3, but with snakes 🐍🐍_ [![alt text](https://img.shields.io/badge/docs-wiki-75ae6c?style=for-the-badge&logo=Read%20The%20Docs)](https://github.com/pdimens/LepWrap/wiki) @@ -11,7 +11,7 @@ LepWrap is a reusable pipeline to use the linkage map software [Lep-Map3](https: ### How to install -You will need a `conda` installation (Anaconda or Miniconda), along with cloning this repository locally. +You will need a `conda` installation ([Anaconda](https://docs.anaconda.com/anaconda/install/) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)), along with cloning this repository locally. I recommend Miniconda. #### 1. Cloning LepWrap Download a zip of this repository using the "Code" button on the top-right and unzip it on your machine or: @@ -38,12 +38,12 @@ You will need to modify `config.yaml` to suit your needs, then you can simply ru where `` is an integer of the maximum number of cores/threads you want the pipeline to use. ### Something to keep in mind - -Lep-Map3 is a **very** comprehensive software, and LepWrap doesn't incorporate all the features and nuances. Your study is unique, so you are encouraged to clone or fork this repo and adapt LepWrap to your needs! All of the code in LepWrap is written in human-readable bash or aggressively annotated R, so give it a shot and adapt it to your workflow. If using LepWrap in a publication, cite **Pasi Rastas** for their work on Lep-Map3/Lep-Anchor and please include a link to this repository. If you like using it, give me (Pavel) a shout out on Twitter [@pvdimens](https://twitter.com/PVDimens) [![alt text](http://i.imgur.com/wWzX9uB.png)](https://twitter.com/PVDimens) =) - +LepWrap does things a certain way, employing the most common/reasonable way of using Lep-Map3 (and LepAnchor more or less). Version `3.2+` is **a lot** more flexible that its predecessors, but might still lack something you're looking for. Your study is unique, and I encourage youto clone/fork this repository and adapt LepWrap to your needs! All of the code in LepWrap is written in human-readable bash or aggressively annotated R, so give it a shot and adapt it to your workflow. PR's always welcome! ## Citation -Pasi Rastas, Lep-MAP3: robust linkage mapping even for low-coverage whole genome sequencing data, Bioinformatics, Volume 33, Issue 23, 01 December 2017, Pages 3726–3732,https://doi.org/10.1093/bioinformatics/btx494 +If using LepWrap in a publication, cite **Pasi Rastas** for their work on Lep-Map3/Lep-Anchor and please include a link to this repository. If you like using it, give me (Pavel) a shout out on Twitter [@pvdimens](https://twitter.com/PVDimens) [![alt text](http://i.imgur.com/wWzX9uB.png)](https://twitter.com/PVDimens) =) + +> Pasi Rastas, Lep-MAP3: robust linkage mapping even for low-coverage whole genome sequencing data, Bioinformatics, Volume 33, Issue 23, 01 December 2017, Pages 3726–3732,https://doi.org/10.1093/bioinformatics/btx494 -Pasi Rastas, Lep-Anchor: automated construction of linkage map anchored haploid genomes, Bioinformatics, Volume 36, Issue 8, 15 April 2020, Pages 2359–2364, https://doi.org/10.1093/bioinformatics/btz978 +> Pasi Rastas, Lep-Anchor: automated construction of linkage map anchored haploid genomes, Bioinformatics, Volume 36, Issue 8, 15 April 2020, Pages 2359–2364, https://doi.org/10.1093/bioinformatics/btz978 From 6806512c95b55d38f61bc38ed9a2e62a18ed8284 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sun, 30 May 2021 13:50:00 -0400 Subject: [PATCH 09/27] cupdate params, LA folders, messages --- config.yaml | 18 ++++++--- rules/LepAnchor.smk | 70 +++++++++++++++++----------------- rules/LepMap3.smk | 3 +- rules/distances.smk | 9 +++-- rules/order.smk | 20 +++++----- rules/prepare_data.smk | 6 +-- rules/reorder.smk | 22 +++++------ rules/trim.smk | 7 ++-- scripts/LepWrapTrim.r | 27 ++++++++++--- scripts/RecombinationSummary.r | 2 + 10 files changed, 101 insertions(+), 83 deletions(-) diff --git a/config.yaml b/config.yaml index 4108c83..1733a1e 100644 --- a/config.yaml +++ b/config.yaml @@ -84,12 +84,11 @@ extra_params_OrderMarkers: "useKosambi=1 phasingIterations=2" #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group # and remove clusters that are N% centimorgans (of the total cM span) away from -# the next marker. You can "skip" trimming by making edge_length really low (e.g. 1) -# and trim_cutoff really high (e.g. 80-100). +# the next marker. You can "skip" trimming by setting trim_cutoff really high (e.g. 80-100). # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group # Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" (10-20 is reasonable) -edge_length: 1 +edge_length: 20 # Set trim_cuttoff to the centiMorgan distance cutoff (5 is reasonable) trim_cutoff: 100 @@ -103,6 +102,14 @@ trim_cutoff: 100 extra_params_reOrderMarkers: "useKosambi=1" +#-----------------------# +# Calculate Distances # +#-----------------------# +# If you used useKosambi=1 or useMorgan=1 for Ordering/reOrdering, add that same +# parameter to distance_method: +distance_method: "" + + #################### #### Lep-Anchor #### #################### @@ -137,11 +144,10 @@ OS_info: "Ubuntu" #-----------------# # Edge trimming will examine the first and last X% of markers in a linkage group # and remove clusters that are N% centimorgans (of the total cM span) away from -# the next marker. You can "skip" trimming by making edge_length really low (e.g. 1) -# and trim_cutoff really high (e.g. 80-100) +# the next marker. You can "skip" trimming by setting LA_trim_cutoff really high (e.g. 80-100) # Set edge_length to the percent number of markers you would like to examine from either end of the linkage group -# Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" +# Value can be an integer or decimal, i.e. 15 is the same as 0.15, which both mean "15%" (10-15 is reasonable) LA_edge_length: 20 # Set trim_cuttoff to the centiMorgan distance cutoff (5 is reasonable) diff --git a/rules/LepAnchor.smk b/rules/LepAnchor.smk index 6a6c666..3dac84c 100644 --- a/rules/LepAnchor.smk +++ b/rules/LepAnchor.smk @@ -18,23 +18,21 @@ rule all: scaff = "12_Fasta/Anchored.scaffolds.fa.gz", fastaonly = "12_Fasta/Anchored.contigs.only.fa.gz", scaffonly = "12_Fasta/Anchored.scaffolds.only.fa.gz", - mareydata = "13_MareyMaps/data.marey.gz", - mareymaps = "13_MareyMaps/LepAnchor.mareymaps.pdf", - trimmedmareymaps = "15_TrimNewIntervals/LepAnchor.mareymaps.pdf", - trimsummary = "15_TrimNewIntervals/LA.trim.summary.pdf" + mareydata = "13_MareyMapsUntrimmed/data.marey.gz", + mareymaps = "13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", + trimmedmareymaps = "16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", + trimsummary = "15_Trim/LA.trim.summary.pdf" message: """ Lep-Anchor has finished. Good luck with the rest of your analyses! - Output Files: - ============= - contig fasta file | {input.fasta} - contigs-only fasta | {input.fastaonly} - scaffold fasta file | {input.scaff} - scaffolds-only fasta | {input.scaffonly} - converted linakge maps | {input.mareydata} - untrimmed marey maps | {input.mareymaps} - interval trimming summary | {input.trimsummary} - trimmed marey maps | {input.trimmedmareymaps} + + Output Files Location + ==================================================== + anchored assemblies | 12_Fasta/ + untrimmed marey maps | 13_MareyMapsUntrimmed/ + updated linkage maps | 14_NewIntervals/ + trimmed linkage maps | 15_Trim/ + trimmed marey maps | 16_MareyMapsTrimmed/ """ rule repeatmask: @@ -404,12 +402,13 @@ rule mareymap_data: lift = "10_Anchoring/liftover.la", agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) output: - mareydata = "13_MareyMaps/data.marey.gz", - sexavg = "13_MareyMaps/data.marey.sexavg.gz" - log: report("13_MareyMaps/missing_scaffolds.txt", category = "Logs") + mareydata = "13_MareyMapsUntrimmed/data.marey.gz", + sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz" + log: report("13_MareyMapsUntrimmed/missing_scaffolds.txt", category = "Logs") message: """ - Creating Marey map interval data + Creating Marey map interval data: + first points in uncertainty intervals | {output.mareydata} midpoints in uncertainty intervals | {output.sexavg} """ @@ -430,15 +429,15 @@ rule mareymap_data: rule mareymaps: input: - data = "13_MareyMaps/data.marey.gz", - sexavg = "13_MareyMaps/data.marey.sexavg.gz", + data = "13_MareyMapsUntrimmed/data.marey.gz", + sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz", agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) output: - indiv_plots = report(expand("13_MareyMaps/LG.{lgs}.mareymap.png", lgs = lg_range), category = "Marey Maps"), - summary = report("13_MareyMaps/LepAnchor.mareymaps.pdf", category = "Marey Maps") , - sequential = report("13_MareyMaps/LepAnchor.sequentialmaps.pdf", category = "Sequential Maps"), - SAsummary = report("13_MareyMaps/LepAnchor.sexavg.mareymaps.pdf", category = "Marey Maps Sex Avg"), - SAsequential = report("13_MareyMaps/LepAnchor.sexavg.sequentialmaps.pdf", category = "Sequential Maps Sex Avg") + indiv_plots = report(expand("13_MareyMapsUntrimmed/LG.{lgs}.mareymap.png", lgs = lg_range), category = "Marey Maps"), + summary = report("13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", category = "Marey Maps") , + sequential = report("13_MareyMapsUntrimmed/LepAnchor.sequentialmaps.pdf", category = "Sequential Maps"), + SAsummary = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.mareymaps.pdf", category = "Marey Maps Sex Avg"), + SAsequential = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.sequentialmaps.pdf", category = "Sequential Maps Sex Avg") message: "Creating Marey Maps" shell: """ @@ -448,7 +447,7 @@ rule mareymaps: """ rule generate_updated_intervals: - input: "13_MareyMaps/data.marey.gz" + input: "13_MareyMapsUntrimmed/data.marey.gz" output: "14_NewIntervals/LA.intervals.{lg_range}" message: "Splitting out LG {params.chrom} from {input}" params: @@ -461,28 +460,27 @@ rule generate_updated_intervals: rule trim_newintervals: input: "14_NewIntervals/LA.intervals.{lg_range}" output: - outfile = "15_TrimNewIntervals/LA.intervals.{lg_range}.trimmed", - plot = "15_TrimNewIntervals/plots/LA.intervals.{lg_range}.trim.pdf" + outfile = "15_Trim/LA.intervals.{lg_range}.trimmed", + plot = "15_Trim/plots/LA.intervals.{lg_range}.trim.pdf" message: "Trimming edge clusters for {input}" params: edge = edgelen, dist = trimdist - shell: "Rscript scripts/LATrim.r {input} {params.dist} {params.edge} 15_TrimNewIntervals" + shell: "Rscript scripts/LATrim.r {input} {params.dist} {params.edge} 15_Trim" rule merge_trimplots: - input: expand("15_TrimNewIntervals/plots/LA.intervals.{lg}.trim.pdf", lg = lg_range) - output: "15_TrimNewIntervals/LA.trim.summary.pdf" + input: expand("15_Trim/plots/LA.intervals.{lg}.trim.pdf", lg = lg_range) + output: "15_Trim/LA.trim.summary.pdf" message: "Merging trimming plots into {output}" shell: "convert -density 200 {input} {output}" - rule merge_trimmedintervals: - input: expand("15_TrimNewIntervals/LA.intervals.{lg}.trimmed", lg = lg_range) - output: "15_TrimNewIntervals/data.marey.trimmed.gz" + input: expand("15_Trim/LA.intervals.{lg}.trimmed", lg = lg_range) + output: "15_Trim/data.marey.trimmed.gz" message: "Concatenating trimmed intervals to {output}" shell: "cat {input} | gzip -c > {output}" rule plot_trimmedintervals: - input: "15_TrimNewIntervals/data.marey.trimmed.gz" - output: report("15_TrimNewIntervals/LepAnchor.mareymaps.pdf", category = "Trimmed Marey Maps") + input: "16_MareyMapsTrimmed/data.marey.trimmed.gz" + output: report("16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", category = "Trimmed Marey Maps") shell: "Rscript scripts/LASummary.r {input}" \ No newline at end of file diff --git a/rules/LepMap3.smk b/rules/LepMap3.smk index 5c18d93..b23d268 100644 --- a/rules/LepMap3.smk +++ b/rules/LepMap3.smk @@ -25,13 +25,14 @@ js2a_extra = config["extra_params_JoinSingles"] lg_range = list(range(1, config["exp_lg"]+1)) lg_count = config["exp_lg"] ITER = config["iterations"] -phasenum = config["phase_iterations"] order_extra = config["extra_params_OrderMarkers"] # trimming # edge_len = str(config["edge_length"]) trim_thresh = str(config["trim_cutoff"]) # ordering II # reorder_extra = config["extra_params_reOrderMarkers"] +# distances # +dist_method = config["distance_method"] include: "prepare_data.smk" include: "generate_map.smk" diff --git a/rules/distances.smk b/rules/distances.smk index 352bbb0..eb9b347 100644 --- a/rules/distances.smk +++ b/rules/distances.smk @@ -5,6 +5,7 @@ rule calculate_distances: output: distance = "7_Distances/ordered.{lg_range}.distances", sex_averaged = "7_DistancesSexAverage/ordered.{lg_range}.sexavg", + sex_averagedtmp = temp("7_DistancesSexAverage/.ordered.{lg_range}.sexavg"), intervals = "7_Intervals/ordered.{lg_range}.intervals" message: "Calculating marker distances and intervals for linkage group: {params.lg}" log: @@ -18,10 +19,10 @@ rule calculate_distances: """ cp {input.lg} {output.distance} - zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {log.sex_averaged}.tmp - sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {log.sex_averaged}.tmp - sed -n '/\*\*\* LG \=/,$p' {log.sex_averaged}.tmp > {output.sex_averaged} - awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {log.sex_averaged}.tmp > {log.sex_averaged} && rm {log.sex_averaged}.tmp + zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {log.sex_averagedtmp} + sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {log.sex_averagedtmp} + sed -n '/\*\*\* LG \=/,$p' {log.sex_averagedtmp} > {output.sex_averaged} + awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {log.sex_averagedtmp} > {log.sex_averaged} zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} calculateIntervals={output.intervals} > {log.intervals} 2>&1 """ \ No newline at end of file diff --git a/rules/order.smk b/rules/order.smk index d58940b..cc47f0e 100644 --- a/rules/order.smk +++ b/rules/order.smk @@ -4,30 +4,28 @@ rule order_markers: filt_map = "LOD.master" output: "4_OrderMarkers/ordered.{lg_range}" log: + runlog = temp("4_OrderMarkers/logs/ordered.{lg_range}.running"), run = "4_OrderMarkers/logs/ordered.{lg_range}.log", recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" message: "Ordering the markers with {params.dist_method} on linkage group {params.chrom}" params: chrom = "{lg_range}", iterations = ITER, - phase = phasenum, extra = order_extra threads: 2 shell: """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} {params.extra} data=- numThreads={threads} numMergeIterations={params.iterations} chromosome={params.chrom} &> {log.run}.tmp - sed -n '/\*\*\* LG \=/,$p' {log.run}.tmp > {output} - grep "recombin" {log.run}.tmp > {log.recomb} - awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.run}.tmp > {log.run} && rm {log.run}.tmp + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} {params.extra} data=- numThreads={threads} numMergeIterations={params.iterations} chromosome={params.chrom} &> {log.runlog} + sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} + grep "recombin" {log.runlog} > {log.recomb} + awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} """ rule recomb_summary: - input: - expand("4_OrderMarkers/ordered.{lg}", lg = lg_range) - output: - recomb = "4_OrderMarkers/recombination/recombination.summary" - message: "Recombination summary: {output.recomb}" + input: expand("4_OrderMarkers/ordered.{lg}", lg = lg_range) + output: "4_OrderMarkers/recombination/recombination.summary" + message: "Recombination summary: {output}" shell: """ - Rscript scripts/RecombinationSummary.r 4_OrderMarkers/recombination + Rscript scripts/RecombinationSummary.r 4_OrderMarkers/recombination > {output} """ \ No newline at end of file diff --git a/rules/prepare_data.smk b/rules/prepare_data.smk index 68d4a5d..fa7b5b9 100644 --- a/rules/prepare_data.smk +++ b/rules/prepare_data.smk @@ -2,13 +2,11 @@ rule parent_call: input: vcf = vcf, pedigree = pedigree - output: - "1_ParentCall/data.lepmap3.gz" + output: "1_ParentCall/data.lepmap3.gz" message: "Creating Lep-Map3 data file from {input.vcf} and {input.pedigree}" params: extra = parentcall_extra - shell: - "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} {params} | gzip > {output}" + shell: "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} {params} | gzip > {output}" rule filtering: input: "1_ParentCall/data.lepmap3.gz" diff --git a/rules/reorder.smk b/rules/reorder.smk index 62a41ed..2477367 100644 --- a/rules/reorder.smk +++ b/rules/reorder.smk @@ -3,9 +3,9 @@ rule reorder_markers: datacall = "2_Filtering/data.filtered.lepmap3.gz", filt_map = "LOD.master", lg_order = "5_Trim/ordered.{lg_range}.trimmed" - output: - "6_OrderMarkers/ordered.{lg_range}" + output: "6_OrderMarkers/ordered.{lg_range}" log: + runlog = temp("6_OrderMarkers/logs/ordered.{lg_range}.running"), run = "6_OrderMarkers/logs/ordered.{lg_range}.log", recomb = "6_OrderMarkers/recombination/ordered.{lg_range}.recombination" message: "Reordering linkage group {params.lg} with {params.iterations} iterations" @@ -16,19 +16,17 @@ rule reorder_markers: threads: 2 shell: """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 {params.extra} map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} numMergeIterations={params.iterations} &> {log.run}.tmp - sed -n '/\*\*\* LG \=/,$p' {log.run}.tmp > {output} - grep "recombin" {log.run}.tmp > {log.recomb} - awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.run}.tmp > {log.run} && rm {log.run}.tmp + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 {params.extra} map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} numMergeIterations={params.iterations} &> {log.runlog} + sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} + grep "recombin" {log.runlog} > {log.recomb} + awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} """ rule reorder_summary: - input: - expand("6_OrderMarkers/ordered.{lg}", lg = lg_range) - output: - recomb = "6_OrderMarkers/recombination/recombination.summary" - message: "Recombination summary of reordering: {output.recomb}" + input: expand("6_OrderMarkers/ordered.{lg}", lg = lg_range) + output: "6_OrderMarkers/recombination/recombination.summary" + message: "Recombination summary of reordering: {output}" shell: """ - Rscript scripts/RecombinationSummary.r 6_OrderMarkers/recombination + Rscript scripts/RecombinationSummary.r 6_OrderMarkers/recombination > {output} """ \ No newline at end of file diff --git a/rules/trim.smk b/rules/trim.smk index b2295eb..7f122c1 100644 --- a/rules/trim.smk +++ b/rules/trim.smk @@ -7,10 +7,10 @@ rule trim_edge_clusters: params: trim_threshold = trim_thresh, edge_length = edge_len - message: "Removing edge clusters >{params.trim_threshold}cM apart from the other markers at the ends of {input}" + message: "Removing edge clusters >{params.trim_threshold}%cM apart from the other markers at the ends of {input}" shell: """ - Rscript scripts/LepWrapTrim.r {input} {params.trim_threshold} {params.edge_length} + Rscript scripts/LepWrapTrim.r {input} {params.trim_threshold} {params.edge_length} 5_Trim """ rule trim_summary: @@ -31,9 +31,8 @@ rule trim_summary: """ for each in 5_Trim/logs/ordered.*.removed ; do BASE=$(basename $each | cut -d "." -f1,2) - sed -e "s/^/$BASE /" $each >> {output.detailed}.tmp + sed -e "s/^/$BASE /" $each done | sort -V > {output.detailed} - #sort -V {output.detailed}.tmp >> {output.detailed} && rm {output.detailed}.tmp scripts/TrimCounts.r {output.detailed} {params.lg} > {output.summary} scripts/TrimSummaryPlot.r {output.summary} echo "Merging QC plots for all linkage groups" diff --git a/scripts/LepWrapTrim.r b/scripts/LepWrapTrim.r index 4b9ee3a..9d4a408 100755 --- a/scripts/LepWrapTrim.r +++ b/scripts/LepWrapTrim.r @@ -6,6 +6,7 @@ args <- commandArgs(trailingOnly = TRUE) # args[1] is the OrderMarkers2 output file # args[2] is the centimorgan cutoff threshold # args[3] is the % of edge markers to scan +# args[4] is the output directory lgfile <- read.delim( args[1], @@ -23,10 +24,17 @@ filename <- filename[length(filename)] lg <- unlist(strsplit(filename, "\\."))[2] #========= output instantiation ========# -outfile_base <- paste("5_Trim", filename, sep = "/") -outfile_log_base <- paste("5_Trim", "logs", filename, sep = "/") -plotfile_base <- paste("5_Trim", "plots", filename, sep = "/") +dir.create(args[4], showWarnings = FALSE) +dir.create(paste0(args[4],"/plots"), showWarnings = FALSE) +dir.create(paste0(args[4],"/logs"), showWarnings = FALSE) +dir.create(paste0(args[4],"/QC_raw"), showWarnings = FALSE) +outfile_base <- paste(args[4], filename, sep = "/") +outfile_log_base <- paste(args[4], "logs", filename, sep = "/") +plotfile_base <- paste(args[4], "plots", filename, sep = "/") plotfile <- paste(plotfile_base, "trim.pdf", sep = ".") +rawfile_base <- paste(args[4], "QC_raw", filename, sep = "/") + + ##### Pruning the ends ##### # if the percent threshold is given as an interger, convert it to a decimal @@ -102,7 +110,8 @@ QAfix <- function (x,y){ } } - +pdf(NULL) + plot_df <- lgfile %>% rename(Male = V2, Female = V3) %>% arrange(Male) %>% @@ -133,7 +142,6 @@ plot_df %>% suppressMessages(ggsave(plotfile, width = 7, height = 4, units = "in")) # outputting filtered files -num_rm <- length(removed_markers) writeLines(readLines(args[1], n=3), con = paste(outfile_base, "trimmed", sep = ".")) write.table( @@ -146,6 +154,15 @@ write.table( append=TRUE ) +write.table( + lgfile, + file = paste(rawfile_base, "filtered.raw", sep = "."), + sep = "\t", + quote = FALSE, + row.names = FALSE, + col.names = FALSE, +) + write.table( removed_markers, file=paste(outfile_log_base, "removed", sep = "."), diff --git a/scripts/RecombinationSummary.r b/scripts/RecombinationSummary.r index cf515b8..9fa0695 100755 --- a/scripts/RecombinationSummary.r +++ b/scripts/RecombinationSummary.r @@ -27,6 +27,8 @@ for (i in files[2:length(files)]){ outfile <- paste(args[1], "recombination.summary", sep = "/") +print(recomb_df, row.names = FALSE) +q() write.table( recomb_df, file=outfile, From 4ee6d2e1505e958c87b6ae7ba22210c366218b46 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sun, 30 May 2021 14:46:38 -0400 Subject: [PATCH 10/27] cfix distances rue --- rules/LepAnchor.smk | 3 ++- rules/distances.smk | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/rules/LepAnchor.smk b/rules/LepAnchor.smk index 3dac84c..bc4d185 100644 --- a/rules/LepAnchor.smk +++ b/rules/LepAnchor.smk @@ -21,6 +21,7 @@ rule all: mareydata = "13_MareyMapsUntrimmed/data.marey.gz", mareymaps = "13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", trimmedmareymaps = "16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", + trimmedmareydata= "16_MareyMapsTrimmed/data.marey.trimmed.gz", trimsummary = "15_Trim/LA.trim.summary.pdf" message: """ @@ -476,7 +477,7 @@ rule merge_trimplots: rule merge_trimmedintervals: input: expand("15_Trim/LA.intervals.{lg}.trimmed", lg = lg_range) - output: "15_Trim/data.marey.trimmed.gz" + output: "16_MareyMapsTrimmed/data.marey.trimmed.gz" message: "Concatenating trimmed intervals to {output}" shell: "cat {input} | gzip -c > {output}" diff --git a/rules/distances.smk b/rules/distances.smk index eb9b347..ef94e55 100644 --- a/rules/distances.smk +++ b/rules/distances.smk @@ -5,7 +5,7 @@ rule calculate_distances: output: distance = "7_Distances/ordered.{lg_range}.distances", sex_averaged = "7_DistancesSexAverage/ordered.{lg_range}.sexavg", - sex_averagedtmp = temp("7_DistancesSexAverage/.ordered.{lg_range}.sexavg"), + sex_averagedtmp = temp("7_DistancesSexAverage/logs/.ordered.{lg_range}.sexavg"), intervals = "7_Intervals/ordered.{lg_range}.intervals" message: "Calculating marker distances and intervals for linkage group: {params.lg}" log: @@ -19,10 +19,10 @@ rule calculate_distances: """ cp {input.lg} {output.distance} - zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {log.sex_averagedtmp} - sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {log.sex_averagedtmp} - sed -n '/\*\*\* LG \=/,$p' {log.sex_averagedtmp} > {output.sex_averaged} - awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {log.sex_averagedtmp} > {log.sex_averaged} + zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {output.sex_averagedtmp} + sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {output.sex_averagedtmp} + sed -n '/\*\*\* LG \=/,$p' {output.sex_averagedtmp} > {output.sex_averaged} + awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {output.sex_averagedtmp} > {log.sex_averaged} zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} calculateIntervals={output.intervals} > {log.intervals} 2>&1 """ \ No newline at end of file From 0584ecd6d4a587eac037807d2ead1c55e6368ef2 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Sun, 30 May 2021 15:05:20 -0400 Subject: [PATCH 11/27] add LA extra parameters --- config.yaml | 25 +++++++++++++++++++++++-- rules/LAtest.smk | 9 --------- rules/LepAnchor.smk | 22 ++++++++++++++++------ 3 files changed, 39 insertions(+), 17 deletions(-) delete mode 100644 rules/LAtest.smk diff --git a/config.yaml b/config.yaml index 1733a1e..7b8cd2d 100644 --- a/config.yaml +++ b/config.yaml @@ -76,7 +76,7 @@ exp_lg: 24 iterations: 100 # If there are any additional parameters you would like to use for OrderMarkers2 (e.g. hyperPhaser=1), add them here -extra_params_OrderMarkers: "useKosambi=1 phasingIterations=2" +extra_params_OrderMarkers: "hyperPhaser=1 useKosambi=1 phasingIterations=2" #-----------------# @@ -99,7 +99,7 @@ trim_cutoff: 100 #--------------------# # The second round of OrderMarkers will use the same basic parameters as the first round (but not the extra params) # If there are additional parameters you would like to use, add them here: -extra_params_reOrderMarkers: "useKosambi=1" +extra_params_reOrderMarkers: "randomPhase=1 improveOrder=1 useKosambi=1" #-----------------------# @@ -139,6 +139,27 @@ OS_info: "Ubuntu" #OS_info: "CentOS6" +#------------# +# CleanMap # +#------------# +# If there are any additional parameters you would like to use for CleanMap (e.g. chimericDistance=500), add them here +extra_params_CleanMap: "" + + +#-----------# +# Map2Bed # +#-----------# +# If there are any additional parameters you would like to use for Map2Bed (e.g. markerSupport=4), add them here +extra_params_Map2Bed: "" + + +#-------------------------# +# PlaceAndOrientContigs # +#-------------------------# +# If there are any additional parameters you would like to use for PlaceAndOrientContigs (e.g. randomOrder=1), add them here +extra_params_PlaceOrient: "keepEmptyIntervals=1 numRuns=10" + + #-----------------# # Edge Trimming # #-----------------# diff --git a/rules/LAtest.smk b/rules/LAtest.smk deleted file mode 100644 index 97b746b..0000000 --- a/rules/LAtest.smk +++ /dev/null @@ -1,9 +0,0 @@ -rule validation: - input: - output: - message: - threads: 30 - shell: - """ - awk -f software/LepAnchor/scripts/liftover.awk chr1.agp order1.input | sort -V | grep CHR > order1.liftover - """ diff --git a/rules/LepAnchor.smk b/rules/LepAnchor.smk index bc4d185..5887124 100644 --- a/rules/LepAnchor.smk +++ b/rules/LepAnchor.smk @@ -9,6 +9,9 @@ proximity = config["proximity_file"] lg = config["lg_count"] lg_range = list(range(1,lg+1)) os_name = config["OS_info"] +map2bed_extra = config["extra_params_Map2Bed"] +cleanmap_extra = config["extra_params_CleanMap"] +place_orient_extra = config["extra_params_PlaceOrient"] edgelen = config["LA_edge_length"] trimdist = config["LA_trim_cutoff"] @@ -189,7 +192,9 @@ rule cleanmap: output: "10_Anchoring/map_all.clean" log: report("10_Anchoring/cleamap.log", category = "Logs") message: "Running CleanMap" - shell: "java -cp software/LepAnchor CleanMap map={input} > {output} 2> {log}" + params: + extras = cleanmap_extra + shell: "java -cp software/LepAnchor CleanMap map={input} {params.extras} > {output} 2> {log}" rule map2bed: input: @@ -198,7 +203,9 @@ rule map2bed: output: "10_Anchoring/map.bed" log: report("10_Anchoring/map2bed.log", category = "Logs") message: "Running Map2Bed" - shell: "java -cp software/LepAnchor Map2Bed map={input.cleanmap} contigLength={input.lengths} > {output} 2> {log}" + params: + extras = map2bed_extra + shell: "java -cp software/LepAnchor Map2Bed map={input.cleanmap} contigLength={input.lengths} {params.extras} > {output} 2> {log}" rule ungrouped: input: @@ -229,11 +236,13 @@ rule place_orient: log: chrom = report("10_Anchoring/orient_1/logs/chr.{lg_range}.la.err", category = "Anchoring I Logs") params: - chrom = "{lg_range}" + chrom = "{lg_range}", + extras = place_orient_extra + threads: 3 message: "Running PlaceAndOrientContigs for linkage group {params.chrom}" shell: """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} keepEmptyIntervals=1 > {output} 2> {log} + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.extras} > {output} 2> {log} """ rule propogate: @@ -275,11 +284,12 @@ rule place_orient2: log: chrom = report("10_Anchoring/orient_2/logs/ichr.{lg_range}.la.err", category = "Anchoring II Logs") params: - chrom = "{lg_range}" + chrom = "{lg_range}", + extras = place_orient_extra message: "Running a second iteration of PlaceAndOrientContigs for linkage group {params.chrom}" shell: """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} keepEmptyIntervals=1 > {output.chrom} 2> {log.chrom} + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.extras} > {output.chrom} 2> {log.chrom} """ rule prune: From 375b31a90592f8f90434594aa856ae80eda16629 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 11:37:56 -0400 Subject: [PATCH 12/27] scale trimming to zero --- scripts/LATrim.r | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/LATrim.r b/scripts/LATrim.r index d43110b..848e32e 100755 --- a/scripts/LATrim.r +++ b/scripts/LATrim.r @@ -83,6 +83,9 @@ for (j in 5:6){ # iterate over male (5) and female (6) # create new table of markers passing QC cleaned_markers <- (lgfile %>% filter(Mpass == "PASS" & Fpass == "PASS"))[,1:6] +# re-scale cleaned markers to 0 by subtracting the minimum genetic position +cleaned_markers <- cleaned_markers %>% + mutate(V5 = V5 - min(V5), V6 = V6 - min(V6)) # isolate bad markers removed_markers <- (lgfile %>% filter(Mpass == "FAIL" | Fpass == "FAIL"))[,1:6] From bd44389f76fc9be8519ee7bdc3e33a15348d56c8 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:24:37 -0400 Subject: [PATCH 13/27] organization and cleanup --- .gitignore | 20 ++- rules/LA_extra.smk | 11 ++ rules/LepAnchor.smk | 250 ++++++++++++++++++++++++--------- rules/LepMap3/LepMap3.smk | 61 ++++++++ rules/LepMap3/distances.smk | 28 ++++ rules/LepMap3/generate_map.smk | 48 +++++++ rules/LepMap3/order.smk | 31 ++++ rules/LepMap3/prepare_data.smk | 26 ++++ rules/LepMap3/reorder.smk | 32 +++++ rules/LepMap3/trim.smk | 40 ++++++ 10 files changed, 475 insertions(+), 72 deletions(-) create mode 100644 rules/LA_extra.smk create mode 100644 rules/LepMap3/LepMap3.smk create mode 100644 rules/LepMap3/distances.smk create mode 100644 rules/LepMap3/generate_map.smk create mode 100644 rules/LepMap3/order.smk create mode 100644 rules/LepMap3/prepare_data.smk create mode 100644 rules/LepMap3/reorder.smk create mode 100644 rules/LepMap3/trim.smk diff --git a/.gitignore b/.gitignore index 04203ea..d9d607c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -/.snakemake .vscode +/.snakemake /1_ParentCall /2_Filtering /3_SeparateChromosomes @@ -11,10 +11,20 @@ /7_Intervals /8_RepeatMask /9_Chain -/10_Anchoring -/11_MareyMaps +/10_PlaceAndOrientContigs +/11_AGP +/12_Fasta +/13_MareyMapsUntrimmed +/14_NewIntervals +/15_Trim +/16_MareyMapsTrimmed /JoinSingles2All_iter /RefineMap /pedigree.txt -map.master -/*.vcf \ No newline at end of file +LOD.master +snps.txt +/*.vcf +/*.fasta +/*.fa +/*.fa.gz +/*.fasta.gz \ No newline at end of file diff --git a/rules/LA_extra.smk b/rules/LA_extra.smk new file mode 100644 index 0000000..d98b15d --- /dev/null +++ b/rules/LA_extra.smk @@ -0,0 +1,11 @@ +rule remove_haplos: + input: + bedfile = "10_Anchoring/map_extra.bed", + haplotypes = "10_Anchoring/suspected.haplotypes.after" + output: "10_Anchoring/map.nohaplotypes.bed" + message: "Creating bedfile with suspected haplotypes removed" + shell: + """ + grep -w -v -f <(cut -f 2 {input.haplotypes}) {input.bedfile} > {output} + #awk -f software/LepAnchor/scripts/removeHaplotypes.awk {input.bedfile} {input.haplotypes} > {output}" + """ \ No newline at end of file diff --git a/rules/LepAnchor.smk b/rules/LepAnchor.smk index 5887124..3871485 100644 --- a/rules/LepAnchor.smk +++ b/rules/LepAnchor.smk @@ -9,11 +9,13 @@ proximity = config["proximity_file"] lg = config["lg_count"] lg_range = list(range(1,lg+1)) os_name = config["OS_info"] +data_type = config["lepanchor_input"] map2bed_extra = config["extra_params_Map2Bed"] cleanmap_extra = config["extra_params_CleanMap"] place_orient_extra = config["extra_params_PlaceOrient"] edgelen = config["LA_edge_length"] trimdist = config["LA_trim_cutoff"] +haplo_limit = config["haplotype_limit"] rule all: input: @@ -39,6 +41,7 @@ rule all: trimmed marey maps | 16_MareyMapsTrimmed/ """ + rule repeatmask: input: geno output: "8_Repeatmask/repeatmasked.fa.gz" @@ -99,6 +102,7 @@ rule chain_1: ../software/LepAnchor/deps/step1.HM2 repeatmasked {threads} """ + rule chain_2: input: f1 = "9_Chain/repeatmaskedx.sizes", @@ -133,6 +137,7 @@ rule chain_2: ln -sr ../{output.original} ../{output.slink} """ + rule extract_markers: input: "2_Filtering/data.filtered.lepmap3.gz" output: report("snps.txt", category = "Data") @@ -140,46 +145,53 @@ rule extract_markers: shell: "scripts/extract_markers.sh {input}" -rule generate_intervals: +rule generate_interval_input: input: markers = "snps.txt", - intervals = expand("7_Intervals/ordered.{x}.intervals", x = range(1, lg + 1)) + data = expand("7_Intervals/ordered.{x}.intervals", x = range(1, lg + 1)) if data_type == "noIntervals=0" else expand("7_Distances/ordered.{x}.distances", x = range(1, lg + 1)) output: - intervals = report("10_Anchoring/lepmap3_intervals.la", category = "Data") - message: "Combining {params} Lep-Map3 interval files into single LepAnchor input {output}" + data = report("10_PlaceAndOrientContigs/lepanchor.input", category = "Data") + message: "Combining {params} Lep-Map3 files into single LepAnchor input {output}" params: - lg = lg + lg = lg, + datatype = data_type shell: """ for i in $(seq 1 {params.lg}); do - awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} 7_Intervals/ordered.$i.intervals >> {output.intervals} + if [ {params.datatype} == "noIntervals=0" ]; then + awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} 7_Intervals/ordered.$i.intervals >> {output} + else + tail -n +3 7_Distances/ordered.$i.distances | awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} - >> {output} + fi done """ + rule contiglengths: input: geno - output: report("10_Anchoring/contigs.length", category = "Data") + output: report("10_PlaceAndOrientContigs/contigs.length", category = "Data") message: "Getting contig lengths" shell: "gunzip -fc {input} | awk -f software/LepAnchor/scripts/contigLength.awk > {output}" + rule find_haplotypes: input: "9_Chain/chainfile.gz" - output: report("10_Anchoring/fullHaplotypes50.txt", category = "Logs") - message: "Finding full haplotypes (potential chimeric contigs)" + output: report("10_PlaceAndOrientContigs/suspected.haplotypes.before", category = "Logs") + message: "Finding non-haplotype contigs not included in map.bed" shell: """ gunzip -fc {input} | awk -f software/LepAnchor/scripts/findFullHaplotypes.awk > {output} - echo "Detected $(wc -l {output}) potentially chimeric contigs" """ + rule liftover: input: chain = "9_Chain/chainfile.gz", - intervals = "10_Anchoring/lepmap3_intervals.la", - haplos = "10_Anchoring/fullHaplotypes50.txt" + intervals = "10_PlaceAndOrientContigs/lepanchor.input", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before" output: - lift = report("10_Anchoring/liftover.la", category = "Lifted Intervals"), - sortedlift = report("10_Anchoring/liftover.sorted.la", category = "Lifted Intervals") + lift = report("10_PlaceAndOrientContigs/liftover.la", category = "Lifted Intervals"), + sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.la", category = "Lifted Intervals") message: "Running liftoverHaplotypes for the input maps" shell: """ @@ -187,10 +199,43 @@ rule liftover: cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} """ + +rule liftover2: + input: + chain = "9_Chain/chainfile.gz", + intervals = "10_PlaceAndOrientContigs/lepanchor.input", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", + haplos2 = "10_PlaceAndOrientContigs/suspected.haplotypes.after", + lengths = "10_PlaceAndOrientContigs/contigs.length" + output: + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.all", + lift = report("10_PlaceAndOrientContigs/liftover.nohaplotypes.la", category = "Lifted Intervals"), + sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.nohaplotypes.la", category = "Lifted Intervals"), + mapfile = "10_PlaceAndOrientContigs/map.nohaplotypes.clean", + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed", + unused = "10_PlaceAndOrientContigs/not_used.nohaplotypes.txt", + chr0 = "10_PlaceAndOrientContigs/chr0.nohaplotypes.bed", + mapextra = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed" + message: "Recreating bedfile omitting haplotypes discovered from PlaceAndOrientContigs" + params: + chrom = lg + shell: + """ + cat {input.haplos} {input.haplos2} > {output.haplos} + gunzip -fc {input.chain} | java -cp software/LepAnchor LiftoverHaplotypes map={input.intervals} haplotypes={output.haplos} chain=- > {output.lift} + cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} + java -cp software/LepAnchor CleanMap map={output.sortedlift} > {output.mapfile} + java -cp software/LepAnchor Map2Bed map={output.mapfile} contigLength={input.lengths} > {output.bedfile} + cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {output.haplos}; cut -f 1 {output.bedfile}) > {output.unused} + grep -w -F -f {output.unused} {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > {output.chr0} + cat {output.bedfile} {output.chr0} > {output.mapextra} + """ + + rule cleanmap: - input: "10_Anchoring/liftover.sorted.la" - output: "10_Anchoring/map_all.clean" - log: report("10_Anchoring/cleamap.log", category = "Logs") + input: "10_PlaceAndOrientContigs/liftover.sorted.la" + output: "10_PlaceAndOrientContigs/map_all.clean" + log: report("10_PlaceAndOrientContigs/cleamap.log", category = "Logs") message: "Running CleanMap" params: extras = cleanmap_extra @@ -198,107 +243,164 @@ rule cleanmap: rule map2bed: input: - cleanmap = "10_Anchoring/map_all.clean", - lengths = "10_Anchoring/contigs.length", - output: "10_Anchoring/map.bed" - log: report("10_Anchoring/map2bed.log", category = "Logs") + cleanmap = "10_PlaceAndOrientContigs/map_all.clean", + lengths = "10_PlaceAndOrientContigs/contigs.length", + output: "10_PlaceAndOrientContigs/map.bed" + log: report("10_PlaceAndOrientContigs/map2bed.log", category = "Logs") message: "Running Map2Bed" params: extras = map2bed_extra shell: "java -cp software/LepAnchor Map2Bed map={input.cleanmap} contigLength={input.lengths} {params.extras} > {output} 2> {log}" + rule ungrouped: input: - lengths = "10_Anchoring/contigs.length", - haplos = "10_Anchoring/fullHaplotypes50.txt", - bedfile = "10_Anchoring/map.bed" + lengths = "10_PlaceAndOrientContigs/contigs.length", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", + bedfile = "10_PlaceAndOrientContigs/map.bed" output: - bedfile = "10_Anchoring/map_extra.bed" + bedfile = "10_PlaceAndOrientContigs/map_extra.bed" message: "Finding contigs not put into chromosomes" params: chrom = lg shell: """ - cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos}; cut -f 1 {input.bedfile}) > 10_Anchoring/unused_contigs.txt - grep -w -F -f 10_Anchoring/unused_contigs.txt {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > 10_Anchoring/chr0.bed - cat {input.bedfile} 10_Anchoring/chr0.bed > {output.bedfile} + cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos}; cut -f 1 {input.bedfile}) > 10_PlaceAndOrientContigs/unused_contigs.txt + grep -w -F -f 10_PlaceAndOrientContigs/unused_contigs.txt {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > 10_PlaceAndOrientContigs/chr0.bed + cat {input.bedfile} 10_PlaceAndOrientContigs/chr0.bed > {output.bedfile} """ + rule place_orient: input: chain = "9_Chain/chainfile.gz", - bedfile = "10_Anchoring/map_extra.bed", + bedfile = "10_PlaceAndOrientContigs/map_extra.bed", paf = paf, prox = proximity, - lift = "10_Anchoring/liftover.la" + lift = "10_PlaceAndOrientContigs/liftover.la" output: - chrom = "10_Anchoring/orient_1/chr.{lg_range}.la" + chrom = "10_PlaceAndOrientContigs/orient_1/chr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.suspected" log: - chrom = report("10_Anchoring/orient_1/logs/chr.{lg_range}.la.err", category = "Anchoring I Logs") + chrom = report("10_PlaceAndOrientContigs/orient_1/logs/chr.{lg_range}.la.log", category = "Anchoring I Logs"), + haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_1/errors/chr.{lg_range}.errors" params: chrom = "{lg_range}", - extras = place_orient_extra + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit threads: 3 - message: "Running PlaceAndOrientContigs for linkage group {params.chrom}" + message: "Running the 1st round of PlaceAndOrientContigs for linkage group {params.chrom}" shell: """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.extras} > {output} 2> {log} + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} """ + +rule mergehaplos: + input: expand("10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg}.haplo.suspected", lg = lg_range) + output: "10_PlaceAndOrientContigs/suspected.haplotypes.after" + message: "Merging suspected haplotype contig information from the linkage groups" + shell: "cat {input} | sort | uniq > {output}" + + +rule place_orient2: + input: + chain = "9_Chain/chainfile.gz", + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed", + paf = paf, + prox = proximity, + lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" + output: + chrom = "10_PlaceAndOrientContigs/orient_2/chr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.suspected" + log: + chrom = report("10_PlaceAndOrientContigs/orient_2/logs/chr.{lg_range}.la.log", category = "Anchoring II Logs"), + haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_2/errors/chr.{lg_range}.errors" + params: + chrom = "{lg_range}", + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit + threads: 3 + message: "Running 2nd round of PlaceAndOrientContigs for linkage group {params.chrom}" + shell: + """ + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} + """ + + rule propogate: input: - placed = expand("10_Anchoring/orient_1/chr.{lgs}.la", lgs = lg_range), - bedfile = "10_Anchoring/map.bed" + placed = expand("10_PlaceAndOrientContigs/orient_2/chr.{lgs}.la", lgs = lg_range), + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed" output: - propogated = "10_Anchoring/map_propogated.bed", - tmp_prop = temp(expand("10_Anchoring/propogate/propogated.{lgs}.la", lgs = range(lg + 1))), + propogated = "10_PlaceAndOrientContigs/map.propogated.bed", + tmp_prop = temp(expand("10_PlaceAndOrientContigs/propogate/propogated.{lgs}.la", lgs = range(lg + 1))), message: "Propogating ...something" shell: """ - awk -f software/LepAnchor/scripts/propagate.awk {input.placed} > 10_Anchoring/tmp1.la - awk -f software/LepAnchor/scripts/propagate.awk 10_Anchoring/tmp1.la > 10_Anchoring/tmp2.la + awk -f software/LepAnchor/scripts/propagate.awk {input.placed} > 10_PlaceAndOrientContigs/tmp1.la + awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp1.la > 10_PlaceAndOrientContigs/tmp2.la i=2 - while ! cmp -s "10_Anchoring/tmp$i.la" "10_Anchoring/tmp$(( $i-1 )).la" ;do - awk -f software/LepAnchor/scripts/propagate.awk 10_Anchoring/tmp$i.la > 10_Anchoring/tmp$[$i+1].la + while ! cmp -s "10_PlaceAndOrientContigs/tmp$i.la" "10_PlaceAndOrientContigs/tmp$(( $i-1 )).la" ;do + awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp$i.la > 10_PlaceAndOrientContigs/tmp$[$i+1].la i=$[$i+1] done #create prop*.la - awk '/^[^#]/{{++d[$1 "\t" $7+0 "\t" $8+0]; data[++line]=$0}}END{{for (i = 1; i <= line; ++i) {{$0=data[i];if (d[$1 "\t" $7+0 "\t" $8+0] == 1) fn="10_Anchoring/propogate/propogated."$5".la"; else if ($5==1) fn="10_Anchoring/propogate/propogated.0.la"; else fn=""; if (fn != "") print $0>fn}}}}' 10_Anchoring/tmp$i.la - #awk '/^[^#]/{{++d[$1 "\t" $7+0 "\t" $8+0]; data[++line]=$0}}END{{for (i = 1; i <= line; ++i) {{$0=data[i];if (d[$1 "\t" $7+0 "\t" $8+0] == 1) fn="10_Anchoring/propogate/propogated."$5".la"; else if ($5==1) fn="10_Anchoring/propogate/propogated.0.la"; else fn=""; if (fn != "") print $0>fn}}' 10_Anchoring/tmp$i.la + awk '/^[^#]/{{++d[$1 "\t" $7+0 "\t" $8+0]; data[++line]=$0}}END{{for (i = 1; i <= line; ++i) {{$0=data[i];if (d[$1 "\t" $7+0 "\t" $8+0] == 1) fn="10_PlaceAndOrientContigs/propogate/propogated."$5".la"; else if ($5==1) fn="10_PlaceAndOrientContigs/propogate/propogated.0.la"; else fn=""; if (fn != "") print $0>fn}}}}' 10_PlaceAndOrientContigs/tmp$i.la - #create a new bed by combining propogated.[1-9]*.la and map.bed + #create a new bed by combining propogated.[1-9]*.la and map.nohaplotypes.bed awk '(NR==FNR){{print;c[$1]}}(NR!=FNR && !($1 in c)){{print $1 "\t" $7+0 "\t" $8+0"\t?\t"$5}}' {input.bedfile} {output.tmp_prop} > {output.propogated} - rm 10_Anchoring/tmp*.la + rm 10_PlaceAndOrientContigs/tmp*.la """ -rule place_orient2: + +rule place_orient3: input: chain = "9_Chain/chainfile.gz", - bedfile = "10_Anchoring/map_propogated.bed", + bedfile = "10_PlaceAndOrientContigs/map.propogated.bed", paf = paf, prox = proximity, - lift = "10_Anchoring/liftover.la" + lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" output: - chrom = "10_Anchoring/orient_2/ichr.{lg_range}.la" + chrom = "10_PlaceAndOrientContigs/orient_3/ichr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.suspected" log: - chrom = report("10_Anchoring/orient_2/logs/ichr.{lg_range}.la.err", category = "Anchoring II Logs") + chrom = report("10_PlaceAndOrientContigs/orient_3/logs/ichr.{lg_range}.la.log", category = "Anchoring III Logs"), + haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_3/errors/chr.{lg_range}.errors" params: chrom = "{lg_range}", - extras = place_orient_extra - message: "Running a second iteration of PlaceAndOrientContigs for linkage group {params.chrom}" + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit + message: "Running 3rd round of PlaceAndOrientContigs for linkage group {params.chrom}" shell: """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.extras} > {output.chrom} 2> {log.chrom} + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} """ + rule prune: input: - oriented = expand("10_Anchoring/orient_2/ichr.{lgs}.la", lgs = lg_range), - bedfile = "10_Anchoring/map_propogated.bed" + oriented = expand("10_PlaceAndOrientContigs/orient_3/ichr.{lgs}.la", lgs = lg_range), + bedfile = "10_PlaceAndOrientContigs/map.propogated.bed" output: - pruned = report("10_Anchoring/orient_2/pruned.la", category = "Logs"), - cleaned = report("10_Anchoring/overlaps_rm.la", category = "Logs") + pruned = report("10_PlaceAndOrientContigs/orient_3/pruned.la", category = "Logs"), + cleaned = report("10_PlaceAndOrientContigs/overlaps_rm.la", category = "Logs") message: "Pruning contig blocks without map support and removing overlaps" params: chrom = lg @@ -306,14 +408,15 @@ rule prune: """ for i in $(seq {params.chrom}) do - awk -f software/LepAnchor/scripts/prune.awk 10_Anchoring/orient_2/ichr.$i.la > 10_Anchoring/orient_2/ichr.${{i}}.pruned.la + awk -f software/LepAnchor/scripts/prune.awk 10_PlaceAndOrientContigs/orient_3/ichr.$i.la > 10_PlaceAndOrientContigs/orient_3/ichr.${{i}}.pruned.la done 2> {output.pruned} - awk -f software/LepAnchor/scripts/removeOverlaps.awk {input.bedfile} 10_Anchoring/orient_2/ichr.*.pruned.la > {output.cleaned} + awk -f software/LepAnchor/scripts/removeOverlaps.awk {input.bedfile} 10_PlaceAndOrientContigs/orient_3/ichr.*.pruned.la > {output.cleaned} """ + rule construct_agp: input: - cleaned = "10_Anchoring/overlaps_rm.la" + cleaned = "10_PlaceAndOrientContigs/overlaps_rm.la" output: agp = report("11_AGP/contigs/chr.{lg_range}.agp", category = "Contig AGP Files"), scaff_agp = report("11_AGP/scaffolds/chr.{lg_range}.scaffolds.agp", category = "Scaffold AGP Files") @@ -326,10 +429,11 @@ rule construct_agp: awk -vn={params.chrom} '($5==n)' {input.cleaned} | awk -vprefix="LG" -vlg={params.chrom} -f software/LepAnchor/scripts/makeagp2.awk - > {output.scaff_agp} """ + rule unused: input: - lengths = "10_Anchoring/contigs.length", - haplos = "10_Anchoring/fullHaplotypes50.txt", + lengths = "10_PlaceAndOrientContigs/contigs.length", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), output: txt = "11_AGP/not_used_final.txt", @@ -341,6 +445,7 @@ rule unused: grep -F -w -f {output.txt} {input.lengths} | awk '{{print $1,1,$2,1,"W",$1,1,$2,"+"}}' > {output.agp} """ + rule build_final_agp: input: agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), @@ -360,6 +465,7 @@ rule build_final_agp: cat {input.scaff_agp} {input.unused} > {output.scaff_all_agp} """ + rule build_scaffold_only_fasta: input: assembly = geno, @@ -372,6 +478,7 @@ rule build_scaffold_only_fasta: gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} """ + rule build_scaffold_contig_fasta: input: assembly = geno, @@ -384,6 +491,7 @@ rule build_scaffold_contig_fasta: gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} """ + rule build_contig_only_fasta: input: assembly = geno, @@ -396,6 +504,7 @@ rule build_contig_only_fasta: gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} """ + rule build_contig_fasta: input: assembly = geno, @@ -408,9 +517,10 @@ rule build_contig_fasta: gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} """ + rule mareymap_data: input: - lift = "10_Anchoring/liftover.la", + lift = "10_PlaceAndOrientContigs/liftover.la", agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) output: mareydata = "13_MareyMapsUntrimmed/data.marey.gz", @@ -418,8 +528,8 @@ rule mareymap_data: log: report("13_MareyMapsUntrimmed/missing_scaffolds.txt", category = "Logs") message: """ - Creating Marey map interval data: - + Marey map interval data + =========================================================== first points in uncertainty intervals | {output.mareydata} midpoints in uncertainty intervals | {output.sexavg} """ @@ -438,6 +548,7 @@ rule mareymap_data: done > {output.sexavg} 2> /dev/null """ + rule mareymaps: input: data = "13_MareyMapsUntrimmed/data.marey.gz", @@ -457,6 +568,7 @@ rule mareymaps: Rscript scripts/LASummarySexAvg.r {input.sexavg} """ + rule generate_updated_intervals: input: "13_MareyMapsUntrimmed/data.marey.gz" output: "14_NewIntervals/LA.intervals.{lg_range}" @@ -468,6 +580,7 @@ rule generate_updated_intervals: zgrep "LG{params.chrom}\s" {input} > {output} """ + rule trim_newintervals: input: "14_NewIntervals/LA.intervals.{lg_range}" output: @@ -479,18 +592,21 @@ rule trim_newintervals: dist = trimdist shell: "Rscript scripts/LATrim.r {input} {params.dist} {params.edge} 15_Trim" + rule merge_trimplots: input: expand("15_Trim/plots/LA.intervals.{lg}.trim.pdf", lg = lg_range) output: "15_Trim/LA.trim.summary.pdf" message: "Merging trimming plots into {output}" shell: "convert -density 200 {input} {output}" + rule merge_trimmedintervals: input: expand("15_Trim/LA.intervals.{lg}.trimmed", lg = lg_range) output: "16_MareyMapsTrimmed/data.marey.trimmed.gz" message: "Concatenating trimmed intervals to {output}" shell: "cat {input} | gzip -c > {output}" + rule plot_trimmedintervals: input: "16_MareyMapsTrimmed/data.marey.trimmed.gz" output: report("16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", category = "Trimmed Marey Maps") diff --git a/rules/LepMap3/LepMap3.smk b/rules/LepMap3/LepMap3.smk new file mode 100644 index 0000000..a7c9f93 --- /dev/null +++ b/rules/LepMap3/LepMap3.smk @@ -0,0 +1,61 @@ +from os import path +import glob + +configfile: "config.yaml" + +# load in parameters set in config.yaml +# data # +vcf = config["vcf"] +pedigree = config["pedigree"] +parentcall_extra = config["extra_params_ParentCall"] +# filtering # +data_tol=config["data_tol"] +filtering_extra = config["extra_params_Filtering"] +# separate chromosomes # +lod_max = str(config["lod_max"]) +lod_range = list(range(config["lod_min"], config["lod_max"]+1)) +informative = config["informative"] +sepchrom_extra = config["extra_params_SeparateChromosomes"] +# join singles # +joinsingles = config["run_joinsingles2all"] +lod_lim = config["lod_limit"] +lod_diff = config["lod_difference"] +js2a_extra = config["extra_params_JoinSingles"] +# ordering # +lg_range = list(range(1, config["exp_lg"]+1)) +lg_count = config["exp_lg"] +ITER = config["iterations"] +order_extra = config["extra_params_OrderMarkers"] +# trimming # +edge_len = str(config["edge_length"]) +trim_thresh = str(config["trim_cutoff"]) +# ordering II # +reorder_extra = config["extra_params_reOrderMarkers"] +ITER2 = round(ITER/2) +# distances # +dist_method = config["distance_method"] + +include: "prepare_data.smk" +include: "generate_map.smk" +include: "order.smk" +include: "trim.smk" +include: "reorder.smk" +include: "distances.smk" + +rule all: + input: + expand("7_Distances/ordered.{lg}.distances", lg = lg_range), + expand("7_DistancesSexAverage/ordered.{lg}.sexavg", lg = lg_range), + expand("7_Intervals/ordered.{lg}.intervals", lg = lg_range), + "4_OrderMarkers/recombination/recombination.summary", + "5_Trim/trim.summary", + "6_OrderMarkers/recombination/recombination.summary", + message: + """ + Lep-Map3 has finished. Good luck with the rest of your analyses! + Output Files: + ============= + final linkage maps | 7_Distances/ordered.*.distances + sex-averaged maps | 7_DistancesSexAverage/ordered.*.sexavg + map-intervals | 7_Intervals/ordered.*.intervals + """ diff --git a/rules/LepMap3/distances.smk b/rules/LepMap3/distances.smk new file mode 100644 index 0000000..ef94e55 --- /dev/null +++ b/rules/LepMap3/distances.smk @@ -0,0 +1,28 @@ +rule calculate_distances: + input: + data_call = "2_Filtering/data.filtered.lepmap3.gz", + lg = "6_OrderMarkers/ordered.{lg_range}" + output: + distance = "7_Distances/ordered.{lg_range}.distances", + sex_averaged = "7_DistancesSexAverage/ordered.{lg_range}.sexavg", + sex_averagedtmp = temp("7_DistancesSexAverage/logs/.ordered.{lg_range}.sexavg"), + intervals = "7_Intervals/ordered.{lg_range}.intervals" + message: "Calculating marker distances and intervals for linkage group: {params.lg}" + log: + sex_averaged = "7_DistancesSexAverage/logs/ordered.{lg_range}.sexavg.log", + intervals = "7_Intervals/logs/ordered.{lg_range}.intervals.log" + params: + dist_method = dist_method, + lg = "{lg_range}" + threads: 2 + shell: + """ + cp {input.lg} {output.distance} + + zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {output.sex_averagedtmp} + sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {output.sex_averagedtmp} + sed -n '/\*\*\* LG \=/,$p' {output.sex_averagedtmp} > {output.sex_averaged} + awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {output.sex_averagedtmp} > {log.sex_averaged} + + zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} calculateIntervals={output.intervals} > {log.intervals} 2>&1 + """ \ No newline at end of file diff --git a/rules/LepMap3/generate_map.smk b/rules/LepMap3/generate_map.smk new file mode 100644 index 0000000..1adb2cb --- /dev/null +++ b/rules/LepMap3/generate_map.smk @@ -0,0 +1,48 @@ +rule separate_chromosomes: + input: "2_Filtering/data.filtered.lepmap3.gz" + output: "3_SeparateChromosomes/LOD.{lod_range}" + log: "3_SeparateChromosomes/logs/LOD.{lod_range}.log" + message: "Clustering markers for lodLimit={params.lod} >> {output}" + threads: 30 + params: + lod = "{lod_range}", + extra = sepchrom_extra, + shell: + """ + zcat {input} | java -cp software/LepMap3 SeparateChromosomes2 data=- {params.extra} {informative} lodLimit={params.lod} numThreads={threads} > {output} 2> {log} + """ + +rule map_summary: + input: expand("3_SeparateChromosomes/LOD.{LOD}", LOD = lod_range) + output: "3_SeparateChromosomes/all.LOD.summary" + message: "Summarizing SeperateChromosomes2 maps >> {output}" + shell: "scripts/MapSummary.r 3_SeparateChromosomes" + +rule join_singles: + input: + datacall = "2_Filtering/data.filtered.lepmap3.gz", + map_summ = "3_SeparateChromosomes/all.LOD.summary" + output: "LOD.master" + log: "3_SeparateChromosomes/chosen.LOD" + threads: 30 + message: "Joining singles to linkage groups" + params: + run_js2all = joinsingles, + lod_limit = lod_lim, + lod_diff = lod_diff, + extra = js2a_extra + shell: + """ + echo -n -e '\nWhich map would you like to use (e.g. LOD.15)? LOD.' + read -r + echo -e "# the map chosen to use with OrderMarkers2\nLOD.$REPLY" > {log} + echo "A record of your choice can be found in {log}" + JS2A=$(echo {params.run_js2all} | tr '[:upper:]' '[:lower:]') + if [ $JS2A == "true" ]; then + zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/LOD.$REPLY data=- {params.extra} {params.lod_limit} {params.lod_diff} numThreads={threads} > {output} + else + echo -e "\nSkipping JoinSingles2All and creating a symlink instead" + ln -sr 3_SeparateChromosomes/LOD.$REPLY {output} + fi + sleep 2s + """ diff --git a/rules/LepMap3/order.smk b/rules/LepMap3/order.smk new file mode 100644 index 0000000..cc47f0e --- /dev/null +++ b/rules/LepMap3/order.smk @@ -0,0 +1,31 @@ +rule order_markers: + input: + datacall = "2_Filtering/data.filtered.lepmap3.gz", + filt_map = "LOD.master" + output: "4_OrderMarkers/ordered.{lg_range}" + log: + runlog = temp("4_OrderMarkers/logs/ordered.{lg_range}.running"), + run = "4_OrderMarkers/logs/ordered.{lg_range}.log", + recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" + message: "Ordering the markers with {params.dist_method} on linkage group {params.chrom}" + params: + chrom = "{lg_range}", + iterations = ITER, + extra = order_extra + threads: 2 + shell: + """ + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} {params.extra} data=- numThreads={threads} numMergeIterations={params.iterations} chromosome={params.chrom} &> {log.runlog} + sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} + grep "recombin" {log.runlog} > {log.recomb} + awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} + """ + +rule recomb_summary: + input: expand("4_OrderMarkers/ordered.{lg}", lg = lg_range) + output: "4_OrderMarkers/recombination/recombination.summary" + message: "Recombination summary: {output}" + shell: + """ + Rscript scripts/RecombinationSummary.r 4_OrderMarkers/recombination > {output} + """ \ No newline at end of file diff --git a/rules/LepMap3/prepare_data.smk b/rules/LepMap3/prepare_data.smk new file mode 100644 index 0000000..fa7b5b9 --- /dev/null +++ b/rules/LepMap3/prepare_data.smk @@ -0,0 +1,26 @@ +rule parent_call: + input: + vcf = vcf, + pedigree = pedigree + output: "1_ParentCall/data.lepmap3.gz" + message: "Creating Lep-Map3 data file from {input.vcf} and {input.pedigree}" + params: + extra = parentcall_extra + shell: "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} {params} | gzip > {output}" + +rule filtering: + input: "1_ParentCall/data.lepmap3.gz" + output: "2_Filtering/data.filtered.lepmap3.gz" + message: "Filtering {input}" + params: + data_tolerance = data_tol, + extra = filtering_extra + shell: + """ + if [ {params.data_tolerance} == 0 ]; then + echo "Skipping Filtering2 and creating symlink {output} instead" + ln -sr {input} {output} + else + zcat {input} | java -cp software/LepMap3 Filtering2 data=- dataTolerance={params.data_tolerance} {params.extra} | gzip > {output} + fi + """ diff --git a/rules/LepMap3/reorder.smk b/rules/LepMap3/reorder.smk new file mode 100644 index 0000000..819d3c1 --- /dev/null +++ b/rules/LepMap3/reorder.smk @@ -0,0 +1,32 @@ +rule reorder_markers: + input: + datacall = "2_Filtering/data.filtered.lepmap3.gz", + filt_map = "LOD.master", + lg_order = "5_Trim/ordered.{lg_range}.trimmed" + output: "6_OrderMarkers/ordered.{lg_range}" + log: + runlog = temp("6_OrderMarkers/logs/ordered.{lg_range}.running"), + run = "6_OrderMarkers/logs/ordered.{lg_range}.log", + recomb = "6_OrderMarkers/recombination/ordered.{lg_range}.recombination" + message: "Reordering linkage group {params.lg} with {params.iterations} iterations" + params: + lg = "{lg_range}", + iterations = ITER2, + extra = reorder_extra + threads: 2 + shell: + """ + zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 {params.extra} map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} numMergeIterations={params.iterations} &> {log.runlog} + sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} + grep "recombin" {log.runlog} > {log.recomb} + awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} + """ + +rule reorder_summary: + input: expand("6_OrderMarkers/ordered.{lg}", lg = lg_range) + output: "6_OrderMarkers/recombination/recombination.summary" + message: "Recombination summary of reordering: {output}" + shell: + """ + Rscript scripts/RecombinationSummary.r 6_OrderMarkers/recombination > {output} + """ \ No newline at end of file diff --git a/rules/LepMap3/trim.smk b/rules/LepMap3/trim.smk new file mode 100644 index 0000000..7f122c1 --- /dev/null +++ b/rules/LepMap3/trim.smk @@ -0,0 +1,40 @@ +rule trim_edge_clusters: + input: "4_OrderMarkers/ordered.{lg_range}" + output: "5_Trim/ordered.{lg_range}.trimmed" + log: + "5_Trim/logs/ordered.{lg_range}.removed", + "5_Trim/plots/ordered.{lg_range}.trim.pdf" + params: + trim_threshold = trim_thresh, + edge_length = edge_len + message: "Removing edge clusters >{params.trim_threshold}%cM apart from the other markers at the ends of {input}" + shell: + """ + Rscript scripts/LepWrapTrim.r {input} {params.trim_threshold} {params.edge_length} 5_Trim + """ + +rule trim_summary: + input: + lg = expand("5_Trim/ordered.{lg}.trimmed", lg = lg_range), + plots = expand("5_Trim/plots/ordered.{lg}.trim.pdf", lg = lg_range) + output: + detailed = "5_Trim/trim.details", + summary = "5_Trim/trim.summary", + summarypdf = "5_Trim/trim.summary.pdf", + summarysvg = "5_Trim/trim.summary.svg", + mergeplots = "5_Trim/plots/all.trimplots.pdf" + message: "Summarizing trimming results" + params: + lg = lg_count + priority: 1 + shell: + """ + for each in 5_Trim/logs/ordered.*.removed ; do + BASE=$(basename $each | cut -d "." -f1,2) + sed -e "s/^/$BASE /" $each + done | sort -V > {output.detailed} + scripts/TrimCounts.r {output.detailed} {params.lg} > {output.summary} + scripts/TrimSummaryPlot.r {output.summary} + echo "Merging QC plots for all linkage groups" + convert -density 300 {input.plots} {output.mergeplots} + """ From 3ce76edac1ff59f76322ce640ececc2d0ca6d53f Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:25:58 -0400 Subject: [PATCH 14/27] organization and cleanup --- LepWrap | 4 +-- rules/LepMap3.smk | 60 -------------------------------- rules/distances.smk | 28 --------------- rules/generate_map.smk | 48 -------------------------- rules/order.smk | 31 ----------------- rules/prepare_data.smk | 26 -------------- rules/reorder.smk | 32 ----------------- rules/trim.smk | 40 ---------------------- scripts/LAMidpointSummary.r | 68 ------------------------------------- scripts/LA_summary.r | 68 ------------------------------------- 10 files changed, 2 insertions(+), 403 deletions(-) delete mode 100644 rules/LepMap3.smk delete mode 100644 rules/distances.smk delete mode 100644 rules/generate_map.smk delete mode 100644 rules/order.smk delete mode 100644 rules/prepare_data.smk delete mode 100644 rules/reorder.smk delete mode 100644 rules/trim.smk delete mode 100755 scripts/LAMidpointSummary.r delete mode 100755 scripts/LA_summary.r diff --git a/LepWrap b/LepWrap index c9a0e61..44b30e5 100755 --- a/LepWrap +++ b/LepWrap @@ -18,7 +18,7 @@ fi lepmap(){ echo "Running Lep-Map3" sleep 2s - snakemake --cores $1 --snakefile ./rules/LepMap3.smk --directory . + snakemake --cores $1 --snakefile ./rules/LepMap3/LepMap3.smk --directory . } lepanchor(){ @@ -26,7 +26,7 @@ lepanchor(){ if [ $LA == "true" ]; then echo -e "\nRunning Lep-Anchor" sleep 2s - snakemake --cores $1 --snakefile ./rules/LepAnchor.smk --directory . + snakemake --cores $1 --snakefile ./rules/LepAnchor/LepAnchor.smk --directory . else exit 1 fi diff --git a/rules/LepMap3.smk b/rules/LepMap3.smk deleted file mode 100644 index b23d268..0000000 --- a/rules/LepMap3.smk +++ /dev/null @@ -1,60 +0,0 @@ -from os import path -import glob - -configfile: "config.yaml" - -# load in parameters set in config.yaml -# data # -vcf = config["vcf"] -pedigree = config["pedigree"] -parentcall_extra = config["extra_params_ParentCall"] -# filtering # -data_tol=config["data_tol"] -filtering_extra = config["extra_params_Filtering"] -# separate chromosomes # -lod_max = str(config["lod_max"]) -lod_range = list(range(config["lod_min"], config["lod_max"]+1)) -informative = config["informative"] -sepchrom_extra = config["extra_params_SeparateChromosomes"] -# join singles # -joinsingles = config["run_joinsingles2all"] -lod_lim = config["lod_limit"] -lod_diff = config["lod_difference"] -js2a_extra = config["extra_params_JoinSingles"] -# ordering # -lg_range = list(range(1, config["exp_lg"]+1)) -lg_count = config["exp_lg"] -ITER = config["iterations"] -order_extra = config["extra_params_OrderMarkers"] -# trimming # -edge_len = str(config["edge_length"]) -trim_thresh = str(config["trim_cutoff"]) -# ordering II # -reorder_extra = config["extra_params_reOrderMarkers"] -# distances # -dist_method = config["distance_method"] - -include: "prepare_data.smk" -include: "generate_map.smk" -include: "order.smk" -include: "trim.smk" -include: "reorder.smk" -include: "distances.smk" - -rule all: - input: - expand("7_Distances/ordered.{lg}.distances", lg = lg_range), - expand("7_DistancesSexAverage/ordered.{lg}.sexavg", lg = lg_range), - expand("7_Intervals/ordered.{lg}.intervals", lg = lg_range), - "4_OrderMarkers/recombination/recombination.summary", - "5_Trim/trim.summary", - "6_OrderMarkers/recombination/recombination.summary", - message: - """ - Lep-Map3 has finished. Good luck with the rest of your analyses! - Output Files: - ============= - final linkage maps | 7_Distances/ordered.*.distances - sex-averaged maps | 7_DistancesSexAverage/ordered.*.sexavg - map-intervals | 7_Intervals/ordered.*.intervals - """ diff --git a/rules/distances.smk b/rules/distances.smk deleted file mode 100644 index ef94e55..0000000 --- a/rules/distances.smk +++ /dev/null @@ -1,28 +0,0 @@ -rule calculate_distances: - input: - data_call = "2_Filtering/data.filtered.lepmap3.gz", - lg = "6_OrderMarkers/ordered.{lg_range}" - output: - distance = "7_Distances/ordered.{lg_range}.distances", - sex_averaged = "7_DistancesSexAverage/ordered.{lg_range}.sexavg", - sex_averagedtmp = temp("7_DistancesSexAverage/logs/.ordered.{lg_range}.sexavg"), - intervals = "7_Intervals/ordered.{lg_range}.intervals" - message: "Calculating marker distances and intervals for linkage group: {params.lg}" - log: - sex_averaged = "7_DistancesSexAverage/logs/ordered.{lg_range}.sexavg.log", - intervals = "7_Intervals/logs/ordered.{lg_range}.intervals.log" - params: - dist_method = dist_method, - lg = "{lg_range}" - threads: 2 - shell: - """ - cp {input.lg} {output.distance} - - zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} improveOrder=0 sexAveraged=1 &> {output.sex_averagedtmp} - sed -i -e 's/LG \= 0/LG \= {params.lg}/g' {output.sex_averagedtmp} - sed -n '/\*\*\* LG \=/,$p' {output.sex_averagedtmp} > {output.sex_averaged} - awk '/#java/{{flag=1}} flag; /*** LG =/{{flag=0}}' {output.sex_averagedtmp} > {log.sex_averaged} - - zcat {input.data_call} | java -cp software/LepMap3 OrderMarkers2 data=- evaluateOrder={input.lg} {params.dist_method} numThreads={threads} calculateIntervals={output.intervals} > {log.intervals} 2>&1 - """ \ No newline at end of file diff --git a/rules/generate_map.smk b/rules/generate_map.smk deleted file mode 100644 index 1adb2cb..0000000 --- a/rules/generate_map.smk +++ /dev/null @@ -1,48 +0,0 @@ -rule separate_chromosomes: - input: "2_Filtering/data.filtered.lepmap3.gz" - output: "3_SeparateChromosomes/LOD.{lod_range}" - log: "3_SeparateChromosomes/logs/LOD.{lod_range}.log" - message: "Clustering markers for lodLimit={params.lod} >> {output}" - threads: 30 - params: - lod = "{lod_range}", - extra = sepchrom_extra, - shell: - """ - zcat {input} | java -cp software/LepMap3 SeparateChromosomes2 data=- {params.extra} {informative} lodLimit={params.lod} numThreads={threads} > {output} 2> {log} - """ - -rule map_summary: - input: expand("3_SeparateChromosomes/LOD.{LOD}", LOD = lod_range) - output: "3_SeparateChromosomes/all.LOD.summary" - message: "Summarizing SeperateChromosomes2 maps >> {output}" - shell: "scripts/MapSummary.r 3_SeparateChromosomes" - -rule join_singles: - input: - datacall = "2_Filtering/data.filtered.lepmap3.gz", - map_summ = "3_SeparateChromosomes/all.LOD.summary" - output: "LOD.master" - log: "3_SeparateChromosomes/chosen.LOD" - threads: 30 - message: "Joining singles to linkage groups" - params: - run_js2all = joinsingles, - lod_limit = lod_lim, - lod_diff = lod_diff, - extra = js2a_extra - shell: - """ - echo -n -e '\nWhich map would you like to use (e.g. LOD.15)? LOD.' - read -r - echo -e "# the map chosen to use with OrderMarkers2\nLOD.$REPLY" > {log} - echo "A record of your choice can be found in {log}" - JS2A=$(echo {params.run_js2all} | tr '[:upper:]' '[:lower:]') - if [ $JS2A == "true" ]; then - zcat {input.datacall} | java -cp software/LepMap3 JoinSingles2All map=3_SeparateChromosomes/LOD.$REPLY data=- {params.extra} {params.lod_limit} {params.lod_diff} numThreads={threads} > {output} - else - echo -e "\nSkipping JoinSingles2All and creating a symlink instead" - ln -sr 3_SeparateChromosomes/LOD.$REPLY {output} - fi - sleep 2s - """ diff --git a/rules/order.smk b/rules/order.smk deleted file mode 100644 index cc47f0e..0000000 --- a/rules/order.smk +++ /dev/null @@ -1,31 +0,0 @@ -rule order_markers: - input: - datacall = "2_Filtering/data.filtered.lepmap3.gz", - filt_map = "LOD.master" - output: "4_OrderMarkers/ordered.{lg_range}" - log: - runlog = temp("4_OrderMarkers/logs/ordered.{lg_range}.running"), - run = "4_OrderMarkers/logs/ordered.{lg_range}.log", - recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" - message: "Ordering the markers with {params.dist_method} on linkage group {params.chrom}" - params: - chrom = "{lg_range}", - iterations = ITER, - extra = order_extra - threads: 2 - shell: - """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 map={input.filt_map} {params.extra} data=- numThreads={threads} numMergeIterations={params.iterations} chromosome={params.chrom} &> {log.runlog} - sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} - grep "recombin" {log.runlog} > {log.recomb} - awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} - """ - -rule recomb_summary: - input: expand("4_OrderMarkers/ordered.{lg}", lg = lg_range) - output: "4_OrderMarkers/recombination/recombination.summary" - message: "Recombination summary: {output}" - shell: - """ - Rscript scripts/RecombinationSummary.r 4_OrderMarkers/recombination > {output} - """ \ No newline at end of file diff --git a/rules/prepare_data.smk b/rules/prepare_data.smk deleted file mode 100644 index fa7b5b9..0000000 --- a/rules/prepare_data.smk +++ /dev/null @@ -1,26 +0,0 @@ -rule parent_call: - input: - vcf = vcf, - pedigree = pedigree - output: "1_ParentCall/data.lepmap3.gz" - message: "Creating Lep-Map3 data file from {input.vcf} and {input.pedigree}" - params: - extra = parentcall_extra - shell: "java -cp software/LepMap3 ParentCall2 data={input.pedigree} vcfFile={input.vcf} {params} | gzip > {output}" - -rule filtering: - input: "1_ParentCall/data.lepmap3.gz" - output: "2_Filtering/data.filtered.lepmap3.gz" - message: "Filtering {input}" - params: - data_tolerance = data_tol, - extra = filtering_extra - shell: - """ - if [ {params.data_tolerance} == 0 ]; then - echo "Skipping Filtering2 and creating symlink {output} instead" - ln -sr {input} {output} - else - zcat {input} | java -cp software/LepMap3 Filtering2 data=- dataTolerance={params.data_tolerance} {params.extra} | gzip > {output} - fi - """ diff --git a/rules/reorder.smk b/rules/reorder.smk deleted file mode 100644 index 2477367..0000000 --- a/rules/reorder.smk +++ /dev/null @@ -1,32 +0,0 @@ -rule reorder_markers: - input: - datacall = "2_Filtering/data.filtered.lepmap3.gz", - filt_map = "LOD.master", - lg_order = "5_Trim/ordered.{lg_range}.trimmed" - output: "6_OrderMarkers/ordered.{lg_range}" - log: - runlog = temp("6_OrderMarkers/logs/ordered.{lg_range}.running"), - run = "6_OrderMarkers/logs/ordered.{lg_range}.log", - recomb = "6_OrderMarkers/recombination/ordered.{lg_range}.recombination" - message: "Reordering linkage group {params.lg} with {params.iterations} iterations" - params: - lg = "{lg_range}", - iterations = ITER, - extra = reorder_extra - threads: 2 - shell: - """ - zcat {input.datacall} | java -cp software/LepMap3 OrderMarkers2 {params.extra} map={input.filt_map} data=- numThreads={threads} evaluateOrder={input.lg_order} numMergeIterations={params.iterations} &> {log.runlog} - sed -n '/\*\*\* LG \=/,$p' {log.runlog} > {output} - grep "recombin" {log.runlog} > {log.recomb} - awk '/#java/{{flag=1}} flag; /logL/{{flag=0}}' {log.runlog} > {log.run} - """ - -rule reorder_summary: - input: expand("6_OrderMarkers/ordered.{lg}", lg = lg_range) - output: "6_OrderMarkers/recombination/recombination.summary" - message: "Recombination summary of reordering: {output}" - shell: - """ - Rscript scripts/RecombinationSummary.r 6_OrderMarkers/recombination > {output} - """ \ No newline at end of file diff --git a/rules/trim.smk b/rules/trim.smk deleted file mode 100644 index 7f122c1..0000000 --- a/rules/trim.smk +++ /dev/null @@ -1,40 +0,0 @@ -rule trim_edge_clusters: - input: "4_OrderMarkers/ordered.{lg_range}" - output: "5_Trim/ordered.{lg_range}.trimmed" - log: - "5_Trim/logs/ordered.{lg_range}.removed", - "5_Trim/plots/ordered.{lg_range}.trim.pdf" - params: - trim_threshold = trim_thresh, - edge_length = edge_len - message: "Removing edge clusters >{params.trim_threshold}%cM apart from the other markers at the ends of {input}" - shell: - """ - Rscript scripts/LepWrapTrim.r {input} {params.trim_threshold} {params.edge_length} 5_Trim - """ - -rule trim_summary: - input: - lg = expand("5_Trim/ordered.{lg}.trimmed", lg = lg_range), - plots = expand("5_Trim/plots/ordered.{lg}.trim.pdf", lg = lg_range) - output: - detailed = "5_Trim/trim.details", - summary = "5_Trim/trim.summary", - summarypdf = "5_Trim/trim.summary.pdf", - summarysvg = "5_Trim/trim.summary.svg", - mergeplots = "5_Trim/plots/all.trimplots.pdf" - message: "Summarizing trimming results" - params: - lg = lg_count - priority: 1 - shell: - """ - for each in 5_Trim/logs/ordered.*.removed ; do - BASE=$(basename $each | cut -d "." -f1,2) - sed -e "s/^/$BASE /" $each - done | sort -V > {output.detailed} - scripts/TrimCounts.r {output.detailed} {params.lg} > {output.summary} - scripts/TrimSummaryPlot.r {output.summary} - echo "Merging QC plots for all linkage groups" - convert -density 300 {input.plots} {output.mergeplots} - """ diff --git a/scripts/LAMidpointSummary.r b/scripts/LAMidpointSummary.r deleted file mode 100755 index 23dd908..0000000 --- a/scripts/LAMidpointSummary.r +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/env Rscript - -suppressMessages(library(tidyverse, warn.conflicts = FALSE, quietly = TRUE)) - -args <- commandArgs(trailingOnly = TRUE) -# args[1] = mareydata file -# args[2] = marey midpoint data (optional) - -allmaps <- suppressMessages(read_tsv(gzfile(args[1]), col_names = FALSE)) %>% - select(X3, X2, X5) %>% - rename(lg = X3, Mb = X2, cM = X5) %>% - mutate(Mb = Mb/1000000) %>% - group_by(lg) %>% - mutate(marker = seq_along(Mb)) - -allmaps %>% - ggplot(aes(x = Mb, y = cM)) + - geom_point(size = 0.6, color = "dodgerblue") + - labs( - title = "Marker Positions in Anchored+Oriented Assembly", - subtitle = "The relative marker positions vs their position in the chromosome/LG", - x = "Physical Position (Mbp)", - y = "Genetic Position (cM)" - ) + - theme( - legend.position = "top", - legend.margin = margin(0, 0, 0, 0), - legend.box.margin = margin(-5, -5, -5, -5), - legend.title = element_blank(), - legend.text = element_text(size = 13), - axis.text.x = element_text(colour = "black", size = 11), - axis.text.y = element_text(colour = "black", size = 11), - strip.text = element_text(size = 13), - axis.title.x = element_text(size = 13, margin = margin(t = 5, r = 0, b = 0, l = 0)), - axis.title.y = element_text(size = 13, margin = margin(t = 0, r = 5, b = 0, l = 0)) - ) + - facet_wrap(~lg, ncol = 4, scales = "free") - -outfile <- paste0(dirname(args[1]), "/LepAnchor.midpoint.mareymaps.pdf") -savedims <- length(unique(allmaps$lg)) * 2.5 - -ggsave(outfile, width = 8.5, height = savedims/4, units = "in") - -allmaps %>% - ggplot(aes(x = marker, y = cM)) + - geom_point(size = 0.6, alpha = 0.5, color = "dodgerblue") + - labs( - title = "Relative Marker Positions within Linkge Groups", - subtitle = "The distance of sequential markers from each other in the linkage maps", - x = "Marker Number", - y = "Genetic Position (cM)" - ) + - theme( - legend.position = "top", - legend.margin = margin(0, 0, 0, 0), - legend.box.margin = margin(-5, -5, -5, -5), - legend.title = element_blank(), - legend.text = element_text(size = 13), - axis.text.x = element_text(colour = "black", size = 11), - axis.text.y = element_text(colour = "black", size = 11), - strip.text = element_text(size = 13), - axis.title.x = element_text(size = 13, margin = margin(t = 5, r = 0, b = 0, l = 0)), - axis.title.y = element_text(size = 13, margin = margin(t = 0, r = 5, b = 0, l = 0)) - ) + - facet_wrap(~lg, ncol = 4, scales = "free_x") - -outfile2 <- paste0(dirname(args[1]), "/LepAnchor.midpoint.sequentialmaps.pdf") -ggsave(outfile2, width = 8.5, height = savedims/5, units = "in", limitsize = FALSE) \ No newline at end of file diff --git a/scripts/LA_summary.r b/scripts/LA_summary.r deleted file mode 100755 index 34ecea7..0000000 --- a/scripts/LA_summary.r +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/env Rscript - -suppressMessages(library(tidyverse, warn.conflicts = FALSE, quietly = TRUE)) - -args <- commandArgs(trailingOnly = TRUE) -# args[1] = mareydata file - -allmaps <- suppressMessages(read_tsv(gzfile(args[1]), col_names = FALSE)) %>% - select(X3, X2, X5, X6) %>% - rename(lg = X3, Mb = X2, male = X5, female = X6) %>% - mutate(Mb = Mb/1000000) %>% - group_by(lg) %>% - mutate(marker = seq_along(Mb)) %>% - pivot_longer(c(male, female), names_to = "sex", values_to = "cM" ) - -allmaps %>% - ggplot(aes(x = Mb, y = cM, color = sex)) + - geom_point(size = 0.6) + - labs( - title = "Marker Positions in Anchored+Oriented Assembly", - subtitle = "The relative marker positions vs their position in the chromosome/LG", - x = "Physical Position (Mbp)", - y = "Genetic Position (cM)" - ) + - theme( - legend.position = "top", - legend.margin = margin(0, 0, 0, 0), - legend.box.margin = margin(-5, -5, -5, -5), - legend.title = element_blank(), - legend.text = element_text(size = 13), - axis.text.x = element_text(colour = "black", size = 11), - axis.text.y = element_text(colour = "black", size = 11), - strip.text = element_text(size = 13), - axis.title.x = element_text(size = 13, margin = margin(t = 5, r = 0, b = 0, l = 0)), - axis.title.y = element_text(size = 13, margin = margin(t = 0, r = 5, b = 0, l = 0)) - ) + - facet_wrap(~lg, ncol = 4, scales = "free") - -outfile <- paste0(dirname(args[1]), "/LepAnchor.mareymaps.pdf") -savedims <- length(unique(allmaps$lg)) * 2.5 - -ggsave(outfile, width = 8.5, height = savedims/4, units = "in") - -allmaps %>% - ggplot(aes(x = marker, y = cM)) + - geom_point(size = 0.6, alpha = 0.5) + - labs( - title = "Relative Marker Positions within Linkge Groups", - subtitle = "The distance of sequential markers from each other in the linkage maps", - x = "Marker Number", - y = "Genetic Position (cM)" - ) + - theme( - legend.position = "top", - legend.margin = margin(0, 0, 0, 0), - legend.box.margin = margin(-5, -5, -5, -5), - legend.title = element_blank(), - legend.text = element_text(size = 13), - axis.text.x = element_text(colour = "black", size = 11), - axis.text.y = element_text(colour = "black", size = 11), - strip.text = element_text(size = 13), - axis.title.x = element_text(size = 13, margin = margin(t = 5, r = 0, b = 0, l = 0)), - axis.title.y = element_text(size = 13, margin = margin(t = 0, r = 5, b = 0, l = 0)) - ) + - facet_wrap(lg ~ sex, ncol = 2, scales = "free_x") - -outfile2 <- paste0(dirname(args[1]), "/LepAnchor.sequentialmaps.pdf") -ggsave(outfile2, width = 8.5, height = savedims, units = "in", limitsize = FALSE) \ No newline at end of file From e84996d207cd229837c5d3413bc63d3d7a64ade3 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:27:12 -0400 Subject: [PATCH 15/27] add map distance option --- config.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 7b8cd2d..d74c0a5 100644 --- a/config.yaml +++ b/config.yaml @@ -99,7 +99,7 @@ trim_cutoff: 100 #--------------------# # The second round of OrderMarkers will use the same basic parameters as the first round (but not the extra params) # If there are additional parameters you would like to use, add them here: -extra_params_reOrderMarkers: "randomPhase=1 improveOrder=1 useKosambi=1" +extra_params_reOrderMarkers: "improveOrder=1 useKosambi=1" #-----------------------# @@ -156,7 +156,17 @@ extra_params_Map2Bed: "" #-------------------------# # PlaceAndOrientContigs # #-------------------------# +# choose which of the input types you want to generate by uncommenting the other +# LepAnchor uses intervals by default, but either works. +#lepanchor_input: "noIntervals=0" # uses intervals input +lepanchor_input: "noIntervals=1" # uses map position input + +# The size limit for detecting potential haplotype contigs (default: ~5000) +# Set this value really high (50000+) to ignore haplotype removal in between PlaceOrient iterations +haplotype_limit: 5000 + # If there are any additional parameters you would like to use for PlaceAndOrientContigs (e.g. randomOrder=1), add them here + extra_params_PlaceOrient: "keepEmptyIntervals=1 numRuns=10" From e886392c64deb2a5b1d1342414d72e8cdd095626 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:28:45 -0400 Subject: [PATCH 16/27] add paf to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d9d607c..9da44c5 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ /pedigree.txt LOD.master snps.txt +/*.paf /*.vcf /*.fasta /*.fa From dfbfc5332e64756a46e4618d4a2a591be8cf0124 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:45:30 -0400 Subject: [PATCH 17/27] split and organize lepancho --- rules/LepAnchor.smk | 613 ------------------------ rules/{ => LepAnchor}/LA_extra.smk | 0 rules/LepAnchor/LepAnchor.smk | 58 +++ rules/LepAnchor/build_agp.smk | 50 ++ rules/LepAnchor/build_fasta.smk | 50 ++ rules/LepAnchor/generate_inputs.smk | 99 ++++ rules/LepAnchor/mareymaps_untrimmed.smk | 49 ++ rules/LepAnchor/mask_and_chain.smk | 94 ++++ rules/LepAnchor/place_orient.smk | 35 ++ rules/LepAnchor/place_orient_ii.smk | 60 +++ rules/LepAnchor/place_orient_iii.smk | 74 +++ rules/LepAnchor/trim_edges.smk | 42 ++ 12 files changed, 611 insertions(+), 613 deletions(-) delete mode 100644 rules/LepAnchor.smk rename rules/{ => LepAnchor}/LA_extra.smk (100%) create mode 100644 rules/LepAnchor/LepAnchor.smk create mode 100644 rules/LepAnchor/build_agp.smk create mode 100644 rules/LepAnchor/build_fasta.smk create mode 100644 rules/LepAnchor/generate_inputs.smk create mode 100644 rules/LepAnchor/mareymaps_untrimmed.smk create mode 100644 rules/LepAnchor/mask_and_chain.smk create mode 100644 rules/LepAnchor/place_orient.smk create mode 100644 rules/LepAnchor/place_orient_ii.smk create mode 100644 rules/LepAnchor/place_orient_iii.smk create mode 100644 rules/LepAnchor/trim_edges.smk diff --git a/rules/LepAnchor.smk b/rules/LepAnchor.smk deleted file mode 100644 index 3871485..0000000 --- a/rules/LepAnchor.smk +++ /dev/null @@ -1,613 +0,0 @@ -from os import path -import glob - -configfile: "config.yaml" - -geno = config["assembly"] -paf = config["PAF_file"] -proximity = config["proximity_file"] -lg = config["lg_count"] -lg_range = list(range(1,lg+1)) -os_name = config["OS_info"] -data_type = config["lepanchor_input"] -map2bed_extra = config["extra_params_Map2Bed"] -cleanmap_extra = config["extra_params_CleanMap"] -place_orient_extra = config["extra_params_PlaceOrient"] -edgelen = config["LA_edge_length"] -trimdist = config["LA_trim_cutoff"] -haplo_limit = config["haplotype_limit"] - -rule all: - input: - fasta = "12_Fasta/Anchored.contigs.fa.gz", - scaff = "12_Fasta/Anchored.scaffolds.fa.gz", - fastaonly = "12_Fasta/Anchored.contigs.only.fa.gz", - scaffonly = "12_Fasta/Anchored.scaffolds.only.fa.gz", - mareydata = "13_MareyMapsUntrimmed/data.marey.gz", - mareymaps = "13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", - trimmedmareymaps = "16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", - trimmedmareydata= "16_MareyMapsTrimmed/data.marey.trimmed.gz", - trimsummary = "15_Trim/LA.trim.summary.pdf" - message: - """ - Lep-Anchor has finished. Good luck with the rest of your analyses! - - Output Files Location - ==================================================== - anchored assemblies | 12_Fasta/ - untrimmed marey maps | 13_MareyMapsUntrimmed/ - updated linkage maps | 14_NewIntervals/ - trimmed linkage maps | 15_Trim/ - trimmed marey maps | 16_MareyMapsTrimmed/ - """ - - -rule repeatmask: - input: geno - output: "8_Repeatmask/repeatmasked.fa.gz" - log: "8_Repeatmask/Red.log" - message: "Using Red to repeat-mask {input}" - threads: 30 - shell: - """ - file={input} - if [ "${{file: -3}}" == ".gz" ]; then - echo "- Assembly is compressed, creating decompressed copy" - file=$(basename $file .gz) - gunzip --stdout {input} > $file - fi - ext=$(echo $file | rev | cut -d"." -f1 | rev) - if [ $ext != "fa" ]; then - echo "- Assembly extension must end in .fa for Red, creating a corrected symlink" - ln -srf $file ${{file}}.fa - fi - echo "- Running Red" - software/LepAnchor/deps/Red -gnm . -msk 8_Repeatmask -sco 8_Repeatmask -cnd 8_Repeatmask -rpt 8_Repeatmask > {log} 2>> {log} - echo "- Compressing repeat-masked genome from Red" - gzip --stdout 8_Repeatmask/*.msk > {output} && rm 8_Repeatmask/*.msk - """ - - -rule chain_1: - input: - geno = "8_Repeatmask/repeatmasked.fa.gz", - ctrl = "software/LepAnchor/deps/all_lastz.ctl", - scoremtx = "software/LepAnchor/deps/scoreMatrix.q" - output: - out1 = "9_Chain/repeatmaskedx.sizes", - out2 = "9_Chain/repeatmasked.sizes" - message: "Running Lastz via HaploMerger2" - threads: 30 - params: - os = os_name - shell: - """ - OS=$(echo {params} | tr '[:upper:]' '[:lower:]') - echo "Using the $OS lastz/chainNet binaries" - if [ $OS == "ubuntu" ] - then - export PATH="$PATH:software/LepAnchor/deps/ubuntu" - elif [ $OS == "centos5" ] - then - export PATH="$PATH:software/LepAnchor/deps/centOS5" - elif [ $OS == "centos6" ] - then - export PATH="$PATH:software/LepAnchor/deps/centOS6" - else - echo "$OS is not recognized as one of Ubuntu, CentOS5, or CentOS6, defaulting to Ubuntu" - export PATH="$PATH:software/LepAnchor/deps/ubuntu" - fi - ln -srf {input} 9_Chain/ - cd 9_Chain - ../software/LepAnchor/deps/step1.HM2 repeatmasked {threads} - """ - - -rule chain_2: - input: - f1 = "9_Chain/repeatmaskedx.sizes", - f2 = "9_Chain/repeatmasked.sizes" - output: - original = "9_Chain/repeatmasked.repeatmaskedx.result/all.chain.gz", - slink = "9_Chain/chainfile.gz" - message: "Running HaploMerger2 to generate the chain file" - threads: 30 - params: - os = os_name - shell: - """ - OS=$(echo {params} | tr '[:upper:]' '[:lower:]') - echo "Using the $OS lastz/chainNet binaries" - if [ $OS == "ubuntu" ] - then - export PATH="$PATH:software/LepAnchor/deps/ubuntu" - elif [ $OS == "centos5" ] - then - export PATH="$PATH:software/LepAnchor/deps/centOS5" - elif [ $OS == "centos6" ] - then - export PATH="$PATH:software/LepAnchor/deps/centOS6" - else - echo "$OS is not recognized as one of Ubuntu, CentOS5, or CentOS6, defaulting to Ubuntu" - export PATH="$PATH:software/LepAnchor/deps/ubuntu" - fi - - cd 9_Chain - ../software/LepAnchor/deps/step2.HM2 repeatmasked {threads} && rm -r repeatmasked.repeatmaskedx.result/raw.axt - ln -sr ../{output.original} ../{output.slink} - """ - - -rule extract_markers: - input: "2_Filtering/data.filtered.lepmap3.gz" - output: report("snps.txt", category = "Data") - message: "Extracting marker information from Lep-Map3 data file {input}" - shell: "scripts/extract_markers.sh {input}" - - -rule generate_interval_input: - input: - markers = "snps.txt", - data = expand("7_Intervals/ordered.{x}.intervals", x = range(1, lg + 1)) if data_type == "noIntervals=0" else expand("7_Distances/ordered.{x}.distances", x = range(1, lg + 1)) - output: - data = report("10_PlaceAndOrientContigs/lepanchor.input", category = "Data") - message: "Combining {params} Lep-Map3 files into single LepAnchor input {output}" - params: - lg = lg, - datatype = data_type - shell: - """ - for i in $(seq 1 {params.lg}); do - if [ {params.datatype} == "noIntervals=0" ]; then - awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} 7_Intervals/ordered.$i.intervals >> {output} - else - tail -n +3 7_Distances/ordered.$i.distances | awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} - >> {output} - fi - done - """ - - -rule contiglengths: - input: geno - output: report("10_PlaceAndOrientContigs/contigs.length", category = "Data") - message: "Getting contig lengths" - shell: "gunzip -fc {input} | awk -f software/LepAnchor/scripts/contigLength.awk > {output}" - - -rule find_haplotypes: - input: "9_Chain/chainfile.gz" - output: report("10_PlaceAndOrientContigs/suspected.haplotypes.before", category = "Logs") - message: "Finding non-haplotype contigs not included in map.bed" - shell: - """ - gunzip -fc {input} | awk -f software/LepAnchor/scripts/findFullHaplotypes.awk > {output} - """ - - -rule liftover: - input: - chain = "9_Chain/chainfile.gz", - intervals = "10_PlaceAndOrientContigs/lepanchor.input", - haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before" - output: - lift = report("10_PlaceAndOrientContigs/liftover.la", category = "Lifted Intervals"), - sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.la", category = "Lifted Intervals") - message: "Running liftoverHaplotypes for the input maps" - shell: - """ - gunzip -fc {input.chain} | java -cp software/LepAnchor LiftoverHaplotypes map={input.intervals} haplotypes={input.haplos} chain=- > {output.lift} - cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} - """ - - -rule liftover2: - input: - chain = "9_Chain/chainfile.gz", - intervals = "10_PlaceAndOrientContigs/lepanchor.input", - haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", - haplos2 = "10_PlaceAndOrientContigs/suspected.haplotypes.after", - lengths = "10_PlaceAndOrientContigs/contigs.length" - output: - haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.all", - lift = report("10_PlaceAndOrientContigs/liftover.nohaplotypes.la", category = "Lifted Intervals"), - sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.nohaplotypes.la", category = "Lifted Intervals"), - mapfile = "10_PlaceAndOrientContigs/map.nohaplotypes.clean", - bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed", - unused = "10_PlaceAndOrientContigs/not_used.nohaplotypes.txt", - chr0 = "10_PlaceAndOrientContigs/chr0.nohaplotypes.bed", - mapextra = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed" - message: "Recreating bedfile omitting haplotypes discovered from PlaceAndOrientContigs" - params: - chrom = lg - shell: - """ - cat {input.haplos} {input.haplos2} > {output.haplos} - gunzip -fc {input.chain} | java -cp software/LepAnchor LiftoverHaplotypes map={input.intervals} haplotypes={output.haplos} chain=- > {output.lift} - cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} - java -cp software/LepAnchor CleanMap map={output.sortedlift} > {output.mapfile} - java -cp software/LepAnchor Map2Bed map={output.mapfile} contigLength={input.lengths} > {output.bedfile} - cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {output.haplos}; cut -f 1 {output.bedfile}) > {output.unused} - grep -w -F -f {output.unused} {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > {output.chr0} - cat {output.bedfile} {output.chr0} > {output.mapextra} - """ - - -rule cleanmap: - input: "10_PlaceAndOrientContigs/liftover.sorted.la" - output: "10_PlaceAndOrientContigs/map_all.clean" - log: report("10_PlaceAndOrientContigs/cleamap.log", category = "Logs") - message: "Running CleanMap" - params: - extras = cleanmap_extra - shell: "java -cp software/LepAnchor CleanMap map={input} {params.extras} > {output} 2> {log}" - -rule map2bed: - input: - cleanmap = "10_PlaceAndOrientContigs/map_all.clean", - lengths = "10_PlaceAndOrientContigs/contigs.length", - output: "10_PlaceAndOrientContigs/map.bed" - log: report("10_PlaceAndOrientContigs/map2bed.log", category = "Logs") - message: "Running Map2Bed" - params: - extras = map2bed_extra - shell: "java -cp software/LepAnchor Map2Bed map={input.cleanmap} contigLength={input.lengths} {params.extras} > {output} 2> {log}" - - -rule ungrouped: - input: - lengths = "10_PlaceAndOrientContigs/contigs.length", - haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", - bedfile = "10_PlaceAndOrientContigs/map.bed" - output: - bedfile = "10_PlaceAndOrientContigs/map_extra.bed" - message: "Finding contigs not put into chromosomes" - params: - chrom = lg - shell: - """ - cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos}; cut -f 1 {input.bedfile}) > 10_PlaceAndOrientContigs/unused_contigs.txt - grep -w -F -f 10_PlaceAndOrientContigs/unused_contigs.txt {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > 10_PlaceAndOrientContigs/chr0.bed - cat {input.bedfile} 10_PlaceAndOrientContigs/chr0.bed > {output.bedfile} - """ - - -rule place_orient: - input: - chain = "9_Chain/chainfile.gz", - bedfile = "10_PlaceAndOrientContigs/map_extra.bed", - paf = paf, - prox = proximity, - lift = "10_PlaceAndOrientContigs/liftover.la" - output: - chrom = "10_PlaceAndOrientContigs/orient_1/chr.{lg_range}.la", - haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.suspected" - log: - chrom = report("10_PlaceAndOrientContigs/orient_1/logs/chr.{lg_range}.la.log", category = "Anchoring I Logs"), - haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.all", - errors = "10_PlaceAndOrientContigs/orient_1/errors/chr.{lg_range}.errors" - params: - chrom = "{lg_range}", - extras = place_orient_extra, - datatype = data_type, - haplo = haplo_limit - threads: 3 - message: "Running the 1st round of PlaceAndOrientContigs for linkage group {params.chrom}" - shell: - """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} - sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} - sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} - grep "error$" {log.chrom} > {log.errors} - """ - - -rule mergehaplos: - input: expand("10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg}.haplo.suspected", lg = lg_range) - output: "10_PlaceAndOrientContigs/suspected.haplotypes.after" - message: "Merging suspected haplotype contig information from the linkage groups" - shell: "cat {input} | sort | uniq > {output}" - - -rule place_orient2: - input: - chain = "9_Chain/chainfile.gz", - bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed", - paf = paf, - prox = proximity, - lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" - output: - chrom = "10_PlaceAndOrientContigs/orient_2/chr.{lg_range}.la", - haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.suspected" - log: - chrom = report("10_PlaceAndOrientContigs/orient_2/logs/chr.{lg_range}.la.log", category = "Anchoring II Logs"), - haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.all", - errors = "10_PlaceAndOrientContigs/orient_2/errors/chr.{lg_range}.errors" - params: - chrom = "{lg_range}", - extras = place_orient_extra, - datatype = data_type, - haplo = haplo_limit - threads: 3 - message: "Running 2nd round of PlaceAndOrientContigs for linkage group {params.chrom}" - shell: - """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} - sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} - sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} - grep "error$" {log.chrom} > {log.errors} - """ - - -rule propogate: - input: - placed = expand("10_PlaceAndOrientContigs/orient_2/chr.{lgs}.la", lgs = lg_range), - bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed" - output: - propogated = "10_PlaceAndOrientContigs/map.propogated.bed", - tmp_prop = temp(expand("10_PlaceAndOrientContigs/propogate/propogated.{lgs}.la", lgs = range(lg + 1))), - message: "Propogating ...something" - shell: - """ - awk -f software/LepAnchor/scripts/propagate.awk {input.placed} > 10_PlaceAndOrientContigs/tmp1.la - awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp1.la > 10_PlaceAndOrientContigs/tmp2.la - i=2 - - while ! cmp -s "10_PlaceAndOrientContigs/tmp$i.la" "10_PlaceAndOrientContigs/tmp$(( $i-1 )).la" ;do - awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp$i.la > 10_PlaceAndOrientContigs/tmp$[$i+1].la - i=$[$i+1] - done - #create prop*.la - awk '/^[^#]/{{++d[$1 "\t" $7+0 "\t" $8+0]; data[++line]=$0}}END{{for (i = 1; i <= line; ++i) {{$0=data[i];if (d[$1 "\t" $7+0 "\t" $8+0] == 1) fn="10_PlaceAndOrientContigs/propogate/propogated."$5".la"; else if ($5==1) fn="10_PlaceAndOrientContigs/propogate/propogated.0.la"; else fn=""; if (fn != "") print $0>fn}}}}' 10_PlaceAndOrientContigs/tmp$i.la - - #create a new bed by combining propogated.[1-9]*.la and map.nohaplotypes.bed - awk '(NR==FNR){{print;c[$1]}}(NR!=FNR && !($1 in c)){{print $1 "\t" $7+0 "\t" $8+0"\t?\t"$5}}' {input.bedfile} {output.tmp_prop} > {output.propogated} - rm 10_PlaceAndOrientContigs/tmp*.la - """ - - -rule place_orient3: - input: - chain = "9_Chain/chainfile.gz", - bedfile = "10_PlaceAndOrientContigs/map.propogated.bed", - paf = paf, - prox = proximity, - lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" - output: - chrom = "10_PlaceAndOrientContigs/orient_3/ichr.{lg_range}.la", - haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.suspected" - log: - chrom = report("10_PlaceAndOrientContigs/orient_3/logs/ichr.{lg_range}.la.log", category = "Anchoring III Logs"), - haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.all", - errors = "10_PlaceAndOrientContigs/orient_3/errors/chr.{lg_range}.errors" - params: - chrom = "{lg_range}", - extras = place_orient_extra, - datatype = data_type, - haplo = haplo_limit - message: "Running 3rd round of PlaceAndOrientContigs for linkage group {params.chrom}" - shell: - """ - gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} - sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} - sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} - grep "error$" {log.chrom} > {log.errors} - """ - - -rule prune: - input: - oriented = expand("10_PlaceAndOrientContigs/orient_3/ichr.{lgs}.la", lgs = lg_range), - bedfile = "10_PlaceAndOrientContigs/map.propogated.bed" - output: - pruned = report("10_PlaceAndOrientContigs/orient_3/pruned.la", category = "Logs"), - cleaned = report("10_PlaceAndOrientContigs/overlaps_rm.la", category = "Logs") - message: "Pruning contig blocks without map support and removing overlaps" - params: - chrom = lg - shell: - """ - for i in $(seq {params.chrom}) - do - awk -f software/LepAnchor/scripts/prune.awk 10_PlaceAndOrientContigs/orient_3/ichr.$i.la > 10_PlaceAndOrientContigs/orient_3/ichr.${{i}}.pruned.la - done 2> {output.pruned} - awk -f software/LepAnchor/scripts/removeOverlaps.awk {input.bedfile} 10_PlaceAndOrientContigs/orient_3/ichr.*.pruned.la > {output.cleaned} - """ - - -rule construct_agp: - input: - cleaned = "10_PlaceAndOrientContigs/overlaps_rm.la" - output: - agp = report("11_AGP/contigs/chr.{lg_range}.agp", category = "Contig AGP Files"), - scaff_agp = report("11_AGP/scaffolds/chr.{lg_range}.scaffolds.agp", category = "Scaffold AGP Files") - message: "Creating AGP files for linkage group {params.chrom}" - params: - chrom = "{lg_range}" - shell: - """ - awk -vn={params.chrom} '($5==n)' {input.cleaned} | awk -vprefix="LG" -vlg={params.chrom} -f software/LepAnchor/scripts/makeagp_full2.awk - > {output.agp} - awk -vn={params.chrom} '($5==n)' {input.cleaned} | awk -vprefix="LG" -vlg={params.chrom} -f software/LepAnchor/scripts/makeagp2.awk - > {output.scaff_agp} - """ - - -rule unused: - input: - lengths = "10_PlaceAndOrientContigs/contigs.length", - haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", - agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), - output: - txt = "11_AGP/not_used_final.txt", - agp = "11_AGP/not_used.agp" - message: "Finding unused contigs" - shell: - """ - cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos};awk '($5!="U"){{print $6}}' {input.agp}) > {output.txt} - grep -F -w -f {output.txt} {input.lengths} | awk '{{print $1,1,$2,1,"W",$1,1,$2,"+"}}' > {output.agp} - """ - - -rule build_final_agp: - input: - agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), - scaff_agp = expand("11_AGP/scaffolds/chr.{lgs}.scaffolds.agp", lgs = lg_range), - unused = "11_AGP/not_used.agp", - output: - contig_agp = "11_AGP/lepanchor.contigs.only.agp", - scaff_agp = "11_AGP/lepanchor.scaffolds.only.agp", - contig_all_agp = "11_AGP/lepanchor.contigs.all.agp", - scaff_all_agp = "11_AGP/lepanchor.scaffolds.all.agp" - message: "Generating final AGP files" - shell: - """ - cat {input.agp} > {output.contig_agp} - cat {input.scaff_agp} > {output.scaff_agp} - cat {input.agp} {input.unused} > {output.contig_all_agp} - cat {input.scaff_agp} {input.unused} > {output.scaff_all_agp} - """ - - -rule build_scaffold_only_fasta: - input: - assembly = geno, - agp = "11_AGP/lepanchor.contigs.only.agp" - output: - fasta = "12_Fasta/Anchored.scaffolds.only.fa.gz", - message: "Constructing final scaffold-only fasta file {output.fasta}" - shell: - """ - gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} - """ - - -rule build_scaffold_contig_fasta: - input: - assembly = geno, - agp = "11_AGP/lepanchor.contigs.all.agp" - output: - fasta = "12_Fasta/Anchored.scaffolds.fa.gz", - message: "Constructing final scaffold fasta file {output.fasta}" - shell: - """ - gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} - """ - - -rule build_contig_only_fasta: - input: - assembly = geno, - scaff_agp = "11_AGP/lepanchor.scaffolds.only.agp" - output: - fasta = "12_Fasta/Anchored.contigs.only.fa.gz" - message: "Constructing final contig-only fasta file {output.fasta}" - shell: - """ - gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} - """ - - -rule build_contig_fasta: - input: - assembly = geno, - scaff_agp = "11_AGP/lepanchor.scaffolds.all.agp" - output: - fasta = "12_Fasta/Anchored.contigs.fa.gz" - message: "Constructing final contig fasta file {output.fasta}" - shell: - """ - gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} - """ - - -rule mareymap_data: - input: - lift = "10_PlaceAndOrientContigs/liftover.la", - agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) - output: - mareydata = "13_MareyMapsUntrimmed/data.marey.gz", - sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz" - log: report("13_MareyMapsUntrimmed/missing_scaffolds.txt", category = "Logs") - message: - """ - Marey map interval data - =========================================================== - first points in uncertainty intervals | {output.mareydata} - midpoints in uncertainty intervals | {output.sexavg} - """ - params: - chrom = lg - shell: - """ - for c in $(seq 1 {params.chrom}) - do - awk -vn=$c '($3==n)' {input.lift} | awk -f software/LepAnchor/scripts/liftover.awk 11_AGP/contigs/chr.$c.agp - | awk -vm=1 '(/LG/ && NF>=4){{if (NF==4) $5=$4;print $1"\t"$2"\t"$3"\t"m"\t"$4"\t"$5}}' | gzip - done > {output.mareydata} 2> {log} - - for c in $(seq 1 {params.chrom}) - do - awk -vn=$c '($3==n)' {input.lift} | awk -f software/LepAnchor/scripts/liftover.awk 11_AGP/contigs/chr.$c.agp - | awk -vm=1 '(/LG/ && NR>=4){{if (NF>4) s=0.5; else s=1;print $1"\t"$2"\t"$3"\t"m"\t"s*($4+$5)}}' | gzip - done > {output.sexavg} 2> /dev/null - """ - - -rule mareymaps: - input: - data = "13_MareyMapsUntrimmed/data.marey.gz", - sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz", - agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) - output: - indiv_plots = report(expand("13_MareyMapsUntrimmed/LG.{lgs}.mareymap.png", lgs = lg_range), category = "Marey Maps"), - summary = report("13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", category = "Marey Maps") , - sequential = report("13_MareyMapsUntrimmed/LepAnchor.sequentialmaps.pdf", category = "Sequential Maps"), - SAsummary = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.mareymaps.pdf", category = "Marey Maps Sex Avg"), - SAsequential = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.sequentialmaps.pdf", category = "Sequential Maps Sex Avg") - message: "Creating Marey Maps" - shell: - """ - Rscript software/LepAnchor/scripts/plot_marey.R {input.data} 11_AGP/contigs - Rscript scripts/LASummary.r {input.data} true - Rscript scripts/LASummarySexAvg.r {input.sexavg} - """ - - -rule generate_updated_intervals: - input: "13_MareyMapsUntrimmed/data.marey.gz" - output: "14_NewIntervals/LA.intervals.{lg_range}" - message: "Splitting out LG {params.chrom} from {input}" - params: - chrom = "{lg_range}" - shell: - """ - zgrep "LG{params.chrom}\s" {input} > {output} - """ - - -rule trim_newintervals: - input: "14_NewIntervals/LA.intervals.{lg_range}" - output: - outfile = "15_Trim/LA.intervals.{lg_range}.trimmed", - plot = "15_Trim/plots/LA.intervals.{lg_range}.trim.pdf" - message: "Trimming edge clusters for {input}" - params: - edge = edgelen, - dist = trimdist - shell: "Rscript scripts/LATrim.r {input} {params.dist} {params.edge} 15_Trim" - - -rule merge_trimplots: - input: expand("15_Trim/plots/LA.intervals.{lg}.trim.pdf", lg = lg_range) - output: "15_Trim/LA.trim.summary.pdf" - message: "Merging trimming plots into {output}" - shell: "convert -density 200 {input} {output}" - - -rule merge_trimmedintervals: - input: expand("15_Trim/LA.intervals.{lg}.trimmed", lg = lg_range) - output: "16_MareyMapsTrimmed/data.marey.trimmed.gz" - message: "Concatenating trimmed intervals to {output}" - shell: "cat {input} | gzip -c > {output}" - - -rule plot_trimmedintervals: - input: "16_MareyMapsTrimmed/data.marey.trimmed.gz" - output: report("16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", category = "Trimmed Marey Maps") - shell: "Rscript scripts/LASummary.r {input}" \ No newline at end of file diff --git a/rules/LA_extra.smk b/rules/LepAnchor/LA_extra.smk similarity index 100% rename from rules/LA_extra.smk rename to rules/LepAnchor/LA_extra.smk diff --git a/rules/LepAnchor/LepAnchor.smk b/rules/LepAnchor/LepAnchor.smk new file mode 100644 index 0000000..3215e79 --- /dev/null +++ b/rules/LepAnchor/LepAnchor.smk @@ -0,0 +1,58 @@ +from os import path +import glob + +configfile: "config.yaml" + +# PlaceAndOrientContigs # +data_type = config["lepanchor_input"] +geno = config["assembly"] +paf = config["PAF_file"] +proximity = config["proximity_file"] +haplo_limit = config["haplotype_limit"] +place_orient_extra = config["extra_params_PlaceOrient"] +# Repeat-Masking and Chainfile # +os_name = config["OS_info"] +# Map2Bed # +map2bed_extra = config["extra_params_Map2Bed"] +# CleanMap # +cleanmap_extra = config["extra_params_CleanMap"] +# Edge Trimming # +edgelen = config["LA_edge_length"] +trimdist = config["LA_trim_cutoff"] +# Other # +lg = config["lg_count"] +lg_range = list(range(1,lg+1)) + +include: "generate_inputs.smk" +include: "mask_and_chain.smk" +include: "place_orient.smk" +include: "place_orient_ii.smk" +include: "place_orient_iii.smk" +include: "build_agp.smk" +include: "build_fasta.smk" +include: "mareymaps_untrimmed.smk" +include: "trim_edges.smk" + +rule all: + input: + fasta = "12_Fasta/Anchored.contigs.fa.gz", + scaff = "12_Fasta/Anchored.scaffolds.fa.gz", + fastaonly = "12_Fasta/Anchored.contigs.only.fa.gz", + scaffonly = "12_Fasta/Anchored.scaffolds.only.fa.gz", + mareydata = "13_MareyMapsUntrimmed/data.marey.gz", + mareymaps = "13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", + trimmedmareymaps = "16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", + trimmedmareydata= "16_MareyMapsTrimmed/data.marey.trimmed.gz", + trimsummary = "15_Trim/LA.trim.summary.pdf" + message: + """ + Lep-Anchor has finished. Good luck with the rest of your analyses! + + Output Files Location + ==================================================== + anchored assemblies | 12_Fasta/ + untrimmed marey maps | 13_MareyMapsUntrimmed/ + updated linkage maps | 14_NewIntervals/ + trimmed linkage maps | 15_Trim/ + trimmed marey maps | 16_MareyMapsTrimmed/ + """ \ No newline at end of file diff --git a/rules/LepAnchor/build_agp.smk b/rules/LepAnchor/build_agp.smk new file mode 100644 index 0000000..a3f19bc --- /dev/null +++ b/rules/LepAnchor/build_agp.smk @@ -0,0 +1,50 @@ +rule construct_agp: + input: + cleaned = "10_PlaceAndOrientContigs/overlaps_rm.la" + output: + agp = report("11_AGP/contigs/chr.{lg_range}.agp", category = "Contig AGP Files"), + scaff_agp = report("11_AGP/scaffolds/chr.{lg_range}.scaffolds.agp", category = "Scaffold AGP Files") + message: "Creating AGP files for linkage group {params.chrom}" + params: + chrom = "{lg_range}" + shell: + """ + awk -vn={params.chrom} '($5==n)' {input.cleaned} | awk -vprefix="LG" -vlg={params.chrom} -f software/LepAnchor/scripts/makeagp_full2.awk - > {output.agp} + awk -vn={params.chrom} '($5==n)' {input.cleaned} | awk -vprefix="LG" -vlg={params.chrom} -f software/LepAnchor/scripts/makeagp2.awk - > {output.scaff_agp} + """ + + +rule unused: + input: + lengths = "10_PlaceAndOrientContigs/contigs.length", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", + agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), + output: + txt = "11_AGP/not_used_final.txt", + agp = "11_AGP/not_used.agp" + message: "Finding unused contigs" + shell: + """ + cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos};awk '($5!="U"){{print $6}}' {input.agp}) > {output.txt} + grep -F -w -f {output.txt} {input.lengths} | awk '{{print $1,1,$2,1,"W",$1,1,$2,"+"}}' > {output.agp} + """ + + +rule build_final_agp: + input: + agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range), + scaff_agp = expand("11_AGP/scaffolds/chr.{lgs}.scaffolds.agp", lgs = lg_range), + unused = "11_AGP/not_used.agp", + output: + contig_agp = "11_AGP/lepanchor.contigs.only.agp", + scaff_agp = "11_AGP/lepanchor.scaffolds.only.agp", + contig_all_agp = "11_AGP/lepanchor.contigs.all.agp", + scaff_all_agp = "11_AGP/lepanchor.scaffolds.all.agp" + message: "Generating final AGP files" + shell: + """ + cat {input.agp} > {output.contig_agp} + cat {input.scaff_agp} > {output.scaff_agp} + cat {input.agp} {input.unused} > {output.contig_all_agp} + cat {input.scaff_agp} {input.unused} > {output.scaff_all_agp} + """ \ No newline at end of file diff --git a/rules/LepAnchor/build_fasta.smk b/rules/LepAnchor/build_fasta.smk new file mode 100644 index 0000000..8aefe0a --- /dev/null +++ b/rules/LepAnchor/build_fasta.smk @@ -0,0 +1,50 @@ +rule build_scaffold_only_fasta: + input: + assembly = geno, + agp = "11_AGP/lepanchor.contigs.only.agp" + output: + fasta = "12_Fasta/Anchored.scaffolds.only.fa.gz", + message: "Constructing final scaffold-only fasta file {output.fasta}" + shell: + """ + gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} + """ + + +rule build_scaffold_contig_fasta: + input: + assembly = geno, + agp = "11_AGP/lepanchor.contigs.all.agp" + output: + fasta = "12_Fasta/Anchored.scaffolds.fa.gz", + message: "Constructing final scaffold fasta file {output.fasta}" + shell: + """ + gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.agp} | gzip > {output.fasta} + """ + + +rule build_contig_only_fasta: + input: + assembly = geno, + scaff_agp = "11_AGP/lepanchor.scaffolds.only.agp" + output: + fasta = "12_Fasta/Anchored.contigs.only.fa.gz" + message: "Constructing final contig-only fasta file {output.fasta}" + shell: + """ + gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} + """ + + +rule build_contig_fasta: + input: + assembly = geno, + scaff_agp = "11_AGP/lepanchor.scaffolds.all.agp" + output: + fasta = "12_Fasta/Anchored.contigs.fa.gz" + message: "Constructing final contig fasta file {output.fasta}" + shell: + """ + gunzip -fc {input.assembly} | awk -f software/LepAnchor/scripts/makefasta.awk - {input.scaff_agp} | gzip > {output.fasta} + """ \ No newline at end of file diff --git a/rules/LepAnchor/generate_inputs.smk b/rules/LepAnchor/generate_inputs.smk new file mode 100644 index 0000000..6c34c83 --- /dev/null +++ b/rules/LepAnchor/generate_inputs.smk @@ -0,0 +1,99 @@ +rule extract_markers: + input: "2_Filtering/data.filtered.lepmap3.gz" + output: report("snps.txt", category = "Data") + message: "Extracting marker information from Lep-Map3 data file {input}" + shell: "scripts/extract_markers.sh {input}" + + +rule generate_input_data: + input: + markers = "snps.txt", + data = expand("7_Intervals/ordered.{x}.intervals", x = range(1, lg + 1)) if data_type == "noIntervals=0" else expand("7_Distances/ordered.{x}.distances", x = range(1, lg + 1)) + output: + data = report("10_PlaceAndOrientContigs/lepanchor.input", category = "Data") + message: "Combining {params} Lep-Map3 files into single LepAnchor input {output}" + params: + lg = lg, + datatype = data_type + shell: + """ + for i in $(seq 1 {params.lg}); do + if [ {params.datatype} == "noIntervals=0" ]; then + awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} 7_Intervals/ordered.$i.intervals >> {output} + else + tail -n +3 7_Distances/ordered.$i.distances | awk -vn=$i '(NR==FNR){{map[NR-1]=$0}}(NR!=FNR){{$1=map[$1] "\t" n;print}}' {input.markers} - >> {output} + fi + done + """ + + +rule contiglengths: + input: geno + output: report("10_PlaceAndOrientContigs/contigs.length", category = "Data") + message: "Getting contig lengths" + shell: "gunzip -fc {input} | awk -f software/LepAnchor/scripts/contigLength.awk > {output}" + + +rule find_haplotypes: + input: "9_Chain/chainfile.gz" + output: report("10_PlaceAndOrientContigs/suspected.haplotypes.before", category = "Logs") + message: "Finding non-haplotype contigs not included in map.bed" + shell: + """ + gunzip -fc {input} | awk -f software/LepAnchor/scripts/findFullHaplotypes.awk > {output} + """ + + +rule liftover: + input: + chain = "9_Chain/chainfile.gz", + intervals = "10_PlaceAndOrientContigs/lepanchor.input", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before" + output: + lift = report("10_PlaceAndOrientContigs/liftover.la", category = "Lifted Intervals"), + sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.la", category = "Lifted Intervals") + message: "Running liftoverHaplotypes for the input maps" + shell: + """ + gunzip -fc {input.chain} | java -cp software/LepAnchor LiftoverHaplotypes map={input.intervals} haplotypes={input.haplos} chain=- > {output.lift} + cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} + """ + + +rule cleanmap: + input: "10_PlaceAndOrientContigs/liftover.sorted.la" + output: "10_PlaceAndOrientContigs/map_all.clean" + log: report("10_PlaceAndOrientContigs/cleamap.log", category = "Logs") + message: "Running CleanMap" + params: + extras = cleanmap_extra + shell: "java -cp software/LepAnchor CleanMap map={input} {params.extras} > {output} 2> {log}" + +rule map2bed: + input: + cleanmap = "10_PlaceAndOrientContigs/map_all.clean", + lengths = "10_PlaceAndOrientContigs/contigs.length", + output: "10_PlaceAndOrientContigs/map.bed" + log: report("10_PlaceAndOrientContigs/map2bed.log", category = "Logs") + message: "Running Map2Bed" + params: + extras = map2bed_extra + shell: "java -cp software/LepAnchor Map2Bed map={input.cleanmap} contigLength={input.lengths} {params.extras} > {output} 2> {log}" + + +rule ungrouped: + input: + lengths = "10_PlaceAndOrientContigs/contigs.length", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", + bedfile = "10_PlaceAndOrientContigs/map.bed" + output: + bedfile = "10_PlaceAndOrientContigs/map_extra.bed" + message: "Finding contigs not put into chromosomes" + params: + chrom = lg + shell: + """ + cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {input.haplos}; cut -f 1 {input.bedfile}) > 10_PlaceAndOrientContigs/unused_contigs.txt + grep -w -F -f 10_PlaceAndOrientContigs/unused_contigs.txt {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > 10_PlaceAndOrientContigs/chr0.bed + cat {input.bedfile} 10_PlaceAndOrientContigs/chr0.bed > {output.bedfile} + """ diff --git a/rules/LepAnchor/mareymaps_untrimmed.smk b/rules/LepAnchor/mareymaps_untrimmed.smk new file mode 100644 index 0000000..bf93a90 --- /dev/null +++ b/rules/LepAnchor/mareymaps_untrimmed.smk @@ -0,0 +1,49 @@ +rule mareymap_data: + input: + lift = "10_PlaceAndOrientContigs/liftover.la", + agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) + output: + mareydata = "13_MareyMapsUntrimmed/data.marey.gz", + sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz" + log: report("13_MareyMapsUntrimmed/missing_scaffolds.txt", category = "Logs") + message: + """ + Marey map interval data + =========================================================== + first points in uncertainty intervals | {output.mareydata} + midpoints in uncertainty intervals | {output.sexavg} + """ + params: + chrom = lg + shell: + """ + for c in $(seq 1 {params.chrom}) + do + awk -vn=$c '($3==n)' {input.lift} | awk -f software/LepAnchor/scripts/liftover.awk 11_AGP/contigs/chr.$c.agp - | awk -vm=1 '(/LG/ && NF>=4){{if (NF==4) $5=$4;print $1"\t"$2"\t"$3"\t"m"\t"$4"\t"$5}}' | gzip + done > {output.mareydata} 2> {log} + + for c in $(seq 1 {params.chrom}) + do + awk -vn=$c '($3==n)' {input.lift} | awk -f software/LepAnchor/scripts/liftover.awk 11_AGP/contigs/chr.$c.agp - | awk -vm=1 '(/LG/ && NR>=4){{if (NF>4) s=0.5; else s=1;print $1"\t"$2"\t"$3"\t"m"\t"s*($4+$5)}}' | gzip + done > {output.sexavg} 2> /dev/null + """ + + +rule mareymaps: + input: + data = "13_MareyMapsUntrimmed/data.marey.gz", + sexavg = "13_MareyMapsUntrimmed/data.marey.sexavg.gz", + agp = expand("11_AGP/contigs/chr.{lgs}.agp", lgs = lg_range) + output: + indiv_plots = report(expand("13_MareyMapsUntrimmed/LG.{lgs}.mareymap.png", lgs = lg_range), category = "Marey Maps"), + summary = report("13_MareyMapsUntrimmed/LepAnchor.mareymaps.pdf", category = "Marey Maps") , + sequential = report("13_MareyMapsUntrimmed/LepAnchor.sequentialmaps.pdf", category = "Sequential Maps"), + SAsummary = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.mareymaps.pdf", category = "Marey Maps Sex Avg"), + SAsequential = report("13_MareyMapsUntrimmed/LepAnchor.sexavg.sequentialmaps.pdf", category = "Sequential Maps Sex Avg") + message: "Creating Marey Maps" + shell: + """ + Rscript software/LepAnchor/scripts/plot_marey.R {input.data} 11_AGP/contigs + Rscript scripts/LASummary.r {input.data} true + Rscript scripts/LASummarySexAvg.r {input.sexavg} + """ \ No newline at end of file diff --git a/rules/LepAnchor/mask_and_chain.smk b/rules/LepAnchor/mask_and_chain.smk new file mode 100644 index 0000000..d4b90e3 --- /dev/null +++ b/rules/LepAnchor/mask_and_chain.smk @@ -0,0 +1,94 @@ +rule repeatmask: + input: geno + output: "8_Repeatmask/repeatmasked.fa.gz" + log: "8_Repeatmask/Red.log" + message: "Using Red to repeat-mask {input}" + threads: 30 + shell: + """ + file={input} + if [ "${{file: -3}}" == ".gz" ]; then + echo "- Assembly is compressed, creating decompressed copy" + file=$(basename $file .gz) + gunzip --stdout {input} > $file + fi + ext=$(echo $file | rev | cut -d"." -f1 | rev) + if [ $ext != "fa" ]; then + echo "- Assembly extension must end in .fa for Red, creating a corrected symlink" + ln -srf $file ${{file}}.fa + fi + echo "- Running Red" + software/LepAnchor/deps/Red -gnm . -msk 8_Repeatmask -sco 8_Repeatmask -cnd 8_Repeatmask -rpt 8_Repeatmask > {log} 2>> {log} + echo "- Compressing repeat-masked genome from Red" + gzip --stdout 8_Repeatmask/*.msk > {output} && rm 8_Repeatmask/*.msk + """ + + +rule chain_1: + input: + geno = "8_Repeatmask/repeatmasked.fa.gz", + ctrl = "software/LepAnchor/deps/all_lastz.ctl", + scoremtx = "software/LepAnchor/deps/scoreMatrix.q" + output: + out1 = "9_Chain/repeatmaskedx.sizes", + out2 = "9_Chain/repeatmasked.sizes" + message: "Running Lastz via HaploMerger2" + threads: 30 + params: + os = os_name + shell: + """ + OS=$(echo {params} | tr '[:upper:]' '[:lower:]') + echo "Using the $OS lastz/chainNet binaries" + if [ $OS == "ubuntu" ] + then + export PATH="$PATH:software/LepAnchor/deps/ubuntu" + elif [ $OS == "centos5" ] + then + export PATH="$PATH:software/LepAnchor/deps/centOS5" + elif [ $OS == "centos6" ] + then + export PATH="$PATH:software/LepAnchor/deps/centOS6" + else + echo "$OS is not recognized as one of Ubuntu, CentOS5, or CentOS6, defaulting to Ubuntu" + export PATH="$PATH:software/LepAnchor/deps/ubuntu" + fi + ln -srf {input} 9_Chain/ + cd 9_Chain + ../software/LepAnchor/deps/step1.HM2 repeatmasked {threads} + """ + + +rule chain_2: + input: + f1 = "9_Chain/repeatmaskedx.sizes", + f2 = "9_Chain/repeatmasked.sizes" + output: + original = "9_Chain/repeatmasked.repeatmaskedx.result/all.chain.gz", + slink = "9_Chain/chainfile.gz" + message: "Running HaploMerger2 to generate the chain file" + threads: 30 + params: + os = os_name + shell: + """ + OS=$(echo {params} | tr '[:upper:]' '[:lower:]') + echo "Using the $OS lastz/chainNet binaries" + if [ $OS == "ubuntu" ] + then + export PATH="$PATH:software/LepAnchor/deps/ubuntu" + elif [ $OS == "centos5" ] + then + export PATH="$PATH:software/LepAnchor/deps/centOS5" + elif [ $OS == "centos6" ] + then + export PATH="$PATH:software/LepAnchor/deps/centOS6" + else + echo "$OS is not recognized as one of Ubuntu, CentOS5, or CentOS6, defaulting to Ubuntu" + export PATH="$PATH:software/LepAnchor/deps/ubuntu" + fi + + cd 9_Chain + ../software/LepAnchor/deps/step2.HM2 repeatmasked {threads} && rm -r repeatmasked.repeatmaskedx.result/raw.axt + ln -sr ../{output.original} ../{output.slink} + """ diff --git a/rules/LepAnchor/place_orient.smk b/rules/LepAnchor/place_orient.smk new file mode 100644 index 0000000..dd3546c --- /dev/null +++ b/rules/LepAnchor/place_orient.smk @@ -0,0 +1,35 @@ +rule place_orient: + input: + chain = "9_Chain/chainfile.gz", + bedfile = "10_PlaceAndOrientContigs/map_extra.bed", + paf = paf, + prox = proximity, + lift = "10_PlaceAndOrientContigs/liftover.la" + output: + chrom = "10_PlaceAndOrientContigs/orient_1/chr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.suspected" + log: + chrom = report("10_PlaceAndOrientContigs/orient_1/logs/chr.{lg_range}.la.log", category = "Anchoring I Logs"), + haplos = "10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_1/errors/chr.{lg_range}.errors" + params: + chrom = "{lg_range}", + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit + threads: 3 + message: "Running the 1st round of PlaceAndOrientContigs for linkage group {params.chrom}" + shell: + """ + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} + """ + + +rule mergehaplos: + input: expand("10_PlaceAndOrientContigs/orient_1/haplotypes/chr.{lg}.haplo.suspected", lg = lg_range) + output: "10_PlaceAndOrientContigs/suspected.haplotypes.after" + message: "Merging suspected haplotype contig information from the linkage groups" + shell: "cat {input} | sort | uniq > {output}" diff --git a/rules/LepAnchor/place_orient_ii.smk b/rules/LepAnchor/place_orient_ii.smk new file mode 100644 index 0000000..4bbb5f6 --- /dev/null +++ b/rules/LepAnchor/place_orient_ii.smk @@ -0,0 +1,60 @@ +rule liftover2: + input: + chain = "9_Chain/chainfile.gz", + intervals = "10_PlaceAndOrientContigs/lepanchor.input", + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.before", + haplos2 = "10_PlaceAndOrientContigs/suspected.haplotypes.after", + lengths = "10_PlaceAndOrientContigs/contigs.length" + output: + haplos = "10_PlaceAndOrientContigs/suspected.haplotypes.all", + lift = report("10_PlaceAndOrientContigs/liftover.nohaplotypes.la", category = "Lifted Intervals"), + sortedlift = report("10_PlaceAndOrientContigs/liftover.sorted.nohaplotypes.la", category = "Lifted Intervals"), + mapfile = "10_PlaceAndOrientContigs/map.nohaplotypes.clean", + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed", + unused = "10_PlaceAndOrientContigs/not_used.nohaplotypes.txt", + chr0 = "10_PlaceAndOrientContigs/chr0.nohaplotypes.bed", + mapextra = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed" + message: "Recreating bedfile omitting haplotypes discovered from PlaceAndOrientContigs" + params: + chrom = lg + shell: + """ + cat {input.haplos} {input.haplos2} > {output.haplos} + gunzip -fc {input.chain} | java -cp software/LepAnchor LiftoverHaplotypes map={input.intervals} haplotypes={output.haplos} chain=- > {output.lift} + cat {output.lift} | sort -V -k 1,1 -k 2,2n > {output.sortedlift} + java -cp software/LepAnchor CleanMap map={output.sortedlift} > {output.mapfile} + java -cp software/LepAnchor Map2Bed map={output.mapfile} contigLength={input.lengths} > {output.bedfile} + cut -f 1 {input.lengths} | grep -v -w -F -f <(cut -f 2 {output.haplos}; cut -f 1 {output.bedfile}) > {output.unused} + grep -w -F -f {output.unused} {input.lengths} | awk -vn={params.chrom} '{{s=$1"\t1\t"$2"\t?\t"; for (i=1;i<=n;++i) print s i}}' > {output.chr0} + cat {output.bedfile} {output.chr0} > {output.mapextra} + """ + + +rule place_orient2: + input: + chain = "9_Chain/chainfile.gz", + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.extra.bed", + paf = paf, + prox = proximity, + lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" + output: + chrom = "10_PlaceAndOrientContigs/orient_2/chr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.suspected" + log: + chrom = report("10_PlaceAndOrientContigs/orient_2/logs/chr.{lg_range}.la.log", category = "Anchoring II Logs"), + haplos = "10_PlaceAndOrientContigs/orient_2/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_2/errors/chr.{lg_range}.errors" + params: + chrom = "{lg_range}", + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit + threads: 3 + message: "Running 2nd round of PlaceAndOrientContigs for linkage group {params.chrom}" + shell: + """ + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs numThreads={threads} bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} + """ \ No newline at end of file diff --git a/rules/LepAnchor/place_orient_iii.smk b/rules/LepAnchor/place_orient_iii.smk new file mode 100644 index 0000000..5938a5e --- /dev/null +++ b/rules/LepAnchor/place_orient_iii.smk @@ -0,0 +1,74 @@ +rule propogate: + input: + placed = expand("10_PlaceAndOrientContigs/orient_2/chr.{lgs}.la", lgs = lg_range), + bedfile = "10_PlaceAndOrientContigs/map.nohaplotypes.bed" + output: + propogated = "10_PlaceAndOrientContigs/map.propogated.bed", + tmp_prop = temp(expand("10_PlaceAndOrientContigs/propogate/propogated.{lgs}.la", lgs = range(lg + 1))), + message: "Propogating ...something" + shell: + """ + awk -f software/LepAnchor/scripts/propagate.awk {input.placed} > 10_PlaceAndOrientContigs/tmp1.la + awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp1.la > 10_PlaceAndOrientContigs/tmp2.la + i=2 + + while ! cmp -s "10_PlaceAndOrientContigs/tmp$i.la" "10_PlaceAndOrientContigs/tmp$(( $i-1 )).la" ;do + awk -f software/LepAnchor/scripts/propagate.awk 10_PlaceAndOrientContigs/tmp$i.la > 10_PlaceAndOrientContigs/tmp$[$i+1].la + i=$[$i+1] + done + #create prop*.la + awk '/^[^#]/{{++d[$1 "\t" $7+0 "\t" $8+0]; data[++line]=$0}}END{{for (i = 1; i <= line; ++i) {{$0=data[i];if (d[$1 "\t" $7+0 "\t" $8+0] == 1) fn="10_PlaceAndOrientContigs/propogate/propogated."$5".la"; else if ($5==1) fn="10_PlaceAndOrientContigs/propogate/propogated.0.la"; else fn=""; if (fn != "") print $0>fn}}}}' 10_PlaceAndOrientContigs/tmp$i.la + + #create a new bed by combining propogated.[1-9]*.la and map.nohaplotypes.bed + awk '(NR==FNR){{print;c[$1]}}(NR!=FNR && !($1 in c)){{print $1 "\t" $7+0 "\t" $8+0"\t?\t"$5}}' {input.bedfile} {output.tmp_prop} > {output.propogated} + rm 10_PlaceAndOrientContigs/tmp*.la + """ + + +rule place_orient3: + input: + chain = "9_Chain/chainfile.gz", + bedfile = "10_PlaceAndOrientContigs/map.propogated.bed", + paf = paf, + prox = proximity, + lift = "10_PlaceAndOrientContigs/liftover.nohaplotypes.la" + output: + chrom = "10_PlaceAndOrientContigs/orient_3/ichr.{lg_range}.la", + haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.suspected" + log: + chrom = report("10_PlaceAndOrientContigs/orient_3/logs/ichr.{lg_range}.la.log", category = "Anchoring III Logs"), + haplos = "10_PlaceAndOrientContigs/orient_3/haplotypes/chr.{lg_range}.haplo.all", + errors = "10_PlaceAndOrientContigs/orient_3/errors/chr.{lg_range}.errors" + params: + chrom = "{lg_range}", + extras = place_orient_extra, + datatype = data_type, + haplo = haplo_limit + message: "Running 3rd round of PlaceAndOrientContigs for linkage group {params.chrom}" + shell: + """ + gunzip -fc {input.chain} | java -cp software/LepAnchor PlaceAndOrientContigs bed={input.bedfile} chromosome={params.chrom} map={input.lift} chain=- paf={input.paf} proximity={input.prox} {params.datatype} {params.extras} > {output.chrom} 2> {log.chrom} + sort -n -r {log.chrom} | awk '($NF=="haplotype" && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {log.haplos} + sort -n -r {log.chrom} | awk -vlimit={params.haplo} '($NF=="haplotype" && ($1>=($4-$3+1-limit)/limit) && (!(($5 SUBSEP $6 SUBSEP $7) in h))){{h[$2,$3,$4]; print}}' > {output.haplos} + grep "error$" {log.chrom} > {log.errors} + """ + + +rule prune: + input: + oriented = expand("10_PlaceAndOrientContigs/orient_3/ichr.{lgs}.la", lgs = lg_range), + bedfile = "10_PlaceAndOrientContigs/map.propogated.bed" + output: + pruned = report("10_PlaceAndOrientContigs/orient_3/pruned.la", category = "Logs"), + cleaned = report("10_PlaceAndOrientContigs/overlaps_rm.la", category = "Logs") + message: "Pruning contig blocks without map support and removing overlaps" + params: + chrom = lg + shell: + """ + for i in $(seq {params.chrom}) + do + awk -f software/LepAnchor/scripts/prune.awk 10_PlaceAndOrientContigs/orient_3/ichr.$i.la > 10_PlaceAndOrientContigs/orient_3/ichr.${{i}}.pruned.la + done 2> {output.pruned} + awk -f software/LepAnchor/scripts/removeOverlaps.awk {input.bedfile} 10_PlaceAndOrientContigs/orient_3/ichr.*.pruned.la > {output.cleaned} + """ \ No newline at end of file diff --git a/rules/LepAnchor/trim_edges.smk b/rules/LepAnchor/trim_edges.smk new file mode 100644 index 0000000..627c025 --- /dev/null +++ b/rules/LepAnchor/trim_edges.smk @@ -0,0 +1,42 @@ +rule generate_updated_intervals: + input: "13_MareyMapsUntrimmed/data.marey.gz" + output: "14_NewIntervals/LA.intervals.{lg_range}" + message: "Splitting out LG {params.chrom} from {input}" + params: + chrom = "{lg_range}" + shell: + """ + zgrep "LG{params.chrom}\s" {input} > {output} + """ + + +rule trim_newintervals: + input: "14_NewIntervals/LA.intervals.{lg_range}" + output: + outfile = "15_Trim/LA.intervals.{lg_range}.trimmed", + plot = "15_Trim/plots/LA.intervals.{lg_range}.trim.pdf" + message: "Trimming edge clusters for {input}" + params: + edge = edgelen, + dist = trimdist + shell: "Rscript scripts/LATrim.r {input} {params.dist} {params.edge} 15_Trim" + + +rule merge_trimplots: + input: expand("15_Trim/plots/LA.intervals.{lg}.trim.pdf", lg = lg_range) + output: "15_Trim/LA.trim.summary.pdf" + message: "Merging trimming plots into {output}" + shell: "convert -density 200 {input} {output}" + + +rule merge_trimmedintervals: + input: expand("15_Trim/LA.intervals.{lg}.trimmed", lg = lg_range) + output: "16_MareyMapsTrimmed/data.marey.trimmed.gz" + message: "Concatenating trimmed intervals to {output}" + shell: "cat {input} | gzip -c > {output}" + + +rule plot_trimmedintervals: + input: "16_MareyMapsTrimmed/data.marey.trimmed.gz" + output: report("16_MareyMapsTrimmed/LepAnchor.mareymaps.pdf", category = "Trimmed Marey Maps") + shell: "Rscript scripts/LASummary.r {input}" \ No newline at end of file From 8143a3c844c998e4123dd04ff002fd5782d78e4d Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 12:57:30 -0400 Subject: [PATCH 18/27] wrapper update --- LepWrap | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/LepWrap b/LepWrap index 44b30e5..8b684e9 100755 --- a/LepWrap +++ b/LepWrap @@ -4,11 +4,21 @@ if which snakemake &>/dev/null; then foo=1 else echo -e "ERROR:\nSnakemake installation is required to run LepWrap, but not found in the current environment." + echo -e "If [ana|mini]conda are installed, created a pre-configred environment with:\n" + printf "\033[01;32m" + printf "conda env create -f conda_setup.yml\n" + printf "\033[0m" + exit 1 +fi + +if [ ! -f config.yaml ] + echo -e "ERROR:\nThe file 'config.yaml' is required to run LepWrap, but not found in the current directory." exit 1 fi if [[ -z "$1" ]]; then - echo "Perform the modules of Lep-Map3. Make sure config.yaml is properly configured for how you intend to run things." + echo "Perform the modules of Lep-Map3 and optionally Lep-Anchor" + echo "Make sure config.yaml is properly configured for how you intend to run things." echo "" echo "[usage] LepWrap " echo "[example] LepWrap 16" From c9e8b198dfd911840d6cc074a2ee8109105dc812 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 13:40:52 -0400 Subject: [PATCH 19/27] update LA rulegraph --- .misc/LepAnchor.rulegraph.png | Bin 126880 -> 229905 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.misc/LepAnchor.rulegraph.png b/.misc/LepAnchor.rulegraph.png index dc52ddb795b2f5978d2c6e328e61147fd4e88674..47746d9d0f3009ce1bb38346d1ba8e56c3143e6c 100644 GIT binary patch literal 229905 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κ?ZSc)1lV~_@?AAefE^uHV+ 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ŨcfoOl4TX}mZG%oBQgll6fiY0j8D?o?&eMYt- z<2#DkA^p38G41JyDMUwSObei%a^;K<9LW^&{f(JSJ}ZP)N#c=qDk+PjzL}j?d5w*ksVIrw~+L3o{TJf6`=OR9Ee!SN#2Ebyq`{Q}^Itc0d3w z)XcJri=XzGZ{-~fS@QyQ3z(Df9TtY-`kA5c%`|$u(SDkMjRIt?* znexMXfDYuvL4kPjU}#l^27~!t*}JOIe3Eu6HUp6Kqdrwkh z@MilSO?KDSNGz$kM4&{^sQ@=hNgd@&Kp8g3uc_=gr@8+weJ!{WU>dVm_Nzo#o@(ya z*17}}1z|39h?bX^TiV#%>Q=n+c00J}bUI@;WPAtg_iknL=%ss@m*p%LWh%kwd1tH&+D1glixhyNP5=S;oApNew zNd+J1NZwdJG0|v#am$jh`NrxYH-Fr;C{sheDjM~v^kGPGLTOU!&z=v(om$cXJI-%a ztw#FnbTum!bQeWwr7hp=p|VQL#*M54rk#gX5~frjx+;Hnn{m-05qYbnrG?sJD3A=FEB+|Sfy<+ZE1zFQb@zfX13)F#~GCl~3S-unJsEvj`K zeOG$Od0n5iV0Of0P`Iu5fTvSL@1`faYJKYGMKtWn?`jxQpF-kVxs`fJj2hU*J0|6Q z0#|S;&`(Pv-PYRr^wFb7$p>qrHR>3QZs~J9XfipI)c@5@oLq9z*vkxBJGlPgrpCl%U&hgN?c86p`z>myZ64MbuaD=Aq&Zm2K$g>V@>?JoiJczCT`~ke!E6-PeOi0e%N@g@uJ{r8g5T z;-EA5sjO@;45xQK=M3o&WOvbUpx}<6yk1gL@_4!&VdwqEkQ!2aN`baDf1hDDC1hzD(G2YRDH2TDShbyAIhHooUNS`v^)Bfh!0G zftV|^xOk5T+V0PtetwF|_xG=GY6;~juh5$aEOJbN%$?49IW@8`=IozL0o6{ zeQWFLqWWDNBuxpWw*-Z`51sMd-e1m(S2e=ui)T;61&u8!ij1V)(CggCjp^@C%gDGb zt(&6f<5Lfv<|+sp;6R_!_4KSk7_`#59p1r*W@ed!LPC)%&SoS5Bes=r!StYq9<0#+ zAwY3>9Vya(7WAS!W#0(|PJwQXin{upY?k-2_l&;#naZxPUkjR_?@2{h2h|N7g2Q)obbJ>XnF_O0HtCR)k=+PuW^mqqk(-l)B3KlfWSCyCYx?Y9ke`AOQb0Jl)&Dq%}cUAlBBDml5ZwzgI@ zkW(_XhwDZ4&W?*S3YCSxQ$3eC+I!0b3#c}@W*l25>=V|xIF!CUE9OdKBLxNX^ zjX0mcrVTgYIm~Sjpf^B;)Ik~8tLJIU%gX4JA7Q=K2EGzR$u~27 z1Hjk)Xlz)ewR|#A6rakD&ihUzZSxwGmDz`yu z0;OnwN}1qBX?&+dplX4HKw=F(E?kkP#OSZ}K-nL)*pGDk0Eq?f*kl(K*^5O6(bu=^ zZ2x`zIJMQRA5M<(T2NMMssx0E)-f-an!0g4*9?o>!=!nA4ewl!t16v??#^W%^R4TA z>%-DHSMQ#dJ*xzX2b>;WUT1~=GhJF7A@AeWrR%2#2Vd~&@B{q>WJsaN5$@F1ulwu5 znAP?mnm>m}XK*-b*YEQ9os!)OmpzLdSR5FSz_4ZqTpQtzAXh_mOG2h4otC`yd*D&xg*kGadvgla~$@7udea;ukOd9se3$ zyV}Wn$llX8hpH=&&`8EBz@4;iy6M>`@(JxhXeL~j__xA&Z4aZpRuu7TYu6uM!`W5X zO^F>{bKc#R-la)8TJhYks2^}HOs%Q^lDWCi!53aseo*oCU~bD9PJ6A-oICC?o@)8P zk|UYTrRM0Zw4DySx}&a|8gb(-930|FeM6ixj$pa#Zro0@a#f?NPPS_Zw^&_ooVZl_ z>zZK*ywlQp^HLLsijvaCajEOvM8xP!;(SBqPMu7ScTYidfAFy5a7G;t4dpcs3r=h+ z11_btoOtv-{^?c*!xvocZnp1VzBl$dFaFHd?Zt%nX9tRauQc?AXpXlj4mB%dBl!dD zm<*+r1E0>LRGkKP=gNMqoW%t6Sl8ws2j^T==Mz=Q%r5sO-J+6`7nbF3%(*XS_EpWT zpc5zf2~A5$;Q~9c)_BMn`;a!mfUme?H;a@X%!gIVHCGQ+LlfEhvt!u>W69HR$)l31 zy5m-Q9LG1G?`x~Rq~2Dvc#H4SJH7F)yuITke={L>TPwe%{kiZ}OM-42mx3&{+~uWw zD#8)VnhqD7_@|6Fx-HAQ&AF`woi~dgr>0CjzaoyeKz*_8s<>^oK!3`hghIaB6abPM z!j@BF)K?5lo>PXIVKr?#$U|I=TY12N<`oo(Upf0yoaSPiwBO^@=ff)j!z-puwCGlP zrR@FyJyg6&&-U)_+Jf6?uqkoUPLjlCMye2V+D zV_#oi4Iu|k$Z`e-qlyzk9+4=gZKKK@r6H{(CY9V^Ddk{sxonda-$c2j^y>*m2NaF$v%$fW!b)Q)=;wWK%u0f;BLB&cO5TF zCWG;P^PRAoD33ayrtbKGYz$v~02|(yj93@45M05;P=cX*B>3DEK_K=)klG#!t8>otu|QzxL)EEnFLW!ZPW-1YLHbcO#^% ze@a?~cN%br6=HXP1X91eA}&?=R5A35qw)*tU+`KcD|Mz)_6~P{3Z#Dr8=V>jgD+Ogjx_7#-}ryL(u|&08lLvyq-+Ci_ zn=a724A&ETARyjCU}|bwR9{c{;cCCRx)^(uOz{tT|3;j^rsB*M9)Cy2DlhFLlnVrP zLko)w!d-MXE_V!bYJ2WqApHJ}<=UIVX z!mG3q?K2v7P`-=o==~{0fBJ(%eve#@A#}q2`*#7Bi7bmXveI#2L1+A5IKB)gFf}vN z6jR7nnFIs2IXLU-;1D4~NkuijxfAz5piZx0&Svzjc#2=&!b5(F$Hf{Cg((9umMbmw zQoFhk(i7(6r0793wr+o+s~7|~7-Hn>dz^H@a!tI&C#}c)Lyx(Jnl4u=d!hneWGi)K ztM$CHdbY}ypobda3YmSy3xmLtkl&`iE)FuiaHov-1@%h`b6HtgYvvp{dr)$prp)mg zqL9Z9dmAP=ejTPwJ*kqrWp!Hl0f5&p;QT@f-s9mZpW_*m6HRVrDXcyHp~q|$Hgjw6 zazr%vP8H@?0BGZR`R#hmxyfIkP*ZSx!^+tzKLcs9RW5#eww}=y*=lUf5r(l$XB9-& zanS^f3R>5G&LLB+Ag95 zZ-Jn7*l%th(1R1_Vq}zTITbB;+hL}Si1^|A_wNmo6)R;qNQ@a6DZ?^t>I^`sL#IAq zEQd=v^4)|fSy@^A=G@`Ih6V;7rVi-qQntSr>lGrZ3Lbzmth87C!4<@;I!q^a4`^cA zHN(>W{`Famc!)=%ZC-JsXn5t9J0%=G$fC#moqQ+zjf<>eaJZnBhLywFSg_A4(y4H6 z=T&Y;HbM^pVba_w?tK#g9TlsoYPpSTyJv8w9R+aDpC7JRF;!H^#kep`wXC=pxx15Y zd)#U?xFVVy#+lecpp{t~8WxtS!b}q@SK^2@b&;&oGkY%dYv?mxF6K>ry=aRu=RIG1 zal8oDSh)aL?;q!FA;w5 z5)Fgue@QU5v9U4K*aynE19ny*6B~wP;jU8rG~4ZPa4q(NiJ(-BG3~FLryz;f9pqck zg&1X9NeLS)^ur_Pn_9UzzhdAulnzxiwos8rG9u40efF#}Lljb0_UJZH(+D(mj zdU0D&sFEz?@uyK+cx7wf1v7%yV_?ZkH_9=K{KX0UI0aal_wz!>xVSdp_?e};v zsB6w@xFYx)ElbsksgYT7SD+%}*$+>nWgiHXT&HM89!bO8A?@GswrX~bzH5`UhVWDL zBkW-q?&B-sEg@jeEDrf9%&a6>>y#dAnxe9@voY=G3bC^JXYgoVz78!|z91k5p`Bf? zwuN1B#YO1$ojXD$g-|ggh;>_8Ug+(hxttF{4HP~?ie4k*y2-tWQOiVbM!eIGRTO|` z2+q)HmCkFOf2@%|P@y1w`(^l%c)F6IxjCMMgoM=XNW8$N*WaF9IeQ9YN#xT&^;`^x zFz}4Ozdv_X6l~x8M1yJYPP6ORzx5KmjKdM%@jfnYQA)oIjKrQFA4f44^V?0>X4J<@ zv4C8HQVTdy`fC?(#Ne$x4aG5tht(V{xcK_s2Rpp@>hu5>dykXzbd(GR!xP^5`XMdr zA56bT9#3F&8PF29nC?J~vgfCO3+FTLV<3d-Bc*o^RP)saNK^X|Mh{@^J|b`}Pdv2I3$gBNNxxPj1O&czMN9(O$e%G~h~!9UB{) zp|dlQSZdl7yxRgGbD^caZH80NXV2uf@a1x?5FnN+L^ysASrr007K4BXFYZ_^Ra8QZ zHMF%Q6ielu>Y3S-cx*a+Adlx`C9UWaitsl7R=BF7HGzU8T6sD&Hz#1W!c4nnMKk}Xd8zh%# zx|gFNVgOD{O-)S^V&TPCLt|WFubU?9ml+wcKb|e|#>#zfEB1R#4BpzHjxfHCVrg5D zoc0tBuK)9>>NvUEZ6E1gQn+=r=7Z<)X-F>5l*;VmcU`3bUlz@rW7SZ77(n6-6_=W1ok+Rc{=+NZ!KH%kBd}=O zb@qYS?Z^khlnpe&>;RQw+ClJ9CG&VRX|KLL zd;aa&1F-zw-fK$PH*l!QLTJfCzSve8p-^S1RF>dz1l}VmE*jNgibQnYMhEawYPsd9 z2RfRX3tG_>)Ow19=J;Olx@i`63H}et{?5JZGB7cKbjLT`as5wu)YWfZ8lnlE0`RBV zs+z7e*d1Iz+FdUitdQDM^!Dl^U`T;1x!c!~e@g^(jFp|8Hm3cQ`Pn%LYq+?$9Q^!0 zi<4?W&j=|2PnTSdl3~!PMg>I`6A%!TdxKxnDxC%!Pf#$E+)-wZ`e}5}-x1(3pu-eJ zymX}t;O$*%bj!BGcYfL`Dllt0R(@2<2A4m95(Lu)KLF3U7W6fMwOT3rr2)rl0}i|@ z9m2@gv$>dy@g0vfQ2@U(3kxs1j=A3fln@;q4Ge$drZ6Z3puJ)xX45|Cto2!zbC89^ z6FxCt{I(l6#ZMCQ7%m9DsXFWcYpG-9#=^lR*6i)MLu`dO(PUY!bXQQk<@vM9VZ+kF zEBLs@wY6{Iu@JT|-DLkfVQ*k<{q}YdptQm3h{U>dsvKXPE7;%P=MWGWT=$NaNiQ&N zJtc;?gm0@WA2F85G{N7H(5aAVp)@QC;GqJ)Ew;n7C#=o|e3*UBC|ug6Ju{o`)0^&p zj{XwV&F87HjJ~}lz9SMk1-Kk;DJm-R+unA@`Mkd`2&e>6?m|{jZe1j#9<+d#EnQ8= zSUOC%L=+g8BhHDnN?{vqWr;hZ0_{r|*Pj@QCSOK!Av*2Q7mjsZuoFPIxBB=F_I;eZ ziFLs$FxsCs~2nO95AZ7?LW2j^d1W);^Mpw z4P6z`Hf4d$!eepB(yNp%gfiZ^_%QV;jvqDNtz<`8!6#SFMiUI=G&D3!NhqfUOz~%7 zEHzk(;X#0@Nbqs(DFUH~p;Jh>D;2Ur;$WI9cz~xs`y|+7#vL^tmg47W<x{Lt8j)@95H+RY4}zC`gGQ!TerLbR!32 z34s)+K;C_so{7NS+@y36P~B5jVgMH$!oqTO6&?wYD~ya#9MoA3g{9{TIUha5nns&% zn%*!!%cEU74^js8H7M8W86Wp;>aeuJc{k?{co3}PnWH1xCkBrO4XSldL?i^Vf8O8B z;K~vej2s=W9UUD#yBh()`YYn)Mc&T2>(shMjN%C;D!dH|ake?m&CSjGYUk$mX=>1Y z0Ts7xx9KL_y|jI6ble3}xzMS9=m($(Ea0mi@!%N<5jyOZG*?(7TRHCCdmz%KWlwP) z0uZ1&P{vOn3eUl~N9u*x|AVOa0LS|6!^UqUibRQuC@moh8AV1$RFdqSof#o}kCv5{ z$VhewAzMkx9?8lk$<8e6J@4Q1zW@JoIF9FeI*jjqeXr{?&hfdzS|;d%WKfERT|adz zTNRlsQJLespx}cmd#g-BwSZ>G2_2Kl7Yg=8ByKXfa`B~1p{8_&ZXM2#Q+!~pK~hF1 zcCCPPjGf=o+maGtJOsh(gMRg=Pf}egI=Nk-uL%70f@N)2q%&je#E%~>MIb;IrO58* z?M)&_{px5L$Q5cNNA-BaNXxTK-FP&D1tN!zccf&)>>oXx1r6*2VM-?j`%=+E4hgbA+L0~2o%2(s3nr5#*$=@u``W_N3m|~f43zarq-#$ z8^mDeOJ_bv`z|n5U&!Nh1Wi{?5fSK#vEYd8wJ)79L4gAiV}2HO52;>l$;RR4iLSRw z3db}#6BTnMt3L?Gr}&Xkywu)RCK-6Aki2f0`}&kl>(>Yao*=}Ay3yw`F?YhV3N_DS z9u`LowI^bGJ2AGqC?Y@m9>H5kO-s9UQGeJ)q-C^DZ0kJgHgp9F@gloY@)ref!wbxj z-@}DHJ6o|j5Ikp-hBWN~fh<}G3Dh!UU&EhKF%QU}JtVtP%NXkX_atRxes=?%&hLS3 zuaPf1j5>ESd#-c6chQ+X`RK`L;wAfon{zIdr8UJfE_`S+P)95{#Vx1&putvbYrExC zF<>Psrpr0xzh+z>p&_jyG&J|}Q--kctl*xJiELSY6~z+XN%vXamV?$MmbdVqf1$99Uynmr{SD4E|@3OQHok{CRA zeNsr=H>?ND5a#+ zM{7T+xLrDb|H`?Xn@Rp!#$LB_K7Y9QBIODpG&`CuXDsy10YSGLOL)%k&@=|Y_F z{he4MMB>vogpcM zVCH^4_|Ng+tW!t44|jzE?T(FKvSJ^HablL{X)2Yaww4#alrPzQ(W|Vke=eM|FL>31 z@~5EK+pHPTNd|ZC-c=jSQpz}Y;etcW`o46d`MM9$Z&jP}s_th{JC!+8+weLKD=Phc z9`QzP(Mg!`(`q}Fde*ygQ+cw>vlXnDBjrAI(zUaoPXQ$J#&U4d9cx=M z+UCZGTQiy0sssiZ?H${;GFy>1J^e`@#B;^4(~7=oF13!FN>X+myq5 z?Hn@q#ZPA<6kXlUy>z2mDt;+0{7d%iAqpp!zf`8Tc*YXNT-Jm6&M-1E_7EPv%iy$PEjJMvlVh%yQk)Y(&*w#6B4EU-S_ z7{4ZysgkV%yzSmVll%MI$$;eoG3-f5OHD1kc(?EjV7=HTQUVIMcbZnnAY8grm%cS^ z&IVwscT5ti6#N8!A^7+1hTcRWG2g;mk(z&g8Z1tynXBd{c7N{QK|W^fGpg_0ck{{& zlhm)6?En`6-|3zXMRlvU+Zz-`g^$n&|5p)I4vYCq+SUyAPh0TDJhie&Jy^r%J(s*C zbGQ4_*}!>;x*7VXQxZE%c2^BoGV-MB)=@1qq*IY@SmHa?!SUW|@z}lWHp)EiHm2s-Z)h#}Jh6;+aEej6)8{7$gQm(t^s}rX(Or4OiK33a6Q3#6&p z`kZ&-Tjs-x`Q@DH)xaJV?K3hY1X%|fk>BqtIM+}1FQyy5h|F$g7+t%gdU!%faz#E# zaR?}|rH?(HruGRVswL_Ftr8JM-3Jkj?ecGsI`OI)M&T`gvU#i;&9INJd12|)X4?)4 z{r!hs&#;@GJBSLAgaC>sLs|aY^87gOE1MnHgi4r$SGV^aP4?V*)m7bNBrWj}3t+tF zmlDJEwZXHwja~E0zsLz*apA+!%%_hgv)HW%Q!{&fwI#L7vCaACvP4?%c4JHhkrlZC zJT$5`lGcMX4qF?}yBp~wzmP~iF!Z~sh`J5a7m*tX`bI{tr^a7pOD56&Uj8gjK!#bi ztU!&OzvOa;ox-v)N=rk7&i17EPuW4)voQpMI*Su6N3`s>kVuWjE!GQNJtC z5xMVz7WZa*6$wGef8XZZnnv4qi4~rvU&nrhFjEldO?Z-fKMdGyN9mFh*o6;y6nSPE zt{-ckN6t-jJFYdWH|R9CtA_`L5QM=r;7JnOo~)o}nXb`50kzIZj+6Rao$Ir_^o7HF zQd2)w^nh_PO-Z&c)`~brl`SD$sM)`~IoCNqf6f(J3aUiN`{>aJ!$XIMh0pwZ-G;6|v8}6lYWZ<~!1u&B zkcGy3T)|qk4i4^3v;~=Xs;n|#QX;^9U}|~&0f?`J!p7a z=;p8fBRv#h@jqS9CfZVi!U9Xp7y;OawEeuq+>b%A?LBz1=Krh0#;6<)SAAcM10p&#CPolIO4yi z;EXnkjezT?W^+voHH{M*f7@TYRRF@OM3+m)>ZD0goMMS18RzX~lcHmjM|f|HK8WOr zwq9uLKSSlPqJDO&NnEr?_(p@P&d6QflRbl$0!(GrfbpZbbqqv3&~r|+0{fIQ`j1H5 zx$H7}>b{ZD4ws58hQUr}3kwU&-_g%C>;QK^8_F&8#(J|*&sn_&rCnKwNh;Rv+>Xl zQW9cMO{l2yqn(V6i}U;X?fLU~g*0$DY=0i3vU#^3t4?=IAlCSHA^mQ0;0;{(Bfw#h z(+LnoKJKl{cKC87*R-A_$iv&Q><9r;=h_ytUenpqDQ=PV=>n_10aUjO7@GUus;?~4 zF;~xgeSZg%!#$`>pEsGTJm~lEOc^^`vFf+Pi`D~fuD2F>_*}1*&V;E+1GCTpTKMql z@8y31ynevNT3r*K*iu+xA;BZLSF!| zdr&c@1G-npZj6#RR)ItuwzXjyKn4G-35xxCK4+f>Z)keH` z01j+#v}`w4R=%9`{PXqnLQ!$W9@LG48$ShYp%Fq?j}I9ZM(2hx#U|b}m_}P6NF747S7QO)78Der9I2l8;!<4?F#gVq3P_*Xyl!9y@R8tAS5bz2))t*qN( zrrZH#2{?z;sX=)m=FdBg=5gWol~530|hXfi)y)9gm2+boz%!!Rl6wY5WJP;{KvL zO!x2KS7fK3UL9Apc;7kKi;=&=-vyV?+Bj1Y9kE9$Jp7oAunV}Osl-P$tsEUy#}1%7 zx=TUatUk&dwfSvma%hfRJn`po&Mtq+X&J?7E@6Goo#S3IMa-)*d>iBA#&SDFiKC#g zH-N+mR zm_55&N?*=xH&kt0+xWn`K|-Zju{QGLe~gRgda>t|T(@z~wan<$&6V%h z+xim?=vE=&a>dN%^e0uZ{R9!rzFylL+;+z~5!slpaq21?D9o;&GMO5z$E;Xt;4=VF zH}D;sd&VD@Iad_@i`QL-t8C;r>t9NbWi`(OkVteSY%Qg>^#9(h=$vxr)UtBD1o203 zw%(e*9$Erooiq=}UiIASXqYSu$-TwZEi%?M0zRbRj-JZ3TAq$?U9lHcO3 zveBOQUU~LIEm#4W`z>Ik$;Ru>+r&sCSCM zqv`ZB#+1O{T+woQoy+5Iw5PKcahtyYgbytDtC5dP@(0n?AHHzn7F=@Kq!j*z!i0#y z#=Nnm5)>1w8m_rUT=+oZ!uJ4#<JL-BzQ)lI zvEZt|u~i^?>K0qX_WDbDKfrABKFu2JLjY~_K{jq=Rm)mc{$;bJR8?zFsvg37X;aD| z`K9R)_0FeHpAyX6S}zF-A~7MCO#81r_~FM4baf|sUjl${N4G0ocbm9`3E%*D$ zqX=Lx=MhQwR;{{L1%e|*^S0D+6VO=Rgf{EdfvJlRk`Kk1X=-cxwM>w;Qhs{3a~@Qs zpvZ&M-uFNtyIroj!<0SOhLAbq)*|7M)#b`lv|eiCU|D$h;6d?hRl|-7ZyA{zix$;Q zA%#d$Lx9_yR(ebq8u?m=F#gR~DdWfY!$pf_E3*%(mhUkYcB`?9$8riS-LUZ zvc*L-g5wvyQe+=OPwE6?vOu{_Y){iF;}dCcp{N!>Y+#(-=ww>Lz&vwtUl4lXxB8!T zyGoc^L>8%u?pAd5BO%*sA#{{G=3B4qB{Ac#-~JO_^%VR*va{RB{)BG3O|3&rOf{RU zgCUqdo-F7d0xPxEgey&^R>gp8UVoQ+mSI-suV3r~|GpRh7ZXvQ0Q2?O?D9MUOYzb5 zYU2XKnT0ymy4yEJ{aLr>1J~vQ#mZ+c{P_J~MsI6eZ~p5|k9}ZVfEfWWnw~i2H~r(& zryc7<<{lpLmqk#CvPcsb&3QJjT^L z$YK0F0k*VqYdLq6Xirr4{4Dk_Sxl0P!MAIw7P-2pa4VbmEZ~fY&w_uM|CJn)pF8t& zxwmkT>8uVM@sLH6N^(mXHESrgWJY2Ol_oedBaYFSc#;TGmD}>p>4-}W@Nlxs0yjBGFlqvSSBrC04bxUPHa``gIX zW~d_GcL{lgl-L}3f67Q~)S1P!Iqpsk%k2A68rAReC>jM7LCol!6BBEZw@0Wt!5B&; zC2~Xht)r#HX@m}f*+?$FU2v@IDCM)i@77Uu*HH14dszx#l6lMMe&m}yf|C$#T%p}T z{M%ltS+y-F?4DFGOMW@~#VCKzA-L+55Y?7;5|Q6Kkp37mpdb6*ttYQZA#ydv{(z8> zgmB_QsbIr<5WGOEzHpKbpza?1JCRV=+DfbN@}fU(#UOb8Iqk`|lHY6M>>P9BQTbL? z9gFMr>2Wy^_puk7e{?79FS@N1B-H9{)av~>H{?yrc0(2J?a+xuXYBGYHE0lwPQUIj zjt_ND*UdG&bB9FS@bTEEPkvuGOK(9Rbh`{RHc&+T-&A4e$kF#?w!T8Vygs0lNzJbF z$Hm7pIEbP#9o#TkzqU8U0G!p#A@Yglm(bW;%)8uvsNX5K*V)o4)q(e|y2VkPKb&Wf z+fMOyAaIyz>Vi|9K?>9DeVM&$GBG9PWYo;~vdhVy){6{Jl5}&)LRF)f@14D^kfM~g z%Wz!-N)b?A1b+F)qYF;!0?j&?`l;M1-1|iNqx|NTObY$N$p)dP4%)NVSHL=yu`6YDzA=6N?OjyP#g__nYIeyciq=)p zIYoz$95D_76xFQN*a_2t499M9e_s#d$0zn4w)Z`5k( z^1-8i1QhpgPS5`*f_U-2KXv54KLw0iUEJ8-UYWOMzb3>2=uQYhTxZXaR{URroIS)|_h$NdMNuI$ znIA1mFawD5h_arc)pg)qh-x#5=&z5U-3H4?LO2!vh+N~fOeVS>-wR{IE)bc#(SCsa z63IB{?{d#il)G84e{qGf=lX@BV9ipxX|?r$i}@jRh5n+Inok{!SfyMv2d9Rk483UE z!Kx$k5(wVn`Zb00(5BrbqG48_7eyEVnmwof_cVNo7p<7Mu&-U2XN+!peS(A#r{upy!TS5x zmUV})?K)GBT{P9LxaOS~OU2mYS&cW}YnyGvIw((6TV1?+WA|w(^B>lNWjpum^c`~6 z{jXu`p+?((Hyk-&=V>$k!wA4(YVS&}pQ@3!v=U%q;y8LTTcX7G`|TVRi<=)|C=u0D z@7r#Xt^Rtr;{B@@(I=X`P&3n!5@>h4+4kJ#`CanazHy6UdoO$T%elYH4>ujZ3<`OQ zGP&=0q?rfJWq)M)frZFl0J-Bv=a1DLVat6;I|)TD%0hw{;MhBF8HpQ}h&frIiKmpn zY&*Cgo=vrV&x|=qA)X(8Cl>ESKIOGug91Dd(;rKQ{1hdn+=JGkNx<ir(5(~uC93irkD-m-~U(^OlzaWVH( z*Szw)=W!K_xa5I5!aEY`PyES5x`ZH8M+^!{#~|byDNUN$m)ys!A{5g8a}D^gD^26U zfPrNwL#)P@`}60E7(0qW`@&9iNt{vs)C^t<1C&Il&i3GmMU$xR5{&KSIMHm^9|Va#jT z`P0@)?%S;&1wmpBM)$TyWRvXHOG~NAPuJL#&iQI}KDT$jToo|5xXo!$SaE~v)QH^o z$7@w&+rf)}Wxl?=l2K>#e$L+~xj|LZ@s;pA34xU4cbOdJF(oNALBDBeH?EutCn2b3 zt3pbG9d{w)rVjbx&6_VOI%wHd-Z7E7%cNu zU8`aJQl$J{l5#_A`@kd5f0qb^G{uk0-J`9nV#n%TsO=7H6|6Sh%Q#$h9Dt|CgJsY5 z`9K!?i%ivXZ#?!sNjX8NPT?Jr8`QeBzZyK-Ex6_=wbxpBIF>x;^-nIEy!oP26 zmrt&+QBE31^XP%SB_}}dqx?tWbx)55Xv*}?-+Qj?c>Nm8644An{VLQYv49DB4BcGQ zrWXZ0TtBQ=<9UyayO2FSJ^1ubyGZ5&`{JVv@MUyU&X>2{oa0ZA3+~r7sg_Y z9gwSQY@}ujlR0N(Z%>cT+I1jRG3(e$c9rCBz3pA3dZwPahgf`vg9RlnUEUShK~^$A zU>-_hqM*~`c=h68QhE8qjas#^vUv_a%}95hOP9&J47Yd5m)-uPVy(R2X+ve2ZR^a1 zK$nJ-&CgR=!B?NpDEyGj`|+rn#Ll}>b8`>UQ3a`=Nh(;k2G`-SCm9 zD^682MX^zDQkBlciFvXhq(eWan;Wfpgf@Sd1ns?lOLx(eqYftGZqKZA(2!AtNluf~ zwl_eCN8rzY4!v2ePNTplgD#f(Z0nY8NJm-*qNQ8LwE*J-&Y1%5wLHyV$PPg-eP2au$bEeZq%ttP$ga z$#0FXbCfye*EgY#gk%hHGJ;&{ivu=U$E4rjoNS7c1XLv_v;Si=$FuyVl}_xtBe)YE z9>mDlf&N}lIFOIPkYIF8&0A*v+)D*A0tDziW4GGbMFBQI%>%Ry-2hEsvS^>c!8;fK znwZs{{t$gF{d00P69(9w48F1wyk6aD5z4q|kehniEI_7hn@=ooX+iLqE<0O!(dYVC zOD>{D`|4lw*LOM<+@%cHWb(7yQzJ*S_jS;Gl**T{&Qg)>@vY{W4Rsk0Hw=YGA@NBi~8`(RmW<@`Ob#nu?xn+|S^*3c9ql2#q zTh=K)`p3f6htGj7f{XI{T%GQyBS>^hUEN_Cx|KW~*`Ti9 z8kcD)F}R~gKDqniaZ<9Np?4Qpye}~9bCzyD-eGo3@I~Uv9?44{2On2@Q2KZkn6|Jb z3?BRv@t=GiYE~%0*s`6HEd{8m23tr2Z%Ah|7m)3q51l<3DySNG{Fdwun#MgGx0F^q zN@7lH`tmu?Fn{D6KSv{UFV=?IT%mGwrgO^SO>QoP%Xy1;!nL^rYlgeeod^u|oi6Os zCC1P?+xOrRP7IR8K;gO@l|?=kz}@$D3=%+YkI>xc%fuaHJ5l z6MM<1;&SQf@vBOp^x)>)EkO&7nJva%wUMvT6z=rA87D;YUybH+O(0hK+`&&M7;~y3 zKxtqn!Xfa=h!a@`I?7L@3wu0s+suekPRFv73DOS#>m?y3{DFx->!}pVC-!{+n8y^l zgFiTWVZrwKisJ5bo^MO(w;gv8mC3g)C&s@4&WT*}#Rq)Ob z6&7}5S8qnBadUG+gbQWz9lX$XK_>|7L6l>kW3CTA%`;$lM=7C`9&)bCHhx1v(z5vc zCDC?j&UniR3o>lV;2zbwt+q z&6_un4&+w}9;C*P)&i2aek%NRizfjh&F(;U6s_%|;t%Te&%Jfr3-zY>sFQ}47K|@M z5K+5w@eO#%Jz1Ug0hfUcF$LG*)0r36*X!*Pz6$V_)SCc-b&8UA-6)-_9L}(~FAHT) zo|8y(y%AItV-2b#U^en&6Ce)!YPy@BkKN^1_nA}}0D&<=NefxMRC1fU!{UG(BwhV) zAG}&xJ$frc`QX8WMA;QAmw;iQ$iN@TR=omK7rr3+z-WZN0()`^qS6-VGXN6-wr{v)M@psU{J+3vlsa-=fi^&4Xar`p3T2NQ< z?BAf~$4)B2G`v7UI`blfP;kxI*a_k+I2+@{5Tvq7#dM0p&x8-BVJa&Sl`?!P3ysaIZvr-ld|| ztSG*yCldnNgVb#FyRCj*`)tb$UJDUCsbjKti_d|oWfAxm;c(rA1Z94or2tAQcyGDR zo<&OzLGI8;e<~Om;SHnxX1<(Lj3avP;>E|j=QK%{ef$$wpuVyM`v=%bJ_wy8>y(K1E=pQnL)XStm z11aGq98(p#6s=k*S%l??K5n8bL!IO;ud2U~!h&E&d5_J`r&k|ynCO(OqBwd#+)R z&c*ym7e8A4T~t8e)Zf@HSUJ?Wb`r2#?D^i^FfV+uX9@5r>YRwP5B87S9m1(49M-tX z@1C;`2BXo0uUwZ0fd_6Gs?Ta!DsU6|)!d-=uj}jord7Vu+cQJ z2n!h`fQY*h!m=ympwYyS5)#j|2L>FWlYID|J;*223N$YGC&FPyzKV#7)(w8>h*zcd zmValtrL^~`d=o$@u+VU1Sm-N^$1q*+3?X?@%28ypS17Q?8z>$aT(|}VPVzC+*f?!T z{Q9fHPLKRg!u+Pavx)y2&Kf6X8mRMpLFjc70jbqiw8@gyX%5mtA1nj>ay9&eCW9rq zFMnRU$_Y^&AYXj6%rh%}flTljUR#+^IeW~CfhJI67nYX1&K6XeD*_+q-l<3?k>6*E zU9rP%-@ZM)78e_f$iL57rM;a?2Pl@k;n`zggdNM=8yeLC#U{7Cw;{6=x7jm3c?wH` zsj7RBkPUmxaR4BH5c1p-p^7i`#XE(Z4w!5ZyhK)JDsWX0h1KQ%erItd$A;>nCY*qY zy9{05L&I&|o_+17pj0GULbTtMX>+5JcW>I|L1@LG8sd3%shP(zTwJcuih)!BIY@Nr!W$tu zq27L9Gi2f?(N=P7B=L`mq&0lk1(t{howu77wS4U=c%Q%0sI0fuzFF~IiI<<>58Vh> z!u}#rl25&7&!Y;iw!)|!C5_zoa6AxgORMV|0yg2D=CwmZM?pz?eHL~CIRMfL1`vo9 z=gRE9|7RlKlW1F+x;WT`LJ)=rj3v^C#RK0a(qf4Ck80_8T%4tAR>04DX-HQ%T=j2Y z_$9ix%gZ6QD7Fcf&fmV^dLpV}d{5V7Wa-k7ouagMRA4K(*aa_K=)B#dg<}m>3B;ag ziVS#6wO;H$q{5-n@AZ6ARP8_fg0uz}xL7A>pqI6U5M?{Q42tC1zQ z(;T(jk_3F>5B-`e{VY)d<-PNOo1JgJn)l~#?@hkPph$AQ(1*KhdC0|5t|EIG7?7eR z4me6lEHohi$syCqkGXzILnf+bIFacmH_=MJgA{?zGXG@j7Z^YQ4u_qG3;B- z=$ax50+7CtQxUV~MM6;PficAYMWTh2oy@iQWIIf`>a>?4<=f_u1F+r&i+8?1@x49* zK~Q8V$$bGpLjTwv8k&{s;N_Ak*Okhi;shfa^ElN2~Hse?i|2(X)!M2cqjJC87YTL*%w! z>ffCf)t6i<{x?qn5gxyY>%KL>Z(P=#cJ0mAE!>(6I95Q}pEzLTGO=%Yges)IA3nUB zI#;QDs(tLRw@pd4o4lCCB}yEjSb#V7BQz8+6C`DG!YiuF0-O|BYH2niP}ok+t_cYp8^5`h{o{JIme{-&J|S5V7S=PT@o_| z>qihnL?f7`%fS@J{F1pH5}`-MLq91Hb|_pHcOqYs&zECn9{Q`2@oBbU+-l#Bdn_A_ zbj>p}GfBn8(Px*GFK{tX;js`^6mH&}`dvaocdJmJU3Q7OmIF*Xrgz1UjbKDIli$tSh>>DQd-I#QbMO2cxh;8P_$+V#Br)(K#HbH6Cv9KDq}eM zQ5_k0f8N@};9g~uZtWymBbtb>(P5P1<#@cmq2`832sN7(5!n5DRx8s-Iv$OL-G7k#cgUoQo z{f&j%kH?hs9?@B6pWforh(Z~dS5R=gNRgqis0cm5nfAwLg$K{w=r}Rbk-)Br${LB;Y~(hyCkDOI8v*&&S=r z_!8*@zbw@F&?6~QXa}&G5_)A#Kyjiz&6$E0>G8yQd zkW*6e(`sRp+lNik+S%z32hhxn6}knw<|E9^)g}c=RaJUn&hoY2Rpg!t-JCsqfuFy6 zbOG$sV~zXJdaTY3GJ5wo@S)XaVUc<8fVf4awX6{Tr>D8Fhf&d}9Y_-B4Eg!f1n&vI z7%^FOY9F1-!CaR|Ea3`i(&?SwzpE~5t+NovYBY=!(oLt#={U!85@1zE=PMv6h(JPg znqqQ(I!C!EPvJJV+LMls+tahN2A-aJ%1223|C;LP=%Av8Wo38#{01bW_(CI1e40Kp zm@bEhj}bp%U!PW9Uwuzc%=@6CqM|<@xulPoG}Tm9@7de?!RUsn6c6bn690H(nu&?& zJd{i7Tme{+HUm#Lx2L0{hLG!GuuEQlJjW}Xvf+CN^SLmGA~_{Rdh$3OUFU%SJE@Q} zMMZ?)mJc|s#1#AXb6V?VQ=>gH<9}RJa|QVU=mgxl*C!2iO4TSh1;)%Y-gp{#@a@3ZtcVUV`-f`+U{|<&W?H+1Y2$yS(B*0p@CS^q5Xod;N7h zuT*4OvuTG^S9TI~x_Hg$Ej0op!2S zR#v2h9_U2Ajys*k zg%$ws8{IB(h)--2>@g$|C4$;Lkag7h?%fZV?oWIhcvfTyx_yC?$Nrl?(QGlOe|lZedjD3ag=0i5jE$qPV_{Xg zySv3v^EH)AvV_#BY?o=@#p?t5^zJqTe9!2C>>VAy8?h^v(z4M~>btr!q24q#HN}DK z?(6ey829OzEN?%@o6z#4s1}Dw`e)Crq{t;q6~uSoi?Caz2*Y16$K;ja(cZqkwt)dC z>in9TZh*!gnVzP`hU)I`CpvhtJSOWgI3;g7sk{9q*8esWkHdbQu#svjLMHR>gq8_u z+N2^5;US8oI8CjQZ>iX6m_R|;O(hALcYWr8&g(N)zar^r0vCopkf8^RCbz>4rAXq{ zxVj2+O)PjrIZw*%L+FR_Qw1UL$$ApnE<8#(E;s20Ok^?ceyFal&R{F;a8|y>qZ4w! zW@c)!@}Hh)q@|^yl&fuSR;X<;Ea=Ah>sjiSD=39>pIKyO;CA73+Kc|J?9eGkFC8d0*{LjgMl?djT+m`q?<5tj&wR!w$igOXS>tQ4^TNT0a`T6q{ zCJ{tj{+@D#mGw9fc=4tpZCzFF=qnIbHa9o#XI#R`1YjSzdZY_u$`B@5fw>q1Wv6yp z$DMokhzcj{7aZiBis?IP0&C&~Wz|L&jQ6@RA7#sA*8RKBUGJ>&*>e%e4QSMfZyqxO z;pWdPE2Aptd76{Mof6`Brj~p!p*V-ZxIlwgYj1AlpRL0<8035S|4xO=eb}#>YasMs z^z$C%C(N%Ek1~dfT*PgS7T*FFHRFq2jE|(Gvfdw-J^9TS8-ia@kl23x56LMgDEKuw zDPdz{gMA_pdtO-h5!!W(nap>-@9OFbv{4HGRofz6n1m_G<*-v65ZOg{YjZe~r){-U ziReL5E~$7Yr1vOEdmNw}`aA1~>6z(&*p{cKuZx5!8PcLYJ7p4cKH|2FmKGCHO+)W- z`sc(%f^b3lJC56DFa%vlNQm|hw<2ZNlSut#?URflb;M~7n53okPKVS#lLvhxQQwXQ zR33MK+5Y0i3z$(K!K4e(HNk(75pyADjcIF#y7kX}Yy3Q_nF4%JNQe^NMba*0C=u+X zM>lFCMQ)?+A_~9r*GrIj{yX^t138a+5|xFYop@w^_rK6z%c;jkuleXPW45`~HhXgo z**B*819qfi(iRlT|MFR^5v1d=e5?w z(SEr%> z9Sn{VSzdtb?BUy36}#VvUDB5<*uoUcUmhTUphBC8AOCVu9&-4pRZ4lKKO;-*y%B@~m*q{0!MgAT(gKJAnvOn!IQ<3?1>ge6 z*l&&R-|Y`=GW}(%BzepSk0!rmQc#j(@)}cNaTp@}7sZFyhwMt;&yT#g`fLX@_pwa@ zNNoAWv`8VC6I)YV?UkNRrdU)GnG{#bFCZ|2L;%w}o_4SA+mXOImmQBD&3iI z5W0JNB@sQ?!m2^XVh{|Xi?VRL4@cJ8^D_;+|1|^WBOYFr>*XOz+7$oMO3C;A_#p+C z(3LA>#BJ!jfJtAq_XZ#%?Nq5jA;rwhOkk(JtY-LDo%4j8q^s*Cgi~Nd=mF3u<>lph zhllT9@QArC)23*RI>}PQU0Wcw_QMAf#4i+*7Jqz{qm0p{A{V2?k9Oz5C}83e;V&T!c&8^D92-PqpfDyuuL63q>87=g)^nY>d9@1#l?)M{(#yD2@B); zo;u`RbbO#DRJIMsb&kNhgkCBEgfG}$&PkBh9p z#u0F_sYP6tu5P&JrC?+@qe9y45Bu9y(2tv0T7DWCVS}(8pahGElNb8U+AOsj7+%z0 zN?tX{!ytjrL(G}n(OGX^1pkgjlAq}&RvFae={X1)kHoJv6{J4CQtRDIIj%1JDz2b_ z51>?(N@(R(Y=mCb^8ZeB_2*GrG&CTMqR2x4N}>Qj55IBbR#N+|U9gUTs6;V}2vdgx z3@k*w@U>lS(Kw(0@QSZH?t-d-JoF&u9!-t{iTr3%a0hubFfb6?99d0BM8vOdba*BN zO(f=<#Ft1tdiXGhMUNr5lp#o_w$I#ySF_h7@w>U0YP|{t)*O+VYLglx?Xv#ta#K@d z#NE9~-Cb3`8dDMW;X3(I<;hAxK`}BKBy$|$iD<_rLLA<4^8S*?2>y&mKnE7)|Ax{g zfMPF;KJEZ`BOUXt4u=?o8kZ~Tao~i+{r>SZCn$H&Bz4{0&%5POCoIelU$L~dw)?LA zk`s5qEjkY{B0^9m^xW3r+%q0w&EtHiRuMB#(~HRcai~I1>_X**U4$lS!u(F8@gY1H zN|TK0T@6*U1!&hn8l?NAohin&UZ6$y{e4jQV@-@#WeKg{zWL40TBG#0yOvg8YjECH ztiP>|1Pp|UJE*YHU%x2DlTt1)(4hKipFFRl=fFv>6O1c%E3;_MZ3r?9M=bKFm z9tk^v6U*l!rpUFmgUA4dDyvI&^0I8u^Hfq|PmugBcR5|kMjUu_>|wgUyzqs+uBPm2 zI!JZc^0v4`=sx-PiCuFXDeAjkNr|6r;6(uojek6D-9Bhkx!8Q^c|rmY)fh2QpFi)7 zhPc|gm@hPoQDFjPloV@F*JMuAp=9o_qiUI7` zx8^?`AYaBwj8tjDxKiT#!~(u~k#!|yQ7tQvH2z^a!}*BhQq^)=YjblYD}N1JZaPJ# zq_`7u)WKBe+MGIdieAG@k$Mcth(KR?x;Cozl{Pm8 z=EdNWKq^2m#@944j)3^H&~0ROYPJ=0EMF86*`Y`&5ic-`YIY=2O;_TF9LC98zhe)Q(2VKRTDikU2(pczV-ZnR>jNk!5p#s6JT#yFyL z=e)`u%)QFa-b46wbPLx8s7U|15sms7FV~9hiwWPewx?WDX+^$hvfrz}aKcogR z19w>Z;vSDRd*w6K;}0Klpr`80ZZAqir%8VEkDdIL63z4o!zpv()ivT^C&2M6elt(N z)hWO9e_;oo*RFVGr15!VWMscLv*P=Nn1qD7SewdSD3B|~Fi{z(L2kv$VcfD{&iJnN zN#stRl{J6<==SDMr z-PsG721nH_Z@Rs}ZG;0zMDJ}!cjCr_`+eRSj`UYB0XGCG`MzgdzqKq1AOQh^PXYs| zE16kXF#csMJOIFQ9mOqrR6 z-^}=_{b^2y`U8E0WVy3jzvIdO-fuh+ZG1GW{@8HKoxX(6gBAPzB~A}l6l={7y0z}k z8sEU+4EgBx))|e%hYu46)Y+9B6zK{>6>odTHJ+oS4kr}v2B6db08SzXivkFF39$aq zjGTX*!fC_~1PM%@sx|qJXU}w@#_%#?;|Yr!X8fUfhAR>143Ug#_RN-ec0wYz3#{?E zh~sRTv;lU?#gCKXfcq><-#8zE+3cA)<#*WCHhqSyG2Vz2=R9$M2b9z7E6COc+ zn~biz&tR>ZbLVT`t}3$+Wd_uC79EgfP=sdz1s$AtZK85}`okP~s~Fv9o{wewAhQfgeAfA{v5WyP<6P&+YQ9 z3u?WyR|~z9nCWgA6QdX?tXeLC3u<3U#LVDO*ARfQtpi=H`{P>UADQ#~n2q<)W;0gBylBylbf2H4bgJ zcv6pw^@oh8={<@7OH%%WLyIgc5GFx zc4}EN%J_NH&ufLwZOfs?Lm}H2pW3)x@*8pcdpV6HVg1{ljSkkkvJaw3N&{GxBV(?o zK0d3^W?l#_NA#A{{bYukic=fET+hDMa!~J4IQBA(?&i;hggM!^(R0;zIQRYpxsH~X zr*IcvbVE{d@@V_SNeAJ}ml;&7XaYy;SxmwFBKYFF(3yFCH0(u1gMW$+NPnu3cE!~6 zG}waBuSRGTF~gvBU_jU5n8m_^Fy_<&;s^XjE{N@6X_`%k>Sn~>0(Y*>-+lPdob{Sg zI(KLL=k^gFKXVtAOK;z&DbX0$*$z7l>cbYlRkZ5!!Zp3V>UV5@=pWjxPIft zhjF_{RY+A%OTXy)j#x1;aP<^HR5y84}iClZh=K<2QQ*IyiPBPrgl=X)#HV2;G{Z!(OCX0oIXNwC9hmmW&8^-sk$fGfuD_?9b zVF*=R{vV`7TR`z-RT#qb-3ilj&rT2#uF=s^Gc)$=z@Tm5uOjvKGK*$Ca>PAD z`dC*=axxhdL||4RmO@`k#CecSQ5;2HX3^O4S$ z*NXVI@ftvt!>)jWwcg_0_kG@J?!wY1bCZ@RiLG3wA`LvWG43h+A*e_ws$$Pt?tmx; z!YeX-v<=uNdgJbtd5Vcq(Ytp;%`Y$g4}oHwAd2#wM9{D1d=dTy0i+-14nVAQ-ogR1 zI-(h?ipxcD2otJZWf&fCmzG$GU+l`Q(#ne!INi zS%hWbAPXLtkMFqdj+4vm*>8;3Iq2G!M>}~s{|{B)0gmP0{(YlV3Xu_sQXxVql7vcS zH0(V}8OfH&PT7^nXc*btR#rAyDU!^D%p@eEWb=M5zyJR|-uF13=Q*C|*Av%$U*B<_ zpLHf0@g@K0Q1=Y8yFL3u*1duoEde8(Ay z>ew%TT~Wk7F#PhZc<~Sc7`e=4n%xaGW&@;(5>`(vjvG}zi0;8AP?dlJ)u&{eObfaZ z04W%)i^3fR>{?5MtsGlAaj_jTSW)@*VdT%Cyw3|=O$r}82X1WdfvJ!Ut~2p(Ug(e6 z7#x?FozI?Q_WBV2o^7@Dl#uzW5rH?E=EvA^K=a*sOpphU9$f=hqj%#%ymC*8BSFz* z+c(z&)CO7^P~U^P0d7z4E3*~=m#nOQz#mk~w*s*1LPyv9EakpE{Wf zNbb)UYv;SIZwlUKEUD|I*E| zGV-nR^{y!d=J=*^3trOc;k-pjvY1R{kh(TZI;B7AwJA|YGv=MyF(XvusHX;{#I|q7 z{IgBmvI%1yU_BuhR=)HbBu7zE>Qrjw2dVRsIN-Vxc3 zMFTF=A(`du3DHe&c7#M|n zA#>_x^!N4o0tZaonImMNCh@*-?m$m1*(V_-^@GxnUz5E) zJ15xh=OR%Ps7fH8@l27qS+Fyjb@F{-r9wHo&fACC7N(TQeY5u$o|d~ATx@xY>!^m& z8=x7vO!yWGD}3oSr6r&XL8w3>YU3VCgVrQsqdi&$;2+BKYE4kH97aCKyLVMQlaL1U zH}Y#Z_kowfAz7CuL_Uc%>RkL(YvA9FTbgr|wGKbcmMZ7=Gn$SwpGpO86a&351rA#r z5ZpZ{BqeKb*lvGh_gp^TMeriF^F~ zA=>By>pm9di>OXeX@V=##E<2MfWcT-8>u!1d~08WemKNCgyQ;ok?!x(6nC+zVjC;UFjy6 z?`2$Y9H9i*`QBH~kyuY{XHb7pykkq8BA=UA>_4T zxez%Ge3H>Zf`S7-f65K0mOZN;;CuO~prj-aFgEpRnxVK&DE(9%xliBTl6d8C8z<>V z=sr;>iO6*Pe$mN!3YRVM@mhO&^xi~?qM8AJ1Mqa4BKa9GMwBn8zs7*?V{TSevhxuD zrC^c+j&J}%A!NHd6ZX8x0$GopNj{n1R<0v}brs(7uRX~1`@Z>l&2q24g{Z!J`{n0n z4c8oq+<~_%OLNnU<5_1z_Lq+9Pf{wGMJzp!SzrUg0+sm?@>cRv{;mJb(b3VItla$k zjX;|~v6EzwWRbO8p9RxLHPVual$KJ1ET^^9)Pt_8e`4yE`qtdRKn=Zw8+v2;F17K1 zSUq6l=^ANZ9NB9p((!TzCm|m~?b#51K-s}oA_|fK5>1l>{s|ZaW~uf-?L#a*#SU8~ z^shBIAd&|G#HQ^057yg+)RVz`iXZ5Z>&anCnc?m{YQInREzn6VeQg?Kbsu2e(;%`Q z_<~>0gXa5wmfOTFU~AUp3p}L$WQ6z-(Z)xQ-bc?5>*&DKnC1PXep8QsrdYWToCTQ)kNmiff!* z-)6Ernk9H6NHl^E%spa9Y_a5zTlX@(tPgtpSll$T9>bXsPfy~rFpGKlaz{b4c?bF- zd~eF?ZcyETAoY1m(|-}CPdz!qG)Q*jEy*us5fIxTT>G5v;|1&Bzpl@BeJQ7YHRZDGf&h>CqL`%*c_KIN>g8($6q3nx_5?S#N@UXr(D<|3C3?0}AqWZ~m98$1 z&)=7xrvkd>iuv`mz~|lJ*JqT84P)lZvz8CpARhuI1lgbGTm(qiS86}FWJM=I#iMZ` zB0L@fqxQaX+YQYJ@Tha2RV7Rxlb_ZNAtawdNvkva_3Kvwp0(?DoWg^*V3kB;xfvLm zjfvJdF2JRMru8%Jn7wjo&_B_|H-lZ{_$QXDk2<5_MA6HYM~&7 z3gw2j&{E%(<(eygO&`XziunoE$N4YjVR{F#4FE0^Y<$$mzXR z8Q^k|p)BA^CR9Cz4&&kCCk1}^`K5$oyW?T(#W{@I=~1N3$8s(1T@NLImJ6GKNXlU& z!aHhR_d~#Z#cfP=o=6HoAcZtTMw(14-En6Li%>sO8NN{jHo(U^sYJ2@`jR{xLRBN2k6jNsWgl=onH z@d8Mmz;b{*`%P|9hl<+|cpXEWb6IbWwqN_hN-buL8JloCH=Vj}m=mb{FdJVaPkawNFaKX2VH@*&)_cdT2IfrmO;-d#Vw{I7M z1_oJN7Auz6MG(!h{?m)sx$7=3n?OxevfSJf$*xku{EvY1Kvlvl6>Nw9M$oZ<<_;Y~ zGL?XDa~miDNZw<)K=)xh@V??8ReLqFuxI4wPrvmqYy)w%%F2%9 zRa6M~X8LBNji7qypLUX!8=YG!dY(@Mb#B0$b|=Zq7mw0q_C7;q9aEqH9X&nUDkDSi z7_m^fNuC<2h0i_>Yu}wJY?<`;35s+OfEkF?*xozhg};VwLVk(wuBKxMs{@BJq&fVqBK$3*w?RO#1~LL_ zhV%j##R4Qj@Quj)S<#e({%~X`K7sjky_cUKiL^U>Qj>GTQJR>9#b4g;Q>RAFS`Rug zswjZI0+K;`3toQK%a;`;%rgXdpp5*mpHs?}?~Q5549I+ZVKp%rBEiQi@fH(Z`# z*1BErpesM#QQ&pH3$n5#PXp7~oMCZipR3O%OcFKTs0>c@?xNm!<&46Bmv0~@&JjO* zz!-$w$Bz%q)(#9~h$Y;E6eQHCY6ar485tA)SC6m+9&{pJ{Qv&Ym(?cI|GMpMH(pV3 z3+SWQzrW#1h5SJ46UKmyw2=L_mDMM1=IcN*MV!lg8>9&wN=gcarCJ+2Tp+VaL=*b% zolg~S@iSB>5C&25spWox4JGQbfD0df(^gdS#N&@DAKg}bX11xXl#L>ShsEM|v{ALD z+4u`i(dt(tXHCoG_cKC&LGr}4a76f#!9~<^2=MsW-!N>4p8R^+wJ<&*cRs6Qv+&VU z1Fju2g8mh}x#yX4KVXoxD~ha2CN>9`fi@PnXBFlBxn3&@(gwPt^DmEIVUkjIm|wBx z3Mi1Cw*tqxHxblxU_nv;z#!zD2pq)^BSG&1z$VPiQ2qo6Hx!m}2VB;VK$QVi{f}t1 ziEhqbl2cP(KnUlBFtPmiFSq%o$1(n*U*mqL6<3}{yJ{=uQ~Ri@c69#gJ}bK8{I1;O zV?s`a5-3KX<=&*U`3JO1@S!nDF;jSF6xDt{h9V3d{$1uUMOJ}TV9=y~kW8q_Xkr5V z{C?IFba?RR-Y(A|w^y{JCvwA6?b38{27$DXxlQNGqy_RiZ;CP+tR+X$#Q23m%!|)N zgJ}$aiKpFqpl#q3}5*Ho672T zh{%m6LhyshTRqK@A(iq>7>+m_ySU6F)Q=uLB1nyb3?%-6@<){{EBn`ixX4o;8t@Jf zC~32nliz%6#i=U8RaOW6XJrptZ*#7V9RHVHrrFtlTc=+gcFaYWc*s*}S88 z!rAq=>hV|YOk~>L`PMzFS<(_RLWbRC>2=LVm(%)sYk%3r=ESvIoXRh^%A-t;&`Y;33C0g=0=Rvt~vAcKbH&22isGpP625ueFhKf>ztgpDKM*k z(T`D6GMsAvZnJMS`ATQ(ExrvZ9!n-03>WF$e{ICs@yogN#IEYKW$Qbyi(F_(KgT`~ z{aGvBg;pCqtO9P2&E7OeH#V9a1=q(crEKY}bGRToJ9aA742pbcnMj1;5o2zpnrk0D zd>Fd2OX2JtY(Mi#0vd`Qbpyw+VEFTVZqfFOg6X`|!XB-G1jK7rD%N#R%q@9dv!X1} zh^k87m-uU9;`Hij_)~C7xbwSl=QQYOJ32bDeLQ$Etvy`u zJIMC4Jn@;VH^5ocQ}&?~f)I55HLGQw9;MpOpzQGH@AIiz!{3$G9!EWgGnnj7u&qtb zJ)YL|@bK!sZqmbPdB(7S;*Hqui|@wVGk9Y*4SwMGcZMz9B5~@U9>=b7)#<)`_ASzj zQd`}B)Sc|i(WwKog>uHT%G=G9_xPj%8c{J^pM+iv`ni&l5)uuwZo)&b_^9&Uj?WTu zOQ1w}X_|{#tVU3$iHrNelLV3nAxJ%CE}9l*2T)V8a|L6|dH>SbT|TAF`dgTXpaX23 zBG3K1_)a%y&}m#*Z*)lCf4cI#>*95>zvAK_D|$EHKdsFC-9}tCkybwoM$w6bRFuW zy~Qr=JhxM)ae+nUC;R?V=iDtZYa`$04cE>cr#eA7b$=s$$o>JS;%H)$%Hj9R(ddAx zb{!>AuUJ0@Uz=UmH#F4zCZ<7x+>GhZuvg_Pe$(#^49b>9>-4GL>8#34ebZe;rV#L zVA4PU3F$hd7kKp$g`mi!Qt?Lnhlz7W5bA+Bfr@7*8=Ep-FyK!#HbzB@B(1sj*&Imc=n ze6`rr>n!jPGO^xIJC+@#k5FcWzf>JHQaFAL5mvZ2`>_29KQ0y$LmcvVASOBJmRC$% zkkCIOfKO(RC$7f4{8I~67esGaSqZ%iCX@##Y7&ER7CJm8c+=a0_*@+w;q&%}hJ9P5 zlkx-=l1n;&s777pJrimnCO}=gBT5tEFFqzprJdWYv$b%ex#fZ=;^buUFu+VR;5}2a zvjhaPegH!2v9SC!thxQu#GUw}qABhc0C3uyp)O8XFWYVl0(E<$z)b#5$l%-B{#FGY zr2Dc-h_jvoeIKLlELw$}ufM#dH??PhIC^h)jdO3>ck)>%KcMbFWxoo?*7`nIkAbWo z)&>d^BGgEvg z;?5%B2@pK4siChJh7n}f#9mS`RsBLkhs)yx5N%`2bPh)uSy_ek(n-@C(sP_@GO@*p zonyB-YXjpNG(Iq&;GiSIDc_>PG^K8~hblSnjvR(}#y6)-`Tx|$K~me%gw_i7ds~mQ zVNk0=VOSG$9E|v(^P-s4F6-!cZJ!gc=^sCms(5i#IM=MR2p2`3Gg-<&Q~_@843~#G zA@DGw4m;G49v(k31GU*ipxPakVfl~;SW(&HJnWB*aN7>3w#VQQ22xHU!LMZAE&a`^ zz=?u)`{tB4V?lm?ZGpu7r~e!fsqztGgwp^^TN=$U=@sUf>lH%Oj}U~2)krlL^luOu zQIJ>yhxK&5-Ehrb0 zkhKnxXzZ&yU&tncUx#4Lv&uCUm8|y_S=MGqDxi47wjklA9GZ0Up8fmR?@}#50BX^#KYe=q-y2=O{0#yQH5f%dg{FUeyrgZUC{rmj zKVMx<1{?`EbAzuVJhRxDao?1)zQp5g4D4t&J`r`f`8+zFBSa))G7Y?+gHqjaeLela z=Ni{wTcl@ndEobNA*fXU+jLax&#prFI*b)?M1W6BlxlMDwv)Mga-ySyWz*dq#Glz< zOucYv=mT;CMqO;~LmveH0uHhj5RAAcDU>#swCfndbb|a53Y%NUvD4^c?%^Ix#K{3- zg*421EW$P_HWK2uFr^PSR6a7qFYa&1*{J{rEX2i3QVeB>An(9wjFW-%wz-+%c#g(r zw6d~cUsqSl&C`Yz47DW0#nH8>&ZBiz8()8+i3_e$3`q`-j)8$W4TYbS=tvN1*T~ER zh5Y_!L12wNfev&i5O5MC!kNSW&WC*ga}QNj&ZG2LC7`hFnEthoJUoNI_~Y49QeOA$ z<^27A7XNqGd@#uc#Jo|daHsp%(+gjA*Msy`W^izJ=KtZZymGMD>VQ0~Bx>`=ZifMQ z0#h^p2d3JP4+&npWG<*}p@t*TSDZI#U{wA5 zgwk*G=t5u`W|4VFqh5c`HLHbO4y9ub%_*{FVul%NZE&I*^Rl<2p#H`eMCwNY1)I*m zj`ngq#}OW6;2^9)W?+ZD!A-NKZaN$@tm~Hm=0z*$nZeVHD_Q@;NQN4pro`IsU%wu* z>N+Ik(PoH;Mw@E_F@9H9cWxN6A(pu2l&WO18-9CSmv&?Odk9YmqlhPjKx+JnL>*5^ z;7~to{o2*#b*KRrA3M!h(dOOa|N(3k(uDRwR|N!ju!#-MU= zY#^cD#I^Y;qQnHzXwZU^Xfmqd_MnORITIk<|32p{N6;Wl2ne~7_WTGU zV;1rb!Oy_&(LZ zX!4HrUjq}LSA6_Fl6T{6yh_b~MPZwV_scUftL7Za)yeb;TeZ+Wpc#X54h!F`z|hce zmcfZCc|*-SHL+^m607EuvAsPw=k9Ko#28(FtaU`~r2GId zP%4*o8ki*k=z0R!5ukl4uMe%mId5yAF*7qcW-pV|z!KMnJVI5|?xW5AC@FoVXnv3h zZK3-5eJczfRc%KV&MN`yHC6sls(Pw-E&ue$wCN%7Dp(pnfBqzq(8#WSGTfJ;q03^z z%$kv+Jo-@bjnoeO3?l;W5Y8(r6YPbpu4JakkiDK+K!Cp%dp9w0BMDx%gt1Ha)G$om zzji;GWA2Bsi(-&Xz7d{;+?UZGCv2BGy9wNud`=+|t(~1(|HLaFeM3>BzJ6HQ<4^qF z0M)tN{QGWLXgVG+LL>CeXh`wIuU~%QMQK(=JhKFVwO$#*doL8BIwhOmU?CPE=&JN* zu1Ld#DCixo5f9p=R!oY$eWXfVRU%YCUk_G+nxxArS@l z%ED5jQhGL&{9~yDzkYfiz+YAu+g+Ta`soEf8k4o}S3g zLHYIxK>T?TIBsqCUQ#22rbODzU=zk<8qb}(ExL{R>{m%KgprgK7uR&VO78jJ#T9Mt z=%~3Z_YShL;=W7p75$7=gXK0QrK__OA)=B5cE`_+^V!HW{!e#ruSpn3lp>G@t@98m zy(W5ce{+plRr77Iwn^9)}div~V|_Ie?_g|HDWxRPl0K5rN<{+Fe>tfN59 z2V;|3gR#hS-XC1XB5dmP{8^iD#i^ZmaWN^U<3wEYD5B|4EAH8TRd-MnWb0tLexqPI zspgn$vEu(~0bJ|XU2J4R|0FlD{!VtF65d=7>r;L~D9e4J#2+6hytk$Ui+OM+cBGsu zZJ4ZkGfeO1@V@3;DB+2a4(Y7SOzxN_0jIdG_%GwlkQ0y~##f#V+?A+!-Qcg&X_P74 z>-fz@v6swSX#pfbE|ax#i$(ZzsG0sL6d*WDd)=2T0UeaR-kn-F??t{M$;rx!n^0Tr z6l0kj&}p;mi-{_6D$g=6+g9fvYFLLAk41dJZ-d&$)1K%ThS$$p5uEi8ZU9qZ-cldB zZJ3z3o11I@yPg)p^sJVQB5)iu(GS`HgUG0j<8+^LTnT^^okZ@tt(zW>s|$z`O^gpp z(1%0`x&^fZ>^CHuiSxA-Kfhf1pk#$v$LYIA&w&w-0_|D&+1k=la4X606RatLhe7Vb zfOZMD4GZERS*RiY-1OQz%+Jq&j#!k83IgvCmh!4u?Z>q7>_u6KvH59~;LgloI!uY@N*;9FIo~4`Fp^?v+jvZr!bCJdVHE~eSK?H+BeWzK+t!F zH|`G{GlP~IADSCPKtWVqLTj*INRoG>`R1Ndv*+6+^I#4BX5x%uN5#4h7Cyj=TUl`< zrjm*~3XG_yB;hp1JX}~3qL-x7!_zo%78A%WjeWF^jt)w+c1rAhF^k{7f9F`P1Ypsj zi>D&RHUHdNps$$=oZ&68Rf;8vJA4C_UUFd^N^Y?nq@F@sDgu;^8?r5x$>L1R{f+|1 zZd2?FwEO4U6Av{QzjPZNX1f1JPbhheRUFWIjot|j0`FUI`pNdAw{_G$fF}sh_(0Ll zR!<=VVGQp67i+>IN~o*3L%>!Sz3a8;^W1I`s7NeUtkvzs0B| zqj-93MPt*n9TN>fy}ts9M!dwjAy^etoJ4IiKsmx$4+dIv2dV}ZjkI=hKXK$dB95H) zY}C!?(x9!^zC+5q9sW&EThQCE5h zXVf(bGxlBIT?q^)T+MCe&_AB{9 zS~i7*V0Bc3g7Kftyg8jgCc#gQ-;-GAL$oC22AMT?NZtM7^C>BU-USylWV0C2fSwax zN(7rWtWk|=9SNlZTkf;oe%^+)6Lwoj5xmy>Z<_TFr>=A03(h31;W~96yS_*B)A{`( zId%i~3M8IJ4cAw-{<Lax8UBBT@23dLsAyk``(0L~)SX>b83q z8P`hI_V%{+czZO9(v{Jq{lKMYRwRaGNeQqKKjoiCKJ-|lr&zAOb8$IJKDknQ)VgwM z@x_tOYhFIuJz?_3f1Z6)>|X=2+H626;_2vW`|;O-sl~LY`QXY9R`=e}I(;EXh`5}ru0M-XhKRqARr6Iz4NXx&qD_GM2MWGjk?vmu z_1NBW`5vFTFmP$w(and&HOYR%KAwhL=_y7)Pq5Nz&#E)9%k4a(eb^|cKRJVHK7NX4 zb*#o$^2YMnL!M<9DJyPHt?7>^PF6NjQ!MpT++b11m2`ZI|?({~JT&I)4a-ogSL6ABJk2&)w%E~gs+O969cv)Up z_aN`tcNO0}_EVn7*gr5LacaJWh_u;M=Mb?_we~O5Dqm-*tBX}J{JO4zToq%ujOT`G zJyoi`dLbWdOhxpbZRdZ=7NAt^VjWCjMQOcL<*4;ol-fp-YkR6?ew?|gWw&>W^>2s4 z&d0lN-0IW4rD&cyx3V(yeYwZ7LC5)Ia!ExDSuH=bV>Cv`txLl2RMX_m5~-nkkr$!N zHOVy|?)-YSoz2EkUzpRpjMIVoDCsKy&v$*FB7Kf>C^Kq#%FodKOEd`k+7@Y&BK@}xkr)YsS-s& z-xV~t!YsJ)xaF}O5{ee{B^|q7_vvjRX+7F7MO&vm|4;mp#ugA{5VH*qq3hVFX)o#_ z?&IrmJV-t3uin45(EhZ7H*vWV75ofa@13VAttg=Ma8W#JVeJ!}ob+ve^=nw(V~jeL zeL4K@9W~XnV;|b>7C7q#*8*NZBA`P)lA*81DjlAW$hoBCX%f1ELpd^1ID#2>l;rP;M>r}d^f+S^mfDo0p0 zmH%1V_z~Htq)od7=j)erwRR`JE|)l3KC{ZAb*ZIkpeS&BexmcdPTfV0sXddHa;d>* zi-1YnhhUQnFw^bhlfTN>Db&n(v-=ZWJ8~Nb|5I zo+od)oM_ui%SE<07q3j#x_hnl-mG7-&|_X6o|;<;xXC4=oXMZ{RyP~$?At(Ui(s?q zURChcltq>}$CI$Ok?0~iUNz|jgLI)PJ0BRN_6F76w75Z+p3u_BzwJOd`?NBa z72fb@)=%7#E<$X>w-&S4Z`0dNE%j@Ya%IVT0`}5fko)Q%0<01Wc~XK#B@VH3Uvio2 z&TqE9lNmrknc$8B?~&NeoplcdW&@JWbkSdu_hziOy@F#v0ZkKr(GSQ`YSdpgCXvg& z-*BNF)>9rG%;>nYa?>(=i8v=I$LYO(RH*=msAIb~?2ot|wsXf6c< zg1f=XduH`@a;}$rs#7N}U5JROLxR$mrg#{{4TM*M{U$!j%I2{WYl!BVp5+D-+6$V@ z?_J;jwSW7~$`T;Y+QO6JoMgk|74m>wEpxFbP$9YXpcj%>1Cn?ge(&1(P|s@Gc--9m z$gTuK52}H-?z|m+S&X_$}eUZ`{stnI$aNJdPsZ{Ght$lFsIa%eQ(n_u<6&S(D*7*QPBfp zjn?MoUXAbklSWm}zSr>kC-KVXP569y%;dH3<+ATCg>uA03IKbc{0^KSo%qdz=H}*1 z2F>{s`EFq}Pn$-nAxd38IspHF-8dXOR2MW<(zjyOGD1uxl7^01)#P-^>-HCaP7kh{ zQd7+_U1aXo^!H2YB>HE58R*}*f2r7qaRggHQB!IHxMSz-C*%V@b~Ds#d5+#%2eHyN z{oj?gWAg?gG?N5QBPAn4-RWFC)YUa^bKiWSx=_>5fRuAk7~}m4O0(*QDv5s%-bYPM zt-r>9hkV9c-pi4mc+nV5j<^&~=by0&8gD?`El>2V3R;yfm=J+k|NaersaSPrS*uuE zU9xSxbi5L;26iH1npOF1hIMRF5!>+aFp-KLBJ}IdpJ&AQF{|QH9{gpDZ@`S2Wjmgj zs&w>|UJb*Pq|k_n`0{dt0cPW-J6W~RLA%a8jgi&Y-#s=yKFy1nO(0%&7?ymyHI7+P z8$LyzxG%lZD(wvc=A+}ioBPN9sUw7nh;juv2ROm$S9TqO3E{si(3`wGQhhmVZh~`C z=N2{0dIPsO{}3`@;OI&^Isq@Oino|HMPC}Z5W-m0$WFS*qxy-fLWxO*k5_Xg8*YmK zIi>DBfBu}|-lbc&(yG$FY72E~LR5J<@{|jUG{%(@Q8|c-9dN8z`W8M{HlA5RFc_=` zP88V2AZ@BYJmsz3IE1MOz6jsK1s=2fotGFX>dUprTEh%YVWfLhe)chSflj+ED}3$MSuxZ_+p(czkL z{qe(x{lxga)+^FPR4g&wQ8Q|5(H>tros95UJ$9Odq1OrhLE`$6PqBsiKIE_)NC?1b zYi~bT%01lp@ne6o^vc0#*BN<~=Ku*PF{zCngX3-6-9~<3Dtm6zpg(W43>GDl;E0i> zP_qShDB!UUR3(v2`tSyfapAGpy zJq};=;l^~P6DZyMAZx{DNEl6H+{B`ig>Vb= zK&V3^!R>&644N!Hmp3kgmoHuA}6{`E~b)BR6`B4x9 zmoCpV5UW#3S2qv{tn13SVa1OXM;9r*TbEqiN@c%DBw;LNv)O}2le6;jTdYc_&lBHe ziG&FcjzCh&(xF75>7XP29)<5O%*=)SzuVrt5@D62H63o7#fnGZKan3q?5yUU0Si`XyYPpS3ZtKY}}Y0&;;*_$^* zHsToL{*<~xZ=qN|@8zFsC886v(~SD#&!Cr`ucUYPtXLhdcsD&%x9%JnX^QD&LO565oFEcWlbjlMVT-D7pbeK?Kw{U5+~kq$B!NtWo(jxA|(W zcko9OBk3?~){sazf)|z3?XR*dcW`=!M?uiRO?)}f3KQwf_yJ6|#`3ho<*WaPbzlL$&kqZG z_!DC*j`z79?Opif7*L7e@@74brtPV+Ny9BH@1h`aU7OLYu}Xg(W4stlh?SZ70j- zj1WnK!(_fCqC9WHx!@$%ot&3--8UOG7aOhJ?-O$zp{WMpgqJkP@gWRy1j4!`8%l?+ zEAr@kYEiugAWLcg32!>)&{;#<4EPrDw#MQNBDZ3}^I~^#Qbh zV%GHXpE{lbHo=1`v8j;^+i(_es_$9^(-1*h{cy6uc zy)}tsEtpp4_Q*G z0;g=6m}JkV)SJi4S3;N`cnm~6D$Ev??%wG!9cb9E8neg*N|k12`pwLouweh%Ma6b2 z=~DZ?=!(_0R8=r_e1d|t*uh83O5<`MhayHCzVDl(Wb>%l&mE`sGt7X*00gyVhreu% z$-?>g;8>p2u8$udZvKw)Xl9XHlIs)(K7$)4hF}L_XS(9o*6>PA`+MCjwb)91Kh7ay z=>rr&%Eg`K3bFx;JwH!IEKxEOgQ>H*RH0;6*p)1Bu-m0R*cn<`_-a9(JG&|8XOL^5 z_?KG7+~YHdY{M0D54jm^gujL6$8?S*Al#leUoB`d(WCm&PzVhB$=RldD(WM)wR(WG zXQHvatu0|HKyC}13&kypofwo=jTk}kI^eL5Wx{O6mmM5L-ErWs{2DUeh271~U7xVb zpS&l|t45)y?F7f;1b*l*lBWW4uFRSE?K1X!seDAwUCKc_MJMvb3oqo?@7X9iJNxx( zu8<~UO#Dv6fV=11C*_76gnS{HqGJg>5I;_6ya%h%B{9Kz)`n93NTo{F7uHK*k=g>x zcU`VCcx$R?NjASO6qK%eo>Nrx{FtRfUwN5zW|o-A(6C`_X>5v@Ky2BJPlEL7{?%=c z&<+HyY{xh`-QUFNYKbMe{;340g(*lMeM_}U04HaWrq=~bN`!_rqj8iR;v&ppD+7PAMyoEkYw|4gB~e?zewV&{JX~| zrKIR83>Qzdx3@EY%xiZ}qcFMuw^y{Z>dUoqt$z;&W)#)mScbWDw_@fbH7TwAMY993 zK5U7;E&E5&-LGYp=_j`AFoDIjJ43+}J*+T+_AywIo|E`PdnFw?E ztg?|-q%|DEQy#OVQBP+2zLJ^Bw4Jv(dFR; z2FqYfsK->`17U8roB2#x{01!tELo%$`!6jmaZ>?y<8n7?FS6f!Rr_a`y*w2SpJ>I` zXFHk(X^o$=y+!eG_}H=iQokoA8oOD>ZxzL=le->L%{RXH$q9^wK=SP$>($7M&Vtmx zQoT_u(e-PNtGw6EJUZxnOaJ`ilOiJA{DwdSQ0s&R50O92W@v;)$WcsZ`Ft7po1=5N zF`CQvTCZ7kKj?zG{)lA+<@cJHZ(PfTFyDjSQud?wPmAu2EuCSt${vz2CO zxtfsGT4C`Ho(v`*$y^CK$Iz^oYAd<+8!8Kro%(xSRR6G9%UV03s6{9kDS;RzxNqV* zIrwyPB^OtCSL*#>@o1?bHK%j81$&j4q$PyQcpgd6Ugqr4mE!=BUvVWd(IxFQ;hQOD zA(j+PdT4hPjM3RQ-68$Bm{ew|mU-TekN3(*&m(@fEvqRxyGi|ze5Pw=4v1wZ^&8J| z8`ug{JfSx0(TiSvyB(AugqtK4n^KRp)r4z8-apDtF`H$De5zJ$wJMby*1&@#ihHij zwTbkchEMUz7xe>|n!eE%DIhxNB_$v%NJCfxWR=CO8JubV2)*W z^^9#NIaVanbsdi>u3MYqJ|9J4%z92f`ou_$K&y&Ymy*d_e<~O2M7j+^YZnDs6yJ56 z$8*#^!eUJI;;2W~6V3;3&G^gsf{o&*ySj8xSL4mFrTW;Nf5bxHx#?=NLROTA;maCf z{iAG#hI?Po6;EHP8{b@)IQ2_4f9bPnrrc5?UJSu$dy>igNDEAK`{?>v)AU{P<913? zRkL{c!pTiZU+&Xn1(5n9&I&CradlwD-DjaMt)q*#njFY24dV6mN>Sp$i*g{oDe@EX zu;8V7%S+LPG_PLqWF~=IlgZ6yGBlIe@a<*Y{O_5=t2aj(;|_A9X+_Ru4pual`#eg? z8(49vpD4`85uF%Iag@Jj#DZx8&*Wt-pY;MT^^8gfMwI_ zaQcqEQ)Sy^$Y#q8j>qDPdY-jR1KSb5ix$pL#GCl8&J1o)e)HO(5hJ(hew znhFr%jRNIKr%j$V9H;lA*tmAc<1UQ>&UdQY1C#}Bbu!A!jIMu zrW~7^29ocqct>LGoA&j3#y6%Gs5FGx!K@+?CA4pRKlii#?L7ah1>ojxnRI34j{9|# zU072XX(e7XQ6jNQY2Q8no;@K$6Jfs1#P!yyLt*^2ZHpaKUs~5TaiyEpa;fK6Cn;t~ zASDYl>o0>E`p9^#Ah}8}>bG^|5}TajqmBCCg(mm$7DPeF^{TW~vN8S#Z+x80eu#iv>;MVH-;b~timRKhRtsx@ipVQanxb=-W+{af?HPqsEc`|GY^(lU_M z`|Uw_@!zhMVQCiT>zx;|FuxMlmfBw1plG<<T-c;s5 zsOgr>_rvz&GuAaR9TRo59mNkNdkL?~MQwF;b(`2}gPSDRze=LNn0X`@#zX*-cC0Wg z4>bhNN911a=`^X0eW#MA!LDo&=eyT?rBQB>zOMhT&yj5Q8f{-z(-Fzd7lbQ<{so}%KL z%~g@Y=h@dybyej8sSE_&bs0_{qw+uF-RtKVDoXGwDMxQu8BO9;Z;`SCin8rc=GB&4 z({;XS)1QQPxu5z~wRU{er=j9c^mF4yzFy4G8+e*3+AvKv>GH~_F~-v5ZXd@xT~}L7 zg+5-4r1`Y+9bYuxQ#5|T{LsbzoOOm?+sAGT;E8iu>VE2W{vsg#J>}D?1(_QQ6XV#@ zf=NEhLLWDL>wM@_`-&<*)nQ|E=@=F1nbEL~#xJ+}_|x&{QZ?vHngcQ!cS$ISXbSG% z>U{=6KG{P&w1_3;TyxE1d3uZDVHS0N=jO^?0SEGRDP=ZF znmsxhd;f3Gs`9PPbZrT9^EQ>7^sibO-*T8|$EEfx+#0;rxwnjE)>w3k`{<4fqNK&c zk3yW7zAf@uBvObU%Rjig!Qyk3M%>w3iCdP&Kc?i|82O@e;t3T|)#5r?Us$4`g3lIh zfUQJP5n>=XnP0s4EA+9Qe^;2DCb=V`f5Mp7$wm8Y2j{*WXWI9c4!Ukc=AeEipVU{E z-FZ3=`NHSpm5CSvLU8E0xadq6d^N+kj#xP%36&CG25o8%i}9$Bx-Z+PpP$S5>ul+?GW!J#w34qw zX?`vZkPo(#?nwtOZ!jew9R}l&V)s_wxHz7I*I06htqf2|07=ha!2Ck*f!#ut*)bwn z-;=2xuENPF<|1YQ`50qHeG*{cukL~?1M0)l2w<=u`BXVzlza|Ilw^5i2p!Hz_G8a_rkgAow%THGk?vm!kqI!%xJ& zLVicExlL!aF`e&Oz0F8(VY)q4sU-BA2&jDpZF8!#!a=+*Vbo z$Df~L^Sb#1p92C$*Dc$Sw4U|8i*C0>-uS@L`FW zJP{;fVMtV?7KHqe4C_O!WlU3Yzd~p}T-RNW6L(xHHBAnOmb^e}^67K?85soqigHwuc1%-UD>YT>)a92tbTQph!p4pjRhT|c_H?)kH4+ecJQO-G`2ui4)< zxZ~j9&$0sbF5u6z&3hIV{=eUytyME&L_17OSGk&}lhOIN;>nTFZXJ93Tr>KpmoFO@ zqymxMKJqCFS^ppdb!oS4+wVP+=K^N|tFS>05e>g7BQ>>>XksP4GLZ<+cX2TdiBCY_ ztfl2dbWrg4pByA5F*7rhNT?eXBZN|atgNRb%7*^8n zzCx$g(}B#s&S%o_R@}KGW*P)c%m;%>F&&Ze3FV)Q7byib5cy#GDUuk!L^@~#<>}DGNS9>NRkaqZwx~l5a%_h6)Hl2x8>fo}+6QsJmCX;D^lFGB!oGBTx5ywce z6WLdiYK(y1xmIQqa*~iE zoOdS5=uLU~<1Yp-moBEa!_zlDeil+?4S@{g$I6~F0B)s2bt2S4Kv-D#0<@y@^DT*r zgY+y4SN}WW*1zd6EH=o+3O%z@Qal??&}bD^D_OaqM?-uaNyJc)b@K+BfvSzb?ELy; z)6=(I2;#hSQ(Pt+9TPD(315Y5B8(2TfShV>H(PA+t>*6hGI|?fev0Ex3NaD+`T0iN zmVg@wcLj(2C8^_iIup^!ov_0*So*GiW+Oh$i`AR~`3iJOtAo;9$SDuli;j2eP2U}a zjzU#czTFlh0RTV~V_IA8%9ZTcMs2&ge3!@_YZ67Q`TO8~CvKjLdGUhLG91r+lipvs zniLKS2tSLG1hE|KVNb~&cITp9KX#}So&2%YJEvvIMi};l?2W+MfFu>6o!j6UV)JBD zfNe{lG_D6N=~0AH;HQ9~0M>x{bL=ooyGUI|1`IrZ03bvDS>%1SKsKcD&Is=0R)6Fs zG6Y~~2Ce{M({>-Eg5hJ366QW%+^}T68O9=j4cNYjsK6j{n5tmDZW?9(u5_7G2E3qb z=s_Y(LA}}R823&ft~6OZ$MGs_&SjORdK{7OiI?~1f99%eXej*Y5iX5W-W_&39Wj8K zcsDYia3$fVW2Vry?p%C>IKsVg2wg}S?|QwIp`8N5Ta8-@h*0 z%>Aka05^Dur<^BLN|=_KDzoIb1VcYS3nYafFb#^)qL3%P7y0E0FF&<9#AkFPu=ry1 zAz36+#z}m%DquAhk4p;l$VZ!4jbT1;V<2a=xuqrKcKLfuSAdNK?wF7+HBok22&+EB z?D2U-{SBTF0hel#C2%|-8YYEIt{;^coECrg?p;kCED&rb-{^E{8iOsspRSuEph1pJ zNRVA-;MIj3cYc)(#43YwQZ_D1wUK(IOeGkXl#SytU(x4BEe}Yx*q%>}$>s*yf+KTF z#E2f%{2)M_UC&?-NQwdXQ z}}KF&K{R>ji58|5(H9@(U0v zD*u}**vhT4J40h@U@c|V7v0a*oLI&rIo7u4&%&Q&wK-2`;oP@G(XdJ)VL0WoI+X|} zh$1%uuPB6{;h-oAM!04fvaVoeCZd{5^F%DOQ0B;{^uaktz4t}{yTI@b>_znU;JXkz zh@*EW(B+7*x^+u1gE8UrP&t4(sJP=W$J~pQi*Q^RKH~T z9aKd#Gj=F1@%1tduReH=5)yH|A;;8^Y)p;c6QFTvVa1(cY}YpGyf<%5mXEY?)FXp} zL(*wG?mPHjtH90F*VpIdY$O4DMH%yQzI!7>Y6uQSFgT=C%k-Qa6;Q$9uBU0`s5k@I z&K7-}UT{SwS|wht`d)t&5(xBC*3lt<9-|2Y+kuxr=x*h*TEVHQM`jV5S8w#^&-V&i zp-u*5!B8p^>Mcwf!B~2OZKVLu*|?V9BD@WU8xMggDfm}&_EOyPkvdW z^=ROhvqcl&-EekZzkBz@=pQ(&uxF7mrWUGVLWBke1qB|iN5t#e>Izw0^9!PsQ9#Hz z$9$~y+$ri~=c&flg&ABR{*dWTEP&4J>uj`5T1X;BpIp-?gMi|l&kGUDn_(6MY z6vC-q+v^Gi9PtedK`E0i6%8UEX1UqBHw(HkpO?t4!aGJOGk|bEwp)EB|6OqZtpNOt;$}r*ON$CZ*k6IMcg+MTjOH8sJW@oc zK^Q2ht0&gv{OQH4XzbFODPp7>W-la+=-xyEK8iw5CKeNy&kr~(Qu9?Vzp?Jaz(@n& z_ZWqYOGDzis_pO>s&$Kyp9mte8B)VBlK^=;;v7CrBll~Kl%3^oLRvpaS@4WElgEh9 z@hi?_h`=#!u66{)B@uE3KeJ#(64VxIcd)6kdgDR6W3Iyb9jKk50qVolHSVTF)xc}5 zcqG&!619WtsNop`)Ff63XnoX(kX>M;)uISVTW$oBeu7^bxmxO-~9 zf(YjE5<{;%)ohhDH39p#VR*S;;2Nrh|7v@i>A`ah?{U?kp%}sn__FOgDYYFc4tCGB zv5DIf_BlV!K&y;fdLcn36JlS~Y5#|<_m0Q94d2J_wp3O`C8U%QN&{tOlu@!}muOJN zomGT}WMq#D$;!&gmQfhi3ipw|{3{v3_MU7-TM0tLJ^X6;NLy*m#y%qP$ri+ksnLv1+qSqQ+<_{&R} zTR2BOoBX<8m6f-OQZT=LzC~&IwTjFtr+4Of_xA9Y-FJl}$Z#V%8>kScOor}~p>P~2JM3^M6etsAv;Cy6))Rnp50M=JKFsX$>GNlDT3s2wS)galtEeI+ zV)A|IdM-|sd;g!kdj8E$+@3QDik6m17j@rzxm^}&#o!ahd}JGubR-IXDhpcizt_$- zQlqxeTbdPv8gFec!>e&gq=-(Zvd*8TyTi_+5Q ziA9AtCT#QZ!=36i2$Sz0ORs|kv>d$w>7U}Ho8;38ZO2BWQdvA%4KhUc>XW_Pk-v9V%w8 z(U!0I`BRW0z;W1Z#_r8scX%rK@W|Wv!HbLJv+(mG%{cf_`Ag}Q2YFv4!$+<9$VLLV zWi$V(fEy29r~6~&G?MM)Li+trur#A9}cUJij1;%8` zw=3WW@;=| zMR%;u%}0$;21GLD@NRK<)Me@5DWZVFMHG*5!Q(-@o^x7@=R&@r{kPiSXF4aLwClIm($R4;?MbeNAPrdr#`&SEn@d|X`>*h=ng-7p zrsTb)bO;7CEg5!+!==GVn>YCLG6B1w*K{s^Uh64@(i17QOj74`a8Rz>-hd%TRCbr%3HVStX3 zc&MvNupMKaXxW-WY$8wS^QTWeGo$_2Hu{PR3;Rr$;D(3%h0yZ=c{ppRvaQnC=)E0$bg#?VE6|TNS3D?S!XP^=NJ;wm!jPSa3^N7Ca zv6YV13lZ){&Z9ggK^lgks-`!i84Xu$STw>CFk15JYK-<#5|6IJlqRYCc*D=9f=ht% zkHX_+?s}>4Z63Z5ZWZHO=8;d8`?rbBI5{qbG~A9_AaYhY9ZE(=iWg6H!&oIs?- z9q#uzi6`Jbp9qrUgwAYT%}n$1^`)nfZFGm8I?2N0wGU(q`Yh!x`h8&lCW{;fL+FS( zwT7Nv#AuCxsAvs*kDW}`BE=fBu{}n<(ag+D#9|``Fb7J?%ehcszI!3}9)hOR8$#<6 zYwf%hsZ6?bahyCcx5r+hDcQDdv37@d!b65;;6?W=5Q6wcb#!%oI%YM52OJJpmn*>& z_S(n8$zk&AX+&~D=?1b3y^ct9iW#_NN`I{lo-N7hgme~faBaafaw<8L&CS+=W;+?2 z0ibHlyYeThq8rgl2JUNse{`(=L`_=5+MB>co@5%zJ^o;<3lGEEu4)=CVI;JXeh+OGG{+4WjYT5Ugv2qN{9rZO z1gre2(V_h$x-YC@n!>~4Lx%l4S*^fm{C-(h5IYAo7lib$3`g3=MRyOgzh-p0YIaS` zx*W6?Sd_1{yC&hah4rTlhE!wBv&zwjL`7%f$jxw#2bYX7xrDDNJg(dViAp6OB8ltM z@hqexM&8OS2I6_b_Nb-|+K$^C!F7rp?u(P0oQxN_A+d6<^wv<3tNzyS27$=niAS1h zL9rb5sk4mRU6Vk{hm(AH1z3COh9yYW$XFbr69&!WOSdCpWIifS*@T!)4iMnu=sb2V z6Qj7iEI4RFRFI4iR> z){8QHfcN|N^cKV)uhgf3H zU!E(S%#YsPIuotN)_eybvj(l%d-g&^WO90(iOAJ%tIiv-K*bU(ai|l z5n~FZnB;>vKWhD~5#O=n+wV}(=Qd}8mz8$)v47~Tf#su`CblZ^<n61Szv zR7YRm?_@Ei^>uTnS$Kxd@#*UWL;0@6|74RFQ$3%a17r#>%+L5)pN-x;+0&fIy}#jT z(GATRg%|0j&6iHPEH1F*>6_RXl?@+Ju)E%(t#baur85Fem8R$9^+VUrrM32syA+h# zq7p?*2i?k;ap^g+YS?*^;5G4AzX8YH3wl3VDIL(~2BVu485=hA{%A_zB~mtNSw%as zDd!1qU`$n4mkmSu=se>#LS7$c8p2a3bLqeq2A3~8$`;0CkI!<{gRg`4B;7CE#WrhQSH9M-w2YncX&NG&_s_lFT79?GyX7GJ z?-kZTJGLW<29AxzNdOIzr+qDri7x2r&9s~?=^XNsl#5nYmC(roZUmd9y&zamne0J6 z=i-Q5K&O`MG1I0&2Y~D^@wae~!ZAX}{^lR(QeMkVOMd$FSUCF^D=3U8et8sln~P;S zzFtS8w3O?OtZc=tkFV=m%nxU*zOTDlCvxkVLw~NY(~Cbly+A`mPRFa5lH z^R+a}86?DncMCnqeMgQ6l{^1;>zpJ(br{v~y|Ndme?ENp@C3V3VKak^@_o~+ec$zGVXAZWy7Wv2hCjO}* z>l3aS4+{pT&RoyoOs?sl`ByaeZd2FZg&M|fE*&?;+`hlwu=nS|BV5NbfKGsvN>Pr} zx3$fx6e=k&r$;`%10}vUKrLWSqyPRV1tvV1Ysmn3J24vX>rK5WM_J-zlw}q?a#A_c z(5hi`_U!g^8=dHOnwsCUVAk@V=%79xkaQP+y-6cU0mkCzuR zY2OUKZrVBi0RY`$FgW|0C-S{wu|m)8XUJBHhGG2c+p&55|7wJu)OD-B^B=st=T-N= zNWI^-;gxkQ@94@$SFCY6YPn*TxRY{h+s4K{+)>DAm{H=fLFf%JJ=?kJGicvR<7EU6 z`ja|W25pMe*wWv5j6WwNF}m7G!PY z)iMrr&2&CsuQ*(mIg;iCYjc6GLZ}jf_hVY(534ml@beIv$I;O+bk)Cj@c#`6Uqg(P z!mZ9a78?^+=EQpGgy5s9hglSg-7cQ(f{g|w)$EF64zn%J&-*@j{&)9qR<+}{XF(kS zZHd(@xNYTqH2<=F?>058etN2GyA3we$Vm2#MC{ZawaZ!WB7e4=2vU#?RiXDdm&1Xq zG|ZU5?QHxccPV6qKmf=E4gqd8BIBkmKwB zEaO9q{uaBjZO!FoU**;}miBb^3We>LmfjHCxJK@JqiQr)hEw%vQe-Mc*&7%%dHHhu|_w(`io8vYb?M8~59jDsb8d`X;5; z_M&ezMC@fHbKBMH(NwnLs8@-L z#t2IJjk&4;_<8zTjjY1Xv1H8J>BB$FSCIYPyyv!555S-&004gl>hBp_QkcVm64-Xm zNvS<5EvKH6>$Aw2oR+IeuWoMtvUj~e>6X-xLpg+MdHlraTk-WY)v7DFhtSfec!F@$ z*=hW~mC(Puy!DqUhE4zc`BO0;^R!xe+}5D?qp3)EO)(Bl#|G zmgmw&p(m$d8amZ!>FLXq&-%C>jotvnf+X~f?ft9?Zfj}saY3ie($I@zqE{QT-L+y- zK>fJS=-4uk6#U+m8Sq7Jqvl7$Bd#jqU~b#99#!R&xMmg47$MITSG)UoI2Y_ z#zof1&Kw0X3MNPWnB}?LJYldLpjH)yBcbU5Yx}oc^K~?q#-X9*)2PRD^q-&{k#!|o zxr|)ot9C>QKZCDn-a&NrO!JpXSl)fbvq2hl3VqhMcHa!GKXKk%m1h51%!ssm#lmFP zXtSDV?^oAh-RlNv(9kDVk1~G-2br__-D))cv?E)qsvu(Pecgn>8(+5cED0boSXx?A z5}AZUU#a(bdIKZ!-xe8CclPchA=)=T+cMMGaXTky*iLtQ$dVZ^RLOu3`(Z@&s<3=g z7y}n%atO@)Q(8y5d^YZ`a=!sY&E-d&cgXSxlv`3WJ-3SnpGKX5H~qv9O)?_Wx48IS zyyBH`Vdrw}{S|8%dKwq!8%JRnA#=$DpkwLxR#z#mPUr3$=$$GkDXk(TZvecbi>MRr z`l{BFAvJu58d<10KQ4K;8DhU@)j=0sn#|Mu&T7P882M7#{)fVWEwm5hX;s$(+7RSN zHB3odSBu#-e@--eDxtp}G?giI_a}c+?NB=4#Qay#VP6#_C44CI@r@}1x4DjPSTypI zL7h%&gE0DfZ_wr?<{-TnWakXDvL`#QHg4w%1XAC>TXuFWQNr&f@4a~+x5vD_+hn>K z#Ev*^D*icjI(1wzPpJzxbsJRz1LpVNU&AH8MEnB+`n=dpiODol54*8%D$Jaa<{1JA z`U;I4OgF{$l3~Ktu^GP&VOM=+2@bmP!-`MQ7EXoQCijh z{7Yi+2&o`%VKij-E|+@thC%ai<3BqK{-x%7=`ySfr>Dtayp3Si2wG$^4O-_Tm~X%s zCOuFxmtog#KhPRXCmsL4GguJxU;p*rA7?0!_xhR5^P**i6>Ccm82xfCu$OHA9f4BM z)3ac3@jACr#&7pym*vVjr8M`T_18&P zg})aM2nzl|+JTy?*>s1A5sa-qt4dxoQ5_O`AkmWhe-A!&ZvAy!_Ahe)moz=PW5|3k zfx?L9pGpl>P)mRI3k{ExXGu5vC-~T7VK!Z`GIMeg;scb#OVwyy;$JKamYsm5c**Ea zR6m`ij6H3??BXJEDYgz}5@@>De8Q<-BH-tv^QfZ$KdyLm1}H!~uDzqzCI>NN=^cfh zeiw0?7U7F-B6B6k4s0z-X)I%LTIz%NIYOt|=G=KR3&T$sI3uF&34t=#b$bN7FZ|Ec zlV2c-0sYoyb6ebDuF(q~fWGwm{PJ>Go1&?OL2Z=cgB4_~33`2Zu~=3I8@;U(fZR#M zs8h5&Lq(7Fnevr)vt3Vu;Wd+RiEB(+XIq=V<8%b?_=}T-74&u~W+Wr2)M3bY_AHU@ zPi@>|MESWE&8eNMO{~^0v2}Kjon4;QJ$xK?-)O6$Rv~k+$GLAzq|He$%=EjARo~n<_j4^j&iWN=Jo0zo)?ZY02 z1j!R1rQRW1k0T3XqKhoRMF1ndj4Yo>dM2}b5HhHMBG>TbJ5Nnd4^&%kXRFRj?lj$% zWm;#Rb8oQwrX0^XqutP<*X$+g{i{;ZmGRW+Lia4Jc^|4$)UFf?8Yl3j*lfgoMVMQV zW-+UAug7Vu>@6E0ld6H@~fhm5Q>p2?4|(*u_%n*3~p zqRSiePwWVHgFZ1=rQ zw_@5)ttB*&?e-A5z}y&8N*h)+eo`JJ84G5l`ygPV15o|a8~J!%AmMg+`GM}J^Wob~ zMuM6J77bx-{Qh|%2MkFoK0C9QU%tj+1#C3^fM8=%?FfR`pvclXp&;ZHyojbU?>9IPvkRwo z^m?wbtlOSqs8D>u>+bo`iBs9)+2htBneX~5I0GKtfA}x|4bX46$9b~8nVOtrYf)@A zPYqLZu6-R28YbHH^pw*E1~)r~)aM@HVRRml3iBwDTsHgor(w# zx4dyb?8Hzw^`W8J{gd?E1Nz0A-43(FRTYfy#rKsdF`rYv8pI z9u{Wtji9rA1)RT0C1(QHGG;cZ7hNJEA{ZntC>zEoaM29pqzufqnw(@PGtc>wDY*5j zuy&lW>+J)*_Fdavjg=f;QR}u>Z2G(DnO(v^#W?CA$-gr{hrR!62tLEoYOxSg5=h-v z1nruBZb%^Kf=Zxl^pCOcAU;QdWWDddxJ=f-8h9(y$yvpPRotbjF_cjp^&0Aafe&_R zLxRK?13{aL!@pHrO{yh_{GeYRDs$^(gSd;V$ zgiWRVPBa122?qQ_kR;3e&`%*{YLG~Pn@qRvvE;n8Yrc=D;U}=NJuQU)% z#0DAVpG6QHN^$Aa2#zP1jGjZ{zn36HRb4T?C)9wQ)-jmpeO_&sLa|^Jm&ZhbD#cTr zse0pLj(=sw@%reG#J2mJ305j>&XWp+Vg$a zCRKe}s2I03xV9d#qyE&=heC9IpXR|W_kFEkvJ?OvdbHB?V1H+By>n8Z>}a|4@P*kE z;^;JOw9SxL2%nIypw`{L;688yzxnbf=9m4lp{t)?JovJU``PV7?|3C68@y25k*ec0 zXr)ET-=gTH!_+PxZ9Fz7$aB&>yyFS-jDk)X!lv|H3W*x+^bvH`NB!3cYnR77EN-w|uxcgl2h|hHXOUp)& zum8qB3eA``j=2@9Jv2Pg8@I@;csP{t9@65;AGRGvK``zhglhR@u*TrcJ5;Qfu=hH@ zetAy5s--U<+Zpc*Gl^;!E4Vj+mlV;|0&(1Y)r3~aiZGwbop3RFwZh* zFG3*Qf5hT|{N}SQR{Y6(mIqsI&N=;zKk!;nhgY|U^X=28M=H$j^^7kvRT-a->bgY> z>3rME?Oy6HDzl~Pm>{?3Lj4o=3Rmqjje$47CLCSNLPCj1;_7}PVc+%SXqI{~Dw>o` z1XT;8_cS0@3J>OEA1HH^fLxtpm=V8&h}*J9VM|y=D6I<9P*3kqubsI&J0||d-i;5d$9QwGH?4ZKR+K~sX#7>hpKZz zM|pYggAhVw{axZN0SExYhN_#W@jm>c75@OFZidY7qF>(qy=p+_LqNsC*X75~9}0R` z=K`I@ncl0`66KBe`{$&7SUpcDZ>LZ0lBh6JyI`T%XK+F^X{6qTvvGY*_NF7;hBH!| z+BFk5FF&8ji5ZU0fuURV~QxJcSJYX-1l*@RS~_=~c+tgxiWXh7c+%$Y zDeOD-=kn|EfxemcMZ-$!&if8}Z$yuo&r~aqW+hvm54}@prhVT?{SzA>WI99Hg`N0+ zyCr7$bJnvx-c7bMPj|5N!Gm7-5+HQ}Uvs*MD^GVX=}b@E%F9kN)cP z5$o0&rV;jJKjF|ir!MyIw&jf% zQ%lllx%ioLfqBhgLX7_P_q6xqg*#Oc?#P6#$HV1o$T4zS4 ztlj9cF6?0aeDAU>w?0m+!eUN zS#v#zeeDW30}dW3 zFAb6qI=>VcZSZ1kLOo$u-4 z*|TZEl)4+QULb}VvNODFE7W6kJN0D5Nfa657$&QJh4fX}&!Mk_O1kd`upFy!rBxFj z1TKg@th(h1$@z{C$oF|88vah(p{3rY- zJ>8O{!HC^bb^cO7HaP=?*QujP&o0GUE;l{v#v62|F#0ca%P+WJD%O5KFz&dF$V9`F-E{iIX)?eyYVX>253f=)u2WirTmMNCSDxR4#E z@z>v414&`i^#WgnlZ6pXBaT2B{Z{wznjr4*PgGAAG`Ec%)@@EwL*O8+Z}Z%z@VxZ! zsHoQs{+y^KU~iN$s(a>_sP`9gAL(3Miod7PrxN|N;^s>wlcVkx9%_Zrrj2y_>1oE2 z8EZ^Xa`qK`Euqmjh6-_3w+I^pEEFKN!!&My16_smuw%_B5OgytWndCu>nudjSy zC-H31Or8|7qe~Y}oI~BRqTg*=UR_k=`bi=_nNPB{)f;Zgfw@zZQK*q=ccSChWZG#J zd%~38zXL-g7zwg?5Nw>kH%zFENXO3(JXlAdQ$aEmkwypO9w15-3fRGiH;U+d5r#r! zNmA&&`gFUt+Yv8lmk&jq<{$zQQ1zuM9Z9}JwJCIMcw;1e*mY_T>?0`OUhHAS)Di9K zJtyxt<3TWAADo!wu3P5;U2;XmH$*BIOI}HL-Ozv)OrHPJBG`4b$&s5A@ z0~ex zO+S>S(>{~ChDK&q1#dOq;8AH-TE``#V`3uwel51JIcGq9dUiu!s9ad%h4bGlEL4|V94T^#=TlSNb+GDzzu<8>G(Hr2BQC|OHap%2H@n96me0o`bD z6NSG186NI_zAEyEDt$%lMR24hCZ&nqhA)xG-fSqrxk>aTj;msA!A4-%4xjl#RqTVL z!o49@zgRKBR1X1-oEC8i0`busCJr>UfaF64Mna}1C$G4w?;JAioj#E;Z!Vu67u_+m z>D)-K-D&o7BY2Z}Xqnur{ou5}#4rV7iMzBHjA)-eg?;H!rNxz=`K-XdCR+BHNrdG| zQMV7){6zi%(%Z}o@D71yj0!Ey|9+hDHGy*@*W165VdfWP`>jW7MY}X*^m-ZWhxPw) z0N=n3-ZvU19H_%}eLXFVNxxw$Yxwv#lU}j({COloNJbh5) z^EzQ~s+UQuA;T1j+7jfooh5X$_W@lFbpoi%A)B;}0@bjRwfFqxKtY1I_`oLg#?i(P z7b-a|7%ngNa3uxPdEx184{@<#RKmx;94RJ@ds2*bY5Q>R^g)%`9v0J`;gG0 zA*i1h-Yjq-w@vZGGbLP4Mu)$FtDFOxd3bu76h0*E+}gZ1gATs?HBbSqA1_7D(u9&8 zClnT`_HqSq<2Dr6xN$=og2kTm2C^VXC|xryk&=d9ae0E;+WkOdbTYq}!eQaCa=uha z2_hR5pmZHJ7v$&1p=(D=6AWc$m*!6xG2}GS2 zCR8u_+c!r?N8@DVq!|Ki-{86y)d3U`198eRy6$He8|>{4g=i z3C@6cvxFBfjQkx=fY<~gwYPB(t17pHMijiNEhFNzy7J3Up4QW6KZj=M{+O#$IJZOxde;WGzXkyPZ@<`IUXMQ zYLdp^lq*((M_Ag$L8)SZ0KzwovEf!o3T~Emtj7v8rPd-G+^Z$fRq$EjCKk}r+WOi; zu&Yo44Q@cMl-Vm;pzZU$&`Z*mFNRrGm*Y>|4j>>eryx@Spr@OjG$JLLafgai4$PW) z(aiPwb%~8ZVMCi1b^DkNe2E8G}zPhew@eyEm0}7J=MWthj|ICyfV|^7r6%$<%@(|+4Z1TFu2HnrU zaQP65zG2ZsT+xI~c^bczC^$ox)FdcRE^c)zTsMX32r^$slqrey8rm+pc>|92_RL_Q z!UxMgdHL*kwtB3L@N!91sXLAb>TGP-l`>|LYe1Q8x|H9j*O^*5@(9-#b8rqh0$tk2 z^!ZfeZ`>#oJP4T^5O{tiP@pUwsayvXzrA2%=IJ=jY{xs3 zsu-ICCr&@i`u*Ft#s^HLP{cu>lmQWv(nBpKt!MZ@#T$pJo)Uf4qAm~@&2>zl%@p1) z9vTJwK`CZa60_+UlqxC{r zzl*H3?rUVidxzhInyNz&+%M8Cc5Lw(nZ*v|60V$JNPz7QJ+RXmY3|Ar?Wm3C2ZvhFGl3!g#vXZKu?E86xGVQ{h92Mz+tmQ@u zk{~zYtTvPJkwhb}E=fZU6J3PZoC#QEKbE$>$DV5?xc=e9mn$@k>tG(^N{x5}GoiL3 z2ydbtMy7aKx622(1QI`Y=^#N1103-cPbxItRI-i zn}7{J$;@P+Fa?rnGu=$(?ukx;WDLYsLO~#_=vv+mCEN~8Sy@1yuK0x~x}?-(N9OhF#Zjt~NLT-UrW0p^+u!&C^Px|DtO z`>Ov;i81nL*wtcVSY`3o_g~00AhU?0GO(h+5)#owh^q$TwzDzg)7_k;&2XlWoKMZA z^NGQTDo}SRFtWFOaY^eW5E%13Cn!fEz|edr>M)qh-h`BbW;KOmp=YG`HT#wI7|BqY zoio@I;diJUy`v$Qb-$eu-Ju#MIxB-v1m)t=KaN>sFn(77@5W_J12BhZZiNS0PfZ=3nYi*02}I!x4kAV6@boXLgX$HmnvbHqb_~_0bG4~2 zV=rxH?^CT@I!nEvS{u1H@88V7b=qiSXX^d+{-Mzev69nFPlwjIW)8`!h`(AVPU*>W zW%VeV*>=W0im`o}^JkxF@2_irt&)}Bx$RQX)^xj~Nv6*4eV3j1CfObfBu|g(mU&ar zT@TrLG=diI*aC1OxMU_R=$^v`xQ5FuD1|>iakK%r2LTkZ^^r3W2V#(ots;|-U~&#$ zbz=;*_pM<0)`ew{O+6R{u1$BG$*t`@UT(%CkhJ$ft?lng%QRn>dcG4|N6vTMd$e&z zsbx@F_Ho~2)9dW|S#EBv=3VcLo{pqhueXli4_f}a|4?a@tFU|S)Ui*7^GYv7noI|! z!}dQsf%dHOu23lqWZkRfAvsPaeA4VA$XJif`&H;OR*sE{;le`>%tW^mM6(PhgOYfE zfdQ&y;>Sz6?{{~EeRMIW9iNF6T6EIn7%0?9sM{nL-gY~^OaEc!^6z@DFEX^4SEO#u zOe+&TXZI#rZVTPPV|Ja=MFTY}D9+6{Z*0x@Vwae0Toz#0a+sIO+5B{^%h39NVWmFY z$K3;xTVr3_ek$Fz+xqM3sH)s=$~Uev0_bRiZ5Io`p&-jPjShPhR)WmrT(KpoF;H-A z`-U5D!))}|ucpy5F~g?`?2uVDWmx{Cgx+iGkMqh}j&mM;SyGevZWj@+E7zc_Xq(8C)?4TQ=6JBZ?qDe$A#s3d(g+Gu*wqM?X%Q^=%Zc@YahuRJikFIKrb52>71!-F)Gy_M!W* z8Que!;Wg2em&9nwixuB6%nLL%5LJRA?@csua$>>@oX-Mb{J`(6?ZZ4@-PyhUaYJnX zw?i*RzCMZ?VOWehE7a+q+yf z*ALzGa-fTS>`pg*pi4I|KsvsQe?8me-*wE9zvi#q{~wc?;P->$t#=f4f?=m9(OH74 zE;5Dz{dM!Y*Wg=<|1j~Y6n;T7o*HqOkd$JYx8)6THEG#5Z#fX#b8OKkel?Z8qC#RI z8%1BLSf9|*%BZre*B*oO>rM3?p-LXC*4H?&AS<=)M&|EHCISCX0&6(VZ9E8sD(U0E zsh#-PiNhs^wdZqDOs$bCw?1cKp*X$cEM~TV==xs<4B%zUD>PvCw&J7na&FtdJW`z^ zCBlJiUV-8_n1(aT*0Suhpm8pARCf2bR2k%}C8R%T4S24$Po6*d%{1Bxyn@?qEGWt= zvI(%($I>iw+aS82lX-r6%hs*cKZy7SvgLZV!P{_MTy|9QFfF3FVP?Fz;;7+!+r33X zBc`2fE~1I)ru`blJC$8*hfWslABm!PK8vn4d+WibHfR|xl+g8IPLv4%PHM|Of*~Zu zHO4C6OX)*r+n1dO)8o@!TS4tG_jd#Ujnhr@%{vvcbM#i;r)|7q7W0#p;>_>9i~lRf z^9@hL@DComzh`lt#;&fIyKlbL>o|`>_cF%8KxTQ;ZGF?cq^>X+E91etJ>K`+ou(Ff zgf{?~lrd4(#%RfeIgv0bzdrx;_>XapuNJ{|ug~watZZyHdH>A< z&TV6(P98z>lt5@5Pt?1JZ(CA3ca^jKy+H9a5bJkdUKnN(r;xPo)t&COoy&7AR#V)B zCK{D#hjcT2Gw*)&u>Wt`JMUP9Y%r5%H3*Eg7Gnd~H^-@Eejwahzt<3l|^$F@Hnk4-RTX#Wk-@|&@#Tsevo`bHw?)Oy(4!YWPUZtb#efUU8 zA{Rw}p7!-cubU{e!uXC7n`zx=1T~xTC7;m_`%8&6wHFi8y)e+rm@Db=`Eym(O7olt z^=y~4Q;*P&9ePux_o4sKZ6y!4dhN$Xo5k=aI+=F`gArYvNX9Wp^lF8wrOFRN#|n~`&Vnjy}us$$I3~hpO&hm zL<1Bb>FKjg1-KQ2Z~8Oiw8xR;C`frHESXYmj&31X(>hG{)hmhp>T`-odio>q)HTP? zxMk|$POSn*voH~V&NiUbi;`!Czf4QtX>30W_VAYzqoj(fCk zX#a)x*qCXjgQxf#xX^4+YcJk$v?AsJtpGA%Dj~2-C{36fFXlVQk)*9I>A^|~l*Bk+ zvm{9|Rgkzt4S)ivs>0~Fb6}M@0^Fqp4a2X#|LBZYn7X7vgqm2Ts^Y-rOK$l=j};^n z7G!~)rV&PgawvGwMJ57xXP}KM9sfe~c6+n&!o0^yDM_2p^6{P%Q}whIi&-3vi6N=y zUt;!mKxMND$oj;;q4?2QE?5K@Dz}Z5yn1)d^@^ues9_NxFQdCON*poX1~R1Y+;9aqw9Dl% zQbrWkiKb0KhYjjsIZ$l>z!(8-C}Z7|#N}Z0sd(91)QvTP+%;fm3;*HvtG0ubcs#IK zNdD|T^|%V?tP4grq|_fv30N)sajr1>b|E}ZzOgr4GiNCiS%OKwqlBUeo`3b42D-@W zA*U4-v>izwiK_JTZYyx zcoh4MdHssNx^4^Ou{Fq3ZOSI~N{4R@D*&-o6D_+#NrdWw!XYb$V)L zu*i=xA-|=!n|Lt1&0Svc(bJVH!pSvfAr^;mf6>yBHH$ zgG~a38>hdziW0RS%1c6abo;3tOX#GaiW5JR9jx@^;Nif`RI-z2AuEFMD5xjM0RvgVDCJpLHgu)hCGFnDt=RMT?)l%w z!zKy*20#tKFOWwI z=VLHx;N)h4(*d3h>0&$rGOG3q6U^AQlrs?C{VyF_jShrXeb&rA%*(rs zM|JxL;%Ebir~z4AW-2GJ_sv#Y)`avUse`@V+;6l`Nqd3GBGm5w+Yvp=JP_Srj;Q^TbIQt_!%j0h$^N8kpLw(uS?RZ+1@iBYlSe4d8- zV8{xIlIxPdGKgjklr(UR$d&}-KE*_@jZLHk6_9zJ{sye+%-|`H5?Z7C;`J#cK$9eTdB%TlV4;S4?qmM>m+Tpt#M zxML!r@AvYh=ggu9q7~k5c)FmdB3Bl>&FE{@CUzu2>M zWCZu&VkW;$G9c4523WI$lao1O2;6rut1jU_UvzrqSqJ#-0N*S&wrPmalupaYs0QoY z@Uyk4)lQ;%a1TvjG1D^U&0#Dr(On4_YCD2oRt5wJOGc5yB;L$SQ9WCDq*$flTXjk8 zSF(Nv28(9;hPpGIk7g3+$hzqAFYG*lbr}rn|MBw=1RLZo53YxOjH#(!ar~I(vC}Bv zn#xxjKOMi&!bc51$YQKMdTXFyM3VFuc+++w9yz?_kK;V9@7%a#Qe;+o1FyR)Hm5*a zm4A1Gm{zKeCRgrf!yPtj#D#2c9xHy!CROOTs*!YTm^Jy(p}?oFqe+yM9Dy7iWJ4&P zaLf%3X72J(|E<`&`m=eAP^+aaTVdm6e>U2_L36LhD;Hi}RVTYnM`h`iAe#p6avZG$ zG?kWA2du1AX}+piXsPQtpQ*@Y*Q=waxEz|IYI22&Of|GVHcGcps>s!+SuL&NC!kTv zHDMH?(7F`kx~`4T%-h?wS{hdT=KG9|p(arw;Wrsw8>G>BZMm zbyWQ`|Ne8wGap4G4Q9NQZ?WB2F{H()#6kOJc;XU6rP$TB1n$UkY}ml}zW3n|KPA`S zs?#3vqG$N+87OuiTD%o97p}v^Lr?4t*D4Y3@V8sang5DVUha7~a`UBas`1hi z1ecIsd>Z9-%~cwBZXrAIrGx(y7*iVP#dQL^YMsoq17XacFCQ}cq}ioswDD{2k!6(A z4T>XYM$YcMni?i;O?wdwbf~fK>3VuVLJy=8O${ zNHJ@<)S@%~WI1KE@tmDemu-si(n}2fyRsBLMi3suDo!5VO_-jbfvO@;EeOUGauV3sv1VOQ{;dg z1d9J-*u&Bo2tqzDFEHZ7b6$ST6HZS#K|BeBS_3*Y#PXRRDu6nfDMhMn*d<)K>lTY? zJ1*w6te`yAKI&%mce{wkmzx*jMf(DixvN~LTPPncrq}$-aDHt)m14Y^yn*0DNc@}k zl{u09WB&#U9pPV|s8sJ(VSzXUCc-EbOn_jbMWZ;aPrx!cI{uZRcVqs)I1Wn_ya4ub z4{zC+e`?GUP1pMCF3k`AHtQ4pzNj9(UA(8A{Jrg4o~`czB6RN_YsAp7yrN+eX52CK z>96@*Epr0)F$|m%p8BTORz2U--&uSW3CM`cM0bt_(yyG;xbju6pMPBQyK=YDpEt65 z7EjIpYCjbeew9Nt`t|N)ZpFZa6|L6-aDLakD_HIFR^)-;H)m7HZ%hrl_7)c3+rRbP zjOA}jf4)ZBxr1uEN?)TAZuz(RxZcwD5kb|fTr;ty9;bO8ginxW2%QiuA;8iQ0d{K` z2r@-Sq{=)e#IasrPsnEHPZeuy)7^J)t-Zl6TIQtQewu2f#-wy@jmeFo+=a4>h2rTZ z^h;~HYjClJLvxk(F_vX#z+9+SbyAP81St*dlb4V~sb|v-Kvxx}0mvetTXV+3V&(1I zx2+=cFCYs-KLiy|u`$Cg?Mp8{J-V`Crcs#tRcaNTd(qVXQdVwxLxhwZGxlv&cQ0*B z?nY*n2EQGD5bIqtzcUDhOy2l(NswV{BGfTl29bpTx?I8MvtEQT~4?wK)$t=h0 zNqBmy)ZFy&ac~lOgV6(ggRBLK)+Z6`Q}m7DNH8qdU1u!*YmX?QW3zF`)&y*S-Z0an zyoEXGa_@ql$H{(OtrB4;k;|Bnag{Hnr0B%nSC-WHuZFkPU4{Odlx3?G49NzOcYlwZ zkr;IB#2$V+nT)HT1v*swV3fmd=EjT*4G9=|^K<{KA`7g&ww@M0bg2I8jZ5Nfc2&}z zJO131mVS>uL^kgL`;*elal>efizi9wv$z;;&vG#Mra+Y1WV1lBe`foT69!3BjZa!q zUvxoYc0~~PZZ0ma&+i5rlZ?LzBp)Zehn-W`%YO5sj>ZB}$O5TL>WjpvD@0f#c0Qk+ zbYxzD_E;Kz$-0%xFWS84ei^HtjDx)MP~XpYUNO|`;@o367CaOc#iKeq8pM#_S9c&c z7Stm|CQzBsm{T4=RVp{vz!fGU=?NAAQn?)^Y>+3kM;;I^)V>WNSS5t=BUc+ruDtL} zrvUwGJ4*D(6?L|g)iUl~t(OtVBREh8?%NXGWIM84B9i)BWX~S7?b3`}T0(cK_-Fsj z&=v`;gEHV2xrNdS7*>W0k!RzLr;@AlD!R9z#j*I@`LP=L0b9(;L=oWmL}lm1tOo-T z5p6qvJ$~ue*dVAaHQr;aet0_Fc!NnwT--8bmz1#` z;mN0BkCA&XE#_nYb8if2=R_x=*X6@Ov2#*2(BZ^S!J$;twrw)BsnIDmx1yH!Fs!06`C zbU9`KK;1X|L%4Ft9kgxkW#%GPMvEoQ=o7BbS~|N4>&TIPk}>U)}Zp*q4_X?iCC8ZfwNRNan`3Nn{D7gbN*!TD04KymKhO2_OKlVGR43TEf|3D0@NkhfA0F+V1niLk7OPc7cL+g`* zCr?OESNop@Rwe@2>*WT+R^+iO1K9+pbXm`jw8!xC1IuC~1?7M}^mfq}aP(_GcD5!( z4{Z&e&^ijGy`y8Z7W%2k?FdnM^%L579_VytXk?i$I||SURc2b<=tZToH5bJm>J&fn z<6~L-wy|*q1@tPAd2}0w2=)s=dR4<^$h5reWr}~x;E$tN^vP3YB$U8x~ zmgXyRs-gD)g=mpzfuL!hAoR$Gz*{&nUZohg$N37ytHBF9xRaTR$H@gt>&gzxa- z_&_mF&i&Pj#>VCfIUY|m&M33@pCzluu=Lj%#^nbzA$cXEA+wr2|L3goX7r?6@ZRSC zU9MTV_n`f+w0(|FPP|NX6bisH@*2^O4^KaQYAp@TA8eocmL+Y zDISFaj0zA+TFX*WtJqHVmK?4j?OdZw%Y zC`~^$>`#Z>s_~1QoM5vROF!@ieQ@h2vl+>Vewzm9 zBcjAAONxsPrgGVcyY#`1jt*#c)nC7{6t$We$?3$mrcjX4hpTVrBP~MQl9m-RsmT=; zW)9XMCK9!ep#)mu=jYz&S1nm-LGTexthUUhOH%PKsI|3c!Za9aZI22kgEsg6Ip!&W z*I1Uxq&7gU5TeMutQbysRa>jv_De%34EuZIb_)d96T22Rsx3WCWR3oM#nlPt`9Urg zlwXVChlhBj01WoLITRTY0mRwh^A>vX>L|28*KMHwhyOH-l1DiQRvY^y zG#D~8C}XCKA)=y^kSUo;GKI{EC__YOGEWhilIRgKPf0R`km=h;@Bdr>Z>{fLt@S=@ zJw3nszR&NR>s;5q_O&-x!N`T^*w_y!KORL#H#9Y^K|lfyC;1!KbdKe*mEgsl&q01v zKlBOB8!>dCf1K#O{L!rEa+tthB+5T;}xS|4-5>BOWLpvTMHTp#d6 zjEu}74}qY8Ux7b)hN^{XLxDp54h4?(k1vSsK3oIaZsdvJmztnmb#zIk2%F4E`tZtu z)8+(9u;szlL4>~=Ojw)*F$;V=3I+KixnYsmp`+%%w|LhFWzW*?j7)U&i3G9Uo@~Ac z1sp+@Z_G2SkMRaX2AoIBws8*$7w?kIpU?jD!`yjY9q4)}kMU1S&^j zQj5gog1S=9x1fS2m9?SYo1DYKpQ@e&G=hA)(m*b8kq50N+Mq!%?K=0=1-0slYP0v z!&tm?HuKk?AI>C1J#lLjd7if`YavHL>T&|nhkKWQg{iJR|5w!s{P&D-6o(~>p<{_Yuq#bSvdf^S$P^_(nh=t>)gCirhr{SqW>8mhCG^y4rO6AH_!eB4eh7dhYi+E=x8x%%rDY+2U3e#)KO^QzgF+&7{xL|@9rme$60ES_Nz zqe^aPOQSS9+ImXKy_`Xi;O`A-~ z`8J_yysES3s)v`c!OG6Khnqiz8i_e9Y9XSvOXCY5NLk6%u%tj!L`b++uRd{qLEcVDx)Yhw$;+(zWsj#v#J~Sx znM+;yPKhh)6b}swBrg;Xc$@%Fl2Qw#bXNv%F3vva^)_aVKa|4Zpxc+;>C9oHJ0^9% zK%EIG_EC^d}bHFLgY$2Y{*eMh> zf&!EW_Xt02{-L`Yx(j-CEbVu3+j1hZBcOnKd&}4!RVS3(&}PpbtOO$!+MI1om0%|W z=-_ZDaILqutXxey|CsZaqw{$2H`WC+aUZS>;hi*FWP|SQ&&j(jdu8ZEz(q%Qww15Z z$huVXIOWc+wp|zX$=GfN%IqMX$EvGLA`SUMs1^nmQr7i<47p3cR&snU(DUT_em}(! z-qqB%ja*-V->rhe3qE1U~mhvwT&u(3*DT752i&N29I*9=r&E25=j{UTO)LZ$rd$!>Nc$2Yu zb&mSZA6XYluF+V39?;GcG)ogT7_a`iC_eRVQmP>DcF7~I6Qik)?f;$^L7uk{^=$7S z1SoCy!acPZxm+=D)Y~KV=(Xmaq%*VM8ks#7s(w~RJ2zapfk}>wFO~Qgj!nwEZJn&2 z@t-)fF#I#VM*H7oac<>-n8&d^XM|=NxO3XBE)Y!P52bo1lBYB|g9+S=)1Ur2YmXvU-jF%Jt>MBA3dQX;XW5lYXZ}}?ScoCUYwt=j zP>mSa?pTY7S?JJK@au|Zd)4vY6N{$++PN}Sl1&@--}zwP!nUr}l&Tt0w|q{W{}s&N zHj?m^3PL*C9F%=HN_BN31=qNP*V*PRM456JrE}C*HkZfNGj%#^Uwv9Arqxs?GO$eR zzLfRK^xsBhBTuM7lXs>0iSq~z@R3Spe3hAbWu0x8{TunrBX~J%Zd}k`|BIh#?Ky+D z`ybu+U&Hb5+;fqI)H`#A3B|34OHR9kc`bO!)fbLyv&gdxRj5FE&*HUY_d%Nr`a;-x zl%tzO??fwxr~TW*X%K!*xx?asNHJg5aNhCY9dP}1Cg>zU8g0CaLn$CgINSVtxZ-;W5^?ETia zveScQu*JA3peuN`q-@>f4Zi{IPR#VxOcD!1^1nZUVBFA>mh&H|1M2;HazBH5!+?c3 zp+Bg({SI~d65UCd5ip?X8%mBV{&)GnFDA+^4H+pIjAhbxvA=O^G2vzcN&oSxG=HyBq*BQs8giwpwrZsuzH zR(|*p8C+#VafHZ5*%7P&AdgzSYd2IT(KFXh3z`}ronoR~h9Q|=uo+6h0J*Ea%dUD} zW}=+w!No18be5;omhWD7>DxB@C#OWX(;ZZcJ|a;TswRWEELy`Gb%$nW+?O3G?}#K7 zeEoWe@)_v74P9M9#ELtwIs3!8YGTrj4MhZcb5FanSwc*CU#Obd&$$1(hkRk&72802K z4HRG=;GNxHweuypmd3qpAQne?M>?tG2RSWFR8Bla*ZDP<+2Lp#5Tc>pCOz9ZQ|#Sl zRj?8B)GPmtpX3Y9+kQ|DCP0M)^M!4a4929h?`5z!RF-@Gj=znp-C`{ao!lSf>c?N1R1g3XCcz zG>GL4plnA*_sB5Or^iPGIx8Er^S7c`%~m9R0jdReL=0t6KG*!xrSiDl#`KY| zzYGg)PoZ>!q|qH>5cogX3#TXEA9Q-ZZeVOavY8nfI%&L(JNaH}0=P`b%9@U!$5dnQ z;+VUv%w$wOfoD+=lJW+UW#f`QBz-3`zAs1(9JVZ*T;&h+&@Q(R7-cu9IW#^gO$zZiSXS`Mj3LwT_8l zh-!J7Ctexw_(_blIJKGfFofCJ%S=6`?^&83lZQ}w@pSt2o@#-(_TLgo;O>`u(#!Y| z3IWFTW<6zRR}~IQkG0yy5qcA$_H<4JIzA~V*j6vQEY%6yd+Msa8bEg|;k)MpOz_rd z9t}z+wqFkO*@tBQw3wm!L28MNyzg5HVIx?cGcUDd@LUEx#eGWN{Vvx+Hw|?9+l!SR znI*FQ*f8+c`)SM{_Mxk>J__`_dE-a+YOEoOS=)AW{f@{W=Rc7Yk7nJb?#^eO+g(2*tWEf;xlrROC^4#O6#RCefn}k>#jX8M-|3><;?z?E zepNnD;33=$3_-m2wl5kVB$|>CBih5dz7sU1RHIL^@8%0g|1|9xajJ= z$F|?zt4fT_Ew>g-cI(XiRvkAUd2Lz!dcdetx3zMRBhKuE)jET&yIRL~d=U#@T}8=L zJgqUbdB=%RQ|d!eu}YGU&qqbytJ%Z&o%N| zYsAHo;Un%pic5q#-f$T>v$@J@=O{(ECJvsBm?{p6^&-Be;T4Xu+|DU5p`&DO55oYt zrInT77RCmqHVj*D(=cA{0p0**Q7je63FY^4$7v;-ws`4o%6`n4r4DwAJU6yqdrdTWX(bu4$ZPwdAi)=o}7i;J!my$Lm!MGdGZw}ukSg4JIY*&R2u%5Gu4e|Jhn zZ6wY1_3d!mpD10Zm_uY$D9=}guB>(<2SbN^2=A-@QVarlilW~IO??~F?7~8qu6sI- zapw$#DLcYW_w5VS6yF*m%$Go+)3y~>snLk~!M7XTos_?3@yDe56JzQ=H1GSrzU4d= zl^QfPA(8T18YW9%E>XO)pJBW-QPFRicOW9*Roq(h7L z`QvkIC)jcnUu&vLYd$Zdk=9Am?om+qfbXes@$$?MKcAXsPO&ky1Nmd~2&p*56gt{M zXd(MmoCA1s$T8~Nf9V*QaviImK62{FwojPf@(^W|3ShKCDaz+(3{BPs& zdTIwJx%F!jW1KIDZn24~XTgl28J2l;@-H7feedL)NlqIT1mfr5YpSW}MF7%Ca9B=-V!5+giD>UNCam>1{xmmc^E3FaEuI zw#H7L{3)O-dO1&NlZmEkK>t^5k09SiFH^}zB^v^opvO5LNWV~0)xit}hASyvJHKI& z6oZ*T3u1|<11G3g2gnh9M z=XjSGvvvROWYw4w1vxE!6^JAG3S2f4MplA(q~ovof!bPGWh8d^PW5#JT(fw?d^WspA#> zgRt#wnEG&$n>(FsZ6&E|(0N0<0x204^QPB}ZtnV~JQwvho^okCvfBHVwe6Caz^&QN zq1$B|+TL|q9C2Mnr@l93H_;z-EYwMYxqISgJa#OF3jcYw`D@w5RoHFE& zuQ4UhuTsQxCqJu%R3LmhkloJC!LSfKfG{CBP4(ogwI!|l*L_Kgi(MY-;a|%1+}O{1 z_)SFZh#vd$rCSU=hEJV)jQ5RJ?ch$`P`rvU7-XUfm0W@JkWk=QhQ%)WT4xZ34 zgo{sCSCMy-on}wf6kk+*&)&f7iINeKoxyu~Pj&wK-R*8MqTozrA~RqK z(W9`A@_VjOyp!;yaWpTAZt0)&^0VXz7gf+x5g9Mk$jb+kPuEa+MeVEDrjM3^wTp|( z`H5iX!q$OOb4ge0M|1)|CnpXpeEn{;P}$A;DK~1`&^F}mva`e8Wt%>cVpqnaoQxYN zZVg|2gWhiR5j+`hi@NH;x%4|twn>IEacusav2UqkYJ`Fnd`g6~Gg4{V3VnS9)!Mjj zF*bM!s@CKgW|-%1465`5zXOcvVvqL~} zw&1hOQqL5n`RX?7qE7)b(W~lMw_UmaP5SBHocm$&;*k|Pf`La^dDKS!4;SFoJ~wvh z(#wCco=#c4SyR&3=*g9KRcoJ8>M7^evR%5>R4O&ky`P0bML%!jPsKd5=PpW=ng!oJ<_l#yOyQ?bMxqBAs>H(&^@1Rv%O+1iYigYZ4y> z^DgXizQc7=Eo_t87nQZEIyJiP%pA5CeXi)Yt5fgFD?R4>{Vor~&cyX5atIClM_xmG z4T&if3iKKhV_=vpoKl|(e`PQ*3JMC45$4{S5y>zr_~0q^_|Xe{v%*TRmE~vLWGc;a zYe80Xr~m3H-W&UrJ-VK%aDTj(-Cg&If8lMx8evu$V+9G@T7f4ci7|!h6odxh{v^%8 z#mx^yBBTcCyBAJ!$19yDpUtd#w*Pi#{kQzT&VXa_OT{H6k3)5!qrlN-`X@N+?G5i+ z@1H7s-*Lw=*T6dF^!qp;6CsvLeGws6mXwZ`zcQ9l9HN()ww{gF@O}K6)srFX6jR~X zts7ddHkfCwN&XPLm07pu^37r`8_hu49Rn=x>wehgeOlbP!-zv-xA{Kyhwu2gQ#WI0 zt~)v;1(A-MJ9A(+z7NC5M;u3Cj?BaA--E4xOseuD`nReHCwAq~l}-j?-x%i-pv{KQ$!Uw)!-vnofF?JE?M;8r zF{tc*MAxp)$f!1wZtc2o+_&TrV zsvq6nf72Egpa1bjsrb>IS~-l!P`HnaL^6#?4@jbuS%;tLm!kDR=zG6}gWQ#!x&X$W zhxl!Zzrv$ivnAlvLzQpsl#jx3KY2U->b~LSqp*d1Cm=Dr&-XPJ$HbjA zKv*eq*5>_=lWsluX*>US1#LeAy`aEAT>1+7wn;G&2D%9iDY<)euZG&fGJLkcG(09B z=b+{1>3=^_Lq7t2IWT6!g>>bvmbbQUG5;8xifNvP)Jj&J)Ju4Vj)Cs&=2HhKI7y`w z6R&dHVfJFeJLTN2sUnxS0lzS%KQXCYQR0cZJ!uVn<3V@Xs;k&YR4YbdHxd=CTE5Wg zkU<)aL&3(O)9Sl*&zyO$qsa1rWHD60KIr66RKPAPy6(du9fQW2{Wzk0lSYDv#4yRy zi%`M6pDo~&&G1*@M9t@Z?XnFCFTKK3jrcUE!X z|Hq>kBA3LG24q9fUr{1nFj6UrIeN?#YU?B44%w7o^dE^Jqkx8-(q)Jig;RTbd*gd( z-NcNpVeyZE_VBWswm)rcZMnZUJ4X0GvrK3(d1F~E2=H$`i*(M-Otck$CI+A!ot$h(+9epy&lKL z`c>?F5psrWPVckj;j7uA5k3lONFh>95uH};hk6c9g@qK}3p)K4*RRu1`X_JhL0#kM zsN0a6BDrP5+Wj-29=%L@lZK9H8$~*bcq1vFpU2GgXQ# z6l8apJYB;d3e4=lbD;!5?2^^R^$gMcuBq`W3)VO!D0A~d6Tddo%?5a#-fl=KdVewr zOLi648#@&M_J^|?kp1BfTr=0QnL#`DPvC2xA7v>wI|G}Cy&%cfbPJIb698;9fpX!n zBBFp&;&EdjB_G%F*%u+JJiuTPIj}qV1#Wz>bt!17rj<2(9%kWM|C%IGzgJe^N+vI6 z7%B#8BP;fRAI^iuto+BMoq}Qs4ZF_j!6pUgr;LFiJdRf}e)>$>WRj|y8Wlw+EnImG zvrc?n{@PVG=JVPe?5vgKF9u{nX){el*(Nny6SCISZL_cqdlJ6H9wV>-c}fY zZLjT`yBV?MCfPyHp$oq$Y~VuVBbb0=0Q(8BPs)SZ0RsEN9rEHTo{j@s11u~pSF1a9 z;_D(w6kYYC`m0)=JqvEsMgVFaWy8C2GE(UcbbWooDib+0!b1#nsjl&2i2s6U4-Dlo zZ^zJl4SA1^P4N01DKGrg`1OV5oplX&Cl4gXbXb`eB;LWe*zD$nq$IEOU_m<^I*~Vc zFDv0rd$%zEijy;@nLHcxoM?|oNtOTl^`eDU!L9-069#(EuQ2O+UJ-uI0u5=+U~Su) zZyg;hkw@UKbN?=YRY$(p$jCJ>9v*4a^+MX~C5B#9eASj< zKy*y50r`X}vglmqo#4;!nR7Bk5&IH3$f;46;$%C}@-_x8&gl21>1M`5vHs}Jp4{y0 zwIxuAy1yP&oRSdy*$aX(|HWmjGBK7dbgfJubWm{`&k7%*$wrBW_*fC<8N{c&1>0S@h zkXM9QCMOq{e|oQ_k+v!{@O?XgU$Jjk>%|k_Tzlya>Auj>TF$iqCKC+Gd?%-^a9vSC zA6;(jPX5#*D8ez%2&-R~!2472xxJoEwu$m*)oQ9+0+Tl=hLo?PO=zfELodie=OsrS zeXUbYjwI|Ubk&L&^_Y;1R=y>*Y4a@bA z7ino<42RRt{TdtdKMnce5vUN;$;;6rjzjRH6dRKTb+dD7h|r~1de(ElF9I3#8P3km zhWtQn#0g0@h#E2$gR2_j!Z_rm6KV?qllY4v>1j0&cxf^6M9N;`Fo8$%2)x81KZ_m2 zjw&ZRUXeevxBO(Lq6B3h`v!b=MUrwPP(~^Wur)wre8Q@7YX11D=D#^qqwAhMKS_(F z?8JGT?M7tYh+Wp>^Wzu>&u5SNrl(;6kTIszRC&5mxe5$iz|;=B6d0o`fMq~~0HQl( z4m!@nx!u%SVvr@I6GcaQz~KjN6M%@s6a}B;D#2mvrIKoeUssNvwvt@pN*um_E>cR$ z4@e*^3l)zHkB*A8=?_H}7JD6ftm;1oDLTvR*AM8+KMGUeeNaD0MS*fOojj2f%C#uC z7;`ycVm9&Lh|1<&szkmRg1L!Hpq;Um!!(c%q@{G7- zqhGIJJTbV1Ht1ark5m_{;6E@;w9!Xs)>+zRW^OLe>kLw6p7_xUzqDL5-&yWs==j15 zoDJ?Ml~ZrOX)6!^^aSvX42uOws_9w;P%0!}Fbqxm>v)15v;^W`4X$NKq0?p^t_Q3v z$bpkwr++~R?=E6X)aJ~WmWPEpBQ_=>QP)Q z1Epl}0eHfd;F)3uViGzqmL*Ra(LAA{p;23yRH+GO#c_a3dA3fPkjz&!`41U)*oN`s zpXk!i_*eWcm#q)o-pDPnJ2_lX0!hmGwxL@~-&?MB$9?Xs> zW@Uxf7trB6dE(Zi<1&0{uh#+a2-kkwh>ke)*Fq*bLQ_yj=fRi`Ah}n9MjXNonizg} zFG8;x#aZOh%@mkRP52J-P4tJoJ>{>=*^-}16y|ViQ#>$WLhg5lhJ={Mk9S6?P^0a^ z&7IYwze*##YH+gGLq#ZEQOR1IBiCVMYvH-f+|llC3Yr{zZHJyqLikUn!9hND{J~e| zy*ED}*A&5hoA}^;kIA&-ngQfOd-wWh(yU#}eE(kTYI5cMw{q1p5PLJ)P}?9lZS5Bq z_Yu;~zy`S$A}SA`FzlUGpMx_!G>hn0JO{l4AuXA`m})IdT zKGwAmva*SYtHB4oN;x0>HMV?Rfr8B&B;yg)MksUovsSi_!Pz?Ts=4$ z|66grHlYj(2nbN<>MQWBfQE5`u@!&T#l)ohdA4S#C{##t+rNH&X2L5cH?>3R>W)-K zR1>8p-LxMMz-;Biw$AajL{g0cWcB-Ze%zCMs+XSUW8_Ze?Q!q$b%}fp7FsUvo_Hm; zFD(`OL@M5^kq{Rr#&;C>sZKg(QXyHFxjsU;q6&7I^_-8Eb(F9c)FFCfapWf?5~ zS4Ch7Y``0C>FCfFm((l+hip|_DN=di-By*&$N8q0mSjk_f`jFSl_4D5U4_MX?rshS zY2RMKyj~5orV}}(4hW=DS48VdsEsaw!L=Vgp7;0$CvPIgbfbDjT}>x19}We8eTNS_ z7{^B|N;HP_POQC>8FoZMf}yFJ7`(1x6wCzbyFU{5l`>Ox+Z8~l3MMGzprPPJ6o+Xv zmU)f2CB>}H6*)oELO1hV1wu9IKm=vjf?^yu0OU=pRWG0mxp0BuRremv9_>W#BUR>1 z4}M4ad37HQ+F^O?oJ-NP=Q3@?f=$Kfa^d~&TOYnqZHbXixjgkW!=90q#^6h;m*H+` zhjA6?>s@}a@VwB|a}~$-?Nqy5UN(REl3*=2#TytDw1O5hw)_e~)Dj@;OA*VA2twA~ zHgXS<7A%Rw(OwvluCAuVFzmrs73yh;F09GX?m=Gy#&(9T6Wr?0bBlhiHkwk1rRuv-PUdipL=<{zb5A%wl}OJI4E_rk3yYOwu080+?!d25KFgN{A*9pwX0Xxhw%1{k8j5P zP5LvnJAd?+Z!%{vTsV+uHqY0*t?tmvuQ$(UH@!D`@k{5OWa2B90G@EiCmD01drpnK z6&-v-dx5dCs+{^kA_s+bqHj%k5Sx1Q-?ayW+%~h)m^%(>tjLM4da{&A41u(}R7ABt zV4@bSNy-!O>_H?!C{~2f@vEn~#l^8)Rg4VJ*-7f|5v^NWZ?f+Rz#nAjpcJESRY?AV zTZ;}2l+#DZ%*=` z6s$VVy1OeZgs?_j-4~ z3l_ARGM=6V%T&*+SkInv-_p&!zJo}lzkU>Ii{N2;o`Fp&%oszlE9zMm2Tkql!q!_J zpIc> zwS`G zb&YY7uU%lYZg`(<9xQ#mFj$~*9vQ)Yu%{2VHuMd=q5XB*owfDC`F8~!(sxI>mW^75 z=UD<@(6Mi@o>@3388;ty{&hZu68w&yp>Sr9j^-2_@X?0ivrzm0rj&9)R9}?Kf9&Ew z7I+$hzmS47w6;FS>pIvk=$g>5F0(n!`XC~!I10HT4zWx@ICjKCRsp^4-kH7ikIb6d z5fRpXbYsBMQ{FY$Z854}4E&keHfNmt|Yxa%RApO>74vCz$bZf1tgGlHAS9u(7+b`?G$KALVhk(4)ror>tH^i*kO_~gY z6Otl>>kB2DEymaAaipUFpmdMA(fpcTMe+Diy0JWHR1nvM5b(#t(dTp8SOUMh0Zds# z&mZc$p0maRbGskeEG;aKIy&YcDf#lPvy(MapAU83cBvBrjr*<6X=h^XfZprW6$wU5 zR_tNV(PH$Dy^W&WaSRd-6bCMt^bJ$@fpqL+b}CyboWwW+aWLe7N@RU>dZPNcXKUMbbj~uPtBjdhkK^4ei|e{Qt9B zN6Q$aVCl6D zc3}%liAagA`uKzRKiw9)siKQnW1SPD3_hcgN=iua| zCX->v!1auhG>}inD`lV%IEB`TkI&nCneB3t{JJ%-lvJZRwGKhclFT2#<_6F4;@K1A zBEl!~#$LPQ{`a!0$}-Vf;*8E)uUHwK<`3mQ-)}7r!$amk1!K6xVd91sI!!9Mc0-JN zSVbBe;_W1jH2Et3m~nGoLz%9S{JQmpg?+z=<+WStP3;pC`>on@pVp`5>3RpU{m67S z16|&D{#$d6!+gE;3`gcPLqjK3s;u;Q4PN{-;FgGOChLYLKMUojOQJ{0rRL${rZgf}Sje zxicsCuX z(8MyWwd^=6>RAdpK9T1I00mG;?yqyE0JqSF9o}$r=9?>{+6eHomGrllc{~ls=n3-N4r(fPtJOjm|ZTOi0 zkRa+dThui#ts%`@IR)*It=DhX8W3$+BxK;w$U6NP8$dc%GNoK{7ZfZIsCpya=OS$Y z^A#^w>~$j#Knt_Npz}8?xaU&yo<~!4rPNeUD|4QcRSwj)9gM`;6%!K>1ld^tqeo>L z4L6I5l>*VP=f3uDjg%lGNDaSQ>w{V%woUC>SDT4KZFg2`9`vnK(;m%#%_;VhU3f2B zj#NMP)~G~b-}W)`!${XeMNO^m`tqOa6T0rxy1j$4pdg)x04ls!m+!-$4;2K_)#dXo zkX`DN{V=w?G}bpY#S9nF`EhXM$N(KiN-G?pD>5H(SgQJ(8?iU#S}5f*ad+q9`uo{? zyp-NeotKvgj~or*MTM~d9hgH)zv`DZ5UnKT(LUny=r#kUH%jdle^K%_pbbR7@OYtj z?-DoZr~pQURT4m&K2NTN9TXGjXs&2Y5e^{A$l3Nm8IbFOi&OURp7|@72PHNyo<HyEC4a6u!FzTS)R@#vSzI z%}mIHy9NE$qfi|wh8bfoOkza_2$I0qoOYkknWyaAqb#=LS)l=U6`EwZ9 z3xw4w?2!xi-XaI^Z*xgt*WdK6GR!QyP3yX|)p zXUWh5Z-ZPQyR>SJ^K8AiJ`bU&X7ts8oc3=wc(QyWk#Unv^$B~#bmGSouuZJI{ebf| zvyO%a254E&jY*H)44TdBRU&L)i-Tu>-!e2Xxb?Hm>pl+Ywj4 zqH}G)bkX*AruaR8%JWv4AO@rTjZ3RHA75ocnnI+KJfTN+%V{87mjs)>^y{udy%V!$ zW_%;TY5f$)>kF}0Uqvt$=NhI)$H~mmk&OZv@pJ!ih`#*O1+W>YVZqvaCB#pL@X}%* z_Ffek-of2SPi|cwMG3)-N1`JLDIUAC19R&cD~sxy@aS ziH$WiF`>v#9+34kp7k=OP|)`_FFvh*{rX;+`PTXsS}P8a4ET%PgKndPqw{&>mYMx% zF5?M+ZecENSpvNCrO~J9Dtk*7L{VN^<9!hJ@$hsnaSNt&6Zs{~sCUkNa*T&40Y*O= ziBD~az;8)ysVU=)lNF@sba{aQpi}+$J+gw9-s3yOa66Bczu8;j!AY@PgN_qQJ# z*RFy;?dqV)gbPlP$f%4&K!~S)T~GjQ2nmBmy*@jG5xc~Ysc6*02RtzCJCA8oRC+6j zUCN{N-tRFB|6Q@2$$4%d654nZUt|}*kbRgeGrgM#_??m56E80a4~u(rsl9nVF+tP6 zpgN(j8jV^^{!e5X%4RrB}X39paAk+0eIo0DjuAU=gwHba$7M@BYp=_(p_e|K&%wZJROVDwRozVIMPX*V z3qZr~L&8Pm8}F{t=JnQnPIM)cs~^mbjpI^Nzxn$7FdYwntYA($y1VKVIiyuUgTx>% zWG?v+Ps9C)NW0y?zss#L;}T~OP1o!_+w@0-s`;x}v7ldxfWiBh)px%LDbQ1?8ajg> zYEREjkK_K15a1_;fri9OBunPGH^XDY8Z64;9F}32#~ra5=yQ9qt3gAmglFm0H#Wu` zkJKn$mZeiloCh=?%W?0Nd7+VSKRrIKuH}gNPoy}zw+69djy}v~1X$C9FI!f0GWQg7 zva@${Gvk$!oYx$jk7O7{dWaSFY($rwtr-`~2fiEK-oUHlSSYfcvw z)bO!+>meaGPO*arcd>f&Dsn%)u#f#SrsnnboF%3GVH;{M{ioo()18tVcv(~wp!Z_@ z@3;2$7e6K;CsqS|nfq~Y+D^(ls~jPA+RMJU7stoJssVH(kdG=|`lfX!>3f!6 zkcwTV>5Q`4-tEF~Wumv&(a9eV;;z5GD(tZU3?l?&#DSA}zVA`r!H^bVT`p|Sp6A%r)?7KpZAT__ra@nt|JUMr3629Kel;v`_`RTS^V z;dThSvU4>wH&>Pm5j|+s_Xk$GNaIHXV|`mKKagMf;RB@PDHN1h=x?{cciWw^b`{6z zNGeM8xTL7B$=q0I>{+{I7Mr~6AwLvN3Fzh$7loSa3@a-uZlb(_l$gc%@KY9a4jsoj zPwvxm+WuB=Pp|YQ-b;7rzDIyTz7iE z4OJ0^`S3h$>|V_I@?C2j=(e1HrMp*g-StH?{W1U8+hOuf^KnFiY-5%%6CI5l{h9Xs zR4q*r^o_HX(Z+>@)XCn@kKmI5iiUsXXWSh>o6?ZOpAi=oq?wb}IV>(-)hEs!FZd2O z@F&n0ERB-ufD+7wq$6Z-t+`AOuSz_P`~#dozWe$6Uk;5Rt0e8Hk`ELf2ve5Clt z&||Abrp8ytg&x1@tK0WTVw*~O|6On%)h#D~!cl`)k(x3!GvnXP=$s1zG7M%gjY9FN zINh9K1S6hw&@u9e!LpfnW^-*_xtyH#9qfed1oM~nNl&v2{vYtI`V;-q1vgoc)#a|X zpA=;m9^bGiMLAlNWZl2~&8v$>I@*x`Uf;lVYRU$Fp{+E=>S#SYbdd=n#O|YD{Bu{o zL?a?5CWf->Z6A@EkXoDWE5{9EP8Qm&Xdqr~&X{$2%urp8?PDD(?WQOT82xVa7YjvotO3epKB9T24HGHuTSv%t&k<`Sd^j~ zr$KJ1y2y#exJwoToVuDi0J%tGP>ZEJ-)*S?Lm0vegQ$iab+_s0N1q7gz0~*044Rf6 z@8!9f?_!gqrZ)1Uv)1R=@;Zu%&D*E1#yW6~1!>0Y(dFJvnmL$|dZK6#z4zPgs zqFcI_ot98s1Rte!H0=hm!1(wq48uasbmjgFMgNAz-vEzSnE+XdBMU$q16M* zL%l06N2f-E4-7Wg!u9?hsC{{MeRUM%8L-Jvwivf80@7MPI_gNF*goHvz1+5Z=SS(3 zSBH%By|BuLqLOz#WpS*Otx-V3kys$YisqMs+9H>A3`>k?3NXgqE(omV;TuTjB!s%(2FygCM>IBqWqMTt>1F zqi)ix!#88Z3_^uN2l{t1qu51$XXJeCR}aQZ}r8OnjCK{mp6Gn{BELAjB0mKXw&sR%bDe4U#jMNe$CRdZ&-*f*_Ai7MO9~+ z2``pLQSf7qsQ%+04;PwKE|2f#*e*@W7ivpda~p3U!#l+zyUMKyZ>7L-%x~rz+~{i~ z_rCA3-o>#+`?wV6-pga0TefJ3W0F&oj-X=PTilJZ_Lau5}EQ#Z_v5`)d=x< zTtcj7OZS!qiI$&*;xWri7tSPC@tb@!Kw62N0!+Xm#@6xJkUTT8q zR)mTl7c9Kj(z7An`vCUk#Nwm1T;DR5g!DKDl`}L4s)(pjfnJR!EtH^4EnIOLA3e%_ zJTrZ#bO+!P0anReLlF#I-FSZ`+)2GnFsKb!JRA9@AsB4{N?h~5=m1FZRaVv-#Sqe^ zcW}5D92|T@cjUjUMRtxlrgiCy!eqe`UDme#x0{>?G^~t1FMGN1eLRs;ok8ui@XYW{ z5!Gp)G4I-WRtkrBCJQ0Ev8P`MH$<-V_phW!^CeZy=V0~_ZMRGyI6aeddZ+bHwq!$m zpn@C+Uv&Rv><5ot(|lBFaukU)giLy7=E3qpON$^6&?Z4FjvMCv&*F9IfvHKfdi=iB zxgSOA=j35~=iAFPf0@NdJCAdJEz7~gr2{H+G|QiUO)py8FRsrmyzbRd&Rguca)zxcpZ1M-q=U?+F4MSY($+w4 z1+xhl2BpwdvjgP++9}AR$Oy^TRWZ`J}2NcrbHVg?DOzw~njCLB7T-(u1$IJ&9 zHq!3H5v3F~bg&p~Om9_hHePNoaHK~^sY>}22X8^JjS2+*?y_V{Lhk#a0Hh~$gC#B^ z+{3!bMf%{ua)*z)k7Hs?;F_Yf`RjlGnYg&bXy4VgfG7%q{?1>OXoF(mI*L=dTp|-x zJ3L0x5>@{N5k>)SJm=P}ZHThHa$YsHxWy6dh)|OvtTCC|3va$jOb>hulvst=Ll7?~ zE6a<_zgk?r{CqZBHwzsA&=_Kzq_7=G*OI?KRecw88OnN(vTWPzbVi2Y`y~4^N#eMC z`~S^@1%$>||iEIyiK9;!&D-zFmM z0W50zEQD8)s7xd8Yf+LP(1!UEfJmrZ`3(bE0qvu@=Hy0Tu$SJD zNn?o=F)G8DMhd4dY^I{3O5ugt!ml!5_Wu$re3}DLuj6iMxN`DaunPalZI|&0t)WN3 znc<%6x06hBJEa4qZjdbj46j%U{hb~L@cyxt59NFnk zS9_P^@@ceVaXcDYX1{%?M}ZAY!1|NE7g#zF15$c>l!f*%Ab(vdHHdHCs5`;37#K*e2{rk13SpC=Z_4R>L10bG4_r4nGi;a_0inZMo zFQ_x6CcEZedqGQ&kUG$15<}%(g ze73|Q)vXY}7P0c_(wL(n;wiY*(L}-wEt>x}xP~xA3_ga=wL_{&0B*~M?8qoFqc7xi zK<8w@aU(5u+9R5gknn^SD+SMB^Vg~&DK)x>N1vX218T12OwuL%AL>>nUp8DgXda0_ zRs|t4DIM%A9b1ft06`$2Ja<;Fypxmf#o!`C2zM@@+Yv7)s# zs*K@h95m;F5E7ZkkSBQQWOUY-OEXe^7jMXkiu7(aqH=`xn~SuRl%YM#c|cBtI;gMD zP%;T38juOmo$?eq9(E$e4QN}g#{!NSb*aO<{1lQ=NlsxT@I3T_@CD)}g&?a3W)>b` z`cN|5`(Hdq=}bn%m|1C2WNyQk>-D5)dMnk1LfDI8q#vOQ>#?`Z^|=NL)~TttDa;2! z)aK;;0DfS3*;ei+<6D1D&efdFLg4#WnLxw6eV1y@M0e0sxyinF!_#Gb6DIinmd=oV z7MGAXhIfl%CM`oVIRpWmRL_Nl_W`&eOT{%r5F9%@W@un3c`JB0S+$J(c`eMg&g(b= z@aCB>ZEXe-^BSPVzs$??1*{$X05~Q4_U-B4ZaQoIoaWNPNMspMHs*~C442o`oBG%t z<;>oQKrp3vZZ(j#@Q{eFL`&s&jS#oS(E+rt&=dyIg+KK+dZ-8kyT83vkN_IuB7P=A zFc13yVS56lwRO`+HVhb$GYmjSp%5IW9vnoKs$htzR9pm7)Zh8Nw<<)fW^39R8;dT z->NAS)UOvr!!Lel!|-`^_ur+ZrS&EBS;3);II_L@NdJIwV6*LJ-}1Z;qZV+8Q_kpn z#g5M4ZgMw!gxhKb0ILQUqdN z;$UFIBXwA#ZqXMKd9-SBImM->BR{{ea8Gu+gPq-vd`1vXh?N}SbV??FsrKTZQis}6 z?;P6Xc`Pw#NpG$1^tC&xTJwtACsiMcAK-J6rX!XgHL~Sle{492ypTfcTxMi--unO1 z>rjr6+a8{P8$OJUjGWZfjcnZc^O50By6!TjOY-va+{Z5FwApuLJEO_8T9e_T{-;R(C>06uQ z6`_b(YMeQ_EFH{ckYfXcbL$+;K@V8KJ;}r=l zslrg4Q1$Vm`1^m{4h#%@NiOG?3oxR;?=FOQphD6fD(nHJC>4IVt@H$3cQI2Oz5;*; z+#;MV{l-7?Y*5WZqQZe0ie5*~e_Sw79=#I2#DV;1C_>ZSYoLoMzw%qkj*gD{tO~n? zndy2y1Z<0+-n#3f5^C+cUxu{yiE6%qBLa|^iLClTvs>^ukUjud@G|fnQ}#oH)ePaJ zAYo@eiZvriH2Rg;=mDpQtP&*m@a>*L!g5I6KB=f^JL!JG6k|m%rxYR&1Rfyz+kQfP z%mR|pj~go0+Y`%|hAiUjc8LSAffKMI96q6XJO82JGLk z#BDoLaZK{9rf_g@V6@B(F%c}2o^@HLLwGetu*+_oS3U%CD-pnC{#NQL6PNLQ9|Vg{ zp^&XbMSax3U>i`d*-}<%lKAN9ZT8;|GH(N+N@;-wXfO45M`La;(|Wut&bl6J6H80t zH;ib5*415JMI^TPk38P@kgFJj-r`(8sL@RQ7hT`~WBEp@^nOh@_yMO?=smjE*Z-KB z(kfgs))LhZ;e|;+10$a1k0`c2?^+TT2c*+TEjILSQ0gW;eR{04NojCP`Eu_K~wQpf_X-c>ag4Un3MgVTc}2Mc;|YBS2j^2C&{?~tLB0fm zcW}RSg6-Q3D@)66@Ea)V#>Sb^b$K8Fk-WVX-KftE4Y$FC%GUhC)Y{t0F!Bjm8uF6- z)E&?@8zB4~8>Ic&otve%d%q_VFM#n$=RWGj@8dqWaq#vq#1J4bHh2L-)R_IlC5)NS zo#=z(1I4a)mP0ral%ku!uBU(b{>F!3HAO>D;P~Msk&o6F1NKZ%2sYrAmUjuB{cNJRI5EQ~kPgeepBW;XPTZ4LPG^QUR;LFsU$r(RxbCfY%N?~zjB2D3owH(#ST&YBSi z(jd?{$%aNHfjJFuZBSVwoSuZg47MOH`c~VUoBqcDMXME^5qPJd2u2GHH!m0`Sf?hD ze0zIDSTc)z{zgUwTP!qR$eMBn`48hNK#QV$aF292l7FO=6FuhWi(*gyTOEv`fnzW) z*ieDg6SwDaRH)=)%gOP^-^W4~6-oaZ87YN}4H_2OO!Za&FfY(s5XA|3@gL{~VI3S8 zy@sjHxc*FEJt;0;GR(;;DG7T2{shHKI0IbjZEVa8 zSY-bR!G9ylpO)gyxpSIVc}d(wE#cxS0MUk(V@0O%jzn=c(qSY8#=}Gdsn3jTZsBn3 zMR93qucj*}kvw26nEKV=*nJ)}YSfEl7x9N4LmgBXEe47QJs41kk@U>Qw$ zE~7>AJ%Wq8xV?KZ2i$I!^0zNU}SW1ANy)`y+lzNnNNMt85i7!*mF=- z=Ba3u$^vs_3N@}x{J|MUyV2U#mYM=uDMDa5N=n3I;M%uwR=g6LB5>k>p8TImd2kZR za49N(hC+p5DkInjAg}&4I_lTcjTs&cVxVzHcm+6_ zX+^OQ{x1eJOZ5Lk*L%lf`S7WfVP{2;0mLKm229Ab1PVQK+h4fDo*+sDt| zxUopRJEP?fFRfSTy6yiK5)TrE#QpodO!g=q-3$5H=K=;S!cq5M+R$#+kPcZ~-Mro( z*O`dWf$tLHB>N;5yb$qf%?94Rd_+U2cMEq>*X+#9v)tUUx)?h?syd#xSCK zL3}!XVSg~k35oyZ0{Hu!M!pCL5%-`dQ{$1Y#&7}>WZ>$IFyy4Kkh4JG@ZXz%$aQDi z7RIp&HqW>;6oet3BHx_M13Mr!Kj^?NZ*w7ZMeDVYhKq0rhgb01QWy3HbR zdq?G2+8LT#FF+JAa1d*-1+Koh{op^6=37I+P#d;C}q;olS>#P?UsHPox%A z7n*v6nOYb6aQ_WHVO-a0+$LLfU6wV(L)tqcDNe?qg3|fdvotQ53tdLT6BFhLE&|-l zU*51=xOeX!hAhiMUszOfM`1w$5M%T9JlnJ9!#2k6ys@~4kulTiLW)kr^bO#h!@qtd z!)8}kUtss0SzJC_`4IU;u<_lp_o!T{&$-!x+5j2ipVpOCRoA8mzVLLl9Uf+94kj=C zaWsx2)Frnu^#lc+w`xpv4?P|+M4`P+W=r{O_2!bM=2;yb0vCb-7Zw+PYca1UFTXBY z)V3jcHV92MKna9UEP(_wSl)1yn1-%_6U8kk_^Ef2uhngAX1K9$aL|6pt{ldA-G2Y+ z$m;^h;7)UvvclxXNV(a)udC~JK=`2wwb$x90Tl0@H}w+yj|&QhfYY=LHLl8nf3GDf z8{WQgkt@)|uc$~GzXQ;Y!Rs5CkrRZ+fo1?rnDEHR(bf5NM~)of=H@;cVS1ZkGC?7fOQSFkiI#CNRO_@#zp5HcOio8L8_+JQM?l z(WflT%t9aLkQ4$|l5qRAFDWU>=KJfw4lG&Red?%Ro~Cm_zG zjsYets^g@lOjqJs6vke2M!orDCA;@v+p#Q*x9~R&SUaj|0|3h-G&5sxKndtKC!0F){l@ZNJOO z%ga}|d7$2IDD=>On)V=$bpD|ggMt2j{ntER(7YbQyI|ZfP|i_?N;Li9y@toeOk7=? z-%3kKMZ*bJS64SD(N!rStArIexRUP*QD~MUiH!82Gl^;{9KoDinSPS}a-yh2DqwaI z%;8h$98OlV*+Hhd-rZN+z1bkg#uUUB)_OACV+zZX`}1c(BL1=DJs@5 zYrVN1d8NcEzunT-wwPOQX2EmI9CL9vmKIrs*6boh+q=MHdZ5Mt)VpwGhU?Dk14#|< zj$uRg0naX9YQc6ui)~%cYCfEKQz#D`8_%iunDfkyQyQV45eGUJ{y-ZQ0_y6oUw6pF z)omO=fW(A?Qtzaio}Lo62&zjgGDA4a05S~o6zxh7#@`DH;^E=ZDXVU7#sV_xlk;Pe zQUxM|K+%M$(bRyV`~U{>q2KJHre>bWJ5)Dt{!Pf_hPQmj%H#2b-qR*JK4>3~k#wp4 z9KGkFFd8-Ccy#2-Ss;AICh!4Yh)X`i<+QX~{IblcDzTD;s-yb#wuwuzWQ0&b>o?b1gd>Pie46>{)jeDejncqf zbay4leF52Npm0U&7rOGlt;JAS^et3Om=Vv!&wbx@u^H+B&x?zH?B&Sum^R}NW1tTW zPaw7z<3>1~&?a|;mp3IX?f6_A%Yg%;Tn}L$j8EQbvPydSG9V{M2&{9l&s{;_o{*iK zCKo)BX`%l%!lh7+yBwo&1U6GH>04UzV6TF_?ZEM_dT=Vg{R=WXD5>kaY@3$q+liVA zkSu6YKnQYpWTfDwbtayT6FA<@IckRMyz8*aUi+(Pvb&_OZ%am%hHVQ^_$~!wtl(OP zU$TrF*AloEz$vwkibsHs6P z?)lsV#YIF$rsUwm)XYpnp|1?|^vA+ZON1UzR#TA^fSv$G;nAWy4mXfxzjL6kz|KG- z&%ohB2L~k5uxva60u^?u6ED_zczE>n_d|f?973Ckd0}LIb%VM`$AytqsA+3kI6qvM zKtrd>+FvLj}FwpSz>&c^gO|Yr& zceb48FuLW+5OjNK$r}+MjL5ymo(f6_bp0}%lH8U%+iE=d!dbZaU@5cC2}skynJc8{dA^ykXTfNU{jO~T1DVyp3aJUEC!2)~E32U->z9&o&T_;pjsgXvy#}KN_Vmmf}Tk_q+P zpC0Tlw76P!DbKbY*_uJKi#)~B%IY5bxd%IdU9`To+y%t}QR)#)L{n5JJis@e!)#h? zIJcOT1rhp9>-_fThWz<+k{O4*O*&CAo=av$Jp7|t2c}x{lovbcQR$- zsJ5t_<;%4!qSY~`Ma4hU^}_Pw$e$VxwO-$wv+dZ9eLw%kwiuFS-#UnY9xcvnEK2p5 zOi7cI5O#`SJnZwyo@<3sxc(rm6YWy*yme8V*M1-BaG5xNkZL@N{W0Q>Mr}9ul^;eM zb)LZDU$!cAV}60`BI8EUOKIt+IM^MQm87O>*v#<)6j z=ib`SpAn6r4+When>TOfK5`@>E9)qKVZwuT52k}l&P6?_m~Y!+Quq6P&%Bd*eXzDd z@H>otjfR^uoU^}ioY}Oi#7l8~l4hEXi|w^k>n#)f3tbC7=i<60Rx<;3_UDHQ){C{& znWxIiXBYoTn0_kmxF)VHKcN8g4N)WM-0|ZP9~dv2aodoj@h2;7~`UwnNV|^Nq#vYLw-&vwaF&>Wjq}bXOdIt{&PM zwBbQZL1uSZ|NKMq8ewYA?WyVMNS6~YoF)bGKlZgvy)9g#%cxtWEvaASJ`;aU(!B6b z^e@4wE-P8pl;^txWb;rJNEd&oNI)kzHCoQPp^w0l-6ugV|Fd}c%9U6D-tgXkZy2sP z%lMv+;tfhS0;%wb3jZgdOTg6P$|L0LRleywk{~7F^yJfq65F+8F~$=A!fILfkGm8a zHPl_%eRSvLSK=q4U)RN$9G9-{@+hrl94+y!=^@Z5_!(ZARrnH2;N#uARbCT&XLahX z9_|o=!>`pe^z;h6gnN5@T7q6jFi;@_U|YqrTc~N_1wc}J_fg*&0p0FBdoEtSEa&Jr z`D#N0q$a>GOL_THd(!sq=`)_`6D+rkCQrQhB~a=gy`?Mr)%Av`_J~h|Rx&kZotch& z4t|{yf+4fZyL==ah2dcpJAtb_eDp|OQCnaN!RXctYs-pY-IuRX12RIE^x-<&rJ3Jp}KKU0wFh^?Mi?nDw1` zm)k{zgg)S_fz_Z!@-QqcH?93+z@#c|mzj{zrgEu1A&G~I4%+)XUyXQ|e4UoR?r(6R zNdErkVBAE8wYJl%n8I*kARqUN(FF})TnWgx!l8g9pf~sNkNsi81g`-OQo4lH+uSAE)Mbj;*2t!h=C4+^ z%XBRmx@Z5KUus^tQPTNGW6Cz=&5ZWi9>wP&2ToXRjpq>*B$A@deYlFY|LaFNn)sUJ zG2O1By!=+ZJXGHpZaLH4EgMSU<>M=Qxy24DPw&fz5vu}9vakr?*UjT&8u@b8+{5aR zCCP??#pj~8R<)A0@}4~p$aLXLn`HMb9Fyxl$1dAlwue=ykS}x{$e0qYV~^=8ZNI-( zID=tG9OM6f`IV9*Y$bNZ0}#f$W4P=W9c-}My) zxzGuBA#w{Fn<9&@0{>m5?-?Jc(ibQF=6V&QVg08mIa8Lu;I^S^(aF^gQt4CooAcov z7eb3G$8zL+gJ`Kp_wsDojQ&LtsW1K~&XH>fY_bwrFH3^aN1=bx{`&RrZ-3oB^do7d z7O^n^E0hy#I*Zzd8fe|U(O5zk6zj&osvRU~eI`qHtSEPg)Wy6+7pi@W5yo-i$ck`o z&Cd6O(}ad}uLN?mJxIy9v;YB9_WipT2%9-#5nB;q06+h_o>Lt-SHOvJGjTeCM{5lW z3c>*&VCo?^4^KQqe|Xw=$L8vj^kUuK%qbM!7c0!{4U9h=75v4~VnpON*{A?hRFSsr zsYL2`CyDqjtZryF2j&BONCcGTok6 z<(Or&n@eS?vUb~iJ;TlL;hN)P{Roqnz+e$@no75T!JU+nQq@Pyo}egNcm8+5+bWSq z?Afyik!|Lmyl#ib=T&dH1s{0Et#{rj&)~D*xki?*7u*+%oV>WS*rTdJXPD|!==D%h zR}Wi*QMzpp;h<4dzMyMWSw_BGtMPlVEPv-rEuZx!n`GWMk$XS&c02Ck4OMDtY%FWb zH4hE}3a$heX5b$DSlWIh-IhwRWH!pCiceaMbn<)`E6!FR?btjZz~27EcHf5Qr-+|+ z#(YEIe>;5aa&6m1p>(gDfr7HhxP>Y)&R0PPM-EaEoU-=$?N!y)S7y3G4zEZFuJ@^l z;Vf^|UGdPFhcNO#$#ybi+XZy$isw6PRDJ%c!v!M-`LoAMKc)J^f|!R<Y&x z-sua#`WR27hpAVJ1(` z+-pw_6IwOy!)z=Xr%urT6H3J4L8L&W_eYK(Y#5~6)XO2H)wdK3U`EX6H!TK*2OqWr zHc^$HEPv8Mme{cUKp(`hlb=2F9T~AA#)YR_$;yPjL5}j@4aUJmrkqZ=8=?Pkh~W^P znLQ>Wqk_n<&6IBhW8wQ6<5rG?TO~c;;Y2itb)fUgERr+lCC)W5oCaCWL0;aV6F24_ z#>Lr_A#%z#dM-Yua{V(E3Hs1Cj#%!=*a^=Kz8Hk~8}q>@(eAP(=;Mb$*;Nm_!f{c$ z{gUM;<~yK<)?F}~L31kn@dS9rg#9%~bbxpT`8< zfAqKhPMxTe2j4+JzZMuQNkT#bza+AwLobXM^9ywh|M!y1HP=BKyylbaiX$NhzBA~f z`|tM~JpK;9Xv?=}?Sjxf5>8?>NJaC-6U2oqySsgQBsH@EhaDREH1CLx3*2i7&p%m? zzaT&E$71*PCW_>wUq#a@wJ{Q9nLf+bNbuV7Y+3R9=w7yk8OQzzOCeL8>-ElU zmt8uFloi3C9}-WR-_Y~+6DwW#64d;A=y?bk?}L7tewRP@1M-k??78*NBLxCB zTSta{t|!84T%^s6cQzwxfkVLJ2BX^7mRm7MBJ|TA#>RdjHWgy=Ww!Z0?$q?JK{@9@ zY7+r1Acs)woG@Ap^j@ej9DrVWH|8z8K;4bUFs{-HSup>`aA47lx0>-wqAu7gD^x_S zvYow=1G8^VM{8HkJDqNlg@m zojc%hi)e=;+7E?lLErl%)wQ7Vt7Op*wnzEkj-OCP?{3z$H$};#O7ejFPnrWhOO6Ka z-RstoDLaj__Yy$q8nlI;M(a3Xi$le@!^7@BM+z%P8P1Jc<|{>iAR1mPW|~-+ht45O z&4xTEppbLGdsJl>`uy5|U<|@OY4?YKzn~KTWL?~isj9>O4r2#-OMibqaqBxUMM2T- zj;x5t$1~ec$f4$|n`d(@q8L*WGQTkLlbPT&j6XdfNSfM@^CMNv$ACI%HXltJb0Pk98K*rzUI~($l;`q;% z1#m>RjP^qsvBD`8*+CwvM?J^! zk@$sR;|V?4cD>F00x#?{y2J&X!lSeU6AJ*CemdedM z!~r|e56@91+M>CSVFM{sX}=Kl$v3fm%<=54o8D!_X!2S3dsDU1c6IK-zC%Rzb@_5R zMrSCis66=Z*R$RxQyd2b4K)xrS5`bS{bHp0%Z^mLzOH+d>tnr(R*U_AN_Vl#NK9Xu z7eUaG!UgHvNq2Ftzpsy7Lpu?L0K?qv5RS3c{M*{H?xPQOO-$Xx!)6|Q$Y=Q^yLTZz z@KIu3D3W&3xqYN{d22GNZiH3sQ8jf>x z7*PouOM6C4tlp!-Exvgtr395rY{>E{!*S=lD{XA(d}Rf_#OQ(~<2VF%Y;+jP;I+{=h=> z`|h&z*zyLy`e#)dNq20uW7+ zyWY&n#6w?A#4#Mg9R`18T>ES`Jaftm%AA*dGWlMw#YW6<*4tl=Z)JVchMLYg(H4fV z)SbDUb0Hx79v6U~pD9lF7OvJH9ElNP(ZXA`RN`X-&YK~e_Ix!Jc3D!4#=+z-x8cwN z8+-S~FkazLp~KIYTAprT3b{}FyV*~+NA;c^V3A|(AkSu&u1F#UBteM|h}|hfmjBL) zjS}uQJCZw^NjLvDw>0pwNVETpj;w|$+pl%{k$b|kWU)sQNLvS1-EWw;%LRns~ueSUxz5$e`LDR3a`AoHF)`K{F4FLunVQ0PAwqh21M?;NXJ(Rs6L;DuBnV`i?s#+!k&WcS8zGAibA z@q*S@<@5PpGydN2EC2U{531bt|D3_+N8VD5K^zJyDs(#xOP*+#U_w|9NR9h% zot`w!K)}Mdj!Z&kTH$!=)caQxxyb)oJ-d1*cLeDd>1moAlZgw#z*?r8P;Kvf1==lv zY8VN@K4J5e0dDTAFgFUD?jbNWaly%}c*0t3X-GUSBiFo+S>Fm&B<*xY+1SmuPgk(W zRBe?dPU<4;3&+ktj`5D1Y|!P1IZX%v@7EwOq>j8w1$T){lNepP2|I6$>K-Z%%4x`E z8;GVYAY&wyT?MI`x;c>Qm%~)%;KM{{A zKEn%^dlHZ9@9W#EsawC8M&zolBf#T4X7c${qc)4GkRk` z!dpP_3h8C24?(y6B*#vjEa{6vTHLz}ET~qdrkqd~<&=_YFR#WUO?dEj&k>5zK*iPC z#+Q$cjU100te|j;|773)asdi&x_@oPpw~VZ_Rx(8gH9GH+VMwh0sEGvj2(0jku2`A z1y30w4K=2|`eBEd_7Oav1#yqhZzfz7KYcY##TIS^7+YMNo%f#EgUncvdT|Aa(y@(3 z>0Ej!3bXG8%NdD9TGjITkwS-pS4gyw?Igc`{jHC9*FG{~WbiaLwnzkPACW(kP;UcU zU(vwF$moN(L8=MpgC|!Q~kq`Ug6E5sJU0BDW&EuE;Lv7g819xBgwXLzdH^3cuDKthF$)R>*IS zTm2=s;(bn|j#JTl1{f3~`^aMD9_0i1?Otsp`!`4(d5#=e(-UHh5X<_yk5Pt$xDv=E zel-LO0n!pV-eNc#9B+t_Ix;S9d%4&o-Fkn7BLE@Un1h*rn4?^RT3Jn}8Q`WNgA39n zX>S&OkPn1>YOPZdWq^V)=G`Nyc<88un}Ws^E?(Z6e_Q%rpdsc{8n>`W3WV1j9Um9z zOhcKDLriQwCqHUcJjWnj&%odSww;7lN#j+iw!Mfc!M5Lb;(9pn(RFdUwG&9R0ulvq zStkcdE&fH?B;X(jZAds_sDacJ#4^S2BkEn*m-BLS8z1lH9p>M=m5hTUM0g9w zjx9I2h; zyLoX5gle{7weUxTKb&%41cnD`Gg0RPP3_Xncf6c7cz4n!mZHdylxD+x)3)1sVs>;nrLh0zj4XK~nt&yj9C-l)_YNTQH^5@BL4|6Mn>%0a`2~+AetH z$d#}B#XD2p#&viS>tG{FBJ98eejOIr4WKxPG0;pyLUEXk6)<%C4JIZV3sD%~5*`u3 z{0T7nzkRmmWC%hP>6&LpYpeUm!3(o$wE(Ks)oD+P?*l2Tz3-lA2D-lpVpQ+KnFJ|x z40}}^swe|joX%iY638lt!oZ7;j5V6coZ7| zWKhnqFoxGfe@HL^0*HxiD4*vB!85a<7oTgQfX4{n0y6Mji+%D$h&VF}$ri^iAojrW2@(MqgT_cZ`93CD%CixNZNL6iZNsrSPpI)ve+Q+C$7{9}Rd@nBk z`6EuGGtgp0F+f;RiTC~0htJQ22((HG)bGzXtzk&hJn;o|gHXlXXno)Fz&ek7u*(P6 zgNd2>N|V7E99>CJoe(pSTE__iQ%#qW%U!B=C30F<5rglDleW%n12kIUvQyuOY>9Rk z@W~#W=U7u-n*U$HpZh+*kWf=x@|=yphEN~FUs~&b3Kbl{&qoXSaHo<$A7ekClA0m8EHETYuX9sVj9`{3fjMhGysf+0pw!@$F|IKJ5zOqKZfn0In z9gtVLtfuCRFdKFWiH@j!XBsE2sO4uOuKh?N4B2eg3|L;sEgyc@C!^gpvjzPkV%-jZ za$2^pUBfhc_A+G;M-~GweUBwEK1)ozh0sp# z^=smpeHSeGpH^~$68&5keH=FL!<=wGw!>oMd>$+r%X<4(oM$k$izo6`{J!$}x^@IA zIfY$9oZ$pgmYeHTU-zZ9mN{er;s00%H4Ikw$V1|QCBkfxnF2YFWNUxky98We_|X3t zg_tw}31ar_zf#PF?;b6Fn1BIjBs@G^Z>}Kf=uLPthmmh7H3peQMKNNFS z(!#OMHN-#){h?ajW`*!L|h1Y|PsN-T~7r zTwYl%-!8ibysIQFo)M@^^p`w34LtNb*T45fNZz``6LuJ8DU284NIy~XFL{Qw1RFdt z_J)~R#m0VY+F;;5-9cewnyCcm}^!9#!2Vvm`f}qe2+wOYCjSj(XfCuq} zGl&gQ{yDj%KOOwn2qxw^EHH}cq{-!Pxc!vtD+`MmN$M{;JaM~ix=NrHLarYa?I|In zjt#e%@y8V_ph$NMw}W118_ZP=ASly)H;N5*@nV~52#Ynh6_}04+scHd|Ndq)!K+d9d$cOh_882|l+Q==-);tmOS-z&MaKvroucHLyJd$0BS;9~Q0>~f zo@wviXXr8<7M#L)MO)3leKA!O5b@y(r6F>MqoC4ZrTptgO#M~gVfDLFGG4dZN(4R_ zm&y6jXqTNjBY%6(pSiBn-|TL0cQkh z6#(ndxVTaa#(2U{<^bi@;etg&Jr;KsBn<>Y$jeZaVq;?js{&E^8bGaaGs97#=Wks- zx{5uAA#6=mh%PI*Rp zg+uSJe%)IchT1~1ax}%8bvn|Oi#;3(!tdhWd?kacvk6CQpBmoEeZ5mRgQdB9vSNJV zgSEX`b2rvZhAZ zd;95N?C|zp@vGVQv46L|k8gtPk~){c;TIKyye9gZE?&8^x!mwE@?GMp(+9X!aU!71Xq#ITsDg3{0GfgX zC#3`4^b>BYwHy073NwISRDLSrYPK4=_XhWBZXqc^o^3{Ub{qCIYztw+gMryr?s?M1-}2*! ztr2cf6lB5fgXTl}kF#|pckxM7)UovnY2x8QABlIPk9xYcXFvJ2JyoKOvwF{y)#(5w zRiWQA#=k4-t`HuKpLpfd>(;FUZJ2}}Eu#XkT)aUX_OxNDBc^qE|VT zLZOJTsvPy1va+-Lm1EBs8*Tc>M`oSxN3-Wk&86o9Z_<%zQXfs}uC59Cvi{xgRnL1v z9cfkaMD}ww$=shU6*URDYu66#FqBCuMikoIvUE)fA+fc$&$Lv(rjUnA&(~AvO}G4k zPhDrOqtRd;*5?qRaq-Wl&7M8uiW+67*#uH96tVeky~(b!?exe%fDmQ5!+=Tfu#Gsbu7 z>YUKElksTJTz@q$Gc3#JTi-omL)hW|C~Kz;w_?QG^k$sf9f$_cp3JjsOy0xKS$yfA z`=q~Ws;FfysmiP_?Ub)y%=JcLib)pYZ7agN@req+1KAYRz?=o)fdqCUc+Sy!p{TY% ze*tY6>)%oF9H%pdd;$dB{$gO*$Wvxy(QKhzaq&eES zq^bIHr<%K%v3#nhKKqyJ|3~Kt1ZOzwO7ChqQXw!HxwJUgaNO=fUGvhpxjmKS_ zTKf9IKkN)!7PqhORovTR+%S4}u0c`I5hNC_anHs1iNV0bPqiJ|-urK$E(}B?z<*Xy z@Fc`*%ove6$G8j-6FCY&rKe!}*^?(dyV?OG5wIF@DQC=GBcXlD0l&%HuB!5R5_9gS zAaDEx5E3CFOO%>_6;8;24MhYOCt)p^i6}TLYX=GN*6-h0#NkZLM^Dqb8&&CUksXgz z42mz^m>cVMid)?0^XIP5d2eqSEkiF6!ID2clonZ#HK6nX-~)~3+hzXz^yB%7(4)g= zbr}Zw66%EKWdB}#9(LpZOYwM@lWz!;c+XtB{R_m5NH%^Ij0$+lbopiW-rR8D=N%S1 z$fr)vG^!fD_M9cpmzvidSQ)TixszW!Zi{$3*JV_b_#)E(5A)>b|AQt{^Y;mHW}AcH zZbb-ky>VT<(_k%qpqvtRhvS5PE3rGpzeGN7@6T|rEZclyD=$YPWw+_b*nZq?YcE=FP$IzMZa>qV_(J0xTiDJkvPVo*zPp(c--bSy%Z{Y4_g; zv2oO~766Ttk5AevR9s^7;20$1|(o4U~z%V5^c&><4`@B4)56~TuK7a1qUB`BUI)N%M zCJ{$4Vf)ln zjiBLN0lt!LQ~}I0>zC-t1@3uLRkhAfWeYt$wa7u-=6dA5$GfUI=MKlNI`-Ufj3;!c z^}J@A5R+cZ)_%LXvKTxHUIqwUAf%KGxuWE9($fKY%I_gyklO~o2k>W_GW#F@g|VnR zeB&~J!}~P|>La8-kta$4gNv*1u^QAGk30{NsU~Ej30ZCazq7C;0gq8vt7L}G7cRyc zC=;NiD(2s9W6W%^cCKn_ZhrEgD@aS@OKYC>_#3`4ZKw2sx&&GQ5Mw-67rW{hOMb6I zP7ZM)&*f1=u@ZYYIHXGQtp0%Zv#+EhmqD7!u(U|%11mOb>FO%}2j8IkrQ;>=skeOD zkIIZRomMv~E=!jz^$SjaJ+plh(#5$@nKX@6#O*LS0iL3c@xS7R9SL=7MjKy#Fg~KY zIH9niG)nQG*4G(r;@mKKq940gi2%uPc|>b?e7qmb7X8dIdWT?@K z!O@WsaTp3hRvgNs=3rIX`z*E-w+K4cleKOoVTBVV(Ty)ucWqoth$+9FZPty7jV(6u z`hU}I_9|)#nv2ZGfqqj3Hhb`noj(b?G5Lvg5K_osl(^^&!p70-*aJ;!K4m1ay}WQ^ zM6O3(!1?4t2SJGHn_bx7?a=zt_{141p>Hhx`yDM3t;uids*_Mbj>*Z%3Cd{s`t@De zcG=I1U8~-}nijsjkogFC?qBO#7NC#*4m7N{!^zPY&D--e{!Gzqy8XJIGrQ3_P{E(y zaoWQ}V*ZC4D+o7Ya3GQCldy&K2>!-8i=%-^UDVhA5~eCcO~`Z-ncq&xkVhCU^)Mo_ zCtMLiD|c|l(6nrZmbr?Y*4d>tBBkcL3#jhnXMxi|6;T!j)^>2EM~LZ0J4in}e9-`e zf_wJJG;Z`g02^R~-2i=w?yf&d=FP9wfI;2^whwSLf_MM-#?^0PQPO{d zfQ=H;$YmR3|GeMxBa)+Kxb&WCkjuo1>Sgbr-eIW{sv)Z>FVfS$Jbti5h?f7u>W5F` z%8f#JtIfTo6owKs6Cy}g&}kXEB)^8ZSvjitOk*b)Ns)9Ue^$dR{8zniCF*sMjJVoi%FQ@>^FBt2l-J)G5`{SNGd({!e=2pMBM;fY8aJw7}Gh5G? z!~$eq*Ql);E16`P#>Qq3WQ%iW;N3$hU;o8%yyKKyv%$Te>Z49xvZB0UjExd~Fu1z) zpVyX0VSN+2_<)DdLS`Jz!?r}2GobiUKtkJ#dyt#&*n`14#R@43&7B=;agJl$M??r* z`oEC$F^Hq<2&)Fz3n3d3))-|h=#!DJ@YHjPAvAFoHnil9)M&EUSLgin!Ug@DIkSS= z)wG-=ET19Qf?$mgVINmi>3tD~AV)y|wlDeFn0WWmHMTHLC|yVrpqgy;a1gO8GYTo) zB*T+jZ%y6ENx)2+F>>M)nV~%f*FZL3nLTbI9XT!tBoS+VV zEt(y_Umx?BNz!QHvNoO?n%L<6om6RQ$N9oEk}%Kz!x3JGj7?o%e_Q#B?N23>g5Sw= z2or^)8#ic>T~>5`xEzXawad?xHhI|-P428zjR%^D0gWVE4j-o`+}`;nJy}uUz0Som z-MV&b4oVMyS}ZS<8}y5$K1z!m(%UhyYx}OJGqh@dBBKAL??lbZ#soI+5_$qn!QX7P znH1O@@(B|(Z&hgo2Bf7EVJDY9{;Uc+j1m*Ur_T{Zv1QZR zH6*~N97!zvQ9%2_BOsZWa+?25{%H1M>VaxEU;5gsf4|XRUzyx;Ynfd^qBKp<-ROSj zr_#!q6n2vMy_%GzpFR~vim}DpaBobEiG;@pU5{v#*wAx>DOSR%f=Gp$&n76+J%d*( zzrYZgc4#|ePJiFU<@nMHoq|oiZ7X&Ktcyi=WFKFh8d7wYo${fdxlVG3uuB-|+>q5j z5KU0J0!-H6F!Q`jO8V$d1I4jQtUa;k92nkV46P`_oc^oA3>hJ-s&LGa?BBVMbI&*L zrBlW{*6t0etLk0P=5-A@T1OQ|ysAF>6(6`>IxGJ-?(d!KyLwnME7_HU4=5wh}KXm?)6o90xu#0R+8JVzGywx)a6H3dbX^RqwywA^*-_SElj5T!6Em zI*Q|r`xsaKRzLc%GX&$r)-MkYR%Tdo*|&(iWzOs2OZ_lVO`F=OSj<+>9U8?maA)!H zu=K}o*^!&(o(jv@W`F1QtWgf{Bo{`c0jaDkXb|2Wy8BUFoGKtqL^@C;P>B(L4}n9F zo4PdR8ruKse<0!5_qrCMVB=`LzxtGC2sMY+?UKWIJJSlQs*u;nQPTTPr!9WZ`#Mwh z7}dX#aC=f^X_qt>>lXSZrFIMyJYXKfO~vOoLyrezb^HLUkBfe!1;2H5L|CZ zef^O;hrmQJ%0|yo%S=g(sm5iWq0CJ&5_eXU1|Q3KJk}NupIMA*`&NFr#`~V(^18gJ zs>C?i{V+|iBuT#uSgI`BObLDt8|6I`_{6v9Je&S*or#JxR3wss^P@;i_zNoAf6b@= zAQ6;Ls0m4&r>Sp7D7s22H3H--uJphjl6yIFmt${vmdW|w)NsrHBJQ+T(E5;Bc2D7o z*SGDjje|_z-LenbW9>@!phpM>w$k$ZosZexvg)wbp-F&D6db{;0*Be)#<&Qi=1}Ly zEx&l_l98(=8yl}Eu#?Nb5K1*_wFrkRW=ZB&{ca!q+y|#J}Fr0CB?1 zs>~TTZwE_z-{jkh(N5JjAJ$OxHdFiWWX*I^)Ye!QU5Maoi!jwKOw)fJYPPzvvST_p zyfu4n;{J?hOqkQz=TUX@>7nEI4X*ph*xxu!ZQ335@!R+BuYOOgp*A!$ByN|ZA(2FB zPfHw>2QGa@R*n;GJ|~YL@5#11e1kiDh!U1KGvmy{tHacI96@pN$%6+Ks%vW0(P8pM z13!C`Eu8jJHE4M0wL2yINr@CS?nL0%3Qj*tQTP|tn)%yoJT-D1jRoI;t|d}iyilnS z+FCa7iiG@ z(~HZHE69?8DnwYz=$mXd{J7p0{CEO3H@!XC@)e@n_uE5B54U2_@!!9HIlj33g*MA~ zz4{)Gl@l)F`%nTG)yj2;fI7x^YHln*w7G7z6puMMbugS(GyqE`Y+lRF9Q<8>Gf5li z1$wJF6hM4?)HwW_n($FU$xs>bfHq$;j_~Mte`4d}$XiIHtSBrX%gLUfzfK-}h66Zy z)PPX@$+Y; z@y=o?&e~tJ&;b6tvEO$a_(Dkd>Luqbu3mjNqC!I|M72dbKi{_9%$QR#%<9YmWTu!y zBdCC7v9hqpl6;9{^stEdSvGd|GXSU~%8t#q{O$P|#LUE$O+7-2ZbH!%5jckefY0jB zpNTb5Oj5IRch`o*E9Ln7mM4fUQ=ORcIaR@Gbgd^*CDZ^Z+^eIr({5R9D{0iyJKyez zOO-;(u4=%3AYf^;V&+`c=+sLUB6xcdX;U4#qiE+k=OP%lVVM-JxK<+02Ck&1*9~u z($n8y-AE+94cOdMOn2hZbl0y=)_)^OGtBY{a@{ZvutXpI zJMmK-d6``8%}r3pM1@h2(qWem{I8Ep{qOT?h|hC?mLB3PY-BixvXatE=$j{7e%E92 z4K_0|Dc}4W$4y=I=mncu)#U%X$1~M}dO|`%|2>8G6rQpM1_4iL)=UFrO>k9UQEZM+ zZ;-b6QP5OzAwqB;oo?yt^AT#b6Z5IhpO^i8i(!EVnJpFf@G)7;IBv=Spe?{JYL4#* z?lLkq_8M!(f?2dJn8U)6^6c5Wky>Su!0EokK5=zyxPZ9pRWM7A2ngi;TimqurzNiL zs;aD10|P8Ze8)3)x#N%F%LsIh2wewH53=FtYN$)N}&_!o3D~TK#6E5AZ zg%JRdWe`xn+JA!*db&?8emLtGjA``cYuCE{uKvQUbN)=Do#QT@fn-*}>5M5@12!2J zrj%=oR{vv*zZ56K6!S<`F<>cM&fyb`VCyr7AG1HE&DxD(**!TnN+O~)YirL}7o4kc zxVBa3sN(-9a2}>`RKY?(f{=-cY1Ci?p3rPyRqC`p%cy1Z01zB(@yS<1I8?_OjR1SJ z>3yl@JS`zr&gv(-g?|aw)D0+p^x@%GOo`cAdkvt3)4SCZktiu}IB~@%u;$Ep!7r_a7xW@K3J> zpP!}Kz9}&M?PwbhrnAFUTDc74XunEGF#3^!F;S!&Sgfof$;Tk@aXhAVP=;JBK8!Mu z><{&rHof`=j^vNEDDkB)YDtAFI=|CTeE{YUBv=)k8ndBIrZxK=PdTr0e`-zE$%_|5 zl^QPta>IY))+GivuA{x`vXzeR%Be>5q}XPd4TA#Vf*T7pT>SBne!A`qxII}wg78*c z5MWApXh*0k+uGs?xqo5kLdG5(5~BEIix@y8+hrphGZG66XjLtcJBYZp*UH{L-;WBH zGcsaTs7U*eV$LqUq?_RZo zJHCQ(0cZLwCT5?)B^--c$$}qtXvL}Q?@4FEc{F=Jr$K5#+L4GjFV*-th95Et8W0z( z>MG{L!4*<2U%Eu0oT8Ly9~W#tVC841kj)GNFnGX=uDjqm#yi5@m2A#fZC! z&dthkS49d^u%_?dum7<0BZ+1#98!O^-50_QTkc5dsp87zQ3N0@^J zJZ%5>DM6I5u;tR??L?kZe)-p8|>9(=L!{(W$ z%ZiJ;mu2(-_KB78x)QHuq0@rrog6`!mSsU0^nClcreiQUDFXv$@@({k8#n-!ytL_h z*j>gZ(}*#<-PK?q@h=wTzkmN;{scO3hWe_)K<}<8Anx2H^^wx(^;sE!tKXmuU}|P| zfr7gUDWc&ilIYC^U9FnxY8bxRjv+m2ziSmvqwX#%M)rMlhVx4hS0mXd-6E4BKqj(4 zw+K|!BW5l{euA|1mq#?(pmTkdWaSqWwAV3D<75XGyDi7#4Q4u;+Slt}co!jl04b)c zPRkm6lNIqzd~gH6)wA=wK~E786SD>ldZ3z=c00J0^YE8gUbo`$6nst172%zM7S7Hy zcS4*Bf4oXbsW0(bWN^vbkM|K}z?Rhvkf|stB_<@WDO@_vtbvw4OmMNnauZIjdBFm| z2Rsr{t=9z^Z*Gh5^DD!M)LgN*uo!ZAq0Vv#(z7oBV}QV;Rewo?TB! zLs5UJaNVH#l`BtRRd?eCwY0o|Re&e8 zdt1wVH5W9QX5YJL2C<%+vN~q^$}3sx#TxyBz08;GEiUIyK4deq(a3aSzpL+ZB;-ph zznf&S;p%upm!Ng56xXZQ>hjH>4xLl_l)L!tiHpW$y`e&>lvS;*_@m+9m4iHA=~PqZ zOf{^{2Sk~SczFqX0hfMN1Aeh;+!b6JWhg_U(2wdf#2@`})_?TVXhYNc5RwB+m%_dT zGbPzL@uWEAm<9(Ea#OQ@M#*cQM|X>awxw`dTj*FPMyWKd9hB@=in6NPS6?IH^~6Qa zV7fJcsnNvdY?!dHq*UYcRS|C``Cod)?Dlb;PxDm;dcW_wMtDO<71rja9 z&#@|4MdCU^66yki=|X9eBIJq~)g)qTHCTQ-9Qm4LzkT(RfA{3Nd2{iGK1E)&3|@6R zW3R3R6KX8Q@JZzZ3oV1DoM!IF&Na4@yU&ND$tMI;9T*`{BL7OZ1kI%ZH;Y@qzPWeQA~*26`8UnclmmKSG-T0Rilk`+WX&cSFF22 zW-4N?d!^0nzo0wlyAvmA)Zfj6)U1SKgcj=O=smIW^wfh-grWli6%E9;*t)kju@HmwmRZU?9kML zCuN}EBE-|ol`Ypjj8SU*hDs_2aA`03{Tb|`JSQ5K_wzpFbsZcjz3i#RDp<_Rvxa&L zt+0De_$1NV=EM$5URh%Bith=zJXZUNL!VB+$|lZG8yZu6{vK4b~*m zsOqBwdCBMo82%h3eD7nk+Xpt^kBDt9atMh%yUM9g&YjFUFzy3g^iq!D>EnwrUI9j59zNe#jWIFEee z!Gv_!?B7{ldr;f|r0m)y?!o0K8slu>VQUW^t;=(h(^X5~I!^&vfex4trC6|x6SGh&Qb;{C~t6@sHO zT~fS7y)WVNQxelHb!P@mC$7w=yh{0O`*tQJec~e3+-_t%gu-IF%-%VJkyaG8Bnsn+%b8EK%k%78yF7bkaaO6cT01 zu#qvdl7x_P%UGFhL*~fvyC0p;_y7H0*XQ@^>blgn_q*Ts8P>Dbz3z1{mb+?Zfe>w~ zt8$|lM-Yhs;pxHIrlg_R8bwD*k%=GLt|Ev7U%hnsB1-+vKYgUQNU@ZV#e=BRZjAiF za#^XQjtzcqp2+ZBNEW=>)$`F`mrA>NO-|W+x}ozwApoWR!#;NK0-_@$KWw3(O<@?M z>sTJwDJ;P?e_VEU)}a%oNbrJ;_3J7t4YfzcDnr}4 zAVVP4%2c=@+Nq0&PQ~kPVzs7rCvhn)empSkJhDvNlptoBz_R2bH6*&Vf4o_^R<*JiXXLB}ennbWSfV}ED4ztm6`6MzXN`ku-v*(y19 z54mUO;V(Hr?;}{o{kdJIhr>Q;X$A`5XsW1R=6V>Br}#(ES%)P{skAJSQpTEPf?ZeN zqzWeM(Q7tysl316php5`4Ft@xsu1O9Kp8lKWrkfRlHfIHIf&e@okRWy2!1|J>07Yc z_1oD(v5hYW<@W0PW&ZH$9nBCbyc*EE!uyLJ_R_!CLA+dzY!^82yJ&&Wp4Gsnff{0B zXOjN`qCz_eQc&8GDY-fLwe`l#oLJS324}mSJH&$TFR_dx{;eRw%57#Hot@@L@e_}N zdi&UR;tT+S=q&MgP&7EPw>~ql`<#A^%Cui`v8BGgYtKVbmgBy1Uvuo}bEok6=!mE& z3w&NcD7bOSMhwyH^mVK;z76-j=xt5B`l&TjM^7)i&*4mt?QGld1?lYPlL^RQNxH0ekP-_G&plP`4ThoHZJtJKoW$|5%Xh~*^qef)%!h2m4zc`lP zrj{w{r&hOl%fwf>&yMu=_t!Q%wK8xM7DqR>LOw&$b?Ba94H7E@8C~42Ul;Lw#z;cy zfq|-qSOg&8EzG@SW>=03BAJQB(u-KvdHl8UNYGA4d;~vt6uhHeh^!1bL0a* z_cr1vOLN{!#m%cOBsbsXm{nU}|Hep)1%rch#0wy#L9vVIx;uO!S&(L>uLxh%t*i*l z?7AY@-nxFcw}?@Zz15zmt*Oxp$*K&LaCSo;5;*I|#eN9}ETpn;jt{mb07Sz1d57Ei z^3j|GM`&8p?DTUz&wt#K~7I7_rpMds!uJmx+Lw;yS`fc zCJSoQmDoG;P|bLB?A^}-FJfaAP#>3kKBJ=fav7&|YuAVw zK!&5c&x2Fy;DXkJ6D=+YMs~~RsQM8P0 z4%#k*I`0JuaP#1AIOCq6@5F-fl4~kyfp`I7d0Fj(V%~tXczL_7yc~%7AZVHzev(JJ z5pRXqXrMPEKE4jpFs80hE@1+x#=VT9Q?RO2%k?Nkm)38vwG7qN!gOtN)Is11CBY*C zhrFNn@)GNiwg7~oi9;C(FjR5&_Pj3Q)>Sdq)((Jnaa?Hp%a_LpPssr)DKPE^h~Oom zDTal4A((}T#G~vMx$DPI%XJJ5_oBNnZ3_<%bEvIIOj6R^&Ovrq?r&RY-b40ATyv-E zXc$i|#BE-p9K9DLi+H!;$01q^ex(w66Kt#oWCT`m9YlBTsNEqqY%48Vx+j%oW>V15 zD8;yFRSvj&HH4=@vr{vVjfokBuuX4^%b*{VRZBV#=YYYbf2F_TM(2SkP~u|XEm%zT zf`AbXz@QlfEx>Gbw^ko{h2kEat+`kU^@sHw;p|yNgomFXh?$KI6G0=Y>jgh`U?ri(TKgSG{dQ?CkE-(xDU%4(})Vq<3D{pW5|W-~wT$oRGnYTDT)A3^);UJ&G7XYCLgxg1h$W&L%ljkAghU~M4=!{ z$maSzqT*7oPi&?5A882->qVj4_7aP+7s@JIwr<5jVcuS`Q55(MK#_9$caf-`gLdh5 zGwXw1js0mEFD-18Q(ej+^ddc0qZWIPoW_Z3fP#o~q&G5vr}x*tE|63c-oKbMm=)Jt z8s`m{ki=hO>G6^eG+T7uo5c4vX#ET^sM1=>ktzPoFJgywlM^7^)-M+ zFw5kOMUsN1dXP)Q!XlQ0y7vk#!ufB7mJ9d5bF$Hd7-hvNWMMAnLli&anV@IAn8ta$toZR%F`F7@kPytKVwYMyj23N*0U>4MmE?nlTI zDtEzdlU^XzqvO3O^|UK+Mn zKv+$N+eLfsh=az&hFn^DN1rbmjpXgVA8<9N+lD!DdRD)!(u_vm-ZR6N-Xr&x@oWc< zuEYgo4J{{L8@6EPjmadCeM|x)aoP~S5hfu_+VN-{US4(KUS5)>|}|9Nr{zZUpn8P2V#or?`Iw_FkhxusZiY| z`sYfmkP17Ko`OR6(4b@st2hF7SeO~-wXu0P(7OW#`S~j+N4gNEL?Bgya!)|i(P*KH z4AX$fYZ}Be`nr9C20Qz7`pcT)3Dz_xGS1`mbU*H8>dSlDjOF)s))A(eL|MI2Pw~&D85$);S4ZA2=sFrMvCFDxWu=zPEdAmVd*Sg*k5rtCMxh&8j$b zD#z~a(2n`TS*&MybVVC8u3$E~e^^gDQ~J`A*?l$%UdHQY=E_;?5xb zsuA^!imV}^)N^=tSMOx>vHb5xn6XBiM%za?7O+(rOI-WVYsaZ% za;U09LGbg#(Y02}dpnxY0oFs&6Z^DI4qy|qj_OD*tk@{bw|+T4*D4kyw9ueI1;H0^ z>3-pLoO%~}V=lH{x0Sf?QN_VII;L8|a3lk;c&cNXfOWZ*ZnO6F$1R4>1iD6^LmZ*3Yml+_D(r_@q4za=5W@vsM*#K0kan_3=Sv z$hAZ^Wq9H^fvr?Kd}QNCl3{90W9;#Hd{ObGLx$es`N>=Vp@crE3FdKav!1YfJrE0=zxG#2L#Y z-xlXwzGO*paplcLOV1(Q?a&Ptc}zsaNze?S&?~O_&x4C@^+A?h#W~O4x8A)hDnM(< zbciLCQ~`^k3;SVyXsV}9eTa!$hU@KF+Nil8e+kk+7|74)84g5vH*G~)3XbH+bDHbu zY68!8PnhFK0k)@cMMG8fCHA{nZCyw}z-#MuB{(U7E9r z0_*O&-J<*VpSQa$=YXX`2c=}xcay-{yC;yaqZtB(`P0JXS2l z<045y$t^@&(KP~jH#u;dkc_5}miTMHYlUwwn6k*4>R0|49pcT+%wBt{qAmq|1{cN1 zwe!!jP5U$dQVNX<{|o?M1JKRCgczViN0n&=C&<6RdAe9@2s2}VDXe8e+H zlhUz;-6#0aNpIJad##G(6g+|_@*yyz{g1D2+0=Ayy$ywOMJ&=VNDc-Go=8&o+ZM#+ zd9p>I#Q{Y%l#!&Gmm$5ZrdA#3X>zy!wS6%e8f$W)_ejgyLl_NM6U&lu_wKT-GH!aH zjv@7mdB4~`@rxnDS)A!mE2;<(gKSqiq97Xi{A+{NR(d~Z&|v+8MEd* z_qo5U{=vaPf(B#-VO}3_?D!J?uC5mQtQ%e+oeI~GRGEdW2?D+Y^Mt)31Gi1?PiUrK ze7rHfaX)sfz1s~M$uo&NY-^8mvlqyfsDM19fPz|j=dmsjg~=M8bl5zMk9%Bvx2%Zb za{U6Y0E~?RP3KxB z2SD5Sq@-N*3FH7og7(m3V#&H%-T?J(A3KnlpxA%|aNtoDqs_x)GGjwS zjha~q(w^;}U*5znbIKuy-15Uy;#FkiDPgAG0eimnsxB^BFeyYLB1rJPj{Jv_b~w(p z;KC^W5f8TsisG3}wEn|cLY?1j+YS*^vc!0kCtxY-+(}bdxzc^?G}UcuRNytk!4j30 zwzBinS^?{%@gwE=rBwY2fGfzN#vK>{=(X|L%{R|C{hm*t;}lNc(hgO4xCFaGhZ@!_ zENAe+tH-cFiDAhY0lxd zUvMFyLCSauwoD?8>~1J6g1JPzZLsx#<{$;?&KIH7PvFULt-6DQ#wvaZE^qWpfMO|$uo>QCC{8AlnK!dmW%&te zj-nU_Eifu17qLehL&s?OI~V}VXvj83!%oB8)6Z#Xy+VYhYkoZy+&Z&(1>vjZJIF2-zs$J=i3#l9E(WHokZh|GNQ3?C+FI-J#pKjfM=nORCe8 zVERJ+i(XF z)6_H))9COu|0Y}WRdTXhTi5keM{QhuEU{?X!#+o{qdY{$CRn0--lASq98na9vI-6c zv+@jb8M=i#Zi}CIZr~?^az_q%jt|K2_d??Xc!MVP20$^ZczZkf#bJaAv-ZAz_O-Kk zc${)OEzQkA@|p@XbUK733IalShD;HzE1UF{SxE6XiRS|mNjFi^7Rk2VO3%n9#d3bY zVQuM_X9&eFIAe9L2rO|}S4~;!=YVztf0>u|J3~fuRe~(!{WI0R@2}5q4`J9!WaL?6 z=Ac6nOb8ndCkQVMG8ULFwX0WO!_)iYsKyt}As&6NnYExPU?_){kQ7N>O*GE#u+6|i z{ux*SamLuJEZu*}mf(jx<1n-n+TV_Yi&E?b_bt&9D-=V(L{J6V4h)M>wI~cYVU2>f zgH@dR&;uDtEKA^j%_O(~^<}X{ zzX@z8Krpq~|8Z6f1d-q|p2cwCB--FQ{sr?1{0`manMr-VuYJ!ik2HhqyRanu#bAyn zSAZ%b4X1NUnu>VB@h!FGBFqi6+1(#v2z}0x?~08N4V8s6PNoWu8r&mZGi&+F0GbH# z(ZC=cZL*m9U9gw1wlHTps&7)x;+zCJdorw&^GIFW5a%M4i%=ynwT*k%b&}ZQW8zqUMj~e^@4AJbSGMn;XeXWQo0yCW?yz-aBwZi zqJYkUfs)OQxciraoFupRrL!-Z6eXHd!pjpior-e;0sUbFH|7|KpaVN0W4*5B>O&%pQF+x<_LKT`Fn>FIlaa`Q@+Kc2TQ$hT19g5XMG?g)UhBC`#f1yB%)91*r5 ze6YB3<;q*TMK>vLpIIO7d)s4gj>t+uCpjU(=Ir@KB-$JRFvR}a^X2z(Noco}I(;Z> zp>)!r`N}~3Yhxz68+5#WXK3G!?U9IX;`42UpTCmlfZ?7EYVOEA@DMf?D7=LiUZ0dH z62_T?qsf%~Xr#W&0DA-qb!R}{t71J5*ucKT0YyR3hKbh`B1oeK*8~WR`GV5&?DQY7^5Nw0P1HYi$`j_&0q!A&wB^ST%mB2kHMXtMy3fvyXoGTto?dlZH2n|9Gx@=E#Ce$$o(gwpgXK{623!!ZF-UXAgf)A!tx)%^ zv2+`dFPO%&z1dkyD3;einp2S6i^fk7yw?UGqOdAl)vu`S(fLg)mK?yhA*2_&&Oqri z%MIdJTIclytY@CJp3De1ri;sjuY%VpTh-muqdjc5_N^WmnArw{Th96Eu^0HDPtd;G ztu^y(hHDoL0`1RYGhJTNceyeVwi^vDu5;EcxK6L1PYJi^h2K5d(vwiixVO~ELRZZnO`?Orcu&lkQsP?bH99Ii2Az#n#k?t7#*qB3gkY?y-Hg$s?k z5luk`83m$#1B0sNpWWpck28~e3)zpCr<}>K^=jvjQ`NZsI7wil+F5dvQhfTz zZl+V?S2L?3HrWkTp+)rV+v2g@=vCS-3X6M_oDI{z6ma6tI?$tGu8&gf@ zTvAL1&u@-T;m|W)R{JzkEdN6CGcmHZYslJ`b5@G7JG)L)v087RgBtx^TTZXbK&jW6 zRXP(99sUAN6S{u-u5#8kLxDBf{@-0)y;iM^c58JNxgWuH7mpLx-`}8Xko$^}tH2SE z8PgO0MC{9W9>;So-_0w{Mmy$SMBC-j2ji6mh1?rs3`c6={V@jQ)8Y{XY||#2UYxyP zAL6LE1#AbTFV)Q5%Tqfnn(kNGQ(WaQk*z%Wz~%}2o#2RgIZ(8*1D|kxMEXM=Aw^wi z%pq%=*TWOs8ne%xFo$^-KP6hvS~|)9Q#)r4~kGlq?U`UmzGGWXp-Y2`wE-aZn1)T``J z)2yAVPWX8LB$ZZ}&Z9ome>!6Q@+5KY<7_t9LcDC|e5l3ui$s5ngc*`6`GSK*ZZ*F@oJq8F**2*9{#P>O>;=@ za;^XFc?UJ-YZM11-*cbC0Ncr^A`t8qodks3W6LojVGRT~FNPQcyOx|D4lC!A`ldY%f~|rhPOSxgKx5DD+3-yXkxB)bTp2JB`N1yjsie{PH`>J|uUgkOjte!M@*K(J1-BdH=OQY!mu3ki0X% zr*F<0T`qpm?*Xsn;-=Uvaa=I5fxNTcNZdGd6JpaLxIT4)vn#g;W6p{a5((`XI}J*HEP<}&k&*p(R~>6PtQIHrUl3VQ-yoow$n2I z8=t~(vP9D!+Or7oNG!`U`SG;<^v|J_u8J1_PMH{)GDQ}u@|mPf%-HyNFZ4(1^qra` zzJ2>4|LSJY7wC#dy7o>iJ@!Lo?>qQorCdL(G6%x)NIWAc@pIxdda$0`0@a8xME@YTC=@fY2kem7B6-23JU3K8ity&8 zp=e`j$lE>6#+9W@2u+x?Q4GL2kXbZPO+{2QT-!KXKjTv!W6onFl??<42HvIF;{QR= zPy*sr*LGy+u5$MSn;R$*>9VNP>Ko&6?%uvt(q0aGa|+TB2lTNh@JI=|t?QHzZ^!vE zGHE|KY~tD>Xn4K3D8Uad3880M>cc|F_9Fj9vD5)6AYt-Ndiq45_Y9;DLcuZ-gh%dq zo-Dg0ZWnwW{ytK;ZDJK!^FbzN)O3*HQD5zKJ=tKjNP`U=nU zui!DGn@(c9UdDym^yi%+yNQiMnhJbkN_`4x=<;897-HT*|BXtKe8doq3`v6Bd+w(< z@UnQsIy2QWGmoFUj%y>|(A_-fmi~}iI%cG+f&i2V5~?5VJdN1YAUziu>zv6ln>y0X z2pN)BU>p%q6Nj!~Cx9ZBXARrr<3rHuHxmA(;NKAXo?t>F< z6`i2=MgOG)=_g)p5DG1Ua8nTR9we4e|jFO z5@9qB{kZ?Y&xrr~3l9gE*@-K!K@h^5g7o&qEqh_kUfDT`}YS{rJvU303`G_HhB3er!RVcT2l`;MSQKj zM-PuHakYITtzZBRXRL$LZ(oH7IYf2EpwR*f=P`o<9-Z{lZX;Xa8C>`@$KBEI)<_TG z`D5|=du56?zzkzG2q!zyVE*7gW_mp=Nnl)#ZaP(7;y%P1B=~OZr<8kaKyETU{7kF0 ziNA#K^#`Db|8`Mo$dCGcUM<)1*zc&(MW+Xq`6Q*mh`pBDJ^Iwsea4DL|8^zjry`F* zog|{VIxED12nToIN51EyG?Sp=Ev>>duktgm1~X1`crUh!U%qTePQ|rCI;Q*6-&FpD zp?>+sBr9zTUP*u|-iMz@gq+5xQ0fT$-)rlirTH4>onUc zUn=BBy?rXHcBW!(bpem%*Sw$fO!prfF=sS-m90W*zrOd!fY;Oe$o<37dOPfPawSEU zZrA1iYTDKCbAH9F#sSw$9Kiwj=bX~xTz!G;v0L(c@#qqqG*_VF^>oE>%t1fEg9kuHZY&5?yCWKr{ zdvDxT$^e)35Z8?ge2q`w{E`X$b|tzyZK-e8FUFSHvB%5pL;R_12?ly=xXxQ$oN|oq z9$#Iort(^Vg}fQgkDj?pgXLj6b5^^1|$rI|;kr0XzR`o`t&yfxzbKv0dFPe@|PkUA~ywW(&Ikfi= zr*bt`7CkI#tGl{wO?_n%39iQ1MsQI=!++{LEN0rC`EpM6?$8SPa(02#eT=@|B;T@z ztu~Dp;+;?GBY&H(86WeByHApJ<>R-Z;;paLv|s7xMsjbCPtrf6zGp-7LqS17rw-ys z=Np8Qd!*jUI>W(W#=abL&I;>$)ljQmhJ&QUG}-G{mi>>q369!K3yYl{$PZwDl$qg! z9t^?fv8bBgh6EU@5ooF+0fc5-cGt0dcsL0?FnDP|Ys907^Obf-brr>9M>Ps3A3Wsb z=GI92BeFxDGb&yctC|w}`7C~@T=a5CX_`{x)|!vXZa9qtJgi3NB|97M_ey<)@Jx)$iX0A4R5D_L1Odr7i0}H>)*&@%H7e zDNQ>3mo_a4I*f~lUY>t-;c|x*J@FudVp36(0cR^{9eIAKTjXKZs=Ny80G&&Hn}`Dk zUM>84{?)VpgmwIW=0dOkc>zH!wHP&9pbtJHlV5+x7l@#*&#^5+>6w`^w{Nr2GS1q1 zp09rf6y$&ZRsyBzTT!cA{}hZ=O8xcuk3BuMS?Dw#h2nAH6nUb%{C`)XXjmucFqG?n zetr3U747*qhu+{30@K}3DT;T$JTV`Icjs@*cQCBu>3rJg0=bs#-IA_KsC*-ZY@4y3 zeTkJ4NpkcZCZjBWF886ouC{h1Rzi3aA5Ke4C2~9e{#NS0uY$JJzJ zdH3*~E@d!wU)tn}^x?l3Ts40|y(16&OR*ZkCkaPJ4Ea4>!g4f{m|r^Ihs{#RRI4xl zcVzG5jw$VBmorkMV^ysm6I&jtMc(R>y;&$-qvZNwZdCm1ir{sM%T4lTIp>*5TR5Hl~gU+Qt=B$-2S*-pdLhqEjnp^Cqp1BTk#kIVu^ z*o}3&v;{kai$oPkUD}ZlWgv(6dsEg(w~I{9@JceuKEApKtO0Eoe0-ycFM{ezBX_Z5 zs;YGvW(x!cvBQVsNWdm(e_6MS%-Zm>`N^?9VAAA#_r!(92=py#8vTXZUI#}@y z3UNA6t;vhb=j~uEGQ_@oh!;FS(MGf{F_tU!dJ)T1J_EED6zW=qK;VM%@ibYevUE~C zSyxxbbj{1*>j1w59a6LV^$l>5{|psU%LvG_dVlquWd=$)uQPR4`cmoLAykPw9%P7*0$F9HN(7YW|m>TKfSrqRw-&EDShd}o3YP{ zJHxku+{o7?LN-KRu(Tz;S#`kHqVV-Yj59@ke%#)?1h)YRu)NOket+91LAfQ8_zZ=Q zS2&BziA$X66Ao=>17n4~m&Ff-7mlW=2ABjm_d8#mExEP4EKgm;F05YZp>%x4?GVe! zrd8DpjhVr^#u1LaJ<(t01j=$}i!!$w_#Ijl!*8K>EB&<4Y|#2EgN?RicjT}7z565V z&+R=ir?hCKg3oG~#Mu6Oxlc^CXxA1F__X^7uB+ErQZ1)j6gyy6#x`qJ%@b6z%eQ1# z%G1EAAKz)g&)m-Zx^c%ouG3m<@}ZUByc4HMW{B_4&35XSOhak{zRV2;ij;T7Xnd}I zC2~pDGd?j=S5~z!RJ88J@?;vv&2^0{M4$U{MIJ6YU~bo%)U#T_WSx%uNe<-)rJ@Ju zXB78@RKFiSlsaWoS>`Yy@HM{GfFM6cPv*Dw!V9rsQ%^oVN%aX#v|iyn9-TF8Wj@yG ztjJquSr&)n&zR>2ZyUjCZ{Zm^goH5(dBzGnAtk%kYdarx9g$JF*mIH=>A6u^AZawa zMP)8XQY9m`2musjeBu0IVr@CeD=j_VrBfzMqaQ9`zBOS|Z0ua#@edouZy@hPSX37S zJJTHHt<22My3W*{PRZD6kh)aqmGqTkm40qB7ke!N4KiNc52*6qJr~qTFUX9TU8Ko9 zNvuTuKg4kEsLT6t-%WJL(CtW>n)!FVk>rtugnT3wH7 z`7-6s>Zq4twU09W#12UE{EA;2@U*4rC#8@qsNwR|yu&aa%io>*{+HX~p?}mrZjG5T z$%zd#GcQhVln3qCSxh8{;Jn7cWAcQ``IjOwMxs#_m$^EQu#$W;S+N`=#j z^qSU7b~{`|udVL!&ur>?zF$pJtUy!)?`~f`e=N&M2Gvx!<$4AdT|go# z(mReKlTAuA3&Y*yTMg#N;I5W!y`({76XlTg9ZkQ1Q?#n4%!GCLz0t<`yE?IBYx={P zc%KKfVYS;?8uS!;K>8sb^XDM>XT9-nOGOw!$|%~%>`!aNq3zK2K%zI`((^A@ z=8mtH4o5F&eNe-_WoF+XojNu%=-%oag1k7+F{li@Bc-@{tN_NyPa>5SIVI7i0%ZQL6(=fZeqUbX!EAW_m|Z#}i2 z2hDw(ommW&SWSIAedHw&Fme!s71ugDo<4>S;!J2fsqEV{k4h4?C~(i3A1D*pB60pG zee<%syquXWjY^rEX2>~|d254lxfN|7XsSCNeFlw)iaat%Q@~+@$K_e3bm+*5IjYyfAc~j~bT;#NS&|$o3 zGy|^3SiDn?0!rWVgblJ^b##~nAHJ>%4b*gcal6tDNlKz%U3{Uz%rV$WO&r?m_ubh! zvGdcyZi-{+og<^$r6G9?0zs8T?$An7Cjw_J>-#VFZz~KxgFyl`gXl!(puu!*Yy@;Rno;38kTgNc z=n^s*K=Vf=|W24=IL6> z@=ZH&NKyKV;QZ%nz&mHN?0@G?)<^ykYy}U7(UgEnK0=HAt{nN+Z<Yq|&7_N%!1!i_@DTSu}I+pzn>?of?{IvXOW4}KY zu|v>f%EzVLcPbdZgo%x#_sE{`QP-p@|O$MF~(HnR(y7Rmmp#(ER|U6S)Lg-@Kt9Cwh^ zPF_n%M06m#z&M=CV@&U%$Zf%g3UpJAsrC9j>4(m`?enWG{5ipEHN9m)zLJ*v%CuSX zw9NVC;9X?Ab@yW$uJ&=`(pa}*$=NTTjKy~q^K3M3Wls10O^rVABXT9@1xmgnBX0>} z&E);d5ayBlivyic(m-4L_5NiZH!9nuA|t(6ytH+tU7~M(#FgFcOAXYnva7U#QibQ~ zBJ+W?Lw|Z)NY2bO-GF= zC51t!_dNl-MN@vPLkOLteA;3liG2V2QFTlRtSXzeRSFkIcg%WujxyXLURrYT(U~jL z-{=CJyrli`^ zW*_CG;3GM?hBtLk{|G{Oy8g`=tAwGyexV1|@6e31?$6a6qkWI5WxRLBYJTu+?C)GX zRJ-5RW>luXtT$KG;!VYGh&kxf5`Cf~x!P`+dq*Qku(~D*rraabYr!8vSYW=e=Sw;pJb0 zER~jqK4pYN=aY?>YWrm?C4W3_ZwF)vi1?cE7Rn@iA7*1gNKJG=Ugc!HOtI*JK&>ND zyYI+Et4zAV4OG815&GBjU3eUk;c2m~bK)-|YVMoTXSV1|GAawJOP=zxW}R)kTT%wo zIj%_5KV2)!uay_Mm+W^YB51xVhI}}~gSE3?t?2AoZ4|x*tS75pz*Eu_ls^=j53>zUctiv*c4R_qRdsm! z?Ku_W(!D($^%HO~-3s`UgWGA$l1G!1t13;xvTRq;VuS{3ZhqBGmHBC!!DW)=$W6JH z3Ioe}+7nChus{H}{w78lK_!2{8G&G>(vI(^IrD4bTSpf=o$0YueSCLCpyDd?{bG!B zj@prqmv?s!IhwtYbZVMuDnA@aO)rSGy`)lW!Z82AO|MW-HuhdgVP5EGt4!TUTR?fU z;jrCOFOPr4%FNu{48+6^A7x8CBz!vH9S2iT@9NA$nemJayFi1d{#4>OO3nVH7^Nfl zvpR$d{`iw_3GM7gYRIQM9F~!>FyES9+GblT%F4bFI3x6piO6Qi04X&5e8-2$ z{tJ`67Og*ZDyXQ(CpbyyHK9FwF!QvGm0+&aFUL3kb52uJfvy@|W|#irm$A&|X&Z z0Lp>!ExU`WdX*w}R*m)zf52(AfO3UF-UNJoCk?DsAj0z~7@sf#dP(s8lID#e?&0LF z^~<%3z@DB5LHLfaoH8zj!%#`he;kZGtQ1-mn1M-OU>eES6g9{lN?;1Y{zBJKb~_wa zug?vaGtTTv{#L7pH&`~~KIp~a)JU*X(s11I9b-i$mVd(GMaJ)1Tx)Y~W@ZESx5ov{ z&HC-=4GEGLEkm_jRB;}wTA!P$n8IE_KtW4R%qJAVda1PNb6)x+I8Q4URkV;sFuv_c zsfpbVitGz=3#8;Vt_^8190>6IbD>FjX4lTU(OB^WL0iusQn8y9;1b9ps#<(Em=Jt= zaiFW$o00LhfXp2g77_knRNg@ z#8y~S%R!&V{dzquYI_~2`M&Kc>jKs-B`957UWtC}1-$FuSR0=$OX9{R9-efJKSlOD z$u=VY@zxpMz*cgsLH~^EU9^)1aWEC}pj5IUWWQ(@?CXNNZ}K{}_p^8^NtJQ5(S zxJp|L%Ss-6Rs7qj=-7Y3EOLB@E=Kom?G5PG(uD=I}ExnO2Z;5VgJa>YHNS- zT*(7H(D|6gXAW>F^f!1rBIALoka_R|cA&C@)PlCb|NcF$o~dVT=~&H|uq|cxlk1#- z;3^>5@Fup--rkt`B{JODpp#9|=e{LRnio*|g0WQLGh=w++eYW)G!Mv8yxv0*%A#cU z#E$b@z3<=8?ldM0P1~#d3%AJ-V3k>madk6XKyl=9*Y;SOWYc;Ceyf0=JU@teV5nmt z2DB(%`5>&C+)Ecjnwqmkc<)|K1%*=UqJ~GYctv8fOgI9plHc{1ZX4EK7mwPBdfK$Z0{Q!7?u`H^t<3UTknd=jb{RDUF|S_LcZgCF z9W27y!<&XNQ+-Rw!9@gQ|51bpT5YaqN*naRsK}MlW@yxou6wM zY~N61{#S;PzSmYti$gb|V1S5cx#oeWEG@T)qI&?kX_n%G{OJm!$ci8a;X9kaEwq#( z^=<6bTNHuBWM|*-uEJrc8d*ffR9W9wO*jvTX^nLLzX z)E3ZjUh>ia-dU$N&ff@dTi?X7unq{pYU{4bPXmGpcwK+|NWng2n#T|RNwI7JdD`LA zlGQL~u!FBge&K#62Wu9w2dya!3P z^xMZ7flZq>C2kO3;=uqERyXK32HbaB2th>sZFelaigAYO$?g9}0~w61&BZ-3rAvap2>$Dg<&EcXErF zn%*EDG5kt9lK59r^z`>^XiR*2oB;K(eGwk9#-z%Cu~exUcG5#69t-%)Mw~f*tH;(MYn_hR)-Cc~gM;g;ef?E83l$#Na)0+&!K3Sb zhgQyHT~V3Sbz+$3=m{?J`=|QiFFOHnOIF1t0 z^@Ip@0mw!(qB`K|2<*srKdZeTecIsZXYZXW>Z}Z&98VWpIu?0FR=?Ju_(f2UPZ0tz-K!YLUPHRKFcT*x>e|XFEHUxygr)IWP8aqsfOSqvp`q*|hnOQeoGl$$Cn=R|=_E>N6g_Yt?8J`kG~^sWYDR!W39W%) zytWdGF<_C`WAtv%;e;T&J*?bcjcYVYkD5^K{AV8mp41@@<-@CqRmn5v7Xy`~Qmc;@8?g%?oZk$&h;6)q)ZVR?GVGtZVy zs~VmyVeaU@+WTQi9@T8$^K+t)NZ?$imFLeD){gWVytG7qz~f{YiU{jxhF=sh!)zup zOwWuJYEWr+EL;WbMC9W?H`S|br-|_DKQ%Fz@fpM+#POh0yl&Z&TQTvb#l%M^JIAY{ zE7@^(=|vI9Ex}Dvso!xgc53pIdVhjIx&(V#cyi1qNp9`0x0i2gB^g8?8}cC?lp{^g zHrbPMHMok{^tT0{-!REE{#f)d_BLO;Ysaq*%BFA`zK-qLyO$8D=%_YQS5q^FpGmJxO_^6o7VzG?32qvB^K2s-Y+G~DZz$wReb1J>uphJ2={e!JY)lC9>&lf|R zi@HKf$>2Jup1{>wzpMI2$5Z+EeM7E`mKVHx_ZQA|-i}kn5C$Vg$Om5F*Fbm&0-HYd zuiuR2d-ue=gLdUQA?;m-BrowL39O$lhBVgF)!ZqL#{DqT@Vc?A`XYmDawA*`;ApnRD#!zyB6f9U|;uw;zdLS9FuB zBFbU3Dk3XJbD^%hhC}h~#k)g%%>t2+o%)qG z=i-XyU+E$WRW2gcr|~M{ zG&&X3VII1#ZsSl-R7f4*XE-g?j#Ifrwgd&P$hrDbrO`tx6V1DLX@mW?M(5hRpPLwt5jJZ|2Yk&W?#+ zCYwCD0skW%AzvcBed5;)addwrFm7eE#M(g6CWU*E?0MV?q=x)`1^XKt8i*mt?|>n$ z{}cK}xLG?jbWGFS^*Ez%>H&Zq&gcKgt3uGmq1AM{H(@p=7eII~6r`dD z-n6YEWY9E64TDCj$y)Y;`X6abmimrIi7f^)5i{nK362j-10Z#X9c?f#JOz&)u|K!l z&+`%0X0!~ky`bPS#@fQ0F2B=s85@k5oppnvp^fBHk7-g9eolaw1_wFK{|m`oldZEK zsdjkHblZ*ZSt0C;>T}`5G&?Z$r@k(gc?H6%AT~2GLrVgPH&yL&7X%Oby=u-C| zOQ*0~PG8SyiH#SVxV`trQSe2U-zmss#b=Fzd+Sm?DdDn;U!r&5p5gRM(lk;4B;E

&%jm8Udt8lzq9QtDPaAW54Oy5Zl1Ov&2r%cw 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 v&Ardn{B$D!Jb%lI66TklhVA4e| literal 126880 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 From c47ff4d764c15d8b078c170b998b2243b9710c6c Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 13:54:52 -0400 Subject: [PATCH 20/27] fix typo --- LepWrap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LepWrap b/LepWrap index 8b684e9..8d601ab 100755 --- a/LepWrap +++ b/LepWrap @@ -11,7 +11,7 @@ else exit 1 fi -if [ ! -f config.yaml ] +if [ ! -f config.yaml ]; then echo -e "ERROR:\nThe file 'config.yaml' is required to run LepWrap, but not found in the current directory." exit 1 fi From 24ece0e7bdec4b7ec2fd7e90f13c4377abc4da4b Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 14:34:43 -0400 Subject: [PATCH 21/27] fix incorrect core setting --- LepWrap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LepWrap b/LepWrap index 8d601ab..e0cfd4c 100755 --- a/LepWrap +++ b/LepWrap @@ -42,4 +42,4 @@ lepanchor(){ fi } -lepmap && lepanchor \ No newline at end of file +lepmap $1 && lepanchor $1 \ No newline at end of file From e4be889f409c61c1a02e2035b79f47776a3bb1fa Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 14:44:24 -0400 Subject: [PATCH 22/27] fix deprecated param --- rules/LepMap3/order.smk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/LepMap3/order.smk b/rules/LepMap3/order.smk index cc47f0e..5e5e5e3 100644 --- a/rules/LepMap3/order.smk +++ b/rules/LepMap3/order.smk @@ -7,7 +7,7 @@ rule order_markers: runlog = temp("4_OrderMarkers/logs/ordered.{lg_range}.running"), run = "4_OrderMarkers/logs/ordered.{lg_range}.log", recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" - message: "Ordering the markers with {params.dist_method} on linkage group {params.chrom}" + message: "Ordering linkage group {params.lg} with {params.iterations} iterations" params: chrom = "{lg_range}", iterations = ITER, From 15d1f343b959dfed57369e0bc7f6503a10b2f88b Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Tue, 1 Jun 2021 14:45:40 -0400 Subject: [PATCH 23/27] fix deprecated param --- rules/LepMap3/order.smk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/LepMap3/order.smk b/rules/LepMap3/order.smk index 5e5e5e3..885924d 100644 --- a/rules/LepMap3/order.smk +++ b/rules/LepMap3/order.smk @@ -7,7 +7,7 @@ rule order_markers: runlog = temp("4_OrderMarkers/logs/ordered.{lg_range}.running"), run = "4_OrderMarkers/logs/ordered.{lg_range}.log", recomb = "4_OrderMarkers/recombination/ordered.{lg_range}.recombinations" - message: "Ordering linkage group {params.lg} with {params.iterations} iterations" + message: "Ordering linkage group {params.chrom} with {params.iterations} iterations" params: chrom = "{lg_range}", iterations = ITER, From 40977539c048f08840225035cd745e5ae2cf24fe Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Wed, 2 Jun 2021 12:28:58 -0400 Subject: [PATCH 24/27] add mean/max aand fix printing --- scripts/LATrim.r | 15 ++++++++++----- scripts/RecombinationSummary.r | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/scripts/LATrim.r b/scripts/LATrim.r index 848e32e..3ab5f23 100755 --- a/scripts/LATrim.r +++ b/scripts/LATrim.r @@ -43,14 +43,17 @@ dist_thresh <- as.numeric(args[2]) if(dist_thresh >= 1){ dist_thresh <- dist_thresh * .01 } -dist_thresh <- abs(max(lgfile$V5) - min(lgfile$V5)) * dist_thresh +.dist_thresh <- dist_thresh * 100 +dist_thresh_m <- round(abs(max(lgfile$V5) - min(lgfile$V5)) * dist_thresh, digits = 2) +dist_thresh_f <- round(abs(max(lgfile$V6) - min(lgfile$V6)) * dist_thresh, digits = 2) + # if the percent threshold is given as an integer, convert it to a decimal edge_length <- as.numeric(args[3]) if(edge_length >= 1){ edge_length <- edge_length * .01 } - +.edge_length <- edge_length * 100 n_markers <- length(lgfile$V1) front_edge <- round(n_markers * edge_length, digits = 0) @@ -60,8 +63,10 @@ for (j in 5:6){ # iterate over male (5) and female (6) # sort on column if (j == 5){ lgfile <- arrange(lgfile, V5) + dist_thresh <- dist_thresh_m } else { lgfile <- arrange(lgfile, V6) + dist_thresh <- dist_thresh_f } # trim beginning for(a in front_edge:2){ #first n% of total markers starting from the front edge, going out @@ -104,8 +109,8 @@ plot_male <- lgfile %>% arrange(V5) %>% geom_vline(xintercept = back_edge, linetype = "dashed", size = 0.2) + labs( title = "", - subtitle = paste0("Male markers trimmed: ", rm_male), - caption = paste0(edge_length*100, "% of edge markers, ", args[2], "% cM threshold= ", dist_thresh), + subtitle = paste0(rm_male, " male markers >", dist_thresh_m, "cM trimmed"), + caption = paste0(.edge_length, "% edge markers, ", .dist_thresh, "% cM"), x = "Marker Number", y = "Position (cM)", color = "Pass Filtering" @@ -118,7 +123,7 @@ plot_female <- lgfile %>% arrange(V6) %>% geom_vline(xintercept = back_edge, linetype = "dashed", size = 0.2) + labs( title = paste("Edge Cluster Trimming for LG:", lg), - subtitle = paste0("Female markers trimmed: ", rm_female), + subtitle = paste0(rm_female, " female markers >", dist_thresh_f, "cM trimmed"), caption = paste0("Markers failing both M+F: ", rm_both), x = "Marker Number", y = "Position (cM)", diff --git a/scripts/RecombinationSummary.r b/scripts/RecombinationSummary.r index 9fa0695..a9a6da8 100755 --- a/scripts/RecombinationSummary.r +++ b/scripts/RecombinationSummary.r @@ -1,6 +1,6 @@ #! /usr/bin/env Rscript # This script will parse all the recombination logs of LepWrap -suppressMessages(if (!require("stringr")) install.packages("stringr")) +suppressMessages(library(tidyverse)) suppressMessages(library("stringr")) ## setup outfile # format trailing arguments for script @@ -25,9 +25,19 @@ for (i in files[2:length(files)]){ lg <- lg + 1 } +.recomb_df <- recomb_df %>% select(-family, -sample) +cnames <- names(.recomb_df) +cnames <- c(c("family", "sample", "mean", "max"), cnames) +.recomb_df <- .recomb_df %>% + mutate(mean = round(rowMeans(., na.rm = TRUE), digits = 2), max = pmap(., max, na.rm = TRUE)) + +recomb_df$mean <- .recomb_df$mean +recomb_df$max <- .recomb_df$max +recomb_df <- recomb_df[, cnames] + outfile <- paste(args[1], "recombination.summary", sep = "/") -print(recomb_df, row.names = FALSE) +print(recomb_df, row.names = FALSE, width = 10000) q() write.table( recomb_df, From 1489c424f8a24ef6757f969c307e1f9838a37b29 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Wed, 2 Jun 2021 12:48:54 -0400 Subject: [PATCH 25/27] update LepMap3 --- software/LepMap3/Error.class | Bin 23098 -> 23325 bytes software/LepMap3/Filtering2.class | Bin 15760 -> 15798 bytes software/LepMap3/IBD.class | Bin 16444 -> 16443 bytes software/LepMap3/LMPlot.class | Bin 8950 -> 10558 bytes ...lelScoreCalculator$UpdateScoreThread.class | Bin 1915 -> 1915 bytes ...r$MergeClass$ParallelScoreCalculator.class | Bin 3336 -> 3336 bytes software/LepMap3/OrderFinder$MergeClass.class | Bin 4940 -> 4940 bytes .../LepMap3/OrderFinder$PhysicalFamily.class | Bin 2831 -> 3047 bytes ...nder$SingleFamily$RecombinationScale.class | Bin 845 -> 845 bytes ...der$SingleFamily$RecombinationScale1.class | Bin 3848 -> 3848 bytes ...der$SingleFamily$RecombinationScale2.class | Bin 4280 -> 4280 bytes .../LepMap3/OrderFinder$SingleFamily.class | Bin 21761 -> 21905 bytes .../LepMap3/OrderFinder$polishThread.class | Bin 1645 -> 1645 bytes software/LepMap3/OrderFinder.class | Bin 31617 -> 31624 bytes software/LepMap3/OrderMarkers2.class | Bin 6159 -> 6060 bytes software/LepMap3/ParameterParser.class | Bin 7285 -> 7275 bytes .../Separate2$SeparateIdenticalThread.class | Bin 3548 -> 3548 bytes .../LepMap3/Separate2$SeparateThread.class | Bin 3289 -> 3289 bytes software/LepMap3/Separate2.class | Bin 30499 -> 30521 bytes software/LepMap3/SeparateIdenticals.class | Bin 3667 -> 3667 bytes software/LepMap3/lm3/COPYING | 674 ++++ software/LepMap3/lm3/README | 33 + software/LepMap3/lm3/bin/Constants.class | Bin 0 -> 1077 bytes software/LepMap3/lm3/bin/Data2.class | Bin 0 -> 8787 bytes .../lm3/bin/DataParser$FileParser.class | Bin 0 -> 234 bytes .../lm3/bin/DataParser$PosteriorParser.class | Bin 0 -> 2525 bytes .../lm3/bin/DataParser$VCFParser.class | Bin 0 -> 9452 bytes software/LepMap3/lm3/bin/DataParser.class | Bin 0 -> 11979 bytes software/LepMap3/lm3/bin/Error.class | Bin 0 -> 23325 bytes software/LepMap3/lm3/bin/Family2.class | Bin 0 -> 24561 bytes software/LepMap3/lm3/bin/Filtering2.class | Bin 0 -> 15798 bytes software/LepMap3/lm3/bin/GammaFunction.class | Bin 0 -> 2336 bytes .../LepMap3/lm3/bin/IBD$FilterThread.class | Bin 0 -> 1081 bytes .../LepMap3/lm3/bin/IBD$PairwiseThread.class | Bin 0 -> 1615 bytes .../lm3/bin/IBD$ParentCheckThread.class | Bin 0 -> 3270 bytes software/LepMap3/lm3/bin/IBD.class | Bin 0 -> 16443 bytes software/LepMap3/lm3/bin/Input.class | Bin 0 -> 5202 bytes .../LepMap3/lm3/bin/JoinIdenticalLGs.class | Bin 0 -> 2929 bytes .../LepMap3/lm3/bin/JoinSingles2All.class | Bin 0 -> 3476 bytes .../lm3/bin/JoinSingles2Identicals.class | Bin 0 -> 3110 bytes .../lm3/bin/LGMap2$intArrayComparator.class | Bin 0 -> 1133 bytes software/LepMap3/lm3/bin/LGMap2.class | Bin 0 -> 5447 bytes software/LepMap3/lm3/bin/LMPlot.class | Bin 0 -> 10558 bytes software/LepMap3/lm3/bin/MarkerList.class | Bin 0 -> 4065 bytes .../lm3/bin/Misc$ArrayIndexComparator.class | Bin 0 -> 1800 bytes .../LepMap3/lm3/bin/Misc$KthSmallest.class | Bin 0 -> 946 bytes software/LepMap3/lm3/bin/Misc.class | Bin 0 -> 8962 bytes software/LepMap3/lm3/bin/Order.class | Bin 0 -> 17692 bytes ...lelScoreCalculator$UpdateScoreThread.class | Bin 0 -> 1915 bytes ...r$MergeClass$ParallelScoreCalculator.class | Bin 0 -> 3336 bytes .../lm3/bin/OrderFinder$MergeClass.class | Bin 0 -> 4940 bytes .../lm3/bin/OrderFinder$PhysicalFamily.class | Bin 0 -> 3047 bytes ...nder$SingleFamily$RecombinationScale.class | Bin 0 -> 845 bytes ...der$SingleFamily$RecombinationScale1.class | Bin 0 -> 3848 bytes ...der$SingleFamily$RecombinationScale2.class | Bin 0 -> 4280 bytes .../lm3/bin/OrderFinder$SingleFamily.class | Bin 0 -> 21905 bytes .../lm3/bin/OrderFinder$polishThread.class | Bin 0 -> 1645 bytes software/LepMap3/lm3/bin/OrderFinder.class | Bin 0 -> 31624 bytes software/LepMap3/lm3/bin/OrderMarkers2.class | Bin 0 -> 6060 bytes software/LepMap3/lm3/bin/OutputData.class | Bin 0 -> 2628 bytes .../LepMap3/lm3/bin/ParameterParser.class | Bin 0 -> 7275 bytes software/LepMap3/lm3/bin/ParentCall2.class | Bin 0 -> 25527 bytes .../LepMap3/lm3/bin/Pileup2Likelihoods.class | Bin 0 -> 13976 bytes software/LepMap3/lm3/bin/QTL.class | Bin 0 -> 10536 bytes .../lm3/bin/Separate2$JoinSinglesThread.class | Bin 0 -> 3329 bytes ...parate2$JoinSinglesThreadMaxDistance.class | Bin 0 -> 3287 bytes .../Separate2$SeparateIdenticalThread.class | Bin 0 -> 3548 bytes .../lm3/bin/Separate2$SeparateThread.class | Bin 0 -> 3289 bytes software/LepMap3/lm3/bin/Separate2.class | Bin 0 -> 30521 bytes .../lm3/bin/SeparateChromosomes2.class | Bin 0 -> 4422 bytes .../LepMap3/lm3/bin/SeparateIdenticals.class | Bin 0 -> 3667 bytes software/LepMap3/lm3/bin/ShortPath.class | Bin 0 -> 10253 bytes software/LepMap3/lm3/bin/UnionFind.class | Bin 0 -> 1705 bytes software/LepMap3/lm3/qtl.R | 98 + software/LepMap3/lm3/qtl.png | Bin 0 -> 25626 bytes software/LepMap3/lm3/qtlPerm.R | 104 + software/LepMap3/lm3/qtldata1.12 | 268 ++ software/LepMap3/lm3/qtlphenotypes.txt | 508 +++ software/LepMap3/lm3/src/Constants.java | 44 + software/LepMap3/lm3/src/Data2.java | 268 ++ software/LepMap3/lm3/src/DataParser.java | 779 +++++ software/LepMap3/lm3/src/Error.java | 469 +++ software/LepMap3/lm3/src/Family2.java | 1144 +++++++ software/LepMap3/lm3/src/Filtering2.java | 623 ++++ software/LepMap3/lm3/src/GammaFunction.java | 200 ++ software/LepMap3/lm3/src/IBD.java | 720 ++++ software/LepMap3/lm3/src/Input.java | 167 + .../LepMap3/lm3/src/JoinIdenticalLGs.java | 83 + software/LepMap3/lm3/src/JoinSingles2All.java | 99 + .../lm3/src/JoinSingles2Identicals.java | 86 + software/LepMap3/lm3/src/LGMap2.java | 204 ++ software/LepMap3/lm3/src/LMPlot.java | 377 +++ software/LepMap3/lm3/src/MarkerList.java | 160 + software/LepMap3/lm3/src/Misc.java | 384 +++ software/LepMap3/lm3/src/Order.java | 577 ++++ software/LepMap3/lm3/src/OrderFinder.java | 2953 +++++++++++++++++ software/LepMap3/lm3/src/OrderMarkers2.java | 176 + software/LepMap3/lm3/src/OutputData.java | 78 + software/LepMap3/lm3/src/ParameterParser.java | 216 ++ software/LepMap3/lm3/src/ParentCall2.java | 1021 ++++++ .../LepMap3/lm3/src/Pileup2Likelihoods.java | 549 +++ software/LepMap3/lm3/src/Separate2.java | 1414 ++++++++ .../LepMap3/lm3/src/SeparateChromosomes2.java | 141 + .../LepMap3/lm3/src/SeparateIdenticals.java | 100 + software/LepMap3/lm3/src/ShortPath.java | 344 ++ software/LepMap3/lm3/src/UnionFind.java | 73 + 106 files changed, 15134 insertions(+) create mode 100644 software/LepMap3/lm3/COPYING create mode 100644 software/LepMap3/lm3/README create mode 100644 software/LepMap3/lm3/bin/Constants.class create mode 100644 software/LepMap3/lm3/bin/Data2.class create mode 100644 software/LepMap3/lm3/bin/DataParser$FileParser.class create mode 100644 software/LepMap3/lm3/bin/DataParser$PosteriorParser.class create mode 100644 software/LepMap3/lm3/bin/DataParser$VCFParser.class create mode 100644 software/LepMap3/lm3/bin/DataParser.class create mode 100644 software/LepMap3/lm3/bin/Error.class create mode 100644 software/LepMap3/lm3/bin/Family2.class create mode 100644 software/LepMap3/lm3/bin/Filtering2.class create mode 100644 software/LepMap3/lm3/bin/GammaFunction.class create mode 100644 software/LepMap3/lm3/bin/IBD$FilterThread.class create mode 100644 software/LepMap3/lm3/bin/IBD$PairwiseThread.class create mode 100644 software/LepMap3/lm3/bin/IBD$ParentCheckThread.class create mode 100644 software/LepMap3/lm3/bin/IBD.class create mode 100644 software/LepMap3/lm3/bin/Input.class create mode 100644 software/LepMap3/lm3/bin/JoinIdenticalLGs.class create mode 100644 software/LepMap3/lm3/bin/JoinSingles2All.class create mode 100644 software/LepMap3/lm3/bin/JoinSingles2Identicals.class create mode 100644 software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class create mode 100644 software/LepMap3/lm3/bin/LGMap2.class create mode 100644 software/LepMap3/lm3/bin/LMPlot.class create mode 100644 software/LepMap3/lm3/bin/MarkerList.class create mode 100644 software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class create mode 100644 software/LepMap3/lm3/bin/Misc$KthSmallest.class create mode 100644 software/LepMap3/lm3/bin/Misc.class create mode 100644 software/LepMap3/lm3/bin/Order.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder$polishThread.class create mode 100644 software/LepMap3/lm3/bin/OrderFinder.class create mode 100644 software/LepMap3/lm3/bin/OrderMarkers2.class create mode 100644 software/LepMap3/lm3/bin/OutputData.class create mode 100644 software/LepMap3/lm3/bin/ParameterParser.class create mode 100644 software/LepMap3/lm3/bin/ParentCall2.class create mode 100644 software/LepMap3/lm3/bin/Pileup2Likelihoods.class create mode 100644 software/LepMap3/lm3/bin/QTL.class create mode 100644 software/LepMap3/lm3/bin/Separate2$JoinSinglesThread.class create mode 100644 software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class create mode 100644 software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class create mode 100644 software/LepMap3/lm3/bin/Separate2$SeparateThread.class create mode 100644 software/LepMap3/lm3/bin/Separate2.class create mode 100644 software/LepMap3/lm3/bin/SeparateChromosomes2.class create mode 100644 software/LepMap3/lm3/bin/SeparateIdenticals.class create mode 100644 software/LepMap3/lm3/bin/ShortPath.class create mode 100644 software/LepMap3/lm3/bin/UnionFind.class create mode 100644 software/LepMap3/lm3/qtl.R create mode 100644 software/LepMap3/lm3/qtl.png create mode 100644 software/LepMap3/lm3/qtlPerm.R create mode 100644 software/LepMap3/lm3/qtldata1.12 create mode 100644 software/LepMap3/lm3/qtlphenotypes.txt create mode 100644 software/LepMap3/lm3/src/Constants.java create mode 100644 software/LepMap3/lm3/src/Data2.java create mode 100644 software/LepMap3/lm3/src/DataParser.java create mode 100644 software/LepMap3/lm3/src/Error.java create mode 100644 software/LepMap3/lm3/src/Family2.java create mode 100644 software/LepMap3/lm3/src/Filtering2.java create mode 100644 software/LepMap3/lm3/src/GammaFunction.java create mode 100644 software/LepMap3/lm3/src/IBD.java create mode 100644 software/LepMap3/lm3/src/Input.java create mode 100644 software/LepMap3/lm3/src/JoinIdenticalLGs.java create mode 100644 software/LepMap3/lm3/src/JoinSingles2All.java create mode 100644 software/LepMap3/lm3/src/JoinSingles2Identicals.java create mode 100644 software/LepMap3/lm3/src/LGMap2.java create mode 100644 software/LepMap3/lm3/src/LMPlot.java create mode 100644 software/LepMap3/lm3/src/MarkerList.java create mode 100644 software/LepMap3/lm3/src/Misc.java create mode 100644 software/LepMap3/lm3/src/Order.java create mode 100644 software/LepMap3/lm3/src/OrderFinder.java create mode 100644 software/LepMap3/lm3/src/OrderMarkers2.java create mode 100644 software/LepMap3/lm3/src/OutputData.java create mode 100644 software/LepMap3/lm3/src/ParameterParser.java create mode 100644 software/LepMap3/lm3/src/ParentCall2.java create mode 100644 software/LepMap3/lm3/src/Pileup2Likelihoods.java create mode 100644 software/LepMap3/lm3/src/Separate2.java create mode 100644 software/LepMap3/lm3/src/SeparateChromosomes2.java create mode 100644 software/LepMap3/lm3/src/SeparateIdenticals.java create mode 100644 software/LepMap3/lm3/src/ShortPath.java create mode 100644 software/LepMap3/lm3/src/UnionFind.java diff --git a/software/LepMap3/Error.class b/software/LepMap3/Error.class index 1d4bdbd964714c9e7ef607e1f4707f777317c925..4a3c416ab77accdc66fca926d8b37fa4b20c42ce 100644 GIT binary patch delta 3979 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 delta 3853 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 diff --git a/software/LepMap3/Filtering2.class b/software/LepMap3/Filtering2.class index a3f1222332a8666b1831e9fdb5dc9e42c32cfbda..aaa172b9874890be354fd42ae19629265394be2e 100644 GIT binary patch delta 2388 zcmZWqYjjlA75=_6nVCD2n@o~Blg#7+NsxrRACN$xNYK(Qly_QS6auLsCRMUnHr6gs zQ!Op4q7=BU1&P2czu{?rM2oZUuRxGUuYK68yc}@3BV(V&u%-Q>V`#I-) z``o1q0t=jn?(FOUFj#rFJA?5ld3mA2^GmG7w#53UmwP5$+vH>#*Xn$Q>)N{GvzgIG z#5$&zrjJZ7cGT8|g~qoDTQ8sm?C%lK_`dm!k!0JaqmBE`kUi7fV>q;f1k>$2 zWOf;DcP9#*?Bo%hf8bFfs-dx=$vkFFDtSO-m+Wh6nrbwpXwWtE*Z2{kjUWBJaSd}D znlxl+xJ$zT4e1(t%+YR-*2#}`{)wNM)$W0^`BdkhdEQ*?o@D%$uof2<7neAh$O}3@ z=SA}?cka|LbUck(jbBMuB~FlE>sW`Huy#d93u-j}gRn?w7`m!sJ!+lU#_Kx&#Yd%` zc{PvyWX{;erm*>@j)%g@Zkvss6saGQ`U>VUPvsb;<5e-Ks7SJKC1um`S~wY%rgL|s zrgG|-Ej5)MaVrZOV|6~)>lW9Rn0PD6@dPv^16*&W6#A31eD>IOnz0ozt_oM4f4IA& z+_01uj=kpmZaf6jCFpJ=lUtd{fLG?8SGuNwg&F>$CcpjVjI; zES?1z&&{G4EQYT)mVRV#OE^~kj3FTy8U;D*Z*y7AWaK<2LxX1F397Cf`E2$Vvv}G=i8a_FBGU z<_uoT?dHM3uXBglIOJ|wHxFszRx`8gu>MvMi@mM@mKY3}H_8f|--V4GNaXL3#XT6u z_vG03%FVrx>D-4|+%NZZ5Do0aqx=Am@i2bHBUsF%Sk7Zu#V)L2H(JE@CO^VzoO2x1YSsxr$Kg|KFazaTWJ3{h?jRUV8~iIF)DpUw2erQ?(_%w!T9{V01ulbBaG%_RsJZ0$E*BSgWXkro52sO{C0yUs{ES4 zlU4pWfli4K?6e30&xmjsJX;muAE)ITJjMXeO(;0Gksxd&c#uMp?E7^cQxvgi+}?_;(ai+Xh* z=BfMfQ#B5I)C6>@i8!Jrp<7L9MvwC2l6nwV)C}6xOeU*p=Bpp^ZdJ?4Y7T2v9e<|k z`D@j{rRv9gMLog|YA!da#t749z!9d0%)wD<%f+=Sfes;0GAbhzrclo@%8=Pm=)`&X mN;%{&^q>nTP z_nm$3OnBa+d9MAp+IIpdP`+kYYh1jqe*R+bxNDnSOyP2!&u~S{nYg}8Zzj4qC+DY? zrR6$nrdyN77Q)_zY5c3%+oO)l@fD zYe?3hYe?1jwwap{=y6I4)?2X;%>7l}1C6yms&1^cV$bOOC*Lva68dO+c~<9p{Fk{T zVS;gvh|bN<&CPSs#}9S>o9E4I2?Lrg>X?rjjsFo^c`lGwbgV+PWqqt;HL5jUC2SIE zL7(Y(7Bwzxr`>N0o3=uE??? z%c<*pylYvvmQ>%3MCTM}NCLRX?42EAf;m6i&qvLr*@Mlq*}1)*dU82p{cgXfjmxG5 z-JYQ5v3Pppy~gU!hi=1WLC%P*-hNlm>vsoTewW`{mw=2Xmmx`Pt*-ylWw5V<`!Stf zJ+@}`txM+moW8a#$TW}SjBeT{blSNP`(^InA8?9)#QS^#m-#1r%-`ZGE@l*$Fu*@E zm49I$E@i&VgZUK8`7}pyImd_!$8!a1xsvsKmL5!e9yqBv5v*U*x$!EoKU_9^O8bLJN z%^_SXmJ9bVna@dtG?&p*+zvOUQ*oVG9?ZpTu9w(2{2JXQb5jhw*n;7FLEK(!!w_x| zD-o>`cMJjyNSV2U#W5A5xlt^GJrRh|@^TDPxXFs;FD2fhs!M9n2jeDU9DIn~Ix!3` z2k78tdA7;7>tnMK=Bm7yjQ@dcHj$?+2RbEPTvx1lI4=;pS z#Qy&}-zHR@$b;v0@VNXGcZ#i3-u-QU=A8Ti++wcDf3*KbDA|}MBm#U9-MJM#*^FYD z%h`eoZo?$;*D!33FId4B%_{}ZajUtcaHxzOg^k>7-dS`&f2kD<{hlzMFu2W3E6#3e zhn?Hu<15JE4vghaOyH~1zFnBi*HFpVrCGZ%gL^QGZ=iwu@H_6uLLR_k9>g-fiD!5S ztHrmG9cbp;*v+G&-s3pT6QbUeIK$I8E53_-2Uq#7DEO?j|2?{Rj_yhPkO^{~B=bCb z@B*`VkvY61lD^C$Ug0o)#NqrzzKqc3$T(!OzK!ah*5V$(zc< zTPk0{>{Zgr_2%i46nP(Cmek7bD@)U5e7Ll}$c|{`fUY#eDJK$@3&|=5DN09AK(zR*{o*7Q@(PmIv=E^Gl`x94ZNJl?;#S4zEg)j6Eb< zDpFM%`l$5Car0T{34OmgZs^OG&C|iEJ{gjsuVm;a8Tt#K0TP`le6o!8a>HQ3elHgrW@|t_ax;9;pa940cq6G=oPgLa_oJ zlS#1SG6{G>Ca1xZ6=9yfCreT=%y-8P-1|-P?VyzW&7dgp9Wt8uzPQ`?K`=TH<&O^Y zLcnqyj$bFR!AoJh5a#6wcI125M-i;U;3r-2VSXAxjz?Ct@$&_(ydFW0%09jd^M(`& zv$G3|GL+B~sOf{SvPH0C-%YQgg~W;PAjOVAl-JR!9D<)Tl=C)eO-O5D6%&XW7*=kp zVYW!a9zmKkY=|_h3^8h`XlNMxs$BGQ2TIj&OcZ;H`T?q%)JW8;QFu_@iP>s2cBwJg zr^e!-x(gj@JkF>|xTGfIstVDrrZ7p}%PdvNp{kk_)lXTYrg4s{d+|sp|Q> zn#oP-XAyx;g;Q?H%_97_gq(*fR4kn$og|b;Zc(Q~Jx8cG6>m-~8yk@8Zi7Sqao`4~ NiYY&&2@}9B%Cgnh8s%FFGFHT%NGf)GIx`v88vm z6|k!j2O2ZbgmZl`(kH(()dqE<4r#w~z*r1!E)IEyR8o&W4u*^bUthA`!o tY(zM~k{ABBlP~;9d)`3Eo5Gk5?1 diff --git a/software/LepMap3/LMPlot.class b/software/LepMap3/LMPlot.class index 5ddc750d09a47346627ec3e32222643febf16062..0702bbfe06343ac2d90227462ea2d0881bc1f2eb 100644 GIT binary patch literal 10558 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 literal 8950 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 diff --git a/software/LepMap3/OrderFinder$MergeClass$ParallelScoreCalculator.class b/software/LepMap3/OrderFinder$MergeClass$ParallelScoreCalculator.class index 0a17a2f9745fc329107022b47b759b0a8184b5ca..dd09c5e1330f6562b8609df681d8229f278d1bbb 100644 GIT binary patch delta 312 zcmWO1JxCOA9Eb7m?+@bRd3g?ncrGq35(c5v;39MgE`p1*AgCw>f=Cd#NVp}Qa5ngY z?~3B-`Gz8d=4+u{VWtNybt?JJf$7#w&+wU^Hh-Hx>{1_ult!&G=u$QxBEHlE*V3&N zdX!JEis(}n{ie~%lYY&V63kcu5qr+8l`v;7 zn6`2jtdd2mB5VyT+bcd=GpqK7HG9V=>tNl&Y}kAmo3_H1?Xztc?ARTjorf>(A-gV% zJ@&;G3)FyL-v1d(BVxmP6N??0b$}keCbcD>CKrS<&z0&mVb+%g3=EaiSbf umCIk{ai+(dtB?yl<5I<3se~H^NCXqH|$Hf!G_@)T|gO-ZL?@sEZH*=d*he$vFwuh?NV8F*{rz| z*4Hyz$ zkRNL2mk#k;hxu#W1$Dbfv3gvUdJDDDyi4}8RL2N(oaH)6wFaoSjO!Fl8l+99N$LzK z4Kbi$&gvW&b)HdO;Hu4TX_UJfBd1F|w9bq!7lP7^OI|m2+}NAOW{sUNHf!u{JM)f_ z_vq3jY2_Hw6eGIN6+N&sA2DIGoTiO?%Cz!4v(Bt$!k=Z|Tq=BD-sn2RKlXNnv0(Lo Dz%^zk delta 474 zcmWNMU1-e#7{-79i_QBO2RnA0(W0~2$u=KnW4^XUo9RT>Nk=n@Ly9a-~*EO_V$2Ga@6o;JtZ&7tj0r>Y1#btiE?!K~v$5VnOaLvSuRI zLew@9x6M>oD+y~OY3~FZJWU8!)h>Vy-t!9#PZqS@U(X6XMem=!2V}@e>vVcm(X;3-qwUDfH zpDNg|B^*|QK2?%e6(d^8sFIx1GA^lx%c|v?>bRxl+|>#mXeCdyif2mkT=l$A1Fy82 z*IL5|HS$I4nD*{JwFV`{Y764pQmBfI2bnapwT-B@Q?4B>RtHIEN*UH_CuwELXcwL8 z=BR7CU3<*6J+AF_ZI5gFeC7#P zo}^3t4Kko1PV1D<%yZteF%7%!4A(Wn4ev~7G<-AfWzZ5nDyYuW6g}@U1H%XvHKmnOq)LGfHh>Tz)uOdDTE7~ttzY$nj#x^yRH$}iVvIjP z94<0?Jyc5^upFt~OOV(zxuv6U8^=5SF!%b8}rQVAq<2&_7Ap|hA2NQGrgc;#-@C(1Ie z7Q_zuN=>Rd?BtN&)fxLv^pFcK+9e~__k;aVX)iSLaCHC^jHhW3=gEgz+V|m?H6?}v zu+T7U6oivPh%t`Q2r^_~i4LMnqj*hGIj=n_U=b=Td?5kD*hbGbVhno*YDj)Yx`wf6 zyXuYBFjZcW}V~c%>V*i8tx$9_Jr8c@Ysxqw~o8r zci`?Y6|gK{=)L}8wz5Vo2G2 zCbeF8;dFTQ>e6z};N?e0`%Xuwa52gyF590@Z|G{2Yh1T6cfs7T&)hLHW52nT#9Wl~ zTrl|4)oQI??;bFe^S0ll?XZ_I5A2LLX9D}fJKzNbvdxA<6G4oaY$q;pI~DrSnZ%P0 zeA%JZ6el#Eku>L|lS#>ZEQQOaCyOK9gr$cz$?W%U(y%OSEd$gmt{M2>J)jxr%bJdtC(l;gaYlXfwZ+;xLf z82zL*#x)aM-f>eihcIusW#2?{D^uFhrad{mcQl3y#Rj+6H4_reb8~_Ov~N_1`%H6p z)AXunnsA|*ZctroL5VG>#=Za0PDS&xt!n=kb)Wf7mDlB6o$u>Yr3MSFs_UQ9wHG(` Oc*v5*hp8r1@OOTH;q&4f_ryIZuj{-|x!h4c)jEq`=crK; z0hLlKFL#~WF1M+wv$zVFl;ms~|DXzaZNYI}Vo28+RxKk6F>cQidc_-!@lKz3Zv`KeVNyGM)E-G4GNogt zb;69vX4d5L+2k|lTsadl{x4RxpaK@{AC`21WtH*GidL*9WhYh@#8DS%EBUUstZR{s h*4WT4o7!hffBB&!e(E2;^q=2}th_zrOC02todSavTsHs! delta 371 zcmWO2Pe{{o9LDkI2XEa-84`3zaDoJZM1vt7gxVaLhV##AnM)mnCQh@zs58UJ6ek+C zrqF1^CMnK?7QfJ)>e9hW;6c1ecRh=j4t~$?4?HhE33tN%-Q%e6sRX~usMjR|D(99e zX;3wd^3Y@l9ZsvI+2o*Z(y9j9bencHb5~*RsfVyexUV=Jn&5%n(WyluO7l<|y0lKW z^7QB@QT;Z3k4JXSdB?iZD+hgY^4P5R>k0$9Mocvfsg5V|Gi)ZFs+DJo@Lb)zP>h!v zHT^9k_SFl&tk9S)6F1;-UFWp|OsIo58sxn>o7NOFN;0b~2_u+OfqDI5LHm5rKNfYu zN1c(hiuq)fkh02HvTI8xtdo}_$DNbAo)~K9TRd7O;oYitVw1TTz$qiN0s~Y-M%b->< ztolG-&4ku6t9ATSgXL?z6>EbnRb%FEUYDgd2d}qKsI8Q%i7F*&)OMP+gM->hTFsnP tD;LzpW$ogQcJoLnvf9JA_A{dc{8f7}d)P{J%*vF$-BDncz1|tE`wz)SXmtPp delta 458 zcmWNLUuey70L4FF&T-9Ut}!C}bJr#=Vr!OR6T+G)iw8taUgX^a59DD>7Lh%zq$o{$ zpsv`%Smtj{OpM+6H>{?VXiPNb_jXR5&*{^V>_}c~ij{N{*DVsdO|H6_r#lp=o0RUc zO!q0*Ln`$s-5zTQ$9kgKW2*I(jp}8Sp0P#G*`XKgRUe1+lGA#{S@qMR46PcVO|QAC zH{8@)9_Sr?dQZOw8Po^9=p$eCiBS!Opy4o8pTitwLZQC19N0q^ge0YuMJ-C{lUc1{ zw?>HR2b1+P5+9{lzo^ph$mkDSHO6-RWtaZ3Pvaak9CqM@C(!JPv{+oQx#&r>JH`!9 z;jZKKMqI|(>7((1P@kZ{GbnTp6`o0*XR+V89PxY_oyQsHbKZrtImvYw(d}ZMxFo_C zFzkhlcoE}Hg={Ylv%MtbdujU0wB}G>O3Y>CxSS%dAms|ycqO&2WT#ir;ME*(6~|r8 qDX-p$D!kpdP*y`l(T*u&biNX@AF(9zHbeCt+m&?_S)ax|J1+G zq7AgMm3Le^zINd>))T7b<>wD7E^d(SgKzOyFMLPPIR(Y}E_{zOPB-r`zjH2>V6+bi z7hL!O|8ORF4;Xyeg)8`x;Qhe8X%m89e0H~@frE;&3JT@jBB8wxuHm0vxK5}sG_N$T z@$kID!HskBN`|=b6MiP}h=M|biErQDW1EhfF8qRD|08Hqr>#$G`@0K&;I8ws&#?CF zB8?nEz{sM4!3BkR!@K7d4Js_Dn%0XfLG@`Tk*J!Bygle1rI#Z4Q*{@)$k$1&-nMT| z7x_^wf~%mgpd>Rdf7qD3qJaWEzH>q^9}1vAFRCqws?r`^QZT%6+oGbpam6kQqB>&s zLc#Fi1RLK+Qtu@&Da1u}??cKPTk((T9VjG#+IXznR+(jG-8X9|W=;p+#pJ5^+Ba0y z{+33&sMOE)m14LWgHkmP6V!N2RTD5nO~fKK3G38k>`-nTS5t6F^gqk^?`j-bRYpPTWeQc( zDN49mGU+2xaOp7O2m$R2{)8 zbri3wFR(#MU-n^Qcr8$fzI4S6!sQ zAa#jC)MbHjo|>qu)LdN`C^ss6!ZuLyElKwd>Zsolt^PoQx+_(?hgPZ*?HG7kXr9O; zWUQ2R#o6!-O7Mo^>Ih~RBG?xVxdu|WCYrM!a)kC0`FR-|#sN-;$n|a&1_KM=m&DCz zx*1)BL~p?pyOEodv<1^M^g0|1(c3Ybup0}vU~y}Y;WnIFfx>P0rZ)bztQ^UlX4WAh zkxj$!lt7cR6=xH*eZ-d;3N+%@>$S==k9;P2eB2%<{m3xU{O?Zd(Cv|5hpM^K{;#?I zAK?yq@T?-Ns7!RfFVHn&m_bfCHR}W1NKVMR!@^-Q>oIl{q@W%TsE^Azr9(1=xoi z`7HV49FE~BC?sGH4#EeFHeyyPoRM$WLv8~ef1vwJ++E`73AYcQ3pYymCsDl;p)g(` zFLd)lu1q)ws6?ET9Tn<*2i2riYEp_bIO;L~^Y4iVSAn;lNSx+ujB4sD-$%(~vWzKQ zbgo6!r}Iv&`e~gmh0hokqPO7ajFH=LbsKIZdZgW+AonX63vUV1Li(>Ie7O~ZxHTgA zal~*NqzY}rZPAxAodxylME)kgJjv%*6+j8dez;WyI}+`2+u2_~hHg7o>gUiMCq24; zNEQ@#l*pY?jk_Q~XnoF>b$Y@niB1ZawehzV6V@5C>v>DgEzIC|Wr}k1bV}kG)SGA0 zG@ecG^Bg+BbLmT-NB`vc%8wVSR9>t)v7^TG619R~QET~Cb&HpBHZSKlc?ECem3)lL z`6jQ{!8}Drv0EqdWZjG>>6W}+XYyORo6u)?oF2sQ>LL7|9>(wMLf)j^C0wDW^JYC; zgeAO1ujH+IHE+{vdAr^ubSHnP_wWvVkay}Yd6z!TyY+XxN1x-p`U>yUH~16%EAQ9$ z_<+%T&{XF`#-ERv27J`S@fW5Ee`(VAE7P8jnI6LTzkQYJzou3*8MLZO!>JQSv zAw>6(^uQ!0c|f&?CeFO%V(D3G6hJj90vnwr_YGP9oABaa5Gpj5e?t=AmXF$9r1L#l z_q*t$tK)fH14DI9jM23)N&91t4!}wsh_`eQw&-AdtV6I@*To?nilaIV$90%o9l|L^ zN6X^Zf?Vs!($rbFpBT~|SeC~qCC{BfA|#t)G&iHs+LR*8j6t>; ziymei^34Pkn28u^CZR;0MP@Q8j2kD+6xJ{&<|Q&_8U>g#sv~?oGo2F6Olo0f zQ5!Rx2ADZC%gm*%W*%KI^Hrc(sOq}SA{A~Ht7zk>Kba*e*Sx9<%~CbWELRK73gwt` zwaKhfADI7Ar^W89S)+b86In|e`kJvEWX5o$8N~_aEpBA~!l`BhXPCFSjd_Q&%)6Xz z-s9(m4imXV^pj+Ky4mPCuc#3s;Pgn}D@zoZu}(VHvlM$WYAYe9GNOE|6hus(wslO4 zCJ#(9TC^9FiYYBtk$bb0ZwrFWRz#R>XlOn}GxIUh%?>HIBE{!SMw=uo5NDN&&bz&PPNQos%wr=Q?rjU%wB3|c2c(4K~I^j)XyBN zI%N;bt^)O!LsL#!r@YmBl74pU@WuqHL_PS*hLh9r1$m~)BfHLXSoZNic+h+I5aGeI ztaT#~ibJgfl>4NhIE8xVYb2U)(8PQv+5c4*|BNjD-|)2gyJUVAFPd{GHRrKh=o*nX z$k=AF*aY32qkGB@cJ z;a8hqXj726LLZsS^ohAdN6bY!X}+Pe=C<=<+Y2&>V+8srG=C31h!50UXv)(hipHO#O+m}{$Jv2|gY^~Gvi z18Z$foECak7+^k;XffKQW<%@JtRC2R&7 z3vFRrp`C4wuC@(wZCgBRGo=XaFxIxmRNDcwZ5ABc5#_cs*4QpsZ@c1Mn~lvj2R{hC zF7hqgg~)a$AKQ&;+U^u+pQKRRgA#={6S<|$rQEvqDH?8jQJL*c<+d%Yx6jZ<+lIE; zKF-|E??}}$x|BRvz=|#p_E5#eE>E+20NCcq^5qMHA*gMKN+E_J)ec8nI}#o3i+Ii! z;dxt(LAFG)AB|zQ6oqyyO6)jU%JG6HrZoF-$V56NXNM6D=8Q&vz zhsFN5_pXYv|ARb$ZjTrMK-Hw8_3H6<9|n?RvT{ z{4M*2BD+@k*wJ=O-K64dg-W!WRkHm+W!f#OlijMi+imJ;yItkk57kin zkt((ytA#SY!tPY7?Jl*}?pE*EJ*vX)ReL4aVLMWtw4bVP?O}Dpe&)Q=Z2{G-i0K}{ z^p%s|vpJn|ih7QxM$Xlq_5EvjeiW#G--~r~Cn`6Ues_B1{)tXFb8}OutFtRN^Iu}w B`-=bo delta 4088 zcmZuz2Y6LQ_WzwZGxJFD0wKu@2_Xp~q!&m)2nkIRI!G}fhzKEcLg-z1BB2Pllq(k6 z3WA`hlu)8r5LPL!tSbvEO_a7Sx>!((l>E<2kX^s;|GszU^m9*}JF{#H&3=QnweV~C zB~H0;lAybem{8=#X`CV0@r5OW$BZU$QgXg+^))Jg{vdqq#zai=VdverfQ!yjzk%L= zx$!OjO{i8_R5WD5g!;`0K}lV@jUPN@e7g}PvgRh|`{O(O$A#|+)khXiE^JU-STd|Z z*TRXz-MES$CsI{9y z=;2D^cI~Q+^TgO`8@QbO%DxPYRH0weBsWd=xwFM%hCMoIw7j9r738th&xs0aPlaVe z!d%Kb3Pz2DpXz~{>M>-gVl-7H=%~h`zZ!>PH6D}IM9ff=Fk4N=d^H8j)KqLz)9}8U zj$>*D{w@5UMSfdNB&)m>rki!YACfE9<>M2svJ$!J7}rimB`BRsM?Ds)Q1?V z_F;_r2;L6ZJhpL@-G{!#UJoKVMbTKxlG zsZ+SD&fq6?7Pr(nRH(1XsBb7xT_8`Gx=0b~lB98t8mez8TV0Vu0gE!1zwQ@7DaV4={XMK)Pgl%0>tp=1ri7UAqdG*?3!`yq?{k<9_< zDzLZEgG4rpt2=FDHaDZiFtD;cR;TPl=1z1H5VsqT>_b7<)ZLhuqc>q%gnkDL3Hz{g zHZ@aA6TpfhgDqJP|Dt%i6!8+8xxO+RlyGrorEA6??8s z&iedvqSLxwW}tkEB$insQ@G^Js#lM`an{vq(&2K{{815lH;&F9Q;sX;_%X#t?ejUQ zs!#&_#7UYoJsp9ZfiP}>7;cDo&O~E@tvL%%a3d!su2#%1lAJG4tMSu3kh_D9#qoIjF|D2oYG1TSy;TIl6wT=eAgCR6_vnAV_>g z%6iAiuV3GTyT4VwNj_)~lDg;2te+Htir?ppRE`O9HLJC%&hjr)QN`xKkFNP9EnQk$9ZI1RtK85UD8K>5~vE#Poz1Syv{+JuuPE zCkg!@P~lEmVlUBnCh<{OPbBvJA4zsnobaAV^7)xniLXyuN#~pv$;)c^<~%}sYGipr ze3R~+O->S?`2#OBrMb7Q6s$cw+yP14N%mf6G~q7D;jYq#N6?PDqazof8}~w?z|q_n z6SyB{a1mzlV9e$rDCMDej)%$oj=(w|iA_8TySNx1^Jsj=B{;@oaFWO39FM~#9*^&N z0*Xnw%2VkvorvS`E|X4-_Sb*e!yGwNBp)v$XoU2yiK3v z?fMMw&=nL<+LYMwq}`A+D=_`BC?(@xfl&BYZBqFV z7Pv^sM!hS4XLfp6^zQ^!{(!rPAi9Ut`zpKA2Uh!C#fi$8ATzrxBZLCVHfEeBuk2yI z1Q%aMq`(CJ7O8wiK3Z4hqxFOI{VMwL9r^xNV5A17XoZ=Yu}EvI(iX347j|nuyr=!K zUkBijcH^iH#4#Nxr+9VB(luzX4x*QZUZrc&S{+OqbO`Oxp|o4@4->S9u4*^k&;bhC zU-@Z26|9wt*5N8nN2pY;P>pq@la{$h>Txmik*LbNUDR31atDTff9~P9uO8j921tHe zv+C50MKxU?fjSm?+OOGX`a5ERLIT_)X|LW;`m)1TtnK zg_ucHOYpj83Zr=Q zW;N%?RJJy2xt;klcQLQH&jVS zhULZvRx*f~d}HgZ$ZdFEoG&66bmD!56 zW;?o?9eC1|VX)bWk!BYbnBCZ7_TZ=~$93~AZkfGOy7ws1yiYaFUaDbs61$o$gTnnK;=Q}q_x~C;h$+4)c|*?0(B868&2XKD$g8w3M6y^ z{p7iOfA;Pn+LupKs|;TjeOiSm??K7p5bB!4NHL$Hq4`XrKPt`tT$=xP^f6yZ|lcF48h{iB<@{)?B6?Vdf0&HK*w><`jKqPSOeUDV;Z0mbW=Bxt(Z}cfan@dC9)k zbj+)e+3lF$dBjz)`4QIq1h@Ga!RDGY;umSeuc&XXOW}V-Z=nYWf4IoUnVXnyZehN; zjm72;mYchH$=t(QQ-KW@I4SVF(BBFF7m?q!OxpZJLDo2T^T$ajW7_V>bQN_h)#TAt z_pfi0{(C_PlcO2d56T9jnyrpn0^@9u)3e<>=^o*R!DVZqh7Cus;E}dAVr(R0Z5<@q zC^WRu$QHbft?OjBkEPqr*K zQCud&V^hR!DjEpPwHe5>4ba(UqQGY1aoY&PZDUNe4`H@#f`zsz9Gi{RHV5l%E;ifd zc-ywXPTLZf1^yuPO`A((bI9MerW*EP^4K;MY4a#WU?ZWM+qP6t+qR=(+n!2o2U=~j zXtV7^+iWJ4+b&L>PH#!oj&z!Mzkzw3?{A^9sh#_!o!2G&Ql$PzyVUTH8|U zVdv80c0Lu_1vJ<`OH=GZdfG0QOrN6#_D{6fE}^A%D!pWv(;Dm0EB1MM&90y~?F+QS zz9RZeLSv>?YO0ZdTpx z>#C1^LlxRBYNUNrO|WmNr6ONxx2m;vo7!NvtGDb9Rc6c7esOlh4pb-XyXv&vtFGDi zocQibs8-po?jcP3ox_i2(;-I{Os5!UW22u6~25I(21_kye237Xv$y->y8MZNSu(vaavv)8^ uvUf7bv3E0AviC5!viCChviC6rviCED0L9|iCo!b5w=op3Pn~?5brJyf)D~?3 delta 91 zcmaFM^Ok4BY!=C622S=A27dNb22u7j25I(m1_kyE237XV$y->y8Rjr>u;(&}v*$5L uvgb3%u@^E}vKKM9vKKS>vX?LfvX?T10L9|iD;QGQa~KNPt0&)Podf`$5ENwq diff --git a/software/LepMap3/OrderFinder.class b/software/LepMap3/OrderFinder.class index eb567443dc6a2b78104fad4adeeafa045d2ffa46..620b72c0c1ba946a9ca381aa8516222dc1bd6dff 100644 GIT binary patch delta 8510 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

Zgt>^M?ntK|=t4cwpL$^!mnTpk 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 Q2k&VWE+GoJJR9P_0Zr3aV*mgE diff --git a/software/LepMap3/OrderMarkers2.class b/software/LepMap3/OrderMarkers2.class index 4fd828c2f7b9d121221e1a89ac8fcd82e2473436..1a6f8faf09e14adca3bb8582083e4c76050d58f9 100644 GIT binary patch delta 2098 zcmah~Yj9NM8GhdH`_7)-%^@Ubv+N}aK@m(~HwocpHgavaL~`L8BobsHn~)F^Tq99O zO)qv@o!<28P)i%zW`@#wS7r{G+OdPQq++cWY1L51p{A%{skBt86w~)?kkVi7%-Qq2 z*XRA7cg{KAE`OrTf8^6&yZ~S(?R?fh%k&K3MGJ@YgXTofZ!8?fkbcUHmb^qT%1g`3 zXZZ0lUNP}ILQY3=SF)@#+0|B7-F?TF&Xk4U<5hjmoaXt1g`;>~U*j!G{E?uzkn0BU zhJ`or79sccR8LJys;j4cYqGPpeMfr_ClyzhH2M+8aSQk1&xA^y^au1tbDF-*TeQfB z-S~@zcd&;bQ|YvczY;vP%j%LlEBqLN&;5JP!uxy<_&U3jEt#0>J!9bm{7oP9hP@;B zyM+&NPM`D!?SHzH&8V2^$6ox)!biBEy}l)hGj7c%77PU4ng3&<0+$GOacy<7Cs|Qd zJ4RYn(&)t~4^vlG?RW-QX`R3Rx5er)6{6^1F7X(wU^Rn-#SvU;ofwSXgM$L<9*|I<=#FSE??V-k#!& zI8CzX8vT$j?2Xf8i>{+7`b~e8=X#5ZsYFMzN*ktIm8v8p4Hi{WLLbYT zRDPoi=Ml`}nx-aBaqAXXXv4K$TErsFC@ptgU$9U~)nl#l_Lo^rq<4>NR!dE4(ig_v z=_`W|MSxMW|IX||>a&04;GRJ^4i3g+_RaRs*t8#W@Pvb3$Lx*vZ!_T|m7bWr>5Acv z*_*Ez{+PYxiebgWp0GFU4_gji0`k=@JYxA7jO_sjhLv!HMT^@=Dl2 z|Cs4!V38SmiTJ@DmH=^%0uXR}@|1cu)NPf&- zobirrj~|s;fhm2nuO4ddJ`~3z*{nX#aaD3GK>wFl6|-B3M?Z{g=E^{a=Ev+CBzuPs zV-iDFY~f{D3OQ*k6fSgV@w5D*Q}6@yFsMae3^ey0LV}LrMmmXkbQbgJA{GcQ7K%J9 z7L!pe7GSBU$1>538qtcIL^oE5G-^dJ>ckgOFCIjL_zqTy?_ss*#~Se@){6aDCw_@W z@e0<9*V#USjp7uV#Tjf8=df9vM^Y+mktW*uWEAbP2puwxPB|Ohav^S$4M@ul^vGV^ zA@4)4?8ja5N!%@;!#(mv+$)FBCr{u@@+`hAFX4VA@l_S#`xJalmE!Aa4jxeR@C{Xq zZ>m-JmTJU9>Q+3gx}ep)_^$d2cB=>Qhm}+{8*jB zfRTm0Mi4(WCgJDCbUbDx@VK!YPa%sXEX73kS*0bklx58}s%RN42Y(nam1^iF2+TLK zXa&_mP?tPTbyN>Yz49okr~!)Zmao#vK3WBXPRebxn%2NWXXP!lmXVh(%6eMI$S=Hd z5j8ThM5}m*)-y@A=oZ6tGo$e$E#9CF)Px*f!BV<~iF0`g<)~w1i)Z*n=?)X%g@kA$ zqdaj+Y^7$d%@yZG-#Xevx5AbSg^xC~Gawu26G}2&p6sBvX$zwXvX_ox4WqCErqEVy z6J?Q2YM~UPTK+<`a+fHJe45(0OFm0|9JAS1z?x;#Hm)tCcGk%PU9Rjvl(vW1^${j# zU4m&Mp9)5i4{1`T&JKm9js!+=8spgHn2ETF0TX*oj7a`vT=^#L&?`cd*Nf;QQWDrvAJV{aR>x*7YFj;$%VH{{@|!38er4 delta 2203 zcmah~dvH|c75|;@`|dt3dED$KyPGE@;8HeEAdmzh#PEnF0m8#1NN{5|A&{3zh!m>p zNZV0oDo$^y1MT=oMSM`Fj58NnJEpc2OIn~*DYn?@gg#LFK&^d9lcwh;CD^~bf9(C8 z^PTfM=lsroyT=L-6nRGf^S##qETrD!o<&YqK7Od<0sP1;c2&lItm8EN1ph#6uzq)U zU97(&Rx=puj}CVB_6&G1jGyQ@gHb{PM{JDkSvkaq9kDio3OCQ+;=<1eT2Vn!QLzW- z@N*~56OwjDhoXgD(VmXN>fYV0T`?UO@C$;sFWNs4n|5)@aP3ZW#F^@NOUFh0(!A`< zHr{4hCS$H){94ClykqLFOtaTDyV!{<1V`J+-6@!HS##rmgW`|YRQ6zbnR>`7}qTT*@#1pTsq|fPC z0*B2U(J3FJW{Wpn73x%E-tSFwl;~JR3(dpcbXsg$-fYJbot9FWdD)wjS7F0t1ZTLW zxtUjQb1c`jxf^ZKkk?t^e+4xrul z%D#k?6qm+`h1XBQvT!OtVl*1hTlj+UqJ?7?-iR1?89!zFB+iyOB1X%M;ffe{&lsMF z(K=)3`2k1374QUf3vV)En{jEHz{0QC9FlecyB=d@TyjqtXD$53d^;&4W31@}epjvq zwP2!!-yeoMnF>xKDX3YvY9=M;(Vxu4$(!TXm@=5;H!OS@)ZReys~BqvDhq!fiGa@{X<`0!A7#FPuPk*sP@4|a zZUm;z1SZ*fa8$#Msm%|PTjJae3uRg4<2idir6UE{(PwKqeV#5$Lq`z`s)(`0AG)E3 zYO^Toiy`ud*v)-DGdUJ91{pjF!v-|FoKu1!i{?g*(wp?9A%Ex)TtTHQnr~h(O2P}c z+@_o53WDjU5zG&!M~tc|@AP)5*j$h@H(}9DCW}hVmXuKZ|6Jt}qn)_((@0?2DQMBH z5o4)j@9U>g#gLmU%}gxI@@KNR+3c7RH)}>Smh33BKvr1}(@ZA^ax7YLoG-BAD-0UO z4#pWUFQzocPobPHVi{e*t#l2`X&ftr8cw8H6Axm&cpMwV*U=!J!bb5OY!VjRKR}Z>gJy9KTg6-0CN7~xT*Y?rKH9_t z+ND58TqdDY2GAvQ(Idm?l_lttb+}h9I0Xc--azBRTqu3)~z+U-X?31tIet8ZL z$T#tzd=C%F>)5Z{_>xM*msKvmi}A23$0Mo=kE$AcMK$6vwG9VUE553B!Bl(kHT4J% zsso5Wp$_5@t9e+xfN!YpCkMJ!m4bN$_aa4=oMQsUQ(pKP@ zR)ueCJMgkLgyZnCtX0UdZ#z}dZ7gqs)=Aa03j7Cwd9<3=Kw!C6Mr)}Cf_jvjZl^mS z<8+?_DySBU_R0yWqk3p`MINMev>pz+CLg8^j9fG>_fZ2Qk8sN#+Q>*3HL`#CyVRB zE#3(@ok*vQNu)zMX_q;Ynl^7NWfEsGi%mXrBHxK&CyqEVCi$6ir8}w198b+{oxn17 u$Z>?_Bnpu7898<>J6=lg`^Y5s^;s$AP}&0D1kWc|%1@98qHfOOb^jOAsu-mJ diff --git a/software/LepMap3/ParameterParser.class b/software/LepMap3/ParameterParser.class index f111df03e0a991d276e66d844478220ea81464ef..8924c5c525ea2ccfb2dfa883e00d9b5b10365b4e 100644 GIT binary patch delta 467 zcmXAlO-Phs6osF6`ef1s69;WR2T^7+Dii`2Ga^Vq4H79yi$F?=TqFZQKeW*3$5d1# zX*3;mGb*WQIyf{Ksf`70bWF=y39VWgv}zHy=%l=h^WJmsJ?Gy0+rR6N{mLnt!9f~u z{M6|Lp>oS@tzvtu2Dg>KJ5E|j*mn6I-64;=xVev)2V|+f?4XOIWGhlXx3Dq$zbI#= z`kxyXcL*m1j8KWi1+kf`I$(lg^2Ma%_>0?#FI}loZmQWS+Cd{ngcXFBTm_~%zT>)T z8Xv3t357i646T&&j4IlwrJXuDxK1bc=;9&W%J%R=@d(d}(#sTKX6R#{ev-lzFZs#< zI}GxJ2)hg!L&Rh<9FOGgnLt!qk8y%=PV!2269ky#yo7>Gb4g;?cufPdgqY(tFA=i=Y;@w_A(tdsmdcZbQ6@2Q7YpjV z3vyHZ|Jk@OJ?Rt>;07AyLJjgOMJj~k2)Tgn6r0a)a;dIJ!c?!?dW7|oOCP25K>q;B(;J>Kz`5&khs62DT6Dg$GY zmzPhJYl15h%;!CYe2{e?aWRF5PgIDkhG`m^p+%%#=4j`$tPJsraAfUjt#U1pK@>Yn z6iaooOf_GqliI*nTKUF3RwVLWE?g0DOhl`MS&vj%;>xkXMK-y{7Pt6Gvz*&a96!HU Utgs{jB1 diff --git a/software/LepMap3/Separate2$SeparateIdenticalThread.class b/software/LepMap3/Separate2$SeparateIdenticalThread.class index 3b2ef0c3f643f1d8c2006da6dc7264f87d5a0f27..f3be6ae577680572f778f1b05b804d5da88f7d49 100644 GIT binary patch delta 270 zcmWN{&nv@m9LMq3`}3rxQ6wo#u{2IfIZ)CzKMG+qCi447A(O;3Y^j;c^ZF z>KIo&6JDNFkeJ$;Qa96z64wYbiZiQu658-gGN%I;bj+eMEUUnZ9$3{QYkFc`uWaa@ zO?|SZFShl=j>_!n*ZcoSS_S*&_iP|$!6gnY#F2H9vR+QCkF+H?wN1`!k8?|ru{2rB rd){+l&t5N*vkxw-~RhSQ#1fd)AS#V2UjZv2E?_ST|VH_u};vzfONE%LSlW?oAULgKJ8yEu>oxo~h$+G(Xkt}ErL97XLU zSI*uQ<=y0c$icze|MdADp2Krecv85Yvd7LLo*{#~aB~j@+=q_`DB~ggJVFhRQO{Gf z@B(eTL17SmYa)_>N_M zV8!ZHeqtlt8gKC{G35x`Vn49)7k2)^DWF&ee%TOE8rntlN{CnvDIFtnU`!c^%85B; zVofe=Dhu0kV@DpGDjOH_BB>mtl#4Ir;amB}p(5i^vGL1in&dE@Dls9InnC`V3Af74 tq$@IP^4P09cO delta 337 zcmWN{O(?^00LJm>H_x-p#%7e7G=*sivlU7XLgJvXivu~33x^$)oK{NYx>BynQPfUy zmfQcG(hNu<;uX{=mgw6!H%t0bv<5%7%7jAZFPoVnB8b$$@b>F{Ml_ z$%R$9v92s^DjSFL;7nfJC8!4QWc^Pl diff --git a/software/LepMap3/Separate2.class b/software/LepMap3/Separate2.class index eec615de0ff3822e3593e92ae8cc65b418b0dad3..1c9670ca7fcf3d746cfe5ee76f25eb62a7f87f6d 100644 GIT binary patch delta 1916 zcmW-ic~qBG8pogI`=BB}+`wFL0T+-YF_*wlQX*?o!3_*FMN?53GQ?$){AK2@jPx_j zB}Q~aO2y@;2xxh7$tBIqa%>r$nsZXKW9hggCuy#{|9rmR@AKSy?mhRt@4MwDSKZ{@ z`@-x5MdFmdDoi38T%aZtMug+OP2GF>AN0GbT;ls-Kw?Om_72`gNuj~T)Uc(eaf1q; zlkSU5N{p`9%iflr3V!SDAPx_LfL^$vJJbX9F?*O$7DA>;hHy6mq%-$ZWK%I!Es*5i-_ygVyaJ4SM||qH~FLL z5=tklQ#+jss8dVbPU_XEa;NH3Z~UE?@$!z;fZ{2R*0?Z`hEfQxaH=6~Ks2x9LYI}I zo&Qj>a^#0~O+n~P@9=uwKpu>vRJXP!6zrxTdfv_NnteY#H&6#rKY#4N0RbH3%Nx8T zd_M)r0Sc8$YAsdNS*j^k4pN*Pq7;{9%3*)&A%#5j2sM?X)J#rLn4F|=IYp1lY3d=L zQGYo@8FH4g8jJWG>Gn~ zhwf`I)u@Lb)5aXGO}MKzoU4*7jVW;k-~Ic%^pW zwc3#@wG$t4JmVU^(Jp*Nqa{GQNK=iGr}PO)(Qf`WBgToRC$-XE6s0}sNsaR_OM5!N z`yMsdbrhx>C{j04j22V6ZlW=|nR0Xs&DE{6N=vC!%V?K=K$W_kKGq%diSDHDwVbZ# zF1oI}=@;EY_jE5kP(L@;ecVj^iy7=CwP~hblW+_NA)y+>iidamcP@_`A0p+*Y!N#)~_T`zm`^x9rcn#={FLi z-$`%1A_@8*dBJg*{wUM*zcSx(x&9=z#v=^b zXoGy$IuGqo==@rjmmnNF&;f_g5l7JpC(#)<5Q*P(D{An#3A$P!V$6eX)(o-M7Tqlp zPg)#$*Z`Le!BdurILku3c*ZJ_U`LSb|Mum%0rnR% zyy(xE7-8NNYJgM<$58h{8%F&dQ=A`#5%ePS%O2u&Q4~lJ-jL3iCtcx{UXDr555{~M zjs=p5g)+;1C=0My7GjAMVyUddGTGy@k6i5pR?1ndk}D{Z8oZ-kg-@GdwKm7Q+6`;8 z7v9r;j)SpIQ?Xu0VuMaWvF70)ItQEdO_b;|Y*rt(XbHCJWtU&WHobu|y^HNy>y8uH z>E4QRcg(wx>U;+L7=wM7j02dCO3XqP7NHtNI2eK>E;!@lMR)#}u@XPyxZjg=)4cK2 z$ofzVOQ5#am%^$%E4>p7E zT0Ym>OksOXJT_ZmZI1M{ze$q4E@_VAZLUnVHy-`S=r*+=lBwi>koT_GTV%Gt@0+=b F{}1`F(Ifx> delta 1880 zcmW-idsvtC8OEQ({UCA>4`CkA1WWKhq6Q+Kt|T(IP{I_GdB7%u5jjz^$@*!AniNSt z2h-4CG!(@H{w4>PYl^2O&dPFjt#t0%m024)!z@zTSKfa<_kBOl_wZit`+nc1R<3I0 z1Ah#&6BLP4zNRpV=z4^DP#6&!y%nQkeLqaPs=UQ}Wy<6((=@KzPKxtBk~n!-^Fj9X z4X)=`UJc^Vpkei#RQXeO9kB*zw8n5Afuf0cH!byTPb^{2OHzZivKwC6i7KhZ9;rZs z?4yTWQ#lR2w;YY67;+aHxscZrcd8BKPtsZS(iS)Az3N6vBkNRqo$~8cuenWk=~Vli z@~1ew!kf5=y3#m`r&8~sq#l6-_zf=m|HaYxe&5_*DHlP4p#Ao#N-+n7lFEM?rFkLZzPiO9Ks&Mv9RpikHJQ!)57m z#5ZbsF+cSe>M2L5mzZfBUN=MUZjq_E^9`ENVrQTXbVY-zfbsI%%Ii=|inx_?%qm{H; zt7x;nOVwIU`*kNZY7PBachgbbL!WCcUDmyHP504%bU%Hk2j~Z_mDAY z_56@FaFjN3qBe1wV}|~Tv-Le*p-0%`(Hbt&X7=iFF4YsfUr)N*ImOL-nom0ap`PJ? zXbb;K&+;`r$2aw33DEP>&+$RMAW`~viPp~~PQQ=|dP$}^rs_ZCIlUrl9gFneQlei< znO>Fc`ju4cHEGeW(Ep0(wzf*UUYEOiQ%%2hUr?Kd=q(M^8#+jD>tMaEL-k9I z)gLuM?`WcSXa-0#!I}%ve5e)x`Z`R@o!$k1-G{Dv7y;UhK>Zv+dI!Pif^N7Eff$JH zh=M;xITwde55}Q4CgXn0bo>SSViEcw3;nSIVR#t>Q0#n}%Pa8!Y7vh25P@b4#%Vl= zZ}1RqXcgKq)C9vU0K+X9(bfwO+dz!8NW@q?M%fgXO-HPyBhE4~)>b&K!8j{K-vled zcq_#O+kuI80F$g933d#Lz8mvb``Hs@nC4ryIKn*1)D_by95dWul|qj?&TxJXQfWS( zrX`p~*_ci1kVdaz4plkU;TbyYvg1gn4=|6;V?KR~1$5ng>E9!RIh zKY~n7Ko%z=o0G7V7vMS0LJsHRdEVf0!i!ukcZF&!<611|L&)QESiu*uk}n~juR4C~ zvb$I%ieF0*R?83+$O!yKVjUBmPliWky3;Tn>m(nqN&yO`5bLEF8)PdsN}bD&xY{Wc z$ypT3WxOfv*sLB!iT1)<+8bUSi7gt7Qk~?Oj51BZ?{pTnYBtJsIkxL6?9erMM>nBD zy{ObmROuy`e}zBjH>lQIsL>AW2C&Dy2et0e?nR38b5VzRIEW=Ugk`8lJ{qtdjVM9W zeK_WV7QBfIIEqUs!q;f_4bEvb&sYkvc@{>-_vU!~DvH6^73pm%A7i}RISO%}PMZCd&$(w93mslomvn>9-W%Dju z%8ic4Er(m|c|K>k{IR{j7i}3|v0w2mTh1MpCu}cBu&tCB%a@7vq9ocXneDj9UXmrY c`re<5Zc-m2SxUZ;yx)qgA+xo + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/software/LepMap3/lm3/README b/software/LepMap3/lm3/README new file mode 100644 index 0000000..476cef3 --- /dev/null +++ b/software/LepMap3/lm3/README @@ -0,0 +1,33 @@ +Lep-MAP3 (v. 0.2) + +Linkage map construction suite + +See Lep-MAP3 wiki on sourceforge for documentation. + +The files included: + +simulated_data.zip : Used simulated data, commands to run and evaluate MSTmap and Lep-MAP3 on the data +simulated_scripts.zip : Only the scripts to generate the simulated data +binary+code.zip : Lep-MAP3 binaries + source code +binary.zip : Lep-MAP3 binaries only + +How to run Lep-MAP3 (compiled classes located in the folder bin): + +java -cp bin/ ParentCall2 +java -cp bin/ Filtering2 +java -cp bin/ SeparateChromosomes2 +java -cp bin/ JoinSingles2All +java -cp bin/ OrderMarkers2 +java -cp bin/ LMPlot + +java -cp bin/ SeparateIdenticals +java -cp bin/ JoinSingles2Identicals + +(java -cp bin/ OutputData +java -cp bin/ ShortPath) + +How to compile Lep-MAP3: +javac src/*.java -d bin/ + + +(C) 2016-2019, Pasi Rastas, University of Cambridge and University of Helsinki diff --git a/software/LepMap3/lm3/bin/Constants.class b/software/LepMap3/lm3/bin/Constants.class new file mode 100644 index 0000000000000000000000000000000000000000..aebe048ca9345432f5fd15179f4c50f3d4a881ed GIT binary patch literal 1077 zcmYjPOHUI~7(KU->4OVY9g#;=P|!l;AsAF3P^2vdhZfpWG;uT35r&MdwgZX&1%Hj{ zLgGUAF5J2If0!80y#vB5=A8RI&i&3e^W*Q=Zvf`-GKP>qVy)R|`*y=`#}E-n9oZ-L zv}ZRCrc3)rPTd!XS*7*Ds+AWISpkEm>Rw48u1H~{%veCnxm-}3FYT5EBFw9R+c*hW z#40|V5eQqwStU~pG!2zkk1W=S}NxBG{(xWUHve&RQKG5>o4=t^mvUUtu#Kn=aa-;jKwf2&~ssW z%k~c??%_Uf@tOx};7B?S!OM1N3Jk{Ey?&}+F3r+EB!-)U9tea{iNYBlS&SF>BLI-doNCB3;M!l+7=af_n< zq1zVdvd+Izdr=@+X&$%gPTo~YJ^wRPYNHt81Yx>L@oH|4Y(T9`BbTL-8`8+NXyj5f zawQt+TO(a-q-TwEtnmtw9>_zuM*ZuT&V4-7zOJKrjf0o+L+pv;CT>yTHnTqw;T!m9 zV)ztyI!K$C(By%MAx)-C%xE%e;*lovCi*ma(i^a52MZ>aPO;p@Pj t2mZV}T16@G!<~7XBMQc&6JJodxF*RWAWh>Fx=jW}*hP(Tfjuqt;vW)notyvw literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Data2.class b/software/LepMap3/lm3/bin/Data2.class new file mode 100644 index 0000000000000000000000000000000000000000..ea77209964f9060d4a319876dc58a2420200dc3e GIT binary patch literal 8787 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 Z;VYgW;|{(3v~tmR>yswYvIF=O{C~WRVkiIr literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/DataParser$VCFParser.class b/software/LepMap3/lm3/bin/DataParser$VCFParser.class new file mode 100644 index 0000000000000000000000000000000000000000..a9c9a5b30a698767c61e1c2ddaca84a8f89284fa GIT binary patch literal 9452 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 k)gzMv)7bC42)hC+bm&ThqqODv~_1tMwG_^67 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 F{}1P5Uw8lj literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Error.class b/software/LepMap3/lm3/bin/Error.class new file mode 100644 index 0000000000000000000000000000000000000000..4a3c416ab77accdc66fca926d8b37fa4b20c42ce GIT binary patch literal 23325 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 Y@nTH{wc}zctgW3&%s;`b1^oK|1Im<#Z2$lO literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Family2.class b/software/LepMap3/lm3/bin/Family2.class new file mode 100644 index 0000000000000000000000000000000000000000..9517aa3a80b0db1b262cf026b3288740cf505aac GIT binary patch literal 24561 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Filtering2.class b/software/LepMap3/lm3/bin/Filtering2.class new file mode 100644 index 0000000000000000000000000000000000000000..aaa172b9874890be354fd42ae19629265394be2e GIT binary patch literal 15798 zcmbVT31C#^wLa(0%)K*{JDDVt8)gVd5M{{%Nx;FdF98gOfCPbn3qvx2fox4Ch_=;M zqtx1J)mFs~@mW(X)|G*(Ra&1~ZGEm)YpvU>t<~D9?W>AN-go{xTS8FZqs`p^{>%B# zfBtj6bN=&RpFDj3Lqs%H3mT*`c^Ajp;?eF{$EIq7oJ@IJBHJQU+9DmBrYzsMCE6Tk zay2fSUtiC}wM@Q+ogF>#NJo5iq^&oq&wTv)-R2bw#xdn~^tRV^w8XZ>T6!aGJ?LG> zRM;JD@7xw`=!dFm+!ztjBWsf@Qp_jkw>u44PI@syt(s}(7n4dc zb`)B^mPkCZsu-$8`>tpS)IHaVl$ELg6Bdw|ed(zn(@9K@8v}TcPd1qsE zds=^(%=TDM4`i0?o0ojeqFiK4B}*HUee;_;JGMo;LmwNm^6t>J;XG{Bp2yYsxrw-IZ~Qxl1V;;PQXqLql#XdMitWUM3ZvKFQpkK z71*U&CKZz3Ak3Mc8JpZ>FU__`&Nr!uM##v8CWY+MB9n@3PL`N7ibhLook_>obtjuN zhI~@D%%l>#wA`ezcIzo79cz~wO&VvHPBrN`yWbjT};vTw*h}P@6$p0WwP>?d_4p zy&cW6t0uJ*widhH+}YmM7L7+$^C^lz?Ih?Y!#K5;R%mBytfM8VQLc$~Xw=X9$AJ2$ z&$DO2G)&t~ic+gScV0@BJn@Y7yCN+u(Qa_j7>_h>g{dZGl82?$W*dr7`j$ywqizqK zPkjbmFbF;y&+dsw+fBNVE`mNryFoIEbg|AUD}XI=Sa>wjKGUG@FpbFIu5I`WdSh+i z!%g3X;F~wc&ZsVFQ$|@5>5i6oX$O5zl=}OiIx)+xlc+Iiwe+~mq#w}b5P77lE85Y* zGzwdAMCas8Gu?D0p^%Iq6IW@uN>B!m}ps^L8TnLE}OqNsRe#{8-z-MOidOr`MM(A zJ<%1>me{85DD-&N#Pvt4a^_d7nzY(YKY>zKdg*rBW6)0rYlZSECfz|l!@fknW;@G4 zTWI^;nUmIe=`Om*pu1DhlI;Xcx|i;QfRx=Whwc|mtjm^i3i1Vl5+?1V{ZPV9QMmK* z*;|^LD{HaIDw+I#lOCW4v6t8c?nWwduDOB{oQ1rfw~7Y&BFv%6AIhaM6D8T1mIw%GRy(F8E?B2~!GD<=JcUWE+W zIwLKBLnud0wgi&~mnFcX*2s>&NUxdnI=ul8j@@X8ZjTEhGX;U8HjN>1kPLatr2nQr z*+Ue%s<>%H%B+SN@n@6%A|rH60w*m*{%X>@vYGiZ@1S5!g#9;@-lxCIRznz(cqh=R zXb}CnWc|z>`hY$%=tH=UjKfQ{n)FZl7xugZ3maE0Ucme3EV&1}-|7{PC8 z_QZp>ZHP!=)9l20Y|mNJ*;>-B2=`aLImX~eNv7}>!iBCyMUTbp4h4KT zSgoZ?oNh)7Rb3mFgt!Ti0yFm_&bAi=T_09svSY~F&R#fmJNi{nx-#0++XflU`HCwa zmY8xbTqtX{WX%h+w`TB~4IVKF{%nT4T*M)hM{+TAx<&DrftOk@kLEE3AA<-pBco-o zZ<9+T5^%Ifw!`D{u_ljGz7;Vkya^u{FOWGCk@#AkJra7Ij?%5ZiR znAV}*D5`3K@nm(54eH4^N4y<&k_7rCDB0kT5>AyeYCcw*DpsRtk5;wGB5GYRdrGaV z5?auOAzBxzozSi>xNcr;@){*2)o*#Ls92N9>m)95DPxkgon~?cPnOadCZEY0faI|r zIk?7JW6d}xx1B8~l+NyW6pNZN?EVkC)ic-Eio0OmXmT@SY(Na(j%1cZJ38a=V36Yf zNdvL@*K@0cR;6ynvD8^PZF-HwY;bh9^Hy0eux3y!k_5#`N^d$$&KKCs0V^3d1akx~ z<@RiibtRXoj$)?mS8c3<#CmYb0Pe}WIkD_)Kp^WaL)Ab)7VWT)pwJT871*Jpr&n;W z%b?MQME$vd_Ql86}IhcOf|vZ7FHVI)Ik6_x8j~HbzTkl~k2P zI$BERlpqQ`pD#7}G8GC%x5vamZH~tEffR52L%z!3AEjV2gAF|Z;U>HlKTi)$s8i!OI&>-o-b8bX(^pjDQhi5fc1F+E$>jHW>~xX6LUd z-H*lVQ$0}d*lu6#oD(!qrOBjDfl7=)QH#lYOznWPv#q7x;2mED($YXR94uxdS_b_Xu85k`UeQ9JraYTDjMz#A(6x{naItLV8_RagDXK)Deed`91c!hD3$Q#b)`J6fzxI<>o&_!z(9OR#u5;d&lIz^1DDC zAWBcvR+^)TKwyIr37<#vxzG!OYi6VsoNI?T)4R^4} zcC$xcGv?AXll}v9X->tRu&yC4y+ycV&2937Y7v^(qzzbvW~y!{NMo+a-?h8tAu<*R z=Zti3f_w2Jpzf9vk*!sz(YoMz^Xt=9DB!e&90s(@+t}IL-5iBF1L*x3t)47ej?@(< z1Re*FIztK$ZwB5pa^nw)I8{a(PCb!kLwlYo=c66Tw)A@d??}0&-!1e)axMKH#5+=K z>GzT7k3^fIg*2ObBFUznNU^CW5^U-@Hd&A4ntDfSO+ArV!?QrrYM^WLJsxzCQ$u|* z>X2Ts!JcBX-)emyqBhDiZz+yOcZCM!`!_z zFH>Aln!A^3ON|GOy|h@$Cke5o@>4Ib4f3->epX7|Doi_mFRhjVO^!lZyRylteqHKU zm*2g#?rycV)9|~RM2cg`iCxM;YB3L~M2p5F@i+l%nn+=+Zazx&R6(cEWLis=bUIbj zMw}csp|y>sBM&x{wjtZ_b()KG*nC*Z81x~eRsnY~k~8Q`JT*~1TT(O!ZyM_K(qgP5 z!;M$fHb6_3D+)z+uOtQZ$Gkq!(8RXVv>Zyi^wJ3s!cba`ptb6#v}8{;$p|KCEyD~> z@Z~S0O`~^g#qWfz`zdy(Vqe511BjXw!4fsCKh2zVhyGAdM7ZlJrv`?8exI z6LYV*fs8`xxihy0d(&H^_tWt~XHajhah3+1#rx>2iC14g@PSlqs=*Jq*jl5@^K8_= z9&`#j4ia`IE9*HE({6wzHA6Nn(A8G#;ASM2H(~!`GzHn!>8P8BY^v_u$?I_FBe5tzWpZf=w2OUjksYWly^j_{ z^LkcF!CC5@u#e7DWml;yUDiu=RlbM5{Q&J~D!6zbU84F|CFs(ED-!fWd2OqP=P9v!o+Pe)JdKT7xPS(zENw0Vdv`99R1>KWt7^IQa8Tz(H zo(uZtWzo{pv{D+$;va^iwR9-0^Fix^FQEm;lBSiV-6svDbs=b7bW~dQ8sQm+qt!5! z)^|Yb;xC~Emogl!6+>xV0$ShuLRuRAm~ORcu>-vYZJS+TXFshix17}l{Rz5lC)Gg< zrsHpc<#e^|r#ln0_W<3Mpr0q`7YAtC3|GkY0NvFjt^4Ref*!e+Jo%1y_tRq`S9-{A z*7P~qa+W=`d!Sz!bt=<2R$1fanD`2)`IS(ZAJQWF5uHp|0pu=+itJPim}9e+-tcDn zFM1k`gI#(CC4sSKdKM+ws59v~n4}Zb#?$j~RW5n~?E-{$jfEO9r95&TBApLWtwGZc zk|{9&+^;PV%>xP^^g8eWy$Fx+^0M+W<^=tIO}R5ce{3i%Ptcpl5&z-cRw8$awls=jA26w*MMj(r;_jgtdS0%GF?0HGQ=h{ z)XQE+*ws%~pNnO-&nps4HZv8E54@kW;s85f#+EC=u8f)5(ze~q4UqYbSo=+I+c)FB z>lR4q#{jWg0Wp%JDf7$eXV{;+=mxqQq0Sv>xtAWM zgxaB%Y9|k*cjy4SS#G}E$b5S_2Rl@R;M&A)I55v;>{B~bM<=ob8!pUQpmxo`Ox5g1 ztG#RDeAGzJ!$`Y-YX3HoJ^+tr7{mtMZqSR^MhOpav>O2WdIr^_Oo zJg?>4Y#AHGVz?;5!Tmg{#?@!AW#oBx54@o|t_~tTa9@2b`6}|NghoGAA2~AU>a1}G z-MMzZO1q!8BIpJ#uK_vFF7j67l}LS>{%y+kpkJw}c6Yi#wCP>tWfM?Hm`wP%1Y&%tb8pli|R7L31( zUc$x1%St6qQ|7ZjtrGirf>H^{j3;6y4efXGBre6qN}y~TZ82TUB`|jvRC7F+K@kjE zLZ>H7aSC!dTHR@rR@9&znlkCp1m}qR;2r!qi-HSo(WTE=zcyxVezjXpP9Zc&JrGXq?kts@5L$pLz1K&fTy z)5&cn#jXH<8!!$XlHwZ1&SE;SQ6T8!Xd# z6B+(~a^~*m83~@fCdv44O~~t5rm*}-nSh(GpFRlrvcb)?Obc>)1rOIQdR|DGn@fd( zeLO!SiJII@OU|H{RJ~`&h~}ESOw-^YH3g1vVLy$q+pWS4sfF|vvQ;SDz7xz1=D`Sq z1!9SXc1P3|c4jTv-0a*C%o|!~YzP))>SVDBo6U?tB@m_)y$TinBTVZxd?D~Ukn0Uv zMsFf~e~V6~x8dFXOzY_#ge!lg?YJ5GCcOu|{To8}cVJZifIs{IDEuK1_anL!w>tNt z?iciLnAyiLy-(n$J_YrI81)%ShX8n=^GG_(C*U$>E~2V6xMqnWTX-Hj_#RxI{FYt( z9P2plyZC+Fm3+o-&Bq>XEPJ&R5P#1F=1O4tnr#ayqt)i|BA6;r5GC7aUD`}u46}4l zp;pdIP;$~ZZ8V>Rk_&5ea~(=Lt>t%ksVc4KxA|n03{ah{%-l_vrAv?U*SQ|8ZhDG) zco|9_Tn}yK29&(?N2Fhuqm+X+E>vTYC#BbT1!_z_j}m+e=E~)JaQ(j$r9A#E#kdir z0)840BA`;ppV16ng}Ooo8|px#R%WGEmI4qwiw;vAgqL%ea_|`C&`kUtrUiI8L@pkH zqr%53@Hp@%(@>fGN1D72K!n4#I;7PxfTQuS&0l4(X8=2qd*sx%Pa8noSa4(``24`( za9{%i1Jv+E!#!jkIULJDOf=N_xn6=S1vAG3{iX|S;-ovniRc9H^*hO5mRFkKQ?DZ( zD2S@1JIRai1OU5M4FFKUF}@x$(y@__`c>#v8q&)XyuP$Nq=%ddK0WNVTsuhz9QtcK z=yQ_)>g&iC(lMv2Wk-$25zgtSP|y={S~*o)rNcGX%dGCc9JX?d-2;EI$2Is-@Asz$ zc7hnDNN{9F&?CbduD($Xv)nr+W)mm_CQc2R*-)0_2m{{~s^o08d>i~ptmyNx5D+rU6)kUa zN==qGT0SEul+!fB|4=wr@zoLXTfWI*(-F?gt;u(U1N~H<1i(NR&K3sqgN4mC_z_VW zRv?_$7ho$O{68Pe_v2hVHo%)Cs@caeD=!&G@|Nq#;|%MFDb#YU+}#703-4-?vn~Bv zY~FoTeJvGQ#txKLg1V=)tb8B0XOQtNIuQyL07ev&kBeZfBdCOfG>(g@6semkJ_g1& zhE{M1t>I&7Bafp^d>n1z@zl-}Xd5u-TL>5~;xc?5Q%*Zkz8N0<$2)&{+8AD=9nW@F z!bZ{YX%row3VpQkNfdQ!$8aaG$w59X#9c^aIVn#o;;-T0?}E2@M&Yg;Z1-_D>fA^i z?BO2Rod*ZkF&xL(9Qr$gG(or=c#31V3{M|VrGIiSM(7--4|p5u3}ES9ik_QKrP~yG zd-+^Q@+{sCl)DmMNT`^66`jFnqm;)xX+58V+4A{%n#w{s!1n@EB{^ZEsLH&^dK7lr z99x*xp34HqIAif0RD2lQYw$PNHvlSbg)s=$r>VLWc7=vEpo0q44`I$jWH|(S3$%kY z+8RKL!A7by6}vNzuxiKv7_>q5hz^2=HWcb#M#D3dqZIL?%n2d61~}h*@(x}Yrw<}^ zlsB{~$*;lRL_{jTpin@8qj!UkK{vQ^qT{szgsoqJB>L$`=L-8XbUHZ@dtd_R0rC+T zL-kxxPom%h#K3}Y)dS?0m6etkGLY88GWJp+p;~h$AYPu#Bp*gEHgbkUV5 z>ZvXQV|K<*r7gG(^R|=49V7-k9;RCbQ=J7Pt%G?=FlF<(G|lHy{sFjRby9JXW+Eja zx1u)3&a)t)k&xrf;!JUNMEalr85D7i>ny!$WuMNL4wv?Kv^P0&kyOT?3x9g<${G4_ zl@Q|PHE#LwN{r9rLk1$@D|2gn{u+N-(~QE0!U0FPpr0-e6ekuy-mW7F} zs!%?Dwyx~6*s?J3yCL0C71Etm%^}?-KYCSjjTN*Cc_+Lp=Gj?e`GZzx%?L+0Byb;!WP zhD>b8#D+|q?+@m8)_{Mo91wOfomCYKWcYpGGU1hiz8ZHwO$>U$s;|Zy^ad?#`S@$D zqhpZx#jAVM)=6+y5Vy}h&9v-3{CjmK@|RmCD4USI9CN_>hpK-j_p3sEfT&Ag6M#7a z&l3IyzGeO|x`>U6AhE#HEYf%P`>k5S{ssvG!Ll)P}{72FT#$6Xvg zNBRlse2_sQxX=;MoF77jft_@`*KkbRiNdr%sIgOA-B;tAB4bWIhs z3=T$zYpO(GEiTN010Ksild+JlWxF-yh(c8OIpv5S${oNJiGpjs6YmcE+5cBz@&MMS z(DlehheN?Nc3<*G`GTLrb&@%x1z=q;fb9R5b_7g;H3y?N?tYF&HZ?bJy-HFX!%wc( z;6F(DhiEL08@SsWz9*m?SrPH7IUtNrT+r1{Z`~!}kN8O<4Wd@Z9F^BvmFGoDIGy>} z9Cqc_NLb!aBZGRG<;qS{G}mMj6K@A~KLBh+GeFoI)Fo}D_c>T4q!8&Nibq0t^d8J) z=P1=>3N}#VJK;|50<_*kqY!x<%lAcax}GcBAz zz9h$_hYgiyGLUC-<$19omM#xTH)&zFBaFkv39>PsOz>^?Zv`D~3b9_2f=894R$`)P;hr9UmL&EdRI zuH~^>X@C>BbhCV^GuPUnj1@xgPcG*kN5)QG zp)joU7l^kXLb&xX!jA(~&%Xq4{tD3h2(mAa(wY1iEa2D3hde=T{2S^}px9A`; zNE$vF@$z5Thc7z{@oh&jzlU?x-?$u^r71WYRr3e<`0+#Jp+3U->R-H^{|%?~F}|Pu zgwMxU8aMJmoTxs-$1VQ`rNgKl-~kw^Ut_IWb10jB0Tu?6N!hfvFlEyy**1+7+^@;dCb% zDGyd#r!rDrta-l5NabMVH7X-zV*O!tZR^APzxZ}IoLuCfu2A&+2vxfjzU1*IbTaP; zp8B)0PgswQDr!9`RB4s$Q$3=6WS>HKOk|{=u0n1D17xil~C)N&{vU&f5kd{nIE z(rC?3$7*@lo_s3P3TTQJplMnmP1h`%tre-QFR|H4Z9UBe%)?0ui+n#yHUPUxH@z-5 zPB9vkEu37;C1{m1#DrqwW^y_96z9p)iKhoomppGGmwqJEr3h3=D+be}$k0aPRDKNk zwJ~IAC18Fm7(bTAXyb7FI!-ZZ`-TZ=CMWO%ib?SexU@I$4~*eE-y~y~B^fJIj1}9A z8O3^w&6-i{R;4duZW5R)1#@L!t{hUW0ArIO)hRSqt3(R6iY95*SeQ$`2^R}d@*SlQse9nR zLWKf+pdQyw0sa+SjbnB{%}|$S`}sfRi-S?s0KEV|j$hnZN=F+OA5S;RMJBK9(|A-V z?vEcs52Vr_;3se@{SB^V6a3rsRLFS!f^Khe1o)Z8CTD=3Yix1_`1!^rJ-{zCHW>l_ zU1O6wz%Mm6<)P|jJW%(0JW%-x9-aXIp)tXKTvHAboZvSbDjpY8kaZ*v!ZVy`doI9l zqjf+3rN$L<23-k$FC_KPONF;zYFj`?ePizA64^v)oVY0 zykj39R5dSQ8HW;l7?UJ4wyT^0&5^3Y#F+8rZ0eeUnpd)F!Ul4q#y-u1`acA;oFva~ z@a#@#zL2vbq4_gM+w-XeyFV9OK96#=`LKZn6x0?%|7+<)Z4sS<@;Yq^ZP4myv$mAF zw3BI@R!;}C26{qUPETno=y`1=y{a|Qd)j*XNIQ*n?Q|Zgox$bWMxLX!@F`l9TeMc* zu5IRvwHW_E+rqoFt$eH2&U>^DrE2Q(knaFYJPmd9^Nm`8x;z|7^Ax^nw3!!a0YHaF zPvAebk=tem?p&V5&B&RE?%u=Ep%|9v!olh|tjUKg*e>9+9Kcm(3Yjxk4lW6CbIjoZ byg3Zbl51o*OWZY_h9W-ALy{ZtI^ur;shwB_ literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/GammaFunction.class b/software/LepMap3/lm3/bin/GammaFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..dc5b8e1bd148bb30e0b2376eb665d86975144521 GIT binary patch literal 2336 zcmZ`(TWl0n82(OoJKZkB?6NH7P-|K0I!;mAauGWSv_L5qi-HJXp2jTgilhzcpugb))=e9**1jm8%fNi^}rDD^wDE4Rem%=y3b&wu^S zf9CA@6DI-8#l||+2uxhz3=TTI!$r58^NV!|3&giMJDm1{Q}o(z&uq)OWdUtru9zz? z76@6b>jlEg{4LoiLa5hK3r!%_pDSi>8y?JLOLsb%LRKKr@4HT6y;I7meN`DQZ_RC2 z)|Vx{S)i^^3{(tl^|bbA-Ayc!zbGbSN*$5{#>JvmIpwW78W3YS1>e)Uehh4(b^Yf3 zerC(bW7?@@yE-TDn)j;KwNe~v6o((xx(3Dy4P(WrTGt2b)NheMty37<>IjG)K0Emg z@VTFitSvikew8y+Ejpeny8hr$AzRJ{HLjtn)x#>I5V%2yftW&VI@-~}=B_X&d9*x($I2oRuQ7CTq)W~eE(id@Dcevz~dFBy+N47Lj@b6{M1CCqv zOFSVjR}`ozaS<5;haj{iN3O%=Y-y02p(0u1Iy+eB1nb;jofoV(3PjiX!zDM{n+qoE zvf*h{?O+BEAQaTB5pg8B)^XoXDJW}a9z*0PK@D3%@EW)V6NvSS0p&#Q>eX>poJAY$ zBGeVlKEn=MNyPUaKwFG3=God|L}gfNd7Dejy~ozn`_b`pQtOl9<4D|VhhvtN_iaro z->IHOW!|;CB&NAZTt(L;u66@4-3!DF*Ye#X%oqx)%s>*)V>|O%+f9h`9H+phb^)eS z&cZ@;U=g)l{4d2FScZGhgH4p1DKnHVWtMV)GDo?MGEZ5c{U8rqF`zQAOY)JXtl_(B ziE60L!6XVZ>ovHJNMoM%Dza#+BXk}z6bfm7v8sBsVrGRqbd$NTvWQuxc^uat$1G2E zb}9dBg6s{{sYtVf>+RC5GhiPL_dBy6(>=3-77IeV~l75qCbgwY7pkz5z`pik6Po1Y3v0Jgb7Nw`F)Tb~k&{H;^kmpOjxIZD#ztPi_og*6if?0M|Mx05mG)W*;8S7Yq?nCU zq7!3cAwCh^I4%0{Suk6FsCzB?gNb5eMC#`877(onW~)}Lz%4`?qGBm~OLOWvMG`BC zqU`4_+)AV~V@CzCx-|Ov7_3OIq88qtK*tDQ1(O^nM`y5#c8bG2xQ!^u-Wzc{QA6Mx zAoBP*R#PY0(X0w0uczssruE%8#ji~oP2~6l))F<7>G$cCMvB}%gmpwM=8u!V|8tuF bt>UI)L@=ouBgo3K)J->ekv9<5;I4lG@ave6 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/IBD$FilterThread.class b/software/LepMap3/lm3/bin/IBD$FilterThread.class new file mode 100644 index 0000000000000000000000000000000000000000..1151545768f725f06cd9bf7d7d1e2ea42e1ac3af GIT binary patch literal 1081 zcmZ`(T~8BH5IwisQYZ`5q7^6=L6mk83WYZai9k%6R86eGM4vA03JYaxw!22({Re); z&md1GzL|(7KKKLt9sUfXp4rxbrli@qGjq?*ocY*(|Mm47fCVhZ5m88%R@W!5I(6Un zZf$$EuEi0hcSk?ag}QdP3O6=)?5ZC}mqO~udoyrdy;-*v;(OZLwY{do;N9{OpyGRu zyS1dyTWbUamL1n7Cf&vazEdw;@jU&g>@X>AyLk;;2h1J{%FLY#eLXhZM zqh|L&;jD=yP9596!hm%1da$?2 zp|z%vDmSXSzM(xw?6xy1P2kw1;D2V!ei&ZhCXmN;92PAiOkBnc8+9*S22LS&tl{l( zwmkn0FMo&4cNF?6zOL?G)A!ry6O~5bRc$U8XWGpSv$7rvX32GJZ>_GIO<4)^`1avE z%QX1J_=EI<64D9!dZ|TVQnDZ7mTmyaq;!*3gqRctdA5+JafaRxw7YmNTGNL}TVF6_ zsY7H$WG&+mVmKws4Mwny@xPP3nqFt+?2BRtc5 zGMOS}HdFkJ-0jCoWoV5b{Qemz4_y=(SD z3P@Zl0Y9Tpc|=96i$DU2KEY4nCsY+>&arz5=>y2}IdkUBnfd0Mnf>$cpMM3gfcJE0 zgb{Q3?98g=_`6OZ*0+6O)pf)P=^g81tK78QM)}g#j<7==3ATQqU5i}T+G+|ypX1iW zWkRWg)ci;nArFA)~5a|idPp&5Dpm_fRREB83ThDCB*WDn!Fh^ zprc<(69$q<5r!*{D=tQ@E#a?svmL2;w$-dzz9Y{)Wn5wx=aR%}z z5c)%}t7cI7!U2}qQ3=O&93y0uqy2FV%%RN0E8L7Ff6zgpCb66}FpmX7G7w=!xQ%d| zdCr@X?!jtk*&kl8+KM6_&)o~9ip`zo?RE)``H?GqWm0$%i#nLF!hdcg182Y;G29U0 zl3O=j+ZQcvI#p6Lg;%hwV~I~(7XvFe%gnTU&Ccb{o8}|AnZ-XKinR}Kbw*zkgZi!zBsQ!$w0_FFY@1fvrFnt>|T8MbBHB2e?t z-);Yb$z1d3og`3CoF}BJUgX>2ydx*GpVOX`ToMe^b%npuw1Plzrw;8Oc}#QA82|ft z)#MQHCjxQ=fOJ}p3!miuAclAy=F|IZ7vp`hSh|69@g_!!bOTwrj2Dlwbd4`HO!7L$ zZb1Q()W#5fgban4pa_T6ohF?ihbi8rB!g@GV*+}izE@{p=0`lXS^1sU;&qI7Fw;S? zbZZZZ(yia5Cf31;Yiyf978C4if+NU1_7I9){)}B_1iQ%5r#x<-DHH}rV*fo9&#;_@ zc9$P(I!NbP;pN%e?3(cWeOP}Xt{Cu&zhHLrCQixBuOr*R3yXWG4)Y*wu%tm| hKa9RR?D7tiRnl%_gw=1eTEiyZ;a#>UadW;4?H}sVXnFtu literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/IBD$ParentCheckThread.class b/software/LepMap3/lm3/bin/IBD$ParentCheckThread.class new file mode 100644 index 0000000000000000000000000000000000000000..9e3b6571e0c79e98b7f176780d2e1540e899c2d8 GIT binary patch literal 3270 zcmai0d2AeK75}|&c6auewH+thc$=ef>IU069NUel=Dw721qHiveb${08v#6AX)GaLF6zgRD~)~3T;VKjuNG)5>+?~BIRtU9e&@;+H1=V zNINs%d*A!s@%z1bJI_y^dm2D99yOr^vBZ{+nw@smN$1-SJITS_hqI2|XTm3_7_g7n z4MTRizhTG00VkO^5fD_Cw7UxFw0&^M5%^N+zD9v0yk(QX$U1pJysKp0ozJGy{aXsD zp*|anvaEf=&7NTJosJ5^e%LzqoU60PRT5sQC!9-B6-e)0%phl{Y4xt{a zOsu5DcotS;4U6rw^EMgsfGFfsLk*j=S^J)@R4(5Z##%I)An5bm(r0g53Y%?Lfavvj2i z3m?Q*a+5sFc1xuDoTCEOn+RhYc9_^cRb2_SoQ0kE5VJUx8X98k+TM;1P1{;@TiA^c z6GgVCE+8?p#A4MZ_RyfWw==Nu(*3`E^;h42D$Fc;E$qX7cAuS0I=Ng8$tpF=-Y`A} z+r$AuS*dxq+4;j34kAf+!#0!l*D{X|4U3~;A?k~3+h=AlyLfF#2c1Z1!;b44YLo^o z4CxMxqzl9C8YoVIAkut~$wNId7Cw$_DSf`xk*Qu!)a_+4Jh#ox4mw#jQy`Od4yBlJ zSx%%ks^ggrjerR zZ`L}_98GJqJ8vfkx7iu@%{6f!6YCx+WRp&3O3$Vs->5YjVS$xMr=4v3ke$ov{+~Bz z?qL~UOoNvnJ`PE~sk}qKr|y#@2dJpfFF0jwSB7%lD=0PbDSQU&Phs8}%s&z(^(#+fY5iF&tA7d$?mml~Ph(#F;?t<9Uve5N zzD*O)?F~#4@(e;kJNW_P@r3Yx#9^quT$`}>-ebgA7~m!>sj1Ux#bKxSmie3_Az2D_d?&-$>@5*b4}9@c)FVv)6@3-FOIK8d@H7HbS$ z@o>!76tkwZt@?N@60^p!_scMiG5CBf(ReWCUX3L$Q|AUo$MMl!$1RCj72y-tzH>Yx zv4~zh9uFFg@u07fv6|ziv5$hM=uhsd@=pueWN=DKjwD&O>5d%tthdVg(WDE2HPeDt|wdW=@S-N>Us-gMN2kD@to) zdR^t$+Auwk3_9C$+>j++fPoW}17pgX&ESd>gTpj0roxA&mWoQPo#OSpx9#$(`E;2L zl(m|gS80j|uFvaNONV0N%%S=t*IZH*c&660y(<4v6Y{PRl?kI>CXLk!#zrN^UU}0I0s=!0+gs-D|lBAnhFW2}V6fz;MAcl$0^2fid2`o0*1Mgy?RBw{y z>Kz1lZFvW))HPP%n>qr#jpzj0=KAtn8MA#&puv!vH_46aZP(%TorcNC!^~9?$ItT_ MCRf4_lSiQb3zl5Sa{vGU literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/IBD.class b/software/LepMap3/lm3/bin/IBD.class new file mode 100644 index 0000000000000000000000000000000000000000..c7cfb65d9f4e03ab6eea7781c9c611b68e494de5 GIT binary patch literal 16443 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 N!z(M~QW&0D{XaES*Qx*j literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Input.class b/software/LepMap3/lm3/bin/Input.class new file mode 100644 index 0000000000000000000000000000000000000000..0c03486797cd81b2e25efdd761d0c9d2613b7838 GIT binary patch literal 5202 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/JoinIdenticalLGs.class b/software/LepMap3/lm3/bin/JoinIdenticalLGs.class new file mode 100644 index 0000000000000000000000000000000000000000..cb1c56cb240db20917f108b8a7a759c9bc5af69a GIT binary patch literal 2929 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 TY71^mzD1N1_%mH~;V=IK!Jk`G literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/JoinSingles2Identicals.class b/software/LepMap3/lm3/bin/JoinSingles2Identicals.class new file mode 100644 index 0000000000000000000000000000000000000000..6fd1d304805dd961fbf314ffa02771d9721b211e GIT binary patch literal 3110 zcma)8*>@XP9saIlXGWS)ZBL@aN}M)n8`rW`FLLT8cHK6q;>JNvLS&rE36!xlwkMHB z>S*L7EjytFLR;3hgwY?bzPq0{*t>m_XfA`HU5W9|0Zp*dox7v>oesDK}xcqvk}`5-^f^DjYLiTb`FM z>%1AeDA1g&{rUhk=S%m5I_XG6ztq!P3lt7vvN9Gu$z|TOEfH8ea6mro#Y!HU$V^HfQtJBwmu*c>{$YhOJ6y7}8OseKiVg+s8(~+>*Ac_R z0?MqJEmy97fv1mVUE$c`zoL-gjLzFbLSu49jJ1r36YYBU5%5p7d z(o&JG0_YuKeW*A?027vX!LpnbEgij7;N^z}f=($nI>SuM6s5h->i8&3dgp@aI!yGt zr9W++q|M!(-BQZZF$MBAPFvoX%!xzAl{g%z5z|c}t(_}2&MP>#A^j5h5-V6o7CCyL zAY)a%x=UyhGCLT^Rup8iJtxr8me`yaD=DRb9U+jisMz$Zco41>b}_5t0xrsESY9Pm zJ+iz!pvlb%$%LQH00)UL$>US57l_1#uIE}U!=w!hFZawSgpyY zN6Z3kydr&b1+VJ(vaFCmHg9GsH2LsXb$m_spN1SWeRwVLReXa*+Y`j=_@;t4h-|I< z3_G4RZLyJFm5x&@(dC^~_iY{Dk=<2e0FwF4a!!Abs+fOK%;|U&KOi>ixe_PG9Uflk zN8?h{k97PP^Gxe=HHQwft?f)Ak*pdyFwQ1U<4t#(O1IXS1GLb(=(#4_Mzw#C&)Dom z0=4;LPw*8AG&;G;&kg$xr;SJuf2F*cT-8mS>_wKDmRwCqGU}|@1Y3-ZB41Od`0wy> zGM}LipEJwL6$987Ql2?^o*}EuJq2$mSYX+w@+EiDs%FBj^>bxy0C&pJaLBOEIjsR7 zcbu?X6`s2I&*6sp_64ZdE94+oNd|U6bhfv|%jh=tb19=wvPq(`f0e{rie2`JmiF6o zOMfOq8U2eGOfTSxkyu9=Pp&=_YYg2&H0?JMsdSw&luFkdM^ou7#<5gdF_NjYY8+3c z8@CuIxhlpfuBtK0HDHW!4I0mI)r@hjx^XsD#z#)aj8n!$8JQcHITkaHOK1ylqGjYO zu;l&0`k0ZdNl+HylHKbML;}tAWt8}*lyNC$43+V*zF;^gkvGNZAb+1Wj}8*TnkeH_ z{dz?Ilce>M770Z3m~qVbEOC_axyzaeYvJJB(%)jnQK?4{>vePJ4C^!8$q7B91`JBSf5+^$2_*z-Bi+k(j`@zaH?Nh#1%q)xjz)4V1gL<)GHNu zeH9360KO6l#EfT*uUAB0E8|aDkKult<;PA2`#2U_S>kQ@1KRN}W#2=!Y9KE%-{2Jxskj055*KOj!?&cvXw`Av|=6QYDC#S1tjUgrPnI4rKR z(Ou)PFJnmjk+c4xc$+ MT<2MKp^S|(0$_7OjrB_pOTSkxrmyV>3ZYN$tB8 N&J%%KMCZfp{{dkc^`QU& literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class b/software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class new file mode 100644 index 0000000000000000000000000000000000000000..000c2546b72742a6c2829077efc6f9a8330bf4bf GIT binary patch literal 1133 zcmaJ=OHUI~6#hBIJDJDM7osL3;xVVq=&3SzHJ7>QB{B#PSh=&>?gwe|5b#X91<+%Q; z=ZTkV&HV%63BT!SPzlLBaVYW);qK%&YI}Cw*AOEN1ZdlL8u>GSLd@TFT2pg`u1Y6s ziLn*Ob^J0Rp8f-7wh8K5^O@ZZLXQCrT{;vb40Iz&P}0&NQE^=RNqfI$dt0K`unGN@ zW?eM4h37~+1XWp*Fc#*%l}M18f|;yIbn!DRW1aVr1K2}H*t&59hTf`O7}~gGnS6qnAVUY^q%Ef z7yhn+G%~EizT*<2X^Z(1BBH=sHMq?a$m7KZIV|C(FX}J2i=igd=j(O4RyxNZM5G9& z&K+1VFo+>S>TiSoBc_yuuq-vw3HoNU?bYo^j_gmo)AL#R7#3jD*>Q#6_V`QgV)YL4 z&jhVhtunXEuw2*n)*7PKvRfK>c4D2>JOdZU6q8Iy;S~iXlX94Nx>ZCZLq_9lEwB~g zQ_q?oVPucd`+=S5fN(}`mB$-7fxx`bo$c2}K(hHsR zVQKk$W?=?&ipcRzKA?aZ%yO9W!_XA_$k15UJjT-HVo5<2+zF!Z;$Co;u)?R5op2uy5cv(( CwB7sw literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/LGMap2.class b/software/LepMap3/lm3/bin/LGMap2.class new file mode 100644 index 0000000000000000000000000000000000000000..0fe8580f02cb6dcc1b9daac3a1b2cc5c55d5f8f4 GIT binary patch literal 5447 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/LMPlot.class b/software/LepMap3/lm3/bin/LMPlot.class new file mode 100644 index 0000000000000000000000000000000000000000..0702bbfe06343ac2d90227462ea2d0881bc1f2eb GIT binary patch literal 10558 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/MarkerList.class b/software/LepMap3/lm3/bin/MarkerList.class new file mode 100644 index 0000000000000000000000000000000000000000..209ff6cd5dc5048e5ff7be5b111f4139b765a7eb GIT binary patch literal 4065 zcma)8T}&L;75?t-&d%<7fZ+9D)(bIlO!;wu#%|XQ*w~mtjEhYYY>3I^U;5Q`D*}2@TQ57LgH+;Jnxjp-NlNDh{6MN*{j*Ue6~2-H*sms z$yF3WOP3XPjbA9brQ)btoEcCs3wqb0f<3M`ELGfm-%z=nT^38!h)=q+#cXA%>?jQF zq;u>u7Pb4aV#S$t$^(P^DMXLCMYl4j5a}H2n&NG^G~*-?MuUZ2ct9cC*)ff`u<4!=hYfdw3<%>tC|)C=Lq@{T2prj4;eP>?nIHUOo^e zSl&IGH5)GF^K3x+5(_6S4B-?Tfj|!BnOw@pQn%iwF7XugFIyPFC><_}!;a3e9e}@g ziMSOWmCIpXaw6p@sT?uaNuP2m&p8frk1}_id@Cj_Jb@<_Vs5cAB^{xAk@+VvDaAjp z`{Q0;T~nemWno%&M;6@|*v}X7H4|(IW29Uzl`T92iw}-Ga0b1pJ6{@-UQz{xdcryC zmKQ5t{aGt6jAu8WZ5_7X9n)^*%0zj_p{bPAZl@+-KlR@4ojVJ!Yd7)DPiee88tjadtn|3A^u35S|TxWHLm3Z>L`;D zd9CBh9}(dXINg00_1)?Y8oPgm;6cS`umOH?&e zN#MA~kQ>u$I5H>#lQ@!zwAzss7_GNuh4LDXW(?bCUBM%gU+Wqk`w&SHa_k3*rADt<*aD z)j{qZ$5|gGhr6UvZV42EQYIpjhRLuawy}b;EZ7kycr+6YXUtU$>*Ng&Cfn3^zCM?U z*|GF{h}*H26{NQ+wdw|X%8uT?ZYtZXeYu7U?{EC1QT^)!JiUr|qxytGcoVsP)HA|< zw$}ig>KIWw&in?6+6j!}B%b2QGK*7~}byk{mKs-bkTGj4F zmQu9ZYwXsDL^(2ZUpG(IxM>gEv zLN4Rq1t>ARePG3xH(|+sLmvFWO!h~8it0C0Y{(0lSSl*Fc*?M2HTkAjP@mE&Cpf($ zDPt3HzUmO&Okx#HqGKnjFp=gG8+PK|jlZm-@#mNk7jup3AMDRmbkhR6U5wMQ7@tT* z?RbrAzU`2Os{QEB_M62%P0aDm@mpwA{}eaoPgzorV2kX0uutRcyd)c{jm7Wf!FQBU z4kE|ScknbWQ@VmhxOkBh@h0!@@cu*O@g55JF&1!#{PH0+euoPFMDF-2?| zZ|PBHX9OS7?;&Qithw+IXZ#O=B&6TQrtqxw1=jikYkjmP2SG0q8%#Ul&!35;_g_wh zbu_EppTex$w@wNaX%ENdDs%P5@z3;N(#DzYG+}@KT($dZiBQ&r3^fIM?Wg%&i^irH z<v4Z}IE z9ryuHg?H{_T~0m;mtR@b^+@Iw{rPj!H*QJkeDakEtEJo@)mXIx5UhZ@uHR#Ih!ZL? e)d?AO)9kBvabvsLcWcbn1!n64v#;wg-uNGsX8)Z4 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class b/software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class new file mode 100644 index 0000000000000000000000000000000000000000..b651069bad3574f115b3c6b2d0178f8c70c49786 GIT binary patch literal 1800 zcmZ`)U2hXd6g^{`EOs^_B#tp)N+3}D5lBh-D2WNADYPz5d5C2pAs!}X2@7T&t=9VMrjWt-Zi)&-VQV zc1e{+VBgJpKg>9+wVefl^s2k=$)M*u0;!vg22Dd%*K>nKfdj=I!b(j6tEjxyEVbOZ z?PQR|n2llV6-X9K%`^liY*^SWu&3^N&QHAuYmVQLgcTUCcUrRDl)kIh#+VB3x?O>T z^&JHux!m^1#~V@f)Xrg55?y3$z8I>YWzquI-EN@IaA@FG7+7jrI21{&h3_kv!C@S+ zFvY|6E3lQ?#!*aDs-UAy0>y2LhV@%0#Z@*ot(zs=CT?;daaL%MJv#1K%Xehp=q56G za>Z?6H7{`19e=?>MPP5gLySFxGEUk!g;}2Ap=|e@>vvdzVyzVGrYHwpT-B})OPGzH zsP7kqsgcdrA9e`J=DS8)d%!8%f?Rr5|G1T2x z8%6;aZ7kvvJKUshbOa{j$s_s6Xh>5hkBI?D(e|9ci2?Dkh^>qncK;O{=Wt#iv)bwT zE$6DM8b7Ui`;<~z;8wLUKOc+kcU4%y#n_(799llR=GB;AB$#SdgfLOZC@+RUiXvLRaX zJqnxn;vVHBe*_6lEtF*1P&>nH86^I}sD-maJ+JI8L-4L4m{&Y1oA_oggT(*FZ4!Ha1C literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Misc$KthSmallest.class b/software/LepMap3/lm3/bin/Misc$KthSmallest.class new file mode 100644 index 0000000000000000000000000000000000000000..7779ff5a0701825fc2a71e1e6b8d8d38cd2fbd0b GIT binary patch literal 946 zcmZ8fO=}ZT6g@XHlaI+)KQe7?60KTo646qGLRAE5DMVX^M2gUj(_}~{ohBujR&ZV2 z3qrNx!YXuG1f}4jKfu4!rPz925=xQby?5`Kd(WJE=KVhXbqwGxav=l+1IuowGWo=> zmp5$Bb2@$qI?;x`ZBKi4vo`%~t>ILBfp7&@7X-lvZqxN23XI(9LViV{&$p_M2@TO0 zLWl{pTz(}2K_UhNK|ylKZ8}f4HrAZ>b9>Em1Vc-$itVk~ZCB-eQ1|O@N4@)B(tT3Z z9RGqyel%CiFPQwuNDRXmrL0`BSX6RkovTO{Uh5U>>Ta!0z~yRC^QODqQqyn{&EMD* z#LK>2Szop{`zp+GYpY#x7G0$?qNLnWW(Z=%X47fUdv>SebV9gEZuM3Wy&wz|l%&yL z;o|VzHO3)?xks2SBESbQ3rAeHej@&zSpZ4yiEif~==jUpQw$Ir=~ZJ8L(JIMW#s^z zI@RY~BBnS~g|t@qf%vgrJ%Xj8^vogg9=oY(C@U`fzeIb?sdMHO#&C%R0p(|pSsK)0 zvUV>st7m5oMVZNFs)qM+W-fSu@{TSFv-Fv<;D=9VCkF`b7-wC`Ahi4W?8MS7<16z0 zvbk_C=$Djw=UBKzCU&agZ)b-Y%h*RMtr`=BG&7EKfKf}&?qe`*>0b~n@W>KY?rB~3 zO7sJw^THWONsxCUjByEJN+KwTiQ7EyNfeJHhQ|`e3rWD1B&sri8ta=fjMtLF8?o?C zM(|NayFQip@94m}PkViz6gE!Bl=FK?Gt&6%BEyI(@E%!4)PlFTj4MPQ6PaKX##Qzt e5IUtu(E`c9Ty~f|*N6si9g{rO)fU{q6wH522bSXi literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Misc.class b/software/LepMap3/lm3/bin/Misc.class new file mode 100644 index 0000000000000000000000000000000000000000..0e6c4a0a0dcb59efd4de1b3b08ea91f88dd286a5 GIT binary patch literal 8962 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 O7@!@$lnHSoIsOlo6z%i? literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Order.class b/software/LepMap3/lm3/bin/Order.class new file mode 100644 index 0000000000000000000000000000000000000000..d8bc83a28499b23448476abee5f6944402ecd267 GIT binary patch literal 17692 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 K5&lBcPWoR=@_7va literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class b/software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class new file mode 100644 index 0000000000000000000000000000000000000000..b85abbe6bb4f588240f49cd88444c9400c7868f2 GIT binary patch literal 1915 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 Y_m&19;}h0%sf)tI{VD4qN`HXuzqn;Dg8%>k literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class b/software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class new file mode 100644 index 0000000000000000000000000000000000000000..0e56c8e7f0a73b0215f69067bc0b6d5a14b58027 GIT binary patch literal 3047 zcmaJ@T~iZR7=F&l=7X@rD8@z;Dr(ex@TDk-U=%?#h@!=&t+dr8tYIZ=aFbx^U8nwp z-dJbq$c>$8XPC|?IK6Os*O~r+{*Ycet@J%78?wYG4!dX1d7t;=d7t;-UvGbZ4WJ(n zz2FQ7rmcD1nlMay#%?UEmW-TMn9!Dt!m1YvL-4+~qV*OuGv7NscVEwy8Cng~C|}d8 zMcpbfgr=lLrEC;>M=eWRoia-0VTP6&BX4Tuils9oo7s$1H>K;0S=RHqHJm1(r@Ua4 zVtov4Q;yuk!H5W)rkvtCP7+xLWvn=_w}4@niWd0&aACKKR_tML#S>X^vR8#09CpX>$ciZ_iYbiq2}5A-?TRMWn$Hb%tsnNK{$M6)kQ7!FeCcQ5Q)!bGEJElMEAY#v^m!TqAcqch3B)BkZZX}xq9sy zD6d8OHK_4YT;nuPnwg^{-0@7NiY=B%APT`q9&TwRDEdsr=lFs=tq6Xm?@@I-S+0$l zFrHQMCBCAm(jQc`0>uy6YH`f^aDw>rRPz$?EPaJurv42zuxsZKerQY*S<$PUm`AlP zeX8K}4j+xv)s$|jQ--{X4Z3?lQ#M~CoO?p$<#{(lA8!7*-NzlCP5*3`pE#?j~1?CAAJiT znd2jbr45ae?J7^<#6=c9xEGP{4vEJPKf)bYPrg9l6*|`G%mv{yAX4PJ5a2-s`EKdA zQ>GoZ{gM|PK}^O9<0!3MI41EdNC{CJ=~=BTA?x@DKKY$ZZ6KKr3@OTh=Q)PLN>W6B zfxcA8qs(vM)E_vrfwR5!-TK}p&gF)bM;;dPbUfSoGx``l!Ag5r5veOO^}`egJPbGA z4-=NP@Po3PG?4*hx68@myzGY9yMR&3-c9nkh%qY6hwB)}C5q5W zRui=6!DT{MsTN2d5h2P~;d+YzbFtHJh(snhBBMMTl2RzDv_c;)=MMIvu-9-5s`sx_T^>&bMVbjR6 zlhdToC8rkiqww-$XyeDxNAI&dfizDd&%0ppZan3^lG`h?(`(z@uHh=Cq*T^$jo2f> zVvRWU5VtNowYl};38p2te)Qo6t-KDFg}u)fSsRqMXmc@k^bPt4$sNtPt?@Z(n;5TH zO;)6%_DH=rTUJp)st^sAq7h>V-tW+PY&-cFW+)XgQ!(6<$#ZepRO7KpN=nFlow|^Y z4k#T@5D_6esv#q+@+O5I+&N;cFSp@KK_RzjK%&%kLy%W zTzy)VS32ghkDg>|6La<3uG%TTOo3z+^pQi|#vCVv=)E_Yif-awV|({GKnpP50YwOO zzY#R(02ST?T51HHaDa+fwj;%Fg1;G+Xn9s2XWURxFCHgJO~?{w*of1*_sYn;_gZUyp32hnEuuM;84aq^l(xSVcJMp5 zo?D`f$b{}6*12IO49)r-H(GvX@Z+R29*^HJy#2?V{;Q|XD4=O>*%@A82!=(ar(z)O z;G%_vJ-6L4go#o@ALYC(Md{-SHNF7)<3@b6X-f;Ql)ZREw3xrI$lWF~4LU&Sq9!-_W}==SGNotJgns-Y?E%0{}?-XN}7?i>pH&xy&BBq literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class b/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class new file mode 100644 index 0000000000000000000000000000000000000000..7e200afcff5c3ceea1ff15f93d776598bad04ad7 GIT binary patch literal 3848 zcmb7GYiv~45&q8Z?7jQAU<0|y;+RLlVDFlk+JF-rIGr#iq!sVe^-?ds{5V0YkS?8ND*Ss z%-lJ1=6v7G9RKORKf4KF9bPfvQ&`iH8%XAMxEcP|bh(+qRC0%tc2g&7I+Oj`bf24X z3T`&j)$gQ|jV45){!{Ew5I1wUQNh=nD9TL=5t`cEv|DJ)9#>HO5XtNCdy=``&Iwvt z70g0doH5RO*wA#XaM6|8WLIolU6>V-N**=o)OXj+rzEo0SVOy4X_Bc6L>m{RTm=qd5 zO`?qijs&^|g=k&dQRkSmcBJ5@);^reIVaoPe1SJn2z9xGtdfx&kG^kCx6Q@9DJL_y zHjybL2a~y$E!-PM6V{tp$MAQe&cX&XD+HbX{$xI1vq2&D2`t3QZ`TsW1K4C@BMYo7 zyoDBQo{7i`s+<+ECDy7pZn5xCx!<}l9>#VP+Y}bffrN!tJVLbc?kU3HuZtx@4DzUj z$G`$#l+C$=Y^78pb2ytzv!#yF%bpX`5JA~xp$#F%IqanMx$PD@u!s6!l3dtziC7t; z9eqcW{e>1*kclpZ1zvXLSclPx&spfv2?pIvp~p#$@OU%rqpmlR z@Op7Lnd5PRe8I`_-fD=c>T=xe6ml*nMWC*=Rrk^Za4j6gJYMhM!Q$j#6mO{T0!4xO z2U6L=1P$I=(mP9fCv}VHa_CG&Hwm*IKDrtT7DmdeVSO0Kanb~nm_LIzcOJ2D3a80b z+Rc;_WPsy%THDWP3$K>YmQf4mik{AiF#Gw777k;OR~XLbT|ILdq~954f02;xY{5w} z)oGdO?wVD$vxav|c^}OBGRHV-^g2=D1wG~#5#p}wNUlG*!_~8-vaE9&^i2sIqHV;7+E_cz01d4WSNfh}U0(9j{k6a8F!aLzVuij{C1+X}sbZmd67D^S4+* zeWlh{>7UxGUicV)S1>V1J0jA7O4$Qj_M%Fam6^M<5z_ z{94LBd{!rX98LYC`PEV4LM{>2gPbn40N0~lxI=$~1gIBV zWIrB}1K1%4u}d6uOCR=2KSpE#CnSl}av0}i5HHISyeckUm!tT;4B>~8!nmaIOMd@@ z411t<76B`PO6c%75(IY_&fxQ`4IkUF8&8mVKTcpTo}^94d^>t61?aUC`zRTBnI!C| zWa0qxEs~|99b~jaw5*5enoyH0Bp+9k(^ju4Jc&&(ixyhsiyfRIB%nO4#E9WB zQf-@u$VtHCq@)-f=S^jsOD<2|)U5bDR<^M(AUT+lM^FkZ;StoxajcOOSTCorNls&{ zJVlnCM!THB6LJ>&WE8HP!!dq8E9X5HG=jX>Gz+8XC!)ICM=`)}K6c>Nt~ zVHsoXW~#{JRAv|YPJif*FQiiW&TTAqrgWg{AzisofC z?KTrl+qIjHR;#C0tTeTX)c3$9_0M9lT;Q~N4h`}=w#f_Vkr#1PzD9b#j%VZ>ctyU2 z@5n_q-?uR#m+%{T4S$i>@sWHN|B~Ne^&D$db--2{$pG^khU|2JiTjYLV0!)i|pY5Tnm&0%ff8nLys^fD^! zpdB92@|##?hdpfqPc>V%#S3eveziqQAlZ{S}_2Uy!r*U0k3PBE|1`9Utb5eaq|k2+rbe zZ!%c8j(bYdA>J#7@WM$JKu8Z+zu(Wf>J8SYdenalxa&5GlB(qlTZre1wSmYzhA~zxK?pb6aRdB$=lt;r^m;5P53H&{{!W=HN^k` literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class b/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class new file mode 100644 index 0000000000000000000000000000000000000000..36c807e947cee0a5ac70a07f665034393bd58a50 GIT binary patch literal 4280 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder$polishThread.class b/software/LepMap3/lm3/bin/OrderFinder$polishThread.class new file mode 100644 index 0000000000000000000000000000000000000000..1d4fec3b46e40a2af69a559dec5ac2c8ab966645 GIT binary patch literal 1645 zcma)6TW=dh6#mAS9mm-aH;Hqp(~uT7*lyFbDFj@nE+uK&1t)3iV4#tZHqI*9##y`T zHEJKYBQD}5At5A?ka+4d5;lSd#4|7a6@CCBe6w~GNAd$J?aVi4&N*}DJKye~|Nizn zfXlci5fB((cegEf#dbI*Yt@Qf-`&`CEpuBUBoMoAzG==?OlN0qee1qe_9Qfcp(E?v zhU1u96-%J6R;}BfU3KaL@q+Ks@a)Rmb=Nf?73{i~qfgP^aZIn_(m&J7XR&Sc4>TOl z+OgbRo`G`TboVTmsRR3$1caf$yg<;kJi<+`HE-9hCoc*N6uPd&SZ&dEY%ed6PaWIo zb$+g=(J(fRbV*<{)oZ(V&Hvx?FnegJx^4A=EzxlTLs0~AQpYe7yk;t0Qah(~3?in` zlR9(^D0EuK6K(XAj($Xx?W_)oh`?aMcC59={+8u#w7WD^sFux2$#iYC?ifRgI)Rhj z^c>RySsXnc_^5Um9CRB_6tkF8Ue#s2sm?LJ2#tz{+co9niA;)^iN=FVebQc=M4cwGi5$NwynT}ha1jF@mRY^OXGK}=HI_hN| z1*}rPyJmgO&&t~GDe>A=@jk`5Z$7+TCHWD8Vmn+cbFapi=7FMTmiJc8TBlXfVzuFx ztrc5+alVZH?k^hCltz$m7#fMALWui_0wfViJIB`47p+k0 z@@Fa!h{cpPxem~G7$cn98R8hFwZ*mMJd-)s#8~DROk^gsCMGlSP!m&`c({q_%xn{9 zGUuB}{zT6pW;jl%DESupW*5b%+z zJ?JAr^$&$e5KjMi@cj`T3yO025hC(qjLAAqh!@{^6hG0H+}(1fL-DUjxzyY=1zR=oLW8A7905oTEHVFwg4<{0HlM BStS4f literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderFinder.class b/software/LepMap3/lm3/bin/OrderFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..620b72c0c1ba946a9ca381aa8516222dc1bd6dff GIT binary patch literal 31624 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OrderMarkers2.class b/software/LepMap3/lm3/bin/OrderMarkers2.class new file mode 100644 index 0000000000000000000000000000000000000000..1a6f8faf09e14adca3bb8582083e4c76050d58f9 GIT binary patch literal 6060 zcmb7I3wTrKd49ihj;v#G@a4A!l5N0&Kn%zjNaBDY1c+lWk!^y&i6J*(9oqs+awHi- zmh?*3CTqJU?b<*_8rZ1UOSUxW1S=`qnhmyWUAMGb*JN3nm1S$PW$Tu8T|&a%|HyaD zo@ag@fBG-q?f-87cm5aO|K?c$*UFF|hG2GAHsNMF;@SOfHn-XjOHi>dejwg77*F>% zb?x2f_T~j8>yznZeuKblSlTVHZq6j!08ErR@S#Ld9!;j*&f(NvH@h>wchD86Xr?zl z*d5O%^?Y>E$`2%S8heV+b!3=|C)0vC4SS*!!ejYtGTpy!X?FmXsPaPze79t?nXH3q z1UYf_gv1T)OS^5%6~K?MVD5Aln}?HwJY)d1nCC~`loJ+(IGB$G0{?;d;IP}(Cs@)j zNs*!z)-9d1G^$$wAzYcp0;tbz)7ZtvY7+!s0z0* zZe8swiWyzn!q`m3hitTyS$a6Nb0F)+6O?@`b>h6k&Gx(P)QEC3X|8t=uXiAuNo8`G zlxw4l0hOcj9NtFx-mrsVZX-r}r;=$e^la>6_+*CjL&N#)1M!@jX!Xu@J2lF>DXKV{ zN;Y}~vvThJn+{NBznieJhZ2V-(cC2{%euW8o;mGlwaUgl)7Mtph?93x8?(=)8+u)$ z^-fzN7IUsFnV_4JJVZ2^O6G0!Q&;k*u5PreHP%ai@#IM=mW`(qnUr?|8~b@cy%2M? znkf?X>*Fwm)K}JpgDCID@_r+7m!K4;` zkbLOd?E{B$T2UR2ha5bBUt;zhjAzrNyHXw4t&tyc@Bw^KtLWytb+&HGjb*}`8Pe&p zY??WXKa7w1@ex{ZqI5(v>3#=?@i7JiEs=Be!WEKbTL2%&!+v~%ao&;4^*VS2zrq9M z+`P7_E>YWbiTV^HpnlBKH)^6^b?_NHN>m=Fh{_5}b|HLLSBuXH>PULoDaL9-DL#+K z{rCdyF`;?vP%iJL92~(>CIw@aS{FGaGfmrBQ}eW#8&9pX@#})BMVhjHN<|LfNj&Ap z7rE=Pol586xUP5pAbw(D+e#(d*nlrJ0_PDx~ZX+e_HNeQv=GS*c14HgTKWOX)F@7PpKMOO`_{u zdqwBk-wD>vkXY@P#pKMHbpn6y;79mz(Hy%bGM`3hXr~|@!vEmlCtk4fM)%_%85z+n z9q}Q?&jo#BUBEv(_^H0JN(VFXgtwU)pZtKea7Zt-e-A=zlr*IsTirh$j+lx=PQcwb*xbLlD$fzNjzS_jmy{M7?}i7cHKPJ&lb^RJ5b1(-vW9@u(qv)R0)rd-3VK zZ@qHfQcjmuP418aAcMaKOMnd3HGiiy))a9GMzO#Fn3H`0Mt|}9I4bq z<=l!*D&Kmq%8_be#IvsF^)X`lmK20$FimSKTQN;D*OAaz4s4ycHuP4FBegn#sz>#k za)D?y=Q%Q8BRG>URK}y!J93pyqedOh zCkLB0WwY@^(PS>q=IW$e<4A)nrQH3lJLCldZ>))PPNVP~F3TOH)zC`LTH5NQ_}Lql|EbR3@pwioNTk-3(d z7QYlY^^ax{)g0_+i(-$Z5;3!@$cqXa+0_I|&Wt2SCfhp_vMVg+GCwkMY;}x1yLq4J zmazEI!w!(_W46_YZl#Ay=Z7CMIIuNyYD#x>!So> znc-}&Ta>4!T=^^Xt%<8Zv+?T?FgW6;9igAICjRpC3ch8hV1M1)4iM^XuyD;HbczW4 zoy}P(%23V~5|=h{wt%$l%g!D}X{9utMunOaHE$e2{TYOMmY+t=Db%Y)1uR}xx0Xsr$n{Hdi-jA ztjAUxVm%clY9pavZ6>r;D`BZ>BMhjmgtOE(LPtdjXRA)aGPRwsTof;&Zr_zM;)ezwVl_jiK zdBUsIfmi|e-yTu>q<{y{p=xw=8Xr21Umn4{$tL(Myc zYy})UgA=sZZ+4!+N&b$sSkmH)s1543$Xr z9z2ag0nc-~P5u7Z^ba|`V}hiBKZ>Y3)t`9VFRm?#sJq7}c0}DfJ_$tB-tmdk7%BaP{7}Cdcf2IUZ!}CExpI_iv_&;EM6PmwFfux=DnZd8YpXf+Y5$)RBUD`w({sPJ)!I1`wPW1ep|BMS6{I9=Mbz#IU5>&D zs-y6mBe1N3lt$FR#O4v2fs0N=Wv47QaKVQ^qOO~SQ5UQ`f~sK6QP@FsM0;cvUEUb1D@cT@?VM1pDO`IF;l?l- zZ1z?)_*y|$k6=%@+;e7=jur;Ul1A!32`N$~*H6eS$PFWCX!HW;|HfMvQGHtJb10)O z-moAWB5IAv)tAqqo%u5kB}lie@>^7oL+? zBi~>b@B&)o`&cip@!{qzY>;U-&0{!ZK8**=XYruzYKEXXL#dX{51SNHu`bGkCT2}sJetVFnb(feBI=qM^o#U6mXFpc&m`9 z$VI*tzXPA~3zS^c&&#!XZ}BDU=VVOI%xttm{3mDd_v9t2`u`v?NFsBqFVfX>-oe6) a{N{TPOEgbkQ{bAbtFM7DFWG@f=6?Z@wHIXo literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/OutputData.class b/software/LepMap3/lm3/bin/OutputData.class new file mode 100644 index 0000000000000000000000000000000000000000..3f8b63e3084fe2e6fc4a1e9a4d953eed009c5a62 GIT binary patch literal 2628 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/ParentCall2.class b/software/LepMap3/lm3/bin/ParentCall2.class new file mode 100644 index 0000000000000000000000000000000000000000..0bb8a36c10107f988b78b098e5f89dcc1019c613 GIT binary patch literal 25527 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 Q=?MP8AGE52KuWFoe>Vbp-v9sr literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Pileup2Likelihoods.class b/software/LepMap3/lm3/bin/Pileup2Likelihoods.class new file mode 100644 index 0000000000000000000000000000000000000000..144e44839e376e44734cb1cb0e20f74f88a0b06e GIT binary patch literal 13976 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 O@~Lt}#BbwUaQzpBlp@;z literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class b/software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class new file mode 100644 index 0000000000000000000000000000000000000000..4372a16761247c4c0612c852e89d591f8fb63326 GIT binary patch literal 3287 zcmaJ@Yj6|S75>hZQ(~1=sU1`7ngj}AEv@YZX{D|t z0_h`tkS6qzzH0($NciJ_>9kWTOgqzN@}ocUr!$?-^iNy*NIR3ZX_I#PVgmHs)moAV zH=eQXx#ynech5O@U%&N(9|72hs|o~R$CQ~f9HU_NcRiG~>?zBhPn-Ga1;;c}6UN!N zl`j}}(p2ClG@dff7`=53=;bXX&{mdr?*>AFnV1#{kXhDTX3n9iogt&CM5P@GWD z+qgA1XF4XwN>J@$rknyhrvxFuSvV~0&u5Grq2<_G&e(2j&4bz~;@Ki6=mrtUIhHLW zILi5Es#p=~3JX@gtB={^6?oZt-H2sdg;B!&(Hj1mp~T~f#G0`TA5C=65ROOJQmYNL z3fKR&RV!Y}t8CvtmQ9%<5H@Srh=>XwwrXfaC&3r(o{=ZpG$;s4YP*IoG)e8$P+z9H zH8fzI(#IUx}^4MXu&$dx^c@kA1-EQO=r4XLQUh@q>-L6982y! zre7jUsKM_&%a%cJS#9QAZpD<(DcUNAFs$G{Lh~9Gs$m5CIpKMeZ&{Bfx@)Sj+yJb5 zKVf~f13c7KjN*WX2QbF9%0)6`q>Ega3|&IHe7}Z+^2ndJo?w(efQJ-tmDcpv)VX}Y z%xL%^##zmDoJtc}+1^94?xqUdq8Se0VZz300LLTh5DqK&&}!4JgoY_h z6O=PDvdOtS@+;dJRxyDYdGSZ2L{0wQdG|~Zk8%t2NWo(oK7!+1=SD7P+9|@GwKVQ9 z;sxvadQ8Jf7z|n=TlPTM5Us_%5?2yDl-Ni4;#Q*~tLsSJ?YDW(@t+C{rxlzcG*oe# zFbWGA(#SBp+`Bv?qKSmOoh&}8fM-Og(zzNOaLuX7Y$jJMnB$W?aa`%Rg5oM@%T1)B zfCJL$S?S=M6pqKccc5LGG1Y_fcu-Ga5dN z^E_cv?m(&*82cH*=QKQxXV^+!mhR4Iq6YL8Gk3D2=I1qhL3Vi{nKlh4h%fPVZcSxv zvr|P9U)JyySqh3f`qDOERL;rHJ7%5%(sGV@=1^tp%k*0Wk?Ch4MtCZjm1Dk+$*~14 zXJ2Nod%TycC(YZWWQJA*St&GY<_n%y{Zzq7o}Msr-WX7)vPCCp9<=0J(@?po9(lhU zNW!*FXDn^x^CrjD{$39ow(=12@qYjzt`(kWOiM~|-9XMY{)L=s?#eUGU3sFpE6=lv zd^2-+s=0igX+UG6oSnQEEYpfjyp}Dup`E#ZVZYMqU~JbiI%2P2OKkTt?uvCUqbn8( zEMrGZ4=y7b)0Jh!Vy&TN?2hT`GJ0Zqco}`)WnCZo`L~DT1pNvD`Xxg2Yc$YxG}CX; zO25Sx`W?2@@3D*Cz+Uvth!qE~=lrY;S zZSB_m{VeN$5p_#+eFNr(0%Ab%b?{MN>KYaXf=hTr8q|YTXCYTH*XgQN#tCnv9BogS1PIEWD zEndctU3;#BOW5gcbmi%5c%p<)9Pt>DfVW@5vmT29;2YswKg}=%A}Ygh*gNu;N{Cf6 z>T0vT6-Q64IP!a*o;tF`wO+oo6``t`m1x*+aGs@hTznq&o^%NpWX92xqjGW6z4i|1Y4Z}Sj%5Y4w3bYiH+sPPtBe3I;B zgnPvewA@6q&)e^k`}^L7<-38cw|ScQ6|f#plDZpgT;K&ZCvXKX@~U#G#DTvA@ju~u B{_6k$ literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class b/software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class new file mode 100644 index 0000000000000000000000000000000000000000..f3be6ae577680572f778f1b05b804d5da88f7d49 GIT binary patch literal 3548 zcmZ`+TW}NC8UBurq?P0~7#jhmabp7o%QiL`>H-FWv7r?a*uln1OcPk7#a@tB&Pp=Z zTxcDVwxqfA5+ETdX<9dJ)0QL_r0I0}m}zJF()Uc7$8GYwQX;8njl59D3rSYDB z|MTC^_y0%!9>5m7r@T?|9T+GVm zdIf^R*0^ot@(xwn7L(aoV!A$~cFr6(o!;G445Tv2n3cA20%AbGH|bcmqQ|&(+B7E* zGZ_JYZo5u8(DSLZgObsrNF|tCAL2JD=MBJ5-iJOP9__V8udP=O!!mq?5NbY!ql% z-Y+` zu|THd%z?(rbPcJ~9nKMm>D~Z#2s9-!=}Dr=9&esBEa!}sHJf9D1I^h)#xb)Y?8I&j zyDA|sw4mcY>|y3EWKuT$lp}RPMlZD58yQte?bXo_!b^^u1Xs8<8mWR~sRep9>=#%z z-vecohOiG`(-Fl1B9hUM8mT-H$)k^k5W^u22NnD)eWzm(LzFZU2{Y?Lc2zYtBe5ek zi?`phlf5Av#)yVts?RZX906hKJxKvB43u6v@Su)|Q~=(rb>37}IjW%a^^ycLjNuU- z$8cOAR4S;+BC?xWqtVEK@^eB*0<`GMEBECcnm&mM4dVh!=JP&i0e?GdT=1jA2D<*_AuF zqGf(>4KCrE8op5(ehYSWOyen**f!5H{^b=5Rb$gl^JyK=;9E?S4f8n+mXQ@1Q+~dq z;|iW-?Iw)uA=e}^G^R3nPRH|jVIDM_c^(Tu!`jF2Jssb#mg-i_AL@9i8gE+^^O}z9 zczNF5R)Njc_7)p~y#oUSRoIM-25^H1(45TJW(((T)iuDkOe#6#WX9Q|98e<4}yao>qVG*GUju^eG?XJ{|LbwgYGELODL#;UgE_`)oj+B#-&Z(C#*Ep1`nEY`NI z@{@auq7q-?bB$7yeelUW2+G~4lY0@C{a7sr&@A_1z1)xWl-tTsX`bI!u8N9K)8kSq zVChmSO=)+P8rz)H3V7_tEjtZFI)k+up^!1$4#bE>df+ zq2_IDso!2euiQO@f3-Ii(Dw)IE8wd=UJ9(ZgZsnY0v_n`mBicYLQNCx1;kT5{(E|~ z8Prifta*LT8{L69W;M)S%i&rV^`g~;0XU7iLVPo0tcT3)1OS80GrPN{{J=!%o5pyL&yL&4eW!uextBb*N)An(UAc@Pcq5TQJX zHF5|W(amtc>-_91a8SB z-j^o+Bv0bc(!z)G6h4us@psC9DsADF8BxPEEQiDznHB40UUbScV!J#mcFOZ2E-wgE zUKDBhm^dRJ7w6>@;xgA4u?u0NlCWuU-3FAFZSXu_%SIT zM$m*eNcj=RO8kVBhAC?P)a6~^3H zc=?sAh)&Vqjs_{VivWI!xA@=0PT|9^sOuAP{?Pa}DZel=fZr&~;sgF3xWYfg{48s6oV!yB0!od}lY${RF(i6hNZQ&iJ);a*9pzR2IU np@loH@}<)LD&>7q%_7IEf1x6C^kCL~7I2#@tHEy!ci{OiCQB&; literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/Separate2$SeparateThread.class b/software/LepMap3/lm3/bin/Separate2$SeparateThread.class new file mode 100644 index 0000000000000000000000000000000000000000..283a9d51928167c02797bb59b6af9dfede34cba5 GIT binary patch literal 3289 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 {)yO8&*@#s+(zYjhk3?$3ghJHwr#M;hJ1?gq`C; z_a=v)|Hp~LYKs5=###7(H+WZo;e4G8%hp87wQ4A79Yg)B$uz*4LdRIg(gN!^T4YV7 zC3s(D&7ib3lh#|u)A`mcx*pGVYc}19i;fSX-H)uf^prJ^p0(!F3)TYqyS0cuv=-Ao z>tx|ri^V`|si?G;iILWFG2U7sW>}|+xk#UEtrRP)Rbs7`5=}^-Wvv$HT6N-U)*5k< zwN_kWtrJ&S>&13!gSf>yL)>XKh+TO86gIeLtY+~mYoqv$b*A{e)gs=oTE)MuHnHE@ zB!zXRj9X{PG1eA2**aTJx6YAE@LX+uNv^ZLY&0_0oxQ<7-sA>j!2^?!8+r=+0CYs0LjAqext^UZf_qO-89Q4<+>TPVi$(E;tQ%b`7mkM= zu9XW%+P7sLN@L=;o^>rQC&NOc^G|X6F&` zMvBitrdE%9pP5Dsmk#JeO!f%-N;}0M*xB@qKsdu$#AJqhG0`7-7+_6vv<_N5HX*S<*3-{~;MQ$vl%=!$r z9hiLzIJ}Wf3YpD)y8*f>%SJC#jOC!O8lLR{>_1JbT=tLJ8DG~O*voKWeVr`pd_$%O zd|g+r1-v3JjQbY;7jch3pMZj(V~JPpLn8AtzekvEVBbcQdQiCucfuzbUAu+(5-fk- zHM2>-j3#IF*(BY&N&k!{4SfRkT5rIHWHf1%O&(w)5rx2?c8OOF$CvezSq?5rJ=l$& zEHlx|GMYBajlrA(G*G|Zqm}thNXj#LzOqHO;#mbEeoD4Ml8lHHR_H9mINXNk7Chg; N^K8^yjORHd{~r=|u_OQh literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/SeparateChromosomes2.class b/software/LepMap3/lm3/bin/SeparateChromosomes2.class new file mode 100644 index 0000000000000000000000000000000000000000..98367c0e1f36f6bd5fa1810d865b00d44dd5f799 GIT binary patch literal 4422 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 literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/SeparateIdenticals.class b/software/LepMap3/lm3/bin/SeparateIdenticals.class new file mode 100644 index 0000000000000000000000000000000000000000..718ed66cb358a33dbc8560f62213177551c69199 GIT binary patch literal 3667 zcma)8TXa-c8UFT6!Z|Z@CPNMkNoZQqRzfCB2?;a}3DAa4p@S1HnV2#G(L?4W95R=1 z=1d^1TB}jCUQ5+V)mCf;?^@IW3dPoHi&a~-wcdU4!N;!E7uRyNjo+S`5RwdQ`Ed5x zd;kCb@Bg>=OYb~=3BWr1Q-MoBkDKF$Z8&B$X=WU2*hu9RR0%9TWK0-sDI+u5w)4Ot zbJ!7Bw9(2~&Sn93OK4D_>dtJ^^ui5~hH5Ml2*j+6xg(!GVA=!5fs{$%u`C4+8nz|Z z<;^PRpp_F?8e6Ejhf>pql@VChvNtwsLEN#e%xF(&(2H6uQJ@P{-(}lbTf74_eU9t|61p(w@3q%sOvOo3f2zqIL?HYYjh z`zCng(5qn!?qpJB)mtmOw*vr+JX^!`^(^R~dwjD5?Bc_>&)AxbNac;hkEF(tR zN?B%3`fq4BfMG`Kh+$_a^;%8A7_imcYuBumr$#j#gvG)cHJw3OBfYtqymVE_@q!dr zuAMQY6{O~rVG$pndQ|;ih8a^k1CXi-rM`uf2#Y61Qb}t^r7ZrSgDraFPnsLlglNtDujEGuH z8~3DvU)FF!f~k*@jb)SN!u<+Gv9Ln;nuf>lI3dG4oaZGmFLX1&GbBTIQo}d!1jWzP zpg^dChvnqw9V^w=YumTz9XwD zdhM!G@jbRmyKEH)KhW?){D`+yZow7En6>PUM59BIp-?Qgt}DG2k2}Wj7*kg~tKc~W zuMouJ*}Oe$min%4247|$KWk*K@Or0Jd?f)c&iK0FsBqQBKOYyUZaoY2sUq3SQIdf= z_&91M2LAnAc~FA@cX+t!WvEz8iIc6D9)+h?Jai6=^<}X$sMl{Opvk@IG`cRJIkEa2 zTFzokYhy!p*^m&s5-_XTW9oW<>Z;nfA)aYapd zam_ObCER)>o~Y8d#uL^0-SNaCeS18i=&^W0)px`bix=s;I4XKSM^zu-=+Or`di6aV zefkhbP2b1SukVi+@cw(k`Yt_Lz{oiq+8)+p(!jGA4;65@Xq?>NP#xB{S0pGG;E;Wy z+tc8wuP)#Se@X%Oh4n}QAL{f5y(i!adaIt4!8*=hxjTKQv6|$dPZaQxZmmIkQPLhJ zt-;fvh4s7jkI|X}j!pSQ&=>TcoPI5=ZbOHR#tr zMQJp(f66a{{-Abp`roIqtm>kYaFZ^n(vkjdUxQ~>#b?5LzyA3m>3FAKQufR&3wR`~ z@6#V8QEq*;vnE(`f+qSdEqa{x)=GQB`hJ@A81&-g>)io55GdeD{(ND5pd7HEzkqMe zgz~sFcd)3WC^oDQ>EA8c7OW}Y`;`i@ys3Jnxp!1)56kp)`?S+Fnj{SPc> zWnaglZDf&Nk7c-ls};BvP3Yr%5I12TpR!4;L`q)UScR8(5xkC8yn)q1FRp=1%QQ3v{Vly9zQFMwOxJ?Y8OAK=_jg2CYP2xVj`X0dT;u!7_C-{E?z2X$M zi1Ubu7x9wu}Gp#r6(jt}5(w`LW9t#BNt323!g3aqUOKmBEnfD29uT z_bisk=EAdhj=t5n#_)4I&(^EQX8Z!bWG5$i{sp|q+3VE08<*MRZ-@u+E6%EgDh|`X z%TPqEIEY{4H}Hs6q94EIS+D5f?INZ4=+|<_?|EqSVkNfW74Ds<*3v95s_;AVX<~}8 zlqdZ3=oI3`*_$|q-{TLoE=Wjt6|W&cUz+eoMm2yx(Qd*=nf7Py{DnJ@AmDo&0RroYoX7yj`-!W5g+ literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/bin/ShortPath.class b/software/LepMap3/lm3/bin/ShortPath.class new file mode 100644 index 0000000000000000000000000000000000000000..fccee924dbdd4a6df9d3dc614df14a98b5748db2 GIT binary patch literal 10253 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

$-u)5!(lK$ zsU;VM=lzZbs>4c$`Vt+&`x4!vmnZnP+LT^UGfAnKh%|8~lZf&=r5a)N3*02`?y#DY z!AN~YD z0U5r_EH2?aKEh?p9N=Bt<6UI75>%^BgY+uF#b^@||bDU84i@ba{c!UPqpB z1vd_Gy^q^eK=#Uq?Jf;)MPuiB*rBJ|TocsJbz63B0O~7*glya%e~e7u=b{Jse*yL3 BI1c~- literal 0 HcmV?d00001 diff --git a/software/LepMap3/lm3/qtl.R b/software/LepMap3/lm3/qtl.R new file mode 100644 index 0000000..601b146 --- /dev/null +++ b/software/LepMap3/lm3/qtl.R @@ -0,0 +1,98 @@ +# +# This file is part of Lep-MAP3. +# +# Lep-MAP3 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Lep-MAP3 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Lep-MAP3. If not, see . +# +# Copyright (C) 2021 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki + + +#QTL LOD plot + +library(scales) + +p=read.table("qtlphenotypes.txt", sep="\t") + +png("qtl.png",600,600) + +mh = list() +mhc = list() + +mh2 = list() + +for (chr in 1:1) {#edit to work for multiple chromosomes, e.g. 1:21 + d=read.table(paste0("qtldata",chr,".12"), sep="\t") + n=nrow(d) + m=ncol(d) + + #different families + fam=unique(t(d[1,5:m])) + + gen=d[7:n,5:m] + + data1 = 2 * (gen == "1 1") + 2 * (gen == "1 2") - 1 + data2 = 2 * (gen == "1 1") + 2 * (gen == "2 1") - 1 + data3 = 2 * (gen == "1 1") + 2 * (gen == "2 2") - 1 + + numMarkers = n - 6 + numFamilies = length(fam) + print(paste0(numMarkers, " markers and ", numFamilies, " families")) + + sex = p$V1 - 1 + weight = p$V2 + + ret = matrix(0, nrow = numMarkers, ncol = numFamilies) + + famIndex = 1 + for (f in fam) { + fi = (d[1,5:m] == f) + + d1 = data1[,fi] + d2 = data2[,fi] + d3 = data3[,fi] + s = sex[fi] + w = weight[fi] + + m0 = glm(w ~ s) + l0 = logLik(m0) + + #cat(s, "\n") + + m1 = glm(w ~ s + d1[1,] + d2[1,] + d3[1,]) + l1 = logLik(m1) + ret[1, famIndex] = l1 - l0 + for (i in 2:numMarkers) { + if (!all(d1[i - 1,] == d1[i,]) | !all(d2[i - 1,] == d2[i,])) { + m1 = glm(w ~ s + d1[i,] + d2[i,] + d3[i,]) + l1 = logLik(m1) + } + ret[i, famIndex] = l1 - l0 + } + famIndex = famIndex + 1 + } + rs = rowSums(ret) +# plot(rs, ylim=c(20, max(max(rs), qchisq(.95, df=numFamilies * 3)))) + mh[[chr]] = rs + mhc[[chr]] = rep((chr %% 2) + 1, length(rs)) + + mh2[[chr]] = ret + +} +y=Reduce(c, mh) +plot(y, col=alpha(Reduce(c, mhc), 0.5), pch=19, xlab="Marker", ylab="LOD", cex.lab=1.5, ylim=c(0,max(y))) + +#plot significant lines, could be loaded from a file +#abline(h=103.10) #5%, from qtlPerm.R +#abline(h=109.76) #1%, from qtlPerm.R +dev.off() +warnings() diff --git a/software/LepMap3/lm3/qtl.png b/software/LepMap3/lm3/qtl.png new file mode 100644 index 0000000000000000000000000000000000000000..378db26608cea54b4ac5b0fcb45a5180bddeaa60 GIT binary patch literal 25626 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. +# +# Copyright (C) 2021 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki + +#QTL permutation test, slow! + +p=read.table("qtlphenotypes.txt", sep="\t") + +library(doParallel) + +#permutate but keep sex intact +myPerm <- function(sex) { + result = 1:length(sex) + + males = which(sex %in% 0) + females = which(sex %in% 1) + + perm1 = sample(males,replace=F) + perm2 = sample(females,replace=F) + result[males] = perm1 + result[females] = perm2 + + return(result) +} + +for (chr in 1:1) { #change to work with all chromosomes, e.g 1:21 + d=read.table(paste0("qtldata",chr,".12"), sep="\t") + n=nrow(d) + m=ncol(d) + + #different families + fam=unique(t(d[1,5:m])) + + gen=d[7:n,5:m] + + data1 = 2 * (gen == "1 1") + 2 * (gen == "1 2") - 1 + data2 = 2 * (gen == "1 1") + 2 * (gen == "2 1") - 1 + data3 = 2 * (gen == "1 1") + 2 * (gen == "2 2") - 1 + + numMarkers = n - 6 + numFamilies = length(fam) + numIndividuals = m - 4 + print(paste0(numMarkers, " markers and ", numFamilies, " families")) + + cl = makeCluster(10) #use 10 cores + registerDoParallel(cl) + maxl = foreach(j=1:1000, .combine=rbind) %dopar% { + + sex = p$V1 - 1 + weight = p$V2 + + ret = matrix(0, nrow = numMarkers, ncol = numFamilies) + + famIndex = 1 + for (f in fam) { + fi = (d[1,5:m] == f) + + d1 = data1[,fi] + d2 = data2[,fi] + d3 = data3[,fi] + s = sex[fi] + w = weight[fi] + + perm = myPerm(s) #do not permutate first 2 elements (parents) nor change sexes + s = s[perm] + w = w[perm] + + m0 = glm(w ~ s) + l0 = logLik(m0) + + m1 = glm(w ~ s + d1[1,] + d2[1,] + d3[1,]) + l1 = logLik(m1) + ret[1, famIndex] = l1 - l0 + for (i in 2:numMarkers) { + if (!all(d1[i - 1,] == d1[i,]) | !all(d2[i - 1,] == d2[i,])) { + m1 = glm(w ~ s + d1[i,] + d2[i,] + d3[i,]) + l1 = logLik(m1) + } + ret[i, famIndex] = l1 - l0 + } + famIndex = famIndex + 1 + } + max(rowSums(ret)) + } + stopCluster(cl) + maxl=sort(maxl, decreasing=T) + cat(chr, maxl[10], maxl[50], "\n") #print LOD limits for pvalues 0.01 and 0.05 +} + +warnings() diff --git a/software/LepMap3/lm3/qtldata1.12 b/software/LepMap3/lm3/qtldata1.12 new file mode 100644 index 0000000..7632a10 --- /dev/null +++ b/software/LepMap3/lm3/qtldata1.12 @@ -0,0 +1,268 @@ +MARKER CHR MALE_POS FEMALE_POS P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 +MARKER CHR MALE_POS FEMALE_POS P1 P2 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 P3 P4 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 P5 P6 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 P7 P8 C45 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55 C56 C57 C58 C59 P9 P10 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C70 C71 C72 C73 C74 P11 P12 C75 C76 C77 C78 C79 C80 C81 C82 C83 C84 C85 C86 C87 C88 P13 P14 C89 C90 C91 C92 C93 C94 C95 C96 C97 C98 C99 C100 C101 C102 P15 P16 C103 C104 C105 C106 C107 C108 C109 C110 C111 C112 C113 C114 C115 C116 P17 P18 C117 C118 C119 C120 C121 C122 C123 C124 C125 C126 C127 C128 C129 C130 C131 P19 P20 C132 C133 C134 C135 C136 C137 C138 C139 C140 C141 C142 C143 P21 P22 C144 C145 C146 C147 C148 C149 C150 C151 C152 C153 C154 C155 C156 C157 P23 P24 C158 C159 C160 C161 C162 C163 C164 C165 C166 C167 C168 C169 C170 C171 P25 P26 C172 C173 C174 C175 C176 C177 C178 C179 C180 C181 C182 C183 C184 C185 P27 P28 C186 C187 C188 C189 C190 C191 C192 C193 C194 C195 C196 C197 C198 C199 P29 P30 C200 C201 C202 C203 C204 C205 C206 C207 C208 C209 C210 C211 C212 C213 P31 P32 C214 C215 C216 C217 C218 C219 C220 C221 C222 P33 P34 C223 C224 C225 C226 C227 C228 C229 C230 C231 C232 C233 C234 C235 C236 P35 P36 C237 C238 C239 C240 C241 C242 C243 C244 C245 C246 C247 C248 C249 P37 P38 C250 C251 C252 C253 C254 C255 C256 C257 C258 C259 C260 C261 C262 C263 P39 P40 C264 C265 C266 C267 C268 C269 C270 C271 C272 C273 C274 C275 C276 P41 P42 C277 C278 C279 C280 C281 C282 C283 C284 C285 C286 C287 C288 C289 C290 C291 P43 P44 C292 C293 C294 C295 C296 C297 C298 C299 C300 C301 C302 C303 C304 C305 C306 P45 P46 C307 C308 C309 C310 C311 C312 C313 C314 C315 C316 C317 C318 C319 C320 C321 P47 P48 C322 C323 C324 C325 C326 C327 C328 C329 C330 C331 C332 C333 C334 C335 P49 P50 C336 C337 C338 C339 C340 C341 C342 C343 C344 C345 C346 C347 C348 C349 C350 P51 P52 C351 C352 C353 C354 C355 C356 C357 C358 C359 C360 C361 C362 P53 P54 C363 C364 C365 C366 C367 C368 C369 C370 C371 C372 C373 C374 C375 P55 P56 C376 C377 C378 C379 C380 C381 C382 C383 C384 C385 C386 C387 C388 C389 C390 C391 P57 P58 C392 C393 C394 C395 C396 C397 C398 C399 C400 C401 C402 C403 C404 C405 C406 P59 P60 C407 C408 C409 C410 C411 C412 C413 C414 C415 C416 C417 C418 P61 P62 C419 C420 C421 C422 C423 C424 C425 C426 C427 C428 C429 P63 P64 C430 C431 C432 C433 C434 C435 C436 C437 C438 C439 C440 C441 C442 C443 C444 +MARKER CHR MALE_POS FEMALE_POS 0 0 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 0 0 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 0 0 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 0 0 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 0 0 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 0 0 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 0 0 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 0 0 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 0 0 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 0 0 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 0 0 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 0 0 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 0 0 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 0 0 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 0 0 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 0 0 P31 P31 P31 P31 P31 P31 P31 P31 P31 0 0 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 0 0 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 0 0 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 0 0 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 0 0 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 0 0 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 0 0 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 0 0 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 0 0 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 0 0 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 0 0 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 0 0 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 0 0 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 0 0 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 0 0 P61 P61 P61 P61 P61 P61 P61 P61 P61 P61 P61 0 0 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 +MARKER CHR MALE_POS FEMALE_POS 0 0 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 0 0 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 0 0 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 0 0 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 0 0 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 0 0 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 0 0 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 0 0 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 0 0 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 0 0 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 0 0 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 0 0 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 0 0 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 0 0 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 0 0 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 0 0 P32 P32 P32 P32 P32 P32 P32 P32 P32 0 0 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 0 0 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 0 0 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 0 0 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 0 0 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 0 0 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 0 0 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 0 0 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 0 0 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 0 0 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 0 0 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 0 0 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 0 0 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 0 0 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 0 0 P62 P62 P62 P62 P62 P62 P62 P62 P62 P62 P62 0 0 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 +MARKER CHR MALE_POS FEMALE_POS 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +MARKER CHR MALE_POS FEMALE_POS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1429 0 0.000 0.000 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 2 1 1 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +1431 0 5.776 1.316 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +9366 0 7.239 1.316 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +9367 0 7.239 2.620 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +3453 0 8.052 3.430 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +12113 0 8.821 6.568 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 +12937 0 9.821 8.171 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +12294 0 11.365 8.171 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +13437 0 12.245 9.258 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +14547 0 12.245 9.258 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +2600 0 12.245 9.509 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +2601 0 12.784 9.993 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +2599 0 13.595 10.234 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +2598 0 13.845 11.208 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +2337 0 13.845 11.208 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +119 0 14.598 12.147 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +120 0 14.839 12.614 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +10409 0 14.839 12.614 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +10411 0 14.839 13.081 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +10412 0 14.839 15.707 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 +12392 0 16.800 16.160 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +14062 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +4395 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +4397 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +11969 0 17.268 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +7707 0 18.207 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +14689 0 18.207 17.295 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12577 0 18.207 17.295 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6272 0 18.909 18.204 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12865 0 19.376 18.656 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +8263 0 19.376 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +4899 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +3907 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +14317 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +15079 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +581 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +580 0 19.843 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +14369 0 20.068 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12051 0 20.068 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +7345 0 20.294 19.560 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +7343 0 20.294 19.560 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +9180 0 20.294 20.240 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +9181 0 20.520 20.693 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +9179 0 20.520 20.693 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +2799 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +7782 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +7783 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +11191 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +13330 0 21.885 22.053 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +14660 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +14023 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +14049 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +3706 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +11393 0 22.337 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +15152 0 22.337 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +204 0 22.337 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +203 0 22.790 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +13584 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +10576 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +10575 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +6982 0 22.790 24.555 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +458 0 22.790 24.555 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +12145 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +11993 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +11591 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +12471 0 22.790 25.916 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +4081 0 22.790 26.141 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +4080 0 22.790 26.141 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 +12064 0 23.242 27.051 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12538 0 23.242 28.190 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12787 0 23.242 28.190 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10218 0 23.242 28.642 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10217 0 23.242 29.781 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10216 0 23.242 29.781 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10214 0 23.922 30.007 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10213 0 24.831 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +10212 0 24.831 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +465 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +12852 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +2274 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +5844 0 25.512 30.685 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +5843 0 25.737 30.911 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +5340 0 25.737 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6202 0 25.963 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +13943 0 26.189 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +11263 0 26.189 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6378 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6381 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6384 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +6383 0 27.551 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +9615 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +9614 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +3377 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 +3379 0 28.685 33.407 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +3380 0 28.911 34.316 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +773 0 29.820 34.316 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +774 0 30.273 35.918 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +4512 0 30.273 36.371 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +4815 0 30.273 36.371 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 +3959 0 30.498 38.675 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +3956 0 30.498 38.901 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +3955 0 31.637 38.901 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +3957 0 33.942 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +4677 0 34.168 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +4676 0 34.168 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +4675 0 34.394 42.345 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +14724 0 34.846 42.570 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12525 0 34.846 42.570 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +15043 0 35.072 43.023 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +14255 0 35.072 43.249 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12735 0 35.524 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7532 0 35.750 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7530 0 35.750 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7525 0 35.750 44.613 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7527 0 35.976 45.294 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7526 0 36.201 46.433 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7528 0 36.201 46.658 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7704 0 36.201 47.111 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +14147 0 36.201 47.337 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7705 0 36.427 47.562 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +14617 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +8750 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +13413 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +8144 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +8145 0 36.653 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +1390 0 36.879 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +1389 0 36.879 48.014 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12985 0 36.879 48.240 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +4053 0 37.104 49.149 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +6361 0 37.104 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +13792 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7332 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7331 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7328 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +7329 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12320 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +2884 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10394 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10393 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10392 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10390 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +1324 0 37.556 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +13541 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12925 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +1322 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +1321 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +11730 0 38.234 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +12688 0 38.914 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10477 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10478 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +10449 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +349 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +350 0 39.593 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 +344 0 40.045 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +345 0 40.045 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +347 0 40.045 50.730 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +341 0 40.045 50.730 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +356 0 40.045 50.956 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12091 0 40.271 51.181 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12401 0 40.271 51.181 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +5591 0 40.723 51.407 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +5594 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13999 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12652 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12882 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1436 0 41.404 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1850 0 41.404 52.313 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +8176 0 41.404 52.539 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +8177 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11338 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9579 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12638 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +7580 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +7579 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +7578 0 41.856 55.054 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11024 0 41.856 55.054 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1263 0 41.856 55.280 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1262 0 41.856 56.189 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11025 0 41.856 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13276 0 42.082 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13112 0 42.082 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12532 0 42.308 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +3472 0 42.308 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +836 0 42.760 56.640 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +834 0 42.760 56.866 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +562 0 43.899 57.775 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +563 0 45.038 58.914 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1750 0 45.491 59.367 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +1751 0 45.716 59.819 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13692 0 45.716 60.272 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +8242 0 45.942 60.497 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11556 0 45.942 60.723 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +6312 0 45.942 60.723 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +6313 0 46.168 61.176 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +6314 0 46.620 61.856 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +6315 0 46.846 61.856 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9370 0 47.072 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9372 0 47.072 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9371 0 47.297 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9540 0 47.297 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9539 0 47.297 62.765 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9542 0 47.750 63.904 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9543 0 48.202 64.130 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +14805 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13481 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13698 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +14208 0 48.655 64.808 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9545 0 48.655 64.808 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9547 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +12835 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +15217 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +6687 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +2761 0 50.020 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +13576 0 50.020 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9783 0 50.020 65.713 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11944 0 50.245 65.939 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +74 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9405 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10781 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +9404 0 50.926 67.300 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10782 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10926 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10940 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10939 0 51.151 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10937 0 51.377 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +11966 0 51.377 68.662 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10934 0 51.377 68.662 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10935 0 51.377 69.114 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10533 0 51.603 69.340 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +10534 0 51.829 71.175 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +640 0 52.281 71.401 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +7692 0 52.281 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 +7694 0 52.961 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +7693 0 53.187 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +3725 0 53.187 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4975 0 53.187 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4973 0 54.364 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4974 0 54.831 72.305 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4061 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4063 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4262 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +4263 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +12195 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +255 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +256 0 55.559 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +10750 0 57.525 73.724 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +6020 0 58.253 73.976 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +7893 0 58.253 74.228 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +7892 0 58.513 75.017 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +7896 0 58.513 75.807 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +7895 0 59.296 76.596 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +8917 0 59.817 77.416 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +8916 0 59.817 78.790 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +13565 0 60.405 79.085 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +3722 0 60.993 79.085 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 +3721 0 62.532 80.698 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +9369 0 62.877 81.750 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +9368 0 63.629 82.150 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +6747 0 63.629 86.302 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +2851 0 63.629 87.978 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +8388 0 68.394 91.313 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 +12513 0 68.394 91.313 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 diff --git a/software/LepMap3/lm3/qtlphenotypes.txt b/software/LepMap3/lm3/qtlphenotypes.txt new file mode 100644 index 0000000..434bb70 --- /dev/null +++ b/software/LepMap3/lm3/qtlphenotypes.txt @@ -0,0 +1,508 @@ +NA NA +NA NA +2 63.98 +2 63.65 +1 54.03 +2 73.78 +2 69.89 +1 49.15 +1 54.10 +2 48.16 +2 37.43 +1 62.34 +1 44.18 +1 72.51 +2 70.07 +2 49.89 +2 69.22 +NA NA +NA NA +1 57.60 +2 61.07 +1 47.42 +1 50.30 +2 80.13 +1 44.32 +2 57.72 +2 68.82 +1 83.58 +2 72.92 +1 67.53 +2 65.10 +2 47.50 +2 65.55 +NA NA +NA NA +2 32.20 +1 37.00 +2 76.90 +2 21.30 +2 51.60 +2 28.20 +1 39.60 +1 25.50 +1 45.60 +2 31.90 +1 33.60 +2 42.80 +2 36.60 +2 37.60 +1 37.50 +NA NA +NA NA +1 48.50 +2 41.10 +2 40.90 +1 35.10 +1 33.60 +2 36.40 +1 35.80 +2 38.20 +1 38.10 +2 53.90 +1 31.90 +1 50.70 +1 26.90 +2 45.30 +1 61.99 +NA NA +NA NA +2 35.50 +1 36.20 +2 38.10 +1 33.10 +1 45.10 +1 33.60 +1 35.50 +1 37.30 +1 33.60 +1 37.30 +2 34.30 +1 31.00 +1 28.63 +2 39.30 +1 27.60 +NA NA +NA NA +2 26.10 +1 32.10 +1 32.10 +2 38.10 +1 46.10 +1 56.10 +1 46.10 +1 26.10 +1 32.10 +1 46.10 +2 32.10 +2 56.10 +1 38.10 +2 46.10 +NA NA +NA NA +2 24.00 +2 34.70 +2 41.20 +2 29.50 +1 31.10 +2 47.40 +2 27.80 +1 37.40 +2 38.40 +1 35.00 +2 36.50 +1 37.00 +2 28.80 +1 37.60 +NA NA +NA NA +2 39.80 +1 34.20 +1 38.50 +2 81.50 +2 42.60 +1 45.40 +2 44.20 +1 50.60 +2 25.70 +2 43.40 +2 50.40 +1 36.60 +2 34.80 +2 37.50 +NA NA +NA NA +2 44.90 +2 34.10 +2 36.90 +2 35.10 +1 44.30 +2 35.60 +1 38.10 +1 33.90 +1 42.60 +1 32.10 +1 63.00 +1 29.50 +2 36.60 +1 36.30 +1 30.80 +NA NA +NA NA +2 54.50 +1 47.70 +2 48.70 +1 53.90 +2 48.30 +1 51.20 +2 67.30 +2 56.10 +1 55.40 +1 58.00 +1 61.20 +2 57.30 +NA NA +NA NA +2 82.50 +1 53.34 +1 66.52 +2 85.24 +1 56.96 +1 63.08 +2 75.64 +2 57.13 +2 60.51 +1 52.42 +1 36.89 +1 46.01 +1 38.48 +2 83.35 +NA NA +NA NA +2 42.44 +1 37.16 +2 55.08 +2 66.76 +2 68.19 +2 42.43 +2 33.14 +2 41.72 +2 46.48 +2 61.80 +2 41.24 +2 88.40 +2 54.25 +1 33.00 +NA NA +NA NA +2 31.17 +1 34.41 +2 25.97 +1 31.19 +2 41.48 +2 42.99 +1 22.06 +1 46.67 +2 51.31 +1 29.87 +1 29.80 +2 28.96 +1 37.84 +2 28.52 +NA NA +NA NA +1 35.26 +2 53.23 +1 68.80 +1 37.21 +1 36.07 +2 64.30 +1 54.39 +2 47.28 +2 48.04 +1 44.62 +1 35.07 +1 56.05 +1 80.23 +1 67.57 +NA NA +NA NA +2 53.08 +1 44.75 +1 35.59 +1 60.11 +1 75.79 +1 61.05 +1 33.83 +1 38.91 +1 32.03 +1 54.25 +2 48.88 +1 57.88 +2 47.82 +1 66.53 +NA NA +NA NA +1 60.39 +1 62.59 +2 70.29 +1 57.42 +1 50.27 +2 69.30 +1 57.09 +1 61.16 +2 92.29 +NA NA +NA NA +2 48.70 +1 32.50 +1 44.40 +1 38.50 +1 56.80 +1 39.50 +2 53.90 +1 38.20 +1 43.20 +2 32.30 +2 50.60 +1 49.00 +2 52.20 +1 40.70 +NA NA +NA NA +2 57.03 +1 64.17 +2 66.79 +2 59.26 +1 25.57 +1 61.80 +1 62.67 +2 90.99 +2 54.46 +2 77.43 +2 42.81 +2 51.98 +2 53.06 +NA NA +NA NA +1 44.30 +1 56.77 +2 38.62 +1 59.63 +2 44.23 +1 56.16 +1 69.86 +1 55.28 +1 53.76 +2 28.66 +2 30.82 +2 49.59 +2 51.20 +2 53.20 +NA NA +NA NA +1 47.91 +1 53.83 +1 42.56 +2 64.82 +1 52.50 +2 56.54 +2 60.20 +2 41.58 +1 63.92 +2 46.95 +2 39.84 +1 51.46 +2 40.30 +NA NA +NA NA +2 77.08 +1 66.90 +1 50.50 +1 53.11 +1 46.73 +1 56.02 +1 52.41 +2 48.08 +1 43.49 +1 41.47 +1 50.53 +1 42.26 +2 90.77 +1 31.81 +1 67.00 +NA NA +NA NA +2 80.71 +2 104.39 +1 79.32 +2 76.36 +2 83.34 +1 74.48 +2 92.51 +2 109.66 +1 99.66 +2 98.02 +2 66.11 +2 70.17 +1 95.19 +2 51.32 +2 112.95 +NA NA +NA NA +2 58.09 +1 49.46 +2 52.82 +1 48.50 +1 33.66 +1 50.86 +2 52.72 +2 45.29 +1 53.86 +1 40.85 +1 50.67 +2 50.03 +1 67.68 +2 69.16 +1 60.50 +NA NA +NA NA +2 37.06 +1 22.14 +2 60.61 +2 39.52 +1 51.75 +2 44.95 +2 35.43 +2 61.76 +2 80.09 +1 56.54 +2 35.74 +2 64.05 +2 44.11 +2 52.06 +NA NA +NA NA +2 78.54 +1 49.74 +2 98.18 +1 65.45 +1 52.36 +2 39.27 +1 39.27 +1 39.27 +1 32.73 +1 39.27 +1 30.11 +2 28.80 +2 15.71 +1 23.56 +1 32.73 +NA NA +NA NA +1 42.60 +2 48.65 +2 58.22 +2 93.54 +1 44.06 +1 44.68 +1 57.24 +1 59.04 +2 43.42 +1 57.39 +2 68.76 +1 60.32 +NA NA +NA NA +2 72.98 +1 31.62 +2 53.34 +2 38.58 +2 42.44 +2 40.41 +1 46.32 +1 54.70 +1 42.08 +1 38.63 +1 40.83 +2 40.64 +1 59.31 +NA NA +NA NA +1 40.25 +1 79.39 +2 65.33 +1 71.14 +1 52.94 +2 57.55 +1 49.04 +2 55.29 +2 35.99 +1 42.87 +1 38.64 +2 81.96 +1 61.85 +1 42.55 +1 130.12 +2 64.68 +NA NA +NA NA +1 39.27 +1 70.98 +2 29.98 +1 30.01 +2 69.08 +1 48.38 +2 45.27 +1 34.45 +2 28.93 +1 62.67 +2 51.23 +2 35.82 +1 63.93 +1 48.92 +1 35.21 +NA NA +NA NA +1 47.70 +2 72.48 +2 57.48 +2 44.47 +2 38.66 +1 46.24 +2 57.52 +2 43.92 +2 35.39 +1 54.63 +2 35.49 +2 39.95 +NA NA +NA NA +2 72.62 +2 57.15 +1 54.49 +2 60.72 +1 63.01 +2 78.22 +2 103.57 +2 67.38 +2 54.79 +2 54.44 +1 70.06 +NA NA +NA NA +1 75.02 +2 74.04 +2 51.01 +2 50.70 +1 76.86 +2 77.59 +2 66.70 +2 48.47 +1 75.20 +1 68.60 +1 65.73 +2 62.63 +1 95.22 +1 72.85 +2 39.00 diff --git a/software/LepMap3/lm3/src/Constants.java b/software/LepMap3/lm3/src/Constants.java new file mode 100644 index 0000000..7f80868 --- /dev/null +++ b/software/LepMap3/lm3/src/Constants.java @@ -0,0 +1,44 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki +*/ +//Some constants +public class Constants { + public static final double LOGHALF = Math.log10(0.5); + public static final double LOGTWO = Math.log10(2.0); + public static final double LOGTHIRD = Math.log10(1.0 / 3.0); + public static final double LOGTHREE = Math.log10(3.0); + public static final double LOGFOUR = Math.log10(4.0); + public static final double LOGE = Math.log10(Math.E); + public static final double invLOGE = 1.0 / Math.log10(Math.E); + + public static final double LN10 = Math.log(10.0); + public static final double LN2 = Math.log(2.0); + public static final double LNHALF = Math.log(0.5); + public static final double invLN2 = 1.0 / Math.log(2.0); + + public static final double PI = Math.PI; + public static final double E = Math.E; + public static final double SQRT2 = Math.sqrt(2.0); + public static final double SQRTHalf = Math.sqrt(0.5); + public static final double ONETHIRD = 1.0 / 3.0; + + private Constants() + { + } + +} diff --git a/software/LepMap3/lm3/src/Data2.java b/software/LepMap3/lm3/src/Data2.java new file mode 100644 index 0000000..3d95dbd --- /dev/null +++ b/software/LepMap3/lm3/src/Data2.java @@ -0,0 +1,268 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2014 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + +public class Data2 { + // indexes in LINKAGE file + static final int FAMILY_ID = 0; + static final int INDIVIDUAL_ID = 1; + static final int FATHER_ID = 2; + static final int MOTHER_ID = 3; + static final int SEX = 4; + static final int TRAIT = 5; + static final int FIRST_GENOTYPE = 6; + + private boolean phasedData = false; + + private ArrayList families = new ArrayList(); + private ArrayList markerNames = new ArrayList(); + private ArrayList markerNameNumbers = new ArrayList(); + + public String getMarkerName(int marker) + { + return markerNames.get(marker); + } + + private boolean numberInit = false; + HashMap scaffoldHash = new HashMap(); + + + public long getMarkerNameNumber(int marker) + { + if (!numberInit) { + int n = 0; + long mi = 0; + for (String m : markerNames) { + String s[] = m.split("\t"); + if (!scaffoldHash.containsKey(s[0])) + scaffoldHash.put(s[0], n++); + long pos = mi; + try { + pos = Long.parseLong(s[1]); + } catch (Exception e) { + } + markerNameNumbers.add(((long) (scaffoldHash.get(s[0])) << 32) + pos); // max chromosome pos = 2**32 - 1 + ++mi; + } + numberInit = true; + } + return markerNameNumbers.get(marker); + } + + + public String getIndividualName(int index) + { + return individualHash.get(index); + } + + public boolean isPhased(){ + return phasedData; + } + + public void setPhasedData(boolean phased){ + phasedData = phased; + } + public void setRandomPhase(){ + if (!phasedData) + for (Family2 f : families) + f.randomPhase(); + + } + + public ArrayList getFamilies() + { + return families; + } + public int getNumMarkers() + { + if (families.size() == 0) + return 0; + return getFamilies().get(0).getNumMarkers(); + } + + public void subSampleData(double rate) + { + if (rate < 1.0) { + int numM = getNumMarkers(); + for (int m = 0; m < numM; ++m) + if (Math.random() > rate) + for (Family2 f: families) + f.removeMarker(m); + } + + } + + public int getNumFamilies() + { + return families.size(); + } + + private float[] addToArray(float values[], float array[], int start) + { + if (start + values.length > array.length) + array = Misc.resizeArray(array, (int) (1 + 1.2 * (start + values.length))); + for (float f : values) + array[start++] = f; + return array; + } + + public void scale(double value) { + for (Family2 f: families) { + f.scale(value); + } + } + + public void setMinError(double value) { + for (Family2 f: families) { + f.minError((float) value); + } + } + + public void removeMarker(int m) + { + for (Family2 f: families) + f.removeMarker(m); + + } + public void keepFamilies(ArrayList famNames) + { + HashMap nameHash = new HashMap(); + for (String name : famNames) + nameHash.put(name, 1); + for (Family2 f: families) + if (!nameHash.containsKey(f.getName())) + for (int m = 0; m < f.getNumMarkers(); ++m) + f.removeMarker(m); + } + public void addFamilyFromFile(String filename, String informativeMask) + { + addFamilyFromFile(filename, informativeMask, null, false); + } + + HashMap individualHash = new HashMap(); + + public void addFamilyFromFile(String filename, String informativeMask, boolean mask[], boolean grandparentPhase) + { + // TODO: check consistency of the input pedigree file... + + int numIndividuals = 0; + + System.err.println("Loading file"); + + DataParser dp = new DataParser(); + dp.loadFile(filename, null, null); + + ArrayList dl = dp.getNextLine(false, false); + + ArrayList> familyIndex = dp.getFamilies(); + ArrayList parentIndex = dp.getParentIndex(); + int individualIndex = 0; + for (int fi = 0; fi < familyIndex.size(); ++fi ) { + String familyName = dp.getFamilyName(fi); + families.add(new Family2(familyName)); + int fis = familyIndex.get(fi).size(); + for (int i = 0; i < fis - 2; ++i) + individualHash.put(individualIndex++, familyName + "\t" + dp.getIndividualName(familyIndex.get(fi).get(i))); + numIndividuals += fis; + + } + ArrayList sex = dp.getSex(); + + int lineNumber = 0; + + while (dl != null) { + markerNames.add(dp.getMarkerName()); + + if (mask != null && mask.length > lineNumber && !mask[lineNumber]) { + for (int fi = 0; fi < familyIndex.size(); ++fi ) + families.get(fi).addMarker(); // add dummy marker + } + else { + for (int fi = 0; fi < familyIndex.size(); ++fi ) { + families.get(fi).addMarker(dl, familyIndex.get(fi), sex, informativeMask, grandparentPhase, parentIndex.get(fi)); + } + } + + ++lineNumber; + if (lineNumber % 100000 == 0) + System.err.println("processed " + lineNumber + " lines" ); + + if (mask != null && mask.length > lineNumber && !mask[lineNumber]) + dp.getNextLine(false, true); //do not process line + else + dl = dp.getNextLine(false, false); // no skip + } + System.err.println("File loaded with " + lineNumber + " SNPs" ); + + System.err.println("Number of individuals = " + numIndividuals + " excluding grandparents"); + System.err.println("Number of families = " + familyIndex.size()); + } + + public char[] getIgnoreParentOrder(int marker) { + int numF = getNumFamilies(); + char ret[] = new char[numF]; + Arrays.fill(ret, '_'); + String m = markerNames.get(marker); + if (m.length() > numF) { + int start = m.length() - numF; + //only '+' and '_' allowed for the last characters... + for (int f = 0; f < numF; ++f) + switch (m.charAt(f + start)) { + case '+' : break; + case '_' : break; + default: return ret; + } + for (int f = 0; f < numF; ++f) + ret[f] = m.charAt(f + start); + } + return ret; + + } + + public void maskIgnoreParentOrder() { + int numF = getNumFamilies(); + int numM = getNumMarkers(); +out: for (int mi = 0; mi < numM; ++mi) { + String m = markerNames.get(mi); + if (m.length() > numF) { + int start = m.length() - numF; + //only '+' and '_' allowed for the last characters... + for (int i = 0; i < numF; ++i) + switch (m.charAt(i + start)) { + case '+' : break; + case '_' : break; + default: continue out; + } + for (int i = 0; i < numF; ++i) + if (m.charAt(i + start) == '+') + families.get(i).removeMarker(mi); + } + } + } + +} diff --git a/software/LepMap3/lm3/src/DataParser.java b/software/LepMap3/lm3/src/DataParser.java new file mode 100644 index 0000000..f3d1a40 --- /dev/null +++ b/software/LepMap3/lm3/src/DataParser.java @@ -0,0 +1,779 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +//Parses the pedigree and posterior data from a file +//takes into account grandparents (and removes them from families) +//getParentIndex gives the indexes for parents and grandparents... +public class DataParser { + + private String names[] = null; + private String fathers[] = null; + private String mothers[] = null; + + private int numIndividuals; + + private String markerName = ""; + + private FileParser fp = null; + private BufferedReader br = null; + private String fn2 = null; + private int lineNumber = 0; + + private ArrayList> families = new ArrayList>(); + private ArrayList parentIndex = new ArrayList(); + private ArrayList familyNames = new ArrayList(); + private ArrayList sex = new ArrayList(); + private HashMap familyHash = new HashMap(); + + public DataParser() { + } + + public String getIndividualName(int index) { + return names[index + 2]; + } + + public ArrayList getFamilyNames(){ + ArrayList ret = new ArrayList(); + ret.addAll(familyNames); + return ret; + } + public String getFamilyName(int index){ + return familyNames.get(index); + } + + public String getFName() { + return markerName; + } + + public String getMarkerName() { + return markerName; + } + public ArrayList> getFamilies() { + ArrayList> ret = new ArrayList>(); + for (ArrayList al : families) { + ArrayList l = new ArrayList(); + l.addAll(al); + ret.add(l); + } + return ret; + } + + public ArrayList getParentIndex() { + ArrayList ret = new ArrayList(); + for (int[] al : parentIndex) { + int r[] = Arrays.copyOf(al, al.length); + ret.add(r); + } + return ret; + } + public ArrayList getSex() { + ArrayList ret = new ArrayList(); + ret.addAll(sex); + return ret; + } + public int getNumIndividuals() { + return numIndividuals; + } + + private int[] getParentsAndGrandParents(String names[], String fathers[], String mothers[]) + { + names = Arrays.copyOfRange(names, 2, names.length); + fathers = Arrays.copyOfRange(fathers, 2, fathers.length); + mothers = Arrays.copyOfRange(mothers, 2, mothers.length); + int fi = 0; + for (ArrayList familyIndex : families) + parentIndex.add(getParentsAndGrandParents(names, fathers, mothers, familyIndex, familyNames.get(fi++))); + return null; + } + + private int[] getParentsAndGrandParents(String names[], String fathers[], String mothers[], ArrayList familyIndex, String familyName) + { + + ArrayList founders = new ArrayList(); + ArrayList children = new ArrayList(); + + HashMap nameHash = new HashMap(); + + HashMap parents = new HashMap(); + + for (int i: familyIndex) { + if (fathers[i].equals("0") || mothers[i].equals("0")) + founders.add(i); + nameHash.put(names[i], i); + if (!fathers[i].equals("0")) + parents.put(fathers[i], true); + if (!mothers[i].equals("0")) + parents.put(mothers[i], true); + //System.err.println(names[i]); + + //if (motherHash.containsKey(names[i])) + // Error.error(-99999); + //if (fatherHash.containsKey(names[i])) + // Error.error(-99999); + //fatherHash.put(names[i], fathers[i]); + //motherHash.put(names[i], mothers[i]); + } + //System.err.println(parents); + for (int i: familyIndex) { + if (!parents.containsKey(names[i])) { + children.add(i); + //System.err.println(names[i]); + } + } + + int father = -1; + int mother = -1; + for (int i: children) { + if (!nameHash.containsKey(fathers[i])) + Error.error(520, familyName + ":" + fathers[i]); + + if (father >= 0 && (father != nameHash.get(fathers[i]))) //two fathers + Error.error(512, familyName + ":" + fathers[i]); + //System.err.println(names[i] + " " + nameHash.containsKey(fathers[i]) + " " + fathers[i]); + + father = nameHash.get(fathers[i]); + + if (!nameHash.containsKey(mothers[i])) + Error.error(520, familyName + ":" + mothers[i]); + + if (mother >= 0 && mother != nameHash.get(mothers[i])) //two mothers + Error.error(512, familyName + ":" + mothers[i]); + + mother = nameHash.get(mothers[i]); + + if (sex.get(nameHash.get(mothers[i])) != 2) //mother not female + Error.error(511, familyName + ":" + mothers[i]); + if (sex.get(nameHash.get(fathers[i])) != 1) //father not male + Error.error(511, familyName + ":" + fathers[i]); + } + int ret[] = new int[]{father, mother, -1, -1, -1, -1}; + + if (!familyIndex.remove(new Integer(father))) + Error.error(502); + familyIndex.add(father); + + if (!familyIndex.remove(new Integer(mother))) + Error.error(502); + familyIndex.add(mother); + + //System.err.println(names[father]); + //System.err.println(names[mother]); + + if (familyIndex.size() == 2 + children.size()) { // all done + System.err.println("No grandparents present in family " + familyName); + } else { + ArrayList gps = new ArrayList(); + for (int i : founders) { + if (i != father && i != mother) { + gps.add(i); + } else { + if (mothers[father].equals(names[mother])) { + System.err.println("Backcross to mother" + familyName); + gps.add(i); + } + if (fathers[mother].equals(names[father])) { + System.err.println("Backcross to father in family " + familyName); + gps.add(i); + } + } + } + int numGps = 0; + if (!fathers[father].equals("0")) { + if (!nameHash.containsKey(fathers[father])) + Error.error(513, familyName + ":" + fathers[father]); + ret[2] = nameHash.get(fathers[father]); + if (sex.get(ret[2]) != 1) + Error.error(511, familyName + ":" + fathers[father]); + ++numGps; + if (ret[2] != father && ret[2] != mother) // backcross + familyIndex.remove(new Integer(ret[2])); + + } + if (!mothers[father].equals("0")) { + if (!nameHash.containsKey(mothers[father])) + Error.error(513, familyName + ":" + mothers[father]); + ret[3] = nameHash.get(mothers[father]); + if (sex.get(ret[3]) != 2) + Error.error(511, familyName + ":" + mothers[father]); + ++numGps; + if (ret[3] != father && ret[3] != mother) // backcross + familyIndex.remove(new Integer(ret[3])); + + } + if (!fathers[mother].equals("0")) { + if (!nameHash.containsKey(fathers[mother])) + Error.error(513, familyName + ":" + fathers[mother]); + + ret[4] = nameHash.get(fathers[mother]); + if (sex.get(ret[4]) != 1) + Error.error(511, familyName + ":" + fathers[mother]); + ++numGps; + if (ret[4] != father && ret[4] != mother) // backcross + familyIndex.remove(new Integer(ret[4])); + } + if (!mothers[mother].equals("0")) { + if (!nameHash.containsKey(mothers[mother])) + Error.error(513, familyName + ":" + mothers[mother]); + ret[5] = nameHash.get(mothers[mother]); + if (sex.get(ret[5]) != 2) + Error.error(511, familyName + "," + mothers[mother]); + ++numGps; + if (ret[5] != father && ret[5] != mother) // backcross + familyIndex.remove(new Integer(ret[5])); + } + + if (numGps != gps.size()) { + //clone grandparents... + //System.err.println(gps); + //System.err.println(numGps); + //Error.error(513); + System.err.println("Warning: Different number of grandparents (" + numGps + " and " + gps.size() + ") in family " + familyName); + } + + System.err.println("Found " + gps.size() + " grandparents in family " + familyName); + } + + return ret; + } + + private interface FileParser{ + public String[] parseNext(String line); + } + + + private class VCFParser implements FileParser{ + private boolean firstLine = true; + private int mapping[] = null; + + private double pow[] = new double[4001]; + + private HashMap gtHash = new HashMap(); + + public VCFParser() { + for (int i = 0; i < pow.length; ++i) + pow[i] = Misc.exp10(-i * 0.1); + gtHash.put("./.", "1 1 1 1 1 1 1 1 1 1"); + gtHash.put("0/0", "1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0/1", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1/0", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0/2", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("2/0", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0/3", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("3/0", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1/1", "0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1/2", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); + gtHash.put("2/1", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); + gtHash.put("1/3", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); + gtHash.put("3/1", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); + gtHash.put("2/2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001"); + gtHash.put("2/3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); + gtHash.put("3/2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); + gtHash.put("3/3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000"); + + gtHash.put(".|.", "1 1 1 1 1 1 1 1 1 1"); + gtHash.put("0|0", "1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0|1", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1|0", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0|2", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("2|0", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("0|3", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("3|0", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1|1", "0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001"); + gtHash.put("1|2", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); + gtHash.put("2|1", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); + gtHash.put("1|3", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); + gtHash.put("3|1", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); + gtHash.put("2|2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001"); + gtHash.put("2|3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); + gtHash.put("3|2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); + gtHash.put("3|3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000"); + } + + private double pow(int value) { + return pow[Math.min(value, pow.length - 1)]; + } + + private String getField(String fields, int index) + { + int prevPos = 0; + int pos = fields.indexOf(':'); + + while (index > 0 && pos >= 0) { + prevPos = pos + 1; + pos = fields.indexOf(':', pos + 1); + --index; + } + if (index > 0) {// field not found + //System.err.println(fields + "\t" + index); + //Error.error(518); + return "0"; // support for dropped trailing fields + } + + int end = (pos < 0) ? fields.length() : pos; + return fields.substring(prevPos, end); + } + + private String fieldPL2Posterior(String field) + { + int separators[] = new int[10]; + int pos = field.indexOf(','); + + int numSeparators = 0; + while (numSeparators < 10 && pos >= 0) { + separators[numSeparators++] = pos; + pos = field.indexOf(',', pos + 1); + } + if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { + if (numSeparators == 2) { + return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA + + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC + + pow(Integer.parseInt(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC + } + if (numSeparators == 5) { + //Order is AA,AC,CC,AG,CG,GG + // 0 1 2 3 4 5 + return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA + + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " " //AC + + pow(Integer.parseInt(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG + + pow(Integer.parseInt(field.substring(separators[1]+1, separators[2]))) + " " //CC + + pow(Integer.parseInt(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG + + pow(Integer.parseInt(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG + } + if (numSeparators == 9) { + //Order is AA,AC,CC,AG,CG,GG,AT,CT,GT,TT + // 0 1 2 3 4 5 6 7 8 9 + return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA + + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " " //AC + + pow(Integer.parseInt(field.substring(separators[2]+1, separators[3]))) + " " //AG + + pow(Integer.parseInt(field.substring(separators[5]+1, separators[6]))) + " " //AT + + pow(Integer.parseInt(field.substring(separators[1]+1, separators[2]))) + " " //CC + + pow(Integer.parseInt(field.substring(separators[3]+1, separators[4]))) + " " //CG + + pow(Integer.parseInt(field.substring(separators[6]+1, separators[7]))) + " " //CT + + pow(Integer.parseInt(field.substring(separators[4]+1, separators[5]))) + " " //GG + + pow(Integer.parseInt(field.substring(separators[7]+1, separators[8]))) + " " //GT + + pow(Integer.parseInt(field.substring(separators[8]+1, field.length()))); //TT + } + } + return "1 1 1 1 1 1 1 1 1 1"; // unknown variant + //Error.error(?); + } + + private String fieldGL2Posterior(String field) + { + int separators[] = new int[10]; + int pos = field.indexOf(','); + + int numSeparators = 0; + while (numSeparators < 10 && pos >= 0) { + separators[numSeparators++] = pos; + pos = field.indexOf(',', pos + 1); + } + if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { + if (numSeparators == 2) { + return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC + + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC + } + if (numSeparators == 5) { + return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC + + Misc.exp10(Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG + + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC + + Misc.exp10(Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG + + Misc.exp10(Double.parseDouble(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG + } + if (numSeparators == 9) { + return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC + + Misc.exp10(Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " " //AG + + Misc.exp10(Double.parseDouble(field.substring(separators[5]+1, separators[6]))) + " " //AT + + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC + + Misc.exp10(Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " " //CG + + Misc.exp10(Double.parseDouble(field.substring(separators[6]+1, separators[7]))) + " " //CT + + Misc.exp10(Double.parseDouble(field.substring(separators[4]+1, separators[5]))) + " " //GG + + Misc.exp10(Double.parseDouble(field.substring(separators[7]+1, separators[8]))) + " " //GT + + Misc.exp10(Double.parseDouble(field.substring(separators[8]+1, field.length()))); //TT + } + } + return "1 1 1 1 1 1 1 1 1 1"; // unknown variant + //Error.error(?); + } + + private String fieldGP2Posterior(String field) + { + int separators[] = new int[10]; + int pos = field.indexOf(','); + + int numSeparators = 0; + while (numSeparators < 10 && pos >= 0) { + separators[numSeparators++] = pos; + pos = field.indexOf(',', pos + 1); + } + if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { + if (numSeparators == 2) { + return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC + + (Double.parseDouble(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC + } + if (numSeparators == 5) { + return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC + + (Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG + + (Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC + + (Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG + + (Double.parseDouble(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG + } + if (numSeparators == 9) { + return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA + + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC + + (Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " " //AG + + (Double.parseDouble(field.substring(separators[5]+1, separators[6]))) + " " //AT + + (Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC + + (Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " " //CG + + (Double.parseDouble(field.substring(separators[6]+1, separators[7]))) + " " //CT + + (Double.parseDouble(field.substring(separators[4]+1, separators[5]))) + " " //GG + + (Double.parseDouble(field.substring(separators[7]+1, separators[8]))) + " " //GT + + (Double.parseDouble(field.substring(separators[8]+1, field.length()))); //TT + } + } + return "1 1 1 1 1 1 1 1 1 1"; // unknown variant + //Error.error(?); + } + + + private String fieldGT2Posterior(String field) { + if (gtHash.containsKey(field)) + return gtHash.get(field); + return "1 1 1 1 1 1 1 1 1 1"; // unknown variant + //Error.error(?); + } + + public String[] parseNext(String line) { + if (firstLine) { + if (line.length() < 2 || line.substring(0, 2).equals("##")) // comment in vcf + return null; + + if (line.charAt(0) != '#') //individual names, first not starting with ## + Error.error(517); + + String postNames[] = line.split("\t"); + HashMap nameHash = new HashMap(); + for (int i = 9; i < postNames.length; ++i) { + if (nameHash.containsKey(postNames[i])) // same individual twice in posteriors... + Error.error(515); + else + nameHash.put(postNames[i], i); + } + if (names == null) { + names = new String[postNames.length - 7]; + names[0] = postNames[0]; + names[1] = postNames[1]; + for (int i = 2; i < names.length; ++i) + names[i] = postNames[i + 7]; + numIndividuals = names.length - 2; + } + mapping = new int[names.length]; + for (int i = 2; i < names.length; ++i) { + if (!nameHash.containsKey(names[i])) { + System.err.println("Warning: Individual " + names[i] + " not contained in the data, set to all missing"); //posteriors not found + mapping[i] = -1; + } else + mapping[i] = nameHash.get(names[i]); + } + firstLine = false; + } else { + String postData[] = line.split("\t"); + + + int fieldType = 0; + String fields[] = postData[8].split(":"); //find PL field + int index = 0; + for (String f : fields) { + if (f.equals("PL")) + break; + ++index; + } + if (index == fields.length) {// PL field not found, try finding GL + ++fieldType; // fieldType = 1 + index = 0; + for (String f : fields) { + if (f.equals("GL")) + break; + ++index; + } + if (index == fields.length) {// GL field not found, try finding GP + ++fieldType; // fieldType = 2 + index = 0; + for (String f : fields) { + if (f.equals("GP")) + break; + ++index; + } + if (index == fields.length) { //finally try to find a GT field + ++fieldType; // fieldType = 3 + index = 0; + for (String f : fields) { + if (f.equals("GT")) + break; + ++index; + } + if (index == fields.length) // not even GT not found + Error.error(519); + } + } + } + + boolean warning = false; + String ret[] = new String[names.length]; + ret[0] = postData[0]; + ret[1] = postData[1]; + for (int i = 2; i < names.length; ++i) + if (mapping[i] >= 0) { + String field = getField(postData[mapping[i]], index); + try { + switch (fieldType) { + case 0: ret[i] = fieldPL2Posterior(field); break; + case 1: ret[i] = fieldGL2Posterior(field); break; + case 2: ret[i] = fieldGP2Posterior(field); break; + case 3: ret[i] = fieldGT2Posterior(field); break; + } + } catch (NumberFormatException e) { // types of .,.,. or 20,.,. + warning = true; + ret[i] = "1 1 1 1 1 1 1 1 1 1"; + } + } else + ret[i] = "1 1 1 1 1 1 1 1 1 1"; // set missing + if (warning) { + System.err.println("Warning: variant " + ret[0] + " " + ret[1] + " has strange value(s), set to missing"); + } + return ret; + } + return null; + } + } + + private class PosteriorParser implements FileParser{ + private boolean firstLine = true; + private int mapping[] = null; + + public String[] parseNext(String line) { + if (firstLine) { + String postNames[] = line.split("\t"); + HashMap nameHash = new HashMap(); + for (int i = 2; i < postNames.length; ++i) { + if (nameHash.containsKey(postNames[i])) // same individual twice in posteriors... + Error.error(515); + else + nameHash.put(postNames[i], i); + } + if (names == null) { + names = postNames; + numIndividuals = names.length - 2; + } + + mapping = new int[names.length]; + mapping[0] = 0; + mapping[1] = 1; + for (int i = 2; i < names.length; ++i) { + if (!nameHash.containsKey(names[i])) { //posteriors not found + System.err.println("Warning: Individual " + names[i] + " not contained in the data, set to all missing"); + mapping[i] = -1; + } else + mapping[i] = nameHash.get(names[i]); + } + firstLine = false; + } else { + String postData[] = line.split("\t"); + String ret[] = new String[names.length]; + for (int i = 0; i < names.length; ++i) + if (mapping[i] >= 0) + ret[i] = postData[mapping[i]]; + else + ret[i] = "1 1 1 1 1 1 1 1 1 1"; // set missing + return ret; + } + return null; + } + + } + + public boolean loadFile(String filename, String vcfFile, String posteriorFile) { + fp = null; + fn2 = posteriorFile; + if (posteriorFile != null || vcfFile != null) { + if (posteriorFile != null && vcfFile != null) + Error.error(514); + if (posteriorFile != null) + fp = new PosteriorParser(); + if (vcfFile != null) { + fp = new VCFParser(); + fn2 = vcfFile; + } + } + try { + if (filename != null) { + if (filename.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(filename)); + } + } catch (Exception e) { + e.printStackTrace(); + Error.error(504); + } + return true; + } + + public ArrayList getNextLine(boolean printPedigree){ + return getNextLine(printPedigree, false, false); + } + + public ArrayList getNextLine(boolean printPedigree, boolean skip){ + return getNextLine(printPedigree, skip, false); + } + + public ArrayList getNextLine(boolean printPedigree, boolean skip, boolean genotypesOnly) { + try { + String line = ""; + + String split[] = null; + + boolean firstLine = true; + + //allow data without pedigree... + if (genotypesOnly && lineNumber < 6) { + lineNumber = 6; + if (fn2.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(fn2)); + } + +out: while (true) { + do { + line = br.readLine(); + + if (line != null) { + if (lineNumber < 6 || fp == null) { + int index = line.indexOf('#'); + if (index >= 0) + line = line.substring(0, index); + if (lineNumber < 6 || !skip) + split = line.split("\t"); + } else { + split = fp.parseNext(line); + if (split == null) + line = ""; + } + + } + } while (line != null && line.length() == 0); + + if (line == null) { + if (fp != null && lineNumber == 6 && firstLine) { + firstLine = false; + if (fn2.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(fn2)); + continue out; + } + break; + } + ++lineNumber; + + if (lineNumber < 7 && printPedigree) + System.out.println(line); + + int end = line.indexOf('\t', line.indexOf('\t') + 1); + markerName = line.substring(0, end); + + switch (lineNumber) { + case 1: + for (int i = 2; i < split.length; ++i) { + String fid = split[i]; + if (!familyHash.containsKey(fid)) { + familyHash.put(fid, families.size()); + families.add(new ArrayList()); + familyNames.add(fid); + } + int index = familyHash.get(fid); + families.get(index).add(i - 2); + } + numIndividuals = split.length - 2; + break; + case 2: + names = split; + break; + case 3: + fathers = split; + break; + case 4: + mothers = split; + break; + case 5: + for (int i = 2; i < split.length; ++i) + sex.add(Integer.parseInt(split[i])); + break; + case 6: + //parsePedigree(names, fathers, mothers); + getParentsAndGrandParents(names, fathers, mothers); + System.err.println("Number of individuals = " + numIndividuals); + System.err.println("Number of families = " + families.size()); + break; + } + if ((lineNumber < 7 || !skip) && split.length - 2 != numIndividuals && (lineNumber < 7 || split.length - 2 != 10 * numIndividuals)) { + //System.err.println(columnIndex + "vs" + numMarkers); + Error.error(503); + } + if (lineNumber >= 7) { + if (skip) + return null; + ArrayList doubleLine = new ArrayList(); + for (int i = 2; i < split.length; ++i) { + int start = 0; + for (int j = 0; j < 10; ++j) { + int stop = split[i].indexOf(" ", start); + if (stop < 0) + doubleLine.add(Double.parseDouble(split[i].substring(start))); + else { + doubleLine.add(Double.parseDouble(split[i].substring(start, stop))); + start = stop + 1; + } + + } + } + return doubleLine; + } + } + br.close(); + } catch (Exception e) { + e.printStackTrace(); + Error.error(504); + } + return null; + } + +} diff --git a/software/LepMap3/lm3/src/Error.java b/software/LepMap3/lm3/src/Error.java new file mode 100644 index 0000000..df1e862 --- /dev/null +++ b/software/LepMap3/lm3/src/Error.java @@ -0,0 +1,469 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +//Error message handling +public class Error { + public static void error(int code) + { + error(code, ""); + } + + public static void error(int code, String extrainfo) + { + // options: + String os = " "; + System.err.println("Error " + code); + switch (code) { + case 3002: + System.err.println("Error: could not load mapping file!"); + case 3001: + System.err.println("usage: samtools mpileup -q 10 -Q10 -s $(cat sorted_bams)|java Pileup2Likelihoods [options] >post.txt"); + System.err.println("options:"); + System.err.println(os + "pileup=file load pileup from a file [-]"); + System.err.println(os + "mapping=file load individual names (same order as bams) from a file [mapping.txt]"); + System.err.println(os + "minCoverage=NUM minimum coverage per individual [3]"); + System.err.println(os + "numLowerCoverage=NUM number (or proportion) individuals allowed with lower than minCoverage [0.3]"); + System.err.println(os + "minAlleleFreq=NUM minimum number (or proportion) of an allele [0.1]"); + System.err.println(os + "minQuality=NUM minimum quality value [0.001]"); + System.err.println(os + "minCoverageSum=NUM minimum total (summed) coverage"); + System.err.println(os + "ploidy=NUM ploidy [2]"); + System.err.println(os + "callIndels=1 call indels as well [not set]"); + break; + case 2001: + System.err.println("usage: java IBD data=file [options]"); + System.err.println("options:"); + System.err.println(os + "data=file Loads input data in Lep-MAP3 format with pedigree"); + System.err.println(os + "posteriotFile=file Loads input data in Lep-MAP3 posterior format"); + System.err.println(os + "vcfFile=file Loads input data from a vcf"); + System.err.println(os + "MAFLimit=NUM [0.05]"); + System.err.println(os + "genotypeLimit=NUM [0.1]"); + System.err.println(os + "missingLimit=NUM"); + System.err.println(os + "missingLimit=NUM NUM2"); + System.err.println(os + "numThreads=NUM [4]"); + System.err.println(os + "parents=p1 [p2 ...]"); + System.err.println(os + "parents=file:parents.txt"); + System.err.println(os + "allParentChildPairs=1"); + break; + case 1101: + System.err.println("usage: java ScaffoldHMM2 scaffold+LG1.txt scaffold+LG2.txt"); + System.err.println("options:"); + System.err.println(os + "two input files give the two input maps with reference mapping information."); + System.err.println(os + "Columns 1-3 in these files should contain scaffold_name(1), scaffold_pos(2), and LG_name(3)"); + break; + case 1001: + System.err.println("usage: java Filtering2 [options] data=file >file1_filtered.post"); + System.err.println("options:"); + System.err.println(os + "data=file Loads input data in Lep-MAP3 posterior format"); + System.err.println(os + "dataTolerance=NUM P-value limit for segregation distortion [0.001]"); + System.err.println(os + "removeNonInformative=1 Remove (after filtering) non-informative markers"); + System.err.println(os + "convert2Bialleleic=1 Convert data to biallelic"); + System.err.println(os + "outputHWE=1 Output segregation distortion for the markers"); + System.err.println(os + "MAFLimit=NUM NUM>=1: Filter out markers with minimum allele frequency < NUM in each family [0]"); + System.err.println(os + " NUM<1: Filter out markers with minimum allele rate < NUM in each family [0]"); + System.err.println(os + "missingLimit=NUM NUM>=1: Filter out markers with > NUM missing individuals in each family [inf]"); + System.err.println(os + " NUM<1: Filter out markers with missing rate > NUM in each family"); + System.err.println(os + "familyInformativeLimit=NUM Filter out markers with < NUM informative families [0]"); + System.err.println(os + "noSexFiltering=1 Do not filter sex markers, useful for distorted sex ratios [0]"); + System.err.println(os + "heterozygoteRate=NUM Set heterozygote rate [0.5]"); + System.err.println(os + " Useful for selfing data (S2=0.25, S3=0.125, ...)"); + + break; + case 1002: + System.err.println("Error: Cannot find the parent"); + break; + case 1003: + System.err.println("Error: Wrong number of columns in the input file"); + break; + case 1004: + System.err.println("Error: Unable to load input file or errors in the file"); + break; + case 1005: + System.err.println("Error: Internal error"); + break; + case 1006: + System.err.println("Error: Unknown sex code"); + break; + case 1007: + System.err.println("Error: Pedigree"); + break; + case 1008: + System.err.println("Error: Pedigree"); + break; + case 1009: + System.err.println("Error: Multiple parents"); + break; + case 1010: + System.err.println("Error: Only one lodLimit allowed"); + break; + case 1011: + System.err.println("Error: Unable to load map file"); + break; + case 1012: + System.err.println("Error: Only one lg paramater allowed"); + break; + case 1013: + System.err.println("Error: map file has different number of lines than there are markers"); + break; + case 1014: + System.err.println("Error: this lod3Mode (and theta combination) is not supported"); + break; + case 901: + System.err.println("usage: java OutputData [options] data=file map=map_file >posterior_clean.txt 2>prints.txt"); + System.err.println("options:"); + System.err.println(os + "map=map_file LG map file. Typically generated by SeparateIdenticals or JoinSingles2."); + System.err.println(os + "sizeLimit=NUM Output data only with LGs with >= NUM markers [1]"); + System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); + break; + case 1201: + System.err.println("usage: java LMPlot map.txt"); + System.err.println("options:"); + System.err.println(os + "map.txt Output from OrderMarkers2 with outputPhasedData=1 flag"); + System.err.println(os + "selfingPhase=1 calculate pattern distances by ignoring individuals heterozygote in the two markers"); + System.err.println(os + "outputAllDistances=1 output all distances..."); + + //System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + //System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); + //System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); + break; + case 1301: + System.err.println("usage: java QTL map.txt traits.txt [options]"); + System.err.println("options:"); + System.err.println(os + "map.txt Output from OrderMarkers2 with outputPhasedData=1 (or 2) flag"); + System.err.println(os + "traits.txt Traits, loaded as a single line, columns same order as offspring in OrderMarkers2"); + System.err.println(os + "scale=NUM round the traits to integers after dividing with scale [0.1]"); + + //System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + //System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); + //System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); + break; + + + case 801: + System.err.println("usage: java ShortPath [options] prints.txt"); + System.err.println("options:"); + System.err.println(os + "prints.txt Output (err-stream) from SeparateIdenticals, JoinSingles or OutputData"); + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "sizeLimit=NUM Use only markers that occur NUM times"); + System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); + System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); + System.err.println(os + "begin=NUM find paths starting from marker NUM"); + System.err.println(os + "end=NUM find paths ending to marker NUM"); + break; + case 601: + System.err.println("usage: java JoinIdenticalLGs [options] map=map_file data=file >map.txt 2>prints.txt"); + System.err.println("Note: Joins identically segregating LGs together"); + System.err.println("options:"); + System.err.println(os + "map=map_file LG map file. Typically generated by SeparateIdenticals or JoinSingles2."); + System.err.println(os + "data=file Loads input genotypes in Lep-MAP posterior format"); + System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "theta=NUM Fixed recombination fraction [0.0]"); + System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); + System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data)"); + System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); + + System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); + System.err.println(os + "sizeLimit=NUM Joing only LGs with >= NUM markers [1]"); + break; + case 701: + System.err.println("usage: java JoinSingles2[All|Identicals] [options] map=map_file data=file >map.txt 2>prints.txt"); + System.err.println("options:"); + System.err.println(os + "map=map_file Initial LG map file. Typically generated by SeparateChromosomes2, SeparateIdenticals or JoinSingles2*."); + System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); + System.err.println(os + "lodDifference=NUM Required LOD difference [0.0]"); + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "theta=NUM Fixed recombination fraction [0.0 (Identicals)] [0.03 (All)]"); + System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); + System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data and Join...Identicals)"); + System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); + System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); + System.err.println(os + "numThreads=NUM Use maximum of NUM threads (JoinSingles2All only) [1]"); + + System.err.println(os + "maxDistance=NUM Only calculate LOD scores between this many markers (JoinSingles2All only) [not set]"); + + System.err.println(os + "distortionLod=1 Use segregation distortion aware LOD scores (JoinSingles2All only) [not set]"); + System.err.println(os + "iterate=1 Iterate single joining until no markers can be added (JoinSingles2All only) [not set]"); + System.err.println(os + " (iterating is much faster than running JoinSingles2All multiple times)"); + System.err.println(os + "mask=map_file2 Filter out markers not (in group) 1 in the map_file2"); + break; + case 702: + System.err.println("Error: BetweenSameType=1 only works with a single family and three lodLimits"); + break; + case 703: + System.err.println("Error: Only one lodLimit accepted"); + break; + case 501: + System.err.println("usage: java ParentCall2 [options] data=file"); + System.err.println("options:"); + System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); + System.err.println(os + " Column 1: contig, Column 2: pos"); + System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); + System.err.println(os + " columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); + + //System.err.println(os + "callLimit=NUM Required log-odds difference to call a genotype [2.0]"); + System.err.println(os + "familyLimit=NUM Required log-odds difference to call a SNP [2.0]"); + System.err.println(os + "ZLimit=NUM Required log-odds difference to call a SNP with Z inheritance [inf]"); + System.err.println(os + "XLimit=NUM Required log-odds difference to call a SNP with X inheritance [inf]"); + + System.err.println(os + "removeNonInformative=1 Remove markers that are not informative"); + System.err.println(os + "ignoreParentOrder=1 Do not care about the order of parental genotypes [not set]"); + System.err.println(os + "outputParentPosterior=1 Outputs the genotype likelihoods (posteriors) for the parents as well[not set]"); + System.err.println(os + "halfSibs=1 Look for identical parent names for half-sib parental genotype inference[not set]"); + System.err.println(os + "vcfFile=file Read genotype likelihoods (posteriors) from a vcf file"); + System.err.println(os + "posteriorFile=file Read genotype likelihoods (posteriors) from a text file"); + System.err.println(os + "outputRaw=1 Do not call parents, just output the raw data likelihoods (posteriors)"); + break; + case 502: + System.err.println("Error: Cannot find the parent(s) (family " + extrainfo + ")"); + break; + case 503: + System.err.println("Error: Wrong number of columns in the input file"); + break; + case 504: + System.err.println("Error: Unable to load input file or errors in the file"); + break; + case 505: + System.err.println("Error: Internal error"); + break; + case 506: + System.err.println("Error: Unknown sex code (family:id " + extrainfo + ")"); + break; + case 507: + System.err.println("Error: Pedigree"); + break; + case 508: + System.err.println("Error: Pedigree"); + break; + case 509: + System.err.println("Error: Multiple parents (family:id " + extrainfo + ")"); + break; + case 511: + System.err.println("Error: Sex of the parent does not match the pedigree (family:id " + extrainfo + ")"); + break; + case 512: + System.err.println("Error: Too many parents (family:id " + extrainfo + ")"); + break; + case 513: + System.err.println("Error: Grandparents do not match the pedigree or are not present (family:id " + extrainfo + ")"); + break; + case 514: + System.err.println("Error: Only one of vcfFile or posteriorFile parameters can be provided"); + break; + case 515: + System.err.println("Error: Same individual is twice in the data"); + break; + case 517: + System.err.println("Error: Individual names not found from the vcf file"); + break; + case 518: + System.err.println("Error: vcf file does not contain such field"); + break; + case 519: + System.err.println("Error: vcf file does not contain any of PL/GL/GT fields"); + break; + case 520: + System.err.println("Error: No parent(s) in a family " + extrainfo); + break; + case 1401: + System.err.println("usage: java SeparateChromosomes2 [options] data=file >map.txt"); + System.err.println("options:"); + System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); + System.err.println(os + " Column 1: contig, Column 2: pos"); + System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); + System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); + System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "families=F1 [F2 ...] Use only some families [not set]"); + + System.err.println(os + "theta=NUM Fixed recombination fraction [0.03]"); + System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); + System.err.println(os + "sizeLimit=NUM Remove LGs with < NUM markers [1]"); + System.err.println(os + "numThreads=NUM Use maximum of NUM threads [1]"); + System.err.println(os + "subsample=NUM Use only a random NUM fraction of markers [1] (speedup is 1/NUM^2)"); + System.err.println(os + "samplePairs=NUM Use only a random NUM fraction of marker pairs [1] (speedup is 1/NUM)"); + + System.err.println(os + "phasedData=1 Data is phased [not set]"); + System.err.println(os + "grandparentPhase=1 Pphase data based on grandparents [not set]"); + + System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); + System.err.println(os + " 1: haplotypes match (4 alleles, max LOD = log(4^n)"); + System.err.println(os + " 2: homozygotes match (3 alleles, max LOD = log(3^n))"); + System.err.println(os + " 3: homozygotes or heterozygotes match (2 alleles, max LOD = log(2^n))"); + + System.err.println(os + "distortionLod=1 Use segregation distortion aware LOD scores [not set]"); + + System.err.println(os + "map=file refine linkage group lg of map file"); + System.err.println(os + "lg=NUM refine linkage group lg [1 if map is provided]"); + System.err.println(os + "renameLGs=0 do not rename linkage groups after refine"); + + System.err.println(os + "minLod=NUM minimum LOD value for each family (used for multi-family maps without parents) [not set]"); + break; + case 1402: + case 1403: + System.err.println("Error: Unable to load input file"); + break; + case 401: + System.err.println("usage: java SeparateIdenticals [options] data=file >map.txt 2>prints.txt"); + System.err.println("options:"); + System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); + System.err.println(os + " Column 1: contig, Column 2: pos"); + System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); + System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); + System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "theta=NUM Fixed recombination fraction [0.0]"); + System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [0.0]"); + System.err.println(os + "sizeLimit=NUM Remove LGs with < NUM markers [1]"); + System.err.println(os + "numThreads=NUM Use maximum of NUM threads (most speedup if equals numParts) [1]"); + System.err.println(os + "numParts=NUM Divide markers to NUM parts [1]"); + System.err.println(os + "removeSingles=0 Do not remove single markers (slower but does not miss markers)"); + System.err.println(os + "keepRate=NUM Keep joined markers with this prob (1.0 = all pair-wise comparisons are done) [1.0]"); + System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data)"); + System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); + + System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); + System.err.println(os + " 1: haplotypes match (4 alleles, max LOD = log(4^n)"); + System.err.println(os + " 2: homozygotes match (3 alleles, max LOD = log(3^n))"); + System.err.println(os + " 3: homozygotes or heterozygotes match (2 alleles, max LOD = log(2^n))"); + break; + case 402: + case 403: + System.err.println("Error: Unable to load input file"); + break; + case 301: +// pp.warning(new String[]{}); + + System.err.println("usage: java OrderMarkers2 [options] data=file.posterior"); + System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); + System.err.println(os + " Column 1: contig, Column 2: pos"); + System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); + System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); + + System.err.println(os + "map=chromosome_map_file LG map file. Typically generated by SeparateChromosomes2 or JoinSingles2."); + System.err.println(os + "evaluateOrder=order.txt Load initial marker order (single chromosome) from a file"); + + System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); + System.err.println(os + "useMorgan=1 Use Morgan (linear) mapping function"); + System.err.println(os + "useKosambi=1 Use Kosambi mapping function"); + System.err.println(os + "improveOrder=0 Do not improve the order (used to only (re)evaluate an order)"); + System.err.println(os + "numThreads=NUM Use NUM threads [1]"); + System.err.println(os + "numMergeIterations=NUM Run NUM iterations [6]"); + System.err.println(os + "chromosome=NUM Order chromosome NUM only [all]"); + System.err.println(os + "families=F1 [F2 ...] Use only some families [not set]"); + + + System.err.println(os + "scale=NUM NUM2 Scale posteriors by NUM (p -> p^NUM) with a maximum of NUM2 (>=NUM) times map 'end effect' correction [M/N 2]"); + System.err.println(os + " , where N is number of markers and M number of individuals (e.g. 3M/N 3, 100/N 3)"); + System.err.println(os + "scale=NUM Scale posteriors \"NUM 2\""); + System.err.println(os + "scale=NUM NUM2 NUM3 same as \"NUM NUM2\" but cap maximum scale to NUM3"); + + System.err.println(os + "scaleMode=1 Use the old data scaling mode [2]"); + + System.err.println(os + "minError=NUM Set minimum posterior value [0.001]"); + System.err.println(os + "outputPhasedData=0 Do not output phased data"); + System.err.println(os + "outputPhasedData=1 Output phased data [1]"); + System.err.println(os + "outputPhasedData=2 Output phased data but mask uncertain haplotypes"); + System.err.println(os + "outputPhasedData=3 Output phased data + haplotype likelihoods"); + System.err.println(os + "outputPhasedData=4 Output phased data but mask uncertain haplotypes + haplotype likelihoods"); + System.err.println(os + "removeMarkers=m1 [ m2 m3 ...] Remove markers"); + System.err.println(os + "sexAveraged=1 Calculate sex-averaged map distances"); + System.err.println(os + "phasedData=1 Input data is phased"); + System.err.println(os + "grandparentPhase=1 Use grandparents to phase data, removes markers that cannot be phased"); + + System.err.println(os + "selfingPhase=1 Phase data so that homozygotes and heterozygotes are kept as in selfing crosses(experimental)"); + + System.err.println(os + "recombination1=NUM Recombination rate for male [0.001]"); + System.err.println(os + "recombination2=NUM Recombination rate for female [0.001]"); + System.err.println(os + "interference1=NUM Recombination interference for male [0.001]"); + System.err.println(os + "interference2=NUM Recombination interference for female [0.001]"); + + System.err.println(os + "identicalLimit=NUM Reduce the number of markers (conditional on the order)"); + System.err.println(os + " If the absolute probability difference between markers is < NUM they are collapsed [0.01]"); + System.err.println(os + "computeLODScores=file Evaluate pair-wise LOD scores and store to file"); + System.err.println(os + "calculateIntervals=file [NUM=1] Evaluate and store to a file the interval(s) for each marker where it could be located"); + System.err.println(os + " within NUM likelihood treshold. Useful for matching physical and linkage postions of markers"); + + System.err.println(os + "randomPhase=1 Start the phasing algorithm from a random phase configuration"); + System.err.println(os + " Useful if the phasing does not converge properly with evaluateOrder"); + System.err.println(os + "hyperPhaser=1 Use 'hyper' (instead of super) phasing algorithm."); + System.err.println(os + " Useful if the phasing does not converge properly"); + System.err.println(os + "phasingIterations=NUM Run NUM phasing iterations [1]."); + System.err.println(os + " Useful if the phasing does not converge properly"); + + System.err.println(os + "usePhysical=1 NUM Use physical positions in the marker ordering, [not set, NUM=0.01]"); + System.err.println(os + " penalise adjacent markers in different contigs by NUM"); + + System.err.println(os + "maskIgnoreParentOrder=1 Mask markers where the order of parental genotypes is not clear"); + System.err.println(os + " (ignoreParentOrder=1 in ParentCall2)"); + + System.err.println(os + "refineParentOrder=1 Refine the unclear order of parental genotypes"); + System.err.println(os + " (requires evaluateOrder, ignoreParentOrder=1 in ParentCall2)"); + + break; + case 4406: + System.err.println("Error: a chromosome map file must be provided (map=file)"); + break; + case 302: + System.err.println("Error: unable to load chromosome map file"); + break; + case 303: + System.err.println("Error: either evaluateOrder or map parameter must be provided"); + break; + case 304: + System.err.println("Error: unable to parse scale parameter"); + break; + case 305: + System.err.println("Error: do not use maskIgnoreParentOrder=1 with refineParentOrder=1 or grandParentPhase=1"); + break; + case 101: + System.err.println("Error: Multiple IDs in the input file"); + break; + case 102: + System.err.println("Error: Sex of the parent(s) is not specified"); + break; + case 103: + System.err.println("Error: Unable to load input file"); + break; + case 298: + case 299: + System.err.println("Error: Trying to add multiple genotype data for a individual"); + break; + default: + System.err.println("Error " + code); + } + System.exit(-1); + } + public static void warning(int code) + { + switch (code) { + case 3003: + System.err.println("Warning: different length of pileup quality and alignment columns (add \"-q 1\" to samtools mpileup)!"); + System.err.println("cutting to min length, strings below:"); + break; +// case 101: +// System.err.println("Warning 1"); +// break; +// case 102: +// System.err.println("Warning 2"); +// break; + default: + System.err.println("Warning " + code); + } + } +} diff --git a/software/LepMap3/lm3/src/Family2.java b/software/LepMap3/lm3/src/Family2.java new file mode 100644 index 0000000..e91a3c4 --- /dev/null +++ b/software/LepMap3/lm3/src/Family2.java @@ -0,0 +1,1144 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +import java.util.ArrayList; +import java.util.Arrays; + +public class Family2 { + + private String name; + + private int numChildren; + private int numMarkers; + + private int numInfFather = 0; + private int numInfMother = 0; + private int numThreeAlleles = 0; + private int numFourAlleles = 0; + + //use these instead of every 64 in LOD calculation + private final double MAX_VALUE = 1e200; + private final double MIN_VALUE = -1e200; + + private boolean phasedData = false; + + + // how double informative markers are treated (typically 2 alleles ==> haplotypes not known for heterozygotes) + private int lod3Mode = 1; // 1 normal, 2 identical, 3 identical or complementary + + // how double informative markers are treated (typically 2 alleles ==> haplotypes not known for heterozygotes) + private boolean distortionLodMode = false; // segregation distortion aware LOD score + + private ArrayList haplotypeProb = new ArrayList(); + + private ArrayList motherInf = new ArrayList(); + private ArrayList fatherInf = new ArrayList(); + //private ArrayList numAlleles = new ArrayList(); + + private double[][] freqs = null; + + + //double genotypeProbabilities[][]; + + public String getChildID(int c) + { + return "" + c; + } + + public float[] getProb(int marker) + { + return haplotypeProb.get(marker); + } + + + public int getNumChildren() + { + return numChildren; + } + + public String getName() + { + return name; + } + + public void setLod3Mode(int mode) + { + lod3Mode = mode; + } + public void setPhasedData(boolean value) + { + phasedData = value; + } + + + public void setDistortionLodMode() + { + distortionLodMode = true; + + System.err.print("Calculating allele frequencies..."); + //calculate haplotype frequencies... + freqs = new double[numMarkers][4]; + double post[][] = new double[numChildren][4]; + for (int i = 0; i < numMarkers; ++i) + if (isFatherInformative(i) || isMotherInformative(i)) { + float hp[] = haplotypeProb.get(i); + for (int j = 0; j < numChildren; ++j) { + post[j][0] = hp[4 * j + 0]; + post[j][1] = hp[4 * j + 1]; + post[j][2] = hp[4 * j + 2]; + post[j][3] = hp[4 * j + 3]; + } + + freqs[i] = Filtering2.getFrequencies(post); + //System.err.println(freqs[i][0] + " " + freqs[i][1] + " " + freqs[i][2] + " " + freqs[i][3]); + } + System.err.println("done"); + + } + + + public int getNumMarkers() + { + return numMarkers; + } + + public boolean isMotherInformative(int marker) { + return (motherInf.get(marker) == 1); + } + public boolean isFatherInformative(int marker) { + return (fatherInf.get(marker) == 1); + } + + public void maskInformative(String informativeMask) + { + for (int m = 0; m < numMarkers; ++m) { + int info = (isFatherInformative(m)?1:0) + (isMotherInformative(m)?2:0); + if (informativeMask.indexOf("" + info) < 0) + removeMarker(m); + } + } + + private int firstAllele(int genotype) + { + if (genotype < 0) + Error.error(-995); + if (genotype < 4) + return 0; + if (genotype < 7) + return 1; + if (genotype < 9) + return 2; + if (genotype == 9) + return 3; + Error.error(-995); + return -1; + } + + private int secondAllele(int genotype) + { + if (genotype < 0) + Error.error(-995); + if (genotype < 4) + return genotype; + if (genotype < 7) + return genotype - 3; + if (genotype < 9) + return genotype - 5; + if (genotype == 9) + return 3; + Error.error(-995); + return -1; + } + + private int mapAlleles(int a1, int a2) + { + if (a1 > a2) + return mapAlleles(a2, a1); // a1 <= a2 + if (a2 > 3) + Error.error(-995); + if (a1 == 0) + return a2; + if (a1 == 1) + return 3 + a2; + if (a1 == 2) + return 5 + a2; + if (a1 == 3) + return 9; + Error.error(-995); + return -1; + } + + + private boolean isInformative(int genotype) + { + return !(genotype == 0 || genotype == 4 || genotype == 7 || genotype == 9); + } + + public Family2(String name) + { + this.name = name; + } + public void updateNumChildren(int newNumChildren) + { + if (numChildren == 0) + numChildren = newNumChildren; + if (numChildren != newNumChildren) + Error.error(4404); + } + + public void addPedigree(ArrayList familyIndex, ArrayList names, ArrayList sex, ArrayList traits) + { + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 2); + int motherIndex = familyIndex.get(numInd - 1); + + if (sex.get(motherIndex) == 1) { + int tmp = fatherIndex; + fatherIndex = motherIndex; + motherIndex = tmp; + } + assert((sex.get(motherIndex) == 2) && (sex.get(fatherIndex) == 1)); + for (int i : familyIndex) { + if (i != fatherIndex && i != motherIndex) { + } + } + } + public void addMarker() // add a dummy marker + { + ++numMarkers; + fatherInf.add(0); + motherInf.add(0); + //numAlleles.add(2); + haplotypeProb.add(null); // to save memory... + } + + //calculate the probability of allele a from genotype posteriors + private double pAllele(int a, ArrayList prob, int index) + { + if (index < 0) + return 1.0; + double ret = 0; + index *= 10; + for (int a1 = 0; a1 < 4; ++a1) + for (int a2 = a1; a2 < 4; ++a2) + if (a1 == a || a2 == a) + ret += prob.get(index + mapAlleles(a1, a2)); + return ret; + } + + public void addMarker(ArrayList alleleProb, ArrayList familyIndex, ArrayList sex, String informativeMask, boolean grandparentPhase, int parentIndex[]) + { + + int numInd = familyIndex.size(); + + updateNumChildren(numInd - 2); + + int fatherIndex = familyIndex.get(numInd - 2); + int motherIndex = familyIndex.get(numInd - 1); + + if (sex.get(motherIndex) == 1) { + int tmp = fatherIndex; + fatherIndex = motherIndex; + motherIndex = tmp; + } + //System.err.println(); + + assert((sex.get(motherIndex) == 2) && (sex.get(fatherIndex) == 1)); + + int fatherA = 0; + int motherA = 0; + double sumMother = 0; + double sumFather = 0; + for (int i = 0; i < 10; ++i) { + if (alleleProb.get(10 * fatherIndex + fatherA) < alleleProb.get(10 * fatherIndex + i)) + fatherA = i; + if (alleleProb.get(10 * motherIndex + motherA) < alleleProb.get(10 * motherIndex + i)) + motherA = i; + sumFather += alleleProb.get(10 * motherIndex + i); + sumMother += alleleProb.get(10 * motherIndex + i); + } + final double FAMILY_LIMIT = 0.1; // how certain parental genotypes must be... + + int info = (sumFather <= 1 + FAMILY_LIMIT && isInformative(fatherA)?1:0) + (sumMother <= 1 + FAMILY_LIMIT && isInformative(motherA)?2:0); + + if (informativeMask.indexOf("" + info) < 0) { // to save memory... + addMarker(); + return; + } + + int fa1 = firstAllele(fatherA); + int fa2 = secondAllele(fatherA); + int ma1 = firstAllele(motherA); + int ma2 = secondAllele(motherA); + + if (grandparentPhase && info > 0) { //phasing logic with grandparents + int p1 = parentIndex[0]; //parent1 + int p2 = parentIndex[1]; //parent2 + int gp11 = parentIndex[2]; //grandparent1 of parent1 + int gp12 = parentIndex[3]; //grandparent2 of parent1 + int gp21 = parentIndex[4]; //grandparent1 of parent2 + int gp22 = parentIndex[5]; //grandparent2 of parent2 + + final double PHASE_LIMIT = 0.01; // how certain phase must be... + + assert(p1 == fatherIndex && p2 == motherIndex); + + if (info == 1 || info == 3) { //father informative + double at1 = pAllele(fa1, alleleProb, gp11) * pAllele(fa2, alleleProb, gp12); + double ta1 = pAllele(fa2, alleleProb, gp11) * pAllele(fa1, alleleProb, gp12); + if (at1 < ta1 * PHASE_LIMIT) { // second, first + int tmp = fa1; + fa1 = fa2; + fa2 = tmp; + } else if (ta1 < at1 * PHASE_LIMIT) { // first, second + //default way will do + } else { + addMarker(); // remove marker + return; + } + } + if (info == 2 || info == 3) { // mother informative + double at2 = pAllele(ma1, alleleProb, gp21) * pAllele(ma2, alleleProb, gp22); + double ta2 = pAllele(ma2, alleleProb, gp21) * pAllele(ma1, alleleProb, gp22); + + if (at2 < ta2 * PHASE_LIMIT) { // second, first + int tmp = ma1; + ma1 = ma2; + ma2 = tmp; + } else if (ta2 < at2 * PHASE_LIMIT) { // first, second + //default way will do + } else { + addMarker(); // remove marker + return; + } + + } + } + + fatherInf.add((isInformative(fatherA)) ? 1:0); + motherInf.add((isInformative(motherA)) ? 1:0); + + int c[] = {-1, -1, -1, -1}; + + int alleles = 2; + + if (isInformative(fatherA)) { + ++numInfFather; + if (isInformative(motherA)) { + ++numInfMother; + if (fatherA == motherA) // two alleles + ; + else if (ma1 == fa1 || ma1 == fa2 || ma2 == fa1 || ma2 == fa2) {// three alleles + ++numThreeAlleles; + alleles = 3; + } + else {// four alleles + ++numFourAlleles; + alleles = 4; + } + + } + } else if (isInformative(motherA)) + ++numInfMother; + + //numAlleles.add(alleles); + + c[0] = mapAlleles(fa1, ma1); + c[1] = mapAlleles(fa1, ma2); + c[2] = mapAlleles(fa2, ma1); + c[3] = mapAlleles(fa2, ma2); + + + int numTable = 4 * (numInd - 2); + float f[] = new float[numTable]; + + + for (int i = 0; i < numTable; i+=4) + for (int j = 0; j < 4; ++j) + f[i + j] = new Float(alleleProb.get(10 * familyIndex.get(i / 4) + c[j])); + //if (c[j] >= 0) + // f[i + j] = new Float(alleleProb.get(10 * familyIndex.get(i / 4) + c[j])); + //else + // f[i + j] = 1.0f; + normalize(f); + + + haplotypeProb.add(f); + /* + for (int i = 0; i < numTable; i+=4) { + for (int j = 0; j < 4; ++j) + System.err.print(f[i + j] + " "); + System.err.print("\t"); + } + System.err.println(); + */ + ++numMarkers; + + } + + public void printStatistics() + { + System.err.println("Family " + name + ":"); + + System.err.println("Number of paternally informative markers = " + numInfFather); + System.err.println("Number of maternally informative markers = " + numInfMother); + + System.err.println("Number of double informative markers with three alleles = " + numThreeAlleles); + System.err.println("Number of double informative markers with four alleles = " + numFourAlleles); + } + + public void callGenotypes(int marker, double limit) + { + float f[] = getProb(marker); + int tableSize = 4 * numChildren; + + if ((lod3Mode==2 || lod3Mode==3) && isFatherInformative(marker) && isMotherInformative(marker)) { + //TODO : check lod3Mode==3 + + for (int ci = 0; ci < tableSize; ci+=4) { + double g0 = f[ci + 0]; + double g1 = f[ci + 1] + f[ci + 2]; + double g2 = f[ci + 3]; + if (g0 > 1 - limit) { + f[ci + 0] = 1; + f[ci + 1] = 0; + f[ci + 2] = 0; + f[ci + 3] = 0; + } else if (g1 > 1 - limit) { + f[ci + 0] = 0; + f[ci + 1] /= g1; + f[ci + 2] /= g1; + f[ci + 3] = 0; + } else if (g2 > 1 - limit) { + f[ci + 0] = 0; + f[ci + 1] = 0; + f[ci + 2] = 0; + f[ci + 3] = 1; + } + } + return; + } + + for (int ci = 0; ci < tableSize; ci+=4) { + double pat0 = f[ci] + f[ci + 1]; + if (pat0 <= limit) { + f[ci + 0] = 0; + f[ci + 1] = 0; + f[ci + 2] /= (1 - pat0); + f[ci + 3] /= (1 - pat0); + } + else if (pat0 >= 1 - limit) { + f[ci + 0] /= pat0; + f[ci + 1] /= pat0; + f[ci + 2] = 0; + f[ci + 3] = 0; + } + double mat0 = f[ci] + f[ci + 2]; + + if (mat0 <= limit) { + f[ci + 0] = 0; + f[ci + 2] = 0; + f[ci + 1] /= (1 - mat0); + f[ci + 3] /= (1 - mat0); + } + else if (mat0 >= 1 - limit) { + f[ci + 0] /= mat0; + f[ci + 2] /= mat0; + f[ci + 1] = 0; + f[ci + 3] = 0; + } + } + } + + public void normalize(int m1) + { + normalize(haplotypeProb.get(m1)); + } + + private void normalize(float prob[]) + { + for (int i = 0; i < prob.length; i+=4) { + double sum = prob[i] + prob[i + 1] + prob[i + 2] + prob[i + 3] + 1e-20; + for (int j = 0; j < 4; ++j) + prob[i + j] = (float) ((prob[i + j] + 0.25e-20) / sum); + } + } + + private final int mapping[][] = {{0,1,2,3}, {2,3,0,1}, {1,0,3,2}, {3,2,1,0}}; + + public void scale(double value) { + if (value != 1.0) + for (float h[] : haplotypeProb) { + if (h != null) + for (int i = 0; i < h.length; ++i) + h[i] = (float) Math.pow(h[i], value); + } + } + + private void swap(int i, int j, float t[]) + { + float tmp = t[i]; + t[i] = t[j]; + t[j] = tmp; + } + + public void randomPhase() { + for (float h[] : haplotypeProb) { + if (h != null) { + if (Math.random() < 0.5) + for (int i = 0; i < h.length; i+=4) { + swap(i + 0, i + 2, h); + swap(i + 1, i + 3, h); + } + if (Math.random() < 0.5) + for (int i = 0; i < h.length; i+=4) { + swap(i + 0, i + 1, h); + swap(i + 2, i + 3, h); + } + } + } + } + + + public void minError(float value) { + if (value != 0.0) + for (float h[] : haplotypeProb) { + if (h != null) + for (int i = 0; i < h.length; ++i) + h[i] = (h[i] < value) ? value : h[i]; + } + } + + double computeLOD(double theta1, double theta2, int m1, int m2) + { + if (isMotherInformative(m1) && isMotherInformative(m2)) { + if (isFatherInformative(m1) && isFatherInformative(m2)) { + //TODO: LOD3,LOD3' + if (lod3Mode == 1) { + // return computeLOD(theta1, theta2, m1, m2, 0); + double lod1 = computeLOD(theta1, theta2, m1, m2, 0); + if (phasedData) + return lod1; + double lod2 = computeLOD(theta1, theta2, m1, m2, 1); + double lod3 = computeLOD(theta1, theta2, m1, m2, 2); + double lod4 = computeLOD(theta1, theta2, m1, m2, 3); + return Math.max(Math.max(Math.max(lod1, lod2), lod3), lod4); + } else if (lod3Mode == 2 && theta1 == theta2) { + double lod1 = computeLOD2(theta1, m1, m2, 0); + if (phasedData) + return lod1; + double lod2 = computeLOD2(theta1, m1, m2, 1); + return Math.max(lod1, lod2); + } else if (lod3Mode == 3 && theta1 == theta2) { + double lod1 = computeLOD3(theta1, m1, m2, 0); + if (phasedData) + return lod1; + double lod2 = computeLOD3(theta1, m1, m2, 1); + return Math.max(lod1, lod2); + } else + Error.error(1014); + } else { + double lod1 = computeLOD_2(theta2, m1, m2, 0); + if (phasedData) + return lod1; + double lod2 = computeLOD_2(theta2, m1, m2, 2); + return Math.max(lod1, lod2); + } + } else if (isFatherInformative(m1) && isFatherInformative(m2)) { + double lod1 = computeLOD_1(theta1, m1, m2, 0); + if (phasedData) + return lod1; + double lod2 = computeLOD_1(theta1, m1, m2, 1); + return Math.max(lod1, lod2); + } + return 0.0; + } + + private void computeLNoLinkage12(int m1) + { + //freqs[]; + } + private void computeLNoLinkage3(int phaseMapping[]) + { + + } + private void computeLNoLinkage4(int phaseMapping[]) + { + + } + + //TODO: consider lod3Mode + public double maxLodScore(double theta1, double theta2, int m1) + { + float f1[] = getProb(m1); + if (f1 == null) + return 0.0; + + int tableSize = 4 * numChildren; + + double lNoLinkage1 = 2.0; + double lNoLinkage2 = 2.0; + double lNoLinkage3 = 3.0; + double lNoLinkage4 = 2.0; + if (distortionLodMode) { // TODO: figure out how to implement here... + lNoLinkage1 = 2.0; + lNoLinkage2 = 2.0; + lNoLinkage3 = 3.0; + lNoLinkage4 = 2.0; + } + double logRet = 0.0; + double ret = 1.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = f1[ci + 0] + f1[ci + 1]; + double pat = Math.max(sum1, (1 - sum1)); + + sum1 = f1[ci + 0] + f1[ci + 2]; + double mat = Math.max(sum1, (1 - sum1)); + + ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); + ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + if (lod3Mode == 2 && theta1 == theta2 && isMotherInformative(m1) && isFatherInformative(m1)) { + double ret2 = 1.0; + + double logRet2 = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = 2 * f1[ci + 0]; + double sum2 = f1[ci + 1] + f1[ci + 2]; // TODO:Check + double sum3 = 2 * f1[ci + 3]; + double sum = sum1 + sum2 + sum3; + + double max = Math.max(Math.max(sum1, sum2), sum3) / sum; + + ret2 *= lNoLinkage3 * (theta1 * (1 - max) + (1 - theta1) * max); + + if ((ci + 4 >= tableSize) || ret2 > MAX_VALUE || ret2 < MIN_VALUE ) { + logRet2 += Math.log10(ret2); + ret2 = 1.0; + } + + } + return Math.max(logRet, logRet2); + } + if (lod3Mode == 3 && theta1 == theta2 && isMotherInformative(m1) && isFatherInformative(m1)) { + double ret2 = 1.0; + double logRet2 = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = f1[ci + 0] + f1[ci + 3]; + double max = Math.max(sum1, 1 - sum1); + ret2 *= lNoLinkage4 * (theta1 * (1 - max) + (1 - theta1) * max); + if ((ci + 4 >= tableSize) || ret2 > MAX_VALUE || ret2 < MIN_VALUE) { + logRet2 += Math.log10(ret2); + ret2 = 1.0; + } + } + return Math.max(logRet, logRet2); + } + return logRet; + } + + //TODO: faster by evaluating maximum LOD score obtained + private double computeLOD(double theta1, double theta2, int m1, int m2, int phase) + { + float f1[] = getProb(m1); + float f2[] = getProb(m2); + + int tableSize = 4 * numChildren; + int map[] = mapping[phase]; + + double ret = 1.0; + double logRet = 0.0; + + double lNoLinkage1 = 2.0; + double lNoLinkage2 = 2.0; + if (distortionLodMode) { // distortion aware lod score + double p = freqs[m1][0]+freqs[m1][1]; + double q = freqs[m2][map[0]]+freqs[m2][map[1]]; + lNoLinkage1 = p * q + (1 - p) * (1 - q); + if (lNoLinkage1 <= 0.5) + lNoLinkage1 = 2.0; + else + lNoLinkage1 = 1.0 / lNoLinkage1; + + p = freqs[m1][0] + freqs[m1][2]; + q = freqs[m2][map[0]] + freqs[m2][map[2]]; + lNoLinkage2 = p * q + (1 - p) * (1 - q); + if (lNoLinkage2 <= 0.5) + lNoLinkage2 = 2.0; + else + lNoLinkage2 = 1.0 / lNoLinkage2; + } + + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = f1[ci + 0] + f1[ci + 1]; + double sum2 = f2[ci + map[0]] + f2[ci + map[1]]; + double pat = sum1 * sum2 + (1 - sum1) * (1 - sum2); + + sum1 = f1[ci + 0] + f1[ci + 2]; + sum2 = f2[ci + map[0]] + f2[ci + map[2]]; + double mat = sum1 * sum2 + (1 - sum1) * (1 - sum2); + + ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); + ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) + return logRet; + } + private double computeLOD_1(double theta1, int m1, int m2, int phase) + { + float f1[] = getProb(m1); + float f2[] = getProb(m2); + + int tableSize = 4 * numChildren; + int map[] = mapping[phase]; + + double lNoLinkage1 = 2.0; + if (distortionLodMode) { // distortion aware lod score + double p = freqs[m1][0]+freqs[m1][1]; + double q = freqs[m2][map[0]]+freqs[m2][map[1]]; + lNoLinkage1 = p * q + (1 - p) * (1 - q); + if (lNoLinkage1 <= 0.5) + lNoLinkage1 = 2.0; + else + lNoLinkage1 = 1.0 / lNoLinkage1; + } + + double ret = 1.0; + double logRet = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = f1[ci + 0] + f1[ci + 1]; + double sum2 = f2[ci + map[0]] + f2[ci + map[1]]; + double pat = sum1 * sum2 + (1 - sum1) * (1 - sum2); + + ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) + return logRet; + } + + private double computeLOD_2(double theta2, int m1, int m2, int phase) + { + float f1[] = getProb(m1); + float f2[] = getProb(m2); + + int tableSize = 4 * numChildren; + int map[] = mapping[phase]; + + double lNoLinkage2 = 2.0; + if (distortionLodMode) { // distortion aware lod score + double p = freqs[m1][0]+freqs[m1][2]; + double q = freqs[m2][map[0]]+freqs[m2][map[2]]; + lNoLinkage2 = p * q + (1 - p) * (1 - q); + if (lNoLinkage2 <= 0.5) + lNoLinkage2 = 2.0; + else + lNoLinkage2 = 1.0 / lNoLinkage2; + } + + double ret = 1.0; + double logRet = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum1 = f1[ci + 0] + f1[ci + 2]; + double sum2 = f2[ci + map[0]] + f2[ci + map[2]]; + double mat = sum1 * sum2 + (1 - sum1) * (1 - sum2); + + ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) + return logRet; + } + + // LOD score for double informative markers, + // mode 2 + + private final int mapping3[][] = {{0,3}, {3,0}}; + + //+log(3) bit for identical genotype + private double computeLOD2(double theta, int m1, int m2, int phase) + { + float f1[] = getProb(m1); + float f2[] = getProb(m2); + + int tableSize = 4 * numChildren; + int map[] = mapping3[phase]; + + double lNoLinkage3 = 3.0; + if (distortionLodMode) { + double p1 = 2.0 * freqs[m1][0]; + double p2 = 2.0 * freqs[m1][3]; + double p3 = freqs[m1][1] + freqs[m1][2]; + double sump = p1 + p2 + p3; + + double q1 = 2.0 * freqs[m1][map[0]]; + double q2 = 2.0 * freqs[m1][map[1]]; + double q3 = freqs[m1][1] + freqs[m1][2]; + double sumq = q1 + q2 + q3; + + lNoLinkage3 = (p1 * q1 + p2 * q2 + p3 * q3) / (sump * sumq); + if (lNoLinkage3 <= Constants.ONETHIRD) + lNoLinkage3 = 3.0; + else + lNoLinkage3 = 1.0 / lNoLinkage3; + } + + + double ret = 1.0; + double logRet = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum11 = 2 * f1[ci + 0]; + double sum21 = 2 * f2[ci + map[0]]; + + double sum12 = 2 * f1[ci + 3]; + double sum22 = 2 * f2[ci + map[1]]; + + double sum13 = f1[ci + 1] + f1[ci + 2]; + double sum23 = f2[ci + 1] + f2[ci + 2]; + + double sum1 = sum11 + sum12 + sum13; + double sum2 = sum21 + sum22 + sum23; + + double s = 1.0 / (sum1 * sum2); + + double t0 = (sum11 * sum21) * s; + double t1 = (sum12 * sum22) * s; + double t2 = (sum13 * sum23) * s; + + double t = t0 + t1 + t2; + + ret *= lNoLinkage3 * (theta * (1 - t) + (1 - theta) * t); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) + return logRet; + } + + // LOD score for double informative markers, + // mode 3 + //+1 bit for homozygote-heterozygote... (phase=1) + //+1 bit for homozygote-homozygote... (phase=0) + private double computeLOD3(double theta, int m1, int m2, int phase) + { + float f1[] = getProb(m1); + float f2[] = getProb(m2); + + int tableSize = 4 * numChildren; + + double lNoLinkage4 = 2.0; + if (distortionLodMode) { + double p = freqs[m1][0]+freqs[m1][3]; + double q = (phase == 1) ? freqs[m2][1] + freqs[m2][2] : freqs[m2][0] + freqs[m2][3]; + lNoLinkage4 = p * q + (1 - p) * (1 - q); + if (lNoLinkage4 <= 0.5) + lNoLinkage4 = 2.0; + else + lNoLinkage4 = 1.0 / lNoLinkage4; + } + + double ret = 1.0; + double logRet = 0.0; + for (int ci = 0; ci < tableSize; ci+=4) + { + double sum11 = f1[ci + 0] + f1[ci + 3]; + double sum21 = (phase == 1) ? f2[ci + 1] + f2[ci + 2] : f2[ci + 0] + f2[ci + 3]; + double sum12 = 1 - sum11; + double sum22 = 1 - sum21; + + double t0 = sum11 * sum21; + double t1 = sum12 * sum22; + double t = t0 + t1; + ret *= lNoLinkage4 * (theta * (1 - t) + (1 - theta) * t); + if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { + logRet += Math.log10(ret); + ret = 1.0; + } + } + //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) + return logRet; + } + + //private final double MINPROB_COMBINE = 0.001; + + // from m2 to m1 + public void setProb(int m1, int m2) + { +/* float f1[] = haplotypeProb.get(m1); + float f2[] = haplotypeProb.get(m2); + int tableSize = 4 * numChildren; + for (int i = 0; i < tableSize; ++i) + f1[i] = f2[i];*/ + haplotypeProb.set(m1, haplotypeProb.get(m2)); + } + public void setProb(int m1, float f[]) + { +/* float f1[] = haplotypeProb.get(m1); + float f2[] = haplotypeProb.get(m2); + int tableSize = 4 * numChildren; + for (int i = 0; i < tableSize; ++i) + f1[i] = f2[i];*/ + haplotypeProb.set(m1, f); + } + + + + private final double NORMALIZE_SMALL = 0.25e-20; + public void combineAndNormalize(int m1, int m2, double theta1, double theta2) + { + if (theta1 != 0 && theta2 != 0) + return; + + int tableSize = 4 * numChildren; + float f1[] = getProb(m1); + if (f1 == null) { + f1 = new float[4 * numChildren]; + Arrays.fill(f1, 0.25f); + haplotypeProb.add(m1, f1); + } + + float f2[] = getProb(m2); + if (f2 == null) { + f2 = new float[4 * numChildren]; + Arrays.fill(f2, 0.25f); + haplotypeProb.add(m2, f2); + } + + + if (theta1 == theta2 && lod3Mode == 2 && isMotherInformative(m1) && isMotherInformative(m2) && isFatherInformative(m1) && isFatherInformative(m2)) { + double table[] = { + computeLOD2(theta1, m1, m2, 0), + computeLOD2(theta1, m1, m2, 1)}; + int max = table[0] > table[1] ? 0 : 1; + if (max == 0) + for (int i = 0; i < tableSize; i+=4) { + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) { + sum += f1[i + j] * f2[i + j]; + } + for (int j = 0; j < 4; ++j) + f1[i + j] = (float)((f1[i + j] * (double) f2[i + j] + NORMALIZE_SMALL) / sum); + } else { + for (int i = 0; i < tableSize; i+=4) { + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) + sum += f1[i + j] * f2[i + ((j == 0 || j == 3) ? 3 - j : j)]; + for (int j = 0; j < 4; ++j) + f1[i + j] = (float)((f1[i + j] * (double) f2[i + ((j == 0 || j == 3) ? 3 - j : j)] + NORMALIZE_SMALL) / sum); + } + } + return; + } + + if (theta1 == theta2 && lod3Mode == 3 && isMotherInformative(m1) && isMotherInformative(m2) && isFatherInformative(m1) && isFatherInformative(m2)) { + double table[] = { + computeLOD3(theta1, m1, m2, 0), + computeLOD3(theta1, m1, m2, 1)}; + + int max = table[0] >= table[1] ? 0 : 1; + + if (max == 0) + for (int i = 0; i < tableSize; i+=4) { + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) { + sum += f1[i + j] * f2[i + j]; + } + for (int j = 0; j < 4; ++j) + f1[i + j] = (float)((f1[i + j] * (double) f2[i + j] + NORMALIZE_SMALL) / sum); + } else { + for (int i = 0; i < tableSize; i+=4) { + double hom1 = f1[i + 0] + f1[i + 3]; + double hom2 = f2[i + 0] + f2[i + 3]; + + double sum = hom1 * (1 - hom2) + (1 - hom1) * hom2 + 4 * NORMALIZE_SMALL; + + f1[i + 0] = (float)((f1[i + 0] * (1 - hom2) + NORMALIZE_SMALL) / sum); + f1[i + 1] = (float)((f1[i + 1] * (hom2) + NORMALIZE_SMALL) / sum); + f1[i + 2] = (float)((f1[i + 2] * (hom2) + NORMALIZE_SMALL) / sum); + f1[i + 3] = (float)((f1[i + 3] * (1 - hom2) + NORMALIZE_SMALL) / sum); + } + + } + + return; + } + + + double table[] = { + computeLOD(theta1, theta2, m1, m2, 0), + computeLOD(theta1, theta2, m1, m2, 1), + computeLOD(theta1, theta2, m1, m2, 2), + computeLOD(theta1, theta2, m1, m2, 3)}; + + int maxi = 0; + for (int i = 1; i < 4; ++i) + if (table[i] > table[maxi]) + maxi = i; + + int map[] = mapping[maxi]; + + + + if (theta1 == 0 && theta2 == 0) + for (int i = 0; i < tableSize; i+=4) { + + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) + sum += f1[i + j] * (double) f2[i + map[j]]; + + for (int j = 0; j < 4; ++j) { + //if (p < MINPROB_COMBINE) + // p = MINPROB_COMBINE; + f1[i + j] = (float)((f1[i + j] * (double) f2[i + map[j]] + NORMALIZE_SMALL) / sum); + } + } + + else if (theta1 == 0) { + for (int i = 0; i < tableSize; i+=4) { + double p = f2[i + map[0]]; + p += f2[i + map[1]]; + double ret[] = new double[4]; + //if (p < MINPROB_COMBINE) + // p = MINPROB_COMBINE; + for (int j = 0; j < 4; ++j) + ret[j] = f1[i + j] * ((j < 2) ? p : 1 - p); + + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) + sum += ret[j]; + for (int j = 0; j < 4; ++j) + f1[i + j] = (float)((ret[j] + NORMALIZE_SMALL) / sum); + } + } + else if (theta2 == 0) { + for (int i = 0; i < tableSize; i+=4) { + double p = f2[i + map[0]]; + p += f2[i + map[2]]; + double ret[] = new double[4]; + //if (p < MINPROB_COMBINE) + // p = MINPROB_COMBINE; + for (int j = 0; j < 4; ++j) + ret[j] = f1[i + j] * ((j == 0 || j == 2) ? p : 1 - p); + + double sum = 4 * NORMALIZE_SMALL; + for (int j = 0; j < 4; ++j) + sum += ret[j]; + for (int j = 0; j < 4; ++j) + f1[i + j] = (float)((ret[j] + NORMALIZE_SMALL) / sum); + } + } + + //normalize(f1); + + } + + + public String pattern(int marker) + { + int tableSize = 4 * numChildren; + + final double LIMIT = 0.1; + + float f[] = getProb(marker); + + String s1 = ""; + String s2 = ""; + + if (f == null) + for (int i = 0; i < tableSize; i+=4) { + s1 = s1 + "?"; + s2 = s2 + "?"; + } + else if ((lod3Mode == 2 || lod3Mode == 3) && (isFatherInformative(marker) && isMotherInformative(marker))) { + for (int i = 0; i < tableSize; i+=4) { + double p0 = f[i + 0]; + double p1 = f[i + 1] + f[i + 2]; + double p2 = f[i + 3]; + if (p0 >= 1 - LIMIT) + s1 = s1 + "0"; + else if (p1 >= 1 - LIMIT) + s1 = s1 + "1"; + else if (p2 >= 1 - LIMIT) + s1 = s1 + "2"; + else + s1 = s1 + "?"; + } + s2 = s1; + + } else + for (int i = 0; i < tableSize; i+=4) { + double pat = f[i + 0] + f[i + 1]; + double mat = f[i + 0] + f[i + 2]; + if (pat >= 1 - LIMIT) + s1 = s1 + "0"; + else if (pat <= LIMIT) + s1 = s1 + "1"; + else + s1 = s1 + "?"; + + if (mat >= 1 - LIMIT) + s2 = s2 + "0"; + else if (mat <= LIMIT) + s2 = s2 + "1"; + else + s2 = s2 + "?"; + } + + return s1 + "\t" + s2; + } + + private void printPattern(int marker) + { + System.err.println(pattern(marker)); + } + + public void removeMarker(int marker) + { + motherInf.set(marker, motherInf.get(marker) + 2); + fatherInf.set(marker, fatherInf.get(marker) + 2); + haplotypeProb.set(marker, null); + + } + + + +} diff --git a/software/LepMap3/lm3/src/Filtering2.java b/software/LepMap3/lm3/src/Filtering2.java new file mode 100644 index 0000000..e7cf0a4 --- /dev/null +++ b/software/LepMap3/lm3/src/Filtering2.java @@ -0,0 +1,623 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP2. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge +*/ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Scanner; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.InputStreamReader; + +import java.util.StringTokenizer; +// Posterior aware (subset of) Filtering +//TODO: removeIndividuals, removeGrandParents, parse pedigree better and detect errors +public class Filtering2 { + + private final double SMALL = 1e-20; // to avoid problems with zero probabilities + private int numIndividuals = 0; + + private boolean removeNonInformative = false; + + private ArrayList> families = new ArrayList>(); + private ArrayList familyNames = new ArrayList(); + private ArrayList sex = new ArrayList(); + + HashMap familyHash = new HashMap(); + HashMap familyHash2 = new HashMap(); + + private double dataTolerance = 0.0; + private double X2Limits[] = new double[4]; + + private double mafLimit = 0.0; + + private boolean outputHWE = false; + + private boolean noSexFiltering = false; + + private double missingLimit = 0.0; + private double missingTolerance = 0.0; + + //rivate double homozygoteLimit = 0.0; + //private double heterozygoteLimit = 0.0; + private double familyInformativeLimit = 0.0; + + private boolean convert2Biallelic = false; + + private final double LIKELIHOOD_TOLERANCE = 0.001; // used in EM and chiX2 tests + + private double initDistribution[] = new double[]{0.25,0.25,0.25,0.25}; + + + //private void setHeterozygoteLimit(double value) + //{ + // heterozygoteLimit = value; + //} + //private void setHomozygoteLimit(double value) + //{ + // homozygoteLimit = value; + //} + private void setNoSexFiltering(boolean value) + { + noSexFiltering = value; + } + + private void setFamilyInformativeLimit(double value) + { + familyInformativeLimit = value; + } + + + private double tailX2(double x, int df) + { + return GammaFunction.incompleteGammaQ(0.5 * df, 0.5 * x); + } + + + private double findLimit(int df, double tolerance) + { + if (tolerance <= 0.0) + return Double.MAX_VALUE; + //System.err.println(); + + double x = 0.0; + double adder = 2.0; + + while (adder >= 0.5 * LIKELIHOOD_TOLERANCE) { + while (tailX2(x, df) >= tolerance) + x += adder; + x -= adder; + adder *= 0.5; + //System.err.println(x); + } + return x; + } + + public void setDataTolerance(double value) + { + dataTolerance = value; + X2Limits[0] = Double.MAX_VALUE; + X2Limits[1] = findLimit(1, value); + X2Limits[2] = findLimit(2, value); + X2Limits[3] = findLimit(3, value); + System.err.println("chi^2 limits are " + X2Limits[1] + ", " + X2Limits[2] + ", " + X2Limits[3]); + + + } + + public void setRemoveNonInformative(boolean value) + { + removeNonInformative = value; + } + + public void setOutputHWE(boolean value){ + outputHWE = value; + } + public void setMAFLimit(double value){ + mafLimit = value; + } + public void setMissingLimit(double value){ + missingLimit = value; + } + public void setMissingTolerance(double value){ + missingTolerance = value; + } + + private void parsePedigree(String names[], String fathers[], String mothers[]) { + //TODO: Move the pedigree parsing logic to here + //TODO: Add pedigree checking here... + for (int i = 2; i < names.length; ++i) { + if (fathers[i].equals("0")) { //move parents to the end... + ArrayList findex = families.get(familyHash2.get(i - 2)); + if (!findex.remove(new Integer(i - 2))) + Error.error(1002); + findex.add(i - 2); + } + } + } + + //also prints... + public void filter(String filename) { + DataParser dp = new DataParser(); + dp.loadFile(filename, null, null); + + ArrayList dl = dp.getNextLine(true); + + families = dp.getFamilies(); + //parentIndex = dp.getParentIndex(); + sex = dp.getSex(); + numIndividuals = dp.getNumIndividuals(); + int fam = 0; + for (ArrayList f : families) { + for (int i : f) + familyHash2.put(i, fam); + ++fam; + } + int numMarkers = 0; + while (dl != null) { + ++numMarkers; + //System.err.println(dl); + filter(dp.getMarkerName(), dl); + dl = dp.getNextLine(true); + } + System.err.println("Number of markers = " + numMarkers); + //System.err.println("Number of individuals = " + numIndividuals); + //System.err.println("Number of families = " + families.size()); + } + + + private void printResult(String suffix, ArrayList posteriors) + { + StringBuilder sb = new StringBuilder(suffix); + //System.out.print(suffix); + + for (int i = 0; i < numIndividuals; ++i) { + //System.out.print("\t"); + sb.append('\t'); + double max = SMALL; + for (int j = 0; j < 10; ++j) + max = Math.max(max, posteriors.get(10 * i + j)); + + for (int j = 0; j < 10; ++j) { + if (max == SMALL) + //System.out.print(1); + sb.append('1'); + else { + double r = posteriors.get(10 * i + j) / max; + if (r == 0.0) + //System.out.print(0); // save some space + sb.append('0'); + else + //System.out.print(r); + sb.append(r); + } + if (j != 9) + //System.out.print(" "); + sb.append(' '); + } + } + System.out.println(sb); + } + + public void convertBiAllelic(ArrayList familyIndex, ArrayList posteriors) { + + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 1); + int motherIndex = familyIndex.get(numInd - 2); + if (sex.get(motherIndex) == 1|| sex.get(motherIndex) == 2) { + int tmp = motherIndex; + motherIndex = fatherIndex; + fatherIndex = tmp; + } + + int motherG = -1; + int fatherG = -1; + + for (int i = 0; i < 10; ++i) + if (posteriors.get(10 * fatherIndex + i) == 1) { + if (fatherG >= 0) + return; + fatherG = i; + } + + for (int i = 0; i < 10; ++i) + if (posteriors.get(10 * motherIndex + i) == 1) { + if (motherG >= 0) + return; + motherG = i; + } + + int fatherA1 = allele1(fatherG); + int fatherA2 = allele2(fatherG); + int motherA1 = allele1(motherG); + int motherA2 = allele2(motherG); + if (fatherA1 != fatherA2 && motherA1 != motherA2) { + if (fatherA1 != motherA1 || fatherA2 != motherA2) { // more than two alleles + for (int i = 0; i < 10; ++i) { + posteriors.set(10 * motherIndex + i, (i == 1) ? 1.0 : 0.0); // AC + posteriors.set(10 * fatherIndex + i, (i == 1) ? 1.0 : 0.0); // AC + } + for (int index : familyIndex) + if (index != fatherIndex && index != motherIndex) { + double p0 = posteriors.get(10 * index + mapAlleles(fatherA1, motherA1)); + double p1 = posteriors.get(10 * index + mapAlleles(fatherA1, motherA2)) + posteriors.get(10 * index + mapAlleles(fatherA2, motherA1)); + double p2 = posteriors.get(10 * index + mapAlleles(fatherA2, motherA2)); + for (int i = 0; i < 10; ++i) + posteriors.set(10 * index + i, 0.0); + double maxp = Math.max(Math.max(p0, p1), p2); + posteriors.set(10 * index, p0 / maxp); //AA + posteriors.set(10 * index + 1, p1 / maxp); //AC + posteriors.set(10 * index + 4, p2 / maxp); //CC + } + } + } + //TODO: other cases (do not make difference...) + } + + public void filter(String suffix, ArrayList posteriors) + { + int numFamilies = families.size(); + double maf[] = new double[4]; + + boolean skipDistortion = false; + if (noSexFiltering && suffix.indexOf('*') >= 0) + skipDistortion = true; + + //int family = 0; + if (outputHWE) + System.err.print(suffix); + + for (ArrayList familyIndex : families) { + if (convert2Biallelic) { + convertBiAllelic(familyIndex, posteriors); + } + boolean filterMarker = isSignificantlyDistorted(posteriors, familyIndex, maf); + if (skipDistortion) + filterMarker = false; + + double scale = 1.0; + if (mafLimit >= 1.0) + scale = familyIndex.size() - 2; + + for (int h = 0; h < 4; ++h) + if (scale * maf[h] < mafLimit) + filterMarker = true; + + scale = 1.0; + if (missingLimit < 1.0) + scale = 1.0 / (familyIndex.size() - 2); + if (numMissingGenotypes(posteriors, familyIndex) * scale > missingLimit) + filterMarker = true; + + + if (filterMarker) + { + for (int i : familyIndex) + for (int j = 0; j < 10; ++j) + posteriors.set(10 * i + j, 1.0); + } + //++family; + } + if (outputHWE) + System.err.println(); + + + boolean informative = false; + int informativeFamilies = 0; + + for (ArrayList familyIndex : families) { + int numInd = familyIndex.size(); + int parents[] = {familyIndex.get(numInd - 1), familyIndex.get(numInd - 2)}; + for (int i : parents) { + int maxj = 0; + double sum = 0.0; + for (int j = 0; j < 10; ++j) { + double p = posteriors.get(10 * i + j); + sum += p; + if (p >= 1.0 - SMALL) + maxj = j; + } + if (sum <= 1.0 + SMALL && ("0479".indexOf("" + maxj) < 0)) { + informative = true; + ++informativeFamilies; + } + } + } + if ((informative || !removeNonInformative) && informativeFamilies >= familyInformativeLimit) + printResult(suffix, posteriors); + + } +//Returns frequencies for haplotypes 00, 01, 10 and 11 +//Used to calculate distortion aware LOD scores... + public static double[] getFrequencies(double posteriors[][]) + { + Filtering2 f = new Filtering2(); + double ret[] = new double[4]; + f.em(posteriors, ret, Double.POSITIVE_INFINITY); + return ret; + } + + public double em(double posteriors[][]) + { + return em(posteriors, new double[4], Double.POSITIVE_INFINITY); + } + + //allow different distribution for selfing data... + public void setInitDistribution(double het) + { + if (het >= 1.0 || het <= 0.0) { + System.err.println("Error: Expected distribution must be < 1 and > 0"); + System.exit(-1); + } + initDistribution[0] = (1.0 - het) * 0.5; + initDistribution[1] = het * 0.5; + initDistribution[2] = het * 0.5; + initDistribution[3] = (1.0 - het) * 0.5; + } + + public double em(double posteriors[][], double finalP[], double XLimit) + { + double p[] = new double[4]; + for (int i = 0; i < 4;++i) + p[i] = initDistribution[i]; + + double t[] = new double[]{0, 0, 0, 0}; + double q[] = new double[]{0, 0, 0, 0}; + double initL = Double.NEGATIVE_INFINITY; + double finalL = Double.NEGATIVE_INFINITY; + + for (int iteration = 0; iteration < 100; ++iteration) { + Arrays.fill(q, 0.0); + double logL = 0.0; + double ll = 1.0; + for (double post[] : posteriors) { + for (int i = 0; i < 4; ++i) + t[i] = p[i] * post[i]; + double l = (t[0] + t[1] + t[2] + t[3]); + if (l < 1e-100) // set missing if very small + l = 1e-100; + double il = 1.0 / l; + for (int i = 0; i < 4; ++i) + q[i] += t[i] * il; + ll *= l; + if (ll < 1e-200) { // log when needed + logL += Math.log(ll); + ll = 1.0; + } + } + logL += Math.log(ll); + //System.err.println(logL); + + double sum = q[0] + q[1] + q[2] + q[3]; + double isum = 1.0 / sum; + for (int i = 0; i < 4; ++i) + p[i] = q[i] * isum; + //System.err.println("ll = " + ll); + if (iteration == 0) + initL = logL; + else { + double oldL = finalL; + finalL = logL; + if (finalL - oldL < LIKELIHOOD_TOLERANCE || 2 * (finalL - initL) >= XLimit) + break; + } + } + //System.err.println("p = " + p[0] + "," + p[1] + "," + p[2] + "," + p[3]); + for (int i = 0; i < 4; ++i) + finalP[i] = p[i]; + + return finalL - initL; // likelihood ratio... + } + + public int numMissingGenotypes(ArrayList posteriors, ArrayList familyIndex) + { + int ret = 0; + for (int i = 0; i < familyIndex.size() - 2; ++i) { + int index = 10 * familyIndex.get(i); + + double sum = 0.0; + for (int j = 0; j < 10; ++j) + sum += posteriors.get(index + j); + + if (sum >= 1.0 + missingTolerance || sum == 0) + ++ret; + } + return ret; + } + + public boolean isSignificantlyDistorted(ArrayList posteriors, ArrayList familyIndex, double maf[]) { + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 1); + int motherIndex = familyIndex.get(numInd - 2); + if (sex.get(motherIndex) == 1 || sex.get(fatherIndex) == 2) { + int tmp = motherIndex; + motherIndex = fatherIndex; + fatherIndex = tmp; + } + fatherIndex *= 10; + motherIndex *= 10; + + int motherG = -1; + int fatherG = -1; + + for (int i = 0; i < 10; ++i) + if (posteriors.get(fatherIndex + i) == 1) { + if (fatherG >= 0) { + //clear all + if (outputHWE) + System.err.print("\tX2 = " + 0 + "\tdf = " + 0); + return true; + } + fatherG = i; + } + + for (int i = 0; i < 10; ++i) + if (posteriors.get(motherIndex + i) == 1) { + if (motherG >= 0) { + //clear all + if (outputHWE) + System.err.print("\tX2 = " + 0 + "\tdf = " + 0); + return true; + } + motherG = i; + } + + int fatherA1 = allele1(fatherG); + int fatherA2 = allele2(fatherG); + int motherA1 = allele1(motherG); + int motherA2 = allele2(motherG); + + + int df = 0; + + if (fatherA1 != fatherA2) { + if (motherA1 != motherA2) { + df = 2; + if (fatherA1 != motherA1 || fatherA2 != motherA2) + df = 3; + } + else + df = 1; + } else if (motherA1 != motherA2) { + df = 1; + } + double post[][] = new double[familyIndex.size() - 2][4]; + + for (int i = 0; i < familyIndex.size() - 2; ++i) { + int index = 10 * familyIndex.get(i); + post[i][0] = posteriors.get(index + mapAlleles(fatherA1, motherA1)); + post[i][1] = posteriors.get(index + mapAlleles(fatherA1, motherA2)); + post[i][2] = posteriors.get(index + mapAlleles(fatherA2, motherA1)); + post[i][3] = posteriors.get(index + mapAlleles(fatherA2, motherA2)); + } + + double X2 = 2 * em(post, maf, X2Limits[df]); + if (outputHWE) { + X2 = 2 * em(post, maf, Double.POSITIVE_INFINITY); + System.err.print("\tX2 = " + X2 + "\tdf = " + df); + } + return (X2 >= X2Limits[df]); + } + + + private int mapAlleles(int a1, int a2) + { + if (a1 > a2) + return mapAlleles(a2, a1); // a1 <= a2 + if (a2 > 3) + Error.error(1005); + if (a1 == 0) + return a2; + if (a1 == 1) + return 3 + a2; + if (a1 == 2) + return 5 + a2; + if (a1 == 3) + return 9; + Error.error(1005); + return -1; + } + + private int allele1(int g) + { + if (g < 4) + return 0; + if (g < 7) + return 1; + if (g < 9) + return 2; + if (g == 9) + return 3; + Error.error(1005); + return -1; + } + + private int allele2(int g) + { + if (g < 4) + return g; + if (g < 7) + return g - 3; + if (g < 9) + return g - 5; + if (g == 9) + return 3; + Error.error(1005); + return -1; + } + + public void setConvert2Biallelic(boolean convert) { + convert2Biallelic = convert; + } + + //TODO: "informativeMask", "families", "removeMarkers" + //TODO: dataTolerance separately for each family + //TODO: Give X2 limits (separately for each family) + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(1001); + String extraParameters = ""; + System.out.print("#java Filtering2"); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(1001); + pp.warning(new String[]{"data", "dataTolerance", "removeNonInformative", "outputHWE", "MAFLimit", "missingLimit", "convert2Biallelic", "familyInformativeLimit", "noSexFiltering", "heterozygoteRate"}); // , "homozygoteLimit", "heterozygoteLimit" + + String filename = pp.getValueAsString("data", null); + if (filename == null) + Error.error(1001); + + Filtering2 filter = new Filtering2(); + //filter.set + + //double post[][] = new double[][]{{1, 1, 0, 1}, {1, 0, 1, 1}, {1, 1, 1, 0}, {0, 1, 1, 0}}; + //System.out.println(filter.em(post)); + //System.out.println(); + + double dataTolerance = Double.parseDouble(pp.getValueAsString("dataTolerance", "0.001")); + + filter.setDataTolerance(dataTolerance); + filter.setRemoveNonInformative(pp.getValueAsString("removeNonInformative", "0").equals("1")); + filter.setOutputHWE(pp.getValueAsString("outputHWE", "0").equals("1")); + filter.setMAFLimit(Double.parseDouble(pp.getValueAsString("MAFLimit", "0.0"))); + + //filter.setHeterozygoteLimit(Double.parseDouble(pp.getValueAsString("heterozygoteLimit", "0.0"))); + //filter.setHomozygoteLimit(Double.parseDouble(pp.getValueAsString("homozygoteLimit", "0.0"))); + filter.setFamilyInformativeLimit(Integer.parseInt(pp.getValueAsString("familyInformativeLimit", "0"))); + + filter.setMissingLimit(Double.parseDouble(pp.getValueAsString("missingLimit", 0, "" + Double.MAX_VALUE))); + filter.setMissingTolerance(Double.parseDouble(pp.getValueAsString("missingLimit", 1, "0.1"))); + filter.setConvert2Biallelic(pp.getValueAsString("convert2Biallelic", "0").equals("1")); + + boolean noSexFiltering = pp.getValueAsString("noSexFiltering", "0").equals("1"); + filter.setNoSexFiltering(noSexFiltering); + double het = Double.parseDouble(pp.getValueAsString("heterozygoteRate", "0.5")); + filter.setInitDistribution(het); + + filter.filter(filename); + } +} diff --git a/software/LepMap3/lm3/src/GammaFunction.java b/software/LepMap3/lm3/src/GammaFunction.java new file mode 100644 index 0000000..8e21420 --- /dev/null +++ b/software/LepMap3/lm3/src/GammaFunction.java @@ -0,0 +1,200 @@ +/* + * GammaFunction.java + * + * Copyright (C) 2002-2006 Alexei Drummond and Andrew Rambaut + * + * This file is part of BEAST. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership and licensing. + * + * BEAST is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * BEAST is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with BEAST; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +//package dr.math; + + +/** + * gamma function + * + * @author Korbinian Strimmer + * @version $Id: GammaFunction.java,v 1.3 2005/05/24 20:26:01 rambaut Exp $ + */ +public class GammaFunction { + // + // Public stuff + // + + // Gamma function + + /** + * log Gamma function: ln(gamma(alpha)) for alpha>0, accurate to 10 decimal places + * + * @param alpha argument + * @return the log of the gamma function of the given alpha + */ + public static double lnGamma(double alpha) { + // Pike MC & Hill ID (1966) Algorithm 291: Logarithm of the gamma function. + // Communications of the Association for Computing Machinery, 9:684 + + double x = alpha, f = 0.0, z; + + if (x < 7) { + f = 1; + z = x - 1; + while (++z < 7) { + f *= z; + } + x = z; + f = -Math.log(f); + } + z = 1 / (x * x); + + return + f + (x - 0.5) * Math.log(x) - x + 0.918938533204673 + + (((-0.000595238095238 * z + 0.000793650793651) * + z - 0.002777777777778) * z + 0.083333333333333) / x; + } + + /** + * Incomplete Gamma function Q(a,x) + * (a cleanroom implementation of Numerical Recipes gammq(a,x); + * in Mathematica this function is called GammaRegularized) + * + * @param a parameter + * @param x argument + * @return function value + */ + public static double incompleteGammaQ(double a, double x) { + return 1.0 - incompleteGamma(x, a, lnGamma(a)); + } + + /** + * Incomplete Gamma function P(a,x) = 1-Q(a,x) + * (a cleanroom implementation of Numerical Recipes gammp(a,x); + * in Mathematica this function is 1-GammaRegularized) + * + * @param a parameter + * @param x argument + * @return function value + */ + public static double incompleteGammaP(double a, double x) { + return incompleteGamma(x, a, lnGamma(a)); + } + + /** + * Incomplete Gamma function P(a,x) = 1-Q(a,x) + * (a cleanroom implementation of Numerical Recipes gammp(a,x); + * in Mathematica this function is 1-GammaRegularized) + * + * @param a parameter + * @param x argument + * @param lnGammaA precomputed lnGamma(a) + * @return function value + */ + public static double incompleteGammaP(double a, double x, double lnGammaA) { + return incompleteGamma(x, a, lnGammaA); + } + + + /** + * Returns the incomplete gamma ratio I(x,alpha) where x is the upper + * limit of the integration and alpha is the shape parameter. + * + * @param x upper limit of integration + * @param alpha shape parameter + * @param ln_gamma_alpha the log gamma function for alpha + * @return the incomplete gamma ratio + */ + private static double incompleteGamma(double x, double alpha, double ln_gamma_alpha) { + // (1) series expansion if (alpha>x || x<=1) + // (2) continued fraction otherwise + // RATNEST FORTRAN by + // Bhattacharjee GP (1970) The incomplete gamma integral. Applied Statistics, + // 19: 285-287 (AS32) + + double accurate = 1e-8, overflow = 1e30; + double factor, gin, rn, a, b, an, dif, term; + double pn0, pn1, pn2, pn3, pn4, pn5; + + if (x == 0.0) { + return 0.0; + } + if (x < 0.0 || alpha <= 0.0) { + throw new IllegalArgumentException("Arguments out of bounds"); + } + + factor = Math.exp(alpha * Math.log(x) - x - ln_gamma_alpha); + + if (x > 1 && x >= alpha) { + // continued fraction + a = 1 - alpha; + b = a + x + 1; + term = 0; + pn0 = 1; + pn1 = x; + pn2 = x + 1; + pn3 = x * b; + gin = pn2 / pn3; + + do { + a++; + b += 2; + term++; + an = a * term; + pn4 = b * pn2 - an * pn0; + pn5 = b * pn3 - an * pn1; + + if (pn5 != 0) { + rn = pn4 / pn5; + dif = Math.abs(gin - rn); + if (dif <= accurate) { + if (dif <= accurate * rn) { + break; + } + } + + gin = rn; + } + pn0 = pn2; + pn1 = pn3; + pn2 = pn4; + pn3 = pn5; + if (Math.abs(pn4) >= overflow) { + pn0 /= overflow; + pn1 /= overflow; + pn2 /= overflow; + pn3 /= overflow; + } + } while (true); + gin = 1 - factor * gin; + } else { + // series expansion + gin = 1; + term = 1; + rn = alpha; + do { + rn++; + term *= x / rn; + gin += term; + } + while (term > accurate); + gin *= factor / alpha; + } + return gin; + } + +} + diff --git a/software/LepMap3/lm3/src/IBD.java b/software/LepMap3/lm3/src/IBD.java new file mode 100644 index 0000000..f91e4ba --- /dev/null +++ b/software/LepMap3/lm3/src/IBD.java @@ -0,0 +1,720 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP3. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge +*/ + +import java.util.ArrayList; +import java.util.Arrays; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.InputStreamReader; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantLock; +import java.util.HashMap; + +// Posterior aware (subset of) Filtering +public class IBD { +// private final ReentrantLock lock = new ReentrantLock(); + + private final double SMALL = 1e-20; // to avoid problems with zero probabilities + private int numIndividuals = 0; + + private double mafLimit=0.1; + + private double gLimit=0.1; + + ArrayList data = new ArrayList(); + ArrayList frequencies = new ArrayList(); + + private double missingLimit = Double.MAX_VALUE; + private double missingTolerance = 0.1; + + private final double LIKELIHOOD_TOLERANCE = 1e-12; // used in EM + private final double LIKELIHOOD_TOLERANCE2 = 1e-6; // used in IBD + + private int numThreads = 4; + + String names[] = null; + + double biAllelicLimit = 1; + + public void setBiAllelic(double value){ + biAllelicLimit = value; + } + + public void setMAFLimit(double value){ + mafLimit = value; + } + public void setGLimit(double value){ + gLimit = value; + } + public void setMissingLimit(double value){ + missingLimit = value; + } + public void setMissingTolerance(double value){ + missingTolerance = value; + } + + public void setNumThreads(int value){ + numThreads = value; + } + + //print also... + public void filter(DataParser dp) { + int lineNumber = 0; + while (true) { + ArrayList doubleLine = dp.getNextLine(false, false, true); + if (numIndividuals == 0) + numIndividuals = dp.getNumIndividuals(); + if (doubleLine == null) + break; + + if (lineNumber++ % 100000 == 99999) + System.err.println("processed " + lineNumber + " lines"); + + filter(dp.getMarkerName(), doubleLine); + } + System.err.println("Number of markers = " + lineNumber + " of which " + data.size() + " pass filtering"); + System.err.println("Number of individuals = " + numIndividuals); + + names = new String[numIndividuals + 2]; + for (int i = 0; i < numIndividuals; ++i) + names[i + 2] = dp.getIndividualName(i); + } + + public boolean filter(String prefix, ArrayList posteriors) + { + if (numMissingGenotypes(posteriors) > missingLimit) + return false; + + int numInd = posteriors.size() / 10; + float p[][] = new float[numInd][10]; + for (int i = 0; i < numInd; ++i) + for (int j = 0; j < 10; ++j) + p[i][j] = posteriors.get(10 * i + j).floatValue(); + double afreq[] = new double[4]; + double freq[] = new double[10]; + em(p, freq, afreq); + + double gfreq[] = new double[10]; + em_10(p, gfreq); + + int max = 0; + for (int j = 1; j < 4; ++j) + if (afreq[j] > afreq[max]) + max = j; + int max2 = max ^ 1; + for (int j = 0; j < 4; ++j) + if (j != max) + if (afreq[j] > afreq[max2]) + max2 = j; + + int maxG = 0; + for (int j = 1; j < 10; ++j) + if (gfreq[j] > gfreq[maxG]) + maxG = j; + + if (afreq[max] <= 1.0 - mafLimit && gfreq[maxG] <= 1.0 - gLimit && afreq[max] + afreq[max2] >= 1 - biAllelicLimit) { + //lock.lock(); + //try { + data.add(p); + frequencies.add(freq); + //} finally { + // lock.unlock(); + //} + //frequencies.add(freq); + //System.err.println(prefix + "\t" + freq[max] ); + return true; + } + return false; + } + + private class FilterThread implements Runnable{ + String markers[] = null; + ArrayList doubleLines[] = null; + int index1 = 0; + int index2 = 0; + + public FilterThread(int index1, int index2, ArrayList doubleLines[], String markers[]) { + this.index1 = index1; + this.index2 = index2; + this.markers = markers; + this.doubleLines = doubleLines; + } + public void run() { + for (int i = index1; i < index2; ++i) + filter(markers[i], doubleLines[i]); + } + } + + private String s(double v) + { + int vi = (int)(1000 * v + 0.5); + if (vi == 0) + return "0"; + if (vi == 1000) + return "1"; + + return "" + (vi / 1000.0); + } + + public double em_10(float posteriors[][], double finalP[]) + { + double p[] = new double[]{0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1}; + double finalL = Double.NEGATIVE_INFINITY; + + for (int iteration = 0; iteration < 100; ++iteration) { + double q[] = new double[10]; + double logL = 0.0; + double ll = 1.0; + for (float post[] : posteriors) { + double l = 0.0; + for (int j = 0; j < 10; ++j) + l += (p[j] * post[j]); + double il = 1.0 / l; + for (int j = 0; j < 10; ++j) + q[j] += (p[j] * post[j] * il); + ll *= l; + if (ll < 1e-200) { // log when needed + logL += Math.log(ll); + ll = 1.0; + } + + } + logL += Math.log(ll); + + double sum = 0.0; + for (int j = 0; j < 10; ++j) + sum += q[j]; + double iSum = 1.0 / sum; + for (int j = 0; j < 10; ++j) + p[j] = q[j] * iSum; + //System.err.println("ll = " + ll); + double oldL = finalL; + finalL = logL; + if (finalL - oldL < LIKELIHOOD_TOLERANCE && iteration >= 10) + break; + + } + //System.err.println("p = " + p[0] + "," + s(p[1]) + "," + s(p[2]) + "," + s(p[3]) + "," + s(p[4]) + "," + s(p[5]) + "," + s(p[6]) + "," + s(p[7]) + "," + s(p[8]) + "," + s(p[9])); + for (int i = 0; i < 10; ++i) + finalP[i] = p[i]; + + return finalL; + } + + public double em(float posteriors[][], double finalP[], double aFreq[]) + { + double p[] = new double[]{0.25, 0.25, 0.25, 0.25}; + double p2[] = new double[]{0.25, 0.25, 0.25, 0.25}; + double finalL = Double.NEGATIVE_INFINITY; + + for (int iteration = 0; iteration < 100; ++iteration) { + double q[] = new double[4]; + double logL = 0.0; + double ll = 1.0; + for (float post[] : posteriors) { + double l = 0.0; + for (int a = 0; a < 4; ++a) + for (int b = 0; b < 4; ++b) + l += (p[a] * p[b] * post[mapAlleles(a, b)]); + + double iL = 1.0 / l; + + for (int a = 0; a < 4; ++a) + p2[a] = p[a] * iL; + + for (int a = 0; a < 4; ++a) + for (int b = 0; b < 4; ++b) + q[a] += (p2[a] * p[b] * post[mapAlleles(a, b)]); + + ll *= l; + if (ll < 1e-200) { // log when needed + logL += Math.log(ll); + ll = 1.0; + } + } + logL += Math.log(ll); + + double sum = 0.0; + for (int j = 0; j < 4; ++j) + sum += q[j]; + for (int j = 0; j < 4; ++j) + p[j] = q[j] / sum; + //System.err.println("ll = " + ll); + double oldL = finalL; + finalL = logL; + if (finalL - oldL < LIKELIHOOD_TOLERANCE && iteration >= 10) + break; + + } + + //System.err.println("p = " + p[0] + "," + s(p[1]) + "," + s(p[2]) + "," + s(p[3])); + + Arrays.fill(finalP, 0.0); + for (int a = 0; a < 4; ++a) + for (int b = 0; b < 4; ++b) + finalP[mapAlleles(a, b)] += p[a] * p[b]; + + for (int a = 0; a < 4; ++a) + aFreq[a] = p[a]; + + return finalL; + } + + public int numMissingGenotypes(ArrayList posteriors) { + ArrayList familyIndex = new ArrayList(); + for (int i = 0; i <= numIndividuals; ++i) + familyIndex.add(i); + return numMissingGenotypes(posteriors, familyIndex); + } + + public int numMissingGenotypes(ArrayList posteriors, ArrayList familyIndex) + { + int ret = 0; + for (int i = 0; i < familyIndex.size() - 2; ++i) { + int index = 10 * familyIndex.get(i); + + double sum = 0.0; + for (int j = 0; j < 10; ++j) + sum += posteriors.get(index + j); + + if (sum >= 1.0 + missingTolerance) + ++ret; + } + return ret; + } + + + private int mapAlleles(int a1, int a2) + { + if (a1 > a2) + return mapAlleles(a2, a1); // a1 <= a2 + if (a2 > 3) + Error.error(1005); + if (a1 == 0) + return a2; + if (a1 == 1) + return 3 + a2; + if (a1 == 2) + return 5 + a2; + if (a1 == 3) + return 9; + Error.error(1005); + return -1; + } + + private int allele1(int g) + { + if (g < 4) + return 0; + if (g < 7) + return 1; + if (g < 9) + return 2; + if (g == 9) + return 3; + Error.error(1005); + return -1; + } + + private int allele2(int g) + { + if (g < 4) + return g; + if (g < 7) + return g - 3; + if (g < 9) + return g - 5; + if (g == 9) + return 3; + Error.error(1005); + return -1; + } + + private int ibs(int g1, int g2){ + if (g1 == g2) + return 2; + + int g1a1 = allele1(g1); + int g1a2 = allele2(g1); + int g2a1 = allele1(g2); + int g2a2 = allele2(g2); + + if (g1a1 == g2a1 || g1a1 == g2a2 || g1a2 == g2a1 || g1a2 == g2a2) + return 1; + + return 0; + } + + private final int PRINT_SIZE = 10000; + + + private class PairwiseThread implements Runnable{ + private AtomicInteger index = null; + StringBuilder sb = null; + + public PairwiseThread(AtomicInteger index) { + this.index = index; + } + private void printResult() { + synchronized(System.out) { + System.out.print(sb.toString()); + } + sb.setLength(0); + } + + public void run() { + sb = new StringBuilder(); + for (int ind1 = index.getAndIncrement(); ind1 < numIndividuals; ind1 = index.getAndIncrement()) + for (int ind2 = ind1 + 1; ind2 < numIndividuals; ++ind2) { + sb.append(pairwise(ind1, ind2)); + sb.append('\n'); + if (sb.length() >= PRINT_SIZE) + printResult(); + + } + printResult(); + } + } + + + + public void pairwise() + { +/* String s[]={"AA","AC","AG","AT","CC","CG","CT","GG","GT","TT"}; + for (int g1 = 0; g1 < 10; ++g1) { + for (int g2 = 0; g2 < 10; ++g2) { + System.err.println(s[g1] + "\t" + s[g2] + "\t" + ibs(g1, g2)); + } + System.err.println(); + }*/ + PairwiseThread pairwiseThreads[] = new PairwiseThread[numThreads]; + Thread threads[] = new Thread[numThreads]; + AtomicInteger index = new AtomicInteger(); + for (int i = 0; i < numThreads; ++i) { + threads[i] = new Thread(new PairwiseThread(index)); + threads[i].start(); + } + for (int i = 0; i < numThreads; ++i) { + while (threads[i].isAlive()) + try { + threads[i].join(); + } catch (Exception e) { + e.printStackTrace(); + System.exit(-1); + } + } + } + + private boolean validTrio(int p1, int p2, int c) + { + int p11 = allele1(p1); + int p12 = allele2(p1); + int p21 = allele1(p2); + int p22 = allele2(p2); + return (c == mapAlleles(p11, p21) || c == mapAlleles(p11, p22) || c == mapAlleles(p12, p21) || c == mapAlleles(p12, p22)); + } + private boolean validDuo(int p1, int c) + { + int p11 = allele1(p1); + int p12 = allele2(p1); + int c1 = allele1(c); + int c2 = allele2(c); + return (c1 == p11 || c2 == p11 || c1 == p12 || c2 == p12); + } + + private class ParentCheckThread implements Runnable{ + int ind1, ind2; + StringBuilder ret = new StringBuilder(); + + public String getOutput(){ + return ret.toString(); + } + public ParentCheckThread(int ind1, int ind2) { + this.ind1 = ind1; + this.ind2 = ind2; + } + public void run() { + int numMarkers = data.size(); + if (ind2 < 0) { // check single parent case + String prefix = names[ind1 + 2] + "\tNA\t"; + for (int ci = 0; ci < numChildren; ++ci) { + int child = childIndex[ci]; + double err = 0.0; + double n[] = new double[2]; + double p[] = new double[2]; + for (int m = 0; m < numMarkers; ++m) { + Arrays.fill(p, 0.0); + float posterior[][] = data.get(m); + + for (int g1 = 0; g1 < 10; ++g1) + if (posterior[ind1][g1] > 1e-10) + for (int g2 = 0; g2 < 10; ++g2) + if (posterior[child][g2] > 1e-10) { + int vIndex = validDuo(g1, g2) ? 0 : 1; + p[vIndex] = Math.max(p[vIndex], posterior[ind1][g1] * posterior[child][g2]); + } + if (p[0] > p[1]) { + n[0] += (p[0] - p[1]); + err += (p[0] - p[1]) * p[1] / (p[0] + p[1]); + } + else { + n[1] += (p[1] - p[0]); + err += (p[1] - p[0]) * p[0] / (p[0] + p[1]); + } + } + ret.append(prefix + names[child + 2] + '\t' + (Math.max(0, n[1] - err) / (n[0] + n[1] - err)) + '\t' + n[1] + '\t' + n[0] + '\t' + err + '\n'); + } + + } else { // two parents... + String prefix = names[ind2 + 2] + "\t" + names[ind1 + 2] + "\t"; + + for (int ci = 0; ci < numChildren; ++ci) { + int child = childIndex[ci]; + double n[] = new double[2]; + double p[] = new double[2]; + double err = 0.0; + for (int m = 0; m < numMarkers; ++m) { + Arrays.fill(p, 0.0); + float posterior[][] = data.get(m); + + for (int g1 = 0; g1 < 10; ++g1) + if (posterior[ind1][g1] > 1e-10) + for (int g2 = 0; g2 < 10; ++g2) + if (posterior[ind2][g2] > 1e-10) { + double p12 = posterior[ind1][g1] * posterior[ind2][g2]; + for (int g3 = 0; g3 < 10; ++g3) + if (posterior[child][g3] > 1e-10) { + int vindex = validTrio(g1, g2, g3) ? 0 : 1; + p[vindex] = Math.max(p[vindex], p12 * posterior[child][g3]); + } + } + if (p[0] > p[1]) { + n[0] += (p[0] - p[1]); + err += (p[0] - p[1]) * p[1] / (p[0] + p[1]); + } + else { + n[1] += (p[1] - p[0]); + err += (p[1] - p[0]) * p[0] / (p[0] + p[1]); + } + } + ret.append(prefix + names[child + 2] + '\t' + (Math.max(0, n[1] - err) / (n[0] + n[1] - err)) + '\t' + n[1] + '\t' + n[0] + '\t' + err + '\n'); + } + } + } + } + int numChildren = 0; + int numParents = 0; + int parentIndex[] = null; + int childIndex[] = null; + + public void checkParents(ArrayList parents, boolean allpairs) + { + + boolean isParent[] = new boolean[names.length]; + HashMap hm = new HashMap(); + + int index = -2; + for (String name : names) { + if (index >= 0) + hm.put(name, index); + ++index; + } + for (String parent : parents) { + if (!hm.containsKey(parent)) + System.err.println("Warning: parent " + parent + " is missing"); + else + isParent[hm.get(parent)] = true; + } + parentIndex = new int[numIndividuals]; + childIndex = new int[numIndividuals]; + for (int i = 0; i < numIndividuals; ++i) { + if (isParent[i]) + parentIndex[numParents++] = i; + if (!isParent[i] || allpairs) + childIndex[numChildren++] = i; + } + + int activeThreads = 0; + Thread threads[] = new Thread[numThreads]; + ParentCheckThread pthreads[] = new ParentCheckThread[numThreads]; + activeThreads = 0; + for (int pi1i = -1; pi1i < numParents; ++pi1i) { + int pi1 = (pi1i < 0) ? pi1i: parentIndex[pi1i]; + for (int pi2i = pi1i + 1; pi2i < numParents; ++pi2i) { + int pi2 = parentIndex[pi2i]; + if (activeThreads < numThreads) { + pthreads[activeThreads] = new ParentCheckThread(pi2, pi1); + (threads[activeThreads] = new Thread(pthreads[activeThreads])).start(); + ++activeThreads; + } + if (activeThreads == numThreads || pi1i == numParents - 2) { + for (int i = 0; i < activeThreads; ++i) { + if (threads[i].isAlive()) + try { + threads[i].join(); + } catch (Exception e) { + e.printStackTrace(); + System.exit(-1); + } + System.out.print(pthreads[i].getOutput()); + } + activeThreads = 0; + } + } + } + } + + public String pairwise(int ind1, int ind2) + { + int numMarkers = data.size(); + + double p[] = new double[3]; + for (int j = 0; j <= 2; ++j) + p[j] = 1.0 / 3.0; + double oldL = -1e100; + + for (int iteration = 0; iteration < 100; ++iteration) { + double logL = 0.0; + double q[] = new double[3]; + double dibs[] = new double[3]; + double pibs[] = new double[3]; + + double ll = 1.0; + for (int m = 0; m < numMarkers; ++m) { + Arrays.fill(dibs, 0.0); + Arrays.fill(pibs, 0.0); + + float posterior[][] = data.get(m); + double freq[] = frequencies.get(m); + + for (int g1 = 0; g1 < 10; ++g1) + for (int g2 = 0; g2 < 10; ++g2) { + int ibs = ibs(g1, g2); + //System.err.println(ibs); + dibs[ibs] = Math.max(dibs[ibs], posterior[ind1][g1] * posterior[ind2][g2]); + pibs[ibs] += freq[g1] * freq[g2]; + } + //for (int a = 0; a <= 2; ++a) + // System.err.println(pibs[a] + " vs " + dibs[a]); + //System.err.println("*"); + + double c2 = dibs[2]; + double c1 = (pibs[2] * dibs[2] + pibs[1] * dibs[1]) / (1 - pibs[0]); + double c0 = pibs[2] * dibs[2] + pibs[1] * dibs[1] + pibs[0] * dibs[0]; + + double c[] = {c0, c1, c2}; + double l = 0.0; + for (int j = 0; j <= 2; ++j) + l += p[j] * c[j]; + double iL = 1.0 / l; + + for (int j = 0; j <= 2; ++j) + q[j] += p[j] * c[j] * iL; + ll *= l; + if (ll < 1e-200) { // log when needed + logL += Math.log(ll); + ll = 1.0; + } + } + logL += Math.log(ll); + double sum = 0.0; + for (int j = 0; j <= 2; ++j) + sum += q[j]; + + double iSum = 1.0 / sum; + for (int j = 0; j <= 2; ++j) + p[j] = q[j] * iSum; + + //System.err.println("logL =" + ll); + if (logL - oldL < LIKELIHOOD_TOLERANCE2) + break; + oldL = logL; + } + //System.err.println("**"); + return names[ind1 + 2] + "\t" + names[ind2 + 2]+ "\t" + s(p[2] + 0.5 * p[1]) + "\t" + s(p[0]) + "\t" + s(p[1]) + "\t" + s(p[2]); + + } + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(2001); + String extraParameters = ""; + System.out.print("#java IBD"); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(2001); + pp.warning(new String[]{"data", "posteriorFile", "vcfFile", "MAFLimit", "missingLimit", "genotypeLimit", "numThreads", "parents", "allParentChildPairs"}); + + String filename = pp.getValueAsString("data", null); + DataParser dp = new DataParser(); + if (filename == null) { + //only vcf or posterior input? + String pfn = pp.getValueAsString("posteriorFile", null); + String vfn = pp.getValueAsString("vcfFile", null); + if (pfn != null || vfn != null) { + dp.loadFile(null, vfn, pfn); + } + else + Error.error(2001); + } else + dp.loadFile(filename, pp.getValueAsString("posteriorFile", null), pp.getValueAsString("vcfFile", null)); + + IBD ibd = new IBD(); + + ibd.setMAFLimit(Double.parseDouble(pp.getValueAsString("MAFLimit", "0.05"))); + ibd.setGLimit(Double.parseDouble(pp.getValueAsString("genotypeLimit", "0.1"))); + + ibd.setMissingLimit(Double.parseDouble(pp.getValueAsString("missingLimit", 0, "" + Double.MAX_VALUE))); + ibd.setMissingTolerance(Double.parseDouble(pp.getValueAsString("missingLimit", 1, "0.1"))); + + ibd.setNumThreads(Integer.parseInt(pp.getValueAsString("numThreads", "4"))); + + String ba = pp.getValueAsString("biAllelicLimit", null); + if (ba != null) + ibd.setBiAllelic(Double.parseDouble(ba)); + + System.err.println("filtering markers..."); + ibd.filter(dp); + + if (!pp.getValueAsString("onlyFilter", "0").equals("1")) + if (pp.getNumberOfValues("parents") > 0) { + ArrayList parents = new ArrayList(); + parents = pp.getValuesAsList("parents"); + //int n = parents.size(); + System.err.println("Starting computations to check parenthood..."); + //for (int p1 = 0; p1 < n ; ++p1) + // ibd.checkParent(parents.get(p1)); + + //for (int p1 = 0; p1 < n ; ++p1) + // for (int p2 = p1 + 1; p2 < n; ++p2) + // ibd.checkParents(parents.get(p1), parents.get(p2)); + ibd.checkParents(parents, pp.getValueAsString("allParentChildPairs", "0").equals("1")); + } else { + System.err.println("Starting pairwise computations..."); + ibd.pairwise(); + } + } +} diff --git a/software/LepMap3/lm3/src/Input.java b/software/LepMap3/lm3/src/Input.java new file mode 100644 index 0000000..226f444 --- /dev/null +++ b/software/LepMap3/lm3/src/Input.java @@ -0,0 +1,167 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki +*/ +//Reads files to ArrayLists of Strings +import java.io.*; +import java.util.*; + +public class Input { + private Input() { }; + + public static ArrayList loadTableRow(BufferedReader br, String delim) throws Exception + { + String s = ""; + do { + s = br.readLine(); + //System.err.println(s); + if (s != null) { + int index = s.indexOf('#'); + if (index >= 0) { + s = s.substring(0, index); + } + } + } while ( s != null && (s.length() == 0) ); + if (s == null) + return null; + + StringTokenizer st = new StringTokenizer(s, delim, false); + ArrayList row = new ArrayList(); + while (st.hasMoreTokens()) { + String nt = st.nextToken(); + row.add(nt); + } + //String sa[] = s.split(delim); + //ArrayList row = new ArrayList(); + //for (String tmp : sa) + // row.add(tmp); + return row; + } + + public static ArrayList> loadTable(BufferedReader br, String delim) throws Exception { + ArrayList> ret = new ArrayList>(); + //ArrayList comments = new ArrayList(); + while (true) { + ArrayList row = loadTableRow(br, delim); + if (row == null) + break; + else + ret.add(row); + } + return ret; + } + + public static ArrayList> loadTable(BufferedReader br, String delim, String returnDelim) throws Exception { + ArrayList> ret = new ArrayList>(); + + //ArrayList comments = new ArrayList(); + while (true) { + String s = ""; + do { + s = br.readLine(); + if (s != null) { + int index = s.indexOf('#'); + if (index >= 0) { + //comments.add(s.substring(index)); + s = s.substring(0, index); + } + } + } while ( s != null && (s.length() == 0 || !new StringTokenizer(s, delim).hasMoreTokens()) ); + if (s == null) + break; + StringTokenizer st = new StringTokenizer(s, delim, true); + ArrayList row = new ArrayList(); + while (st.hasMoreTokens()) { + String nt = st.nextToken(); + if (delim.indexOf(nt) >= 0) { + if (returnDelim.indexOf(nt) >= 0) + row.add(nt); + } else + row.add(nt); + } + ret.add(row); + } + return ret; + } + + public static ArrayList> loadTable(String filename, String delim, String returnDelim) { + try { + BufferedReader br = new BufferedReader(new FileReader(filename)); + ArrayList> t = loadTable(br, delim, returnDelim); + br.close(); + return t; + + } catch (Exception e) { + //System.err.print(e); + return null; + } + } + + + public static ArrayList> loadTable(String filename, String delim) { + try { + BufferedReader br = new BufferedReader(new FileReader(filename)); + ArrayList> t = loadTable(br, delim); + br.close(); + return t; + + } catch (Exception e) { + //System.err.print(e); + return null; + } + } + + public static int[][] loadIntTable(String filename, String delim) { + + ArrayList ret = new ArrayList(); + try { + BufferedReader br = new BufferedReader(new FileReader(filename)); + while (true) { + ArrayList t = loadTableRow(br, delim); + if (t == null) + break; + else { + int it[] = new int[t.size()]; + int i = 0; + for (String s : t) + it[i++] = Integer.parseInt(s); + ret.add(it); + } + + } + br.close(); + return ret.toArray(new int[ret.size()][]); + + } catch (Exception e) { + //System.err.print(e); + return null; + } + } + + public static void main(String args[]) + { + ArrayList> test = Input.loadTable("/home/prastas/workspace/PedSimulator/recombinationMap/pedigree.txt", " \t"); + for (ArrayList row : test) { + for (String item : row) + System.err.print(item + " "); + System.err.println(); + } + + + } + +} diff --git a/software/LepMap3/lm3/src/JoinIdenticalLGs.java b/software/LepMap3/lm3/src/JoinIdenticalLGs.java new file mode 100644 index 0000000..2f64137 --- /dev/null +++ b/software/LepMap3/lm3/src/JoinIdenticalLGs.java @@ -0,0 +1,83 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge +*/ +// Joins singular markers to LGs +import java.util.ArrayList; +//Errorcodes 7xx +public class JoinIdenticalLGs { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(601); + String extraParameters = ""; + System.out.print("#java JoinLGs "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(601); + pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "alleleLimit", "lod3Mode", "map"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + + int numDataFiles = pp.getNumberOfValues("data"); + if (numDataFiles == 0) + Error.error(4402); + for (int i = 0; i < numDataFiles; ++i) { + String filename = pp.getValueAsString("data", i, null); + if (filename == null) + Error.error(4403); + sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); + } + + double lodLimit[]; + int nv = pp.getNumberOfValues("lodLimit"); + if (nv >= 1) { + lodLimit = new double[nv]; + for (int i = 0; i < nv; ++i) + lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); + } else + lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; + + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + LGMap2 map = new LGMap2(); + if (!map.loadLGMap(pp.getValueAsString("map", null))) + Error.error(4406); + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + sc.joinLGs(lodLimit, map, Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + + //sc.SeparateChromosomes(lodLimit); + //map.renameLGs(); + //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); + //map.printLGAssignment(sc.getNumMarkers()); + + } + +} diff --git a/software/LepMap3/lm3/src/JoinSingles2All.java b/software/LepMap3/lm3/src/JoinSingles2All.java new file mode 100644 index 0000000..694e697 --- /dev/null +++ b/software/LepMap3/lm3/src/JoinSingles2All.java @@ -0,0 +1,99 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +// Joins singular markers to LGs +import java.util.ArrayList; +//Errorcodes 7xx +public class JoinSingles2All { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(701); + String extraParameters = ""; + System.out.print("#java JoinSingles2 "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(701); + + pp.warning(new String[]{"minLod","map", "data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "lodDifference", "lod3Mode", "betweenSameType", "numThreads", "distortionLod", "iterate", "maxDistance", "mask"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.03")); + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + sc.setMinLod(Double.parseDouble(pp.getValueAsString("minLod", "" + Double.NEGATIVE_INFINITY))); + + + int numDataFiles = pp.getNumberOfValues("data"); + if (numDataFiles == 0) + Error.error(1402); + for (int i = 0; i < numDataFiles; ++i) { + String filename = pp.getValueAsString("data", i, null); + if (filename == null) + Error.error(1403); + sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); + } + + double lodLimit[]; + int nv = pp.getNumberOfValues("lodLimit"); + if (nv >= 1) { + lodLimit = new double[nv]; + for (int i = 0; i < nv; ++i) + lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); + } else + lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; + + LGMap2 map = new LGMap2(); + if (!map.loadLGMap(pp.getValueAsString("map", null))) + Error.error(4406); + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + if (pp.getValueAsString("distortionLod", "0").equals("1")) + sc.setDistortionLodMode(); + + String maskFile = pp.getValueAsString("mask", null); + if (maskFile != null) { + LGMap2 mask = new LGMap2(); + if (!mask.loadLGMap(maskFile)) + Error.error(302); + sc.maskLG(mask, 1); + } + + sc.joinSingles(lodLimit, Double.parseDouble(pp.getValueAsString("lodDifference", "0.0")), map, pp.getValueAsString("betweenSameType", "0").equals("1"), pp.getValueAsString("iterate", "0").equals("1"), Integer.parseInt(pp.getValueAsString("numThreads", "1")), Integer.parseInt(pp.getValueAsString("maxDistance", "" + Integer.MAX_VALUE))); + + //sc.SeparateChromosomes(lodLimit); + //map.renameLGs(); + //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); + //map.printLGAssignment(sc.getNumMarkers()); + + } + +} diff --git a/software/LepMap3/lm3/src/JoinSingles2Identicals.java b/software/LepMap3/lm3/src/JoinSingles2Identicals.java new file mode 100644 index 0000000..e633243 --- /dev/null +++ b/software/LepMap3/lm3/src/JoinSingles2Identicals.java @@ -0,0 +1,86 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +// Joins singular markers to LGs +import java.util.ArrayList; +//Errorcodes 7xx +public class JoinSingles2Identicals { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(701); + String extraParameters = ""; + System.out.print("#java JoinSingles2 "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(701); + + pp.warning(new String[]{"map", "data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "alleleLimit", "lodDifference", "lod3Mode", "betweenSameType", "numThreads"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + + int numDataFiles = pp.getNumberOfValues("data"); + if (numDataFiles == 0) + Error.error(4402); + for (int i = 0; i < numDataFiles; ++i) { + String filename = pp.getValueAsString("data", i, null); + if (filename == null) + Error.error(4403); + sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); + } + + double lodLimit[]; + int nv = pp.getNumberOfValues("lodLimit"); + if (nv >= 1) { + lodLimit = new double[nv]; + for (int i = 0; i < nv; ++i) + lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); + } else + lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; + + LGMap2 map = new LGMap2(); + if (!map.loadLGMap(pp.getValueAsString("map", null))) + Error.error(4406); + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + sc.joinSingles2Identicals(lodLimit, Double.parseDouble(pp.getValueAsString("lodDifference", "0.0")), map, pp.getValueAsString("betweenSameType", "0").equals("1"), Integer.parseInt(pp.getValueAsString("numThreads", "1"))); + + //sc.SeparateChromosomes(lodLimit); + //map.renameLGs(); + //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); + //map.printLGAssignment(sc.getNumMarkers()); + + } + +} diff --git a/software/LepMap3/lm3/src/LGMap2.java b/software/LepMap3/lm3/src/LGMap2.java new file mode 100644 index 0000000..7e80ef0 --- /dev/null +++ b/software/LepMap3/lm3/src/LGMap2.java @@ -0,0 +1,204 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +// Stores a linkage map +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +public class LGMap2 { + private ArrayList lGNames = new ArrayList(); + + LGMap2() + { + lGNames.clear(); + + } + LGMap2(int numMarkers) + { + lGNames.clear(); + for (int i = 0; i < numMarkers; ++i) + lGNames.add(0); + } + + public int getNumLGs() + { + int numLGs = 0; + for (int cn : lGNames) + numLGs = Math.max(numLGs, cn); + return numLGs; + } + + + private class intArrayComparator implements Comparator{ + public int compare(int a1[], int a2[]) + { + int r = 0; + for (int i = 0; r == 0 && i < Math.min(a1.length, a2.length); ++i) + r = new Integer(a1[i]).compareTo(a2[i]); + return r; + } + + } + + public void renameLGs() + { + int sizes[] = new int[getNumLGs() + 1]; + for (int m = 0; m < getNumMarkers(); ++m) { + int name = lGNames.get(m); + if (name > 0) + ++sizes[name]; + } + ArrayList al = new ArrayList(); + for (int m = 0; m < getNumMarkers(); ++m) { + int name = lGNames.get(m); + if (name > 0 && sizes[name] > 0) { + al.add(new int[]{-sizes[name], name}); + sizes[name] = 0; + } + } + Collections.sort(al, new intArrayComparator()); + int names[] = new int[getNumLGs() + 1]; + int j = 0; + for (int sn[] : al) + names[sn[1]] = ++j; + + for (int m = 0; m < getNumMarkers(); ++m) { + int name = lGNames.get(m); + if (name > 0) + lGNames.set(m, names[name]); + } + + } + // returns markers of each LG + public ArrayList> getMarkersOfLGs(int numMarkers) + { + if (numMarkers != getNumMarkers()) { + System.err.println("Warning: The map has different number of markers as the data, "); + System.err.println(numMarkers + " and " + getNumMarkers()); + } + //renameLGs(); + ArrayList> ret = new ArrayList>(); + int numLGs = getNumLGs(); + for (int i = 0; i <= numLGs; ++i) + ret.add(new ArrayList()); + for (int m = 0; m < numMarkers; ++m) { + int name = lGNames.get(m); + ret.get(name).add(m); + } + return ret; + } + + public int getLGName(int marker) + { + return lGNames.get(marker); + } + public void setLGName(int marker, int name) + { + lGNames.set(marker, name); + } + public ArrayList getLGNames() + { + return lGNames; + } + public int getNumMarkers() + { + return lGNames.size(); + } + +/* public void printLGAssignment(Data d) + { + int singles = 0; + int numChr = 0; + int numMarkers = d.getNumMarkers(); + int names[] = new int[numMarkers]; + + for (int m = 0; m < numMarkers; ++m) { + String chrType = ""; + int name = lGNames.get(m); + if (d.getMarkerType(m) == Family.Z_CHR && name != 0) + chrType = "\tZ"; + System.out.println(name + chrType); + if (name == 0) + ++singles; + else + if (names[name] == 0) + names[name] = ++numChr; + } + System.err.println("Number of LGs = " + numChr + ", markers in LGs = " + (numMarkers - singles) + ", singles = " + singles); + }*/ + public void printLGAssignment(int numMarkers) + { + int singles = 0; + int numChr = 0; + int names[] = new int[numMarkers]; + + StringBuilder sb = new StringBuilder(); + for (int m = 0; m < numMarkers; ++m) { + int name = lGNames.get(m); + //System.out.println(name); + sb.append(name); + sb.append('\n'); + if (sb.length() > 10000 || (m == numMarkers - 1)) { + System.out.print(sb); + sb.setLength(0); + } + + if (name == 0) + ++singles; + else + if (names[name] == 0) + names[name] = ++numChr; + } + System.err.println("Number of LGs = " + numChr + ", markers in LGs = " + (numMarkers - singles) + ", singles = " + singles); + } + + + + public void removeSmallLGs(int sizeLimit) + { + int numNames = getNumLGs(); + int sizes[] = new int[numNames + 1]; + int numMarkers = getNumMarkers(); + for (int i = 0; i < numMarkers; ++i) + ++sizes[lGNames.get(i)]; + for (int i = 0; i < numMarkers; ++i) + if (sizes[lGNames.get(i)] < sizeLimit) + lGNames.set(i, 0); + for (int i = 1; i <= numNames; ++i) + if (sizes[i] > 0 && sizes[i] < sizeLimit) + System.err.println("Removing LG " + i + " (as too small) with size " + sizes[i] ); + } + public boolean loadLGMap(String filename) + { + ArrayList> table = Input.loadTable(filename, " \t"); + if (table == null) + return false; + + lGNames.clear(); + + for (ArrayList line : table) { + //if (line.size() != 1 && line.size() != 2) + // Error2.error(104); + lGNames.add(Integer.parseInt(line.get(0))); + } + return true; + } + +} diff --git a/software/LepMap3/lm3/src/LMPlot.java b/software/LepMap3/lm3/src/LMPlot.java new file mode 100644 index 0000000..6c99fd5 --- /dev/null +++ b/software/LepMap3/lm3/src/LMPlot.java @@ -0,0 +1,377 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2017 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki + +*/ + + +import java.util.*; +import java.io.*; +//TODO: Add support for missing phased haplotypes (-) +public class LMPlot{ + + private int numNodes; + private ArrayList nodeNames = new ArrayList(); + private ArrayList nodeWeights = new ArrayList(); + private ArrayList prints = new ArrayList(); + + UnionFind uf = null; + int cname[] = null; + int size[] = null; + int numComponents = 0; + int familySize[]; + + boolean selfingPhase = false; + boolean outputAll = false; + + HashMap hm = new HashMap(); + + public LMPlot() { + } + + private int addNode(String name, long segPrint[][][], int weight) + { + if (!hm.containsKey(name)) { + hm.put(name, numNodes); + nodeNames.add(name); + nodeWeights.add(weight); + prints.add(segPrint); + return numNodes++; + } else + return hm.get(name); + } + + + public void connectedComponenets() { + cname = new int[numNodes]; + size = new int[numNodes]; + numComponents = 0; + for (int n = 0; n < numNodes; ++n) { + int c = uf.find(n); + if (cname[c] == 0) + cname[c] = ++numComponents; + ++size[cname[c]]; + } + System.out.println("#Connected components = " + numComponents); + } + + private long[][] string2BitPrints(String s) + { + int n = s.length(); + long ret[][] = new long[2][(n+63) / 64]; + + int index = 0; + long bitIndex = 1; + + for (int i = 0; i < n; ++i) { + char c = s.charAt(i); + if (c == '0' || c == '1') { + ret[1][index] |= bitIndex; + if (c == '1') + ret[0][index] |= bitIndex; + } + + bitIndex *= 2; + if (bitIndex == 0) { + bitIndex = 1; + ++index; + } + } + return ret; + } + + //mask out if both p1 and p2 are heterozygote + private int[] hammingDistance3(long p1[][][], long p2[][][]) + { + int ret[] = new int[3]; + // store different individual... + int difFam = -1; + for (int f = 0; f < p1.length; ++f) { + int n = p1[f][0].length; + int d1 = 0; + int d2 = 0; + for (int i = 0; i < n; ++i) { + long mask1 = (p1[f][0][i] ^ p1[f ^ 1][0][i]); // 1 if heterozygote + long mask2 = (p2[f][0][i] ^ p2[f ^ 1][0][i]); // 1 if heterozygote + long mask12 = ~(mask1 & mask2); // 0 if both heterozygote + + long mask = p1[f][1][i] & p2[f][1][i] & mask12; + long b1 = (p1[f][0][i] ^ p2[f][0][i]) & mask; + d1 += Long.bitCount(b1); + d2 += Long.bitCount(b1 ^ mask); + } + if (d1 == 1 || d2 == 1) + difFam = f; + if (d1 >= d2) { + ret[0] += d2; + ret[1] += d1; + } else { + ret[0] += d1; + ret[1] += d2; + } + } + + if (ret[0] == 1) { + int n = p1[difFam][0].length; + for (int i = 0; i < n; ++i) { + long mask = p1[difFam][1][i] & p2[difFam][1][i]; + long b1 = (p1[difFam][0][i] ^ p2[difFam][0][i]) & mask; + int d1 = Long.bitCount(b1); + int d2 = Long.bitCount(b1 ^ mask); + if (d1 == 1 || d2 == 1) { + if (d2 == 1) + b1 = b1 ^ mask; + + ret[2] = familySize[difFam/2] + i * 64 + Long.numberOfTrailingZeros(b1) + 1; + return ret; + } + } + + } + return ret; + } + + private int[] hammingDistance(long p1[][][], long p2[][][]) + { + if (selfingPhase) + return hammingDistance3(p1, p2); + int ret[] = new int[3]; + // store different individual... + int difFam = -1; + for (int f = 0; f < p1.length; ++f) { + int n = p1[f][0].length; + int d1 = 0; + int d2 = 0; + for (int i = 0; i < n; ++i) { + long mask = p1[f][1][i] & p2[f][1][i]; + long b1 = (p1[f][0][i] ^ p2[f][0][i]) & mask; + d1 += Long.bitCount(b1); + d2 += Long.bitCount(b1 ^ mask); + } + if (d1 == 1 || d2 == 1) + difFam = f; + if (d1 >= d2) { + ret[0] += d2; + ret[1] += d1; + } else { + ret[0] += d1; + ret[1] += d2; + } + } + + if (ret[0] == 1) { + int n = p1[difFam][0].length; + for (int i = 0; i < n; ++i) { + long mask = p1[difFam][1][i] & p2[difFam][1][i]; + long b1 = (p1[difFam][0][i] ^ p2[difFam][0][i]) & mask; + int d1 = Long.bitCount(b1); + int d2 = Long.bitCount(b1 ^ mask); + if (d1 == 1 || d2 == 1) { + if (d2 == 1) + b1 = b1 ^ mask; + + ret[2] = familySize[difFam/2] + i * 64 + Long.numberOfTrailingZeros(b1) + 1; + return ret; + } + } + + } + + return ret; + } + + public String normalize(String s){ + return ""; + } + + public boolean loadPrints(String fn, int limit2) + { + HashMap printMap = new HashMap(); + int numPrints = 0; + + try { + BufferedReader br = null; + if (fn.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(fn)); + String line = null; + do { + line = br.readLine(); + if (line == null) + break; + if (line.charAt(0) != '#') { + String[] row = line.split("\t"); + StringBuilder sb = new StringBuilder(); + for (int i = 4; i < row.length; ++i) + sb.append(row[i].substring(0, row[i].indexOf(" "))); + String str = sb.toString(); + + if (!printMap.containsKey(str)) { + printMap.put(str, numPrints++); + long ps[][][] = new long[(row.length - 4) * 2][][]; + if (familySize == null) { + familySize = new int[row.length - 4 + 1]; + for (int i = 4; i < row.length; ++i) + familySize[i - 3] = familySize[i - 4] + row[i].substring(0, row[i].indexOf(" ")).length() / 2; + } + for (int i = 4; i < row.length; ++i) { + String str12 = row[i].substring(0, row[i].indexOf(" ")); + int mid = str12.length() / 2; + ps[(i-4) * 2] = string2BitPrints(str12.substring(0, mid)); + ps[(i-4) * 2 + 1] = string2BitPrints(str12.substring(mid)); + } + addNode("" + numPrints, ps, 1); + } else { + int n = printMap.get(str); + nodeWeights.set(n, nodeWeights.get(n) + 1); + } + } + } while (true); + System.err.println("#nodes=" + numNodes); + + br.close(); + + if (outputAll) + for (int n1 = 0; n1 < numNodes; ++n1) + for (int n2 = n1 + 1; n2 < numNodes; ++n2) { + int d[] = hammingDistance(prints.get(n1), prints.get(n2)); + System.err.println((n1 + 1) + "\t" + (n2 + 1) + "\t" + d[0] + "\t" + d[1]); + } + + + uf = new UnionFind(numNodes); + + System.err.println("Computing pair-wise distances"); + System.out.println("graph g {"); + System.out.println("node [fontsize=40,penwidth=4]"); + System.out.println("edge [penwidth=3]"); + + for (int n1 = 0; n1 < numNodes; ++n1) { + double area = Math.sqrt(nodeWeights.get(n1)) / 30.0; + System.out.println(nodeNames.get(n1) + "[width=" + area + ",height=" + area + ",fixedsize=true]"); + } + boolean dir = Math.random() < 0.5; + + int minDist[] = new int[numNodes]; + int union[] = new int[numNodes]; + while (true) { + boolean allDone = true; + Arrays.fill(minDist, Integer.MAX_VALUE); + //calculate minDist + for (int n1 = 0; n1 < numNodes; ++n1) { + int u1 = uf.find(n1); + for (int n2 = n1 + 1; n2 < numNodes; ++n2) { + int u2 = uf.find(n2); + if (u1 != u2) { + int d[] = hammingDistance(prints.get(n1), prints.get(n2)); + if (d[1] >= limit2) { + allDone = false; + minDist[u1] = Math.min(minDist[u1], d[0]); + minDist[u2] = Math.min(minDist[u2], d[0]); + } + } + } + } + if (allDone) + break; + + for (int n1 = 0; n1 < numNodes; ++n1) { + int u = uf.find(n1); + union[n1] = u; + } + + for (int n1 = 0; n1 < numNodes; ++n1) { + int u1 = union[n1]; + int md1 = minDist[u1]; + for (int n2 = n1 + 1; n2 < numNodes; ++n2) { + int u2 = union[n2]; + if (u1 != u2) { + int d[] = hammingDistance(prints.get(n1), prints.get(n2)); + if (d[1] >= limit2 && (d[0] <= md1 || d[0] <= minDist[u2])) { + uf.union(u1, u2); + + if (Math.random() < 0.1) + dir = !dir; + + String color = ""; + try { + int name1 = Integer.parseInt(nodeNames.get(n1)); + int name2 = Integer.parseInt(nodeNames.get(n2)); + if (Math.abs(name1 - name2) > 1) + color = "color=red"; + } catch (Exception e) + { + } + int limit = d[0]; + if (limit == 0) // add edge for distance 0 as well... + ++limit; + if (dir) + for (int i = 0; i < limit; ++i) + System.out.println(nodeNames.get(n1) + "--" + nodeNames.get(n2) + "[" + ((d[0] == 1) ? "label=" + d[2] + "": "") + color + "]"); + else + for (int i = 0; i < limit; ++i) + System.out.println(nodeNames.get(n2) + "--" + nodeNames.get(n1) + "[" + ((d[0] == 1) ? "label=" + d[2] + "": "") + color + "]"); + } + } + } + } + } + System.out.println("}"); + return true; + } catch (Exception e) { + e.printStackTrace(); + System.err.println("Error"); + return false; + } + } + + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(1201); + + String extraParameters = ""; + System.out.print("#java LMPlot " + args[0]); + for (int i = 1; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(801); + pp.warning(new String[]{"limit2", "selfingPhase", "outputAllDistances"}); + + + LMPlot sp = new LMPlot(); + sp.setOutputAll(pp.getValueAsString("outputAllDistances", "0").equals("1")); + sp.setSelfingPhase(pp.getValueAsString("selfingPhase", "0").equals("1")); + sp.loadPrints(args[0], Integer.parseInt(pp.getValueAsString("limit2", "1"))); + //sp.printDot(); + } + + private void setOutputAll(boolean value) { + outputAll = value; + } + + private void setSelfingPhase(boolean value) { + selfingPhase = value; + } +} diff --git a/software/LepMap3/lm3/src/MarkerList.java b/software/LepMap3/lm3/src/MarkerList.java new file mode 100644 index 0000000..0d793e0 --- /dev/null +++ b/software/LepMap3/lm3/src/MarkerList.java @@ -0,0 +1,160 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki +*/ +// Stores a list of markers +import java.util.ArrayList; +public class MarkerList { + + private UnionFind uf = null; + private ArrayList> markers=new ArrayList>(); + + public MarkerList(int numMarkers) + { + uf = new UnionFind(numMarkers); + for (int i = 0; i < numMarkers; ++i) { + ArrayList al = new ArrayList(); + al.add(i); + markers.add(al); + } + + } + // This could be made more efficient by using (modified) double linked lists + // However, this is probably as efficient as is needed + public int union(int m1, int m2) + { + int c1 = uf.find(m1); + int c2 = uf.find(m2); + if (c1 == c2) + return c1; + int c = uf.union(c1, c2); + if (c == c1) { + markers.get(c1).addAll(markers.get(c2)); + markers.set(c2, null); + } + else { + markers.get(c2).addAll(markers.get(c1)); + markers.set(c1, null); + } + return c; + } + + public int unionBetween(int m1, int m2, int markerToAdd) + { + int c1 = uf.find(m1); + int c2 = uf.find(m2); + if (c1 == c2) { + int c = uf.union(c1, markerToAdd); + for (int i = 0; i < markers.get(c2).size(); ++i) { + int m = markers.get(c2).get(i); + if (m == m1 || m == m2) { + markers.get(c2).add(i, markerToAdd); + return c; + } + } + Error.error(504); + } else + Error.error(503); + return 0; + } + + public int getFirstMarker(int c) + { + return markers.get(c).get(0); + } + public int getLastMarker(int c) + { + return markers.get(c).get(markers.get(c).size() - 1); + } + public int numMarkers(int c) + { + return markers.get(c).size(); + } + + + // This could be made more efficient by using (modified) double linked lists + // However, this is probably as efficient as is needed + public ArrayList unionMarkersWithOrder(int m1, int m2) + { + int c1 = uf.find(m1); + int c2 = uf.find(m2); + ArrayList list1 = markers.get(c1); + ArrayList list2 = markers.get(c2); + ArrayList al = new ArrayList(); + int s1 = list1.size(); + int s2 = list2.size(); + + if (list1.get(s1 - 1) == m1) + al.addAll(list1); + else + if (list1.get(0) == m1) + for (int i = s1 - 1; i >= 0; --i) + al.add(list1.get(i)); + else { + System.err.println(list1); + Error.error(501); + } + + if (list2.get(0) == m2) + al.addAll(list2); + else + if (list2.get(s2 - 1) == m2) + for (int i = s2 - 1; i >= 0; --i) + al.add(list2.get(i)); + else { + System.err.println(list2); + System.err.println(m2); + Error.error(502); + } + return al; + } + + public void unionWithOrder(int m1, int m2) + { + ArrayList al = unionMarkersWithOrder(m1, m2); + + int c1 = uf.find(m1); + int c2 = uf.find(m2); + int c = uf.union(c1, c2); + markers.set(c1, null); + markers.set(c2, null); + markers.set(c, al); + } + public int find(int marker) + { + return uf.find(marker); + } + public boolean isEmpty(int m) + { + return (markers.get(m) == null); + } + public void removeMarkers(int c) + { + markers.get(c).clear(); + } + + public ArrayList getMarkers(int c) + { + return markers.get(c); + } + public ArrayList getMarkersCopy(int c) + { + return new ArrayList(getMarkers(c)); // if we should copy + } + + +} diff --git a/software/LepMap3/lm3/src/Misc.java b/software/LepMap3/lm3/src/Misc.java new file mode 100644 index 0000000..35d58c9 --- /dev/null +++ b/software/LepMap3/lm3/src/Misc.java @@ -0,0 +1,384 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki +*/ +//Miscellaneous functions +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Random; +public class Misc { + + + private static Random seedGenerator = new Random(); + private static long seed = seedGenerator.nextLong(); + private static Random rand = new Random(seed); + + public static void setSeed(long seed) { + Misc.seed = seed; + rand.setSeed(seed); + } + + public static long getSeed() { + return seed; + } + + public static double random() { + return rand.nextDouble(); + } + + //exponential distribution capped to [0,1[. + public static double exponential01(double lambda) { + double ret = 2.0; + while (ret > 1.0) + ret = -Math.log(Misc.random()) / lambda; + return ret; + } + public static double entropy(double p[]) + { + double sum = 0.0; + for (double x : p) + sum += x; + + assert(sum > 0); + + double iSum = 1.0 / sum; + double ret = 0; + for (double x : p) + if (x > 0) { + double y = x * iSum; + ret += y * Math.log(y); + } + return - ret * Constants.invLN2; + } + + public static double entropy(float p[]) + { + double sum = 0.0; + for (double x : p) + sum += x; + + assert(sum > 0); + + double iSum = 1.0 / sum; + double ret = 0; + for (double x : p) + if (x > 0) { + double y = x * iSum; + ret += y * Math.log(y); + } + return - ret * Constants.invLN2; + } + + public static int[][] permutation(int n){ + if (n > 12) + return null; + int m = 1; + ArrayList elements = new ArrayList(); + for (int i = 1; i <= n; ++i) { + m *= i; + elements.add(i - 1); + } + + ArrayList> perm = permutation(elements); + int i = 0; + int ret[][] = new int[m][n]; + for (ArrayList p : perm) { + for (int j = 0; j < n; ++j) + ret[i][j] = p.get(j); + ++i; + } + return ret; + } + + private static ArrayList> permutation(ArrayList elements){ + ArrayList> ret = new ArrayList>(); + if (elements.size() <= 1) { + ArrayList tmp = new ArrayList(); + tmp.addAll(elements); + ret.add(tmp); + return ret; + } + for (int i = 0; i < elements.size(); ++i) { + Integer element = elements.remove(i); + ArrayList> perm0 = permutation(elements); + for (ArrayList p : perm0) { + p.add(0, element); + ret.add(p); + } + elements.add(i, element); + } + return ret; + } + + //no permutations that have been tried earlier + public static int[][] prunePermutation1(int perm[][]) + { + int k = perm[0].length; + int ret[][] = new int[perm.length - perm.length / k + 1][]; + int i = 0; + for (int p[] : perm) { + if (p[0] != 0 || i == 0) + ret[i++] = p; + } + return ret; + } + + //no symmetric permutations + public static int[][] prunePermutation2(int perm[][]) + { + int k = perm[0].length; + int ret[][] = new int[perm.length / 2][]; + int i = 0; + for (int p[] : perm) { + if (p[0] < p[k - 1]) + ret[i++] = p; + } + return ret; + } + + public static class ArrayIndexComparator> implements Comparator + { + private final T[] array; + + public ArrayIndexComparator(T[] array) + { + this.array = array; + } + @SuppressWarnings("unchecked") + public ArrayIndexComparator(ArrayList alArray) + { + this.array = (T[]) alArray.toArray(new Comparable[0]); + } + + public Integer[] createIndexArray() + { + Integer[] indexes = new Integer[array.length]; + for (int i = 0; i < array.length; i++) + { + indexes[i] = i; + } + return indexes; + } + + public int compare(Integer index1, Integer index2) + { + return array[index1].compareTo(array[index2]); + } + } + //Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(table); + //Integer[] indexes = comparator.createIndexArray(); + //Arrays.sort(indexes, comparator); + + private static final double LN10 = Math.log(10); + private static final double invLN10 = 1.0 / Math.log(10); + + public static double logSumFast(double logX, double logY) + { + if (logX >= logY) { + if (logX == Double.NEGATIVE_INFINITY) + return Double.NEGATIVE_INFINITY; + return logX + log1pExpFast(logY - logX); + } + else + return logY + log1pExpFast(logX - logY); + } + + public static double getLookup(double x) { + if (x >= lookup.length - 1) + return lookup[lookup.length - 1][0]; + int ix = (int) x; + return lookup[ix][(int)(lookup[ix].length * (x - ix))]; + } + + private static double lookup[][] = null; + static { + int bins = 10; + int size = 1 << bins; + lookup = new double[bins + 1][]; + for (int i = 0; i <= bins; ++i) { + lookup[i] = new double[size]; + for (int j = 0; j < size; ++j) + lookup[i][j] = Math.log1p(Math.exp(-i - (j + 0.5) / size)); //add 0.5 to get mid point of each interval + size >>= 1; + } + lookup[bins][0] = 0.0; + } + + //x <= 0 + private static double log1pExpFast(double x) { + return getLookup(-x); + } + + + public static double logSum(double logX, double logY) + { + if (logX >= logY) { + if (logX == Double.NEGATIVE_INFINITY) + return Double.NEGATIVE_INFINITY; + return logX + Math.log1p(Math.exp(logY - logX)); + } + else + return logY + Math.log1p(Math.exp(logX - logY)); + + } + public static double logSub(double logX, double logY) + { + return logX + Math.log1p(-Math.exp(logY - logX)); + } + + public static double exp10(double a) + { + return Math.exp(a * LN10); + } + private static class KthSmallest{ + double t[]; + public KthSmallest(double t[]) + { + this.t = t; + } + public double getKthSmallest(int k){ // k = 0, 1, ... t.length - 1 + getKthSmallest(k, 0, t.length - 1); + return t[k]; + } + private void getKthSmallest(int k, int low, int high) { + int i = low, j = high; + double pivot = t[low + (high-low)/2]; + while (i <= j) { + while (t[i] < pivot) + i++; + while (t[j] > pivot) + j--; + if (i <= j) { + double tmp = t[i]; + t[i] = t[j]; + t[j] = tmp; + i++; + j--; + } + } + if (low < j && k <= j) + getKthSmallest(k, low, j); + else if (i < high && k >= i) + getKthSmallest(k, i, high); + } + }; + public static double getKthSmallest(int k, double t[]) + { + KthSmallest ks = new KthSmallest(t); + return ks.getKthSmallest(k); + } + public static int[] randomPermutation(int n){ + int perm[] = new int[n]; + randomPermutation(perm, n); + return perm; + } + public static void randomPermutation(int perm[], int n){ + randomPermutation(perm, n, n - 1); + } + public static void randomPermutation(int perm[], int n, int k){ + for (int i = 0; i < n; ++i) + perm[i] = i; + for (int i = 0; i < k; ++i) { + int j = i + (int) (Misc.random() * (n - i)); + int tmp = perm[i]; + perm[i] = perm[j]; + perm[j] = tmp; + } + } + static float[] resizeArray(float array[], int newSize) { + float[] na = new float[newSize]; + System.arraycopy(array, 0, na, 0, Math.min(newSize, array.length)); + return na; + } + static int[] resizeArray(int array[], int newSize) { + int[] na = new int[newSize]; + System.arraycopy(array, 0, na, 0, Math.min(newSize, array.length)); + return na; + } + + public static byte[][] transpose(byte array[][]) + { + if (array.length == 0) + return new byte[0][0]; //??? + byte[][] ret = new byte[array[0].length][array.length]; + for (int i = 0; i < ret.length; ++i) + for (int j = 0; j < ret[i].length; ++j) + ret[i][j] = array[j][i]; + return ret; + } + + public static void printArray(int array[][]) + { + for (int a[] : array) { + for (int ai : a) + System.out.print(ai + "\t"); + System.out.println(); + } + } + public static void printArray(double array[][]) + { + for (double a[] : array) { + for (double ai : a) + System.out.print(ai + "\t"); + System.out.println(); + } + } + + public static void printList(double array[]) + { + for (double ai : array) + System.out.print(ai + "\t"); + System.out.println(); + } + + public static void main(String args[]) + { + for (BigDecimal x = new BigDecimal("0.0"); x.doubleValue() > -11; x=x.subtract(new BigDecimal("0.01"))) { + double v1 = log1pExpFast(x.doubleValue()); + double v2 = Math.log1p(Math.exp(x.doubleValue())); + System.err.println(x + " " + v1 + " " + v2 + " " + (v1 - v2)); + } + + + //printArray(permutation(4)); + printArray(prunePermutation1(permutation(5))); + + + + + for (int i = 0; i < 10; ++i) + System.out.println(exponential01(10)); + + int n = 10; + double t[] = new double[n]; + for (int k = 0; k < n; ++k) + t[k] = Math.random(); + double old = 0; + for (int k = 0; k < n; ++k) { + double sk = getKthSmallest(k, t); + if (sk < old) + System.err.println("error"); + System.err.println(sk + "\t" + 1.0 * k / n ); + old = sk; + } + } + + + +} diff --git a/software/LepMap3/lm3/src/Order.java b/software/LepMap3/lm3/src/Order.java new file mode 100644 index 0000000..b197c69 --- /dev/null +++ b/software/LepMap3/lm3/src/Order.java @@ -0,0 +1,577 @@ + +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP2. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ + +//Marker ordering functions +import java.util.*; +import java.text.*; +import java.io.PrintStream; + +public class Order { + private Data2 data; + private LGMap2 chromosomeMap; + + private int mappingFunction = 1; + + private boolean sexAveraged = false; + + private int numMarkers; + + private int printPhased; + + private OrderFinder of = new OrderFinder(); + + ArrayList lastOrder = new ArrayList(); + + public Order() { + } + + + public void setPrintPhased(int value) + { + printPhased = value; + } + + public void setUsePhysical(int value, double prob) + { + of.setUsePhysical(value, prob); + } + + public void setKosambi() + { + mappingFunction = 2; + } + + public void setMorgan() + { + mappingFunction = 0; + } + + public void setHaldane() + { + mappingFunction = 1; + } + public void init(Data2 data, LGMap2 cm) { + this.data = data; + this.chromosomeMap = cm; + numMarkers = data.getNumMarkers(); + } + public void setDataScale(String s, double maxS, double capS, int mode) + { + of.setDataScale(s, maxS, capS, mode); + } + + public void setSelfingPhase(boolean value) + { + of.setSelfingPhase(value); + } + + public void setRecombination(double rec1, double rec2, double inter1, double inter2) { + of.setRecombination(rec1, rec2, inter1, inter2); + } + public void setIdenticalLimit(double limit) { + of.setIdenticalLimit(limit); + } + public void setFilterWindow(int value) + { + } + public void setNumThreads(int numThreads) + { + of.setNumThreads(numThreads); + } + public void setNumMergeIterations(int numIterations) + { + of.setNumMergeIterations(numIterations); + } + + public void computeLODScores(String filename) + { + try { + PrintStream stream = new PrintStream(filename); + of.printLOD(lastOrder, stream); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void calculateIntervals(String filename, double limit) + { + try { + PrintStream stream = new PrintStream(filename); + of.printIntervals(lastOrder, stream, limit); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public void evaluateOrder(String filename, boolean improveOrder) { + evaluateOrder(filename, 0, improveOrder); + } + + + public void evaluateOrder(String filename, int chr, boolean improveOrder) { + ArrayList order = new ArrayList(); + ArrayList> table = Input.loadTable(filename, " \t"); + if (table == null) + return; + for (ArrayList line : table) { +// if (line.size() != 1) +// Error.error(104); + if (line.get(0).equals("***")) + continue; + int i = Integer.parseInt(line.get(0)); + //System.err.println(i); + order.add(i - 1); + } + + if (!improveOrder) { + ArrayList order2 = orderChromosome(order, false, false); + printOrder(order2, 0, false, System.out, false); + } + + if (improveOrder) { + ArrayList order2 = orderChromosome(order, false, true); + printOrder(order2, 0, false, System.out); + } + + + } + + private double mappingFunction(double r) + { + if (mappingFunction == 0) + return r; + else if (mappingFunction == 2) + return kosambi(r); + else + return haldane(r); + } + + private double haldane(double r) { + return -0.5 * Math.log(1 - 2 * r); + } + private double kosambi(double r) { + return 0.25 * Math.log ((1 + 2 * r) / (1 - 2 * r)); + } + + + private String getHaplotypeLine(ArrayList hap, int marker) + { + char mapping[] = {'0', '1', '-'}; + StringBuilder ret = new StringBuilder(); + for (int h1[][] : hap) { + ret.append("\t"); + int[] tmp = h1[marker]; + for (int i = 0; i < tmp.length - 2; ++i) // individual + ret.append(mapping[tmp[i]]); + ret.append(" "); + ret.append(tmp[tmp.length - 2]); + ret.append(" "); + ret.append(tmp[tmp.length - 1]); + } + return ret.toString(); + } + + private String getQualityLine(ArrayList q, int marker) + { + StringBuilder ret = new StringBuilder(); + for (float qf[][] : q) { // family + float[] tmp = qf[marker]; + ret.append('\t'); + for (int i = 0; i < tmp.length; ++i) {// individual + ret.append(tmp[i]); + if (i != tmp.length - 1) + ret.append(' '); + } + + } + return ret.toString(); + } + + private double[] getRecombinationRates(ArrayList hap, int marker) { + double ret[] = new double[2]; + int n = 0; + for (int h1[][] : hap) { + int[] tmp = h1[marker]; + ret[0] += tmp[tmp.length - 2]; + ret[1] += tmp[tmp.length - 1]; + n += (tmp.length - 2) / 2; + } + ret[0] /= n; + ret[1] /= n; + return ret; + } + + private double[] getRecombinationRates(ArrayList hap, int marker, int firstInf1[], int firstInf2[], int lastInf1[], int lastInf2[]) { + double ret[] = new double[2]; + int n1 = 0; + int n2 = 0; + int fam = 0; + for (int h1[][] : hap) { + int[] tmp = h1[marker]; + ret[0] += tmp[tmp.length - 2]; + ret[1] += tmp[tmp.length - 1]; + if (marker > firstInf1[fam] && marker <= lastInf1[fam]) + n1 += (tmp.length - 2) / 2; + if (marker > firstInf2[fam] && marker <= lastInf2[fam]) + n2 += (tmp.length - 2) / 2; + ++fam; + } + if (n1 > 0) + ret[0] /= n1; + if (n2 > 0) + ret[1] /= n2; + return ret; + } + + public void setHyperPhaser(boolean value) + { + of.setHyperPhasing(value); + } + + public void setPhasingIterations(int value) + { + of.setPhasingIterations(value); + } + + public void printOrder(ArrayList order, int chr, boolean estimateIndividualErrors, PrintStream stream) { + printOrder(order, chr, estimateIndividualErrors, stream, true); + } + + + public void printOrder(ArrayList order, int chr, boolean estimateIndividualErrors, PrintStream stream, boolean setHaplotypes) { + + if (setHaplotypes) { + of.setHaplotypes(processHaplotypes(order), informativeMarkers(order), parentOrder(order), data, order); + } + + ArrayList order2 = new ArrayList(); + for (int i = 0; i < order.size(); ++i) + order2.add(i); + + lastOrder.clear(); + lastOrder.addAll(order2); + + double ll = of.likelihood(order2); + + if (!Double.isNaN(bestScore) && ll != bestScore) { + System.err.println("Warning: Inconsistencies in phasing, please try using randomPhase=1 and/or hyperPhaser=1 in OrderMarkers2"); + + if (ll < bestScore - 1e-6) { + if (!of.isHyperPhasing()) { + System.err.println("Enabling hyperPhaser..."); + of.setHyperPhasing(true); + } + of.setPhasingIterations(3); + ll = of.likelihood(order2); + System.err.println("Phasing likelihoods = " + bestScore + " " + ll); + } + } + + + //ArrayList iee = null; + //if (estimateIndividualErrors) + // iee = of.getIndividualErrorEstimates(order2); + + //of.setHaplotypes(data) + ArrayList phasedHaplotypes = null; + + phasedHaplotypes = of.getPhasedHaplotypes(order2, false, (printPhased == 2 || printPhased == 4)); + + ArrayList quality = null; + if (printPhased > 2) + quality = of.getPhasedQualityData(order2); + + DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(); + otherSymbols.setDecimalSeparator('.'); + DecimalFormat df3 = new DecimalFormat("0.000", otherSymbols); + DecimalFormat df4 = new DecimalFormat("#.####", otherSymbols); + + stream.println("#*** LG = " + chr + " likelihood = " + df4.format(ll)) ; + stream.println("#marker_number\tmale_position\tfemale_position\t( 0.0 )[\tphased data]") ; + + double pos1 = 0.0; + double pos2 = 0.0; + int numChr = 1; + int j = 0; + + int firstInformative1[] = new int[data.getNumFamilies()]; + int firstInformative2[] = new int[data.getNumFamilies()]; + int lastInformative1[] = new int[data.getNumFamilies()]; + int lastInformative2[] = new int[data.getNumFamilies()]; + Arrays.fill(firstInformative1, Integer.MAX_VALUE); + Arrays.fill(firstInformative2, Integer.MAX_VALUE); + + for (int i = 0; i < order.size(); ++i) { + int m = order.get(i); + int fi = 0; + for (Family2 f : data.getFamilies()) { + if (f.isFatherInformative(m)) { + if (i < firstInformative1[fi]) + firstInformative1[fi] = i; + if (i > lastInformative1[fi]) + lastInformative1[fi] = i; + } + if (f.isMotherInformative(m)) { + if (i < firstInformative2[fi]) + firstInformative2[fi] = i; + if (i > lastInformative2[fi]) + lastInformative2[fi] = i; + } + ++fi; + } + } + + for (int i = 0; i < order.size(); ++i) { + double distance1 = 0.0; + double distance2 = 0.0; + double r[] = getRecombinationRates(phasedHaplotypes, i, firstInformative1, firstInformative2, lastInformative1, lastInformative2);//getRecombinationRates(phasedHaplotypes, i); + if (sexAveraged) { + distance1 = distance2 = mappingFunction(0.5 * (r[0] + r[1])); + } else { + distance1 = mappingFunction(r[0]); + distance2 = mappingFunction(r[1]); + } + pos1 += distance1; + pos2 += distance2; + + if (Double.isInfinite(pos1) || Double.isNaN(pos1) || Double.isInfinite(pos2) || Double.isNaN(pos2)) { + stream.println("#*** LG = " + chr + "." + (numChr++)); + pos1 = 0.0; + pos2 = 0.0; + } + String qstr = ""; + if (printPhased > 2) + qstr = "#" + getQualityLine(quality, i); + + stream.println((order.get(i) + 1) + "\t" + df3.format(100 * pos1) + "\t" + df3.format(100 * pos2) + "\t( " + + df4.format(0.0) + " )" + ((printPhased != 0) ? getHaplotypeLine(phasedHaplotypes, i) : "") + qstr); + + + } + //stream.println("#COUNT = " + of.getCount()); + //if (estimateIndividualErrors) { + // stream.println("#Error estimate for individuals:"); + // stream.println("#ID\terror_rate:"); + // int i = 0; + // for (Family2 f : data.getFamilies()) + // for (int child = 0; child < f.getNumChildren(); ++child) + // stream.println("#" + f.getChildID(child) + "\t" + (iee.get(i++))); + // assert(i == iee.size()); + //} + + + } + + public void setSexAveraged(boolean sexAveraged) + { + this.sexAveraged = sexAveraged; + } + + public void orderChromosomes(boolean findIntial, boolean improveOrder, boolean estimateIndividualErrors) { + orderChromosomes(-1, findIntial, improveOrder, estimateIndividualErrors); + } + + public void orderChromosomes(int chr, boolean findIntial, boolean improveOrder, boolean estimateIndividualErrors) { + ArrayList> chromosomesPI = new ArrayList>(); + ArrayList> chromosomes = new ArrayList>(); + + int numInformative[] = new int[data.getNumFamilies()]; + + + for (int i = 0; i < numMarkers; ++i) { + int fi = 0; + for (Family2 f : data.getFamilies()) { + if (f.isFatherInformative(i) || f.isMotherInformative(i)) + ++numInformative[fi]; + ++fi; + } + } + int perm[] = Misc.randomPermutation(numMarkers); + + for (int ii = 0; ii < numMarkers; ++ii) { + int i = perm[ii]; + boolean informative = false; + int fi = 0; + for (Family2 f : data.getFamilies()) + if ((numInformative[fi++] > 1 || !improveOrder) && (f.isFatherInformative(i) || f.isMotherInformative(i))) + informative = true; + int nameI = chromosomeMap.getLGName(i); + for (int j = chromosomes.size(); j <= nameI; ++j) { + chromosomesPI.add(new ArrayList()); + chromosomes.add(new ArrayList()); + } + if (informative) + chromosomesPI.get(nameI).add(i); + chromosomes.get(nameI).add(i); + } + + int numChromosomes = chromosomes.size() - 1; + System.err.println("Number of LGs = " + numChromosomes); + + for (int c = 1; c <= numChromosomes; ++c) { + if (chr <= 0 || c == chr) { + + ArrayList markers = new ArrayList(); + for (int i : chromosomesPI.get(c)) { + markers.add(i); + } + + ArrayList order = orderChromosome(markers, findIntial, improveOrder); + printOrder(order, c, estimateIndividualErrors, System.out); + } + } + } + + public ArrayList informativeMarkers(ArrayList markers) + { + ArrayList ret = new ArrayList(); + for (Family2 f : data.getFamilies()) { + int inf[] = new int[markers.size()]; + int k = 0; + for (int m : markers) { + int i = 0; + if (f.isFatherInformative(m)) + i+=1; + if (f.isMotherInformative(m)) + i+=2; + inf[k++] = i; + } + ret.add(inf); + } + return ret; + } + + public ArrayList parentOrder(ArrayList markers) + { + ArrayList ret = new ArrayList(); + if (of.getRefineParentOrder()) { + int numM = markers.size(); + int numF = data.getNumFamilies(); + for (int f = 0; f < numF; ++f) { + ret.add(new char[numM]); + } + for (int m = 0; m < numM; ++m) { + char po[] = data.getIgnoreParentOrder(markers.get(m)); + for (int f = 0; f < numF; ++f) + ret.get(f)[m] = po[f]; + } + } + return ret; + } + + + public ArrayList processHaplotypes(ArrayList markers) + { + ArrayList ret = new ArrayList(); + for (Family2 f : data.getFamilies()) { + float h[][][] = new float[markers.size()][f.getNumChildren()][4]; + int k = 0; + for (int m : markers) { + float prob[] = f.getProb(m); + if (prob == null) { + prob = new float[4 * f.getNumChildren()]; + Arrays.fill(prob, 1.0f); + } + for (int i = 0; i < f.getNumChildren(); ++i) { + float max = Float.MIN_NORMAL; + for (int j = 0; j < 4; ++j) + max = Math.max(prob[4 * i + j], max); + for (int j = 0; j < 4; ++j) { + h[k][i][j] = prob[4 * i + j] / max; + } + } + ++k; + } + ret.add(h); + } + //System.err.println(ret.get(0).length); + + + /*for (Family2 f : data.getFamilies()) { + + byte h1[][] = f.getPaternalHaplotypes(markers); + byte h2[][] = f.getMaternalHaplotypes(markers); + + for (int mi = 0; mi < markers.size(); ++mi) { + int m = markers.get(mi); + if (!f.isFatherInformative(m)) + for (int i = 0; i < h1.length; ++i) + h1[i][mi] = 2; + if (!f.isMotherInformative(m)) + for (int i = 0; i < h2.length; ++i) + h2[i][mi] = 2; + if (f.isFatherInformative(m) && f.isMotherInformative(m)) + for (int i = 0; i < h2.length; ++i) + if (h1[i][mi] == 2 && h2[i][mi] == 2 && f.getGenotype(m, i) == 2) { + h1[i][mi] = 3; + h2[i][mi] = 3; + } + } + ret.add(Misc.transpose(h1)); + ret.add(Misc.transpose(h2)); + }*/ + return ret; + } + + private double bestScore = 0; + + private ArrayList orderChromosome(ArrayList markersAll, boolean findInitial, boolean improveOrder) { + + ArrayList markers = new ArrayList(); + for (int m1 : markersAll) { + boolean informative = false; + for (Family2 f : data.getFamilies()) + if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) + informative = true; + if (informative) + markers.add(m1); + } + + System.err.println("Number of markers = " + markers.size()); + + of.setHaplotypes(processHaplotypes(markers), informativeMarkers(markers), parentOrder(markers), data, markers); + + if (improveOrder) { + ArrayList markers2 = of.findOrder(findInitial); + bestScore = of.getBestScore(); + for (int i = 0; i < markers.size(); ++i) + markers2.set(i, markers.get(markers2.get(i))); + markers = markers2; + } else + bestScore = Double.NaN; + + ArrayList ret = new ArrayList(); + for (int m : markers) + ret.add(m); + return ret; + } + + + public void setRefineParentOrder(boolean value) { + // TODO Auto-generated method stub + of.setRefineParentOrder(value); + } + + + + +} diff --git a/software/LepMap3/lm3/src/OrderFinder.java b/software/LepMap3/lm3/src/OrderFinder.java new file mode 100644 index 0000000..10d0a1d --- /dev/null +++ b/software/LepMap3/lm3/src/OrderFinder.java @@ -0,0 +1,2953 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP2. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +//TODO: superPhaserer +import java.util.ArrayList; + +import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.*; +//import java.util.concurrent.atomic.DoubleAdder; in java 1.8 +import java.io.PrintStream; + +//TODO: Scaling to recombination parameters... To reduce end effects +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; + +public class OrderFinder { + ArrayList originalHaplotypes; + ArrayList originalInformative; + ArrayList originalInformation; + ArrayList originalParentOrder; + + private int numMergeIterations = 6; + private int numOriginalMarkers; + + private double RECOMBINATION1 = 0.01; + private double RECOMBINATION2 = 0.01; + private double INTERFERENCE1 = 0.01; + private double INTERFERENCE2 = 0.01; + + private int phasingIterations = 1; + + private String dataScaleString = "1.0"; + private double fullDataScale = 1.0; + private double dataScale = 1.0; + private double MAX_SCALE = 1.0; + private double CAP_SCALE = 1.0; + private int dataScalingMode = 1; + + private boolean selfingPhase = false; + + private boolean hyperPhasing = false; + + private double DISTANCE_LIMIT = 0.01; + + private boolean phasedData = false; + + private int usePhysicalPositions = 0; + private double logPhysicalPenalty = 0.0; + + private int NUM_THREADS = 1; + + float qTables[][][] = null; + double __tmpRec[][][] = new double[2][2][]; + + //to avoid new calls in merge class + double forwardM1[] = null; + double forwardM2[] = null; + double backwardM1[] = null; + double backwardM2[] = null; + double scoresM[] = null; + + ArrayList markerNames = new ArrayList(); + + long originalPhysicalPositions[] = null; + + String individualNames[] = null; + + private SingleFamily[] sfs; + + private PhysicalFamily[] pfs; + + OrderFinder() + { + } + + // for future parallel implementation + OrderFinder(OrderFinder other) + { + numMergeIterations = other.numMergeIterations; + RECOMBINATION1 = other.RECOMBINATION1; + RECOMBINATION2 = other.RECOMBINATION2; + INTERFERENCE1 = other.INTERFERENCE1; + INTERFERENCE2 = other.INTERFERENCE2; + + phasingIterations = other.phasingIterations; + + dataScaleString = other.dataScaleString; + fullDataScale = other.fullDataScale; + dataScale = other.dataScale; + MAX_SCALE = other.MAX_SCALE; + CAP_SCALE = other.CAP_SCALE; + dataScalingMode = other.dataScalingMode; + hyperPhasing = other.hyperPhasing; + DISTANCE_LIMIT = other.DISTANCE_LIMIT; + phasedData = other.phasedData; + selfingPhase = other.selfingPhase; + NUM_THREADS = other.NUM_THREADS; + } + + public void setDataScale(String s, double maxS, double capS, int mode) + { + MAX_SCALE = maxS; + CAP_SCALE = 1.0 / capS; + dataScaleString = s; + dataScalingMode = mode; + } + public void setPhasingIterations(int value) + { + phasingIterations = value; + } + + public void setSelfingPhase(boolean value) + { + selfingPhase = value; + } + + public void setUsePhysical(int value, double prob) + { + usePhysicalPositions = value; + logPhysicalPenalty = Math.log(prob); + } + + private void initDataScale() + { + int numIndividuals = 0; + for (SingleFamily sf : sfs) + numIndividuals += sf.numIndividuals; + if (dataScaleString.equals("M/N")) { + dataScale = (double)numIndividuals / numOriginalMarkers; + } else { + int mpn = dataScaleString.indexOf("M/N"); + if (mpn >= 0) { + if (mpn == 0 || mpn != dataScaleString.length() - 3) { + Error.error(304); + System.exit(-1); + } + dataScale = Double.parseDouble(dataScaleString.substring(0, mpn)) * numIndividuals / numOriginalMarkers; + } else { + int pn = dataScaleString.indexOf("/N"); + if (pn >= 0) { + if (pn == 0 || pn != dataScaleString.length() - 2) { + //System.err.println("|" + dataScaleString + "|"); + Error.error(303); + System.exit(-1); + } + dataScale = Double.parseDouble(dataScaleString.substring(0, pn)) / numOriginalMarkers; + } else { + dataScale = Double.parseDouble(dataScaleString); + } + } + } + if (dataScale > 1.0) + dataScale = 1.0; + fullDataScale = dataScale; + System.err.println("Setting dataScale to " + dataScale + " all likelihoods will be multiplied by " + (1.0 / dataScale)); + } + + public void setRecombination(double rec1, double rec2, double inter1, double inter2) { + RECOMBINATION1 = rec1; + RECOMBINATION2 = rec2; + INTERFERENCE1 = inter1; + INTERFERENCE2 = inter2; + initTmpRec(); + } + + private final double WORK_PER_THREAD = 300.0 * 300.0 * 100.0; // at least this amount of individual score evaluations should be done in a single thread... + private final int SPACE_PER_THREAD = 2000000; // space for each thread to store scores... + + private int calcNumThreadsPolish(double numMarkers, double numPositions, double numIndividuals) { + double n = numMarkers; + double m = numPositions; + double k = numIndividuals; + double threads = n * m * k / WORK_PER_THREAD; + if (threads >= 0.25 * numMarkers) + threads = 0.25 * numMarkers; // at least 4 jobs per thread, overhead <= 25% + return (int) Math.min(NUM_THREADS, threads); + } + + private int calcNumThreadsScore(int numMarkers, int numPositions, int numIndividuals, int maxJobs) { + double n = numMarkers; + double m = numPositions; + double k = numIndividuals; + double threads = Math.min(maxJobs, n * m) * k / WORK_PER_THREAD; + if (threads >= 0.25 * numMarkers * numPositions) + threads = 0.25 * numMarkers * numPositions; // at least 4 jobs per thread, overhead <= 25% + return (int) Math.min(NUM_THREADS, threads); + } + + public void initTmpRec(){ //double scale) { + + double r1 = RECOMBINATION1; + double r2 = RECOMBINATION2; + double i1 = INTERFERENCE1; + double i2 = INTERFERENCE2; + + //tmpRec[0][0] = new double[]{(1 - r1) * (1 - r2), i1 * (1 - r2), (1 - r1) * i2, i1 * i2}; + //tmpRec[0][1] = new double[]{(1 - r1) * (1 - r2), i1 * (1 - r2), (1 - r1) * r2, i1 * r2}; + //tmpRec[1][0] = new double[]{(1 - r1) * (1 - r2), r1 * (1 - r2), (1 - r1) * i2, r1 * i2}; + //tmpRec[1][1] = new double[]{(1 - r1) * (1 - r2), r1 * (1 - r2), (1 - r1) * r2, r1 * r2}; //phew... + + //assumed 1-r1 and 1-r2 are close to 1 + __tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; + __tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; + __tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; + __tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... + + for (double t2[][] : __tmpRec) + for (double t[] : t2) + for (int i = 0; i < t.length; ++i) + t[i] = Math.log(t[i]); + + //for first version of recombination scaling +/* double tmpRec1[][][] = new double[2][2][]; + double tmpRec2[][][] = new double[2][2][]; + + double logI1 = Math.log(i1); + tmpRec1[0][0] = new double[]{0.0, logI1, 0.0, logI1}; + tmpRec1[0][1] = new double[]{0.0, logI1, 0.0, logI1}; + double logR1 = Math.log(r1); + tmpRec1[1][0] = new double[]{0.0, logR1, 0.0, logR1}; + tmpRec1[1][1] = new double[]{0.0, logR1, 0.0, logR1}; //phew... + + double logI2 = Math.log(i2); + tmpRec2[0][0] = new double[]{0.0, 0.0, logI2, logI2}; + double logR2 = Math.log(r2); + tmpRec2[0][1] = new double[]{0.0, 0.0, logR2, logR2}; + tmpRec2[1][0] = new double[]{0.0, 0.0, logI2, logI2}; + tmpRec2[1][1] = new double[]{0.0, 0.0, logR2, logR2}; //phew...*/ + } + + public void setIdenticalLimit(double limit) { + DISTANCE_LIMIT = limit; + } + + + public void setNumThreads(int numThreads) + { + NUM_THREADS = numThreads; + } + + public void setNumMergeIterations(int numIterations) + { + numMergeIterations = numIterations; + } + + public void setHyperPhasing(boolean value) + { + hyperPhasing = value; + } + + public boolean isHyperPhasing() + { + return hyperPhasing; + } + + + public ArrayList getPhasedHaplotypes(ArrayList markers, boolean silent, boolean maskHaplotypes) + { + numOriginalMarkers = originalHaplotypes.get(0).length; + ArrayList ret = new ArrayList(); + ArrayList retI = new ArrayList(); + + for (float h[][][] : originalHaplotypes) { + int numIndividuals = h[0].length; + int ph[][] = new int[numOriginalMarkers][numIndividuals * 2 + 2]; + ret.add(ph); + retI.add(new int[numIndividuals]); + } + double c[] = new double[2]; + for (SingleFamily sf : sfs) { + double tmp[] = sf.Viterbi2(markers, ret, retI, silent, maskHaplotypes); + c[0] += tmp[0]; + c[1] += tmp[1]; + } + if (!silent) { + System.err.println("number of recombinations = " + c[0] + " logL = " + c[1]); + int i = 0; + for (int r[] : retI) { + for (int j = 0; j < r.length; ++j) + if (r[j] >= 1) { + System.err.println("Individual\t" + individualNames[i + j] + "\trecombines\t" + r[j] + "\ttimes"); + } + i += r.length; + } + } + return ret; + } + + public ArrayList getPhasedHaplotypes(ArrayList markers) + { + return getPhasedHaplotypes(markers, false, false); + } + + public ArrayList getPhasedQualityData(ArrayList markers) + { + numOriginalMarkers = originalHaplotypes.get(0).length; + ArrayList quality = new ArrayList(); + + for (float h[][][] : originalHaplotypes) { + int numIndividuals = h[0].length; + float q[][] = new float[numOriginalMarkers][numIndividuals * 4]; + quality.add(q); + } + for (SingleFamily sf : sfs) { + sf.Viterbi3(markers, quality); + } + return quality; + } + + //checks whether posterior is informative for paternal (parent=0) or maternal (parent=1) side + private boolean nonMissing(int parent, float prob[]){ + final double MISSING_LIMIT = Math.log(0.8); // second posterior of 0.8 or higher is considered missing... + if (parent == 0) + return (prob[0] + prob[2] < MISSING_LIMIT && prob[1] + prob[3] < MISSING_LIMIT); // + is product but max(a,b) = 0 so a + b is min... + else { + assert(parent == 1); + return (prob[0] + prob[1] < MISSING_LIMIT && prob[2] + prob[3] < MISSING_LIMIT); // + is product but max(a,b) = 0 so a + b is min... + } + } + + + + public void setHaplotypes(ArrayList data, ArrayList dataInf, ArrayList dataParentOrder, Data2 data2, ArrayList order) + { + if (order.size() == 0) // nothing to do... + return; + + phasedData = data2.isPhased(); + + originalHaplotypes = new ArrayList(); + + numOriginalMarkers = data.get(0).length; + +// haplotypes = new ArrayList(); + originalInformative = new ArrayList(); + //informative = new ArrayList(); + + originalInformation = new ArrayList(); + //information = new ArrayList(); + + originalParentOrder = new ArrayList(); + + int numIndividuals = 0; + int fam = 0; + for (float h[][][] : data) { + char parentOrder[] = null; + if (refineParentOrder) + parentOrder = dataParentOrder.get(fam); + + int inf[] = new int[numOriginalMarkers]; + float inf2[] = new float[numOriginalMarkers]; + int numInd = (h.length > 0) ? h[0].length : 0; + //float ohn[][][] = new float[numOriginalMarkers][numInd][5]; + float ohn[][][] = new float[numOriginalMarkers][numInd][4]; + float hn[][][] = new float[numOriginalMarkers][][]; + for (int m = 0; m < numOriginalMarkers; ++m) { + double sume = 0.0; + for (int ind = 0; ind < numInd; ++ind) { + for (int haplotype = 0; haplotype < 4; ++haplotype) + ohn[m][ind][haplotype] = (float) Math.log(h[m][ind][haplotype]); + + double e = 2.0 - Misc.entropy(h[m][ind]); + sume += e; + //ohn[m][ind][4] = (float) (e); //store information content for element 5... for future use ... + } + hn[m] = ohn[m]; + inf2[m] = (float) (sume / numInd); + //System.err.println(m + "\t" + (sume / numInd)); + + if (dataInf == null) { + boolean allMissing1 = true; + for (float hap[] : ohn[m]) + if (nonMissing(0, hap)) + allMissing1 = false; + + boolean allMissing2 = true; + for (float hap[] : ohn[m]) + if (nonMissing(1, hap)) + allMissing2 = false; + + if (!allMissing1) + inf[m] += 1; + if (!allMissing2) + inf[m] += 2; + } else + inf[m] = dataInf.get(fam)[m]; + } + ++fam; + //haplotypes.add(hn); + originalHaplotypes.add(ohn); + + originalInformative.add(inf); + //informative.add(new int[numOriginalMarkers]); + + originalInformation.add(inf2); + //information.add(new float[numOriginalMarkers]); + + originalParentOrder.add(parentOrder); + + // + // + numIndividuals += hn[0].length; + } + + markerNames = order; + + if (usePhysicalPositions > 0) { + //physicalPositions = new long[numOriginalMarkers]; + originalPhysicalPositions = new long[numOriginalMarkers]; + //order.size == numOriginalMarkers? + for (int i = 0; i < order.size(); ++i) { + originalPhysicalPositions[i] = data2.getMarkerNameNumber(order.get(i)); + //System.err.println(order.get(i) + "\t" + (data2.getMarkerNameNumber(order.get(i)) >>> 32)); + } + + pfs = new PhysicalFamily[1]; + pfs[0] = new PhysicalFamily(); + } + + individualNames = new String[numIndividuals]; + for (int i = 0; i < numIndividuals; ++i) + individualNames[i] = data2.getIndividualName(i); + + qTables = new float[numIndividuals][numOriginalMarkers + 1][4]; + //mergePath = new boolean[numOriginalMarkers / 2 + 1][numOriginalMarkers / 2 + 2]; + + int numFamilies = originalHaplotypes.size(); + + sfs = new SingleFamily[numFamilies]; + + for (int i = 0; i < numFamilies; ++i) { + sfs[i] = new SingleFamily(i); + } + + forwardM1 = new double[numOriginalMarkers]; + forwardM2 = new double[numOriginalMarkers]; + backwardM1 = new double[numOriginalMarkers]; + backwardM2 = new double[numOriginalMarkers]; + scoresM = new double[SPACE_PER_THREAD * NUM_THREADS]; //space to store enough values to justify creating threads... + + initDataScale(); + } + + public void initMarkers(ArrayList markers) + { + } + + + public double scoreBetter(ArrayList markers, double limit) + { + return score(markers); + } + + public double score(ArrayList markers) + { + return likelihood(markers); + } + + public double likelihood(ArrayList markers) + { + return likelihood(markers, false); + } + + public double likelihood(ArrayList markers, boolean keepTables) + { + initMarkers(markers); + double ll = 0.0; + + /*if (NUM_THREADS > 1 && originalHaplotypes.size() > 1 && markers.size() >= 32) { + ExecutorService ftb = Executors.newFixedThreadPool(NUM_THREADS); + CompletionService ecs = new ExecutorCompletionService(ftb); + + for (SingleFamily sf : sfs) + ecs.submit(sf); + + try { + for (int t = 0; t < sfs.length; ++t) + ll += ecs.take().get(); + } catch (Exception e){ + Error.error(-999999); + } + if (keepTables) + for (SingleFamily sf : sfs) + ftb.execute(sf); + + ftb.shutdown(); + } else*/ { + for (SingleFamily sf : sfs) + ll += sf.phase(markers); + if (keepTables) { + for (SingleFamily sf : sfs) + sf.computeTables(markers); + } + } + //physical info... + if (pfs != null) { + for (PhysicalFamily pf : pfs) + ll += pf.likelihood(markers, keepTables); + } + + return ll; + } + + //TODO: DISTANCE_LIMIT + private class PhysicalFamily{ + //private double logScore = Math.log(0.01); + private ArrayList initMarkers = null; + + private double scoreLong(long c1, long c2) { + if ((c1 | 0xFFFFFFFFl) == (c2 | 0xFFFFFFFFl)) // same contig + return 0; + return logPhysicalPenalty; //TODO: position within contigs... + // positions (c1 & 0xFFFFFFFFl) and (c2 & 0xFFFFFFFFl) + } + + + private double likelihood(ArrayList markers_, boolean keepTables) + { + int numMarkers = markers_.size(); + double ll = 0.0; + for (int m = 1; m < numMarkers; ++m) + ll += scoreLong(originalPhysicalPositions[markers_.get(m - 1)], originalPhysicalPositions[markers_.get(m)]); + //use physicalPosition + if (keepTables) + initMarkers = markers_; + return ll; + } + + private double polishScore(int perm[], int pos, ArrayList markers) + { + double ll = 0.0; + int k = perm.length; + for (int i = 1; i < k; ++i) + ll += scoreLong(originalPhysicalPositions[perm[i - 1]], originalPhysicalPositions[perm[i]]); + + if (pos > 0) + ll += scoreLong(originalPhysicalPositions[markers.get(pos - 1)], originalPhysicalPositions[perm[0]]); + + if (pos + k < markers.size()) + ll += scoreLong(originalPhysicalPositions[perm[k - 1]], originalPhysicalPositions[markers.get(pos + k)]); + + return ll; + } + private double scoreDistance(int pos1, int pos2) + { + return scoreLong(originalPhysicalPositions[initMarkers.get(pos1)], originalPhysicalPositions[pos2]); + } + + // assumes likelihood(markers, true) has been called + private double score(int marker, int pos) + { + //if (true) + // return 0.0; + int prev = pos - 1; + int next = pos; + if (prev >= 0 && initMarkers.get(prev).equals(marker)) + --prev; + if (next < initMarkers.size() && initMarkers.get(next).equals(marker)) + ++next; + double ll = 0.0; + if (prev >= 0) + ll += scoreLong(originalPhysicalPositions[initMarkers.get(prev)], originalPhysicalPositions[marker]); + if (next < initMarkers.size()) + ll += scoreLong(originalPhysicalPositions[marker], originalPhysicalPositions[initMarkers.get(next)]); + + return ll; + } + } + + private class SingleFamily implements Callable, Runnable{ + public int fam; + + public int numIndividuals; + + //private int hyperMarkers[] = new int[numOriginalMarkers]; + double forwardSP[][][]; + double backwardSP[][][]; + + double logLs[]; + + double tmpB[] = new double[16]; + + double forwardV[][]; + double forwardV2[][]; + int path[][]; + + RecombinationScale recScale = (dataScalingMode == 2) ? new RecombinationScale2() : new RecombinationScale1(); + + public int getFamilyIndex() + { + return fam; + } + + //index 4 binary indexes into one array index + private int index4(int i1, int i2, int i3, int i4) + { + return 8 * i1 + 4 * i2 + 2 * i3 + i4; + //return (i1 << 3) + (i2 << 2) + (i3 << 1) + i4; +// return ((2 * i1 + i2) * 2 + i3) * 2 + i4; +// int ret = i1 + i1 + i2; +// ret += ret + i3; +// ret += ret + i4; +// return ret; + } + + public SingleFamily(int fam) + { + this.fam = fam; + + numIndividuals = originalHaplotypes.get(fam)[0].length; + + forwardSP = new double[numIndividuals][numOriginalMarkers + 1][16]; + backwardSP = new double[numIndividuals][2][16]; + logLs = new double[numIndividuals]; + + for (int hi = 0; hi < numIndividuals; ++hi) { + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + if (r1 > 0 || r2 > 0) { + forwardSP[hi][0][index4(0,0,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardSP[hi][0][index4(0,1,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardSP[hi][0][index4(1,0,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardSP[hi][0][index4(1,1,r1,r2)] = Double.NEGATIVE_INFINITY; + } + } + + forwardV = new double[numOriginalMarkers + 1][16]; + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + if (r1 > 0 || r2 > 0) { + forwardV[0][index4(0,0,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardV[0][index4(0,1,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardV[0][index4(1,0,r1,r2)] = Double.NEGATIVE_INFINITY; + forwardV[0][index4(1,1,r1,r2)] = Double.NEGATIVE_INFINITY; + } + + forwardV2 = new double[numOriginalMarkers + 1][16]; + + + path = new int[numOriginalMarkers + 1][16]; + + + } + + //swaps t[i] and t[j] + private void swap(int i, int j, float t[]) + { + float tmp = t[i]; + t[i] = t[j]; + t[j] = tmp; + } + + + public double phase(ArrayList markers) + { + double ret = 0.0; + //System.err.println("phasing..."); + +// int numInfMarkers = 0; + //numInfMarkers1 = 0; + //numInfMarkers2 = 0; + +// int inf[] = originalInformative.get(fam); +// int numMarkers = markers_.size(); + //int markers[] = new int[numMarkers]; + + + + //for (int mi = 0; mi < numMarkers; ++mi) { + // int m = markers_.get(mi); + // if (inf[m] > 0) { + // markers[numInfMarkers++] = m; + // //if ((inf[m] & 1) == 1) + // ++numInfMarkers1; + //if ((inf[m] & 2) == 2) + // ++numInfMarkers2; + + // } + //} + + //TODO: Check if this is really needed (or is markers_ <=> markers enough) + int inf[] = originalInformative.get(fam); + ArrayList markers_ = new ArrayList(); + for (int m : markers) + if (inf[m] > 0) + markers_.add(m); + recScale.init(markers_); + + //System.err.println(numMarkers1 + "\t" + numMarkers2 + "\t" + numMarkersAll); + + if (phasedData) { + ret += Viterbi2Fast(markers_); + } else { + if (hyperPhasing) { + double ll = hyperPhaser(markers_); + //iterate + if (phasingIterations > 1) { + //System.err.println(ll); + float phap[][][] = getPhase(markers_); + for (int i = 1; i < phasingIterations; ++i) { + randomPhase(markers_); + double ll2 = hyperPhaser(markers_); + //System.err.println(ll2); + if (ll2 > ll) { + ll = ll2; + phap = getPhase(markers_); + } + } + setPhase(markers_, phap); + } + ret += ll; + } else { + //double l[]; + //while ((l = superPhaser(numInfMarkers, markers))[0] > 0){ + // n += l[0]; + //} + //ret += l[1]; + double ll = superPhaser(markers_); + //iterate + if (phasingIterations > 1) { + float phap[][][] = getPhase(markers_); + //System.err.println(ll); + for (int i = 1; i < phasingIterations; ++i) { + randomPhase(markers_); + double ll2 = superPhaser(markers_); + //System.err.println(ll2); + if (ll2 > ll) { + ll = ll2; + phap = getPhase(markers_); + } + } + setPhase(markers_, phap); + } + ret += ll; + } + } + //System.err.println("running superPhaser!\n" + n + " changes"); + return ret; + } + + private float[][][] getPhase(ArrayList markers) + { + int numMarkers = markers.size(); + + float[][][] hap = originalHaplotypes.get(fam); + float[][][] ret = new float[numMarkers][numIndividuals][4]; + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + for (int i = 0; i < numIndividuals; ++i) { + for (int j = 0; j < 4; ++j) + ret[mi][i][j] = hap[m][i][j]; + } + } + + return ret; + } + + private void setPhase(ArrayList markers, float newhap[][][]) + { + int numMarkers = markers.size(); + + float[][][] hap = originalHaplotypes.get(fam); + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + for (int i = 0; i < numIndividuals; ++i) { + for (int j = 0; j < 4; ++j) + hap[m][i][j] = newhap[mi][i][j]; + } + } + } + + private void randomPhase(ArrayList markers) + { + float[][][] hap = originalHaplotypes.get(fam); + + for (int m : markers) { + if (!selfingPhase) { + if (Misc.random() < 0.5) + for (int i = 0; i < numIndividuals; ++i) { + swap(0, 2, hap[m][i]); + swap(1, 3, hap[m][i]); + } + if (Misc.random() < 0.5) + for (int i = 0; i < numIndividuals; ++i) { + swap(0, 1, hap[m][i]); + swap(2, 3, hap[m][i]); + } + } else { // do not mix phase with selfingPhase + if (Misc.random() < 0.5) + for (int i = 0; i < numIndividuals; ++i) { + swap(0, 2, hap[m][i]); + swap(1, 3, hap[m][i]); + swap(0, 1, hap[m][i]); + swap(2, 3, hap[m][i]); + } + } + } + } + + + + public double hyperPhaser(ArrayList markers) + { + //totalMarkers = markers.size(); + return hyperPhaser_(1, markers); + } + + public double hyperPhaser_(int adder, ArrayList markers) + { + int totalMarkers = markers.size(); + if (totalMarkers >= 6 * adder) + hyperPhaser_(2 * adder, markers); + ArrayList hyperMarkers = new ArrayList(); + for (int i = 0; i < totalMarkers; i+=adder) + hyperMarkers.add(markers.get(i)); + dataScale = Math.min(1.0, fullDataScale * totalMarkers / hyperMarkers.size()); + return superPhaser(hyperMarkers); + } + public double superPhaser(ArrayList markers) + { + double ret = 0.0; + int n = 0; + double l[]; + while ((l = superPhaser_(markers))[0] > 0){ + n += l[0]; + } + ret += l[1]; + //System.err.println("running superPhaser!\n" + n + " changes"); + return ret; + } + + //phase data by maximizing its likelihood + public double[] superPhaser_(ArrayList markers) + { + double logL = 0.0; + + float[][][] hap = originalHaplotypes.get(fam); + char[] parentOrder = originalParentOrder.get(fam); + + int numPhases = 7; + if (refineParentOrder) + numPhases = 14; + double pSP[] = new double[numPhases]; + double QPhaseSP[] = new double[numPhases]; + + int numParentChanges = 0; + + // forwardSP and iscaleSP have been initialized already... + + for (int hi = 0; hi < numIndividuals; ++hi) { + logL += ViterbiForwardIndividual(hi, forwardSP[hi], markers, null); + } + //System.err.println("logL = " + logL); + + int numMarkers = markers.size(); + + initBackward(numMarkers & 1); + //for (int hi = 0; hi < numIndividuals; ++hi) + // for (int b1 = 0; b1 < 2; ++b1) + // for (int b2 = 0; b2 < 2; ++b2) + // for (int r1 = 0; r1 < 2; ++r1) + // for (int r2 = 0; r2 < 2; ++r2) + // backwardSP[hi][numMarkers2 & 1][b1][b2][r1][r2] = 0.0; + + int s1 = 0; + int s2 = 0; + int phasesChanged = 0; + for (int mi = numMarkers - 1; mi >= 0; --mi) { + int m = markers.get(mi); + + Arrays.fill(QPhaseSP, 0.0); + for (int hi = 0; hi < numIndividuals; ++hi) { + double fTable[] = forwardSP[hi][mi + 1]; + double bTable[] = backwardSP[hi][(mi + 1) & 1]; + Arrays.fill(pSP, Double.NEGATIVE_INFINITY); + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + for (int a1 = 0; a1 < 2; ++a1) + for (int a2 = 0; a2 < 2; ++a2) { + int b1 = a1 ^ s1; + int b2 = a2 ^ s2; + + double commonTerm = fTable[index4(b1,b2,r1,r2)] + bTable[index4(a1,a2,r1,r2)]; + pSP[0] = Math.max(pSP[0], commonTerm); // no change + if (!selfingPhase) { + pSP[1] = Math.max(pSP[1], fTable[index4(b1 ^ 1,b2 ,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for male + pSP[2] = Math.max(pSP[2], fTable[index4(b1 ,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for female + } + pSP[3] = Math.max(pSP[3], fTable[index4(b1 ^ 1,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for both + commonTerm -= emission(hap[m][hi], b1, b2); + if (!selfingPhase) { + pSP[4] = Math.max(pSP[4], commonTerm + emission(hap[m][hi], b1 ^ 1, b2 )); // change phase of marker m for male + pSP[5] = Math.max(pSP[5], commonTerm + emission(hap[m][hi], b1 , b2 ^ 1)); // change phase of marker m for female + } + pSP[6] = Math.max(pSP[6], commonTerm + emission(hap[m][hi], b1 ^ 1, b2 ^ 1)); // change phase of marker m for both + + if (refineParentOrder && parentOrder[m] == '+') { // change parental genotypes for marker m... + commonTerm = fTable[index4(b1,b2,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1, b2); + pSP[7] = Math.max(pSP[7], commonTerm + emission(hap[m][hi], b2, b1)); // no change, but parents + if (!selfingPhase) { + pSP[8] = Math.max(pSP[8], fTable[index4(b1 ^ 1,b2 ,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1 ^ 1, b2) + emission(hap[m][hi], b2, b1 ^ 1)); // change phase of forward for male + pSP[9] = Math.max(pSP[9], fTable[index4(b1 ,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1, b2 ^ 1) + emission(hap[m][hi], b2 ^ 1, b1)) ; // change phase of forward for female + } + pSP[10] = Math.max(pSP[10], fTable[index4(b1 ^ 1,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1 ^ 1, b2 ^ 1) + emission(hap[m][hi], b2 ^ 1, b1 ^ 1)); // change phase of forward for both + if (!selfingPhase) { + pSP[11] = Math.max(pSP[11], commonTerm + emission(hap[m][hi], b2, b1 ^ 1)); // change phase of marker m for male + pSP[12] = Math.max(pSP[12], commonTerm + emission(hap[m][hi], b2 ^ 1, b1)); // change phase of marker m for female + } + pSP[13] = Math.max(pSP[13], commonTerm + emission(hap[m][hi], b2 ^ 1, b1 ^ 1)); // change phase of marker m for both + } + + //double em = emission(hap[m][hi], b1 ^ 1, b2 ^ 1); + //pSP[7] = Math.max(pSP[7], fTable[b1 ^ 1][b2 ][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1 ^ 1, b2) + em); // change forward for male and female for marker m + //pSP[8] = Math.max(pSP[8], fTable[b1 ][b2 ^ 1][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1, b2 ^ 1) + em); // change forward for female and male for marker m + //pSP[9] = Math.max(pSP[9], fTable[b1 ^ 1][b2 ][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1 ^ 1, b2) + emission(hap[m][hi], b1, b2 ^ 1)); // change forward for male and female for marker m + //pSP[10] = Math.max(pSP[10], fTable[b1 ][b2 ^ 1][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1, b2 ^ 1) + emission(hap[m][hi], b1 ^ 1, b2)); // change forward for female and male for marker m + } + + for (int d=0; d < numPhases; ++d) + QPhaseSP[d] += pSP[d]; + + } + + //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6]); + int e1 = 0; + int e2 = 0; + + int max = 0; + for (int j = 1; j < numPhases; ++j) + if (QPhaseSP[j] > QPhaseSP[max] + 1e-9) + max = j; + + if (max >= 7) { //refineParentOrder + ++numParentChanges; + for (int i = 0; i < numIndividuals; ++i) + swap(1, 2, hap[m][i]); // swap mother and father... + max -= 7; // continue with phase + } + + if (max < 4) { + s1 = s1 ^ (max & 1); + s2 = s2 ^ (max >> 1); + } + else if (max < 7){ + e1 = (max - 3) & 1; + e2 = (max - 3) >> 1; + } else { // unreachable code... + e1 = (max & 1) ^ 1; + e2 = (max & 1); + s1 = s1 ^ e2; + s2 = s2 ^ e1; + } + //System.err.println("" + s1 + s2); + + + if ((s1 ^ e1) == 1 || (s2 ^ e2) == 1) { + ++phasesChanged; + if ((s1 ^ e1) == 1) + for (int i = 0; i < numIndividuals; ++i) { + swap(0, 2, hap[m][i]); + swap(1, 3, hap[m][i]); + } + if ((s2 ^ e2) == 1) { + for (int i = 0; i < numIndividuals; ++i) { + swap(0, 1, hap[m][i]); + swap(2, 3, hap[m][i]); + } + } + } + if (max > 0) { + //System.err.print(max + "\t"); + //System.err.print((QPhaseSP[max] - QPhaseSP[0]) + "\t"); + //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6]); + //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6] + "\t" + QPhaseSP[7] + "\t" + QPhaseSP[8]); + + //scale = Math.exp((QPhaseSP[0] - QPhaseSP[max]) * onePerNumIndividuals); //Math.pow(QPhase[0] / QPhase[max], 1.0 / numIndividuals); + //System.err.println(Math.log10(QPhaseSP[max] / QPhaseSP[0]) + "\t" + max + "\t" + mi); + } + + updateBackward(mi, 1, markers); + } + //if (numParentChanges > 0) { + // System.err.println("Changing " + numParentChanges + " parents"); + //} + //if (phasesChanged > 0) + // System.err.println("Family " + fam + " changed " + phasesChanged + " marker phases"); + //System.err.println("logL = " + logL); + return new double[]{phasesChanged + numParentChanges, logL}; + } + + public void computeTables(ArrayList markers_) + { + + int fi = 0; //index for each individual + for (int i = 0; i < fam; ++i) + fi += originalHaplotypes.get(i)[0].length; + + int numMarkers = markers_.size(); + + recScale.init(markers_); + + // forwardSP and iscaleSP have been initialized already... + + for (int hi = 0; hi < numIndividuals; ++hi) { + logLs[hi] = ViterbiForwardIndividual(hi, forwardSP[hi], markers_, null); + } + + + + //System.err.println(iscaleSP[0][numMarkers]); + + //for (int hi = 0; hi < numIndividuals; ++hi) + // for (int b1 = 0; b1 < 2; ++b1) + // for (int b2 = 0; b2 < 2; ++b2) + // for (int r1 = 0; r1 < 2; ++r1) + // for (int r2 = 0; r2 < 2; ++r2) + // backwardSP[hi][numMarkers & 1][b1][b2][r1][r2] = 0.0; + initBackward(numMarkers & 1); + + + for (int m = numMarkers - 1; m >= -1; --m) { + double _tmpRec[][][] = recScale.getRecMatrix(m + 1); // TODO: check + + for (int hi = 0; hi < numIndividuals; ++hi) { + double fTable[] = forwardSP[hi][m + 1]; + double bTable[] = backwardSP[hi][(m + 1) & 1]; + + float qt[][] = qTables[fi + hi]; + Arrays.fill(qt[m + 1], Float.NEGATIVE_INFINITY); + + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) { + double f[] = {_tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )] + bTable[index4(b1,b2,r1,r2)], + _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )] + bTable[index4(b1,b2,r1,r2)], + _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)] + bTable[index4(b1,b2,r1,r2)], + _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)] + bTable[index4(b1,b2,r1,r2)]}; + int max = 0; + for (int p = 1; p < 4; ++p) + if (f[p] > f[max]) + max = p; + qt[m + 1][2 * b1 + b2] = Math.max(qt[m + 1][2 * b1 + b2], (float) (f[max] - logLs[hi])); + } + } + if (m >= 0) + updateBackward(m, 1, markers_); + } + } + + //init backward and forward tables... + //to evaluate local changes fast + private void calcForward(ArrayList markers){ + + recScale.init(markers); + // forwardSP and iscaleSP have been initialized already... + + for (int hi = 0; hi < numIndividuals; ++hi) { + ViterbiForwardIndividual(hi, forwardSP[hi], markers, null); + } + } + + private final void initBackward(int position){ + for (int hi = 0; hi < numIndividuals; ++hi) + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + backwardSP[hi][position][index4(b1,b2,r1,r2)] = 0.0; + } + + // s1 and s2 are the two states + private double emission(float posterior[], int s1, int s2) + { + //return dataScale * posterior[2 * s1 + s2]; + return posterior[2 * s1 + s2]; + } + + //TODO: finish RecombinationScale + private abstract class RecombinationScale{ + public abstract void update(int perm[], int start); + public abstract void init(ArrayList markers); + public abstract double[][][] getRecMatrix(int position); + } + private class RecombinationScale1 extends RecombinationScale{ + private int inf1[] = null; + private int inf2[] = null; + private int infLimitLow = 0; + + private double scalePerMax = 1.0; + private double tmpRec2[][][] = new double[2][2][4]; + + private double prevScale1 = 1.0; + private double prevScale2 = 1.0; + + public void init(ArrayList markers) { + scalePerMax = 1.0 / MAX_SCALE; + infLimitLow = (scalePerMax >= 1.0 / dataScale) ? 0 : (int) (1.0 / (dataScale * scalePerMax)); + + if (infLimitLow == 0) + return; + int numMarkers = markers.size(); + + inf1 = new int[numMarkers + 1]; + inf2 = new int[numMarkers + 1]; + int inf[] = originalInformative.get(fam);//originalInformative.get(fam); + int numInf1 = 0; + int numInf2 = 0; + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + if ((inf[m] & 1) == 1) + ++numInf1; + if ((inf[m] & 2) == 2) + ++numInf2; + inf1[mi + 1] = numInf1; + inf2[mi + 1] = numInf2; + } + + } + public void update(int perm[], int start) { // update for polishScore + if (infLimitLow == 0) + return; + int k = perm.length; + int inf[] = originalInformative.get(fam);//originalInformative.get(fam); + + int numInf1 = inf1[start]; + int numInf2 = inf2[start]; + + for (int mi = 0; mi < k; ++mi) { + int m = perm[mi]; + if ((inf[m] & 1) == 1) + ++numInf1; + if ((inf[m] & 2) == 2) + ++numInf2; + inf1[start + mi + 1] = numInf1; + inf2[start + mi + 1] = numInf2; + } + + } + private void initMatrix(double scale1, double scale2) { + if (infLimitLow == 0 || (prevScale1 == scale1 && prevScale2 == scale2)) + return; + double logI1 = scale1 * __tmpRec[0][0][1]; + double logI2 = scale2 * __tmpRec[0][0][2]; + double logR1 = scale1 * __tmpRec[1][1][1]; + double logR2 = scale2 * __tmpRec[1][1][2]; + +// tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; +// tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; +// tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; +// tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... + + tmpRec2[0][0][1] = logI1; + tmpRec2[0][0][2] = logI2; + tmpRec2[0][0][3] = logI1 + logI2; + + tmpRec2[0][1][1] = logI1; + tmpRec2[0][1][2] = logR2; + tmpRec2[0][1][3] = logI1 + logR2; + + tmpRec2[1][0][1] = logR1; + tmpRec2[1][0][2] = logI2; + tmpRec2[1][0][3] = logR1 + logI2; + + tmpRec2[1][1][1] = logR1; + tmpRec2[1][1][2] = logR2; + tmpRec2[1][1][3] = logR1 + logR2; + prevScale1 = scale1; + prevScale2 = scale2; + } + + public double[][][] getRecMatrix(int position) + { + if (infLimitLow == 0) + return __tmpRec; + + double scale1 = 1.0 / dataScale; + double scale2 = scale1; + double cap = Math.min(CAP_SCALE, scale1); + + int infTotal1 = inf1[inf1.length - 1]; + int infTotal2 = inf2[inf2.length - 1]; + int numInf1 = inf1[position]; + int numInf2 = inf2[position]; + + if (numInf1 < infLimitLow || infTotal1 - numInf1 < infLimitLow) { + int k = Math.min(numInf1, infTotal1 - numInf1); + scale1 = (k <= 1) ? scalePerMax : k * scalePerMax; + } + if (numInf2 < infLimitLow || infTotal2 - numInf2 < infLimitLow) { + int k = Math.min(numInf2, infTotal2 - numInf2); + scale2 = (k <= 1) ? scalePerMax : k * scalePerMax; + } + //System.err.println("getRecMatrix " + position + " scale " + scale1 + " " + scale2 + " informative " + (inf1[position + 1] - inf1[position] + 2 *(inf2[position + 1] - inf2[position])) ); + + scale1 = Math.max(scale1, cap); + scale2 = Math.max(scale2, cap); + + if (scale1 == 1.0 && scale2 == 1.0) { + //System.err.println(scale1 + "\t" + scale2);// + "\t" + informative.get(fam)[position]); + return __tmpRec; + } + else { + //System.err.println(scale1 + "\t" + scale2 + "\t" + informative.get(fam)[position]); + initMatrix(scale1, scale2); + return tmpRec2; + } + } + } + private class RecombinationScale2 extends RecombinationScale{ + private double inf1[] = null; + private double inf2[] = null; + private int infLimitLow = 0; + + private double scalePerMax = 1.0; + private double tmpRec2[][][] = new double[2][2][4]; + + private double prevScale1 = 1.0; + private double prevScale2 = 1.0; + + private double scale1 = 1.0; + private double scale2 = 1.0; + + public void init(ArrayList markers) { + scalePerMax = 1.0 / MAX_SCALE; + infLimitLow = (scalePerMax >= 1.0 / dataScale) ? 0 : (int) (1.0 / (dataScale * scalePerMax)); + //infLimitLow = (1.0 / (dataScale * scalePerMax)); + + if (infLimitLow == 0) + return; + int numMarkers = markers.size(); + + inf1 = new double[numMarkers + 1]; + inf2 = new double[numMarkers + 1]; + int inf[] = originalInformative.get(fam);//originalInformative.get(fam); + float info[] = originalInformation.get(fam);//originalInformative.get(fam); + double numInf1 = 0.0; + double numInf2 = 0.0; + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + if (inf[m] > 0) { + if (inf[m] == 3) { + numInf1 += 0.5 * info[m]; + numInf2 += 0.5 * info[m]; + } + else if (inf[m] == 1) { + numInf1 += info[m]; + } + else if (inf[m] == 2) { + numInf2 += info[m]; + } + } + inf1[mi + 1] = numInf1; + inf2[mi + 1] = numInf2; + } + + //for (int mi = 0; mi < numMarkers; ++mi) { + // getRecMatrix(mi); + // System.err.println(mi + "\t" + scale1 + "\t" + scale2); + //} + + + } + public void update(int perm[], int start) { // update for polishScore + if (infLimitLow == 0) + return; + int k = perm.length; + int inf[] = originalInformative.get(fam);//originalInformative.get(fam); + float info[] = originalInformation.get(fam); + + double numInf1 = inf1[start]; + double numInf2 = inf2[start]; + + for (int mi = 0; mi < k; ++mi) { + int m = perm[mi]; + if (inf[m] > 0) { + if (inf[m] == 3) { + numInf1 += 0.5 * info[m]; + numInf2 += 0.5 * info[m]; + } + else if (inf[m] == 1) { + numInf1 += info[m]; + } + else if (inf[m] == 2) { + numInf2 += info[m]; + } + } + inf1[start + mi + 1] = numInf1; + inf2[start + mi + 1] = numInf2; + } + + } + private void initMatrix() { + if (infLimitLow == 0 || (prevScale1 == scale1 && prevScale2 == scale2)) + return; + double logI1 = scale1 * __tmpRec[0][0][1]; + double logI2 = scale2 * __tmpRec[0][0][2]; + double logR1 = scale1 * __tmpRec[1][1][1]; + double logR2 = scale2 * __tmpRec[1][1][2]; + +// tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; +// tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; +// tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; +// tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... + + tmpRec2[0][0][1] = logI1; + tmpRec2[0][0][2] = logI2; + tmpRec2[0][0][3] = logI1 + logI2; + + tmpRec2[0][1][1] = logI1; + tmpRec2[0][1][2] = logR2; + tmpRec2[0][1][3] = logI1 + logR2; + + tmpRec2[1][0][1] = logR1; + tmpRec2[1][0][2] = logI2; + tmpRec2[1][0][3] = logR1 + logI2; + + tmpRec2[1][1][1] = logR1; + tmpRec2[1][1][2] = logR2; + tmpRec2[1][1][3] = logR1 + logR2; + prevScale1 = scale1; + prevScale2 = scale2; + } + + public double[][][] getRecMatrix(int position) + { + if (infLimitLow == 0) + return __tmpRec; + + scale1 = 1.0 / dataScale; + scale2 = scale1; + double cap = Math.min(CAP_SCALE, scale1); + + double infTotal1 = inf1[inf1.length - 1]; + double infTotal2 = inf2[inf2.length - 1]; + double numInf1 = inf1[position]; + double numInf2 = inf2[position]; + + if (numInf1 < infLimitLow || infTotal1 - numInf1 < infLimitLow) { + double k = Math.min(numInf1, infTotal1 - numInf1); + scale1 = (k <= 1) ? scalePerMax : k * scalePerMax; + } + if (numInf2 < infLimitLow || infTotal2 - numInf2 < infLimitLow) { + double k = Math.min(numInf2, infTotal2 - numInf2); + scale2 = (k <= 1) ? scalePerMax : k * scalePerMax; + } + //System.err.println("getRecMatrix " + position + " scale " + scale1 + " " + scale2 + " informative " + (inf1[position + 1] - inf1[position] + 2 *(inf2[position + 1] - inf2[position])) ); + + scale1 = Math.max(scale1, cap); + scale2 = Math.max(scale2, cap); + + if (scale1 == 1.0 && scale2 == 1.0) { + //System.err.println(scale1 + "\t" + scale2);// + "\t" + informative.get(fam)[position]); + return __tmpRec; + } + else { + //System.err.println(scale1 + "\t" + scale2 + "\t" + informative.get(fam)[position]); + initMatrix(); + return tmpRec2; + } + } + } + + + //forward Viterbi calculations for single individual + private double ViterbiForwardIndividual(int hi, double forward[][], ArrayList markers, int path[][]){ + return ViterbiForwardIndividual(hi, forward, markers, path, false); + } + + final static double VITERBI_SMALL = 1e-9; + + private double ViterbiForwardIndividual(int hi, double forward[][], ArrayList markers, int path[][], boolean allSolutions){ + float[][][] hap = originalHaplotypes.get(fam); + int numMarkers = markers.size(); + + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + double _tmpRec[][][] = recScale.getRecMatrix(mi); + + double fTable[] = forward[mi]; + double fTable2[] = forward[mi + 1]; + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) { + double emis = emission(hap[m][hi], b1, b2); + //double fTable22[][] = fTable2[b1][b2]; + for (int r1 = 0; r1 < 2; ++r1) { + for (int r2 = 0; r2 < 2; ++r2) { + double f[] = {_tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )], + _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )], + _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)], + _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)]}; + int max = 0; + for (int p = 1; p < 4; ++p) + if (f[p] > f[max]) + max = p; + + double fMax = f[max] + emis; + //fTable22[r1][r2] = fMax; + fTable2[index4(b1, b2, r1, r2)] = fMax; + if (path != null) + switch (max) { + case 0: path[m + 1][index4(b1,b2,r1,r2)] = b1 + 2 * b2 + 4 * r1 + 8 * r2;break; + case 1: path[m + 1][index4(b1,b2,r1,r2)] = (b1 ^ r1) + 2 * b2 + 4 * (r1 ^ 1) + 8 * r2;break; + case 2: path[m + 1][index4(b1,b2,r1,r2)] = b1 + 2 * (b2 ^ r2) + 4 * r1 + 8 * (r2 ^ 1);break; + case 3: path[m + 1][index4(b1,b2,r1,r2)] = (b1 ^ r1) + 2 * (b2 ^ r2) + 4 * (r1 ^ 1) + 8 * (r2 ^ 1);break; + } + if (allSolutions) { + int states = 0; + for (int p = 0; p < 4; ++p) + if (f[p] >= f[max] - VITERBI_SMALL) + switch (p) { + case 0: + states += 16 << (b1 + 2 * b2 + 4 * r1 + 8 * r2); + break; + case 1: + states += 16 << ((b1 ^ r1) + 2 * b2 + 4 * (r1 ^ 1) + 8 * r2); + break; + case 2: + states += 16 << (b1 + 2 * (b2 ^ r2) + 4 * r1 + 8 * (r2 ^ 1)); + break; + case 3: + states += 16 << ((b1 ^ r1) + 2 * (b2 ^ r2) + 4 * (r1 ^ 1) + 8 * (r2 ^ 1)); + break; + } + path[m + 1][index4(b1,b2,r1,r2)] += states; + } + } + } + } + + } + double logL = Double.NEGATIVE_INFINITY; + double fTable[] = forward[numMarkers]; + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + logL = Math.max(logL, fTable[index4(b1,b2,r1,r2)]); + return logL; + } + + private void ViterbiForwardIndividualFaster(int hi, double forward[][], int numMarkers2, int markers[], int start){ // for polishScore + float[][][] hap = originalHaplotypes.get(fam); + + double f[] = new double[5]; // save new...? + for (int mi = 0; mi < numMarkers2; ++mi) { + double _tmpRec[][][] = recScale.getRecMatrix(mi + start); + + int m = markers[mi]; + + double fTable[] = forward[mi]; + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) { + //double fTable2[][] = forward[mi + 1][b1][b2]; + double fTable2[] = forward[mi + 1]; + double emis = emission(hap[m][hi], b1, b2); + for (int r1 = 0; r1 < 2; ++r1) { + for (int r2 = 0; r2 < 2; ++r2) { + f[0] = _tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )]; + f[1] = _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )]; + f[2] = _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)]; + f[3] = _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)]; + + int max = 0; + for (int p = 1; p < 4; ++p) + if (f[p] > f[max]) + max = p; + fTable2[index4(b1, b2, r1, r2)] = f[max] + emis; + } + } + } + } + } + + + private final void updateBackward(int mi, int mask, ArrayList markers){ + float hap[][][] = originalHaplotypes.get(fam); + int m = markers.get(mi); + double _tmpRec[][][] = recScale.getRecMatrix(mi); // TODO: check if + 1 is needed + + for (int hi = 0; hi < numIndividuals; ++hi) { + + double bTable[] = backwardSP[hi][(mi + 1) & mask]; + double bTable2[] = backwardSP[hi][mi & mask]; + + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) { + double emis = emission(hap[m][hi], b1, b2); + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + tmpB[index4(b1,b2,r1,r2)] = bTable[index4(b1,b2,r1,r2)] + emis; + } + + + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) { + for (int a1 = 0; a1 < 2; ++a1) + for (int a2 = 0; a2 < 2; ++a2) { + double f[] = {_tmpRec[r1 ][r2 ][0] + tmpB[index4(a1 ,a2 ,r1 ,r2 )], + _tmpRec[r1 ^ 1][r2 ][1] + tmpB[index4(a1 ^ r1 ^ 1,a2 ,r1 ^ 1,r2 )], + _tmpRec[r1 ][r2 ^ 1][2] + tmpB[index4(a1 ,a2 ^ r2 ^ 1,r1 ,r2 ^ 1)], + _tmpRec[r1 ^ 1][r2 ^ 1][3] + tmpB[index4(a1 ^ r1 ^ 1,a2 ^ r2 ^ 1,r1 ^ 1,r2 ^ 1)]}; + + int max = 0; + for (int p = 1; p < 4; ++p) + if (f[p] > f[max]) + max = p; + bTable2[index4(a1,a2,r1,r2)] = f[max]; + } + } + } + } + + private double polishScore(int perm[], int pos) { + + int k = perm.length; + + double logL = 0.0; + for (int hi = 0; hi < numIndividuals; ++hi) { + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + forwardV2[0][index4(b1,b2,r1,r2)] = forwardSP[hi][pos][index4(b1,b2,r1,r2)]; + + recScale.update(perm, pos); + ViterbiForwardIndividualFaster(hi, forwardV2, k, perm, pos); + + double max = Double.NEGATIVE_INFINITY; + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + max = Math.max(max, forwardV2[k][index4(b1,b2,r1,r2)] + backwardSP[hi][(pos + k) & 1][index4(b1,b2,r1,r2)]); + //System.err. + + logL += max; + } + return logL; + } + + public double Viterbi2Fast(ArrayList markers) { + double logL = 0.0; + + //forwardV and tmpRec are initialized + + for (int hi = 0; hi < numIndividuals; ++hi) { + logL += ViterbiForwardIndividual(hi, forwardV, markers, null); + } + return logL; + } + + + private int[] getBits16(int number){ + int n = 0; + for (int bit = 0; bit < 16; ++bit) + if ((number & (1 << bit)) != 0) + ++n; + + int ret[] = new int[n]; + n = 0; + for (int bit = 0; bit < 16; ++bit) + if ((number & (1 << bit)) != 0) + ret[n++] = bit; + + return ret; + } + + public void Viterbi3(ArrayList markers_, ArrayList quality_ret) + { + float quality[][] = quality_ret.get(fam); + + int numMarkers = markers_.size(); + + double logL = 0.0; + for (int hi = 0; hi < numIndividuals; ++hi) { + logL += ViterbiForwardIndividual(hi, forwardSP[hi], markers_, null); + } + + initBackward(numMarkers & 1); + double q[][] = new double[2][2]; + + for (int m = numMarkers - 1; m >= 0; --m) { + for (int hi = 0; hi < numIndividuals; ++hi) { + double fTable[] = forwardSP[hi][m + 1]; + double bTable[] = backwardSP[hi][(m + 1) & 1]; + q[0][0] = Double.NEGATIVE_INFINITY; + q[0][1] = Double.NEGATIVE_INFINITY; + q[1][0] = Double.NEGATIVE_INFINITY; + q[1][1] = Double.NEGATIVE_INFINITY; + + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + for (int a1 = 0; a1 < 2; ++a1) + for (int a2 = 0; a2 < 2; ++a2) { + q[a1][a2] = Misc.logSum(q[a1][a2], fTable[index4(a1,a2,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); + } + double max = Double.NEGATIVE_INFINITY; + for (int a1 = 0; a1 < 2; ++a1) + for (int a2 = 0; a2 < 2; ++a2) + max = Math.max(max, q[a1][a2]); + + quality[m][4 * hi + 0] = (float)Math.exp(q[0][0] - max); + quality[m][4 * hi + 1] = (float)Math.exp(q[0][1] - max); + quality[m][4 * hi + 2] = (float)Math.exp(q[1][0] - max); + quality[m][4 * hi + 3] = (float)Math.exp(q[1][1] - max); + } + updateBackward(m, 1, markers_); + } + } + + public double[] Viterbi2(ArrayList markers_, ArrayList ret, ArrayList ret2, boolean silent, boolean maskHaplotypes) + { + + double logL = 0.0; + int count = 0; + + int numMarkers = markers_.size(); + + //forwardV already initialized + //tmpRec already initialized + + recScale.init(markers_); + + float[][][] hap = originalHaplotypes.get(fam); + int [][] retF = ret.get(fam); + int [] retI = ret2.get(fam); //individual recombination rate + + + for (int hi = 0; hi < numIndividuals; ++hi) { + logL += ViterbiForwardIndividual(hi, forwardV, markers_, path, maskHaplotypes); + + double max = Double.NEGATIVE_INFINITY; + int maxB1 = 0; + int maxB2 = 0; + int maxR1 = 0; + int maxR2 = 0; + + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) { + double f = forwardV[numMarkers][index4(b1,b2,r1,r2)]; + if (f > max) { + max = f; + maxB1 = b1; + maxB2 = b2; + maxR1 = r1; + maxR2 = r2; + } + } + + + for (int m = numMarkers - 1; m >= 0; --m) { //backtrack most likely path + retF[m][hi] = maxB1; + retF[m][hi + hap[0].length] = maxB2; + + int p = path[m + 1][index4(maxB1,maxB2,maxR1,maxR2)]; + int tmpB1 = (p & 1); + int tmpB2 = (p & 2) >> 1; + int tmpR1 = (p & 4) >> 2; + int tmpR2 = (p & 8) >> 3; + + if (tmpB1 != maxB1) { + ++count; + ++retF[m][2 * hap[0].length]; + ++retI[hi]; + } + if (tmpB2 != maxB2) { + ++count; + ++retF[m][2 * hap[0].length + 1]; + ++retI[hi]; + } + maxB1 = tmpB1; + maxB2 = tmpB2; + maxR1 = tmpR1; + maxR2 = tmpR2; + } + //mask uncertain haplotypes + if (maskHaplotypes) { + int states = 0; //set of possible states + for (int r1 = 0; r1 < 2; ++r1) + for (int r2 = 0; r2 < 2; ++r2) + for (int b1 = 0; b1 < 2; ++b1) + for (int b2 = 0; b2 < 2; ++b2) + if (forwardV[numMarkers][index4(b1,b2,r1,r2)] >= max - VITERBI_SMALL) + states += 1 << (b1 + 2 * b2 + 4 * r1 + 8 * r2); + + //ArrayList tmp = new ArrayList(); + //for (int s : getBits16(states)) + // tmp.add(s); + //System.err.println(states + " " + tmp); + + + for (int m = numMarkers - 1; m >= 0; --m) { //backtrack most likely paths + int nextStates = 0; + int bits[] = getBits16(states); + int b1Mask = 0; + int b2Mask = 0; + for (int p: bits) { + int b1 = (p & 1); + int b2 = (p & 2) >> 1; + int r1 = (p & 4) >> 2; + int r2 = (p & 8) >> 3; + b1Mask |= (1 << b1); + b2Mask |= (1 << b2); + nextStates |= (path[m + 1][index4(b1,b2,r1,r2)] >> 4); + } + states = nextStates; + if (b1Mask == 3) + retF[m][hi] = 2; + if (b2Mask == 3) + retF[m][hi + hap[0].length] = 2; + } + + } + + } + + if (!silent) + System.err.println("logL = " + logL); + return new double[]{count, logL}; + } + + @Override + public Double call() + { + return 0.0;//phase(); + } + @Override + public void run() + { + //computeTables(); + } + + } + + // assumes likelihood(markers, true) has been called + // and then initData(markers2) + //TODO: handle phased data (maxPhase should do it) + //TODO: handle selfing data (phaseAdder should do it) + public double score(int marker, int position) + { + double ret = 0.0; + + int phaseAdder = 1; + int maxPhase = 4; + if (phasedData) + maxPhase = 1; + else if (selfingPhase) // only 0 and 3 as phase for selfing data + phaseAdder = 3; + + + int numF = originalHaplotypes.size(); + int fi = 0; + for (int fam = 0; fam < numF; ++fam) { + float[][][] hap = originalHaplotypes.get(fam); // TODO: Check ... (haplotypes.get does not work...) + double retPhase[] = new double[4]; + int numIndividuals = hap[0].length; + for (int hi = 0; hi < numIndividuals; ++hi) { + float Q[] = qTables[fi][position]; + ++fi; + for (int phase = 0; phase < maxPhase; phase+=phaseAdder) { + //double f = Q[phase] + dataScale * hap[marker][hi][0]; + double f = Q[phase] + hap[marker][hi][0]; + for (int haplotype = 1; haplotype < 4; ++haplotype) + f = Math.max(f, Q[haplotype ^ phase] + hap[marker][hi][haplotype]); + //f = Math.max(f, Q[haplotype ^ phase] + dataScale * hap[marker][hi][haplotype]); + + /* //possible improvement, take the sum of two best scores + double f = Q[phase] + hap[marker][hi][0]; + double f2 = Double.NEGATIVE_INFINITY; + for (int haplotype = 1; haplotype < 4; ++haplotype) { + double nf = Q[haplotype ^ phase] + hap[marker][hi][haplotype]; + if (nf > f) { + f2 = f; + f = nf; + } else + f2 = Math.max(f2, nf); + } + //retPhase[phase] = f + Misc.getLookup(f - f2);//Misc.LogSumFast(f,f2) + */ + retPhase[phase] += f; + } + } + //System.err.println(retPhase1[0] + "\t" + retPhase1[1] + "\t" + retPhase1[2] + "\t" + retPhase1[3]); + if (phasedData) + ret += retPhase[0]; + else if (selfingPhase) + ret += Math.max(retPhase[0], retPhase[3]); + else + ret += Math.max(Math.max(Math.max(retPhase[0], retPhase[1]), retPhase[2]), retPhase[3]); + } + //System.err.println("score = " + ret); + if (pfs != null) + for (PhysicalFamily pf : pfs) + ret += pf.score(marker, position); + return ret; + } + + + private static int perm4[][] = Misc.permutation(4); + private static int perm4_s[][] = Misc.prunePermutation1(perm4); + private static int perm5[][] = Misc.permutation(5); + private static int perm5_s[][] = Misc.prunePermutation1(perm5); + + + final double IMPROVE_TOLERANCE = 0.001; + + //check if distance between two positions is higher than DISTANCE_LIMIT, handles parameter identicalLimit in OrderMarkers2 + private boolean distanceHigher(int pos1, int pos2) + { + double d = 0.0; + + //distance based on physical family + if (pfs != null) { + for (PhysicalFamily pf : pfs) { + double pd = pf.scoreDistance(pos1, pos2); + if (pd != 0) + d += (1.0 - Math.exp(pd)); // is pd is between 0 and 1? + } + } + if (d > DISTANCE_LIMIT) + return true; + + for (float ind[][] : qTables) { + double maxD = 0.0; + for (int j = 0; j < 4; ++j) { + double i1 = ind[pos1][j]; + double i2 = ind[pos2][j]; + if (i1 != i2) + maxD = Math.max(maxD, Math.abs(Math.exp(i1) - Math.exp(i2))); + } + d += maxD; + if (d > DISTANCE_LIMIT) + return true; + } + return false; + } + + private ArrayList getUniquePositions(ArrayList markers) { + int numMarkers = markers.size(); + ArrayList phasedHaplotypes = getPhasedHaplotypes(markers, true, false); + + ArrayList positions = new ArrayList(); + + int lastPos = 0; + while (lastPos < numMarkers) { + int nextPos = lastPos + 1; + int delta = 0; + while (nextPos < numMarkers) { + for (int ph[][] : phasedHaplotypes) { + int phh[] = ph[nextPos]; + delta += phh[phh.length - 1] + phh[phh.length - 2]; + } + if (delta > 0) + break; + ++nextPos; + } + positions.add((nextPos + lastPos + 1) / 2); + lastPos = nextPos; + } + return positions; + } + + + private ArrayList getPositions(ArrayList markers) { + return getPositions(markers, null); + } + + private ArrayList getPositions(ArrayList markers, ArrayList> markersInNearestBin) { + int n = markers.size(); + ArrayList ret = new ArrayList(); + + //int numPos = 1; + int prev = 0; + ret.add(0); + for (int i = 1; i <= n; ++i) + if (i == 1 || i >= n - 1 || distanceHigher(prev, i)) { + if (markersInNearestBin != null) + for (int mi = prev; mi < i; ++mi) + markersInNearestBin.get(prev + 1).add(markers.get(mi)); + ret.add(i); + prev = i; + //++numPos; + } + //System.err.println("numPos = " + ret.size() + "/" + (n + 1)); + + return ret; + } + + + private class polishThread implements Runnable { + ArrayList positions; + ArrayList markers; + int m1; + int m2; + int ret[]; + + public polishThread(ArrayList positions, ArrayList markers, int m1, int m2, int ret[]) { + this.ret = ret; + this.m1 = m1; + this.m2 = m2; + this.markers = markers; + this.positions = positions; + } + @Override + public void run() { + for (int mi = m1; mi < m2; ++mi) { + int m = markers.get(mi); + int maxPos = 0; + double maxScore = Double.NEGATIVE_INFINITY; + + for (int p : positions) { + double s = score(m, p); + if (s > maxScore) { + maxScore = s; + maxPos = p; + } + } + ret[mi] = maxPos; + } + + } + + } + + private ArrayList polishTest(ArrayList markers) + { + double ll = likelihood(markers, true); // to store tables, used in merge... + + //System.err.println("score = " + ll); + + ArrayList positions = getPositions(markers); + + int numMarkers = markers.size(); + + ArrayList> order = new ArrayList>(); + for (int i = 0; i <= numMarkers; ++i) + order.add(new ArrayList()); + + int numPositions = positions.size(); + + int nt = (int) calcNumThreadsPolish(numMarkers, numPositions, qTables.length); + + if (nt <= 1) { + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + int maxPos = 0; + double maxScore = Double.NEGATIVE_INFINITY; + for (int p: positions) { + double s = score(m, p); + if (s > maxScore) { + maxScore = s; + maxPos = p; + } + //System.err.print(s + "\t"); + } + order.get(maxPos).add(m); + //System.err.println(maxPos); + //System.err.println(); + } + } else { //parallel implementation + //System.err.println(nt + " threads and " + numMarkers + " markers and " + numPositions + " positions"); + int ret[] = new int[numMarkers]; + + Thread threads[] = new Thread[nt]; + + for (int t = 0; t < nt; ++t) { + threads[t] = new Thread(new polishThread(positions, markers, t * markers.size() / nt, (t + 1) * markers.size() / nt, ret)); + threads[t].start(); + } + try { + for (int t = 0; t < nt; ++t) + threads[t].join(); + + } catch (Exception e) { + e.printStackTrace(); + Error.error(-99999999); + System.exit(-1); + } + for (int mi = 0; mi < numMarkers; ++mi) { + int m = markers.get(mi); + order.get(ret[mi]).add(m); + } + } + + markers.clear(); + for (int i = 0; i <= numMarkers; ++i) + markers.addAll(order.get(i)); + + return markers; + } + + private static int perm_all[][][] = + {Misc.prunePermutation2(Misc.permutation(3)), Misc.prunePermutation2(Misc.permutation(4)), Misc.prunePermutation2(Misc.permutation(5))}; + + private ArrayList bestOrder(ArrayList markers) { + int n = markers.size(); + int perm[][] = null; + if (n > 5 || n <= 2) + return markers; + else { + perm = perm_all[n - 3]; + } + + ArrayList markers2 = new ArrayList(); + markers2.addAll(markers); + + double maxL = Double.NEGATIVE_INFINITY; + int maxpi = 0; + int numSolutions = 0; + for (int pi = 0; pi < perm.length; ++pi) { + int p[] = perm[pi]; + for (int i = 0; i < n; ++i) + markers2.set(i, markers.get(p[i])); + double ll = score(markers2); + //System.err.println(ll + "\t" + markers2); + if (ll > maxL - IMPROVE_TOLERANCE) { + if (ll > maxL + IMPROVE_TOLERANCE) + numSolutions = 1; + else + ++numSolutions; + if (Misc.random() <= 1.0 / numSolutions) + maxpi = pi; + maxL = Math.max(ll, maxL); + } + } + for (int i = 0; i < n; ++i) + markers2.set(i, markers.get(perm[maxpi][i])); + + return markers2; + } + + private ArrayList polishFast(ArrayList markers, int permFirst[][], int permSecond[][]) + { + return polishFast(markers, permFirst, permSecond, 1.0); + } + + private ArrayList polishFast(ArrayList markers, int permFirst[][], int permSecond[][], double rate) + { + int numMarkers = markers.size(); + + int k = permFirst[0].length; + + if (k > numMarkers) + return markers; + + int tmp[] = new int[k]; + int tmp2[] = new int[k]; + + double logL = score(markers); + //if (k != 4) + if (rate == 1.0) + System.err.println("score = " + logL); + + for (SingleFamily sf : sfs) // calculate forward tables... + sf.calcForward(markers); + + for (SingleFamily sf : sfs) // init backward tables... + sf.initBackward(numMarkers & 1); + + for (int i = numMarkers - k; i >= 0; --i) { + + + double maxL = Double.NEGATIVE_INFINITY; + int numSolutions = 0; + int perm[][] = (i == numMarkers - k) ? permFirst : permSecond; + for (int pi = 0; pi < perm.length; ++pi) { + int p[] = perm[pi]; + + for (int j = 0; j < k; ++j) { + tmp[j] = markers.get(i + p[j]); + } + + double ll = 0.0; + for (SingleFamily sf : sfs) // calculate polish tables... + ll += sf.polishScore(tmp, i); + + if (pfs != null) + for (PhysicalFamily pf : pfs) + ll += pf.polishScore(tmp, i, markers); + + if (ll >= maxL - IMPROVE_TOLERANCE) { + if (ll >= maxL + IMPROVE_TOLERANCE) + numSolutions = 1; + else + ++numSolutions; + if (Misc.random() <= 1.0 / numSolutions) { + for (int j = 0; j < k; ++j) + tmp2[j] = tmp[j]; + } + maxL = Math.max(ll, maxL); + } + while (rate < 1.0 && Misc.random() > rate) // skip with prob 1-rate + ++pi; + } + for (int j = 0; j < k; ++j) { + markers.set(i + j, tmp2[j]); + } + + for (SingleFamily sf : sfs) {// calculate polish tables... + sf.recScale.update(tmp2, i); // update recombination scaler + sf.updateBackward(i + k - 1, 1, markers); + } + + } + + ArrayList markersRet = new ArrayList(); + for (int m = 0; m < numMarkers; ++m) + markersRet.add((markers.get(m))); + + return markersRet; + } + + + private class MergeClass{ + private ArrayList positions = null; + private ArrayList markers = null; + + private int numPositions = 0; + private int numMarkers = 0; + + double f1[] = null; + double f2[] = null; + + double b1[] = null; + double b2[] = null; + + private ArrayList> ret = null; + + ParallelScoreCalculator psc; + + private class ParallelScoreCalculator{ + double scores[] = null; + int p1, p2, m1, m2, pos; + int currentP, currentM; + int nt; + long numCalculated; + boolean backward; + + private class UpdateScoreThread implements Runnable{ + int currentP, currentM, start, end; + + UpdateScoreThread(int start, int end, int currentP, int currentM) { + this.currentM = currentM; + this.currentP = currentP; + this.start = start; + this.end = end; + } + + + @Override + public void run() + { + if (backward) { + out:while (currentP >= p1) { + while (currentM >= m1) { + scores[start++] = score(markers.get(currentM), positions.get(currentP)); + --currentM; + if (start >= end) + break out; + } + currentM = m2 - 1; + --currentP; + } + } else { + out:while (currentP < p2) { + while (currentM < m2) { + scores[start++] = score(markers.get(currentM), positions.get(currentP)); + ++currentM; + if (start >= end) + break out; + } + currentM = m1; + ++currentP; + } + } + } + } + + public ParallelScoreCalculator() { + scores = scoresM; + } + + private void updateScores() + { + pos = 0; + int numElements = (int) Math.min(scores.length, ((long) (m2 - m1)) * (p2 - p1) - numCalculated); + numCalculated += numElements; + this.nt = calcNumThreadsScore(m2 - m1, p2 - p1, qTables.length, numElements); + + if (nt <= 1) { // nt <= 1 + int i = 0; + if (backward) { + out:while (currentP >= p1) { + while (currentM >= m1) { + scores[i++] = score(markers.get(currentM), positions.get(currentP)); + --currentM; + if (i >= scores.length) + break out; + } + currentM = m2 - 1; + --currentP; + } + } else { + out:while (currentP < p2) { + while (currentM < m2) { + scores[i++] = score(markers.get(currentM), positions.get(currentP)); + ++currentM; + if (i >= scores.length) + break out; + } + currentM = m1; + ++currentP; + } + } + } else { + //System.err.println(nt + " threads in merge " + numMarkers + " markers and " + numPositions + " positions "); + //if ((m2 - m1) * (p2 - p1) > scores.length) + // System.err.println("split " + currentP + " " + currentM + " (" + p1 + "," + p2 + ") " + "(" + m1 + "," + m2 + ") " + scores.length); + + Thread threads[] = new Thread[nt]; + + for (int t = 0; t < nt; ++t) { + int start = t * numElements / nt; + int end = (t + 1) * numElements / nt; + threads[t] = new Thread(new UpdateScoreThread(start, end, currentP, currentM)); + threads[t].start(); + if (backward) { + currentM -= (end - start) % (m2 - m1); + currentP -= (end - start) / (m2 - m1); + if (currentM < m1) { + currentM += m2 - m1; + --currentP; + } + } else { + currentM += (end - start) % (m2 - m1); + currentP += (end - start) / (m2 - m1); + if (currentM >= m2) { + currentM -= m2 - m1; + ++currentP; + } + } + } + try { + for (int t = 0; t < nt; ++t) + threads[t].join(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + + public void setArea(int p1, int p2, int m1, int m2, boolean backward) + { + this.p1 = p1; + this.p2 = p2; + this.m1 = m1; + this.m2 = m2; + this.backward = backward; + this.numCalculated = 0; + + if (backward) { + currentP = p2 - 1; + currentM = m2 - 1; + } else { + currentP = p1; + currentM = m1; + } + updateScores(); + //nt = scores.length / (m2 - m1); + } + + public double getNextScore(){ + if (pos >= scores.length) { + updateScores(); + } + return scores[pos++]; + } + } + + + MergeClass(ArrayList markers1, ArrayList markers2) { + markers = markers2; + + ret = new ArrayList>(); // there might be an overhead of creating this... + + ret.add(new ArrayList()); // first place + for (int m : markers1) { + ret.add(new ArrayList()); + //ret.get(ret.size() - 1).add(m); + } + positions = getPositions(markers1, ret); + //System.err.println("Hiphei"); + + numPositions = positions.size(); + numMarkers = markers.size(); + + f1 = forwardM1;//new double[numMarkers]; + f2 = forwardM2;//new double[numMarkers]; + b1 = backwardM1;//new double[numMarkers]; + b2 = backwardM2;//new double[numMarkers]; + + psc = new ParallelScoreCalculator(); + + } + + //boolean print = true; + //double tmpscore = 0.0; + + public ArrayList merge() + { +// print = true; +// tmpscore = 0.0; + + merge(0, numPositions, 0, numMarkers); +// System.err.println(tmpscore); + + ArrayList ret2 = new ArrayList(); + for (ArrayList l : ret) + ret2.addAll(l); + + //System.err.println(numPositions + "\t" + ret2); + + + return ret2; + } + + public void merge(int p1, int p2, int m1, int m2) + { + if (m2 <= m1) // no markers + return; + if (p2 - p1 <= 1) { // only one position + assert(p2 - p1 == 1); + int pos = positions.get(p1); + for (int j = m1; j < m2; ++j) { + ret.get(pos).add(markers.get(j)); + // tmpscore += score(markers.get(j), pos); + } + return; + } + + int mid = (p1 + p2) / 2; + + double f[] = calcMergeForward_old(p1, mid, m1, m2); + double b[] = calcMergeBackward_old(mid, p2, m1, m2); + double max = Double.NEGATIVE_INFINITY; + int midMarker = 0; + + int numSolutions = 0; + + for (int j = m1 - 1; j < m2; ++j) { + double r = 0.0; + if (j >= m1) + r = f[j]; + if (j < m2 - 1) + r += b[j + 1]; + if (r > max - IMPROVE_TOLERANCE) { + if (r > max + IMPROVE_TOLERANCE) { + numSolutions = 1; + midMarker = j; + } else { + ++numSolutions; + if (Misc.random() <= 1.0 / numSolutions) + midMarker = j; + } + max = Math.max(r, max); + } + } +// if (print) { +// System.err.println("mid = " + mid + "," + midMarker + " score = " + max); +// print = false; +// } + //System.err.println("mid = " + mid + "," + midMarker + " score = " + max); + //calcMergeForward_old(p1, p2, m1, m2); + + + merge(p1, mid, m1, midMarker + 1); + merge(mid, p2, midMarker + 1, m2); + } + + private double[] calcMergeForward_old(int p1, int p2, int m1, int m2) + { + psc.setArea(p1, p2, m1, m2, false); + + double prevRow[] = f1; + double row[] = f2; + + for (int j = m1; j < m2; ++j) + prevRow[j] = Double.NEGATIVE_INFINITY; + + for (int i = p1; i < p2; ++i) { + //row[m1] = Math.max(prevRow[m1], score(markers.get(m1), positions.get(i))); + row[m1] = Math.max(prevRow[m1], psc.getNextScore()); + + for (int j = m1 + 1; j < m2; ++j) { + double v1 = prevRow[j]; + //double v2 = row[j - 1] + score(markers.get(j), positions.get(i)); + double v2 = row[j - 1] + psc.getNextScore(); + if (v1 > v2) { + row[j] = v1; + } + else { + row[j] = v2; + } + + } + double tmp[] = prevRow; + prevRow = row; + row = tmp; + } + //System.err.println("Merge score = " + prevRow[m2 - 1]); + return prevRow; + } + + private double[] calcMergeBackward_old(int p1, int p2, int m1, int m2) + { + psc.setArea(p1, p2, m1, m2, true); + + double prevRow[] = b1; + double row[] = b2; + + for (int j = m1; j < m2; ++j) + prevRow[j] = Double.NEGATIVE_INFINITY; + + for (int i = p2 - 1; i >= p1; --i) { + //row[m2 - 1] = Math.max(prevRow[m2 - 1], score(markers.get(m2 - 1), positions.get(i))); + row[m2 - 1] = Math.max(prevRow[m2 - 1], psc.getNextScore()); + + for (int j = m2 - 2; j >= m1; --j) { + double v1 = prevRow[j]; + //double v2 = row[j + 1] + score(markers.get(j), positions.get(i)); + double v2 = row[j + 1] + psc.getNextScore(); + if (v1 > v2) { + row[j] = v1; + } + else { + row[j] = v2; + } + } + double tmp[] = prevRow; + prevRow = row; + row = tmp; + } + //System.err.println("Merge score = " + prevRow[m1]); + return prevRow; + } + + + + +/* private double[] calcMergeForward_wrong(int p1, int p2, int m1, int m2) + { + int nt = calcNumThreads(p2 - p1, m2 - m1); + if (nt <= 1) + return calcMergeForward_old(p1, p2, m1, m2); + + for (int i = p1; i < p2; ++i) + currentPosition[i] = -1; + + if (p1 > 0) + currentPosition[p1 - 1] = Integer.MAX_VALUE; + + for (int j = m1; j < m2; ++j) + f2[j] = Double.NEGATIVE_INFINITY; + + Thread threads[] = new Thread[nt]; + + MergeRow ret = null; + + int rett = (p2 - p1 - 1) % nt; + + for (int t = 0; t < nt; ++t) { + MergeRow mt = new MergeRow(p1 + t, p2, m1, m2, nt, ((t & 1) == 0) ? f1 : f2, ((t & 1) == 0) ? f2 : f1, false); + threads[t] = new Thread(mt); + threads[t].start(); + if (t == rett) + ret = mt; + } + try { + for (int t = 0; t < nt; ++t) + threads[t].join(); + return ret.getLastLine(); + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + }*/ + + } + + + + private ArrayList merge(ArrayList markers1, ArrayList markers2) { + MergeClass mc = new MergeClass(markers1, markers2); + //System.err.println(markers1 + "|" + markers2); + + //System.err.println(mc.merge()); + //System.err.println(merge_old(markers1, markers2)); + + //return merge_old(markers1, markers2); + return mc.merge(); + } + + + //TODO: backtrack in linear space..., now path stores |M1|*(|M2| + 1) booleans (bytes), done + private ArrayList merge_old(ArrayList markers1, ArrayList markers2) + { + ArrayList positions = getPositions(markers1); + //int numM1 = markers1.size(); + int numM2 = markers2.size(); + boolean path[][] = new boolean[numM2][positions.size()]; + + double prevRow[] = new double[positions.size()]; + double row[] = new double[positions.size()]; + + for (int j = 0; j < numM2; ++j) { + double v = score(markers2.get(j), positions.get(0)); + path[j][0] = true; + row[0] = prevRow[0] + v; + + for (int i = 1; i < positions.size(); ++i) { + double v1 = prevRow[i] + score(markers2.get(j), positions.get(i)); + double v2 = row[i - 1]; + if (v1 > v2 || (v1 == v2 && Misc.random() < 0.5)) { + row[i] = v1; + path[j][i] = true; + } + else { + row[i] = v2; + path[j][i] = false; + } + + } + double tmp[] = prevRow; + prevRow = row; + row = tmp; + } + //System.err.println("Merge score = " + prevRow[positions.size() - 1]); + ArrayList ret = new ArrayList(); + + int prevPosI = markers1.size() - 1; + int i = positions.size() - 1; + int j = numM2 - 1; + + while (i > 0 || j >= 0) { + if (j >= 0 && path[j][i]) { + ret.add(markers2.get(j)); + --j; + } + else { + --i; + for (int k = prevPosI; k >= positions.get(i); --k) + ret.add(markers1.get(k)); + prevPosI = positions.get(i) - 1; + + } + } + return ret; + } + + //private int totalMarkers = 0; + + private ArrayList fastOrder(ArrayList markers, boolean permutate) + { + int numM = markers.size(); + int perm[] = Misc.randomPermutation(numM); + ArrayList m = new ArrayList(); + for (int i = 0; i < numM; ++i) + if (permutate) + m.add(markers.get(perm[i])); + else + m.add(markers.get(i)); + + //totalMarkers = numM; + m = fastOrder_(m, 0, numM); + System.err.println(" done"); + + //printOrder(m, -1, System.err); needs marker names + return m; + } + + private double computeE(ArrayList m) + { + int n = m.size(); + int ret1 = 0; + int ret2 = 0; + + for (int i = 0; i < n; ++i) + System.err.print(markerNames.get(m.get(i)) +"\t"); + + for (int i = 0; i < n; ++i) + for (int j = i + 1; j < n; ++j) { + if (markerNames.get(m.get(i)) > markerNames.get(m.get(j))) + ++ret1; + else if (markerNames.get(m.get(i)) < markerNames.get(m.get(j))) + ++ret2; + } + + return ((double)Math.max(ret1, ret2)) / (ret1 + ret2); + } + + private ArrayList fastOrder_(ArrayList markers, int level, int totalMarkers) + { + int numM = markers.size(); + if (numM > 2) { + if (numM <= 5) { + dataScale = Math.min(1.0, fullDataScale * totalMarkers / numM); + markers = bestOrder(markers); + } else { + ArrayList m1 = new ArrayList(); + ArrayList m2 = new ArrayList(); + int r = 0; + for (int i = 0; i < numM; ++i) { + if ((i & 1) == 0) { + r = (int) (Misc.random() * 2); + if (r == 0) + m1.add(markers.get(i)); + else + m2.add(markers.get(i)); + } else { + if (r == 1) + m1.add(markers.get(i)); + else + m2.add(markers.get(i)); + } + +// if ((i & 1) == 0) +// m1.add(markers.get(i)); +// else +// m2.add(markers.get(i)); + } + + m1 = fastOrder_(m1, level + 1, totalMarkers); + m2 = fastOrder_(m2, level + 1, totalMarkers); + dataScale = Math.min(1.0, fullDataScale * totalMarkers / numM); + + //initTmpRec(((double) totalMarkers) / numM); // take into account the fact that subproblems have less markers... + + double ll = likelihood(m1, true); // to store tables, used in merge... + //System.err.println("logL (half) = " + ll); + ArrayList merge1 = merge(m1, m2); + Collections.reverse(m2); + ArrayList merge2 = merge(m1, m2); + + merge2 = polishTest(merge2); + double l2 = score(merge2); + + merge1 = polishTest(merge1); + double l1 = score(merge1); + + if (l1 >= l2 || Double.isNaN(l2)) { // NaN check to be safe... + markers = merge1; + //System.err.println("logL = " + l1 + " merge1 (" + l2 + ") n=" + numM); + //System.err.print(l1 + "\t" + l2 + "\t"); + } + else { + markers = merge2; + } + if (numM <= 32) + markers = polishFast(markers, perm4, perm4_s, 1.1); //with this extra polish we get more accurate maps but it takes a long time... + } + } + if (level <= 3) + System.err.print((1 << level)); + //System.err.println("Test\t" + computeE(markers)); + return markers; + } + + + private double bestScore = 0; + private boolean refineParentOrder; + public double getBestScore() + { + return bestScore; + } + + public ArrayList findOrder(boolean findInitialOrder) + { + ArrayList ret = new ArrayList(); + ArrayList markers = new ArrayList(); + for (int i = 0; i < numOriginalMarkers; ++i) { + markers.add(i); + ret.add(i); + } + bestScore = score(markers); + double s = bestScore; + System.err.println("Initial score = " + bestScore); + + for (int it = 1; it <= numMergeIterations; ++it) { + + System.err.println("Iteration " + it + " of " + numMergeIterations); + markers = fastOrder(markers, (it == 1) && findInitialOrder); + System.err.println("Polishing map..."); + + markers = polishFast(markers, perm4, perm4_s); // no need if polishFast is called in fastOrder + s = score(markers); + if (s > bestScore) { + System.err.print("*"); + bestScore = s; + for (int i = 0; i < numOriginalMarkers; ++i) + ret.set(i, markers.get(i)); + } + System.err.println("score = " + s); + markers = polishTest(markers); + markers = polishFast(markers, perm5, perm5_s); + s = score(markers); + + //System.err.println("Test\t" + markers + "\t" + computeE(markers) + "\t" + score(markers)); + + if (s > bestScore) { + System.err.print("*"); + bestScore = s; + for (int i = 0; i < numOriginalMarkers; ++i) + ret.set(i, markers.get(i)); + } else if (Misc.random() < 0.75) { + for (int i = 0; i < numOriginalMarkers; ++i) + markers.set(i, ret.get(i)); + } + System.err.println("score = " + s); + + } + + //System.err.println("Final polishing..."); + //ret = polish(ret, perm4first, perm4); + //bestScore = score(ret); + + //improveOrder(ret, 5 * markers.size(), true); + System.err.println("Final score = " + bestScore); + + return ret; + } + + private double computeLOD(float q1[], float q2[], int phase) + { + double f = -23.0; + double sum1 = 1e-10; + double sum2 = 1e-10; + for (int haplotype = 0; haplotype < 4; ++haplotype) { + double q12 = q1[haplotype] + q2[haplotype ^ phase]; + f = Math.max(f, q12); + sum1 += Math.exp(q1[haplotype]); + sum2 += Math.exp(q2[haplotype]); + } + return 4.0 * Math.exp(f) / (sum1 * sum2); + } + + //TODO: Could be more efficient by using StringBuilder + public void printLOD(ArrayList markers, PrintStream stream) + { + //ArrayList markers = new ArrayList(); + //for (int i = 0; i < numMarkers; ++i) + // markers.add(i); + + double ll = likelihood(markers, true); // to store tables, used in merge... + //System.err.println("score = " + ll); + ArrayList positions = this.getUniquePositions(markers);//getPositions(markers); + + int numF = originalHaplotypes.size(); + + stream.print("position"); + for (int i = 0; i < positions.size(); ++i) + stream.print("\tpos_" + i); + stream.println(); + + for (int i = 0; i < markers.size(); ++i) { + stream.print("pos_" + i); + for (int j = 0; j < positions.size(); ++j) { + int fi = 0; + double loglod2 = 0.0; + for (int fam = 0; fam < numF; ++fam) { + int numIndividuals = sfs[fam].numIndividuals; + double maxLogLod = Double.NEGATIVE_INFINITY; + for (int phase = 0; phase < 4; ++phase){ + double lod = 1.0; + double loglod = 0.0; + for (int hi = 0; hi < numIndividuals; ++hi) { + float Q1[] = originalHaplotypes.get(fam)[i][hi];//qTables[fi][positions.get(i)]; + float Q2[] = qTables[fi + hi][positions.get(j)]; + lod *= computeLOD(Q1, Q2, phase); + if (hi == numIndividuals - 1 || (hi & 15) == 15) { + loglod += Math.log10(lod); + lod = 1.0; + } + } + maxLogLod = Math.max(maxLogLod, loglod); + } + loglod2 += maxLogLod; + fi += numIndividuals; + } + stream.print("\t" + loglod2); + } + stream.println(); + } + } + + //TODO: Could be more efficient by using StringBuilder + public void printIntervals(ArrayList markers, PrintStream stream, double limit) + { + //ArrayList markers = new ArrayList(); + //for (int i = 0; i < numMarkers; ++i) + // markers.add(i); + int numMarkers = markers.size(); + + double ll = likelihood(markers, true); // to store tables, used in merge... + ArrayList phasedHaplotypes = getPhasedHaplotypes(markers, true, false); + + ArrayList positions = new ArrayList(); + ArrayList recombinations = new ArrayList(); + + int lastPos = 0; + int recombinationPos = 0; + while (lastPos < numMarkers) { + int nextPos = lastPos + 1; + int delta = 0; + while (nextPos < numMarkers) { + for (int ph[][] : phasedHaplotypes) { + int phh[] = ph[nextPos]; + delta += phh[phh.length - 1] + phh[phh.length - 2]; + } + if (delta > 0) + break; + ++nextPos; + } + positions.add((nextPos + lastPos + 1) / 2); + recombinations.add(recombinationPos); + recombinationPos += delta; + lastPos = nextPos; + } + + int numPositions = positions.size(); + for (int marker = 0; marker < numMarkers; ++marker) { + stream.print((markerNames.get(marker) + 1)); + double maxLod = Double.NEGATIVE_INFINITY; + for (int p = 0; p < numPositions; ++p) + maxLod = Math.max(maxLod, score(marker, positions.get(p))); + + int p = 0; + while (p < numPositions) { + while (p < numPositions && score(marker, positions.get(p)) < maxLod - limit) { + ++p; + } + if (p < numPositions) { + stream.print("\t" + recombinations.get(p)); + while (p < numPositions && score(marker, positions.get(p)) >= maxLod - limit) { + ++p; + } + stream.print("\t" + recombinations.get(p - 1)); + } + } + stream.println(); + + } + + //TODO: continue... + + + //System.err.println("score = " + ll); + + //stream.println(); + } + + + +/* public void refineParents(ArrayList markers, boolean unknownOrder[][]) { + + //for (SingleFamily sf : sfs) + // sf.refineParents(markers, unknownOrder[sf.getFamilyIndex()]); + + + //00,01,10,11 => 00,10,01,11 + //XX XX + //XX XX + int numF = sfs.length; + int numM = markers.size(); + for (int f = 0; f < numF; ++f) { + float[][][] hap = originalHaplotypes.get(fam); + double ll = sfs[f].phase(markers); + for (int mi = 0; mi < numM; ++mi) { + if (unknownOrder[f][mi]) { + swap(mi); // or swapParents(markers.get(mi)); + double llnew = sfs[f].phase(markers); + if (llnew <= ll) + swapParents(mi); // or swapParents(markers.get(mi)); + } + } + System.err.println(sfs[f].numIndividuals); + } + //TODO: add code to figure parental genotypes... + private void refineParents(ArrayList order) + { + ArrayList markers = new ArrayList(); + for (int m1 : order) { + boolean informative = false; + for (Family2 f : data.getFamilies()) + if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) + informative = true; + if (informative) + markers.add(m1); + } + + System.err.println("Refining parents: number of markers = " + markers.size()); + + ArrayList markers2 = new ArrayList(); + boolean unknownOrder[][] = new boolean[data.getNumFamilies()][data.getNumMarkers()]; + for (int mi = 0; mi < markers.size(); ++mi) { + int m = markers.get(mi); + char ipo[] = data.getIgnoreParentOrder(m); + for (int f = 0; f < data.getNumFamilies(); ++f) + unknownOrder[f][mi] = (ipo[f] == '+'); + markers2.add(mi); + } + + of.setHaplotypes(processHaplotypes(markers), informativeMarkers(markers), data, markers); + of.refineParents(markers2, unknownOrder); + } + }*/ + + public void setRefineParentOrder(boolean value) { + refineParentOrder = value; + } + public boolean getRefineParentOrder() { + return refineParentOrder; + } + + +/* public static void main(String args[]) + { + OrderFinder of = new OrderFinder(10); + of.testThreads(); + System.err.println("finished"); + }*/ +} diff --git a/software/LepMap3/lm3/src/OrderMarkers2.java b/software/LepMap3/lm3/src/OrderMarkers2.java new file mode 100644 index 0000000..4cc1043 --- /dev/null +++ b/software/LepMap3/lm3/src/OrderMarkers2.java @@ -0,0 +1,176 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2017 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ + +//Errorcodes 3xx +//Command line interface for marker ordering +import java.util.ArrayList; +public class OrderMarkers2 { + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(301); + String extraParameters = ""; + for (int i = 0; i < args.length; ++i) { + extraParameters += " " + args[i]; + } + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(301); + + pp.warning(new String[]{"refineParentOrder", "maskIgnoreParentOrder", "calculateIntervals", "data", "informativeMask", "useKosambi", "useMorgan", "improveOrder", "evaluateOrder", "map", "numThreads", "numMergeIterations", "chromosome", "scale", "scaleMode", "minError", "outputPhasedData", "removeMarkers", "sexAveraged", "phasedData", "recombination1", "recombination2", "interference1", "interference2", "identicalLimit", "computeLODScores", "randomPhase", "randSeed", "grandparentPhase", "hyperPhaser", "phasingIterations", "selfingPhase", "families", "usePhysical"}); + + if (pp.getValueAsString("randSeed", null) != null) + Misc.setSeed(Long.parseLong(pp.getValueAsString("randSeed", null))); + else + extraParameters += " randSeed=" + Misc.getSeed(); + + System.out.println("#java OrderMarkers2" + extraParameters); + + Order o3 = new Order(); + Data2 data = new Data2(); + LGMap2 lgm = null; + + if (pp.getValueAsString("useKosambi", "0").equals("1")) + o3.setKosambi(); + else if (pp.getValueAsString("useMorgan", "0").equals("1")) + o3.setMorgan(); + o3.setNumThreads(Integer.parseInt(pp.getValueAsString("numThreads", "1"))); + o3.setNumMergeIterations(Integer.parseInt(pp.getValueAsString("numMergeIterations", "6"))); + o3.setSexAveraged(pp.getValueAsString("sexAveraged", "0").equals("1")); + + double r1 = Double.parseDouble(pp.getValueAsString("recombination1", "0.001")); + double r2 = Double.parseDouble(pp.getValueAsString("recombination2", "0.001")); + double i1 = Double.parseDouble(pp.getValueAsString("interference1", "0.001")); + double i2 = Double.parseDouble(pp.getValueAsString("interference2", "0.001")); + o3.setRecombination(r1, r2, i1, i2); + + o3.setIdenticalLimit(Double.parseDouble(pp.getValueAsString("identicalLimit", "0.01"))); + + o3.setUsePhysical(Integer.parseInt(pp.getValueAsString("usePhysical", 0, "0")), Double.parseDouble(pp.getValueAsString("usePhysical", 1, "0.01"))); + + System.err.println(pp.getValueAsString("usePhysical", 0, "0")); + System.err.println(pp.getValueAsString("usePhysical", 1, "0.01")); + + String chr = pp.getValueAsString("chromosome", null); + String mapFile = pp.getValueAsString("map", null); + boolean mask[] = null; + if (mapFile != null) { + lgm = new LGMap2(); + if (!lgm.loadLGMap(mapFile)) + Error.error(302); + + int numMarkers = lgm.getNumMarkers(); + mask = new boolean[numMarkers];// make a mask to skip unnecessary markers + int chromosome = (chr == null) ? -1 : Integer.parseInt(chr); + for (int i = 0; i < numMarkers; ++i) { + int lg = lgm.getLGName(i); + if (lg != 0 && (chromosome < 0 || chromosome == lg)) + mask[i] = true; + } + + } + + String filename = pp.getValueAsString("data", null); + if (filename == null) + Error.error(301); + + boolean gpPhase = false; + if (pp.getValueAsString("grandparentPhase", "0").equals("1")) { + gpPhase = true; + //System.err.println("Error:grandparentPhase not yet implemented"); + //System.exit(-1); + } + + data.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123"), mask, gpPhase); //somehow input gpPhase + + if (lgm == null) + lgm = new LGMap2(data.getNumMarkers()); + + o3.init(data, lgm); + + + String dataScale = pp.getValueAsString("scale", 0, "M/N"); + + double maxDataScale = Double.parseDouble(pp.getValueAsString("scale", 1, "2")); + double capDataScale = Double.parseDouble(pp.getValueAsString("scale", 2, "" + maxDataScale)); + //data.scale(dataScale); + double minError = Double.parseDouble(pp.getValueAsString("minError", "0.001")); + data.setMinError(minError); + + data.setPhasedData(pp.getValueAsString("phasedData", "0").equals("1") || gpPhase); + + if (pp.getValueAsString("randomPhase", "0").equals("1")) + data.setRandomPhase(); + + if (pp.getValueAsString("selfingPhase", "0").equals("1")) + o3.setSelfingPhase(true); + + o3.setDataScale(dataScale, maxDataScale, capDataScale, Integer.parseInt(pp.getValueAsString("scaleMode", "2"))); + + o3.setHyperPhaser(pp.getValueAsString("hyperPhaser", "0").equals("1")); + o3.setPhasingIterations(Integer.parseInt(pp.getValueAsString("phasingIterations", "1"))); + + for (int m = 0; m < pp.getNumberOfValues("removeMarkers"); ++m) + data.removeMarker(Integer.parseInt(pp.getValueAsString("removeMarkers", m, "0")) - 1); + + if (pp.getNumberOfValues("families") > 0) { + ArrayList f = pp.getValue("families"); + data.keepFamilies(f); + } + + boolean maskParentOrder = pp.getValueAsString("maskIgnoreParentOrder", "0").equals("1"); + if (maskParentOrder) + data.maskIgnoreParentOrder(); + + + String orderFile = pp.getValueAsString("evaluateOrder", null); + boolean refineParentOrder = pp.getValueAsString("refineParentOrder", "0").equals("1"); + if (refineParentOrder && (maskParentOrder || gpPhase)) + Error.error(305); + + o3.setRefineParentOrder(refineParentOrder); + + o3.setPrintPhased(Integer.parseInt(pp.getValueAsString("outputPhasedData", "1"))); + if (orderFile != null) { + o3.evaluateOrder(orderFile, pp.getValueAsString("improveOrder", "1").equals("1")); + } + else { + if (mapFile == null) + Error.error(303); + if (chr == null) + o3.orderChromosomes(true, pp.getValueAsString("improveOrder", "1").equals("1"), pp.getValueAsString("evaluateIndividualErrors", "0").equals("1")); + else + o3.orderChromosomes(Integer.parseInt(chr), true, pp.getValueAsString("improveOrder", "1").equals("1"), pp.getValueAsString("evaluateIndividualErrors", "0").equals("1")); + } + + if (pp.getValueAsString("computeLODScores", null) != null) { + o3.computeLODScores(pp.getValueAsString("computeLODScores", null)); + } + + if (pp.getValueAsString("calculateIntervals", 0, null) != null) { + double limit = Double.parseDouble(pp.getValueAsString("calculateIntervals", 1, "1.0")); + o3.calculateIntervals(pp.getValueAsString("calculateIntervals", 0, null), limit); + } + + } + +} diff --git a/software/LepMap3/lm3/src/OutputData.java b/software/LepMap3/lm3/src/OutputData.java new file mode 100644 index 0000000..c591a86 --- /dev/null +++ b/software/LepMap3/lm3/src/OutputData.java @@ -0,0 +1,78 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki, University of Cambridge +*/ + +//TODO: Test that String builder works +public class OutputData { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(901); + String extraParameters = ""; + System.out.print("#java OutputData "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(901); + pp.warning(new String[]{"data", "map", "sizeLimit", "lod3Mode", "informativeMask"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); // not possible to set... + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); // not possible to set... + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); // not possible to set... + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + + int numDataFiles = pp.getNumberOfValues("data"); + if (numDataFiles == 0 || numDataFiles > 1) + Error.error(4402); + for (int i = 0; i < numDataFiles; ++i) { + String filename = pp.getValueAsString("data", i, null); + if (filename == null) + Error.error(4403); + sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); + } + + //sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + + LGMap2 map = new LGMap2(); + map.loadLGMap(pp.getValueAsString("map", null)); + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + + sc.joinIdenticalsFast(map);// check how works... + + sc.outputData(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + + + //sep.separateChromosomesLOD2(lodLimit); + //LGMap cm = sep.getLGMap(); + //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + //cm.printLGAssignment(data); + } +} diff --git a/software/LepMap3/lm3/src/ParameterParser.java b/software/LepMap3/lm3/src/ParameterParser.java new file mode 100644 index 0000000..2d38d7c --- /dev/null +++ b/software/LepMap3/lm3/src/ParameterParser.java @@ -0,0 +1,216 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki +*/ +//Parses parameters given as "x=a y=b c d z = e" +import java.util.StringTokenizer; +import java.util.ArrayList; +import java.util.HashMap; + +public class ParameterParser { + private HashMap> hm; + + public ParameterParser() + { + + } + public ParameterParser(String parameters) + { + if (!init(parameters)) + hm = null; + } + + public boolean init(ArrayList tokens) + { + hm = new HashMap>(); + int n = tokens.size(); + int i = 0; + while (i < n) { + String key = tokens.get(i); + if (key.equals("=")) + return false; + ++i; + if (i < n - 1) { + if (!tokens.get(i).equals("=")) + return false; + ++i; + } else + return false; + + ArrayList value = new ArrayList(); + while (i == n - 1 || (i < n - 1 && !tokens.get(i + 1).equals("="))) { + String nv = tokens.get(i); + if (nv.equals("=")) + return false; + value.add(nv); + ++i; + } + if (hm.containsKey(key)) + return false; + hm.put(key, value); + } + return true; + } + public boolean init(String parameters) + { + String delims = "\t =;"; + StringTokenizer st = new StringTokenizer(parameters, delims, true); + + ArrayList tokens = new ArrayList (); + while (st.hasMoreTokens()) { + String nt = st.nextToken(); + if (delims.indexOf(nt) >= 0) { + if (nt.equals("=") || nt.equals(";")) + tokens.add(nt); + } else + tokens.add(nt); + + } + return init(tokens); + } + public ArrayList getValue(String variable) + { + return hm.get(variable); + } + public String getValueAsString(String variable, String defaultValue) + { + ArrayList ret = getValue(variable); + if (ret != null) { + String rets = ""; + for (String s : ret) + rets += " " + s; + return rets.substring(Math.min(1, rets.length())); // remove first space + } + return defaultValue; + } + public int getNumberOfValues(String variable) + { + ArrayList ret = getValue(variable); + if (ret != null) + return ret.size(); + else + return 0; + } + public String getValueAsString(String variable, int index, String defaultValue) + { + ArrayList ret = getValue(variable); + if (ret != null) { + //if (ret.size() == 1 && index >= 0) + //return ret.get(0); + if (index + 1 > ret.size()) // this makes more sense? + return defaultValue; + else + return ret.get(index); + } + return defaultValue; + } + public ArrayList getValuesAsList(String variable) + { + return getValuesAsList(variable, 1, null); + } + + public ArrayList getValuesAsList(String variable, int size, String defaultValue) + { + ArrayList ret = new ArrayList(); + if (getNumberOfValues(variable) == 1 && getValueAsString(variable, null).startsWith("file:")) { + ArrayList> matrix = Input.loadTable(getValueAsString(variable, null).substring(5), "[\t ]"); + if (matrix.size() == 1) + ret.addAll(matrix.get(0)); + if (matrix.size() > 1) { // transpose matrix + ArrayList tp = new ArrayList(); + boolean ok = true; +// System.err.println("Reading matrix"); + for (ArrayList als : matrix) { + if (als.size() != 1) + ok = false; + else + tp.add(als.get(0)); + } + if (ok) + ret.addAll(tp); +// System.err.println("Reading matrix ok" + ok); + } + } else + for (int i = 0; i < getNumberOfValues(variable); ++i) + ret.add(getValueAsString(variable, i, null)); + if (ret.size() == 0) + ret.add(defaultValue); + if (ret.size() == 1) + for (int i = 0; i < size - 1; ++i) + ret.add(new String(ret.get(0))); + return ret; + } + + + public ArrayList> getValuesAsMatrix(String variable) + { + if (getNumberOfValues(variable) == 1 && getValueAsString(variable, null).startsWith("file:")) { +// System.err.println("loading matrix " + getValueAsString(variable, null).substring(5)); + ArrayList> matrix = Input.loadTable(getValueAsString(variable, null).substring(5), "[\t ]"); + return matrix; + } + ArrayList> ret = new ArrayList>(); + if (getNumberOfValues(variable) > 0) + ret.add(new ArrayList()); + int line = 0; + + for (int i = 0; i < getNumberOfValues(variable); ++i) { + if (getValueAsString(variable, i, null).equals(";")) { + ++line; + ret.add(new ArrayList()); + } else + ret.get(line).add(getValueAsString(variable, i, null)); + } + return ret; + } + public boolean warning(String keyWords[]) + { + HashMap hm2 = new HashMap(); + + for (String s : hm.keySet()) + hm2.put(s, 1); + + for (String s : keyWords) + hm2.remove(s); + + if (hm2.size() > 0) { + System.err.println("Error! Unknown parameters: "); + for (String s : hm2.keySet()) + System.err.print(s + " "); + System.err.println(); + System.exit(-1); + } + + return false; + } + + public static void main(String args[]) + { + ParameterParser pp = new ParameterParser("a=40 10 30 b=10 d = 1 2;3 4 6 e=file:ped1"); + System.err.println("a = " + pp.getValue("a")); + System.err.println("b = " + pp.getValue("b")); + System.err.println("c = " + pp.getValue("c")); + System.err.println("d = " + pp.getValue("d")); + System.err.println("number of values for a = " + pp.getNumberOfValues("a")); + System.err.println("number of values for b = " + pp.getNumberOfValues("b")); + System.err.println("number of values for c = " + pp.getNumberOfValues("c")); + System.err.println(pp.getValuesAsList("d")); + System.err.println(pp.getValuesAsMatrix("d")); + System.err.println(pp.getValuesAsMatrix("e")); + } + +} diff --git a/software/LepMap3/lm3/src/ParentCall2.java b/software/LepMap3/lm3/src/ParentCall2.java new file mode 100644 index 0000000..5874d6d --- /dev/null +++ b/software/LepMap3/lm3/src/ParentCall2.java @@ -0,0 +1,1021 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP3. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge +*/ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.InputStreamReader; + +// Posterior aware (subset of) Counts2Genotypes +public class ParentCall2 { + + private final double SMALL = 1e-40; // to avoid problems with zero probabilities + private int numIndividuals = 0; + + private double ZLimit = Double.NEGATIVE_INFINITY; + private double XLimit = Double.NEGATIVE_INFINITY; + private double familyLimit = 2; + + private String names[] = null; + + private boolean ignoreParentOrder = false; + private boolean outputParentPosterior = false; + private boolean halfSibs = false; + + private boolean removeNonInformative = false; + + private ArrayList> families = null; + private ArrayList parentIndex = null; + private ArrayList sex = null; + + private double gpp[][] = new double[6][4]; + + private HashMap familyHash2 = new HashMap(); + + private HashMap> halfSibHash = new HashMap>(); + + private int maxFather; + private int maxMother; + private int maxFather2; + private int maxMother2; + private double maxP; + private double maxP2; + private double maxP3; + + private int numCalledMarkers = 0; + private int numCalledSexMarkers = 0; + private int numInformativeMarkers = 0; + + private DataParser dp = null; + + private boolean outputRaw = false; + + + public void setRaw(boolean value) + { + outputRaw = value; + } + + public void setFamilyLimit(double limit) + { + familyLimit = limit; + } + public void setZLimit(double limit) + { + ZLimit = limit; + } + public void setXLimit(double limit) + { + XLimit = limit; + } + public void setIngnoreParentOrder(boolean value) + { + ignoreParentOrder = value; + //if (ignoreParentOrder) + // System.err.println("ignoreParentOrder is not currently implemented"); + } + public void setRemoveNonInformative(boolean value) + { + removeNonInformative = value; + } + + public void setOutputParentPosterior(boolean value) + { + outputParentPosterior = value; + } + public void setHalfSibs(boolean value) + { + halfSibs = value; + //if (ignoreParentOrder) + // System.err.println("ignoreParentOrder is not currently implemented"); + } + + + //prints also... + public void callParents(String filename, String vcfFile, String posteriorFile, boolean outputLikelihood) { + dp = new DataParser(); + dp.loadFile(filename, vcfFile, posteriorFile); + + ArrayList dl = dp.getNextLine(true); + + families = dp.getFamilies(); + parentIndex = dp.getParentIndex(); + sex = dp.getSex(); + numIndividuals = dp.getNumIndividuals(); + int fam = 0; + for (ArrayList f : families) { + for (int i : f) + familyHash2.put(i, fam); + int[] gp = parentIndex.get(fam); + + // add information about parents to detect half-sibs... + String father = dp.getIndividualName(gp[0]); + String mother = dp.getIndividualName(gp[1]); + if (!halfSibHash.containsKey(father)) + halfSibHash.put(father, new ArrayList()); + if (!halfSibHash.containsKey(mother)) + halfSibHash.put(mother, new ArrayList()); + halfSibHash.get(father).add(gp[0]); + halfSibHash.get(mother).add(gp[1]); + + for (int i : gp) + if (i >= 0) + familyHash2.put(i, fam); + ++fam; + } + for (String parent : halfSibHash.keySet()) + if (halfSibHash.get(parent).size() > 1) { + System.err.print("parent " + parent + " occurs " + halfSibHash.get(parent).size() + " times in the pedigree"); + System.err.println((halfSibs) ? "": " use halfSibs=1 to utilize this information"); + } + while (dl != null) { + //System.err.println(dl); + if (outputRaw) + printRaw(dp.getMarkerName(), dl); + else + callParents(dp.getMarkerName(), dl, outputLikelihood); + dl = dp.getNextLine(true); + } + + System.err.println("Number of called markers = " + numCalledMarkers + " (" + numInformativeMarkers + " informative)"); + System.err.println("Number of called Z/X markers = " + numCalledSexMarkers); + } + private void printResult(String suffix, double output[], int bestMother[], int bestFather[]) + { + //System.out.print(suffix); + StringBuilder sb = new StringBuilder(suffix); + + for (int i = 0; i < numIndividuals; ++i) { + int f = familyHash2.get(i); + int mother = bestMother[f]; + int father = bestFather[f]; + int index = 10 * (numIndividuals * (10 * father + mother) + i); + //System.out.print("\t"); + sb.append('\t'); + double max = SMALL; + for (int j = 0; j < 10; ++j) + max = Math.max(max, output[index + j]); + +/* int fa1 = allele1(father); + int fa2 = allele2(father); + int ma1 = allele1(mother); + int ma2 = allele2(mother); + + System.out.print(output[f][index + mapAlleles(fa1, ma1)] / max + " "); //haplotype 00 + System.out.print(output[f][index + mapAlleles(fa1, ma2)] / max + " "); //haplotype 01 + System.out.print(output[f][index + mapAlleles(fa2, ma1)] / max + " "); //haplotype 10 + System.out.print(output[f][index + mapAlleles(fa2, ma2)] / max); //haplotype 11 +*/ + for (int j = 0; j < 10; ++j) { + if (max == SMALL) + //System.out.print(1); + sb.append('1'); + else { + double r = output[index + j] / max; + if (r == 0.0) + //System.out.print(0); // save some space + sb.append('0'); + else + sb.append(r); + //System.out.print(r); + } + if (j != 9) + sb.append(' '); + //System.out.print(" "); + } + } + System.out.println(sb); + } + + private void printRaw(String suffix, ArrayList dl) + { + StringBuilder sb = new StringBuilder(suffix); + + for (int i = 0; i < numIndividuals; ++i) { + sb.append('\t'); + double max = SMALL; + int index = 10 * i; + for (int j = 0; j < 10; ++j) + max = Math.max(max, dl.get(index + j)); + + for (int j = 0; j < 10; ++j) { + if (max == SMALL) + sb.append('1'); + else { + double r = dl.get(index + j) / max; + if (r == 0.0) + sb.append('0'); + else + sb.append(r); + } + if (j != 9) + sb.append(' '); + } + } + System.out.println(sb); + } + + + private void printResult(String suffix, double output[], double likelihoods[][]) + { + System.out.print(suffix); + for (double ll[] : likelihoods) { // calculate scales for each family + double max = Double.NEGATIVE_INFINITY; + for (int k = 0; k < 100; ++k) + max = Math.max(max, ll[k]); + double sum = 0.0; + for (int k = 0; k < 100; ++k) { + double e = Misc.exp10(ll[k] - max); + ll[k] = e; + sum += e; + } + for (int k = 0; k < 100; ++k) + ll[k] /= sum; + } + + for (int i = 0; i < numIndividuals; ++i) { + int f = familyHash2.get(i); + + double max = SMALL; + for (int j = 0; j < 10; ++j) { + double r = 0.0; + for (int father = 0; father < 10; ++father) + for (int mother = 0; mother < 10; ++mother) { + int index = 10 * (numIndividuals * (10 * father + mother) + i); + double scale = likelihoods[f][10 * father + mother]; + r += scale * output[index + j]; + } + max = Math.max(max, r); + } + System.out.print("\t"); + + for (int j = 0; j < 10; ++j) { + if (max == SMALL) + System.out.print(1); + else { + double r = 0.0; + for (int father = 0; father < 10; ++father) + for (int mother = 0; mother < 10; ++mother) { + int index = 10 * (numIndividuals * (10 * father + mother) + i); + double scale = likelihoods[f][10 * father + mother]; + r += scale * output[index + j]; + } + r = r / max; + if (r == 0.0) + System.out.print(0); // save some space + else + System.out.print(r); + } + if (j != 9) + System.out.print(" "); + } + } + System.out.println(); + } + + private void update_halfSibs(ArrayList posteriors, double likelihoods[][], boolean swapSex) + { + //marginalize parents out from likelihoods + + int numFamilies = likelihoods.length; + + double marginal1[][] = new double[numFamilies][10];//father + double marginal2[][] = new double[numFamilies][10];//mother + for (int fam = 0; fam < numFamilies; ++fam){ + Arrays.fill(marginal1[fam], Double.NEGATIVE_INFINITY); + Arrays.fill(marginal2[fam], Double.NEGATIVE_INFINITY); + } + + for (int iterations = 1; iterations <= 2; ++iterations) + for (int fam = 0; fam < numFamilies; ++fam) { // for each family + double ll[] = likelihoods[fam]; + + ArrayList familyIndex = families.get(fam); + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 1); + int motherIndex = familyIndex.get(numInd - 2); + if ((sex.get(motherIndex) == 1 && !swapSex) || (sex.get(motherIndex) == 2 && swapSex)) { + int tmp = motherIndex; + motherIndex = fatherIndex; + fatherIndex = tmp; + } + if (iterations == 1) { // calculate marginals... + for (int gFather = 0; gFather < 10; ++gFather) + for (int gMother = 0; gMother < 10; ++gMother) { + marginal1[fam][gFather] = Misc.logSum(marginal1[fam][gFather], ll[10 * gFather + gMother] * Constants.LN10); + marginal2[fam][gMother] = Misc.logSum(marginal2[fam][gMother], ll[10 * gFather + gMother] * Constants.LN10); + } + double max1 = Double.NEGATIVE_INFINITY; + double max2 = Double.NEGATIVE_INFINITY; + for (int parent = 0; parent < 10; ++parent) { + marginal1[fam][parent] -= Math.log(SMALL + posteriors.get(10 * fatherIndex + parent)); + marginal2[fam][parent] -= Math.log(SMALL + posteriors.get(10 * motherIndex + parent)); + max1 = Math.max(max1, marginal1[fam][parent]); + max2 = Math.max(max2, marginal2[fam][parent]); + } + for (int parent = 0; parent < 10; ++parent) { + marginal1[fam][parent] -= max1; + marginal2[fam][parent] -= max2; + } + } else { // add marginals to parental genotype likelihoods... + String father = dp.getIndividualName(fatherIndex); + String mother = dp.getIndividualName(motherIndex); + ArrayList parents1 = halfSibHash.get(father); + ArrayList parents2 = halfSibHash.get(mother); + + double logP[] = new double[10]; + for (int gFather = 0; gFather < 10; ++gFather) + logP[gFather] = Math.log(SMALL * 1e-6 + posteriors.get(10 * fatherIndex + gFather)); + double logM[] = new double[10]; + for (int gMother = 0; gMother < 10; ++gMother) + logM[gMother] = Math.log(SMALL * 1e-6 + posteriors.get(10 * motherIndex + gMother)); + + for (int otherFather : parents1) + if (otherFather != fatherIndex) { + int fam2 = familyHash2.get(otherFather); + for (int gFather = 0; gFather < 10; ++gFather) + logP[gFather] += marginal1[fam2][gFather]; + } + for (int otherMother : parents2) + if (otherMother != motherIndex) { + int fam2 = familyHash2.get(otherMother); + for (int gMother = 0; gMother < 10; ++gMother) + logM[gMother] += marginal2[fam2][gMother]; + } + double maxLogP = Double.NEGATIVE_INFINITY; + for (int gFather = 0; gFather < 10; ++gFather) + maxLogP = Math.max(maxLogP, logP[gFather]); + double maxlogM = Double.NEGATIVE_INFINITY; + for (int gMother = 0; gMother < 10; ++gMother) + maxlogM = Math.max(maxlogM, logM[gMother]); + + for (int gFather = 0; gFather < 10; ++gFather) + posteriors.set(10 * fatherIndex + gFather, Math.exp(logP[gFather] - maxLogP)); + for (int gMother = 0; gMother < 10; ++gMother) + posteriors.set(10 * motherIndex + gMother, Math.exp(logM[gMother] - maxlogM)); + } + } + //System.out.println(posteriors); + } + + + public void callParents(String suffix, ArrayList posteriors, boolean outputLikelihood) + { + double lz = Double.NEGATIVE_INFINITY; + double lx = Double.NEGATIVE_INFINITY; + double ll = 0.0; + int numFamilies = families.size(); + + double output1[] = new double[numIndividuals * 10 * 100]; + double output2[] = new double[numIndividuals * 10 * 100]; + + double likelihoods1[][] = new double[numFamilies][100]; + double likelihoods2[][] = new double[numFamilies][100]; + int bestFather[] = new int[numFamilies]; + int bestMother[] = new int[numFamilies]; + int secondBestFather[] = new int[numFamilies]; + int secondBestMother[] = new int[numFamilies]; + + int bestFather2[] = new int[numFamilies]; + int bestMother2[] = new int[numFamilies]; + int secondBestFather2[] = new int[numFamilies]; + int secondBestMother2[] = new int[numFamilies]; + + double maxPs[] = new double[numFamilies]; + double maxP2s[] = new double[numFamilies]; + double maxP3s[] = new double[numFamilies]; + + double maxPs2[] = new double[numFamilies]; + double maxP2s2[] = new double[numFamilies]; + double maxP3s2[] = new double[numFamilies]; + + boolean informative = false; + boolean orderIgnored = false; + + char ignoreOrder[] = new char[numFamilies]; + + + int family = 0; + for (ArrayList familyIndex : families) { + ll += likelihood(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); + + //System.err.println(maxP - maxP2); + bestFather[family] = maxFather; + bestMother[family] = maxMother; + secondBestFather[family] = maxFather2; + secondBestMother[family] = maxMother2; + + maxPs[family] = maxP; + maxP2s[family] = maxP2; + maxP3s[family] = maxP3; + + ++family; + } + + if (!Double.isInfinite(ZLimit)) { + lz = 0.0; + family = 0; + for (ArrayList familyIndex : families) { + lz += likelihoodZ(posteriors, familyIndex, parentIndex.get(family), output2, likelihoods2[family]); + bestFather2[family] = maxFather; + bestMother2[family] = maxMother; + secondBestFather2[family] = maxFather2; + secondBestMother2[family] = maxMother2; + + maxPs2[family] = maxP; + maxP2s2[family] = maxP2; + maxP3s2[family] = maxP3; + + ++family; + } + //if (lz >= ll + ZLimit) + //System.err.println(lz + " Z vs. " + ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")"); + } else if (!Double.isInfinite(XLimit)) { + lx = 0.0; + family = 0; + for (ArrayList familyIndex : families) { + lx += likelihoodX(posteriors, familyIndex, parentIndex.get(family), output2, likelihoods2[family]); + bestFather2[family] = maxFather; + bestMother2[family] = maxMother; + secondBestFather2[family] = maxFather2; + secondBestMother2[family] = maxMother2; + + maxPs2[family] = maxP; + maxP2s2[family] = maxP2; + maxP3s2[family] = maxP3; + + ++family; + } + //if (lx >= ll + XLimit) { + // System.err.println(lx + " X vs. " + ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")" + " " + bestFather[family - 1] + ","+ bestMother[family - 1]); + //} + + } + + boolean XMarker = lx - XLimit >= ll; + boolean ZMarker = lz - ZLimit >= ll; + boolean sexMarker = (XMarker || ZMarker); + + if (sexMarker) { + maxPs = maxPs2; + maxP2s = maxP2s2; + maxP3s = maxP3s2; + + bestFather = bestFather2; + bestMother = bestMother2; + secondBestFather = secondBestFather2; + secondBestMother = secondBestMother2; + + likelihoods1 = likelihoods2; + output1 = output2; + + suffix = suffix + "*"; + + if (outputLikelihood) + System.err.println(suffix + "\t" + Math.max(lx, lz)); + + } else { + if (outputLikelihood) + System.err.println(suffix + "\t" + ll); + } + + if (halfSibs) { + + if (XMarker) + update_halfSibs(posteriors, likelihoods1, true); + else + update_halfSibs(posteriors, likelihoods1, false); + + family = 0; + Arrays.fill(output1, 0.0); + for (ArrayList familyIndex : families) { + if (XMarker) + likelihoodX(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); + else if (ZMarker) + likelihoodZ(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); + else + likelihood(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); + + //System.err.println(maxP - maxP2); + bestFather[family] = maxFather; + bestMother[family] = maxMother; + secondBestFather[family] = maxFather2; + secondBestMother[family] = maxMother2; + + maxPs[family] = maxP; + maxP2s[family] = maxP2; + maxP3s[family] = maxP3; + + ++family; + + } + } + + for (family = 0; family < numFamilies; ++family) { + double maxP = maxPs[family]; + double maxP2 = maxP2s[family]; + double maxP3 = maxP3s[family]; + + int maxFather = bestFather[family]; + int maxMother = bestMother[family]; + + int maxFather2 = secondBestFather[family]; + int maxMother2 = secondBestMother[family]; + + boolean orderClear = maxP - maxP2 >= familyLimit; + + if (orderClear || (ignoreParentOrder && maxMother == maxFather2 && maxFather == maxMother2 && maxP - maxP3 >= familyLimit)) { + + if (("0479".indexOf("" + maxFather) < 0 || "0479".indexOf("" + maxMother) < 0)) // informative + informative = true; + if (sexMarker && maxFather != maxMother) + informative = true; + + if (!orderClear) { + orderIgnored = true; + ignoreOrder[family] = '+'; + } else + ignoreOrder[family] = '_'; + + //in case of either parents could be informative, put father as informative + if (!orderClear && ignoreParentOrder && maxP - maxP2 <= SMALL) { // order of parents ignored, no difference in likelihood + if (("0479".indexOf("" + maxMother) < 0 && "0479".indexOf("" + maxFather) >= 0)) {// mother only informative + bestFather[family] = maxFather2; + bestMother[family] = maxMother2; + } + } + } else { + ArrayList familyIndex = families.get(family); + for (int i : familyIndex) // clear posteriors + for (int j = 0; j < 10; ++j) + output1[10 * numIndividuals * (10 * maxFather + maxMother) + j + 10 * i] = 1.0; + + if (outputParentPosterior) { + for (int k = 0; k < 100; ++k) + for (int i : familyIndex) // clear posteriors + for (int j = 0; j < 10; ++j) + output1[10 * numIndividuals * k + j + 10 * i] = 1.0; + } + + ignoreOrder[family] = '_'; + } + //System.err.println(ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")"); + } + + if (informative) + ++numInformativeMarkers; + if (informative || !removeNonInformative) { + if (orderIgnored) { + if (!outputParentPosterior) + printResult(suffix + new String(ignoreOrder), output1, bestMother, bestFather); + else + printResult(suffix + new String(ignoreOrder), output1, likelihoods1); + } + else + if (!outputParentPosterior) + printResult(suffix, output1, bestMother, bestFather); + else + printResult(suffix, output1, likelihoods1); + ++numCalledMarkers; + if (sexMarker) + ++numCalledSexMarkers; + } + } + + private int mapAlleles(int a1, int a2) + { + if (a1 > a2) + return mapAlleles(a2, a1); // a1 <= a2 + if (a2 > 3) + Error.error(505); + if (a1 == 0) + return a2; + if (a1 == 1) + return 3 + a2; + if (a1 == 2) + return 5 + a2; + if (a1 == 3) + return 9; + Error.error(505); + return -1; + } + + private int allele1(int g) + { + if (g < 4) + return 0; + if (g < 7) + return 1; + if (g < 9) + return 2; + if (g == 9) + return 3; + Error.error(505); + return -1; + } + + private int allele2(int g) + { + if (g < 4) + return g; + if (g < 7) + return g - 3; + if (g < 9) + return g - 5; + if (g == 9) + return 3; + Error.error(505); + return -1; + } + public double likelihoodZ(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) + { + return likelihoodZX(posteriors, familyIndex, grandParentIndex, output, likelihoods, true); + } + public double likelihoodX(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) + { + return likelihoodZX(posteriors, familyIndex, grandParentIndex, output, likelihoods, false); + } + public double likelihoodZX(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[], boolean isZ) { + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 1); + int motherIndex = familyIndex.get(numInd - 2); + if ((sex.get(motherIndex) == 1 && isZ) || (sex.get(motherIndex) == 2 && !isZ)) { + int tmp = motherIndex; + motherIndex = fatherIndex; + fatherIndex = tmp; + } + fatherIndex *= 10; + motherIndex *= 10; + maxP = Double.NEGATIVE_INFINITY; + maxP2 = Double.NEGATIVE_INFINITY; + maxP3 = Double.NEGATIVE_INFINITY; + Arrays.fill(likelihoods, Double.NEGATIVE_INFINITY); + + int outputIndex = 0; + for (int fatherAllele1 = 0; fatherAllele1 < 4; ++fatherAllele1) + for (int fatherAllele2 = fatherAllele1; fatherAllele2 < 4; ++fatherAllele2) + for (int motherAllele1 = 0; motherAllele1 < 4; ++motherAllele1) + for (int motherAllele2 = motherAllele1; motherAllele2 < 4; ++motherAllele2) { + if (motherAllele1 == motherAllele2) { + int gFather = mapAlleles(fatherAllele1, fatherAllele2); + int gMother = mapAlleles(motherAllele1, motherAllele2); + + double pF = Math.log10(SMALL + posteriors.get(fatherIndex + gFather)); + double pM = Math.log10(SMALL + posteriors.get(motherIndex + gMother)); + double p = pF + pM; + + //grandparents... + for (int gpii = 2; gpii < 6; ++gpii) { + int gpi = 10 * grandParentIndex[gpii]; + if (!isZ) + gpi = 10 * grandParentIndex[7 - gpii]; // put parentIndex in correct order fox XY system... + if (gpi >= 0) { + Arrays.fill(gpp[gpii], 0.0); + for (int g1 = 0; g1 < 10; ++g1) { + double post = posteriors.get(gpi + g1); + if (gpi == fatherIndex) //backcross support + post = (g1 == gFather) ? 1 : 0; + if (gpi == motherIndex) //backcross support + post = (g1 == gMother) ? 1 : 0; + + int a1 = allele1(g1); + int a2 = allele2(g1); + boolean valid = false; + if (gpii == 2) { + output[outputIndex + gpi + g1] = post; + valid = true; + } + if (gpii == 3 && a1 == a2 && (a1 == fatherAllele1 || a1 == fatherAllele2)) { + output[outputIndex + gpi + mapAlleles(a1, motherAllele1)] = post; + valid = true; + } + if (gpii == 4 && (a1 == motherAllele1 || a2 == motherAllele1)) { + output[outputIndex + gpi + g1] = post; + valid = true; + } + if (gpii == 5 && a1 == a2) { + output[outputIndex + gpi + mapAlleles(a1, motherAllele1)] = post; + valid = true; + } + if (valid) { + gpp[gpii][a1] = Math.max(gpp[gpii][a1], post); + gpp[gpii][a2] = Math.max(gpp[gpii][a2], post); + } + + } + + //normalize gpp + double max = 0.0; + for (int a1 = 0; a1 < 4; ++a1) + if (gpp[gpii][a1] > max) + max = gpp[gpii][a1]; + double imax = 1.0; + if (max > 0.0) + imax = 1.0 / max; + + for (int a1 = 0; a1 < 4; ++a1) + gpp[gpii][a1] *= imax; + + //if (gpii == 2); // fathers grandfather + //if (gpii == 3); // fathers grandmother + //if (gpii == 4); // mothers grandfather + //if (gpii == 5); // mothers grandmother + + } else + Arrays.fill(gpp[gpii], 1.0); + } + + //System.out.println("**"); + //System.out.println((fatherAllele1+1) + "x" + (fatherAllele2 + 1)); + //Misc.printArray(gpp); + //System.out.println("**"); + + //autosome: + //p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); + //p += Math.log10(SMALL + Math.max(gpp[4][motherAllele1] * gpp[5][motherAllele2], gpp[4][motherAllele2] * gpp[5][motherAllele1])); + + p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); + p += Math.log10(SMALL + gpp[4][motherAllele1]); + + //grandparents... + + for (int i : familyIndex) { + int j = 10 * i; + if (j != motherIndex && j != fatherIndex) { + int s = sex.get(i); + if (!isZ && (s == 1 || s == 2)) + s = 3 - s; + + if (s == 0) { + + int g1 = mapAlleles(fatherAllele1, motherAllele1); + int g2 = mapAlleles(fatherAllele2, motherAllele1); + + int g3 = mapAlleles(fatherAllele1, fatherAllele1); + int g4 = mapAlleles(fatherAllele2, fatherAllele2); + + double p1 = posteriors.get(j + g1); + double p2 = posteriors.get(j + g2); + double p3 = posteriors.get(j + g3); + double p4 = posteriors.get(j + g4); + + output[outputIndex + j + g1] += p1; + output[outputIndex + j + g2] += p2; + + if (fatherAllele1 != fatherAllele2) { //note: identical code below... + if (fatherAllele1 != motherAllele1) + g3 = mapAlleles(fatherAllele1, motherAllele1); + if (fatherAllele2 != motherAllele1) + g4 = mapAlleles(fatherAllele2, motherAllele1); + } + + output[outputIndex + j + g3] += p3; + output[outputIndex + j + g4] += p4; + + p += Math.log10(SMALL + p1 + p2 + p3 + p4) - Constants.LOGFOUR; + + } else if (s == 1) { + int g1 = mapAlleles(fatherAllele1, motherAllele1); + int g2 = mapAlleles(fatherAllele2, motherAllele1); + double p1 = posteriors.get(j + g1); + double p2 = posteriors.get(j + g2); + + output[outputIndex + j + g1] += p1; + output[outputIndex + j + g2] += p2; + + p += Math.log10(0.5 * SMALL + p1 + p2) - Constants.LOGTWO; + + } else if (s == 2) { + int g1 = mapAlleles(fatherAllele1, fatherAllele1); + int g2 = mapAlleles(fatherAllele2, fatherAllele2); + double p1 = posteriors.get(j + g1); + double p2 = posteriors.get(j + g2); + + if (fatherAllele1 != fatherAllele2) { //note: identical code above... + if (fatherAllele1 != motherAllele1) + g1 = mapAlleles(fatherAllele1, motherAllele1); + if (fatherAllele2 != motherAllele1) + g2 = mapAlleles(fatherAllele2, motherAllele1); + } + output[outputIndex + j + g1] += p1; + output[outputIndex + j + g2] += p2; + p += Math.log10(0.5 * SMALL + p1 + p2) - Constants.LOGTWO; + + + } else { + Error.error(506); + } + } + } + if (p > maxP) { + maxP3 = maxP2; + + maxP2 = maxP; + maxFather2 = maxFather; + maxMother2 = maxMother; + + maxP = p; + maxFather = gFather; + maxMother = gMother; + } else if (p > maxP2) { + maxP3 = maxP2; + + maxP2 = p; + maxFather2 = gFather; + maxMother2 = gMother; + } else if (p > maxP3) + maxP3 = p; + + likelihoods[10 * gFather + gMother] = p; + + if (fatherAllele1 == fatherAllele2 && fatherAllele1 != motherAllele1) { + gMother = mapAlleles(fatherAllele1, motherAllele1); + } + + output[outputIndex + fatherIndex + gFather] += 1; + output[outputIndex + motherIndex + gMother] += 1; + } // end of if (motherAllele1 == motherAllele2) + outputIndex += 10 * numIndividuals; + } + return maxP; + //System.err.println(maxMother + " x " + maxFather); + } + + public double likelihood(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) { + int numInd = familyIndex.size(); + int fatherIndex = familyIndex.get(numInd - 1); + int motherIndex = familyIndex.get(numInd - 2); + + if (sex.get(motherIndex) == 1) { // is this needed? + int tmp = motherIndex; + motherIndex = fatherIndex; + fatherIndex = tmp; + } + //System.err.println("motherIndex = " + motherIndex); + //System.err.println("fatherIndex = " + fatherIndex); + fatherIndex *= 10; + motherIndex *= 10; + maxP = Double.NEGATIVE_INFINITY; + maxP2 = Double.NEGATIVE_INFINITY; + maxP3 = Double.NEGATIVE_INFINITY; + int outputIndex = 0; + for (int fatherAllele1 = 0; fatherAllele1 < 4; ++fatherAllele1) + for (int fatherAllele2 = fatherAllele1; fatherAllele2 < 4; ++fatherAllele2) + for (int motherAllele1 = 0; motherAllele1 < 4; ++motherAllele1) + for (int motherAllele2 = motherAllele1; motherAllele2 < 4; ++motherAllele2) { + int gFather = mapAlleles(fatherAllele1, fatherAllele2); + int gMother = mapAlleles(motherAllele1, motherAllele2); + double pF = Math.log10(SMALL + posteriors.get(fatherIndex + gFather)); + double pM = Math.log10(SMALL + posteriors.get(motherIndex + gMother)); + double p = pF + pM; + + //grandparents... + for (int gpii = 2; gpii < 6; ++gpii) { + int gpi = 10 * grandParentIndex[gpii]; + if (gpi >= 0) { + Arrays.fill(gpp[gpii], 0.0); + + for (int g1 = 0; g1 < 10; ++g1) { + double post = posteriors.get(gpi + g1); + + //System.err.println(gpi + "\t" + fatherIndex); + if (gpi == fatherIndex) { //backcross support + post = (g1 == gFather) ? 1 : 0; + //System.err.println("Hiphei"); + } + if (gpi == motherIndex) { //backcross support + post = (g1 == gMother) ? 1 : 0; + } + + output[outputIndex + gpi + g1] = post; //keep the posteriors for grandparents + + gpp[gpii][allele1(g1)] = Math.max(gpp[gpii][allele1(g1)], post); + gpp[gpii][allele2(g1)] = Math.max(gpp[gpii][allele2(g1)], post); + } + //if (gpii == 2); // fathers grandfather + //if (gpii == 3); // fathers grandmother + //if (gpii == 4); // mothers grandfather + //if (gpii == 5); // mothers grandmother + } else + Arrays.fill(gpp[gpii], 1.0); + } + + p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); + p += Math.log10(SMALL + Math.max(gpp[4][motherAllele1] * gpp[5][motherAllele2], gpp[4][motherAllele2] * gpp[5][motherAllele1])); + + //grandparents... + + for (int i : familyIndex) { + int j = 10 * i; + if (j != motherIndex && j != fatherIndex) { + int g1 = mapAlleles(fatherAllele1, motherAllele1); + int g2 = mapAlleles(fatherAllele1, motherAllele2); + int g3 = mapAlleles(fatherAllele2, motherAllele1); + int g4 = mapAlleles(fatherAllele2, motherAllele2); + double p1 = posteriors.get(j + g1); + double p2 = posteriors.get(j + g2); + double p3 = posteriors.get(j + g3); + double p4 = posteriors.get(j + g4); + output[outputIndex + j + g1] += p1; + output[outputIndex + j + g2] += p2; + output[outputIndex + j + g3] += p3; + output[outputIndex + j + g4] += p4; + p += Math.log10(SMALL + p1 + p2 + p3 + p4) - Constants.LOGFOUR; + + } + } + output[outputIndex + fatherIndex + gFather] += 1; + output[outputIndex + motherIndex + gMother] += 1; + outputIndex += 10 * numIndividuals; + if (p > maxP) { + maxP3 = maxP2; + + maxP2 = maxP; + maxFather2 = maxFather; + maxMother2 = maxMother; + + maxP = p; + maxFather = gFather; + maxMother = gMother; + } else if (p > maxP2) { + maxP3 = maxP2; + + maxP2 = p; + maxFather2 = gFather; + maxMother2 = gMother; + } else if (p > maxP3) + maxP3 = p; + likelihoods[10 * gFather + gMother] = p; + } + return maxP; + //System.err.println(maxMother + " x " + maxFather); + } + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(501); + String extraParameters = ""; + System.out.print("#java ParentCall2"); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(501); + pp.warning(new String[]{"data", "familyLimit", "ZLimit", "XLimit", "ignoreParentOrder", "removeNonInformative", "vcfFile", "posteriorFile", "outputParentPosterior", "halfSibs", "outputSNPLikelihood", "outputRaw"}); + + String filename = pp.getValueAsString("data", null); + if (filename == null) + Error.error(501); + + String vcfFile = pp.getValueAsString("vcfFile", null); + String posteriorFile = pp.getValueAsString("posteriorFile", null); + if (vcfFile != null && posteriorFile != null) + Error.error(514); + + ParentCall2 pg = new ParentCall2(); + + double familyLimit = Double.parseDouble(pp.getValueAsString("familyLimit", "2")); + pg.setFamilyLimit(familyLimit); + pg.setZLimit(Double.parseDouble(pp.getValueAsString("ZLimit", "" + Double.POSITIVE_INFINITY))); + pg.setXLimit(Double.parseDouble(pp.getValueAsString("XLimit", "" + Double.POSITIVE_INFINITY))); + if (pp.getValueAsString("ignoreParentOrder", "0").equals("1")) + pg.setIngnoreParentOrder(true); + if (pp.getValueAsString("removeNonInformative", "0").equals("1")) + pg.setRemoveNonInformative(true); + + if (pp.getValueAsString("outputParentPosterior", "0").equals("1")) + pg.setOutputParentPosterior(true); + + if (pp.getValueAsString("halfSibs", "0").equals("1")) + pg.setHalfSibs(true); + + if (pp.getValueAsString("outputRaw", "0").equals("1")) + pg.setRaw(true); + + + pg.callParents(filename, vcfFile, posteriorFile, pp.getValueAsString("outputSNPLikelihood", "0").equals("1")); + } +} diff --git a/software/LepMap3/lm3/src/Pileup2Likelihoods.java b/software/LepMap3/lm3/src/Pileup2Likelihoods.java new file mode 100644 index 0000000..7bb17df --- /dev/null +++ b/software/LepMap3/lm3/src/Pileup2Likelihoods.java @@ -0,0 +1,549 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2020 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki +*/ +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; + +//TODO: vcf output, indels, output depth, ploidy + +public class Pileup2Likelihoods { + + int ploidy = 2; + double minQ = 0.001; + boolean callIndels = false; + + float logP2[][][] = new float[3][94][94]; //33-126 + ArrayList numAlleles = null; + ArrayList numAllelesT = null; // store array in transpose as well + + + public void setPloidy(int ploidy) { + this.ploidy = ploidy; + logP2 = new float[ploidy + 1][94][94]; + } + + public void setCallIndels(boolean value) { + callIndels = value; + } + + public void setMinQ(double value) + { + minQ = value; + } + + private final double logTerm = -0.1 * Constants.LN10; + + private double quality(int q) { + if (q == 0) + return 0.75; // all 4 bases equal prob + if (q == 1) + return 0.725; // between q=1 and q=2 + return Math.exp(logTerm * q); + } + + private double combineQ(int q1, int q2) { + double p1 = quality(q1); + double p2 = quality(q2); + double ret = p1 + p2 - p1 * p2; + if (ret > 0.75) + ret = 0.75; + return ret; + } + + public void initTables() + { + double iploidy = 1.0 / ploidy; + for (int i = 0; i < 94; ++i) { + boolean fill = false; + for (int j = i; j < 94; ++j) { + if (fill) { + for (int pl = 0; pl <= ploidy; ++pl) + logP2[pl][j][i] = logP2[pl][i][j] = logP2[pl][i][j - 1]; + } else { + double q = combineQ(i, j); + if (q < minQ) { + q = minQ; + fill = true; + } + double q3 = q / 3.0; + + for (int pl = 0; pl <= ploidy; ++pl) + logP2[pl][j][i] = logP2[pl][i][j] = (float) Math.log((pl * (1 - q) + (ploidy - pl) * q3) * iploidy); + + //logP2[0] + //logP2[1] + //logP2[2] + + //logP[j][i] = logP[i][j] = (float) Math.log(q / 3); + //logNP2[j][i] = logNP2[i][j] = (float) (Math.log(q / 3 + (1 - q)) + Constants.LNHALF); + //logNP[j][i] = logNP[i][j] = (float) Math.log(1 - q); + } + } + + } + int allele[] = new int[ploidy]; + //for (int pl = 0; pl < ploidy; ++pl) + // allele[pl] = 1; + numAlleles = new ArrayList(); + numAlleles.add(new int[]{ploidy,0,0,0}); //A..A + int k = ploidy - 1; + while (k >= 0) { + if (allele[k] < 3) { + ++allele[k]; + for (int l = k + 1; l < ploidy; ++l) + allele[l] = allele[k]; + int na[] = new int[4]; + for (int l = 0; l < ploidy; ++l) + ++na[allele[l]]; + numAlleles.add(na); + k = ploidy - 1; + } + else + --k; + } + //print genotypes + int g = 0; + for (int[] list : numAlleles) { + String alleles = "ACGT"; + for (int i = 0; i < 4; ++i) + for (int j = 0; j < list[i]; ++j) + System.err.print(alleles.charAt(i)); + System.err.println("\t" + (g + 1)); + ++g; + } + numAllelesT = new ArrayList(); // transpose + for (int i = 0; i < 4; ++i) { + int na[] = new int[numAlleles.size()]; + int j = 0; + for (int[] list : numAlleles) + na[j++] = list[i]; + numAllelesT.add(na); + } + + + System.err.println("number of different genotypes is " + numAlleles.size()); + } + + public Pileup2Likelihoods() { + } + int numIndividuals = 0; + + private int count[]; + private int count2[] = new int[4]; + + private int intMapping[]; + + private int coveragePerIndividual = 0; + private int numLowerCoverage = 0; + private int minimumAlleleFreq = 0; + private int minCoverageSum = 0; + + private void setMinCoverageSum(int value) { + if (value < 0) + minCoverageSum = (numIndividuals - numLowerCoverage) * coveragePerIndividual; + else + minCoverageSum = value; + } + + private void setCoveragePerIndividual(int value) { + coveragePerIndividual = value; + } + + private void setMinimumAlleleFreq(int value) { + minimumAlleleFreq = value; + } + + private void setMinimumAlleleFreqRatio(double value) { + minimumAlleleFreq = (int)(0.5 + value * numIndividuals); + } + + private void setNumLowerCoverage(int value) { + numLowerCoverage = value; + } + + private void setNumLowerCoverageRatio(double value) { + numLowerCoverage = (int) (0.5 + numIndividuals * value); + } + + ArrayList individualNames = new ArrayList(); + + private void processMapping(String mappingFile) + { + ArrayList> it = Input.loadTable(mappingFile, "\t "); + ArrayList values = new ArrayList(); + + if (it == null || it.size() == 0) + Error.error(3002); + + int n = 0; + for (ArrayList row : it) { + if (row.size() == 0 || (n > 0 && row.size() != n)) + Error.error(3002); + values.addAll(row); + n = row.size(); + } + if (it.size() > 1 && n > 1) + Error.error(3002); + + + HashMap hm = new HashMap(); + + numIndividuals = 0; + for (String m : values) + if (!hm.containsKey(m)) { + hm.put(m, numIndividuals++); + individualNames.add(m); + } + + intMapping = new int[values.size()]; + int i = 0; + for (String m : values) + intMapping[i++] = hm.get(m); + + count = new int[numIndividuals]; + + System.err.println("Number of bams is " + values.size()); + System.err.println("Number of individuals is " + numIndividuals); + } + private void processPileup(String filename) + { + System.out.print("CHR\tPOS"); + for (int i = 0; i < numIndividuals; ++i) { + System.out.print("\t" + individualNames.get(i)); + } + System.out.println(); + + try { + BufferedReader br = null; + if (filename.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(filename)); + + ArrayList line = Input.loadTableRow(br, "\t"); + while (line != null) { + processOneRow(line); + line = Input.loadTableRow(br, "\t"); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(-1); + } + } + + // save storage space (small=>0, 1.0=>1) and slightly faster + private String myExp(double value){ + if (value == 0.0) + return "1"; + else if (value < -46.0) + return "0"; + else + return "" + (float) Math.exp(value); + } + + + private void processOneRow(ArrayList row) + { + //ArrayList row2 = new ArrayList(); + //row2.addAll(row); + ArrayList> indels = null; + if (callIndels) { + indels = new ArrayList>(); + for (int i = 0; i < numIndividuals; ++i) + indels.add(new ArrayList()); + } + + int sum = 0; + Arrays.fill(count, 0); + + int mIndex = 0; + for (int i = 3; i < row.size(); i+=4) { + int c = Integer.parseInt(row.get(i)); + sum += c; + count[intMapping[mIndex++]] += c; + if (c == 0){ // remove "*" if no reads + while (row.size() <= i + 3) + row.add(""); + row.set(i + 1, ""); + row.set(i + 2, ""); + row.set(i + 3, ""); + } + } + if (sum < minCoverageSum) + return; + + int missing = 0; + for (int i = 0; i < numIndividuals; ++i) + if (count[i] < coveragePerIndividual) + ++missing; + + if (missing > numLowerCoverage) + return; + //filtering... + + Arrays.fill(count2, 0); + for (int i = 4; i < row.size(); i+=4) { + char ca[] = row.get(i).toCharArray(); + int caIndex = 0; + + int n = ca.length; + for (int j = 0; j < n; ++j) { + char c = ca[j]; + switch (c) { + case '*': + ca[caIndex++]=4; // missing + break; + case '+': + case '-': + int l = 0; + ++j; + while (j < n && ca[j] >= '0' && ca[j] <= '9') { + l = 10 * l + (ca[j] - '0'); + ++j; + } + j += (l - 1); // correct for last j++ + if (callIndels) { + if (c == '-') + indels.get(intMapping[(i >> 2) - 1]).add(-l); + else + indels.get(intMapping[(i >> 2) - 1]).add(l); + } + break; + case '^': ++j; + case '$': + break; + + case 'a': + case 'A': ++count2[0];ca[caIndex++]=0; + break; + case 'c': + case 'C': ++count2[1];ca[caIndex++]=1; + break; + case 'g': + case 'G': ++count2[2];ca[caIndex++]=2; + break; + case 't': + case 'T': ++count2[3];ca[caIndex++]=3; + break; + } + } + row.set(i, new String(ca, 0, caIndex)); + } + int alleles = 0; + for (int i = 0; i < 4; ++i) + if (count2[i] >= minimumAlleleFreq) + ++alleles; + + //System.err.println(rowNumber + " " + row[0]); + + if (alleles >= 2) { + int numGenotypes = numAlleles.size(); + double prob[][] = new double[numIndividuals][numGenotypes]; + + mIndex = 0; + + for (int i = 4; i < row.size(); i+=4) { + String s = row.get(i); + String q1 = (row.size() > i + 1) ? row.get(i + 1) : ""; + String q2 = (row.size() > i + 2) ? row.get(i + 2) : ""; + + //System.err.println(s); + //System.err.println(q1); + //System.err.println(q2); + + //assert(s.length() == q1.length() && q1.length() == q2.length()); + if(s.length() != q1.length() || q1.length() != q2.length()) { //quality and aligment have different number of values... + //System.err.println(row2.get(i)); + + for (int j = 0; j < s.length(); ++j) + System.err.print("acgtN".charAt(s.charAt(j))); + System.err.println(); + System.err.println(q1); + System.err.println(q2); + Error.warning(3003); + int l = Math.min(Math.min(s.length(), q1.length()), q2.length()); + s = s.substring(0, l); + q1 = q1.substring(0, l); + q2 = q2.substring(0, l); + } + int n = s.length(); + int ind = intMapping[mIndex++]; + for (int j = 0; j < n; ++j) { + char c = s.charAt(j); + if (c < 4) { + char qc1 = q1.charAt(j); + char qc2 = q2.charAt(j); + int nat[] = numAllelesT.get(c); + for (int g = 0; g < numGenotypes; ++g) + prob[ind][g] += logP2[nat[g]][qc1-33][qc2-33]; + } + } + // get qualities and output genotype likelihoods... + } + StringBuilder sb = new StringBuilder(); + sb.append(row.get(0)); + sb.append('\t'); + sb.append(row.get(1)); + for (int ind = 0; ind < numIndividuals; ++ind) { + double maxp = Double.NEGATIVE_INFINITY; + for (int g = 0; g < numGenotypes; ++g) + maxp = Math.max(maxp, prob[ind][g]); + for (int g = 0; g < numGenotypes; ++g) { + if (g == 0) + sb.append('\t'); + else + sb.append(' '); + sb.append(myExp(prob[ind][g] - maxp)); + } + } + //print result + System.out.println(sb); + } else if (alleles == 1 && callIndels) { + ArrayList lengths = new ArrayList(); + for (ArrayList list : indels) + lengths.addAll(list); + if (lengths.size() > minimumAlleleFreq && lengths.size() >= 1) { + Collections.sort(lengths); + int numL = lengths.size(); + int cid = 1; + int id = 0; + for (int i = 1; i < numL; ++i) { + if (lengths.get(i - 1) == lengths.get(i)) { + ++cid; + } else { + if (cid >= minimumAlleleFreq) { + ++alleles; + id = lengths.get(i - 1); + } + cid = 1; + } + } + if (cid >= minimumAlleleFreq) { + ++alleles; + id = lengths.get(lengths.size() - 1); + } + if (alleles == 2) { // two values + int numGenotypes = numAlleles.size(); + + StringBuilder sb = new StringBuilder(); + sb.append(row.get(0)); + sb.append('\t'); + sb.append(row.get(1)); + + for (int ind = 0; ind < numIndividuals; ++ind) { + ArrayList list = indels.get(ind); + int c = 0; + for (int l : list) + if (l == id) + ++c; + + double prob[] = count2likelihood(count[ind] - c, c); + for (int g = 0; g < numGenotypes; ++g) { + if (g == 0) + sb.append('\t'); + else + sb.append(' '); + if (ind == 0) + sb.append((float) Math.exp(prob[g])); + else + sb.append(myExp(prob[g])); + } + } + System.out.println(sb); + } + } + } + } + private double[] count2likelihood(int c1, int c2){ + int numGenotypes = numAlleles.size(); + + double prob[] = new double[numGenotypes]; + + int nat[] = numAllelesT.get(0); + for (int g = 0; g < numGenotypes; ++g) + prob[g] += c1 * logP2[nat[g]][20][20]; + + nat = numAllelesT.get(1); + for (int g = 0; g < numGenotypes; ++g) + prob[g] += c2 * logP2[nat[g]][20][20]; + + double maxp = Double.NEGATIVE_INFINITY; + for (int g = 0; g < numGenotypes; ++g) + maxp = Math.max(maxp, prob[g]); + + for (int g = 0; g < numGenotypes; ++g) + prob[g] = prob[g] - maxp; + + return prob; + } + + public static void main(String args[]){ + ParameterParser pp = new ParameterParser(); + StringBuilder extraParameters = new StringBuilder(); + for (int i = 0; i < args.length; ++i) { + extraParameters.append(args[i] + " "); + } + if (!pp.init(extraParameters.toString())) + Error.error(3001); + pp.warning(new String[]{"minCoverage", "numLowerCoverage", "minAlleleFreq", "minQuality", "minCoverageSum", "mappingFile", "pileup", "ploidy", "callIndels"}); + + Pileup2Likelihoods p2l = new Pileup2Likelihoods(); + int ploidy = Integer.parseInt(pp.getValueAsString("ploidy", "2")); + if (ploidy != 2) + p2l.setPloidy(ploidy); + + int cov = Integer.parseInt(pp.getValueAsString("minCoverage", "3")); + + double numLow = Double.parseDouble(pp.getValueAsString("numLowerCoverage", "0.3")); + + double minAlleleFreq = Double.parseDouble(pp.getValueAsString("minAlleleFreq", "0.1")); + //double minSum = Double.parseDouble(pp.getValueAsString("minCoverageSum", "0")); + + double minQ = Double.parseDouble(pp.getValueAsString("minQuality", "0.001")); + + p2l.processMapping(pp.getValueAsString("mappingFile", "mapping.txt")); + + p2l.setCoveragePerIndividual(cov); + if (numLow >= 1) + p2l.setNumLowerCoverage((int) (0.5 + numLow)); + else + p2l.setNumLowerCoverageRatio(numLow); + if (minAlleleFreq >= 1) + p2l.setMinimumAlleleFreq((int)(0.5 + minAlleleFreq)); + else + p2l.setMinimumAlleleFreqRatio(minAlleleFreq); + + p2l.setMinQ(minQ); + + + p2l.setMinCoverageSum(Integer.parseInt(pp.getValueAsString("minCoverageSum", "-1"))); + + if (pp.getValueAsString("callIndels", "0").equals("1")) + p2l.setCallIndels(true); + + p2l.initTables(); + p2l.processPileup(pp.getValueAsString("pileup", "-")); + + } + +} diff --git a/software/LepMap3/lm3/src/Separate2.java b/software/LepMap3/lm3/src/Separate2.java new file mode 100644 index 0000000..e0a4afc --- /dev/null +++ b/software/LepMap3/lm3/src/Separate2.java @@ -0,0 +1,1414 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.concurrent.locks.ReentrantLock; + +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge +*/ +// User interface for SeparateChromosomes module +//Errorcodes 44xx +public class Separate2 { + private final ReentrantLock lock = new ReentrantLock(); + + private double theta1; + private double theta2; + + private double minLod = Double.NEGATIVE_INFINITY; + + private Data2 data = new Data2(); + + private UnionFind chromosomes; + private UnionFind identicals; + + public void keepFamilies(ArrayList families) { + data.keepFamilies(families); + } + + public void setPhasedData(boolean value) + { + for (Family2 f : data.getFamilies()) + f.setPhasedData(value); + data.setPhasedData(value); + } + + public int getNumMarkers() + { + return data.getNumMarkers(); + } + + public void setTheta1(double theta) + { + theta1 = theta; + //logTheta1 = Math.log(theta); + //log1mTheta1 = Math.log(1.0 - theta); + } + public void setTheta2(double theta) + { + theta2 = theta; + //logTheta2 = Math.log(theta); + //log1mTheta2 = Math.log(1.0 - theta); + } + + //public void addFamilyFromFile(String filename) { + // data.addFamilyFromFile(filename); + //} + public void addFamilyFromFile(String filename, String informativeMask) { + data.addFamilyFromFile(filename, informativeMask, null, false); + } + + public void addFamilyFromFile(String filename, String informativeMask, boolean mask[], boolean gpPhase) { + data.addFamilyFromFile(filename, informativeMask, mask, gpPhase); + } + public void subsample(double rate) { + data.subSampleData(rate); + } + + public double computeLOD(int m1, int m2) { + double ret = 0.0; + for (Family2 f : data.getFamilies()) { + double l = f.computeLOD(theta1, theta2, m1, m2); + if (l < minLod) + l = minLod; + ret += l; + } + return ret; + } + + public void maskInformative(String informativeMask) { + for (Family2 f : data.getFamilies()) + f.maskInformative(informativeMask); + } + public void maskLG(LGMap2 map, int lg) { + for (Family2 f : data.getFamilies()) + for (int i = 0; i < map.getNumMarkers(); ++i) + if (map.getLGName(i) != lg) + f.removeMarker(i); + } + + public void maskLG(LGMap2 map, boolean lgs[]) { + for (Family2 f : data.getFamilies()) + for (int i = 0; i < map.getNumMarkers(); ++i) + if (!lgs[map.getLGName(i)]) + f.removeMarker(i); + } + + public void setLod3Mode(int mode) + { + for (Family2 f : data.getFamilies()) + f.setLod3Mode(mode); + } + + public void setDistortionLodMode() + { + for (Family2 f : data.getFamilies()) + f.setDistortionLodMode(); + } + + + +/* private void joinIdenticals(LGMap2 map) + { + joinIdenticals(map, true, theta1, theta2); + } + private void joinIdenticals(LGMap2 map, boolean printPatterns) + { + joinIdenticals(map, printPatterns, theta1, theta2); + } + private void joinIdenticals(LGMap2 map, double theta1, double theta2) + { + joinIdenticals(map, true, theta1, theta2); + } + */ + + private void joinIdenticals(ArrayList markers, double theta1, double theta2, double lodLimit, UnionFind uf) + { + ArrayList infoMarkers = new ArrayList(); + + ArrayList maxScores = new ArrayList(); + + for (int m1 : markers) { + boolean informative = false; + for (Family2 f : data.getFamilies()) + if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) { + informative = true; + break; + } + if (informative) { + double maxLODScore = 0.0; + for (Family2 f : data.getFamilies()) + maxLODScore += f.maxLodScore(theta1, theta2, m1); + + if (maxLODScore >= lodLimit) { + infoMarkers.add(m1); + maxScores.add(maxLODScore); + } + } + } + if (infoMarkers.size() == 0) { + markers.clear(); + return; + } + + Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(maxScores); + Integer[] indexes = comparator.createIndexArray(); + Arrays.sort(indexes, comparator); + + ArrayList infoMarkers2 = new ArrayList(); + for (int i : indexes) { + infoMarkers2.add(infoMarkers.get(i)); + //System.err.println(maxScores.get(i)); + } + //System.err.println(); + infoMarkers = infoMarkers2; + Collections.reverse(infoMarkers); + + while (true) { + ArrayList> cliques = new ArrayList>(); + cliques.add(new ArrayList()); + for (int m : infoMarkers) { + boolean canAdd = true; + //int perm[] = Misc.randomPermutation(cliques.size()); + //for (int cliquei : perm) { + // ArrayList clique = cliques.get(cliquei); //Randomize the clique order + for (ArrayList clique : cliques) { + canAdd = true; + for (int cm : clique) + if (computeLOD(m, cm) < lodLimit) { + canAdd = false; + break; + } + if (canAdd) { + clique.add(m); + break; + } + } + if (!canAdd) { + ArrayList al = new ArrayList(); + al.add(m); + cliques.add(al); + } + } + //System.err.println(cliques.size() +"\t" + infoMarkers.size()); + if (infoMarkers.size() == cliques.size()) + break; + infoMarkers.clear(); + for (ArrayList clique : cliques) { + int c0 = clique.get(0); + infoMarkers.add(c0); + for (int cm : clique) + if (cm != c0) { + for (Family2 f : data.getFamilies()) { + f.combineAndNormalize(c0, cm, theta1, theta2); + } + uf.union(cm, c0); + } + for (int cm : clique) + if (cm != c0) + for (Family2 f : data.getFamilies()) + f.setProb(cm, c0); + } + } + markers.clear(); + markers.addAll(infoMarkers); + } + + private void printPatterns(int name, int size, int marker) + { + for (Family2 f : data.getFamilies()) { + int type = 0; + if (f.isFatherInformative(marker)) + type += 1; + if (f.isMotherInformative(marker)) + type += 2; + + System.err.print(name + "\t" + type + "\t" + size + "\t" + f.pattern(marker) + "\t"); + } + System.err.println(); + } + private void printPatterns(int name, ArrayList markers) + { + for (Family2 f : data.getFamilies()) { + int numP = 1; + for (int m : markers) { + System.err.print(name + "." + numP + "\t" + f.pattern(m) + "\t"); + ++numP; + } + } + System.err.println(); + } + + + public void joinSingles2Identicals(double lodLimit_[], double lodDifference, LGMap2 map, boolean betweenSameTypeOnly, int numThreads) + { + //joinIdenticals(map, true, theta1, theta2, lodLimit[0]); + if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) + Error.error(701); + + if (!betweenSameTypeOnly && lodLimit_.length > 1) + Error.error(702); + + @SuppressWarnings("unchecked") + ArrayList smap[] = new ArrayList[getNumMarkers()]; + for (int i = 0; i < getNumMarkers(); ++i) { + smap[i] = new ArrayList(); + int chr = map.getLGName(i); + if (chr != 0) + smap[i].add((double) chr); + } + //int joined = 0; + //int joined2 = 0; + + String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; + + joinIdenticalsFast(map); + + for (String mask : masks) { + double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; + + ArrayList infoMarkers = new ArrayList(); + for (int m1 = 0; m1 < getNumMarkers(); ++m1) + if (map.getLGName(m1) == 0) { + boolean informative = false; + for (Family2 f : data.getFamilies()) { + int imode = 0; + if (f.isFatherInformative(m1)) + ++imode; + if (f.isMotherInformative(m1)) + imode +=2; + if (mask.contains("" + imode)) { + informative = true; + break; + } + } + if (informative) { + double maxLODScore = 0.0; + for (Family2 f : data.getFamilies()) + maxLODScore += f.maxLodScore(theta1, theta2, m1); + if (maxLODScore >= lodLimit) + infoMarkers.add(m1); + } + } + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + + ArrayList groupsWithMarkers = new ArrayList(); + for (int c = 1; c < markers.size(); ++c) + if (markers.get(c).size() > 0) { + if (betweenSameTypeOnly) { + int m1 = markers.get(c).get(0); + int imode = 0; + for (Family2 f : data.getFamilies()) { + if (f.isFatherInformative(m1)) + ++imode; + if (f.isMotherInformative(m1)) + imode +=2; + } + if (mask.contains("" + imode)) + groupsWithMarkers.add(c); + } else + groupsWithMarkers.add(c); + } + + ArrayList> markersMasked = new ArrayList>(); + + for (ArrayList mc : markers) { + ArrayList mcm = new ArrayList(); + markersMasked.add(mcm); + for (int m2 : mc) { + int imode = 0; + for (Family2 f : data.getFamilies()) { + if (f.isFatherInformative(m2)) + ++imode; + if (f.isMotherInformative(m2)) + imode +=2; + } + if (mask.contains("" + imode)) { + mcm.add(m2); + break; + } + } + } + + Thread threads[] = new Thread[numThreads]; + + for (int t = 0; t < numThreads; ++t) { + threads[t] = new Thread(new JoinSinglesThread(infoMarkers, markersMasked, lodLimit, lodDifference, t, numThreads, smap, t == 0)); + threads[t].start(); + } + try { + for (int t = 0; t < numThreads; ++t) + if (threads[t].isAlive()) + threads[t].join(); + } catch (Exception e) { + e.printStackTrace(); + Error.error(-99999999); + } + } + for (int i = 0; i < getNumMarkers(); ++i) { + StringBuilder str = new StringBuilder(); + if (smap[i].size() == 0) + str.append('0'); + if (smap[i].size() == 1) + str.append(smap[i].get(0).intValue()); + else + for (int j = 0; j < smap[i].size(); j+=2) { + str.append(smap[i].get(j).intValue()); + str.append('\t'); + str.append(smap[i].get(j+1)); + } + System.out.println(str); + } + //System.err.println("#joined = " + joined + " #joined2 = " + joined2); + } + + private class JoinSinglesThread implements Runnable + { + ArrayList infoMarkers; + ArrayList> markers; + double lodLimit, lodDifference; + int numThreads, start; + ArrayList smap[]; + boolean print; + + public JoinSinglesThread(ArrayList infoMarkers, ArrayList> markers, double lodLimit, double lodDifference, int start, int numThreads,ArrayList smap[], boolean print) + { + this.infoMarkers = infoMarkers; + this.markers = markers; + this.lodLimit = lodLimit; + this.lodDifference = lodDifference; + this.numThreads = numThreads; + this.start = start; + this.smap = smap; + this.print = print; + } + + @Override + public void run() { + int progress = 0; + int prevProgress = 0; + + for (int m2i = start; m2i < infoMarkers.size(); m2i+=numThreads) { + int m2 = infoMarkers.get(m2i); + if (print) { + progress = (10 * m2i / infoMarkers.size()); + if (progress != prevProgress) { + System.err.print(progress + "."); + prevProgress = progress; + } + } + + + double maxScore = Double.NEGATIVE_INFINITY; + double maxScore2 = Double.NEGATIVE_INFINITY; + + + for (int c = 1; c < markers.size(); ++c) { + double score = Double.NEGATIVE_INFINITY; + for (int m1 : markers.get(c)) { + double l = computeLOD(m1, m2); + if (l > score) + score = l; + } + if (score > maxScore) { + maxScore2 = maxScore; + maxScore = score; + } else + maxScore2 = Math.max(maxScore2, score); + + + if (score >= lodLimit) { + + if (smap[m2].size() == 0) { + smap[m2].add((double) c); + smap[m2].add(score); + } + else { + double bestScore = smap[m2].get(1); + if (score > bestScore) { + smap[m2].add(smap[m2].get(0)); + smap[m2].add(bestScore); + smap[m2].set(0, (double) c); + smap[m2].set(1, score); + } + else { + smap[m2].add((double)c); + smap[m2].add(score); + } + } + + } + } + if (maxScore - maxScore2 < lodDifference) { + smap[m2].clear(); + } + } + if (print) + System.err.println(" done!"); + + } + } + + private class JoinSinglesThreadMaxDistance implements Runnable + { + ArrayList infoMarkers; + double lodLimit, lodDifference; + int numThreads, start; + ArrayList smap[]; + boolean print; + int maxDistance; + + public JoinSinglesThreadMaxDistance(ArrayList infoMarkers, double lodLimit, double lodDifference, int start, int numThreads,ArrayList smap[], boolean print, int maxDistance) + { + this.infoMarkers = infoMarkers; + this.lodLimit = lodLimit; + this.lodDifference = lodDifference; + this.numThreads = numThreads; + this.start = start; + this.smap = smap; + this.print = print; + this.maxDistance = maxDistance; + } + + @Override + public void run() { + int progress = 0; + int prevProgress = 0; + + for (int m2i = start; m2i < infoMarkers.size(); m2i+=numThreads) { + int m2 = infoMarkers.get(m2i); + if (print) { + progress = (10 * m2i / infoMarkers.size()); + if (progress != prevProgress) { + System.err.print(progress + "."); + prevProgress = progress; + } + } + if (smap[m2].size() == 1) + continue; + + double maxScore = Double.NEGATIVE_INFINITY; + int maxChr = -1; + + for (int m1i = Math.max(0, m2i - maxDistance); m1i < m2i + maxDistance && m1i < infoMarkers.size(); ++m1i) { + int m1 = infoMarkers.get(m1i); + if (smap[m1].size() != 1) + continue; + double l = computeLOD(m1, m2); + if (l > maxScore) { + int chr = smap[m1].get(0).intValue(); + maxScore = l; + maxChr = chr; + } + } + double maxScore2 = Double.NEGATIVE_INFINITY; + for (int m1i = Math.max(0, m2i - maxDistance); m1i < m2i + maxDistance && m1i < infoMarkers.size(); ++m1i) { + int m1 = infoMarkers.get(m1i); + if (smap[m2].size() != 1) + continue; + int chr = smap[m1].get(0).intValue(); + if (chr != maxChr) + maxScore2 = Math.max(maxScore2, computeLOD(m1, m2)); + } + if (maxScore >= lodLimit) { + if (smap[m2].size() == 0) { + smap[m2].add((double) maxChr); + smap[m2].add(maxScore); + } + else { + double bestScore = smap[m2].get(1); + if (maxScore > bestScore) { + smap[m2].add(smap[m2].get(0)); + smap[m2].add(bestScore); + smap[m2].set(0, (double) maxChr); + smap[m2].set(1, maxScore); + } + else { + smap[m2].add((double) maxChr); + smap[m2].add(maxScore); + } + } + + } + if (maxScore - maxScore2 < lodDifference) { + smap[m2].clear(); + } + } + if (print) + System.err.println(" done!"); + } + } + + public void joinSingles(double lodLimit_[], double lodDifference, LGMap2 map, boolean betweenSameTypeOnly, boolean iterate, final int numThreads, int maxDistance) + { + //joinIdenticals(map, true, theta1, theta2, lodLimit[0]); + if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) + Error.error(701); + + if (!betweenSameTypeOnly && lodLimit_.length > 1) + Error.error(702); + + @SuppressWarnings("unchecked") + ArrayList smap[] = new ArrayList[getNumMarkers()]; + for (int i = 0; i < getNumMarkers(); ++i) { + smap[i] = new ArrayList(); + int chr = map.getLGName(i); + if (chr != 0) + smap[i].add((double) chr); + } + + String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; + + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + + for (String mask : masks) { + double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; + + final ArrayList infoMarkers = new ArrayList(); + for (int m1 = 0; m1 < getNumMarkers(); ++m1) + if (map.getLGName(m1) == 0 || maxDistance < Integer.MAX_VALUE) { + boolean informative = false; + for (Family2 f : data.getFamilies()) { + int imode = 0; + if (f.isFatherInformative(m1)) + ++imode; + if (f.isMotherInformative(m1)) + imode +=2; + if (mask.contains("" + imode)) { + informative = true; + break; + } + } + if (informative) { + double maxLODScore = 0.0; + for (Family2 f : data.getFamilies()) + maxLODScore += f.maxLodScore(theta1, theta2, m1); + if (maxLODScore >= lodLimit) + infoMarkers.add(m1); + } + } + + ArrayList> markersMasked = null; + if (betweenSameTypeOnly) { + markersMasked = new ArrayList>(); + for (ArrayList mc : markers) { + ArrayList mcm = new ArrayList(); + markersMasked.add(mcm); + for (int m2 : mc) { + int imode = 0; + for (Family2 f : data.getFamilies()) { + if (f.isFatherInformative(m2)) + ++imode; + if (f.isMotherInformative(m2)) + imode +=2; + } + if (mask.contains("" + imode)) + mcm.add(m2); + } + + } + } + else + markersMasked = markers; + + boolean changed = true; + int iteratation = 1; + do { + Thread threads[] = new Thread[numThreads]; + + for (int t = 0; t < numThreads; ++t) { + if (maxDistance < Integer.MAX_VALUE) + threads[t] = new Thread(new JoinSinglesThreadMaxDistance(infoMarkers, lodLimit, lodDifference, t, numThreads, smap, t == 0, maxDistance)); + else + threads[t] = new Thread(new JoinSinglesThread(infoMarkers, markersMasked, lodLimit, lodDifference, t, numThreads, smap, t == 0)); + threads[t].start(); + } + try { + for (int t = 0; t < numThreads; ++t) + if (threads[t].isAlive()) + threads[t].join(); + } catch (Exception e) { + e.printStackTrace(); + Error.error(-99999999); + } + if (iterate) { + changed = false; + for (ArrayList mc : markersMasked) + mc.clear(); + ArrayList infoMarkers2 = new ArrayList(); + for (int m : infoMarkers) + if (smap[m].size() == 0) + infoMarkers2.add(m); + else { + int chr = smap[m].get(0).intValue(); + markersMasked.get(chr).add(m); + changed = true; + } + if (changed) + System.err.println("Starting iteration " + (++iteratation)); + + infoMarkers.clear(); + infoMarkers.addAll(infoMarkers2); + } + + } while (changed && iterate); + } + + for (int i = 0; i < getNumMarkers(); ++i) { + StringBuilder str = new StringBuilder(); + if (smap[i].size() == 0) + str.append('0'); + if (smap[i].size() == 1) + str.append(smap[i].get(0).intValue()); + else + for (int j = 0; j < smap[i].size(); j+=2) { + if (j > 0) + str.append('\t'); + str.append(smap[i].get(j).intValue()); + str.append('\t'); + str.append(smap[i].get(j+1)); + } + System.out.println(str); + } + } + + + public void joinIdenticals(LGMap2 map) + { + UnionFind uf = new UnionFind(getNumMarkers()); + //joinIdenticals(....,uf) + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + for (int c1 = 1; c1 < markers.size(); ++c1) { + ArrayList mc = markers.get(c1); + joinIdenticals(mc, 0.0, 0.0, 0.0, uf); // quite slow with many markers... + if (mc.size() > 0) + printPatterns(c1, mc.size(), mc.get(0)); + } + + } + public void joinIdenticalsFast(LGMap2 map) //avoid quadratic time consumption... + { + if (theta1 != 0.0 || theta2 != 0.0) + return; + + //UnionFind uf = new UnionFind(getNumMarkers()); + //joinIdenticals(....,uf) + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + for (int c1 = 1; c1 < markers.size(); ++c1) { + ArrayList mc = markers.get(c1); + if (mc.size() > 0) { + int mc0 = mc.get(0); + for (int m : mc) + if (m != mc0) + join(mc0, m); + for (int m : mc) + if (m != mc0) + for (Family2 f : data.getFamilies()) + f.setProb(m, mc0); + + } + //joinIdenticals(mc, 0.0, 0.0, 0.0, uf); // quite slow with many markers... + if (mc.size() > 0) + printPatterns(c1, mc.size(), mc.get(0)); + } + + } + + + + public void joinLGs(double lodLimit[], LGMap2 map, int sizeLimit) + { + //joinIdenticals(map, true, 0.0, 0.0, lodLimit[0]); + +/* UnionFind uf = new UnionFind(getNumMarkers()); + //joinIdenticals(....,uf) + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + for (int c1 = 1; c1 < markers.size(); ++c1) { + ArrayList mc = markers.get(c1); + ArrayList tmp = new ArrayList(); + tmp.addAll(mc); + //joinIdenticals(mc, 0.0, 0.0, 0.0, uf); + if (mc.size() > 0) + printPatterns(c1, mc.get(0)); + markers.set(c1, tmp); + //if (mc.size() > 0) { + // int m0 = mc.get(0); + // for (int m: mc) + // if (m != m0) + // join(m0, m); + // printPatterns(c1, m0); + //} + }*/ + + joinIdenticalsFast(map); + + ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); + + UnionFind chromosomes = new UnionFind(markers.size()); + + double maxScore = Double.NEGATIVE_INFINITY; + + for (int c1 = 1; c1 < markers.size(); ++c1) { + if (markers.get(c1).size() > sizeLimit) { + int m2 = markers.get(c1).get(0); + int f1 = chromosomes.find(c1); + for (int c2 = c1 + 1; c2 < markers.size(); ++c2) + if (markers.get(c2).size() > sizeLimit && chromosomes.find(c2) != f1) { + int m1 = markers.get(c2).get(0); + double l = computeLOD(m1, m2); + double maxLODScore1 = 0.0; + double maxLODScore2 = 0.0; + for (Family2 f : data.getFamilies()) { + maxLODScore1 += f.maxLodScore(theta1, theta2, m1); + maxLODScore2 += f.maxLodScore(theta1, theta2, m1); + } + int j = 0; + while (j < lodLimit.length - 1 && (maxLODScore1 < lodLimit[j] || maxLODScore2 < lodLimit[j])) + ++j; + + if (l > lodLimit[j]) { + f1 = chromosomes.union(c1, c2); + } + else + maxScore = Math.max(maxScore, l); + } + } + } + + + int names2[] = new int[getNumMarkers()]; + + int names[] = new int[markers.size()]; + int numLGs = 0; + + for (int c1 = 1; c1 < markers.size(); ++c1) { + if (markers.get(c1).size() > 0) { + int f1 = chromosomes.find(c1); + if (names[f1] == 0) + names[f1] = ++numLGs; + for (int m: markers.get(c1)) + names2[m] = names[f1]; + + } + } + for (int i = 0; i < getNumMarkers(); ++i) { + System.out.println(names2[i] + "\t" + map.getLGName(i)); + } + + System.err.println((markers.size() - 1) + "->" + numLGs); + System.err.println("Next join at LOD=" + maxScore); + } + + + private void join(int m1, int m2) + { + for (Family2 f : data.getFamilies()){ + f.combineAndNormalize(m1, m2, theta1, theta2); + //f.normalize(m1); + } + } + + private class SeparateIdenticalThread implements Runnable{ + private ArrayList infoMarkers_; + private double lodLimit; + private boolean print; + private double keepRate = 0.5; + + public SeparateIdenticalThread(ArrayList markers, double lodLimit, boolean print, double keepRate) + { + infoMarkers_ = markers; + this.lodLimit = lodLimit; + this.print = print; + this.keepRate = keepRate; + } + + public void run() + { + ArrayList infoMarkers = new ArrayList(); + infoMarkers.addAll(infoMarkers_); + + int oldProgress = 0; + if (print) + System.err.println("computing pairwise LOD scores"); + for (int m1i = 0; m1i < infoMarkers.size() - 1; ++m1i) { + int m1 = infoMarkers.get(m1i); + int c1 = chromosomes.find(m1); + + if (print) { + int newProgress = 10 * m1i / infoMarkers.size(); + for (int i = oldProgress; i < newProgress; ++i) + System.err.print(i + 1); + oldProgress = newProgress; + } + + int infoIndex = m1i + 1; + + for (int m2i = m1i + 1; m2i < infoMarkers.size(); ++m2i) + { + int m2 = infoMarkers.get(m2i); + int c2 = chromosomes.find(m2); + boolean didJoin = false; + if (c1 != c2) { + double lod = computeLOD(m1, m2); + if (lod >= lodLimit) { + c1 = chromosomes.union(c1, c2); + didJoin = true; + } + } + if (!didJoin || Math.random() < keepRate) { + infoMarkers.set(infoIndex, m2); + ++infoIndex; + } + } + for (int i = infoMarkers.size() - 1; i >= infoIndex; --i) + infoMarkers.remove(i); + + } + + infoMarkers.clear(); + + ArrayList> markers = new ArrayList>(); + + int name[] = new int[getNumMarkers()]; + int numC = 0; + + for (int m : infoMarkers_) { + int c = chromosomes.find(m); + if (name[c] == 0) + name[c] = ++numC; + while (markers.size() < name[c]) { + markers.add(new ArrayList()); + } + markers.get(name[c] - 1).add(m); + } + + for (ArrayList al : markers) { + joinIdenticals(al, theta1, theta2, lodLimit, identicals); + for (int m : al) + infoMarkers.add(m); + } + + + + infoMarkers_.clear(); + infoMarkers_.addAll(infoMarkers); + + if (print) + System.err.println(" done!"); + } + } + + + public LGMap2 separateIdenticals(double lodLimit_[], int numParts, int numThreads, boolean removeSingles, double keepRate, boolean betweenSameTypeOnly) + { + + if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) + Error.error(701); + + if (!betweenSameTypeOnly && lodLimit_.length > 1) + Error.error(702); + + String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; + + numThreads = Math.min(numThreads, numParts); + + chromosomes = new UnionFind(getNumMarkers()); + identicals = new UnionFind(getNumMarkers()); + + for (String mask : masks) { + double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; + + ArrayList infoMarkers = new ArrayList(); + ArrayList maxScores = new ArrayList(); + + for (int m1 = 0; m1 < getNumMarkers(); ++m1) { + boolean informative = false; + for (Family2 f : data.getFamilies()) { + int imode = 0; + if (f.isFatherInformative(m1)) + ++imode; + if (f.isMotherInformative(m1)) + imode +=2; + if (mask.contains("" + imode)) { + informative = true; + break; + } + } + if (informative) { + double maxLODScore = 0.0; + for (Family2 f : data.getFamilies()) + maxLODScore += f.maxLodScore(theta1, theta2, m1); + + if (maxLODScore >= lodLimit) { + infoMarkers.add(m1); + maxScores.add(maxLODScore); + } + } + } + + + int markerIndex[] = new int[getNumMarkers()]; + int index = 0; + for (int m : infoMarkers) { + markerIndex[m] = index >> 5; // keep 32 adjacent markers together (physical order) + if ((++index >> 5) >= numParts) + index = 0; + } + + Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(maxScores); + Integer[] indexes = comparator.createIndexArray(); + Arrays.sort(indexes, comparator); + + ArrayList infoMarkers2 = new ArrayList(); + + + for (int i : indexes) { + infoMarkers2.add(infoMarkers.get(i)); + //System.err.println(maxScores.get(i)); + } + infoMarkers = infoMarkers2; + Collections.reverse(infoMarkers); + + ArrayList> infoMarkersForEachThread = new ArrayList>(); + + + + for (int i = 0; i < numParts; ++i) + infoMarkersForEachThread.add(new ArrayList()); + + for (int m : infoMarkers) { + infoMarkersForEachThread.get(markerIndex[m]).add(m); // keep 32 markers in the physical order together... + } + + Thread threads[] = new Thread[numThreads]; + + for (int j = 0; j < numParts; j+= numThreads) { + for (int i = 1; i < numThreads; ++i) { + if (i + j < numParts) { + threads[i] = new Thread(new SeparateIdenticalThread(infoMarkersForEachThread.get(i + j), lodLimit, false, keepRate)); + threads[i].start(); + } + } + new SeparateIdenticalThread(infoMarkersForEachThread.get(j), lodLimit, true, keepRate).run(); + int t = 1; + while (t < numThreads) { + while (threads[t].isAlive()) + try { + threads[t].join(); + } catch (Exception e) { + e.printStackTrace(); + Error.error(-99999999); + } + ++t; + } + } + + if (numParts >= 1) { + System.err.println("combining all"); + + System.err.print(infoMarkers.size() + "->"); + + if (removeSingles) { + int sizes[] = new int[getNumMarkers()]; + int sizes2[] = new int[getNumMarkers()]; + for (int m = 0; m < getNumMarkers(); ++m) { + ++sizes[identicals.find(m)]; + ++sizes2[chromosomes.find(m)]; + } + + for (int i = 0; i < numParts; ++i) { + ArrayList ml = infoMarkersForEachThread.get(i); + ArrayList ml2 = new ArrayList(); + for (int m : ml) + if (sizes2[chromosomes.find(m)] > 1 && sizes[identicals.find(m)] >= 1) { + ml2.add(m); + sizes[identicals.find(m)] = 0; + } + infoMarkersForEachThread.set(i, ml2); + } + } + + infoMarkers.clear(); + int maxM = 0; + for (int i = 0; i < numParts; ++i) + maxM = Math.max(maxM, infoMarkersForEachThread.get(i).size()); + + for (int m = 0; m < maxM; ++m) + for (int i = 0; i < numParts; ++i) { + ArrayList ml = infoMarkersForEachThread.get(i); + if (ml.size() > m) + infoMarkers.add(ml.get(m)); + } + System.err.println(infoMarkers.size()); + + SeparateIdenticalThread st = new SeparateIdenticalThread(infoMarkers, lodLimit, true, 1.0); + int oldSize = infoMarkers.size(); + st.run(); + System.err.println(oldSize + "->" + infoMarkers.size()); + st.run(); + } + } + + int sizes[] = new int[getNumMarkers()]; + int names[] = new int[getNumMarkers()]; + int numChromosomes = 0; + + for (int m = 0; m < getNumMarkers(); ++m) { + int c = identicals.find(m); + ++sizes[c]; + if (names[c] == 0 && sizes[c] > 1) + names[c] = ++numChromosomes; + } + //System.err.println("numChromosomes = " + numChromosomes); + + LGMap2 lGMap = new LGMap2(getNumMarkers()); + for (int m = 0; m < getNumMarkers(); ++m) + lGMap.setLGName(m, names[identicals.find(m)]); + + lGMap.renameLGs(); + for (int m = 0; m < getNumMarkers(); ++m) { + int c = identicals.find(m); + if (names[c] > 0) { + printPatterns(lGMap.getLGName(m), sizes[c], m); + names[c] = 0; + } + } + + //lGMap.printLGAssignment(numMarkers); + return lGMap; + } + + public void outputData() + { + outputData(0); + } + public void outputData(int sizeLimit) + { + + System.out.print("CHR\tPOS"); + for (Family2 f : data.getFamilies()) { + for (int i = 0; i < f.getNumChildren() + 2; ++i) + System.out.print("\t" + f.getName()); + } + System.out.println(); + + System.out.print("CHR\tPOS"); + int fam = 1; + for (Family2 f : data.getFamilies()) { + for (int i = 0; i < f.getNumChildren() + 2; ++i) + System.out.print("\t" + (i + fam)); + fam += f.getNumChildren() + 3; + } + System.out.println(); + + System.out.print("CHR\tPOS"); + fam = 1; + for (Family2 f : data.getFamilies()) { + System.out.print("\t0\t0"); + for (int i = 0; i < f.getNumChildren(); ++i) + System.out.print("\t" + fam); + fam += f.getNumChildren() + 3; + + } + System.out.println(); + + System.out.print("CHR\tPOS"); + fam = 1; + for (Family2 f : data.getFamilies()) { + System.out.print("\t0\t0"); + for (int i = 0; i < f.getNumChildren(); ++i) + System.out.print("\t" + (fam + 1)); + fam += f.getNumChildren() + 3; + } + System.out.println(); + + System.out.print("CHR\tPOS"); + for (Family2 f : data.getFamilies()) { + System.out.print("\t1\t2"); + for (int i = 0; i < f.getNumChildren(); ++i) + System.out.print("\t0"); + } + System.out.println(); + + System.out.print("CHR\tPOS"); + for (Family2 f : data.getFamilies()) { + for (int i = 0; i < f.getNumChildren() + 2; ++i) + System.out.print("\t0"); + } + System.out.println(); + + HashMap hm = new HashMap(); + + for (Family2 f : data.getFamilies()) + for (int m1 = 0; m1 < getNumMarkers(); ++m1) { + float p[] = f.getProb(m1); + if (!hm.containsKey(p)) + hm.put(p, 0); + hm.put(p, hm.get(p) + 1); + } + + for (int m1 = 0; m1 < getNumMarkers(); ++m1) { + //System.out.print("CHR\tPOS"); + //System.out.print(data.getMarkerName(m1)); + StringBuilder sb = new StringBuilder(data.getMarkerName(m1)); + for (Family2 f : data.getFamilies()) { + float p[] = f.getProb(m1); + if (hm.get(p) < sizeLimit) + p = null; + if (p == null || (!f.isFatherInformative(m1) && !f.isMotherInformative(m1))) { + for (int i = 0; i < f.getNumChildren() + 2; ++i) + //System.out.print("\t1 1 1 1 1 1 1 1 1 1"); + sb.append("\t1 1 1 1 1 1 1 1 1 1"); + } else { + int tableSize = p.length; + if (f.isFatherInformative(m1) && f.isMotherInformative(m1)) { + //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); + //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); + sb.append("\t0 1 0 0 0 0 0 0 0 0\t0 1 0 0 0 0 0 0 0 0"); + for (int i = 0; i < tableSize; i+=4) { + double r0 = p[i]; + double r2 = p[i + 3]; + double r1 = 1 - r0 - r2; + double max = Math.max(r0, Math.max(r1, r2)); + //System.out.print("\t" + r0 / max + " " + r1 / max + " 0 0 " + r2/max + " 0 0 0 0 0"); + sb.append("\t" + r0 / max + " " + r1 / max + " 0 0 " + r2/max + " 0 0 0 0 0"); + } + } + else if (f.isFatherInformative(m1)) { + //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); + //System.out.print("\t1 0 0 0 0 0 0 0 0 0"); + sb.append("\t0 1 0 0 0 0 0 0 0 0\t1 0 0 0 0 0 0 0 0 0"); + for (int i = 0; i < tableSize; i+=4) { + double r = (p[i] + p[i + 1]); + double max = Math.max(r, 1 - r); + sb.append("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); + //System.out.print("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); + } + + } + else if (f.isMotherInformative(m1)) { + //System.out.print("\t1 0 0 0 0 0 0 0 0 0"); + //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); + sb.append("\t1 0 0 0 0 0 0 0 0 0\t0 1 0 0 0 0 0 0 0 0"); + for (int i = 0; i < tableSize; i+=4) { + double r = (p[i] + p[i + 2]); + double max = Math.max(r, 1 - r); + sb.append("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); + //System.out.print("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); + } + } + } + + } + //System.out.println(); + System.out.println(sb); + } + } + + private final int MAX_TABLE_SIZE = 1000000; + + private final int RAND_TABLE_SIZE = 1024; + + private class SeparateThread implements Runnable{ + private ArrayList infoMarkers; + private double lodLimit; + private boolean print; + + private int numResults = 0; + private int resultsM1[] = new int[MAX_TABLE_SIZE]; + private int resultsM2[] = new int[MAX_TABLE_SIZE]; + private int prevR1 = 0; + private int prevR2 = 0; + private int rand[] = null; + private boolean sample = false; + + private int m1i, m2i, start, numThreads; + + int oldProgress = 0; + + + public SeparateThread(ArrayList markers, int start, int numThreads, double lodLimit, boolean print, double samplingRate) + { + this.infoMarkers = markers; + this.lodLimit = lodLimit; + this.print = print; + this.start = start; + this.numThreads = numThreads; + this.m1i = 0; + this.m2i = start + 1; + this.sample = false; + + if (samplingRate < 1.0) { + sample = true; + rand = new int[RAND_TABLE_SIZE]; + for (int i = 0; i < RAND_TABLE_SIZE; ++i) { + double r = 0.0; + while (r < 1e-20) + r = Math.random(); + int j = 1; + while (r >= samplingRate) { + r *= (1 - samplingRate); + ++j; + } + rand[i] = j * numThreads; + } + } + + } + + + public void run() + { + int rindex = 0; + numResults = 0; + while (m1i < infoMarkers.size() - 1) { + int m1 = infoMarkers.get(m1i); + int c1 = chromosomes.find(m1); + if (print) { + int newProgress = 10 * m1i / infoMarkers.size(); + for (int i = oldProgress; i < newProgress; ++i) + System.err.print(i + 1); + oldProgress = newProgress; + } + while (m2i < infoMarkers.size()) { + int m2 = infoMarkers.get(m2i); + int c2 = chromosomes.find(m2); + if (c1 != c2 && ((prevR1 != c1 || prevR2 != c2) && (prevR1 != c2 || prevR2 != c1))) { + double lod = computeLOD(m1, m2); + if (lod >= lodLimit) { + resultsM1[numResults] = c1; + resultsM2[numResults] = c2; + prevR1 = c1; + prevR2 = c2; + ++numResults; + if (numResults == MAX_TABLE_SIZE) { + processResults(); + c1 = chromosomes.find(m1); + } + //if (numResults == MAX_TABLE_SIZE) + // return; + } + } + if (sample) + m2i += rand[(rindex++) & (RAND_TABLE_SIZE - 1)]; + else + m2i += numThreads; + } + ++m1i; + m2i = start + m1i + 1; + } + + processResults(); + + if (print) + System.err.println(" done!"); + } + + public void processResults() + { + lock.lock(); + try { + for (int r = 0; r < numResults; ++r) + chromosomes.union(resultsM1[r], resultsM2[r]); + numResults = 0; + } finally { + lock.unlock(); + } + } + } + + public LGMap2 separateChromosomes(double lodLimit, int numThreads, double samplePairs) + { + chromosomes = new UnionFind(getNumMarkers()); + ArrayList infoMarkers = new ArrayList(); + + for (int m1 = 0; m1 < getNumMarkers(); ++m1) { + boolean informative = false; + for (Family2 f : data.getFamilies()) + if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) { + informative = true; + break; + } + + if (informative) { + double maxLODScore = 0.0; + for (Family2 f : data.getFamilies()) + maxLODScore += f.maxLodScore(theta1, theta2, m1); + if (maxLODScore >= lodLimit) + infoMarkers.add(m1); + } + } + System.err.println("computing pairwise LOD scores"); + + if (samplePairs < 0.0001) { + samplePairs = 0.0001; + System.err.println("Warning: samplePairs rounded to " + samplePairs); + } + + SeparateThread sepT[] = new SeparateThread[numThreads]; + for (int t = 0; t < numThreads; ++t) + sepT[t] = new SeparateThread(infoMarkers, t, numThreads, lodLimit, t == 0, samplePairs); + + Thread threads[] = new Thread[numThreads]; + + if (numThreads > 1) { + for (int t = 0; t < numThreads; ++t) { + threads[t] = new Thread(sepT[t]); + threads[t].start(); + } + try { + for (int t = 0; t < numThreads; ++t) + if (threads[t].isAlive()) + threads[t].join(); + } catch (Exception e) { + e.printStackTrace(); + Error.error(-99999999); + } + } else + sepT[0].run(); + System.err.println(" done!"); + + int sizes[] = new int[getNumMarkers()]; + for (int m = 0; m < getNumMarkers(); ++m) + ++sizes[chromosomes.find(m)]; + + int names[] = new int[getNumMarkers()]; + int numChromosomes = 0; + int numSingles = 0; + for (int m = 0; m < getNumMarkers(); ++m) { + if (sizes[m] > 1) + names[chromosomes.find(m)] = ++numChromosomes; + else if (sizes[m] == 1) + ++numSingles; + } + System.err.println("number of LGs = " + numChromosomes + " singles = " + numSingles); + LGMap2 lGMap = new LGMap2(getNumMarkers()); + for (int m = 0; m < getNumMarkers(); ++m) + lGMap.setLGName(m, names[chromosomes.find(m)]); + lGMap.renameLGs(); + + return lGMap; + } + + public void setMinLod(double parseDouble) { + // TODO Auto-generated method stub + minLod = parseDouble; + } + + +} diff --git a/software/LepMap3/lm3/src/SeparateChromosomes2.java b/software/LepMap3/lm3/src/SeparateChromosomes2.java new file mode 100644 index 0000000..304160e --- /dev/null +++ b/software/LepMap3/lm3/src/SeparateChromosomes2.java @@ -0,0 +1,141 @@ +import java.util.ArrayList; + +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ + +public class SeparateChromosomes2 { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(1401); + String extraParameters = ""; + System.out.print("#java SeparateChromosomes2 "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(1401); + pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "numThreads", "lod3Mode", "subsample", "distortionLod", "map", "lg", "renameLGs", "families", "samplePairs", "phasedData", "grandparentPhase", "minLod"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.03")); + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); + + boolean gpPhase = false; + if (pp.getValueAsString("grandparentPhase", "0").equals("1")) { + gpPhase = true; + } + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + sc.setMinLod(Double.parseDouble(pp.getValueAsString("minLod", "" + Double.NEGATIVE_INFINITY))); + + String mapFile = pp.getValueAsString("map", null); + LGMap2 map2 = new LGMap2(); + int lg = Integer.parseInt(pp.getValueAsString("lg", "1")); + boolean mask[] = null; + if (mapFile != null) { //Refine previous lg assignment + if (!(map2.loadLGMap(mapFile))) + Error.error(1011); + int nv = pp.getNumberOfValues("lg"); + if (nv > 1) + Error.error(1012); + + int numMarkers = map2.getNumMarkers(); + mask = new boolean[numMarkers];// make a mask to skip unnecessary markers + for (int i = 0; i < numMarkers; ++i) { + if (map2.getLGName(i) == lg) + mask[i] = true; + } + } + + + String dataFile = pp.getValueAsString("data", null); + if (dataFile == null) + Error.error(1402); + + sc.addFamilyFromFile(dataFile, pp.getValueAsString("informativeMask", "0123"), mask, gpPhase); + + if (mapFile != null) { + if (sc.getNumMarkers() != map2.getNumMarkers()) + Error.error(1013); + sc.maskLG(map2, lg); + } + sc.setPhasedData(pp.getValueAsString("phasedData", "0").equals("1") || gpPhase); + + int nv = pp.getNumberOfValues("lodLimit"); + if (nv > 1) + Error.error(1010); + double lodLimit = Double.parseDouble(pp.getValueAsString("lodLimit", "10.0")); + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + double subFraction = Double.parseDouble(pp.getValueAsString("subsample", "1.0")); + sc.subsample(subFraction); + + if (pp.getValueAsString("distortionLod", "0").equals("1")) + sc.setDistortionLodMode(); + + + if (pp.getNumberOfValues("families") > 0) { + ArrayList f = pp.getValue("families"); + sc.keepFamilies(f); + } + + + LGMap2 map = sc.separateChromosomes(lodLimit, Integer.parseInt(pp.getValueAsString("numThreads", "1")), Double.parseDouble(pp.getValueAsString("samplePairs", "1.0"))); + + if (mapFile != null) { //Refine previous lg assignment + int numLGs = map2.getNumLGs(); + for (int i = 0; i < map.getNumMarkers(); ++i) { + int lgMap = map.getLGName(i); + int lgMap2 = map2.getLGName(i); + if (lgMap == 0) { + if (lgMap2 != lg) + map.setLGName(i, lgMap2); + } else { // lgMap > 0 + if (lgMap == 1) //largest group keeps name lg + map.setLGName(i, lg); + else + map.setLGName(i, lgMap + numLGs - 1); //others go to the end + } + } + if (pp.getValueAsString("renameLGs", "1").equals("1")) + map.renameLGs(); + } else + map.renameLGs(); + + map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); + map.printLGAssignment(sc.getNumMarkers()); + + //data.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + //sep.separateChromosomesLOD2(lodLimit); + //LGMap cm = sep.getLGMap(); + //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + //cm.printLGAssignment(data); + } +} diff --git a/software/LepMap3/lm3/src/SeparateIdenticals.java b/software/LepMap3/lm3/src/SeparateIdenticals.java new file mode 100644 index 0000000..3407159 --- /dev/null +++ b/software/LepMap3/lm3/src/SeparateIdenticals.java @@ -0,0 +1,100 @@ +import java.util.ArrayList; + +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +//Should this work only for a single family? +public class SeparateIdenticals { + public static void main(String args[]) + { + if (args.length == 0) + Error.error(401); + String extraParameters = ""; + System.out.print("#java SeparateIdenticals "); + for (int i = 0; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(401); + pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "numThreads", "numParts", "removeSingles", "lod3Mode", "keepRate", "betweenSameType", "families"}); + + double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); + double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); + double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); + + Separate2 sc = new Separate2(); + sc.setTheta1(theta1); + sc.setTheta2(theta2); + + int numDataFiles = pp.getNumberOfValues("data"); + if (numDataFiles == 0 || numDataFiles > 1) + Error.error(402); + for (int i = 0; i < numDataFiles; ++i) { + String filename = pp.getValueAsString("data", i, null); + if (filename == null) + Error.error(403); + sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); + } + + double lodLimit[]; + int nv = pp.getNumberOfValues("lodLimit"); + if (nv >= 2) { + lodLimit = new double[nv]; + for (int i = 0; i < nv; ++i) + lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); + } else + lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; + + sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); + int numThreads = Integer.parseInt(pp.getValueAsString("numThreads", "1")); + + sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); + + boolean sameType = pp.getValueAsString("betweenSameType", "0").equals("1"); + if (sameType) { + if (lodLimit.length != 3) // either 3 values... + Error.error(4499); + } + + if (pp.getNumberOfValues("families") > 0) { + ArrayList f = pp.getValue("families"); + sc.keepFamilies(f); + } + + LGMap2 map = sc.separateIdenticals(lodLimit, Integer.parseInt(pp.getValueAsString("numParts", "" + numThreads)), numThreads, pp.getValueAsString("removeSingles", "1").equals("1"), Double.parseDouble(pp.getValueAsString("keepRate", "1.0")), sameType); + ///if (pp.getValueAsString("outputData", "0").equals("1")) { + // sc.outputData(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + //} else { + map.renameLGs(); + map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); + map.printLGAssignment(sc.getNumMarkers()); + //} + + //data.maskInformative(pp.getValueAsString("informativeMask", "0123")); + + //sep.separateChromosomesLOD2(lodLimit); + //LGMap cm = sep.getLGMap(); + //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); + //cm.printLGAssignment(data); + } +} diff --git a/software/LepMap3/lm3/src/ShortPath.java b/software/LepMap3/lm3/src/ShortPath.java new file mode 100644 index 0000000..cfc7cac --- /dev/null +++ b/software/LepMap3/lm3/src/ShortPath.java @@ -0,0 +1,344 @@ +/** + This file is part of Lep-MAP3. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge + +*/ +import java.util.*; +import java.io.*; + +public class ShortPath{ + + private ArrayList edges = new ArrayList(); + private int numNodes; + private ArrayList nodeNames = new ArrayList(); + + private ArrayList edgeWeights = new ArrayList(); + private ArrayList nodeWeights = new ArrayList(); + private ArrayList prints = new ArrayList(); + + private int alpha = 0; + private int beta = 1; + + UnionFind uf = null; + int cname[] = null; + int size[] = null; + int numComponents = 0; + + HashMap hm = new HashMap(); + + public ShortPath(int alpha, int beta) { + this.alpha = alpha; + this.beta = beta; + } + + private int addNode(String name, long segPrint[][], int weight) + { + if (!hm.containsKey(name)) { + hm.put(name, numNodes); + nodeNames.add(name); + nodeWeights.add(weight); + prints.add(segPrint); + return numNodes++; + } else + return hm.get(name); + } + + + public void connectedComponenets() { + cname = new int[numNodes]; + size = new int[numNodes]; + numComponents = 0; + for (int n = 0; n < numNodes; ++n) { + int c = uf.find(n); + if (cname[c] == 0) + cname[c] = ++numComponents; + ++size[cname[c]]; + } + System.out.println("#Connected components = " + numComponents); + } + + + private void allPairsShortestPaths(String name1, String name2, ArrayList nodeIndex, ArrayList edgeIndex, int component) + { + int numNodes = nodeIndex.size(); + + int sp[][] = new int[numNodes][numNodes]; + int sp2[][] = new int[numNodes][numNodes]; + + int next[][] = new int[numNodes][numNodes]; + //int count[][] = new int[numNodes][numNodes]; + + for (int i = 0; i < numNodes; ++i) + for (int j = 0; j < numNodes; ++j) { + sp[i][j] = (i == j) ? 0 : Integer.MAX_VALUE; + sp2[i][j] = nodeWeights.get(nodeIndex.get(i)); + } + + for (int ei : edgeIndex) { + int n1 = edges.get(ei)[0]; + int n2 = edges.get(ei)[1]; + + int w = edgeWeights.get(ei); + int nw = nodeWeights.get(n1) + nodeWeights.get(n2); + + for (int i = 0; i < numNodes; ++i) { + int ni = nodeIndex.get(i); + if (ni == n1) { + n1 = i; + break; + } + } + for (int i = 0; i < numNodes; ++i) { + int ni = nodeIndex.get(i); + if (ni == n2) { + n2 = i; + break; + } + } + + + if (w == 0) { + sp[n1][n2] = (n1 < n2) ? 0 : 1; + sp[n2][n1] = (n1 < n2) ? 1 : 0; + } else { + sp[n1][n2] = w; + sp[n2][n1] = w; + } + sp2[n1][n2] = nw; + sp2[n2][n1] = nw; + next[n1][n2] = n2; + next[n2][n1] = n1; + } + + for (int k = 0; k < numNodes; ++k) + for (int i = 0; i < numNodes; ++i) + if (sp[i][k] < Integer.MAX_VALUE) + for (int j = 0; j < numNodes; ++j) + if (sp[k][j] < Integer.MAX_VALUE) { + int newValue = sp[i][k] + sp[k][j]; + int newValue2 = sp2[i][k] + sp2[k][j] - nodeWeights.get(nodeIndex.get(k)); + if (newValue < sp[i][j] || (newValue == sp[i][j] && newValue2 > sp2[i][j]) ) { + sp[i][j] = newValue; + sp2[i][j] = newValue2; + next[i][j] = next[i][k]; + //count[i][j] = 1; + }/* else if (newValue == sp[i][j]) { + ++count[i][j]; + if (Math.random() < 1.0 / count[i][j]) + next[i][j] = next[i][k]; + }*/ + } + + + int longestSP = 0; + int maxI = 0; + int maxJ = 0; + int countLongest = 0; + for (int i = 0; i < numNodes; ++i) + for (int j = 0; j < numNodes; ++j) + if (sp2[i][j] >= longestSP) { + if (sp2[i][j] > longestSP) + countLongest = 1; + else + ++countLongest; + if (Math.random() < 1.0 / countLongest) { + maxI = i; + maxJ = j; + } + longestSP = sp2[i][j]; + } + if (name1 != null) { + for (int i = 0; i < numNodes; ++i) + if (nodeNames.get(nodeIndex.get(i)).equals(name1)) + maxI = i; + } + if (name2 != null) { + for (int i = 0; i < numNodes; ++i) + if (nodeNames.get(nodeIndex.get(i)).equals(name2)) + maxJ = i; + } + + + System.out.println("#Path length = " + sp[maxI][maxJ]); + System.out.println("#Path weight = " + sp2[maxI][maxJ]); + + System.err.println("Heviest Shortest Path = " + longestSP); + System.err.println("Number of solutions = " + countLongest); + while (maxI != maxJ) { + //System.out.println("^" + nodeNames.get(next[maxI][maxJ]) + "\t" + nodeNames.get(maxI)); + //System.out.println("^" + nodeNames.get(maxI) + "\t" + nodeNames.get(next[maxI][maxJ])); + System.out.println(nodeNames.get(nodeIndex.get(maxI)) + "\t" + component + "\t" + nodeWeights.get(nodeIndex.get(maxI))); + int oldMaxI = maxI; + maxI = next[maxI][maxJ]; + if (oldMaxI != maxI) { + int d[] = hammingDistance(prints.get(nodeIndex.get(maxI)), prints.get(nodeIndex.get(oldMaxI))); + if (d[0] != 1) + System.out.println("#distance = " + d[0]); + } + } + System.out.println(nodeNames.get(nodeIndex.get(maxI)) + "\t" + component + "\t" + nodeWeights.get(nodeIndex.get(maxI))); + } + + public void allPairsShortestPaths(String name1, String name2) + { + System.err.println("#Nodes = " + numNodes); + System.err.println("#Edges = " + edges.size()); + + ArrayList> nodeIndex = new ArrayList>(); + ArrayList> edgeIndex = new ArrayList>(); + + for (int component = 0; component <= numComponents; ++component) { + nodeIndex.add(new ArrayList()); + edgeIndex.add(new ArrayList()); + } + + for (int i = 0; i < numNodes; ++i) { + int c = uf.find(i); + nodeIndex.get(cname[c]).add(i); + } + + for (int ei = 0; ei < edges.size(); ++ei) { + int c = uf.find(edges.get(ei)[0]); + edgeIndex.get(cname[c]).add(ei); + } + + + for (int component = 1; component <= numComponents; ++component) { + System.err.println("#Component = " + component); + System.err.println("#Nodes = " + nodeIndex.get(component).size()); + allPairsShortestPaths(name1, name2, nodeIndex.get(component), edgeIndex.get(component), component); + + + } + } + + private long[][] string2BitPrints(String s) + { + int n = s.length(); + long ret[][] = new long[2][(n+63) / 64]; + + int index = 0; + long bitIndex = 1; + + for (int i = 0; i < n; ++i) { + char c = s.charAt(i); + if (c == '0' || c == '2' || c == '1') { + ret[1][index] |= bitIndex; + if (c == '1') + ret[0][index] |= bitIndex; + } + bitIndex *= 2; + if (bitIndex == 0) { + bitIndex = 1; + ++index; + } + } + return ret; + } + + private int[] hammingDistance(long p1[][], long p2[][]) + { + int n = p1[0].length; + int d1 = 0; + int d2 = 0; + for (int i = 0; i < n; ++i) { + long mask = p1[1][i] & p2[1][i]; + long b1 = (p1[0][i] ^ p2[0][i]) & mask; + d1 += Long.bitCount(b1); + d2 += Long.bitCount(b1 ^ mask); + } + if (d1 >= d2) + return new int[]{d2, d1}; + else + return new int[]{d1, d2}; + } + + + public boolean loadPrints(String fn, int type, int sizeLimit, int limit1, int limit2) + { + try { + BufferedReader br = null; + if (fn.equals("-")) + br = new BufferedReader(new InputStreamReader(System.in)); + else + br = new BufferedReader(new FileReader(fn)); + String line = null; + do { + line = br.readLine(); + if (line == null) + break; + if (line.charAt(0) != '#') { + String[] row = line.split("\t"); + if (row.length >= 5 && Integer.parseInt(row[1]) == type && Integer.parseInt(row[2]) > sizeLimit) + addNode(row[0], string2BitPrints(row[(type == 2) ? 4 : 3]), alpha + beta * Integer.parseInt(row[2])); + } + } while (true); + + br.close(); + + uf = new UnionFind(numNodes); + + System.err.println("Computing pair-wise distances"); + for (int n1 = 0; n1 < numNodes; ++n1) + for (int n2 = n1 + 1; n2 < numNodes; ++n2) { + int d[] = hammingDistance(prints.get(n1), prints.get(n2)); + if (d[0] <= limit1 && d[1] >= limit2) { + edges.add(new int[]{n1, n2}); + edgeWeights.add(Math.max(0, 4 * d[0] - 3)); + //edgeWeights.add(d[0]); + uf.union(n1, n2); + } + } + + connectedComponenets(); + + + return true; + + } catch (Exception e) { + System.err.println("Error"); + return false; + } + } + + + public static void main(String args[]) + { + if (args.length == 0) + Error.error(801); + + String extraParameters = ""; + System.out.print("#java ShortPath " + args[0]); + for (int i = 1; i < args.length; ++i) { + extraParameters += args[i] + " "; + System.out.print(" " + args[i]); + } + System.out.println(); + + ParameterParser pp = new ParameterParser(); + if (!pp.init(extraParameters)) + Error.error(801); + pp.warning(new String[]{"informativeMask", "sizeLimit", "limit1", "limit2", "alpha", "beta", "begin", "end"}); + + + ShortPath sp = new ShortPath(Integer.parseInt(pp.getValueAsString("alpha", "0")), Integer.parseInt(pp.getValueAsString("beta", "1"))); + sp.loadPrints(args[0], Integer.parseInt(pp.getValueAsString("informativeMask", "1")), Integer.parseInt(pp.getValueAsString("sizeLimit", "1")), Integer.parseInt(pp.getValueAsString("limit1", "1")), Integer.parseInt(pp.getValueAsString("limit2", "1"))); + + sp.allPairsShortestPaths(pp.getValueAsString("begin", null), pp.getValueAsString("end", null)); + + } +} diff --git a/software/LepMap3/lm3/src/UnionFind.java b/software/LepMap3/lm3/src/UnionFind.java new file mode 100644 index 0000000..c211192 --- /dev/null +++ b/software/LepMap3/lm3/src/UnionFind.java @@ -0,0 +1,73 @@ +/** + This file is part of Lep-MAP. + + Lep-MAP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Lep-MAP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Lep-MAP. If not, see . + + Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki +*/ +// Union-Find data structure + +public class UnionFind { + + private volatile int rank[]; + private volatile int uf[]; + + public UnionFind(int size) + { + rank = new int[size]; + uf = new int[size]; + for (int i = 0; i < size; ++i) + uf[i] = i; + } + public int find(int element) { + int j = element; + while (j != uf[j]) + j = uf[j]; + + int i = element; + while (i != uf[i]) { + int t = uf[i]; + uf[i] = j; + i = t; + } + + return j; + } + public int union(int element1, int element2) { + int i = find(element1); + int j = find(element2); + if (i != j) { + if (rank[j] > rank[i]) + uf[i] = j; + else if (rank[j] < rank[i]) + uf[j] = i; + else { + uf[j] = i; + ++rank[i]; + } + } + return uf[i]; + } + + public static void main(String args[]) + { + final int size = 6000000; + final UnionFind uf = new UnionFind(size); + + for (int i = 0; i < size / 2; ++i) + uf.union(size / 2 + i, i/32); + for (int i = 0; i < 64; ++i) + System.err.println(uf.find(i) + "\t " + uf.rank[i]); + } +} From afe893195ad8e22a7f726cba18f734818c5115eb Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Wed, 2 Jun 2021 12:49:18 -0400 Subject: [PATCH 26/27] update LepMap3 --- software/LepMap3/lm3/COPYING | 674 ---- software/LepMap3/lm3/README | 33 - software/LepMap3/lm3/bin/Constants.class | Bin 1077 -> 0 bytes software/LepMap3/lm3/bin/Data2.class | Bin 8787 -> 0 bytes .../lm3/bin/DataParser$FileParser.class | Bin 234 -> 0 bytes .../lm3/bin/DataParser$PosteriorParser.class | Bin 2525 -> 0 bytes .../lm3/bin/DataParser$VCFParser.class | Bin 9452 -> 0 bytes software/LepMap3/lm3/bin/DataParser.class | Bin 11979 -> 0 bytes software/LepMap3/lm3/bin/Error.class | Bin 23325 -> 0 bytes software/LepMap3/lm3/bin/Family2.class | Bin 24561 -> 0 bytes software/LepMap3/lm3/bin/Filtering2.class | Bin 15798 -> 0 bytes software/LepMap3/lm3/bin/GammaFunction.class | Bin 2336 -> 0 bytes .../LepMap3/lm3/bin/IBD$FilterThread.class | Bin 1081 -> 0 bytes .../LepMap3/lm3/bin/IBD$PairwiseThread.class | Bin 1615 -> 0 bytes .../lm3/bin/IBD$ParentCheckThread.class | Bin 3270 -> 0 bytes software/LepMap3/lm3/bin/IBD.class | Bin 16443 -> 0 bytes software/LepMap3/lm3/bin/Input.class | Bin 5202 -> 0 bytes .../LepMap3/lm3/bin/JoinIdenticalLGs.class | Bin 2929 -> 0 bytes .../LepMap3/lm3/bin/JoinSingles2All.class | Bin 3476 -> 0 bytes .../lm3/bin/JoinSingles2Identicals.class | Bin 3110 -> 0 bytes .../lm3/bin/LGMap2$intArrayComparator.class | Bin 1133 -> 0 bytes software/LepMap3/lm3/bin/LGMap2.class | Bin 5447 -> 0 bytes software/LepMap3/lm3/bin/LMPlot.class | Bin 10558 -> 0 bytes software/LepMap3/lm3/bin/MarkerList.class | Bin 4065 -> 0 bytes .../lm3/bin/Misc$ArrayIndexComparator.class | Bin 1800 -> 0 bytes .../LepMap3/lm3/bin/Misc$KthSmallest.class | Bin 946 -> 0 bytes software/LepMap3/lm3/bin/Misc.class | Bin 8962 -> 0 bytes software/LepMap3/lm3/bin/Order.class | Bin 17692 -> 0 bytes ...lelScoreCalculator$UpdateScoreThread.class | Bin 1915 -> 0 bytes ...r$MergeClass$ParallelScoreCalculator.class | Bin 3336 -> 0 bytes .../lm3/bin/OrderFinder$MergeClass.class | Bin 4940 -> 0 bytes .../lm3/bin/OrderFinder$PhysicalFamily.class | Bin 3047 -> 0 bytes ...nder$SingleFamily$RecombinationScale.class | Bin 845 -> 0 bytes ...der$SingleFamily$RecombinationScale1.class | Bin 3848 -> 0 bytes ...der$SingleFamily$RecombinationScale2.class | Bin 4280 -> 0 bytes .../lm3/bin/OrderFinder$SingleFamily.class | Bin 21905 -> 0 bytes .../lm3/bin/OrderFinder$polishThread.class | Bin 1645 -> 0 bytes software/LepMap3/lm3/bin/OrderFinder.class | Bin 31624 -> 0 bytes software/LepMap3/lm3/bin/OrderMarkers2.class | Bin 6060 -> 0 bytes software/LepMap3/lm3/bin/OutputData.class | Bin 2628 -> 0 bytes .../LepMap3/lm3/bin/ParameterParser.class | Bin 7275 -> 0 bytes software/LepMap3/lm3/bin/ParentCall2.class | Bin 25527 -> 0 bytes .../LepMap3/lm3/bin/Pileup2Likelihoods.class | Bin 13976 -> 0 bytes software/LepMap3/lm3/bin/QTL.class | Bin 10536 -> 0 bytes .../lm3/bin/Separate2$JoinSinglesThread.class | Bin 3329 -> 0 bytes ...parate2$JoinSinglesThreadMaxDistance.class | Bin 3287 -> 0 bytes .../Separate2$SeparateIdenticalThread.class | Bin 3548 -> 0 bytes .../lm3/bin/Separate2$SeparateThread.class | Bin 3289 -> 0 bytes software/LepMap3/lm3/bin/Separate2.class | Bin 30521 -> 0 bytes .../lm3/bin/SeparateChromosomes2.class | Bin 4422 -> 0 bytes .../LepMap3/lm3/bin/SeparateIdenticals.class | Bin 3667 -> 0 bytes software/LepMap3/lm3/bin/ShortPath.class | Bin 10253 -> 0 bytes software/LepMap3/lm3/bin/UnionFind.class | Bin 1705 -> 0 bytes software/LepMap3/lm3/qtl.R | 98 - software/LepMap3/lm3/qtl.png | Bin 25626 -> 0 bytes software/LepMap3/lm3/qtlPerm.R | 104 - software/LepMap3/lm3/qtldata1.12 | 268 -- software/LepMap3/lm3/qtlphenotypes.txt | 508 --- software/LepMap3/lm3/src/Constants.java | 44 - software/LepMap3/lm3/src/Data2.java | 268 -- software/LepMap3/lm3/src/DataParser.java | 779 ----- software/LepMap3/lm3/src/Error.java | 469 --- software/LepMap3/lm3/src/Family2.java | 1144 ------- software/LepMap3/lm3/src/Filtering2.java | 623 ---- software/LepMap3/lm3/src/GammaFunction.java | 200 -- software/LepMap3/lm3/src/IBD.java | 720 ---- software/LepMap3/lm3/src/Input.java | 167 - .../LepMap3/lm3/src/JoinIdenticalLGs.java | 83 - software/LepMap3/lm3/src/JoinSingles2All.java | 99 - .../lm3/src/JoinSingles2Identicals.java | 86 - software/LepMap3/lm3/src/LGMap2.java | 204 -- software/LepMap3/lm3/src/LMPlot.java | 377 --- software/LepMap3/lm3/src/MarkerList.java | 160 - software/LepMap3/lm3/src/Misc.java | 384 --- software/LepMap3/lm3/src/Order.java | 577 ---- software/LepMap3/lm3/src/OrderFinder.java | 2953 ----------------- software/LepMap3/lm3/src/OrderMarkers2.java | 176 - software/LepMap3/lm3/src/OutputData.java | 78 - software/LepMap3/lm3/src/ParameterParser.java | 216 -- software/LepMap3/lm3/src/ParentCall2.java | 1021 ------ .../LepMap3/lm3/src/Pileup2Likelihoods.java | 549 --- software/LepMap3/lm3/src/Separate2.java | 1414 -------- .../LepMap3/lm3/src/SeparateChromosomes2.java | 141 - .../LepMap3/lm3/src/SeparateIdenticals.java | 100 - software/LepMap3/lm3/src/ShortPath.java | 344 -- software/LepMap3/lm3/src/UnionFind.java | 73 - 86 files changed, 15134 deletions(-) delete mode 100644 software/LepMap3/lm3/COPYING delete mode 100644 software/LepMap3/lm3/README delete mode 100644 software/LepMap3/lm3/bin/Constants.class delete mode 100644 software/LepMap3/lm3/bin/Data2.class delete mode 100644 software/LepMap3/lm3/bin/DataParser$FileParser.class delete mode 100644 software/LepMap3/lm3/bin/DataParser$PosteriorParser.class delete mode 100644 software/LepMap3/lm3/bin/DataParser$VCFParser.class delete mode 100644 software/LepMap3/lm3/bin/DataParser.class delete mode 100644 software/LepMap3/lm3/bin/Error.class delete mode 100644 software/LepMap3/lm3/bin/Family2.class delete mode 100644 software/LepMap3/lm3/bin/Filtering2.class delete mode 100644 software/LepMap3/lm3/bin/GammaFunction.class delete mode 100644 software/LepMap3/lm3/bin/IBD$FilterThread.class delete mode 100644 software/LepMap3/lm3/bin/IBD$PairwiseThread.class delete mode 100644 software/LepMap3/lm3/bin/IBD$ParentCheckThread.class delete mode 100644 software/LepMap3/lm3/bin/IBD.class delete mode 100644 software/LepMap3/lm3/bin/Input.class delete mode 100644 software/LepMap3/lm3/bin/JoinIdenticalLGs.class delete mode 100644 software/LepMap3/lm3/bin/JoinSingles2All.class delete mode 100644 software/LepMap3/lm3/bin/JoinSingles2Identicals.class delete mode 100644 software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class delete mode 100644 software/LepMap3/lm3/bin/LGMap2.class delete mode 100644 software/LepMap3/lm3/bin/LMPlot.class delete mode 100644 software/LepMap3/lm3/bin/MarkerList.class delete mode 100644 software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class delete mode 100644 software/LepMap3/lm3/bin/Misc$KthSmallest.class delete mode 100644 software/LepMap3/lm3/bin/Misc.class delete mode 100644 software/LepMap3/lm3/bin/Order.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$MergeClass.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$SingleFamily.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder$polishThread.class delete mode 100644 software/LepMap3/lm3/bin/OrderFinder.class delete mode 100644 software/LepMap3/lm3/bin/OrderMarkers2.class delete mode 100644 software/LepMap3/lm3/bin/OutputData.class delete mode 100644 software/LepMap3/lm3/bin/ParameterParser.class delete mode 100644 software/LepMap3/lm3/bin/ParentCall2.class delete mode 100644 software/LepMap3/lm3/bin/Pileup2Likelihoods.class delete mode 100644 software/LepMap3/lm3/bin/QTL.class delete mode 100644 software/LepMap3/lm3/bin/Separate2$JoinSinglesThread.class delete mode 100644 software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class delete mode 100644 software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class delete mode 100644 software/LepMap3/lm3/bin/Separate2$SeparateThread.class delete mode 100644 software/LepMap3/lm3/bin/Separate2.class delete mode 100644 software/LepMap3/lm3/bin/SeparateChromosomes2.class delete mode 100644 software/LepMap3/lm3/bin/SeparateIdenticals.class delete mode 100644 software/LepMap3/lm3/bin/ShortPath.class delete mode 100644 software/LepMap3/lm3/bin/UnionFind.class delete mode 100644 software/LepMap3/lm3/qtl.R delete mode 100644 software/LepMap3/lm3/qtl.png delete mode 100644 software/LepMap3/lm3/qtlPerm.R delete mode 100644 software/LepMap3/lm3/qtldata1.12 delete mode 100644 software/LepMap3/lm3/qtlphenotypes.txt delete mode 100644 software/LepMap3/lm3/src/Constants.java delete mode 100644 software/LepMap3/lm3/src/Data2.java delete mode 100644 software/LepMap3/lm3/src/DataParser.java delete mode 100644 software/LepMap3/lm3/src/Error.java delete mode 100644 software/LepMap3/lm3/src/Family2.java delete mode 100644 software/LepMap3/lm3/src/Filtering2.java delete mode 100644 software/LepMap3/lm3/src/GammaFunction.java delete mode 100644 software/LepMap3/lm3/src/IBD.java delete mode 100644 software/LepMap3/lm3/src/Input.java delete mode 100644 software/LepMap3/lm3/src/JoinIdenticalLGs.java delete mode 100644 software/LepMap3/lm3/src/JoinSingles2All.java delete mode 100644 software/LepMap3/lm3/src/JoinSingles2Identicals.java delete mode 100644 software/LepMap3/lm3/src/LGMap2.java delete mode 100644 software/LepMap3/lm3/src/LMPlot.java delete mode 100644 software/LepMap3/lm3/src/MarkerList.java delete mode 100644 software/LepMap3/lm3/src/Misc.java delete mode 100644 software/LepMap3/lm3/src/Order.java delete mode 100644 software/LepMap3/lm3/src/OrderFinder.java delete mode 100644 software/LepMap3/lm3/src/OrderMarkers2.java delete mode 100644 software/LepMap3/lm3/src/OutputData.java delete mode 100644 software/LepMap3/lm3/src/ParameterParser.java delete mode 100644 software/LepMap3/lm3/src/ParentCall2.java delete mode 100644 software/LepMap3/lm3/src/Pileup2Likelihoods.java delete mode 100644 software/LepMap3/lm3/src/Separate2.java delete mode 100644 software/LepMap3/lm3/src/SeparateChromosomes2.java delete mode 100644 software/LepMap3/lm3/src/SeparateIdenticals.java delete mode 100644 software/LepMap3/lm3/src/ShortPath.java delete mode 100644 software/LepMap3/lm3/src/UnionFind.java diff --git a/software/LepMap3/lm3/COPYING b/software/LepMap3/lm3/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/software/LepMap3/lm3/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/software/LepMap3/lm3/README b/software/LepMap3/lm3/README deleted file mode 100644 index 476cef3..0000000 --- a/software/LepMap3/lm3/README +++ /dev/null @@ -1,33 +0,0 @@ -Lep-MAP3 (v. 0.2) - -Linkage map construction suite - -See Lep-MAP3 wiki on sourceforge for documentation. - -The files included: - -simulated_data.zip : Used simulated data, commands to run and evaluate MSTmap and Lep-MAP3 on the data -simulated_scripts.zip : Only the scripts to generate the simulated data -binary+code.zip : Lep-MAP3 binaries + source code -binary.zip : Lep-MAP3 binaries only - -How to run Lep-MAP3 (compiled classes located in the folder bin): - -java -cp bin/ ParentCall2 -java -cp bin/ Filtering2 -java -cp bin/ SeparateChromosomes2 -java -cp bin/ JoinSingles2All -java -cp bin/ OrderMarkers2 -java -cp bin/ LMPlot - -java -cp bin/ SeparateIdenticals -java -cp bin/ JoinSingles2Identicals - -(java -cp bin/ OutputData -java -cp bin/ ShortPath) - -How to compile Lep-MAP3: -javac src/*.java -d bin/ - - -(C) 2016-2019, Pasi Rastas, University of Cambridge and University of Helsinki diff --git a/software/LepMap3/lm3/bin/Constants.class b/software/LepMap3/lm3/bin/Constants.class deleted file mode 100644 index aebe048ca9345432f5fd15179f4c50f3d4a881ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1077 zcmYjPOHUI~7(KU->4OVY9g#;=P|!l;AsAF3P^2vdhZfpWG;uT35r&MdwgZX&1%Hj{ zLgGUAF5J2If0!80y#vB5=A8RI&i&3e^W*Q=Zvf`-GKP>qVy)R|`*y=`#}E-n9oZ-L zv}ZRCrc3)rPTd!XS*7*Ds+AWISpkEm>Rw48u1H~{%veCnxm-}3FYT5EBFw9R+c*hW z#40|V5eQqwStU~pG!2zkk1W=S}NxBG{(xWUHve&RQKG5>o4=t^mvUUtu#Kn=aa-;jKwf2&~ssW z%k~c??%_Uf@tOx};7B?S!OM1N3Jk{Ey?&}+F3r+EB!-)U9tea{iNYBlS&SF>BLI-doNCB3;M!l+7=af_n< zq1zVdvd+Izdr=@+X&$%gPTo~YJ^wRPYNHt81Yx>L@oH|4Y(T9`BbTL-8`8+NXyj5f zawQt+TO(a-q-TwEtnmtw9>_zuM*ZuT&V4-7zOJKrjf0o+L+pv;CT>yTHnTqw;T!m9 zV)ztyI!K$C(By%MAx)-C%xE%e;*lovCi*ma(i^a52MZ>aPO;p@Pj t2mZV}T16@G!<~7XBMQc&6JJodxF*RWAWh>Fx=jW}*hP(Tfjuqt;vW)notyvw diff --git a/software/LepMap3/lm3/bin/Data2.class b/software/LepMap3/lm3/bin/Data2.class deleted file mode 100644 index ea77209964f9060d4a319876dc58a2420200dc3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8787 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 Z;VYgW;|{(3v~tmR>yswYvIF=O{C~WRVkiIr diff --git a/software/LepMap3/lm3/bin/DataParser$VCFParser.class b/software/LepMap3/lm3/bin/DataParser$VCFParser.class deleted file mode 100644 index a9c9a5b30a698767c61e1c2ddaca84a8f89284fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9452 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 k)gzMv)7bC42)hC+bm&ThqqODv~_1tMwG_^67 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 F{}1P5Uw8lj diff --git a/software/LepMap3/lm3/bin/Error.class b/software/LepMap3/lm3/bin/Error.class deleted file mode 100644 index 4a3c416ab77accdc66fca926d8b37fa4b20c42ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23325 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 Y@nTH{wc}zctgW3&%s;`b1^oK|1Im<#Z2$lO diff --git a/software/LepMap3/lm3/bin/Family2.class b/software/LepMap3/lm3/bin/Family2.class deleted file mode 100644 index 9517aa3a80b0db1b262cf026b3288740cf505aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24561 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 diff --git a/software/LepMap3/lm3/bin/Filtering2.class b/software/LepMap3/lm3/bin/Filtering2.class deleted file mode 100644 index aaa172b9874890be354fd42ae19629265394be2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15798 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 byg3Zbl51o*OWZY_h9W-ALy{ZtI^ur;shwB_ diff --git a/software/LepMap3/lm3/bin/GammaFunction.class b/software/LepMap3/lm3/bin/GammaFunction.class deleted file mode 100644 index dc5b8e1bd148bb30e0b2376eb665d86975144521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2336 zcmZ`(TWl0n82(OoJKZkB?6NH7P-|K0I!;mAauGWSv_L5qi-HJXp2jTgilhzcpugb))=e9**1jm8%fNi^}rDD^wDE4Rem%=y3b&wu^S zf9CA@6DI-8#l||+2uxhz3=TTI!$r58^NV!|3&giMJDm1{Q}o(z&uq)OWdUtru9zz? z76@6b>jlEg{4LoiLa5hK3r!%_pDSi>8y?JLOLsb%LRKKr@4HT6y;I7meN`DQZ_RC2 z)|Vx{S)i^^3{(tl^|bbA-Ayc!zbGbSN*$5{#>JvmIpwW78W3YS1>e)Uehh4(b^Yf3 zerC(bW7?@@yE-TDn)j;KwNe~v6o((xx(3Dy4P(WrTGt2b)NheMty37<>IjG)K0Emg z@VTFitSvikew8y+Ejpeny8hr$AzRJ{HLjtn)x#>I5V%2yftW&VI@-~}=B_X&d9*x($I2oRuQ7CTq)W~eE(id@Dcevz~dFBy+N47Lj@b6{M1CCqv zOFSVjR}`ozaS<5;haj{iN3O%=Y-y02p(0u1Iy+eB1nb;jofoV(3PjiX!zDM{n+qoE zvf*h{?O+BEAQaTB5pg8B)^XoXDJW}a9z*0PK@D3%@EW)V6NvSS0p&#Q>eX>poJAY$ zBGeVlKEn=MNyPUaKwFG3=God|L}gfNd7Dejy~ozn`_b`pQtOl9<4D|VhhvtN_iaro z->IHOW!|;CB&NAZTt(L;u66@4-3!DF*Ye#X%oqx)%s>*)V>|O%+f9h`9H+phb^)eS z&cZ@;U=g)l{4d2FScZGhgH4p1DKnHVWtMV)GDo?MGEZ5c{U8rqF`zQAOY)JXtl_(B ziE60L!6XVZ>ovHJNMoM%Dza#+BXk}z6bfm7v8sBsVrGRqbd$NTvWQuxc^uat$1G2E zb}9dBg6s{{sYtVf>+RC5GhiPL_dBy6(>=3-77IeV~l75qCbgwY7pkz5z`pik6Po1Y3v0Jgb7Nw`F)Tb~k&{H;^kmpOjxIZD#ztPi_og*6if?0M|Mx05mG)W*;8S7Yq?nCU zq7!3cAwCh^I4%0{Suk6FsCzB?gNb5eMC#`877(onW~)}Lz%4`?qGBm~OLOWvMG`BC zqU`4_+)AV~V@CzCx-|Ov7_3OIq88qtK*tDQ1(O^nM`y5#c8bG2xQ!^u-Wzc{QA6Mx zAoBP*R#PY0(X0w0uczssruE%8#ji~oP2~6l))F<7>G$cCMvB}%gmpwM=8u!V|8tuF bt>UI)L@=ouBgo3K)J->ekv9<5;I4lG@ave6 diff --git a/software/LepMap3/lm3/bin/IBD$FilterThread.class b/software/LepMap3/lm3/bin/IBD$FilterThread.class deleted file mode 100644 index 1151545768f725f06cd9bf7d7d1e2ea42e1ac3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1081 zcmZ`(T~8BH5IwisQYZ`5q7^6=L6mk83WYZai9k%6R86eGM4vA03JYaxw!22({Re); z&md1GzL|(7KKKLt9sUfXp4rxbrli@qGjq?*ocY*(|Mm47fCVhZ5m88%R@W!5I(6Un zZf$$EuEi0hcSk?ag}QdP3O6=)?5ZC}mqO~udoyrdy;-*v;(OZLwY{do;N9{OpyGRu zyS1dyTWbUamL1n7Cf&vazEdw;@jU&g>@X>AyLk;;2h1J{%FLY#eLXhZM zqh|L&;jD=yP9596!hm%1da$?2 zp|z%vDmSXSzM(xw?6xy1P2kw1;D2V!ei&ZhCXmN;92PAiOkBnc8+9*S22LS&tl{l( zwmkn0FMo&4cNF?6zOL?G)A!ry6O~5bRc$U8XWGpSv$7rvX32GJZ>_GIO<4)^`1avE z%QX1J_=EI<64D9!dZ|TVQnDZ7mTmyaq;!*3gqRctdA5+JafaRxw7YmNTGNL}TVF6_ zsY7H$WG&+mVmKws4Mwny@xPP3nqFt+?2BRtc5 zGMOS}HdFkJ-0jCoWoV5b{Qemz4_y=(SD z3P@Zl0Y9Tpc|=96i$DU2KEY4nCsY+>&arz5=>y2}IdkUBnfd0Mnf>$cpMM3gfcJE0 zgb{Q3?98g=_`6OZ*0+6O)pf)P=^g81tK78QM)}g#j<7==3ATQqU5i}T+G+|ypX1iW zWkRWg)ci;nArFA)~5a|idPp&5Dpm_fRREB83ThDCB*WDn!Fh^ zprc<(69$q<5r!*{D=tQ@E#a?svmL2;w$-dzz9Y{)Wn5wx=aR%}z z5c)%}t7cI7!U2}qQ3=O&93y0uqy2FV%%RN0E8L7Ff6zgpCb66}FpmX7G7w=!xQ%d| zdCr@X?!jtk*&kl8+KM6_&)o~9ip`zo?RE)``H?GqWm0$%i#nLF!hdcg182Y;G29U0 zl3O=j+ZQcvI#p6Lg;%hwV~I~(7XvFe%gnTU&Ccb{o8}|AnZ-XKinR}Kbw*zkgZi!zBsQ!$w0_FFY@1fvrFnt>|T8MbBHB2e?t z-);Yb$z1d3og`3CoF}BJUgX>2ydx*GpVOX`ToMe^b%npuw1Plzrw;8Oc}#QA82|ft z)#MQHCjxQ=fOJ}p3!miuAclAy=F|IZ7vp`hSh|69@g_!!bOTwrj2Dlwbd4`HO!7L$ zZb1Q()W#5fgban4pa_T6ohF?ihbi8rB!g@GV*+}izE@{p=0`lXS^1sU;&qI7Fw;S? zbZZZZ(yia5Cf31;Yiyf978C4if+NU1_7I9){)}B_1iQ%5r#x<-DHH}rV*fo9&#;_@ zc9$P(I!NbP;pN%e?3(cWeOP}Xt{Cu&zhHLrCQixBuOr*R3yXWG4)Y*wu%tm| hKa9RR?D7tiRnl%_gw=1eTEiyZ;a#>UadW;4?H}sVXnFtu diff --git a/software/LepMap3/lm3/bin/IBD$ParentCheckThread.class b/software/LepMap3/lm3/bin/IBD$ParentCheckThread.class deleted file mode 100644 index 9e3b6571e0c79e98b7f176780d2e1540e899c2d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3270 zcmai0d2AeK75}|&c6auewH+thc$=ef>IU069NUel=Dw721qHiveb${08v#6AX)GaLF6zgRD~)~3T;VKjuNG)5>+?~BIRtU9e&@;+H1=V zNINs%d*A!s@%z1bJI_y^dm2D99yOr^vBZ{+nw@smN$1-SJITS_hqI2|XTm3_7_g7n z4MTRizhTG00VkO^5fD_Cw7UxFw0&^M5%^N+zD9v0yk(QX$U1pJysKp0ozJGy{aXsD zp*|anvaEf=&7NTJosJ5^e%LzqoU60PRT5sQC!9-B6-e)0%phl{Y4xt{a zOsu5DcotS;4U6rw^EMgsfGFfsLk*j=S^J)@R4(5Z##%I)An5bm(r0g53Y%?Lfavvj2i z3m?Q*a+5sFc1xuDoTCEOn+RhYc9_^cRb2_SoQ0kE5VJUx8X98k+TM;1P1{;@TiA^c z6GgVCE+8?p#A4MZ_RyfWw==Nu(*3`E^;h42D$Fc;E$qX7cAuS0I=Ng8$tpF=-Y`A} z+r$AuS*dxq+4;j34kAf+!#0!l*D{X|4U3~;A?k~3+h=AlyLfF#2c1Z1!;b44YLo^o z4CxMxqzl9C8YoVIAkut~$wNId7Cw$_DSf`xk*Qu!)a_+4Jh#ox4mw#jQy`Od4yBlJ zSx%%ks^ggrjerR zZ`L}_98GJqJ8vfkx7iu@%{6f!6YCx+WRp&3O3$Vs->5YjVS$xMr=4v3ke$ov{+~Bz z?qL~UOoNvnJ`PE~sk}qKr|y#@2dJpfFF0jwSB7%lD=0PbDSQU&Phs8}%s&z(^(#+fY5iF&tA7d$?mml~Ph(#F;?t<9Uve5N zzD*O)?F~#4@(e;kJNW_P@r3Yx#9^quT$`}>-ebgA7~m!>sj1Ux#bKxSmie3_Az2D_d?&-$>@5*b4}9@c)FVv)6@3-FOIK8d@H7HbS$ z@o>!76tkwZt@?N@60^p!_scMiG5CBf(ReWCUX3L$Q|AUo$MMl!$1RCj72y-tzH>Yx zv4~zh9uFFg@u07fv6|ziv5$hM=uhsd@=pueWN=DKjwD&O>5d%tthdVg(WDE2HPeDt|wdW=@S-N>Us-gMN2kD@to) zdR^t$+Auwk3_9C$+>j++fPoW}17pgX&ESd>gTpj0roxA&mWoQPo#OSpx9#$(`E;2L zl(m|gS80j|uFvaNONV0N%%S=t*IZH*c&660y(<4v6Y{PRl?kI>CXLk!#zrN^UU}0I0s=!0+gs-D|lBAnhFW2}V6fz;MAcl$0^2fid2`o0*1Mgy?RBw{y z>Kz1lZFvW))HPP%n>qr#jpzj0=KAtn8MA#&puv!vH_46aZP(%TorcNC!^~9?$ItT_ MCRf4_lSiQb3zl5Sa{vGU diff --git a/software/LepMap3/lm3/bin/IBD.class b/software/LepMap3/lm3/bin/IBD.class deleted file mode 100644 index c7cfb65d9f4e03ab6eea7781c9c611b68e494de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16443 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 N!z(M~QW&0D{XaES*Qx*j diff --git a/software/LepMap3/lm3/bin/Input.class b/software/LepMap3/lm3/bin/Input.class deleted file mode 100644 index 0c03486797cd81b2e25efdd761d0c9d2613b7838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5202 zcmb_gZFf{x6@Ko_ow<|Yra)*yhPR}lKwc(H6vR5Aq0p8#k_1d3G=x%alAGkhym@B^ z0+tpleGzE2)>?rUiioKq3aw7khE~+IT9;q^(9f>rAJEUPE^2(vxpyWL7}f%%t1CJ8 zyzH}|XFq%I6aM<2k3Ipg27l7vQQ&J&q_P^;W{l zv?=h`H}on{A59LKL3mN7!w0{DxgA!*?8?RmOnbXA5Hl52bR-9jSg&DQ;@h26Gow~o zfz}}}YgM4flE#o+>`oq3u(7^F-fbl#o3g{hrfm*&o5ql7w>tCEr=E;$B}Q5soT+Ta zibXcswsEM#N@r*?`1shMnaWtnL|Q|If(0{Z3M&fAdaRLzk;&S0b;tjE>-t;0YikXl zN&$kX#v%<3IaB93KA9EU++RIMjOO3)M}`i6&;5O9S@+6q*{p~b8PD{ zqf_7B&@K)pC97H|Uo!G^C)i_&P_Ztqr@x=~f-<@vwsOQ6t@%v`uM%x}$h^Dew%~3aTB)ZWS6c zVaSYGaiQQD<+z$tpwNs@GR<*2jis3#i=CaN_@N-ZwvcvZ(Vk+tdJ;5HH9J`jrSb_= zQsgD&MzlQ{V{m_`k#du*tdLs@V)sbmv%^)=k+#+#6l~LRALa`1ChS0r|y$azY6RtmUh8mP)SWIbyq z9&?1;c}JE@+*K-SByH?o+PfRNG(5w!%-7M)R?Kv|LlApl2pR`&LkUT%#*o;-`nq5y z=5BLo;JShl9i8YAJ1rgiL|5|-#*%5C2n_S8gc0XZp_&!`cGFpwxR8y*E(TcBlv$`0I~$hbwL;m$nh?`MN)!2ulyMaNLn>;+=tkdDLn4jHpDrfp=B zth816b|w?O-JNfpgClre!*lt7&RW%R6yK#;QT=ajh;F41;(K^e!!ZT(XUa5jm?I{k zy(F?DkTUGF$vJV?D>}X}dV98AUsEWTm*(qYk$q|6~}#5T>|1y;?%_)#03}uTq1L|VtiT0Z}3~bL5x(&Ot8y07u(4b zb&DO>6}FxWxT@oQ`J~Duo&7=l4ml0K&%ZflgVQk~>V_{R@QSS;>i9@xzb0p5jFxKH zBkcPNO2mwd8B@FgR4P8M;Tj*HJ;|&+Xo~X05BbtvEvRG3Cd+(s0|9tgi~Ri7_!Z%A zJ{93>oIv0z2Od5fA(z2wG>2o|*}&iB{3;W@m8Rx#ta4>O7I5Uj{lc8mEKLJ@Dk?i0 zb6D6J{uGtrdCPNH+P3rzf?@B{9F~jOU^s_Wr>6fN{tQ0l$`qRV!cE=@G3@aPEAnpP=O*dL68f`@z-sB^1N5g33$dItEBU5e zg=W+fW+S3(c#k5C&7A4LYHa7YA8RGXCnXts(1s1PO8@Z)HWHneJ2r9Tq18D&{TOGW zco2`%ikIJu@dTbE4;{R{o%?+FCQl2-oV6`-4XA|w2D}=UEeiU+M3sgn4K3v)lXZ}W zZYHx!y7K|ARcWr)rKGd5X%btznm>bo9D0~^tlK$0{m<|W9n0johv-Zz!?Ye1c$imj zpqo+Bu~9;8bZi!&*1Avw4EMJP#>1245|&qjsp5>Y)?HZJLZ3V6*?f3!AV4TLp!4S! z+$bRRlz_Bd>fkY9|*BIe|W zVlP$px8{)F;dgKI48MCQEHL;Y*gCe5-ww`nQg~hbYiAo}*29_YD#4TVTOQ`tf3`UR-8q202pB^jEYwfme8>p#0V@QX=#(|b=Xe|#D8@KTIyU{=8*!C zzh0i#cv9qLEj^6Wf+J;-m(E%@*92Ua!DloVO|pO{CDB|W7Lk56H=*eaGY!Ap#riec ze5KQc!at;Mf|4ba1E}I7Wf8`>dKgRbtc0>wl2lWGQsY9I$9M_=9-i_`0A8MP0C)<8 z#aR=Pa{=sj0HhgZS<{sq?F$VZ&DV{a05BY^BO<9}-fRx3Ib^Q|qdxCCzZj221LIf{ z3VeuX6_N7$*$V{Q$rhUto-hC*<}z(3+?>jc?Z!?OPdi@Be-mCFp`YtUu7xatXO zKjyq+BVWvW;g?C#qM`Z*?qlJbW|b{ta>)P1H0LxN7vVUY1R&rV9p6B zP7L3~Puv);p!7sS3|72VacUB0I+_@lu5olUyHRQBB;8|C-#8jVzCxtb_wmjYF0edK z;^G8;S@EkJex1XW96k`cWY|9Eo*X7=NPb=wUEj&UI$4|F;m@-a?KzgScS+DW7Pa#% zU}ssNE=u~H7BYw_T;tgQ^Y3GltnkbRS#Uf&xd@*yQ`Mq^BX)Hcc5NZ8Lcr^xPBT+T h&mTydLzp1P?@UM{k2upSrkUZhHqzR4+VJ3y{{>tc#ryyO diff --git a/software/LepMap3/lm3/bin/JoinIdenticalLGs.class b/software/LepMap3/lm3/bin/JoinIdenticalLGs.class deleted file mode 100644 index cb1c56cb240db20917f108b8a7a759c9bc5af69a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2929 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 TY71^mzD1N1_%mH~;V=IK!Jk`G diff --git a/software/LepMap3/lm3/bin/JoinSingles2Identicals.class b/software/LepMap3/lm3/bin/JoinSingles2Identicals.class deleted file mode 100644 index 6fd1d304805dd961fbf314ffa02771d9721b211e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3110 zcma)8*>@XP9saIlXGWS)ZBL@aN}M)n8`rW`FLLT8cHK6q;>JNvLS&rE36!xlwkMHB z>S*L7EjytFLR;3hgwY?bzPq0{*t>m_XfA`HU5W9|0Zp*dox7v>oesDK}xcqvk}`5-^f^DjYLiTb`FM z>%1AeDA1g&{rUhk=S%m5I_XG6ztq!P3lt7vvN9Gu$z|TOEfH8ea6mro#Y!HU$V^HfQtJBwmu*c>{$YhOJ6y7}8OseKiVg+s8(~+>*Ac_R z0?MqJEmy97fv1mVUE$c`zoL-gjLzFbLSu49jJ1r36YYBU5%5p7d z(o&JG0_YuKeW*A?027vX!LpnbEgij7;N^z}f=($nI>SuM6s5h->i8&3dgp@aI!yGt zr9W++q|M!(-BQZZF$MBAPFvoX%!xzAl{g%z5z|c}t(_}2&MP>#A^j5h5-V6o7CCyL zAY)a%x=UyhGCLT^Rup8iJtxr8me`yaD=DRb9U+jisMz$Zco41>b}_5t0xrsESY9Pm zJ+iz!pvlb%$%LQH00)UL$>US57l_1#uIE}U!=w!hFZawSgpyY zN6Z3kydr&b1+VJ(vaFCmHg9GsH2LsXb$m_spN1SWeRwVLReXa*+Y`j=_@;t4h-|I< z3_G4RZLyJFm5x&@(dC^~_iY{Dk=<2e0FwF4a!!Abs+fOK%;|U&KOi>ixe_PG9Uflk zN8?h{k97PP^Gxe=HHQwft?f)Ak*pdyFwQ1U<4t#(O1IXS1GLb(=(#4_Mzw#C&)Dom z0=4;LPw*8AG&;G;&kg$xr;SJuf2F*cT-8mS>_wKDmRwCqGU}|@1Y3-ZB41Od`0wy> zGM}LipEJwL6$987Ql2?^o*}EuJq2$mSYX+w@+EiDs%FBj^>bxy0C&pJaLBOEIjsR7 zcbu?X6`s2I&*6sp_64ZdE94+oNd|U6bhfv|%jh=tb19=wvPq(`f0e{rie2`JmiF6o zOMfOq8U2eGOfTSxkyu9=Pp&=_YYg2&H0?JMsdSw&luFkdM^ou7#<5gdF_NjYY8+3c z8@CuIxhlpfuBtK0HDHW!4I0mI)r@hjx^XsD#z#)aj8n!$8JQcHITkaHOK1ylqGjYO zu;l&0`k0ZdNl+HylHKbML;}tAWt8}*lyNC$43+V*zF;^gkvGNZAb+1Wj}8*TnkeH_ z{dz?Ilce>M770Z3m~qVbEOC_axyzaeYvJJB(%)jnQK?4{>vePJ4C^!8$q7B91`JBSf5+^$2_*z-Bi+k(j`@zaH?Nh#1%q)xjz)4V1gL<)GHNu zeH9360KO6l#EfT*uUAB0E8|aDkKult<;PA2`#2U_S>kQ@1KRN}W#2=!Y9KE%-{2Jxskj055*KOj!?&cvXw`Av|=6QYDC#S1tjUgrPnI4rKR z(Ou)PFJnmjk+c4xc$+ MT<2MKp^S|(0$_7OjrB_pOTSkxrmyV>3ZYN$tB8 N&J%%KMCZfp{{dkc^`QU& diff --git a/software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class b/software/LepMap3/lm3/bin/LGMap2$intArrayComparator.class deleted file mode 100644 index 000c2546b72742a6c2829077efc6f9a8330bf4bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmaJ=OHUI~6#hBIJDJDM7osL3;xVVq=&3SzHJ7>QB{B#PSh=&>?gwe|5b#X91<+%Q; z=ZTkV&HV%63BT!SPzlLBaVYW);qK%&YI}Cw*AOEN1ZdlL8u>GSLd@TFT2pg`u1Y6s ziLn*Ob^J0Rp8f-7wh8K5^O@ZZLXQCrT{;vb40Iz&P}0&NQE^=RNqfI$dt0K`unGN@ zW?eM4h37~+1XWp*Fc#*%l}M18f|;yIbn!DRW1aVr1K2}H*t&59hTf`O7}~gGnS6qnAVUY^q%Ef z7yhn+G%~EizT*<2X^Z(1BBH=sHMq?a$m7KZIV|C(FX}J2i=igd=j(O4RyxNZM5G9& z&K+1VFo+>S>TiSoBc_yuuq-vw3HoNU?bYo^j_gmo)AL#R7#3jD*>Q#6_V`QgV)YL4 z&jhVhtunXEuw2*n)*7PKvRfK>c4D2>JOdZU6q8Iy;S~iXlX94Nx>ZCZLq_9lEwB~g zQ_q?oVPucd`+=S5fN(}`mB$-7fxx`bo$c2}K(hHsR zVQKk$W?=?&ipcRzKA?aZ%yO9W!_XA_$k15UJjT-HVo5<2+zF!Z;$Co;u)?R5op2uy5cv(( CwB7sw diff --git a/software/LepMap3/lm3/bin/LGMap2.class b/software/LepMap3/lm3/bin/LGMap2.class deleted file mode 100644 index 0fe8580f02cb6dcc1b9daac3a1b2cc5c55d5f8f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5447 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 diff --git a/software/LepMap3/lm3/bin/LMPlot.class b/software/LepMap3/lm3/bin/LMPlot.class deleted file mode 100644 index 0702bbfe06343ac2d90227462ea2d0881bc1f2eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10558 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 diff --git a/software/LepMap3/lm3/bin/MarkerList.class b/software/LepMap3/lm3/bin/MarkerList.class deleted file mode 100644 index 209ff6cd5dc5048e5ff7be5b111f4139b765a7eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4065 zcma)8T}&L;75?t-&d%<7fZ+9D)(bIlO!;wu#%|XQ*w~mtjEhYYY>3I^U;5Q`D*}2@TQ57LgH+;Jnxjp-NlNDh{6MN*{j*Ue6~2-H*sms z$yF3WOP3XPjbA9brQ)btoEcCs3wqb0f<3M`ELGfm-%z=nT^38!h)=q+#cXA%>?jQF zq;u>u7Pb4aV#S$t$^(P^DMXLCMYl4j5a}H2n&NG^G~*-?MuUZ2ct9cC*)ff`u<4!=hYfdw3<%>tC|)C=Lq@{T2prj4;eP>?nIHUOo^e zSl&IGH5)GF^K3x+5(_6S4B-?Tfj|!BnOw@pQn%iwF7XugFIyPFC><_}!;a3e9e}@g ziMSOWmCIpXaw6p@sT?uaNuP2m&p8frk1}_id@Cj_Jb@<_Vs5cAB^{xAk@+VvDaAjp z`{Q0;T~nemWno%&M;6@|*v}X7H4|(IW29Uzl`T92iw}-Ga0b1pJ6{@-UQz{xdcryC zmKQ5t{aGt6jAu8WZ5_7X9n)^*%0zj_p{bPAZl@+-KlR@4ojVJ!Yd7)DPiee88tjadtn|3A^u35S|TxWHLm3Z>L`;D zd9CBh9}(dXINg00_1)?Y8oPgm;6cS`umOH?&e zN#MA~kQ>u$I5H>#lQ@!zwAzss7_GNuh4LDXW(?bCUBM%gU+Wqk`w&SHa_k3*rADt<*aD z)j{qZ$5|gGhr6UvZV42EQYIpjhRLuawy}b;EZ7kycr+6YXUtU$>*Ng&Cfn3^zCM?U z*|GF{h}*H26{NQ+wdw|X%8uT?ZYtZXeYu7U?{EC1QT^)!JiUr|qxytGcoVsP)HA|< zw$}ig>KIWw&in?6+6j!}B%b2QGK*7~}byk{mKs-bkTGj4F zmQu9ZYwXsDL^(2ZUpG(IxM>gEv zLN4Rq1t>ARePG3xH(|+sLmvFWO!h~8it0C0Y{(0lSSl*Fc*?M2HTkAjP@mE&Cpf($ zDPt3HzUmO&Okx#HqGKnjFp=gG8+PK|jlZm-@#mNk7jup3AMDRmbkhR6U5wMQ7@tT* z?RbrAzU`2Os{QEB_M62%P0aDm@mpwA{}eaoPgzorV2kX0uutRcyd)c{jm7Wf!FQBU z4kE|ScknbWQ@VmhxOkBh@h0!@@cu*O@g55JF&1!#{PH0+euoPFMDF-2?| zZ|PBHX9OS7?;&Qithw+IXZ#O=B&6TQrtqxw1=jikYkjmP2SG0q8%#Ul&!35;_g_wh zbu_EppTex$w@wNaX%ENdDs%P5@z3;N(#DzYG+}@KT($dZiBQ&r3^fIM?Wg%&i^irH z<v4Z}IE z9ryuHg?H{_T~0m;mtR@b^+@Iw{rPj!H*QJkeDakEtEJo@)mXIx5UhZ@uHR#Ih!ZL? e)d?AO)9kBvabvsLcWcbn1!n64v#;wg-uNGsX8)Z4 diff --git a/software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class b/software/LepMap3/lm3/bin/Misc$ArrayIndexComparator.class deleted file mode 100644 index b651069bad3574f115b3c6b2d0178f8c70c49786..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 zcmZ`)U2hXd6g^{`EOs^_B#tp)N+3}D5lBh-D2WNADYPz5d5C2pAs!}X2@7T&t=9VMrjWt-Zi)&-VQV zc1e{+VBgJpKg>9+wVefl^s2k=$)M*u0;!vg22Dd%*K>nKfdj=I!b(j6tEjxyEVbOZ z?PQR|n2llV6-X9K%`^liY*^SWu&3^N&QHAuYmVQLgcTUCcUrRDl)kIh#+VB3x?O>T z^&JHux!m^1#~V@f)Xrg55?y3$z8I>YWzquI-EN@IaA@FG7+7jrI21{&h3_kv!C@S+ zFvY|6E3lQ?#!*aDs-UAy0>y2LhV@%0#Z@*ot(zs=CT?;daaL%MJv#1K%Xehp=q56G za>Z?6H7{`19e=?>MPP5gLySFxGEUk!g;}2Ap=|e@>vvdzVyzVGrYHwpT-B})OPGzH zsP7kqsgcdrA9e`J=DS8)d%!8%f?Rr5|G1T2x z8%6;aZ7kvvJKUshbOa{j$s_s6Xh>5hkBI?D(e|9ci2?Dkh^>qncK;O{=Wt#iv)bwT zE$6DM8b7Ui`;<~z;8wLUKOc+kcU4%y#n_(799llR=GB;AB$#SdgfLOZC@+RUiXvLRaX zJqnxn;vVHBe*_6lEtF*1P&>nH86^I}sD-maJ+JI8L-4L4m{&Y1oA_oggT(*FZ4!Ha1C diff --git a/software/LepMap3/lm3/bin/Misc$KthSmallest.class b/software/LepMap3/lm3/bin/Misc$KthSmallest.class deleted file mode 100644 index 7779ff5a0701825fc2a71e1e6b8d8d38cd2fbd0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmZ8fO=}ZT6g@XHlaI+)KQe7?60KTo646qGLRAE5DMVX^M2gUj(_}~{ohBujR&ZV2 z3qrNx!YXuG1f}4jKfu4!rPz925=xQby?5`Kd(WJE=KVhXbqwGxav=l+1IuowGWo=> zmp5$Bb2@$qI?;x`ZBKi4vo`%~t>ILBfp7&@7X-lvZqxN23XI(9LViV{&$p_M2@TO0 zLWl{pTz(}2K_UhNK|ylKZ8}f4HrAZ>b9>Em1Vc-$itVk~ZCB-eQ1|O@N4@)B(tT3Z z9RGqyel%CiFPQwuNDRXmrL0`BSX6RkovTO{Uh5U>>Ta!0z~yRC^QODqQqyn{&EMD* z#LK>2Szop{`zp+GYpY#x7G0$?qNLnWW(Z=%X47fUdv>SebV9gEZuM3Wy&wz|l%&yL z;o|VzHO3)?xks2SBESbQ3rAeHej@&zSpZ4yiEif~==jUpQw$Ir=~ZJ8L(JIMW#s^z zI@RY~BBnS~g|t@qf%vgrJ%Xj8^vogg9=oY(C@U`fzeIb?sdMHO#&C%R0p(|pSsK)0 zvUV>st7m5oMVZNFs)qM+W-fSu@{TSFv-Fv<;D=9VCkF`b7-wC`Ahi4W?8MS7<16z0 zvbk_C=$Djw=UBKzCU&agZ)b-Y%h*RMtr`=BG&7EKfKf}&?qe`*>0b~n@W>KY?rB~3 zO7sJw^THWONsxCUjByEJN+KwTiQ7EyNfeJHhQ|`e3rWD1B&sri8ta=fjMtLF8?o?C zM(|NayFQip@94m}PkViz6gE!Bl=FK?Gt&6%BEyI(@E%!4)PlFTj4MPQ6PaKX##Qzt e5IUtu(E`c9Ty~f|*N6si9g{rO)fU{q6wH522bSXi diff --git a/software/LepMap3/lm3/bin/Misc.class b/software/LepMap3/lm3/bin/Misc.class deleted file mode 100644 index 0e6c4a0a0dcb59efd4de1b3b08ea91f88dd286a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8962 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 O7@!@$lnHSoIsOlo6z%i? diff --git a/software/LepMap3/lm3/bin/Order.class b/software/LepMap3/lm3/bin/Order.class deleted file mode 100644 index d8bc83a28499b23448476abee5f6944402ecd267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17692 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 K5&lBcPWoR=@_7va diff --git a/software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class b/software/LepMap3/lm3/bin/OrderFinder$MergeClass$ParallelScoreCalculator$UpdateScoreThread.class deleted file mode 100644 index b85abbe6bb4f588240f49cd88444c9400c7868f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1915 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 Y_m&19;}h0%sf)tI{VD4qN`HXuzqn;Dg8%>k diff --git a/software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class b/software/LepMap3/lm3/bin/OrderFinder$PhysicalFamily.class deleted file mode 100644 index 0e56c8e7f0a73b0215f69067bc0b6d5a14b58027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3047 zcmaJ@T~iZR7=F&l=7X@rD8@z;Dr(ex@TDk-U=%?#h@!=&t+dr8tYIZ=aFbx^U8nwp z-dJbq$c>$8XPC|?IK6Os*O~r+{*Ycet@J%78?wYG4!dX1d7t;=d7t;-UvGbZ4WJ(n zz2FQ7rmcD1nlMay#%?UEmW-TMn9!Dt!m1YvL-4+~qV*OuGv7NscVEwy8Cng~C|}d8 zMcpbfgr=lLrEC;>M=eWRoia-0VTP6&BX4Tuils9oo7s$1H>K;0S=RHqHJm1(r@Ua4 zVtov4Q;yuk!H5W)rkvtCP7+xLWvn=_w}4@niWd0&aACKKR_tML#S>X^vR8#09CpX>$ciZ_iYbiq2}5A-?TRMWn$Hb%tsnNK{$M6)kQ7!FeCcQ5Q)!bGEJElMEAY#v^m!TqAcqch3B)BkZZX}xq9sy zD6d8OHK_4YT;nuPnwg^{-0@7NiY=B%APT`q9&TwRDEdsr=lFs=tq6Xm?@@I-S+0$l zFrHQMCBCAm(jQc`0>uy6YH`f^aDw>rRPz$?EPaJurv42zuxsZKerQY*S<$PUm`AlP zeX8K}4j+xv)s$|jQ--{X4Z3?lQ#M~CoO?p$<#{(lA8!7*-NzlCP5*3`pE#?j~1?CAAJiT znd2jbr45ae?J7^<#6=c9xEGP{4vEJPKf)bYPrg9l6*|`G%mv{yAX4PJ5a2-s`EKdA zQ>GoZ{gM|PK}^O9<0!3MI41EdNC{CJ=~=BTA?x@DKKY$ZZ6KKr3@OTh=Q)PLN>W6B zfxcA8qs(vM)E_vrfwR5!-TK}p&gF)bM;;dPbUfSoGx``l!Ag5r5veOO^}`egJPbGA z4-=NP@Po3PG?4*hx68@myzGY9yMR&3-c9nkh%qY6hwB)}C5q5W zRui=6!DT{MsTN2d5h2P~;d+YzbFtHJh(snhBBMMTl2RzDv_c;)=MMIvu-9-5s`sx_T^>&bMVbjR6 zlhdToC8rkiqww-$XyeDxNAI&dfizDd&%0ppZan3^lG`h?(`(z@uHh=Cq*T^$jo2f> zVvRWU5VtNowYl};38p2te)Qo6t-KDFg}u)fSsRqMXmc@k^bPt4$sNtPt?@Z(n;5TH zO;)6%_DH=rTUJp)st^sAq7h>V-tW+PY&-cFW+)XgQ!(6<$#ZepRO7KpN=nFlow|^Y z4k#T@5D_6esv#q+@+O5I+&N;cFSp@KK_RzjK%&%kLy%W zTzy)VS32ghkDg>|6La<3uG%TTOo3z+^pQi|#vCVv=)E_Yif-awV|({GKnpP50YwOO zzY#R(02ST?T51HHaDa+fwj;%Fg1;G+Xn9s2XWURxFCHgJO~?{w*of1*_sYn;_gZUyp32hnEuuM;84aq^l(xSVcJMp5 zo?D`f$b{}6*12IO49)r-H(GvX@Z+R29*^HJy#2?V{;Q|XD4=O>*%@A82!=(ar(z)O z;G%_vJ-6L4go#o@ALYC(Md{-SHNF7)<3@b6X-f;Ql)ZREw3xrI$lWF~4LU&Sq9!-_W}==SGNotJgns-Y?E%0{}?-XN}7?i>pH&xy&BBq diff --git a/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class b/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale1.class deleted file mode 100644 index 7e200afcff5c3ceea1ff15f93d776598bad04ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3848 zcmb7GYiv~45&q8Z?7jQAU<0|y;+RLlVDFlk+JF-rIGr#iq!sVe^-?ds{5V0YkS?8ND*Ss z%-lJ1=6v7G9RKORKf4KF9bPfvQ&`iH8%XAMxEcP|bh(+qRC0%tc2g&7I+Oj`bf24X z3T`&j)$gQ|jV45){!{Ew5I1wUQNh=nD9TL=5t`cEv|DJ)9#>HO5XtNCdy=``&Iwvt z70g0doH5RO*wA#XaM6|8WLIolU6>V-N**=o)OXj+rzEo0SVOy4X_Bc6L>m{RTm=qd5 zO`?qijs&^|g=k&dQRkSmcBJ5@);^reIVaoPe1SJn2z9xGtdfx&kG^kCx6Q@9DJL_y zHjybL2a~y$E!-PM6V{tp$MAQe&cX&XD+HbX{$xI1vq2&D2`t3QZ`TsW1K4C@BMYo7 zyoDBQo{7i`s+<+ECDy7pZn5xCx!<}l9>#VP+Y}bffrN!tJVLbc?kU3HuZtx@4DzUj z$G`$#l+C$=Y^78pb2ytzv!#yF%bpX`5JA~xp$#F%IqanMx$PD@u!s6!l3dtziC7t; z9eqcW{e>1*kclpZ1zvXLSclPx&spfv2?pIvp~p#$@OU%rqpmlR z@Op7Lnd5PRe8I`_-fD=c>T=xe6ml*nMWC*=Rrk^Za4j6gJYMhM!Q$j#6mO{T0!4xO z2U6L=1P$I=(mP9fCv}VHa_CG&Hwm*IKDrtT7DmdeVSO0Kanb~nm_LIzcOJ2D3a80b z+Rc;_WPsy%THDWP3$K>YmQf4mik{AiF#Gw777k;OR~XLbT|ILdq~954f02;xY{5w} z)oGdO?wVD$vxav|c^}OBGRHV-^g2=D1wG~#5#p}wNUlG*!_~8-vaE9&^i2sIqHV;7+E_cz01d4WSNfh}U0(9j{k6a8F!aLzVuij{C1+X}sbZmd67D^S4+* zeWlh{>7UxGUicV)S1>V1J0jA7O4$Qj_M%Fam6^M<5z_ z{94LBd{!rX98LYC`PEV4LM{>2gPbn40N0~lxI=$~1gIBV zWIrB}1K1%4u}d6uOCR=2KSpE#CnSl}av0}i5HHISyeckUm!tT;4B>~8!nmaIOMd@@ z411t<76B`PO6c%75(IY_&fxQ`4IkUF8&8mVKTcpTo}^94d^>t61?aUC`zRTBnI!C| zWa0qxEs~|99b~jaw5*5enoyH0Bp+9k(^ju4Jc&&(ixyhsiyfRIB%nO4#E9WB zQf-@u$VtHCq@)-f=S^jsOD<2|)U5bDR<^M(AUT+lM^FkZ;StoxajcOOSTCorNls&{ zJVlnCM!THB6LJ>&WE8HP!!dq8E9X5HG=jX>Gz+8XC!)ICM=`)}K6c>Nt~ zVHsoXW~#{JRAv|YPJif*FQiiW&TTAqrgWg{AzisofC z?KTrl+qIjHR;#C0tTeTX)c3$9_0M9lT;Q~N4h`}=w#f_Vkr#1PzD9b#j%VZ>ctyU2 z@5n_q-?uR#m+%{T4S$i>@sWHN|B~Ne^&D$db--2{$pG^khU|2JiTjYLV0!)i|pY5Tnm&0%ff8nLys^fD^! zpdB92@|##?hdpfqPc>V%#S3eveziqQAlZ{S}_2Uy!r*U0k3PBE|1`9Utb5eaq|k2+rbe zZ!%c8j(bYdA>J#7@WM$JKu8Z+zu(Wf>J8SYdenalxa&5GlB(qlTZre1wSmYzhA~zxK?pb6aRdB$=lt;r^m;5P53H&{{!W=HN^k` diff --git a/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class b/software/LepMap3/lm3/bin/OrderFinder$SingleFamily$RecombinationScale2.class deleted file mode 100644 index 36c807e947cee0a5ac70a07f665034393bd58a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4280 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 diff --git a/software/LepMap3/lm3/bin/OrderFinder$polishThread.class b/software/LepMap3/lm3/bin/OrderFinder$polishThread.class deleted file mode 100644 index 1d4fec3b46e40a2af69a559dec5ac2c8ab966645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1645 zcma)6TW=dh6#mAS9mm-aH;Hqp(~uT7*lyFbDFj@nE+uK&1t)3iV4#tZHqI*9##y`T zHEJKYBQD}5At5A?ka+4d5;lSd#4|7a6@CCBe6w~GNAd$J?aVi4&N*}DJKye~|Nizn zfXlci5fB((cegEf#dbI*Yt@Qf-`&`CEpuBUBoMoAzG==?OlN0qee1qe_9Qfcp(E?v zhU1u96-%J6R;}BfU3KaL@q+Ks@a)Rmb=Nf?73{i~qfgP^aZIn_(m&J7XR&Sc4>TOl z+OgbRo`G`TboVTmsRR3$1caf$yg<;kJi<+`HE-9hCoc*N6uPd&SZ&dEY%ed6PaWIo zb$+g=(J(fRbV*<{)oZ(V&Hvx?FnegJx^4A=EzxlTLs0~AQpYe7yk;t0Qah(~3?in` zlR9(^D0EuK6K(XAj($Xx?W_)oh`?aMcC59={+8u#w7WD^sFux2$#iYC?ifRgI)Rhj z^c>RySsXnc_^5Um9CRB_6tkF8Ue#s2sm?LJ2#tz{+co9niA;)^iN=FVebQc=M4cwGi5$NwynT}ha1jF@mRY^OXGK}=HI_hN| z1*}rPyJmgO&&t~GDe>A=@jk`5Z$7+TCHWD8Vmn+cbFapi=7FMTmiJc8TBlXfVzuFx ztrc5+alVZH?k^hCltz$m7#fMALWui_0wfViJIB`47p+k0 z@@Fa!h{cpPxem~G7$cn98R8hFwZ*mMJd-)s#8~DROk^gsCMGlSP!m&`c({q_%xn{9 zGUuB}{zT6pW;jl%DESupW*5b%+z zJ?JAr^$&$e5KjMi@cj`T3yO025hC(qjLAAqh!@{^6hG0H+}(1fL-DUjxzyY=1zR=oLW8A7905oTEHVFwg4<{0HlM BStS4f diff --git a/software/LepMap3/lm3/bin/OrderFinder.class b/software/LepMap3/lm3/bin/OrderFinder.class deleted file mode 100644 index 620b72c0c1ba946a9ca381aa8516222dc1bd6dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31624 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 diff --git a/software/LepMap3/lm3/bin/OrderMarkers2.class b/software/LepMap3/lm3/bin/OrderMarkers2.class deleted file mode 100644 index 1a6f8faf09e14adca3bb8582083e4c76050d58f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6060 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 a{N{TPOEgbkQ{bAbtFM7DFWG@f=6?Z@wHIXo diff --git a/software/LepMap3/lm3/bin/OutputData.class b/software/LepMap3/lm3/bin/OutputData.class deleted file mode 100644 index 3f8b63e3084fe2e6fc4a1e9a4d953eed009c5a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2628 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 diff --git a/software/LepMap3/lm3/bin/ParentCall2.class b/software/LepMap3/lm3/bin/ParentCall2.class deleted file mode 100644 index 0bb8a36c10107f988b78b098e5f89dcc1019c613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25527 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 Q=?MP8AGE52KuWFoe>Vbp-v9sr diff --git a/software/LepMap3/lm3/bin/Pileup2Likelihoods.class b/software/LepMap3/lm3/bin/Pileup2Likelihoods.class deleted file mode 100644 index 144e44839e376e44734cb1cb0e20f74f88a0b06e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13976 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 O@~Lt}#BbwUaQzpBlp@;z diff --git a/software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class b/software/LepMap3/lm3/bin/Separate2$JoinSinglesThreadMaxDistance.class deleted file mode 100644 index 4372a16761247c4c0612c852e89d591f8fb63326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3287 zcmaJ@Yj6|S75>hZQ(~1=sU1`7ngj}AEv@YZX{D|t z0_h`tkS6qzzH0($NciJ_>9kWTOgqzN@}ocUr!$?-^iNy*NIR3ZX_I#PVgmHs)moAV zH=eQXx#ynech5O@U%&N(9|72hs|o~R$CQ~f9HU_NcRiG~>?zBhPn-Ga1;;c}6UN!N zl`j}}(p2ClG@dff7`=53=;bXX&{mdr?*>AFnV1#{kXhDTX3n9iogt&CM5P@GWD z+qgA1XF4XwN>J@$rknyhrvxFuSvV~0&u5Grq2<_G&e(2j&4bz~;@Ki6=mrtUIhHLW zILi5Es#p=~3JX@gtB={^6?oZt-H2sdg;B!&(Hj1mp~T~f#G0`TA5C=65ROOJQmYNL z3fKR&RV!Y}t8CvtmQ9%<5H@Srh=>XwwrXfaC&3r(o{=ZpG$;s4YP*IoG)e8$P+z9H zH8fzI(#IUx}^4MXu&$dx^c@kA1-EQO=r4XLQUh@q>-L6982y! zre7jUsKM_&%a%cJS#9QAZpD<(DcUNAFs$G{Lh~9Gs$m5CIpKMeZ&{Bfx@)Sj+yJb5 zKVf~f13c7KjN*WX2QbF9%0)6`q>Ega3|&IHe7}Z+^2ndJo?w(efQJ-tmDcpv)VX}Y z%xL%^##zmDoJtc}+1^94?xqUdq8Se0VZz300LLTh5DqK&&}!4JgoY_h z6O=PDvdOtS@+;dJRxyDYdGSZ2L{0wQdG|~Zk8%t2NWo(oK7!+1=SD7P+9|@GwKVQ9 z;sxvadQ8Jf7z|n=TlPTM5Us_%5?2yDl-Ni4;#Q*~tLsSJ?YDW(@t+C{rxlzcG*oe# zFbWGA(#SBp+`Bv?qKSmOoh&}8fM-Og(zzNOaLuX7Y$jJMnB$W?aa`%Rg5oM@%T1)B zfCJL$S?S=M6pqKccc5LGG1Y_fcu-Ga5dN z^E_cv?m(&*82cH*=QKQxXV^+!mhR4Iq6YL8Gk3D2=I1qhL3Vi{nKlh4h%fPVZcSxv zvr|P9U)JyySqh3f`qDOERL;rHJ7%5%(sGV@=1^tp%k*0Wk?Ch4MtCZjm1Dk+$*~14 zXJ2Nod%TycC(YZWWQJA*St&GY<_n%y{Zzq7o}Msr-WX7)vPCCp9<=0J(@?po9(lhU zNW!*FXDn^x^CrjD{$39ow(=12@qYjzt`(kWOiM~|-9XMY{)L=s?#eUGU3sFpE6=lv zd^2-+s=0igX+UG6oSnQEEYpfjyp}Dup`E#ZVZYMqU~JbiI%2P2OKkTt?uvCUqbn8( zEMrGZ4=y7b)0Jh!Vy&TN?2hT`GJ0Zqco}`)WnCZo`L~DT1pNvD`Xxg2Yc$YxG}CX; zO25Sx`W?2@@3D*Cz+Uvth!qE~=lrY;S zZSB_m{VeN$5p_#+eFNr(0%Ab%b?{MN>KYaXf=hTr8q|YTXCYTH*XgQN#tCnv9BogS1PIEWD zEndctU3;#BOW5gcbmi%5c%p<)9Pt>DfVW@5vmT29;2YswKg}=%A}Ygh*gNu;N{Cf6 z>T0vT6-Q64IP!a*o;tF`wO+oo6``t`m1x*+aGs@hTznq&o^%NpWX92xqjGW6z4i|1Y4Z}Sj%5Y4w3bYiH+sPPtBe3I;B zgnPvewA@6q&)e^k`}^L7<-38cw|ScQ6|f#plDZpgT;K&ZCvXKX@~U#G#DTvA@ju~u B{_6k$ diff --git a/software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class b/software/LepMap3/lm3/bin/Separate2$SeparateIdenticalThread.class deleted file mode 100644 index f3be6ae577680572f778f1b05b804d5da88f7d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3548 zcmZ`+TW}NC8UBurq?P0~7#jhmabp7o%QiL`>H-FWv7r?a*uln1OcPk7#a@tB&Pp=Z zTxcDVwxqfA5+ETdX<9dJ)0QL_r0I0}m}zJF()Uc7$8GYwQX;8njl59D3rSYDB z|MTC^_y0%!9>5m7r@T?|9T+GVm zdIf^R*0^ot@(xwn7L(aoV!A$~cFr6(o!;G445Tv2n3cA20%AbGH|bcmqQ|&(+B7E* zGZ_JYZo5u8(DSLZgObsrNF|tCAL2JD=MBJ5-iJOP9__V8udP=O!!mq?5NbY!ql% z-Y+` zu|THd%z?(rbPcJ~9nKMm>D~Z#2s9-!=}Dr=9&esBEa!}sHJf9D1I^h)#xb)Y?8I&j zyDA|sw4mcY>|y3EWKuT$lp}RPMlZD58yQte?bXo_!b^^u1Xs8<8mWR~sRep9>=#%z z-vecohOiG`(-Fl1B9hUM8mT-H$)k^k5W^u22NnD)eWzm(LzFZU2{Y?Lc2zYtBe5ek zi?`phlf5Av#)yVts?RZX906hKJxKvB43u6v@Su)|Q~=(rb>37}IjW%a^^ycLjNuU- z$8cOAR4S;+BC?xWqtVEK@^eB*0<`GMEBECcnm&mM4dVh!=JP&i0e?GdT=1jA2D<*_AuF zqGf(>4KCrE8op5(ehYSWOyen**f!5H{^b=5Rb$gl^JyK=;9E?S4f8n+mXQ@1Q+~dq z;|iW-?Iw)uA=e}^G^R3nPRH|jVIDM_c^(Tu!`jF2Jssb#mg-i_AL@9i8gE+^^O}z9 zczNF5R)Njc_7)p~y#oUSRoIM-25^H1(45TJW(((T)iuDkOe#6#WX9Q|98e<4}yao>qVG*GUju^eG?XJ{|LbwgYGELODL#;UgE_`)oj+B#-&Z(C#*Ep1`nEY`NI z@{@auq7q-?bB$7yeelUW2+G~4lY0@C{a7sr&@A_1z1)xWl-tTsX`bI!u8N9K)8kSq zVChmSO=)+P8rz)H3V7_tEjtZFI)k+up^!1$4#bE>df+ zq2_IDso!2euiQO@f3-Ii(Dw)IE8wd=UJ9(ZgZsnY0v_n`mBicYLQNCx1;kT5{(E|~ z8Prifta*LT8{L69W;M)S%i&rV^`g~;0XU7iLVPo0tcT3)1OS80GrPN{{J=!%o5pyL&yL&4eW!uextBb*N)An(UAc@Pcq5TQJX zHF5|W(amtc>-_91a8SB z-j^o+Bv0bc(!z)G6h4us@psC9DsADF8BxPEEQiDznHB40UUbScV!J#mcFOZ2E-wgE zUKDBhm^dRJ7w6>@;xgA4u?u0NlCWuU-3FAFZSXu_%SIT zM$m*eNcj=RO8kVBhAC?P)a6~^3H zc=?sAh)&Vqjs_{VivWI!xA@=0PT|9^sOuAP{?Pa}DZel=fZr&~;sgF3xWYfg{48s6oV!yB0!od}lY${RF(i6hNZQ&iJ);a*9pzR2IU np@loH@}<)LD&>7q%_7IEf1x6C^kCL~7I2#@tHEy!ci{OiCQB&; diff --git a/software/LepMap3/lm3/bin/Separate2$SeparateThread.class b/software/LepMap3/lm3/bin/Separate2$SeparateThread.class deleted file mode 100644 index 283a9d51928167c02797bb59b6af9dfede34cba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3289 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 {)yO8&*@#s+(zYjhk3?$3ghJHwr#M;hJ1?gq`C; z_a=v)|Hp~LYKs5=###7(H+WZo;e4G8%hp87wQ4A79Yg)B$uz*4LdRIg(gN!^T4YV7 zC3s(D&7ib3lh#|u)A`mcx*pGVYc}19i;fSX-H)uf^prJ^p0(!F3)TYqyS0cuv=-Ao z>tx|ri^V`|si?G;iILWFG2U7sW>}|+xk#UEtrRP)Rbs7`5=}^-Wvv$HT6N-U)*5k< zwN_kWtrJ&S>&13!gSf>yL)>XKh+TO86gIeLtY+~mYoqv$b*A{e)gs=oTE)MuHnHE@ zB!zXRj9X{PG1eA2**aTJx6YAE@LX+uNv^ZLY&0_0oxQ<7-sA>j!2^?!8+r=+0CYs0LjAqext^UZf_qO-89Q4<+>TPVi$(E;tQ%b`7mkM= zu9XW%+P7sLN@L=;o^>rQC&NOc^G|X6F&` zMvBitrdE%9pP5Dsmk#JeO!f%-N;}0M*xB@qKsdu$#AJqhG0`7-7+_6vv<_N5HX*S<*3-{~;MQ$vl%=!$r z9hiLzIJ}Wf3YpD)y8*f>%SJC#jOC!O8lLR{>_1JbT=tLJ8DG~O*voKWeVr`pd_$%O zd|g+r1-v3JjQbY;7jch3pMZj(V~JPpLn8AtzekvEVBbcQdQiCucfuzbUAu+(5-fk- zHM2>-j3#IF*(BY&N&k!{4SfRkT5rIHWHf1%O&(w)5rx2?c8OOF$CvezSq?5rJ=l$& zEHlx|GMYBajlrA(G*G|Zqm}thNXj#LzOqHO;#mbEeoD4Ml8lHHR_H9mINXNk7Chg; N^K8^yjORHd{~r=|u_OQh diff --git a/software/LepMap3/lm3/bin/SeparateChromosomes2.class b/software/LepMap3/lm3/bin/SeparateChromosomes2.class deleted file mode 100644 index 98367c0e1f36f6bd5fa1810d865b00d44dd5f799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4422 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 diff --git a/software/LepMap3/lm3/bin/SeparateIdenticals.class b/software/LepMap3/lm3/bin/SeparateIdenticals.class deleted file mode 100644 index 718ed66cb358a33dbc8560f62213177551c69199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3667 zcma)8TXa-c8UFT6!Z|Z@CPNMkNoZQqRzfCB2?;a}3DAa4p@S1HnV2#G(L?4W95R=1 z=1d^1TB}jCUQ5+V)mCf;?^@IW3dPoHi&a~-wcdU4!N;!E7uRyNjo+S`5RwdQ`Ed5x zd;kCb@Bg>=OYb~=3BWr1Q-MoBkDKF$Z8&B$X=WU2*hu9RR0%9TWK0-sDI+u5w)4Ot zbJ!7Bw9(2~&Sn93OK4D_>dtJ^^ui5~hH5Ml2*j+6xg(!GVA=!5fs{$%u`C4+8nz|Z z<;^PRpp_F?8e6Ejhf>pql@VChvNtwsLEN#e%xF(&(2H6uQJ@P{-(}lbTf74_eU9t|61p(w@3q%sOvOo3f2zqIL?HYYjh z`zCng(5qn!?qpJB)mtmOw*vr+JX^!`^(^R~dwjD5?Bc_>&)AxbNac;hkEF(tR zN?B%3`fq4BfMG`Kh+$_a^;%8A7_imcYuBumr$#j#gvG)cHJw3OBfYtqymVE_@q!dr zuAMQY6{O~rVG$pndQ|;ih8a^k1CXi-rM`uf2#Y61Qb}t^r7ZrSgDraFPnsLlglNtDujEGuH z8~3DvU)FF!f~k*@jb)SN!u<+Gv9Ln;nuf>lI3dG4oaZGmFLX1&GbBTIQo}d!1jWzP zpg^dChvnqw9V^w=YumTz9XwD zdhM!G@jbRmyKEH)KhW?){D`+yZow7En6>PUM59BIp-?Qgt}DG2k2}Wj7*kg~tKc~W zuMouJ*}Oe$min%4247|$KWk*K@Or0Jd?f)c&iK0FsBqQBKOYyUZaoY2sUq3SQIdf= z_&91M2LAnAc~FA@cX+t!WvEz8iIc6D9)+h?Jai6=^<}X$sMl{Opvk@IG`cRJIkEa2 zTFzokYhy!p*^m&s5-_XTW9oW<>Z;nfA)aYapd zam_ObCER)>o~Y8d#uL^0-SNaCeS18i=&^W0)px`bix=s;I4XKSM^zu-=+Or`di6aV zefkhbP2b1SukVi+@cw(k`Yt_Lz{oiq+8)+p(!jGA4;65@Xq?>NP#xB{S0pGG;E;Wy z+tc8wuP)#Se@X%Oh4n}QAL{f5y(i!adaIt4!8*=hxjTKQv6|$dPZaQxZmmIkQPLhJ zt-;fvh4s7jkI|X}j!pSQ&=>TcoPI5=ZbOHR#tr zMQJp(f66a{{-Abp`roIqtm>kYaFZ^n(vkjdUxQ~>#b?5LzyA3m>3FAKQufR&3wR`~ z@6#V8QEq*;vnE(`f+qSdEqa{x)=GQB`hJ@A81&-g>)io55GdeD{(ND5pd7HEzkqMe zgz~sFcd)3WC^oDQ>EA8c7OW}Y`;`i@ys3Jnxp!1)56kp)`?S+Fnj{SPc> zWnaglZDf&Nk7c-ls};BvP3Yr%5I12TpR!4;L`q)UScR8(5xkC8yn)q1FRp=1%QQ3v{Vly9zQFMwOxJ?Y8OAK=_jg2CYP2xVj`X0dT;u!7_C-{E?z2X$M zi1Ubu7x9wu}Gp#r6(jt}5(w`LW9t#BNt323!g3aqUOKmBEnfD29uT z_bisk=EAdhj=t5n#_)4I&(^EQX8Z!bWG5$i{sp|q+3VE08<*MRZ-@u+E6%EgDh|`X z%TPqEIEY{4H}Hs6q94EIS+D5f?INZ4=+|<_?|EqSVkNfW74Ds<*3v95s_;AVX<~}8 zlqdZ3=oI3`*_$|q-{TLoE=Wjt6|W&cUz+eoMm2yx(Qd*=nf7Py{DnJ@AmDo&0RroYoX7yj`-!W5g+ diff --git a/software/LepMap3/lm3/bin/ShortPath.class b/software/LepMap3/lm3/bin/ShortPath.class deleted file mode 100644 index fccee924dbdd4a6df9d3dc614df14a98b5748db2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10253 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

$-u)5!(lK$ zsU;VM=lzZbs>4c$`Vt+&`x4!vmnZnP+LT^UGfAnKh%|8~lZf&=r5a)N3*02`?y#DY z!AN~YD z0U5r_EH2?aKEh?p9N=Bt<6UI75>%^BgY+uF#b^@||bDU84i@ba{c!UPqpB z1vd_Gy^q^eK=#Uq?Jf;)MPuiB*rBJ|TocsJbz63B0O~7*glya%e~e7u=b{Jse*yL3 BI1c~- diff --git a/software/LepMap3/lm3/qtl.R b/software/LepMap3/lm3/qtl.R deleted file mode 100644 index 601b146..0000000 --- a/software/LepMap3/lm3/qtl.R +++ /dev/null @@ -1,98 +0,0 @@ -# -# This file is part of Lep-MAP3. -# -# Lep-MAP3 is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Lep-MAP3 is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Lep-MAP3. If not, see . -# -# Copyright (C) 2021 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki - - -#QTL LOD plot - -library(scales) - -p=read.table("qtlphenotypes.txt", sep="\t") - -png("qtl.png",600,600) - -mh = list() -mhc = list() - -mh2 = list() - -for (chr in 1:1) {#edit to work for multiple chromosomes, e.g. 1:21 - d=read.table(paste0("qtldata",chr,".12"), sep="\t") - n=nrow(d) - m=ncol(d) - - #different families - fam=unique(t(d[1,5:m])) - - gen=d[7:n,5:m] - - data1 = 2 * (gen == "1 1") + 2 * (gen == "1 2") - 1 - data2 = 2 * (gen == "1 1") + 2 * (gen == "2 1") - 1 - data3 = 2 * (gen == "1 1") + 2 * (gen == "2 2") - 1 - - numMarkers = n - 6 - numFamilies = length(fam) - print(paste0(numMarkers, " markers and ", numFamilies, " families")) - - sex = p$V1 - 1 - weight = p$V2 - - ret = matrix(0, nrow = numMarkers, ncol = numFamilies) - - famIndex = 1 - for (f in fam) { - fi = (d[1,5:m] == f) - - d1 = data1[,fi] - d2 = data2[,fi] - d3 = data3[,fi] - s = sex[fi] - w = weight[fi] - - m0 = glm(w ~ s) - l0 = logLik(m0) - - #cat(s, "\n") - - m1 = glm(w ~ s + d1[1,] + d2[1,] + d3[1,]) - l1 = logLik(m1) - ret[1, famIndex] = l1 - l0 - for (i in 2:numMarkers) { - if (!all(d1[i - 1,] == d1[i,]) | !all(d2[i - 1,] == d2[i,])) { - m1 = glm(w ~ s + d1[i,] + d2[i,] + d3[i,]) - l1 = logLik(m1) - } - ret[i, famIndex] = l1 - l0 - } - famIndex = famIndex + 1 - } - rs = rowSums(ret) -# plot(rs, ylim=c(20, max(max(rs), qchisq(.95, df=numFamilies * 3)))) - mh[[chr]] = rs - mhc[[chr]] = rep((chr %% 2) + 1, length(rs)) - - mh2[[chr]] = ret - -} -y=Reduce(c, mh) -plot(y, col=alpha(Reduce(c, mhc), 0.5), pch=19, xlab="Marker", ylab="LOD", cex.lab=1.5, ylim=c(0,max(y))) - -#plot significant lines, could be loaded from a file -#abline(h=103.10) #5%, from qtlPerm.R -#abline(h=109.76) #1%, from qtlPerm.R -dev.off() -warnings() diff --git a/software/LepMap3/lm3/qtl.png b/software/LepMap3/lm3/qtl.png deleted file mode 100644 index 378db26608cea54b4ac5b0fcb45a5180bddeaa60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25626 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. -# -# Copyright (C) 2021 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki - -#QTL permutation test, slow! - -p=read.table("qtlphenotypes.txt", sep="\t") - -library(doParallel) - -#permutate but keep sex intact -myPerm <- function(sex) { - result = 1:length(sex) - - males = which(sex %in% 0) - females = which(sex %in% 1) - - perm1 = sample(males,replace=F) - perm2 = sample(females,replace=F) - result[males] = perm1 - result[females] = perm2 - - return(result) -} - -for (chr in 1:1) { #change to work with all chromosomes, e.g 1:21 - d=read.table(paste0("qtldata",chr,".12"), sep="\t") - n=nrow(d) - m=ncol(d) - - #different families - fam=unique(t(d[1,5:m])) - - gen=d[7:n,5:m] - - data1 = 2 * (gen == "1 1") + 2 * (gen == "1 2") - 1 - data2 = 2 * (gen == "1 1") + 2 * (gen == "2 1") - 1 - data3 = 2 * (gen == "1 1") + 2 * (gen == "2 2") - 1 - - numMarkers = n - 6 - numFamilies = length(fam) - numIndividuals = m - 4 - print(paste0(numMarkers, " markers and ", numFamilies, " families")) - - cl = makeCluster(10) #use 10 cores - registerDoParallel(cl) - maxl = foreach(j=1:1000, .combine=rbind) %dopar% { - - sex = p$V1 - 1 - weight = p$V2 - - ret = matrix(0, nrow = numMarkers, ncol = numFamilies) - - famIndex = 1 - for (f in fam) { - fi = (d[1,5:m] == f) - - d1 = data1[,fi] - d2 = data2[,fi] - d3 = data3[,fi] - s = sex[fi] - w = weight[fi] - - perm = myPerm(s) #do not permutate first 2 elements (parents) nor change sexes - s = s[perm] - w = w[perm] - - m0 = glm(w ~ s) - l0 = logLik(m0) - - m1 = glm(w ~ s + d1[1,] + d2[1,] + d3[1,]) - l1 = logLik(m1) - ret[1, famIndex] = l1 - l0 - for (i in 2:numMarkers) { - if (!all(d1[i - 1,] == d1[i,]) | !all(d2[i - 1,] == d2[i,])) { - m1 = glm(w ~ s + d1[i,] + d2[i,] + d3[i,]) - l1 = logLik(m1) - } - ret[i, famIndex] = l1 - l0 - } - famIndex = famIndex + 1 - } - max(rowSums(ret)) - } - stopCluster(cl) - maxl=sort(maxl, decreasing=T) - cat(chr, maxl[10], maxl[50], "\n") #print LOD limits for pvalues 0.01 and 0.05 -} - -warnings() diff --git a/software/LepMap3/lm3/qtldata1.12 b/software/LepMap3/lm3/qtldata1.12 deleted file mode 100644 index 7632a10..0000000 --- a/software/LepMap3/lm3/qtldata1.12 +++ /dev/null @@ -1,268 +0,0 @@ -MARKER CHR MALE_POS FEMALE_POS P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P1xP2 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P3xP4 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P5xP6 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P7xP8 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P9xP10 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P11xP12 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P13xP14 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P15xP16 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P17xP18 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P19xP20 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P21xP22 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P23xP24 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P25xP26 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P27xP28 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P29xP30 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P31xP32 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P33xP34 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P35xP36 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P37xP38 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P39xP40 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P41xP42 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P43xP44 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P45xP46 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P47xP48 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P49xP50 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P51xP52 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P53xP54 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P55xP56 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P57xP58 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P59xP60 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P61xP62 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 P63xP64 -MARKER CHR MALE_POS FEMALE_POS P1 P2 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 P3 P4 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 P5 P6 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 P7 P8 C45 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55 C56 C57 C58 C59 P9 P10 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C70 C71 C72 C73 C74 P11 P12 C75 C76 C77 C78 C79 C80 C81 C82 C83 C84 C85 C86 C87 C88 P13 P14 C89 C90 C91 C92 C93 C94 C95 C96 C97 C98 C99 C100 C101 C102 P15 P16 C103 C104 C105 C106 C107 C108 C109 C110 C111 C112 C113 C114 C115 C116 P17 P18 C117 C118 C119 C120 C121 C122 C123 C124 C125 C126 C127 C128 C129 C130 C131 P19 P20 C132 C133 C134 C135 C136 C137 C138 C139 C140 C141 C142 C143 P21 P22 C144 C145 C146 C147 C148 C149 C150 C151 C152 C153 C154 C155 C156 C157 P23 P24 C158 C159 C160 C161 C162 C163 C164 C165 C166 C167 C168 C169 C170 C171 P25 P26 C172 C173 C174 C175 C176 C177 C178 C179 C180 C181 C182 C183 C184 C185 P27 P28 C186 C187 C188 C189 C190 C191 C192 C193 C194 C195 C196 C197 C198 C199 P29 P30 C200 C201 C202 C203 C204 C205 C206 C207 C208 C209 C210 C211 C212 C213 P31 P32 C214 C215 C216 C217 C218 C219 C220 C221 C222 P33 P34 C223 C224 C225 C226 C227 C228 C229 C230 C231 C232 C233 C234 C235 C236 P35 P36 C237 C238 C239 C240 C241 C242 C243 C244 C245 C246 C247 C248 C249 P37 P38 C250 C251 C252 C253 C254 C255 C256 C257 C258 C259 C260 C261 C262 C263 P39 P40 C264 C265 C266 C267 C268 C269 C270 C271 C272 C273 C274 C275 C276 P41 P42 C277 C278 C279 C280 C281 C282 C283 C284 C285 C286 C287 C288 C289 C290 C291 P43 P44 C292 C293 C294 C295 C296 C297 C298 C299 C300 C301 C302 C303 C304 C305 C306 P45 P46 C307 C308 C309 C310 C311 C312 C313 C314 C315 C316 C317 C318 C319 C320 C321 P47 P48 C322 C323 C324 C325 C326 C327 C328 C329 C330 C331 C332 C333 C334 C335 P49 P50 C336 C337 C338 C339 C340 C341 C342 C343 C344 C345 C346 C347 C348 C349 C350 P51 P52 C351 C352 C353 C354 C355 C356 C357 C358 C359 C360 C361 C362 P53 P54 C363 C364 C365 C366 C367 C368 C369 C370 C371 C372 C373 C374 C375 P55 P56 C376 C377 C378 C379 C380 C381 C382 C383 C384 C385 C386 C387 C388 C389 C390 C391 P57 P58 C392 C393 C394 C395 C396 C397 C398 C399 C400 C401 C402 C403 C404 C405 C406 P59 P60 C407 C408 C409 C410 C411 C412 C413 C414 C415 C416 C417 C418 P61 P62 C419 C420 C421 C422 C423 C424 C425 C426 C427 C428 C429 P63 P64 C430 C431 C432 C433 C434 C435 C436 C437 C438 C439 C440 C441 C442 C443 C444 -MARKER CHR MALE_POS FEMALE_POS 0 0 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 0 0 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 P3 0 0 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 P5 0 0 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 0 0 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 P9 0 0 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 P11 0 0 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 P13 0 0 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 P15 0 0 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 P17 0 0 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 P19 0 0 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 P21 0 0 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 P23 0 0 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 P25 0 0 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 P27 0 0 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 P29 0 0 P31 P31 P31 P31 P31 P31 P31 P31 P31 0 0 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 P33 0 0 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 P35 0 0 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 P37 0 0 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 P39 0 0 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 P41 0 0 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 P43 0 0 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 P45 0 0 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 P47 0 0 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 P49 0 0 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 P51 0 0 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 P53 0 0 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 P55 0 0 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 P57 0 0 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 P59 0 0 P61 P61 P61 P61 P61 P61 P61 P61 P61 P61 P61 0 0 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 P63 -MARKER CHR MALE_POS FEMALE_POS 0 0 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 P2 0 0 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 P4 0 0 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 P6 0 0 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 P8 0 0 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 P10 0 0 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 P12 0 0 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 P14 0 0 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 P16 0 0 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 P18 0 0 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 P20 0 0 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 P22 0 0 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 P24 0 0 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 P26 0 0 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 P28 0 0 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 P30 0 0 P32 P32 P32 P32 P32 P32 P32 P32 P32 0 0 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 P34 0 0 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 P36 0 0 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 P38 0 0 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 P40 0 0 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 P42 0 0 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 P44 0 0 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 P46 0 0 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 P48 0 0 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 P50 0 0 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 P52 0 0 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 P54 0 0 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 P56 0 0 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 P58 0 0 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 P60 0 0 P62 P62 P62 P62 P62 P62 P62 P62 P62 P62 P62 0 0 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 P64 -MARKER CHR MALE_POS FEMALE_POS 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -MARKER CHR MALE_POS FEMALE_POS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1429 0 0.000 0.000 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 2 1 1 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -1431 0 5.776 1.316 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -9366 0 7.239 1.316 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -9367 0 7.239 2.620 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -3453 0 8.052 3.430 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -12113 0 8.821 6.568 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 1 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 1 1 -12937 0 9.821 8.171 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -12294 0 11.365 8.171 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -13437 0 12.245 9.258 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -14547 0 12.245 9.258 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -2600 0 12.245 9.509 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -2601 0 12.784 9.993 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -2599 0 13.595 10.234 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -2598 0 13.845 11.208 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -2337 0 13.845 11.208 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -119 0 14.598 12.147 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -120 0 14.839 12.614 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -10409 0 14.839 12.614 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -10411 0 14.839 13.081 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -10412 0 14.839 15.707 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 1 1 -12392 0 16.800 16.160 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -14062 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -4395 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -4397 0 16.800 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 2 1 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -11969 0 17.268 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -7707 0 18.207 17.069 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -14689 0 18.207 17.295 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12577 0 18.207 17.295 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6272 0 18.909 18.204 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12865 0 19.376 18.656 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -8263 0 19.376 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -4899 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -3907 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -14317 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -15079 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -581 0 19.610 18.882 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -580 0 19.843 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -14369 0 20.068 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12051 0 20.068 19.334 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -7345 0 20.294 19.560 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -7343 0 20.294 19.560 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -9180 0 20.294 20.240 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -9181 0 20.520 20.693 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -9179 0 20.520 20.693 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -2799 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -7782 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -7783 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -11191 0 20.746 21.373 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -13330 0 21.885 22.053 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -14660 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -14023 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -14049 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -3706 0 21.885 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -11393 0 22.337 23.423 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 1 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -15152 0 22.337 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -204 0 22.337 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -203 0 22.790 23.649 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -13584 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -10576 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -10575 0 22.790 24.329 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -6982 0 22.790 24.555 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -458 0 22.790 24.555 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -12145 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -11993 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -11591 0 22.790 25.235 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -12471 0 22.790 25.916 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 1 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -4081 0 22.790 26.141 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -4080 0 22.790 26.141 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 1 2 1 1 1 2 2 1 2 2 1 -12064 0 23.242 27.051 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12538 0 23.242 28.190 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12787 0 23.242 28.190 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10218 0 23.242 28.642 1 2 1 2 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 2 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10217 0 23.242 29.781 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10216 0 23.242 29.781 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10214 0 23.922 30.007 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10213 0 24.831 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -10212 0 24.831 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -465 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -12852 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -2274 0 25.512 30.459 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -5844 0 25.512 30.685 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 2 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -5843 0 25.737 30.911 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -5340 0 25.737 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6202 0 25.963 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 1 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -13943 0 26.189 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -11263 0 26.189 31.363 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6378 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6381 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6384 0 27.098 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 2 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -6383 0 27.551 31.816 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 2 2 1 1 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -9615 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -9614 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -3377 0 28.460 32.268 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 1 -3379 0 28.685 33.407 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -3380 0 28.911 34.316 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 2 2 2 2 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -773 0 29.820 34.316 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -774 0 30.273 35.918 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -4512 0 30.273 36.371 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -4815 0 30.273 36.371 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 1 1 2 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 1 -3959 0 30.498 38.675 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 2 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -3956 0 30.498 38.901 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -3955 0 31.637 38.901 1 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 1 1 2 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -3957 0 33.942 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -4677 0 34.168 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -4676 0 34.168 41.206 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -4675 0 34.394 42.345 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -14724 0 34.846 42.570 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12525 0 34.846 42.570 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -15043 0 35.072 43.023 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -14255 0 35.072 43.249 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12735 0 35.524 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 1 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7532 0 35.750 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7530 0 35.750 44.388 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7525 0 35.750 44.613 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7527 0 35.976 45.294 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 2 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7526 0 36.201 46.433 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7528 0 36.201 46.658 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 2 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7704 0 36.201 47.111 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -14147 0 36.201 47.337 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7705 0 36.427 47.562 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -14617 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -8750 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -13413 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -8144 0 36.427 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -8145 0 36.653 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -1390 0 36.879 47.788 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -1389 0 36.879 48.014 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12985 0 36.879 48.240 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -4053 0 37.104 49.149 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -6361 0 37.104 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -13792 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7332 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7331 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7328 0 37.330 49.374 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -7329 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12320 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -2884 0 37.330 49.827 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10394 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10393 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10392 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10390 0 37.330 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -1324 0 37.556 50.053 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -13541 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12925 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -1322 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -1321 0 38.008 50.278 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -11730 0 38.234 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 2 2 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -12688 0 38.914 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10477 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10478 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -10449 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -349 0 39.140 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -350 0 39.593 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 1 1 2 2 -344 0 40.045 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -345 0 40.045 50.504 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -347 0 40.045 50.730 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -341 0 40.045 50.730 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -356 0 40.045 50.956 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12091 0 40.271 51.181 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12401 0 40.271 51.181 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -5591 0 40.723 51.407 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -5594 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13999 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12652 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12882 0 40.723 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1436 0 41.404 52.087 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1850 0 41.404 52.313 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -8176 0 41.404 52.539 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -8177 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11338 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9579 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12638 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -7580 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -7579 0 41.404 53.219 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 2 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 1 2 1 1 1 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -7578 0 41.856 55.054 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11024 0 41.856 55.054 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1263 0 41.856 55.280 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1262 0 41.856 56.189 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11025 0 41.856 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13276 0 42.082 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13112 0 42.082 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12532 0 42.308 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -3472 0 42.308 56.415 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -836 0 42.760 56.640 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -834 0 42.760 56.866 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 2 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -562 0 43.899 57.775 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 1 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 2 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -563 0 45.038 58.914 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 2 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1750 0 45.491 59.367 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 2 2 2 2 1 1 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -1751 0 45.716 59.819 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13692 0 45.716 60.272 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -8242 0 45.942 60.497 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11556 0 45.942 60.723 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -6312 0 45.942 60.723 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -6313 0 46.168 61.176 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -6314 0 46.620 61.856 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -6315 0 46.846 61.856 1 2 1 2 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9370 0 47.072 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9372 0 47.072 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9371 0 47.297 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9540 0 47.297 61.856 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9539 0 47.297 62.765 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 2 2 2 1 1 2 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9542 0 47.750 63.904 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 2 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 2 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9543 0 48.202 64.130 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -14805 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13481 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13698 0 48.202 64.582 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -14208 0 48.655 64.808 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9545 0 48.655 64.808 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 2 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9547 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -12835 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -15217 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -6687 0 49.794 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -2761 0 50.020 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -13576 0 50.020 65.261 1 2 1 2 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9783 0 50.020 65.713 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11944 0 50.245 65.939 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -74 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9405 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10781 0 50.245 66.848 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -9404 0 50.926 67.300 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10782 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10926 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10940 0 50.926 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10939 0 51.151 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10937 0 51.377 68.210 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 1 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -11966 0 51.377 68.662 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10934 0 51.377 68.662 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10935 0 51.377 69.114 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10533 0 51.603 69.340 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 1 1 2 1 2 1 2 2 1 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 2 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 2 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -10534 0 51.829 71.175 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -640 0 52.281 71.401 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -7692 0 52.281 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1 2 2 1 1 2 2 -7694 0 52.961 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -7693 0 53.187 71.627 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -3725 0 53.187 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4975 0 53.187 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 2 1 2 2 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4973 0 54.364 72.079 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 2 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4974 0 54.831 72.305 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4061 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4063 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4262 0 54.831 72.985 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -4263 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -12195 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -255 0 54.831 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -256 0 55.559 73.219 1 2 1 2 2 1 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 1 2 2 1 2 2 2 2 2 1 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -10750 0 57.525 73.724 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 1 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -6020 0 58.253 73.976 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -7893 0 58.253 74.228 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -7892 0 58.513 75.017 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 2 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -7896 0 58.513 75.807 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -7895 0 59.296 76.596 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -8917 0 59.817 77.416 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -8916 0 59.817 78.790 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -13565 0 60.405 79.085 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -3722 0 60.993 79.085 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 1 2 1 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 2 2 1 1 2 1 1 2 1 1 2 2 2 1 1 1 1 2 2 2 1 2 1 2 2 1 1 2 2 -3721 0 62.532 80.698 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 2 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -9369 0 62.877 81.750 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -9368 0 63.629 82.150 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -6747 0 63.629 86.302 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -2851 0 63.629 87.978 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 1 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 2 2 2 1 2 2 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 1 2 1 2 1 2 2 1 1 1 1 2 1 2 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -8388 0 68.394 91.313 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 -12513 0 68.394 91.313 1 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 2 1 1 2 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 2 2 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 2 1 2 1 2 2 2 1 1 1 1 1 1 2 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 2 2 1 1 2 2 1 2 2 2 1 2 2 1 1 1 1 2 1 2 2 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 1 2 2 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 2 1 2 2 2 1 2 1 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 2 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2 2 2 1 2 1 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 2 1 2 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 1 2 1 1 1 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 2 2 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 2 1 2 2 1 1 2 2 2 1 2 2 1 2 2 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 2 2 1 2 1 1 2 2 2 2 2 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 1 2 1 2 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 1 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 2 1 2 1 1 1 2 2 diff --git a/software/LepMap3/lm3/qtlphenotypes.txt b/software/LepMap3/lm3/qtlphenotypes.txt deleted file mode 100644 index 434bb70..0000000 --- a/software/LepMap3/lm3/qtlphenotypes.txt +++ /dev/null @@ -1,508 +0,0 @@ -NA NA -NA NA -2 63.98 -2 63.65 -1 54.03 -2 73.78 -2 69.89 -1 49.15 -1 54.10 -2 48.16 -2 37.43 -1 62.34 -1 44.18 -1 72.51 -2 70.07 -2 49.89 -2 69.22 -NA NA -NA NA -1 57.60 -2 61.07 -1 47.42 -1 50.30 -2 80.13 -1 44.32 -2 57.72 -2 68.82 -1 83.58 -2 72.92 -1 67.53 -2 65.10 -2 47.50 -2 65.55 -NA NA -NA NA -2 32.20 -1 37.00 -2 76.90 -2 21.30 -2 51.60 -2 28.20 -1 39.60 -1 25.50 -1 45.60 -2 31.90 -1 33.60 -2 42.80 -2 36.60 -2 37.60 -1 37.50 -NA NA -NA NA -1 48.50 -2 41.10 -2 40.90 -1 35.10 -1 33.60 -2 36.40 -1 35.80 -2 38.20 -1 38.10 -2 53.90 -1 31.90 -1 50.70 -1 26.90 -2 45.30 -1 61.99 -NA NA -NA NA -2 35.50 -1 36.20 -2 38.10 -1 33.10 -1 45.10 -1 33.60 -1 35.50 -1 37.30 -1 33.60 -1 37.30 -2 34.30 -1 31.00 -1 28.63 -2 39.30 -1 27.60 -NA NA -NA NA -2 26.10 -1 32.10 -1 32.10 -2 38.10 -1 46.10 -1 56.10 -1 46.10 -1 26.10 -1 32.10 -1 46.10 -2 32.10 -2 56.10 -1 38.10 -2 46.10 -NA NA -NA NA -2 24.00 -2 34.70 -2 41.20 -2 29.50 -1 31.10 -2 47.40 -2 27.80 -1 37.40 -2 38.40 -1 35.00 -2 36.50 -1 37.00 -2 28.80 -1 37.60 -NA NA -NA NA -2 39.80 -1 34.20 -1 38.50 -2 81.50 -2 42.60 -1 45.40 -2 44.20 -1 50.60 -2 25.70 -2 43.40 -2 50.40 -1 36.60 -2 34.80 -2 37.50 -NA NA -NA NA -2 44.90 -2 34.10 -2 36.90 -2 35.10 -1 44.30 -2 35.60 -1 38.10 -1 33.90 -1 42.60 -1 32.10 -1 63.00 -1 29.50 -2 36.60 -1 36.30 -1 30.80 -NA NA -NA NA -2 54.50 -1 47.70 -2 48.70 -1 53.90 -2 48.30 -1 51.20 -2 67.30 -2 56.10 -1 55.40 -1 58.00 -1 61.20 -2 57.30 -NA NA -NA NA -2 82.50 -1 53.34 -1 66.52 -2 85.24 -1 56.96 -1 63.08 -2 75.64 -2 57.13 -2 60.51 -1 52.42 -1 36.89 -1 46.01 -1 38.48 -2 83.35 -NA NA -NA NA -2 42.44 -1 37.16 -2 55.08 -2 66.76 -2 68.19 -2 42.43 -2 33.14 -2 41.72 -2 46.48 -2 61.80 -2 41.24 -2 88.40 -2 54.25 -1 33.00 -NA NA -NA NA -2 31.17 -1 34.41 -2 25.97 -1 31.19 -2 41.48 -2 42.99 -1 22.06 -1 46.67 -2 51.31 -1 29.87 -1 29.80 -2 28.96 -1 37.84 -2 28.52 -NA NA -NA NA -1 35.26 -2 53.23 -1 68.80 -1 37.21 -1 36.07 -2 64.30 -1 54.39 -2 47.28 -2 48.04 -1 44.62 -1 35.07 -1 56.05 -1 80.23 -1 67.57 -NA NA -NA NA -2 53.08 -1 44.75 -1 35.59 -1 60.11 -1 75.79 -1 61.05 -1 33.83 -1 38.91 -1 32.03 -1 54.25 -2 48.88 -1 57.88 -2 47.82 -1 66.53 -NA NA -NA NA -1 60.39 -1 62.59 -2 70.29 -1 57.42 -1 50.27 -2 69.30 -1 57.09 -1 61.16 -2 92.29 -NA NA -NA NA -2 48.70 -1 32.50 -1 44.40 -1 38.50 -1 56.80 -1 39.50 -2 53.90 -1 38.20 -1 43.20 -2 32.30 -2 50.60 -1 49.00 -2 52.20 -1 40.70 -NA NA -NA NA -2 57.03 -1 64.17 -2 66.79 -2 59.26 -1 25.57 -1 61.80 -1 62.67 -2 90.99 -2 54.46 -2 77.43 -2 42.81 -2 51.98 -2 53.06 -NA NA -NA NA -1 44.30 -1 56.77 -2 38.62 -1 59.63 -2 44.23 -1 56.16 -1 69.86 -1 55.28 -1 53.76 -2 28.66 -2 30.82 -2 49.59 -2 51.20 -2 53.20 -NA NA -NA NA -1 47.91 -1 53.83 -1 42.56 -2 64.82 -1 52.50 -2 56.54 -2 60.20 -2 41.58 -1 63.92 -2 46.95 -2 39.84 -1 51.46 -2 40.30 -NA NA -NA NA -2 77.08 -1 66.90 -1 50.50 -1 53.11 -1 46.73 -1 56.02 -1 52.41 -2 48.08 -1 43.49 -1 41.47 -1 50.53 -1 42.26 -2 90.77 -1 31.81 -1 67.00 -NA NA -NA NA -2 80.71 -2 104.39 -1 79.32 -2 76.36 -2 83.34 -1 74.48 -2 92.51 -2 109.66 -1 99.66 -2 98.02 -2 66.11 -2 70.17 -1 95.19 -2 51.32 -2 112.95 -NA NA -NA NA -2 58.09 -1 49.46 -2 52.82 -1 48.50 -1 33.66 -1 50.86 -2 52.72 -2 45.29 -1 53.86 -1 40.85 -1 50.67 -2 50.03 -1 67.68 -2 69.16 -1 60.50 -NA NA -NA NA -2 37.06 -1 22.14 -2 60.61 -2 39.52 -1 51.75 -2 44.95 -2 35.43 -2 61.76 -2 80.09 -1 56.54 -2 35.74 -2 64.05 -2 44.11 -2 52.06 -NA NA -NA NA -2 78.54 -1 49.74 -2 98.18 -1 65.45 -1 52.36 -2 39.27 -1 39.27 -1 39.27 -1 32.73 -1 39.27 -1 30.11 -2 28.80 -2 15.71 -1 23.56 -1 32.73 -NA NA -NA NA -1 42.60 -2 48.65 -2 58.22 -2 93.54 -1 44.06 -1 44.68 -1 57.24 -1 59.04 -2 43.42 -1 57.39 -2 68.76 -1 60.32 -NA NA -NA NA -2 72.98 -1 31.62 -2 53.34 -2 38.58 -2 42.44 -2 40.41 -1 46.32 -1 54.70 -1 42.08 -1 38.63 -1 40.83 -2 40.64 -1 59.31 -NA NA -NA NA -1 40.25 -1 79.39 -2 65.33 -1 71.14 -1 52.94 -2 57.55 -1 49.04 -2 55.29 -2 35.99 -1 42.87 -1 38.64 -2 81.96 -1 61.85 -1 42.55 -1 130.12 -2 64.68 -NA NA -NA NA -1 39.27 -1 70.98 -2 29.98 -1 30.01 -2 69.08 -1 48.38 -2 45.27 -1 34.45 -2 28.93 -1 62.67 -2 51.23 -2 35.82 -1 63.93 -1 48.92 -1 35.21 -NA NA -NA NA -1 47.70 -2 72.48 -2 57.48 -2 44.47 -2 38.66 -1 46.24 -2 57.52 -2 43.92 -2 35.39 -1 54.63 -2 35.49 -2 39.95 -NA NA -NA NA -2 72.62 -2 57.15 -1 54.49 -2 60.72 -1 63.01 -2 78.22 -2 103.57 -2 67.38 -2 54.79 -2 54.44 -1 70.06 -NA NA -NA NA -1 75.02 -2 74.04 -2 51.01 -2 50.70 -1 76.86 -2 77.59 -2 66.70 -2 48.47 -1 75.20 -1 68.60 -1 65.73 -2 62.63 -1 95.22 -1 72.85 -2 39.00 diff --git a/software/LepMap3/lm3/src/Constants.java b/software/LepMap3/lm3/src/Constants.java deleted file mode 100644 index 7f80868..0000000 --- a/software/LepMap3/lm3/src/Constants.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki -*/ -//Some constants -public class Constants { - public static final double LOGHALF = Math.log10(0.5); - public static final double LOGTWO = Math.log10(2.0); - public static final double LOGTHIRD = Math.log10(1.0 / 3.0); - public static final double LOGTHREE = Math.log10(3.0); - public static final double LOGFOUR = Math.log10(4.0); - public static final double LOGE = Math.log10(Math.E); - public static final double invLOGE = 1.0 / Math.log10(Math.E); - - public static final double LN10 = Math.log(10.0); - public static final double LN2 = Math.log(2.0); - public static final double LNHALF = Math.log(0.5); - public static final double invLN2 = 1.0 / Math.log(2.0); - - public static final double PI = Math.PI; - public static final double E = Math.E; - public static final double SQRT2 = Math.sqrt(2.0); - public static final double SQRTHalf = Math.sqrt(0.5); - public static final double ONETHIRD = 1.0 / 3.0; - - private Constants() - { - } - -} diff --git a/software/LepMap3/lm3/src/Data2.java b/software/LepMap3/lm3/src/Data2.java deleted file mode 100644 index 3d95dbd..0000000 --- a/software/LepMap3/lm3/src/Data2.java +++ /dev/null @@ -1,268 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2014 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ - -import java.io.BufferedReader; -import java.io.InputStreamReader; - -import java.io.FileReader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; - -public class Data2 { - // indexes in LINKAGE file - static final int FAMILY_ID = 0; - static final int INDIVIDUAL_ID = 1; - static final int FATHER_ID = 2; - static final int MOTHER_ID = 3; - static final int SEX = 4; - static final int TRAIT = 5; - static final int FIRST_GENOTYPE = 6; - - private boolean phasedData = false; - - private ArrayList families = new ArrayList(); - private ArrayList markerNames = new ArrayList(); - private ArrayList markerNameNumbers = new ArrayList(); - - public String getMarkerName(int marker) - { - return markerNames.get(marker); - } - - private boolean numberInit = false; - HashMap scaffoldHash = new HashMap(); - - - public long getMarkerNameNumber(int marker) - { - if (!numberInit) { - int n = 0; - long mi = 0; - for (String m : markerNames) { - String s[] = m.split("\t"); - if (!scaffoldHash.containsKey(s[0])) - scaffoldHash.put(s[0], n++); - long pos = mi; - try { - pos = Long.parseLong(s[1]); - } catch (Exception e) { - } - markerNameNumbers.add(((long) (scaffoldHash.get(s[0])) << 32) + pos); // max chromosome pos = 2**32 - 1 - ++mi; - } - numberInit = true; - } - return markerNameNumbers.get(marker); - } - - - public String getIndividualName(int index) - { - return individualHash.get(index); - } - - public boolean isPhased(){ - return phasedData; - } - - public void setPhasedData(boolean phased){ - phasedData = phased; - } - public void setRandomPhase(){ - if (!phasedData) - for (Family2 f : families) - f.randomPhase(); - - } - - public ArrayList getFamilies() - { - return families; - } - public int getNumMarkers() - { - if (families.size() == 0) - return 0; - return getFamilies().get(0).getNumMarkers(); - } - - public void subSampleData(double rate) - { - if (rate < 1.0) { - int numM = getNumMarkers(); - for (int m = 0; m < numM; ++m) - if (Math.random() > rate) - for (Family2 f: families) - f.removeMarker(m); - } - - } - - public int getNumFamilies() - { - return families.size(); - } - - private float[] addToArray(float values[], float array[], int start) - { - if (start + values.length > array.length) - array = Misc.resizeArray(array, (int) (1 + 1.2 * (start + values.length))); - for (float f : values) - array[start++] = f; - return array; - } - - public void scale(double value) { - for (Family2 f: families) { - f.scale(value); - } - } - - public void setMinError(double value) { - for (Family2 f: families) { - f.minError((float) value); - } - } - - public void removeMarker(int m) - { - for (Family2 f: families) - f.removeMarker(m); - - } - public void keepFamilies(ArrayList famNames) - { - HashMap nameHash = new HashMap(); - for (String name : famNames) - nameHash.put(name, 1); - for (Family2 f: families) - if (!nameHash.containsKey(f.getName())) - for (int m = 0; m < f.getNumMarkers(); ++m) - f.removeMarker(m); - } - public void addFamilyFromFile(String filename, String informativeMask) - { - addFamilyFromFile(filename, informativeMask, null, false); - } - - HashMap individualHash = new HashMap(); - - public void addFamilyFromFile(String filename, String informativeMask, boolean mask[], boolean grandparentPhase) - { - // TODO: check consistency of the input pedigree file... - - int numIndividuals = 0; - - System.err.println("Loading file"); - - DataParser dp = new DataParser(); - dp.loadFile(filename, null, null); - - ArrayList dl = dp.getNextLine(false, false); - - ArrayList> familyIndex = dp.getFamilies(); - ArrayList parentIndex = dp.getParentIndex(); - int individualIndex = 0; - for (int fi = 0; fi < familyIndex.size(); ++fi ) { - String familyName = dp.getFamilyName(fi); - families.add(new Family2(familyName)); - int fis = familyIndex.get(fi).size(); - for (int i = 0; i < fis - 2; ++i) - individualHash.put(individualIndex++, familyName + "\t" + dp.getIndividualName(familyIndex.get(fi).get(i))); - numIndividuals += fis; - - } - ArrayList sex = dp.getSex(); - - int lineNumber = 0; - - while (dl != null) { - markerNames.add(dp.getMarkerName()); - - if (mask != null && mask.length > lineNumber && !mask[lineNumber]) { - for (int fi = 0; fi < familyIndex.size(); ++fi ) - families.get(fi).addMarker(); // add dummy marker - } - else { - for (int fi = 0; fi < familyIndex.size(); ++fi ) { - families.get(fi).addMarker(dl, familyIndex.get(fi), sex, informativeMask, grandparentPhase, parentIndex.get(fi)); - } - } - - ++lineNumber; - if (lineNumber % 100000 == 0) - System.err.println("processed " + lineNumber + " lines" ); - - if (mask != null && mask.length > lineNumber && !mask[lineNumber]) - dp.getNextLine(false, true); //do not process line - else - dl = dp.getNextLine(false, false); // no skip - } - System.err.println("File loaded with " + lineNumber + " SNPs" ); - - System.err.println("Number of individuals = " + numIndividuals + " excluding grandparents"); - System.err.println("Number of families = " + familyIndex.size()); - } - - public char[] getIgnoreParentOrder(int marker) { - int numF = getNumFamilies(); - char ret[] = new char[numF]; - Arrays.fill(ret, '_'); - String m = markerNames.get(marker); - if (m.length() > numF) { - int start = m.length() - numF; - //only '+' and '_' allowed for the last characters... - for (int f = 0; f < numF; ++f) - switch (m.charAt(f + start)) { - case '+' : break; - case '_' : break; - default: return ret; - } - for (int f = 0; f < numF; ++f) - ret[f] = m.charAt(f + start); - } - return ret; - - } - - public void maskIgnoreParentOrder() { - int numF = getNumFamilies(); - int numM = getNumMarkers(); -out: for (int mi = 0; mi < numM; ++mi) { - String m = markerNames.get(mi); - if (m.length() > numF) { - int start = m.length() - numF; - //only '+' and '_' allowed for the last characters... - for (int i = 0; i < numF; ++i) - switch (m.charAt(i + start)) { - case '+' : break; - case '_' : break; - default: continue out; - } - for (int i = 0; i < numF; ++i) - if (m.charAt(i + start) == '+') - families.get(i).removeMarker(mi); - } - } - } - -} diff --git a/software/LepMap3/lm3/src/DataParser.java b/software/LepMap3/lm3/src/DataParser.java deleted file mode 100644 index f3d1a40..0000000 --- a/software/LepMap3/lm3/src/DataParser.java +++ /dev/null @@ -1,779 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -//Parses the pedigree and posterior data from a file -//takes into account grandparents (and removes them from families) -//getParentIndex gives the indexes for parents and grandparents... -public class DataParser { - - private String names[] = null; - private String fathers[] = null; - private String mothers[] = null; - - private int numIndividuals; - - private String markerName = ""; - - private FileParser fp = null; - private BufferedReader br = null; - private String fn2 = null; - private int lineNumber = 0; - - private ArrayList> families = new ArrayList>(); - private ArrayList parentIndex = new ArrayList(); - private ArrayList familyNames = new ArrayList(); - private ArrayList sex = new ArrayList(); - private HashMap familyHash = new HashMap(); - - public DataParser() { - } - - public String getIndividualName(int index) { - return names[index + 2]; - } - - public ArrayList getFamilyNames(){ - ArrayList ret = new ArrayList(); - ret.addAll(familyNames); - return ret; - } - public String getFamilyName(int index){ - return familyNames.get(index); - } - - public String getFName() { - return markerName; - } - - public String getMarkerName() { - return markerName; - } - public ArrayList> getFamilies() { - ArrayList> ret = new ArrayList>(); - for (ArrayList al : families) { - ArrayList l = new ArrayList(); - l.addAll(al); - ret.add(l); - } - return ret; - } - - public ArrayList getParentIndex() { - ArrayList ret = new ArrayList(); - for (int[] al : parentIndex) { - int r[] = Arrays.copyOf(al, al.length); - ret.add(r); - } - return ret; - } - public ArrayList getSex() { - ArrayList ret = new ArrayList(); - ret.addAll(sex); - return ret; - } - public int getNumIndividuals() { - return numIndividuals; - } - - private int[] getParentsAndGrandParents(String names[], String fathers[], String mothers[]) - { - names = Arrays.copyOfRange(names, 2, names.length); - fathers = Arrays.copyOfRange(fathers, 2, fathers.length); - mothers = Arrays.copyOfRange(mothers, 2, mothers.length); - int fi = 0; - for (ArrayList familyIndex : families) - parentIndex.add(getParentsAndGrandParents(names, fathers, mothers, familyIndex, familyNames.get(fi++))); - return null; - } - - private int[] getParentsAndGrandParents(String names[], String fathers[], String mothers[], ArrayList familyIndex, String familyName) - { - - ArrayList founders = new ArrayList(); - ArrayList children = new ArrayList(); - - HashMap nameHash = new HashMap(); - - HashMap parents = new HashMap(); - - for (int i: familyIndex) { - if (fathers[i].equals("0") || mothers[i].equals("0")) - founders.add(i); - nameHash.put(names[i], i); - if (!fathers[i].equals("0")) - parents.put(fathers[i], true); - if (!mothers[i].equals("0")) - parents.put(mothers[i], true); - //System.err.println(names[i]); - - //if (motherHash.containsKey(names[i])) - // Error.error(-99999); - //if (fatherHash.containsKey(names[i])) - // Error.error(-99999); - //fatherHash.put(names[i], fathers[i]); - //motherHash.put(names[i], mothers[i]); - } - //System.err.println(parents); - for (int i: familyIndex) { - if (!parents.containsKey(names[i])) { - children.add(i); - //System.err.println(names[i]); - } - } - - int father = -1; - int mother = -1; - for (int i: children) { - if (!nameHash.containsKey(fathers[i])) - Error.error(520, familyName + ":" + fathers[i]); - - if (father >= 0 && (father != nameHash.get(fathers[i]))) //two fathers - Error.error(512, familyName + ":" + fathers[i]); - //System.err.println(names[i] + " " + nameHash.containsKey(fathers[i]) + " " + fathers[i]); - - father = nameHash.get(fathers[i]); - - if (!nameHash.containsKey(mothers[i])) - Error.error(520, familyName + ":" + mothers[i]); - - if (mother >= 0 && mother != nameHash.get(mothers[i])) //two mothers - Error.error(512, familyName + ":" + mothers[i]); - - mother = nameHash.get(mothers[i]); - - if (sex.get(nameHash.get(mothers[i])) != 2) //mother not female - Error.error(511, familyName + ":" + mothers[i]); - if (sex.get(nameHash.get(fathers[i])) != 1) //father not male - Error.error(511, familyName + ":" + fathers[i]); - } - int ret[] = new int[]{father, mother, -1, -1, -1, -1}; - - if (!familyIndex.remove(new Integer(father))) - Error.error(502); - familyIndex.add(father); - - if (!familyIndex.remove(new Integer(mother))) - Error.error(502); - familyIndex.add(mother); - - //System.err.println(names[father]); - //System.err.println(names[mother]); - - if (familyIndex.size() == 2 + children.size()) { // all done - System.err.println("No grandparents present in family " + familyName); - } else { - ArrayList gps = new ArrayList(); - for (int i : founders) { - if (i != father && i != mother) { - gps.add(i); - } else { - if (mothers[father].equals(names[mother])) { - System.err.println("Backcross to mother" + familyName); - gps.add(i); - } - if (fathers[mother].equals(names[father])) { - System.err.println("Backcross to father in family " + familyName); - gps.add(i); - } - } - } - int numGps = 0; - if (!fathers[father].equals("0")) { - if (!nameHash.containsKey(fathers[father])) - Error.error(513, familyName + ":" + fathers[father]); - ret[2] = nameHash.get(fathers[father]); - if (sex.get(ret[2]) != 1) - Error.error(511, familyName + ":" + fathers[father]); - ++numGps; - if (ret[2] != father && ret[2] != mother) // backcross - familyIndex.remove(new Integer(ret[2])); - - } - if (!mothers[father].equals("0")) { - if (!nameHash.containsKey(mothers[father])) - Error.error(513, familyName + ":" + mothers[father]); - ret[3] = nameHash.get(mothers[father]); - if (sex.get(ret[3]) != 2) - Error.error(511, familyName + ":" + mothers[father]); - ++numGps; - if (ret[3] != father && ret[3] != mother) // backcross - familyIndex.remove(new Integer(ret[3])); - - } - if (!fathers[mother].equals("0")) { - if (!nameHash.containsKey(fathers[mother])) - Error.error(513, familyName + ":" + fathers[mother]); - - ret[4] = nameHash.get(fathers[mother]); - if (sex.get(ret[4]) != 1) - Error.error(511, familyName + ":" + fathers[mother]); - ++numGps; - if (ret[4] != father && ret[4] != mother) // backcross - familyIndex.remove(new Integer(ret[4])); - } - if (!mothers[mother].equals("0")) { - if (!nameHash.containsKey(mothers[mother])) - Error.error(513, familyName + ":" + mothers[mother]); - ret[5] = nameHash.get(mothers[mother]); - if (sex.get(ret[5]) != 2) - Error.error(511, familyName + "," + mothers[mother]); - ++numGps; - if (ret[5] != father && ret[5] != mother) // backcross - familyIndex.remove(new Integer(ret[5])); - } - - if (numGps != gps.size()) { - //clone grandparents... - //System.err.println(gps); - //System.err.println(numGps); - //Error.error(513); - System.err.println("Warning: Different number of grandparents (" + numGps + " and " + gps.size() + ") in family " + familyName); - } - - System.err.println("Found " + gps.size() + " grandparents in family " + familyName); - } - - return ret; - } - - private interface FileParser{ - public String[] parseNext(String line); - } - - - private class VCFParser implements FileParser{ - private boolean firstLine = true; - private int mapping[] = null; - - private double pow[] = new double[4001]; - - private HashMap gtHash = new HashMap(); - - public VCFParser() { - for (int i = 0; i < pow.length; ++i) - pow[i] = Misc.exp10(-i * 0.1); - gtHash.put("./.", "1 1 1 1 1 1 1 1 1 1"); - gtHash.put("0/0", "1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0/1", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1/0", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0/2", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("2/0", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0/3", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("3/0", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1/1", "0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1/2", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); - gtHash.put("2/1", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); - gtHash.put("1/3", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); - gtHash.put("3/1", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); - gtHash.put("2/2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001"); - gtHash.put("2/3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); - gtHash.put("3/2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); - gtHash.put("3/3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000"); - - gtHash.put(".|.", "1 1 1 1 1 1 1 1 1 1"); - gtHash.put("0|0", "1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0|1", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1|0", "0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0|2", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("2|0", "0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("0|3", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("3|0", "0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1|1", "0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001 0.001"); - gtHash.put("1|2", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); - gtHash.put("2|1", "0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001 0.001"); - gtHash.put("1|3", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); - gtHash.put("3|1", "0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001 0.001"); - gtHash.put("2|2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001 0.001"); - gtHash.put("2|3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); - gtHash.put("3|2", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000 0.001"); - gtHash.put("3|3", "0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 1.000"); - } - - private double pow(int value) { - return pow[Math.min(value, pow.length - 1)]; - } - - private String getField(String fields, int index) - { - int prevPos = 0; - int pos = fields.indexOf(':'); - - while (index > 0 && pos >= 0) { - prevPos = pos + 1; - pos = fields.indexOf(':', pos + 1); - --index; - } - if (index > 0) {// field not found - //System.err.println(fields + "\t" + index); - //Error.error(518); - return "0"; // support for dropped trailing fields - } - - int end = (pos < 0) ? fields.length() : pos; - return fields.substring(prevPos, end); - } - - private String fieldPL2Posterior(String field) - { - int separators[] = new int[10]; - int pos = field.indexOf(','); - - int numSeparators = 0; - while (numSeparators < 10 && pos >= 0) { - separators[numSeparators++] = pos; - pos = field.indexOf(',', pos + 1); - } - if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { - if (numSeparators == 2) { - return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA - + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC - + pow(Integer.parseInt(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC - } - if (numSeparators == 5) { - //Order is AA,AC,CC,AG,CG,GG - // 0 1 2 3 4 5 - return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA - + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " " //AC - + pow(Integer.parseInt(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG - + pow(Integer.parseInt(field.substring(separators[1]+1, separators[2]))) + " " //CC - + pow(Integer.parseInt(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG - + pow(Integer.parseInt(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG - } - if (numSeparators == 9) { - //Order is AA,AC,CC,AG,CG,GG,AT,CT,GT,TT - // 0 1 2 3 4 5 6 7 8 9 - return "" + pow(Integer.parseInt(field.substring(0 , separators[0]))) + " " //AA - + pow(Integer.parseInt(field.substring(separators[0]+1, separators[1]))) + " " //AC - + pow(Integer.parseInt(field.substring(separators[2]+1, separators[3]))) + " " //AG - + pow(Integer.parseInt(field.substring(separators[5]+1, separators[6]))) + " " //AT - + pow(Integer.parseInt(field.substring(separators[1]+1, separators[2]))) + " " //CC - + pow(Integer.parseInt(field.substring(separators[3]+1, separators[4]))) + " " //CG - + pow(Integer.parseInt(field.substring(separators[6]+1, separators[7]))) + " " //CT - + pow(Integer.parseInt(field.substring(separators[4]+1, separators[5]))) + " " //GG - + pow(Integer.parseInt(field.substring(separators[7]+1, separators[8]))) + " " //GT - + pow(Integer.parseInt(field.substring(separators[8]+1, field.length()))); //TT - } - } - return "1 1 1 1 1 1 1 1 1 1"; // unknown variant - //Error.error(?); - } - - private String fieldGL2Posterior(String field) - { - int separators[] = new int[10]; - int pos = field.indexOf(','); - - int numSeparators = 0; - while (numSeparators < 10 && pos >= 0) { - separators[numSeparators++] = pos; - pos = field.indexOf(',', pos + 1); - } - if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { - if (numSeparators == 2) { - return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC - + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC - } - if (numSeparators == 5) { - return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC - + Misc.exp10(Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG - + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC - + Misc.exp10(Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG - + Misc.exp10(Double.parseDouble(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG - } - if (numSeparators == 9) { - return "" + Misc.exp10(Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + Misc.exp10(Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC - + Misc.exp10(Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " " //AG - + Misc.exp10(Double.parseDouble(field.substring(separators[5]+1, separators[6]))) + " " //AT - + Misc.exp10(Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC - + Misc.exp10(Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " " //CG - + Misc.exp10(Double.parseDouble(field.substring(separators[6]+1, separators[7]))) + " " //CT - + Misc.exp10(Double.parseDouble(field.substring(separators[4]+1, separators[5]))) + " " //GG - + Misc.exp10(Double.parseDouble(field.substring(separators[7]+1, separators[8]))) + " " //GT - + Misc.exp10(Double.parseDouble(field.substring(separators[8]+1, field.length()))); //TT - } - } - return "1 1 1 1 1 1 1 1 1 1"; // unknown variant - //Error.error(?); - } - - private String fieldGP2Posterior(String field) - { - int separators[] = new int[10]; - int pos = field.indexOf(','); - - int numSeparators = 0; - while (numSeparators < 10 && pos >= 0) { - separators[numSeparators++] = pos; - pos = field.indexOf(',', pos + 1); - } - if (numSeparators == 2 || numSeparators == 5 || numSeparators == 9) { - if (numSeparators == 2) { - return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " 0 0 " //AC - + (Double.parseDouble(field.substring(separators[1]+1, field.length()))) + " 0 0 0 0 0"; //CC - } - if (numSeparators == 5) { - return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC - + (Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " 0 " //AG - + (Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC - + (Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " 0 " //CG - + (Double.parseDouble(field.substring(separators[4]+1, field.length())))+ " 0 0"; //GG - } - if (numSeparators == 9) { - return "" + (Double.parseDouble(field.substring(0 , separators[0]))) + " " //AA - + (Double.parseDouble(field.substring(separators[0]+1, separators[1]))) + " " //AC - + (Double.parseDouble(field.substring(separators[2]+1, separators[3]))) + " " //AG - + (Double.parseDouble(field.substring(separators[5]+1, separators[6]))) + " " //AT - + (Double.parseDouble(field.substring(separators[1]+1, separators[2]))) + " " //CC - + (Double.parseDouble(field.substring(separators[3]+1, separators[4]))) + " " //CG - + (Double.parseDouble(field.substring(separators[6]+1, separators[7]))) + " " //CT - + (Double.parseDouble(field.substring(separators[4]+1, separators[5]))) + " " //GG - + (Double.parseDouble(field.substring(separators[7]+1, separators[8]))) + " " //GT - + (Double.parseDouble(field.substring(separators[8]+1, field.length()))); //TT - } - } - return "1 1 1 1 1 1 1 1 1 1"; // unknown variant - //Error.error(?); - } - - - private String fieldGT2Posterior(String field) { - if (gtHash.containsKey(field)) - return gtHash.get(field); - return "1 1 1 1 1 1 1 1 1 1"; // unknown variant - //Error.error(?); - } - - public String[] parseNext(String line) { - if (firstLine) { - if (line.length() < 2 || line.substring(0, 2).equals("##")) // comment in vcf - return null; - - if (line.charAt(0) != '#') //individual names, first not starting with ## - Error.error(517); - - String postNames[] = line.split("\t"); - HashMap nameHash = new HashMap(); - for (int i = 9; i < postNames.length; ++i) { - if (nameHash.containsKey(postNames[i])) // same individual twice in posteriors... - Error.error(515); - else - nameHash.put(postNames[i], i); - } - if (names == null) { - names = new String[postNames.length - 7]; - names[0] = postNames[0]; - names[1] = postNames[1]; - for (int i = 2; i < names.length; ++i) - names[i] = postNames[i + 7]; - numIndividuals = names.length - 2; - } - mapping = new int[names.length]; - for (int i = 2; i < names.length; ++i) { - if (!nameHash.containsKey(names[i])) { - System.err.println("Warning: Individual " + names[i] + " not contained in the data, set to all missing"); //posteriors not found - mapping[i] = -1; - } else - mapping[i] = nameHash.get(names[i]); - } - firstLine = false; - } else { - String postData[] = line.split("\t"); - - - int fieldType = 0; - String fields[] = postData[8].split(":"); //find PL field - int index = 0; - for (String f : fields) { - if (f.equals("PL")) - break; - ++index; - } - if (index == fields.length) {// PL field not found, try finding GL - ++fieldType; // fieldType = 1 - index = 0; - for (String f : fields) { - if (f.equals("GL")) - break; - ++index; - } - if (index == fields.length) {// GL field not found, try finding GP - ++fieldType; // fieldType = 2 - index = 0; - for (String f : fields) { - if (f.equals("GP")) - break; - ++index; - } - if (index == fields.length) { //finally try to find a GT field - ++fieldType; // fieldType = 3 - index = 0; - for (String f : fields) { - if (f.equals("GT")) - break; - ++index; - } - if (index == fields.length) // not even GT not found - Error.error(519); - } - } - } - - boolean warning = false; - String ret[] = new String[names.length]; - ret[0] = postData[0]; - ret[1] = postData[1]; - for (int i = 2; i < names.length; ++i) - if (mapping[i] >= 0) { - String field = getField(postData[mapping[i]], index); - try { - switch (fieldType) { - case 0: ret[i] = fieldPL2Posterior(field); break; - case 1: ret[i] = fieldGL2Posterior(field); break; - case 2: ret[i] = fieldGP2Posterior(field); break; - case 3: ret[i] = fieldGT2Posterior(field); break; - } - } catch (NumberFormatException e) { // types of .,.,. or 20,.,. - warning = true; - ret[i] = "1 1 1 1 1 1 1 1 1 1"; - } - } else - ret[i] = "1 1 1 1 1 1 1 1 1 1"; // set missing - if (warning) { - System.err.println("Warning: variant " + ret[0] + " " + ret[1] + " has strange value(s), set to missing"); - } - return ret; - } - return null; - } - } - - private class PosteriorParser implements FileParser{ - private boolean firstLine = true; - private int mapping[] = null; - - public String[] parseNext(String line) { - if (firstLine) { - String postNames[] = line.split("\t"); - HashMap nameHash = new HashMap(); - for (int i = 2; i < postNames.length; ++i) { - if (nameHash.containsKey(postNames[i])) // same individual twice in posteriors... - Error.error(515); - else - nameHash.put(postNames[i], i); - } - if (names == null) { - names = postNames; - numIndividuals = names.length - 2; - } - - mapping = new int[names.length]; - mapping[0] = 0; - mapping[1] = 1; - for (int i = 2; i < names.length; ++i) { - if (!nameHash.containsKey(names[i])) { //posteriors not found - System.err.println("Warning: Individual " + names[i] + " not contained in the data, set to all missing"); - mapping[i] = -1; - } else - mapping[i] = nameHash.get(names[i]); - } - firstLine = false; - } else { - String postData[] = line.split("\t"); - String ret[] = new String[names.length]; - for (int i = 0; i < names.length; ++i) - if (mapping[i] >= 0) - ret[i] = postData[mapping[i]]; - else - ret[i] = "1 1 1 1 1 1 1 1 1 1"; // set missing - return ret; - } - return null; - } - - } - - public boolean loadFile(String filename, String vcfFile, String posteriorFile) { - fp = null; - fn2 = posteriorFile; - if (posteriorFile != null || vcfFile != null) { - if (posteriorFile != null && vcfFile != null) - Error.error(514); - if (posteriorFile != null) - fp = new PosteriorParser(); - if (vcfFile != null) { - fp = new VCFParser(); - fn2 = vcfFile; - } - } - try { - if (filename != null) { - if (filename.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(filename)); - } - } catch (Exception e) { - e.printStackTrace(); - Error.error(504); - } - return true; - } - - public ArrayList getNextLine(boolean printPedigree){ - return getNextLine(printPedigree, false, false); - } - - public ArrayList getNextLine(boolean printPedigree, boolean skip){ - return getNextLine(printPedigree, skip, false); - } - - public ArrayList getNextLine(boolean printPedigree, boolean skip, boolean genotypesOnly) { - try { - String line = ""; - - String split[] = null; - - boolean firstLine = true; - - //allow data without pedigree... - if (genotypesOnly && lineNumber < 6) { - lineNumber = 6; - if (fn2.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(fn2)); - } - -out: while (true) { - do { - line = br.readLine(); - - if (line != null) { - if (lineNumber < 6 || fp == null) { - int index = line.indexOf('#'); - if (index >= 0) - line = line.substring(0, index); - if (lineNumber < 6 || !skip) - split = line.split("\t"); - } else { - split = fp.parseNext(line); - if (split == null) - line = ""; - } - - } - } while (line != null && line.length() == 0); - - if (line == null) { - if (fp != null && lineNumber == 6 && firstLine) { - firstLine = false; - if (fn2.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(fn2)); - continue out; - } - break; - } - ++lineNumber; - - if (lineNumber < 7 && printPedigree) - System.out.println(line); - - int end = line.indexOf('\t', line.indexOf('\t') + 1); - markerName = line.substring(0, end); - - switch (lineNumber) { - case 1: - for (int i = 2; i < split.length; ++i) { - String fid = split[i]; - if (!familyHash.containsKey(fid)) { - familyHash.put(fid, families.size()); - families.add(new ArrayList()); - familyNames.add(fid); - } - int index = familyHash.get(fid); - families.get(index).add(i - 2); - } - numIndividuals = split.length - 2; - break; - case 2: - names = split; - break; - case 3: - fathers = split; - break; - case 4: - mothers = split; - break; - case 5: - for (int i = 2; i < split.length; ++i) - sex.add(Integer.parseInt(split[i])); - break; - case 6: - //parsePedigree(names, fathers, mothers); - getParentsAndGrandParents(names, fathers, mothers); - System.err.println("Number of individuals = " + numIndividuals); - System.err.println("Number of families = " + families.size()); - break; - } - if ((lineNumber < 7 || !skip) && split.length - 2 != numIndividuals && (lineNumber < 7 || split.length - 2 != 10 * numIndividuals)) { - //System.err.println(columnIndex + "vs" + numMarkers); - Error.error(503); - } - if (lineNumber >= 7) { - if (skip) - return null; - ArrayList doubleLine = new ArrayList(); - for (int i = 2; i < split.length; ++i) { - int start = 0; - for (int j = 0; j < 10; ++j) { - int stop = split[i].indexOf(" ", start); - if (stop < 0) - doubleLine.add(Double.parseDouble(split[i].substring(start))); - else { - doubleLine.add(Double.parseDouble(split[i].substring(start, stop))); - start = stop + 1; - } - - } - } - return doubleLine; - } - } - br.close(); - } catch (Exception e) { - e.printStackTrace(); - Error.error(504); - } - return null; - } - -} diff --git a/software/LepMap3/lm3/src/Error.java b/software/LepMap3/lm3/src/Error.java deleted file mode 100644 index df1e862..0000000 --- a/software/LepMap3/lm3/src/Error.java +++ /dev/null @@ -1,469 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -//Error message handling -public class Error { - public static void error(int code) - { - error(code, ""); - } - - public static void error(int code, String extrainfo) - { - // options: - String os = " "; - System.err.println("Error " + code); - switch (code) { - case 3002: - System.err.println("Error: could not load mapping file!"); - case 3001: - System.err.println("usage: samtools mpileup -q 10 -Q10 -s $(cat sorted_bams)|java Pileup2Likelihoods [options] >post.txt"); - System.err.println("options:"); - System.err.println(os + "pileup=file load pileup from a file [-]"); - System.err.println(os + "mapping=file load individual names (same order as bams) from a file [mapping.txt]"); - System.err.println(os + "minCoverage=NUM minimum coverage per individual [3]"); - System.err.println(os + "numLowerCoverage=NUM number (or proportion) individuals allowed with lower than minCoverage [0.3]"); - System.err.println(os + "minAlleleFreq=NUM minimum number (or proportion) of an allele [0.1]"); - System.err.println(os + "minQuality=NUM minimum quality value [0.001]"); - System.err.println(os + "minCoverageSum=NUM minimum total (summed) coverage"); - System.err.println(os + "ploidy=NUM ploidy [2]"); - System.err.println(os + "callIndels=1 call indels as well [not set]"); - break; - case 2001: - System.err.println("usage: java IBD data=file [options]"); - System.err.println("options:"); - System.err.println(os + "data=file Loads input data in Lep-MAP3 format with pedigree"); - System.err.println(os + "posteriotFile=file Loads input data in Lep-MAP3 posterior format"); - System.err.println(os + "vcfFile=file Loads input data from a vcf"); - System.err.println(os + "MAFLimit=NUM [0.05]"); - System.err.println(os + "genotypeLimit=NUM [0.1]"); - System.err.println(os + "missingLimit=NUM"); - System.err.println(os + "missingLimit=NUM NUM2"); - System.err.println(os + "numThreads=NUM [4]"); - System.err.println(os + "parents=p1 [p2 ...]"); - System.err.println(os + "parents=file:parents.txt"); - System.err.println(os + "allParentChildPairs=1"); - break; - case 1101: - System.err.println("usage: java ScaffoldHMM2 scaffold+LG1.txt scaffold+LG2.txt"); - System.err.println("options:"); - System.err.println(os + "two input files give the two input maps with reference mapping information."); - System.err.println(os + "Columns 1-3 in these files should contain scaffold_name(1), scaffold_pos(2), and LG_name(3)"); - break; - case 1001: - System.err.println("usage: java Filtering2 [options] data=file >file1_filtered.post"); - System.err.println("options:"); - System.err.println(os + "data=file Loads input data in Lep-MAP3 posterior format"); - System.err.println(os + "dataTolerance=NUM P-value limit for segregation distortion [0.001]"); - System.err.println(os + "removeNonInformative=1 Remove (after filtering) non-informative markers"); - System.err.println(os + "convert2Bialleleic=1 Convert data to biallelic"); - System.err.println(os + "outputHWE=1 Output segregation distortion for the markers"); - System.err.println(os + "MAFLimit=NUM NUM>=1: Filter out markers with minimum allele frequency < NUM in each family [0]"); - System.err.println(os + " NUM<1: Filter out markers with minimum allele rate < NUM in each family [0]"); - System.err.println(os + "missingLimit=NUM NUM>=1: Filter out markers with > NUM missing individuals in each family [inf]"); - System.err.println(os + " NUM<1: Filter out markers with missing rate > NUM in each family"); - System.err.println(os + "familyInformativeLimit=NUM Filter out markers with < NUM informative families [0]"); - System.err.println(os + "noSexFiltering=1 Do not filter sex markers, useful for distorted sex ratios [0]"); - System.err.println(os + "heterozygoteRate=NUM Set heterozygote rate [0.5]"); - System.err.println(os + " Useful for selfing data (S2=0.25, S3=0.125, ...)"); - - break; - case 1002: - System.err.println("Error: Cannot find the parent"); - break; - case 1003: - System.err.println("Error: Wrong number of columns in the input file"); - break; - case 1004: - System.err.println("Error: Unable to load input file or errors in the file"); - break; - case 1005: - System.err.println("Error: Internal error"); - break; - case 1006: - System.err.println("Error: Unknown sex code"); - break; - case 1007: - System.err.println("Error: Pedigree"); - break; - case 1008: - System.err.println("Error: Pedigree"); - break; - case 1009: - System.err.println("Error: Multiple parents"); - break; - case 1010: - System.err.println("Error: Only one lodLimit allowed"); - break; - case 1011: - System.err.println("Error: Unable to load map file"); - break; - case 1012: - System.err.println("Error: Only one lg paramater allowed"); - break; - case 1013: - System.err.println("Error: map file has different number of lines than there are markers"); - break; - case 1014: - System.err.println("Error: this lod3Mode (and theta combination) is not supported"); - break; - case 901: - System.err.println("usage: java OutputData [options] data=file map=map_file >posterior_clean.txt 2>prints.txt"); - System.err.println("options:"); - System.err.println(os + "map=map_file LG map file. Typically generated by SeparateIdenticals or JoinSingles2."); - System.err.println(os + "sizeLimit=NUM Output data only with LGs with >= NUM markers [1]"); - System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); - break; - case 1201: - System.err.println("usage: java LMPlot map.txt"); - System.err.println("options:"); - System.err.println(os + "map.txt Output from OrderMarkers2 with outputPhasedData=1 flag"); - System.err.println(os + "selfingPhase=1 calculate pattern distances by ignoring individuals heterozygote in the two markers"); - System.err.println(os + "outputAllDistances=1 output all distances..."); - - //System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - //System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); - //System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); - break; - case 1301: - System.err.println("usage: java QTL map.txt traits.txt [options]"); - System.err.println("options:"); - System.err.println(os + "map.txt Output from OrderMarkers2 with outputPhasedData=1 (or 2) flag"); - System.err.println(os + "traits.txt Traits, loaded as a single line, columns same order as offspring in OrderMarkers2"); - System.err.println(os + "scale=NUM round the traits to integers after dividing with scale [0.1]"); - - //System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - //System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); - //System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); - break; - - - case 801: - System.err.println("usage: java ShortPath [options] prints.txt"); - System.err.println("options:"); - System.err.println(os + "prints.txt Output (err-stream) from SeparateIdenticals, JoinSingles or OutputData"); - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "sizeLimit=NUM Use only markers that occur NUM times"); - System.err.println(os + "limit1=NUM Maximum differences in the segregation prints to join markers [1]"); - System.err.println(os + "limit2=NUM Minimum number of segregative individuals to join markers [1]"); - System.err.println(os + "begin=NUM find paths starting from marker NUM"); - System.err.println(os + "end=NUM find paths ending to marker NUM"); - break; - case 601: - System.err.println("usage: java JoinIdenticalLGs [options] map=map_file data=file >map.txt 2>prints.txt"); - System.err.println("Note: Joins identically segregating LGs together"); - System.err.println("options:"); - System.err.println(os + "map=map_file LG map file. Typically generated by SeparateIdenticals or JoinSingles2."); - System.err.println(os + "data=file Loads input genotypes in Lep-MAP posterior format"); - System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "theta=NUM Fixed recombination fraction [0.0]"); - System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); - System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data)"); - System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); - - System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); - System.err.println(os + "sizeLimit=NUM Joing only LGs with >= NUM markers [1]"); - break; - case 701: - System.err.println("usage: java JoinSingles2[All|Identicals] [options] map=map_file data=file >map.txt 2>prints.txt"); - System.err.println("options:"); - System.err.println(os + "map=map_file Initial LG map file. Typically generated by SeparateChromosomes2, SeparateIdenticals or JoinSingles2*."); - System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); - System.err.println(os + "lodDifference=NUM Required LOD difference [0.0]"); - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "theta=NUM Fixed recombination fraction [0.0 (Identicals)] [0.03 (All)]"); - System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); - System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data and Join...Identicals)"); - System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); - System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); - System.err.println(os + "numThreads=NUM Use maximum of NUM threads (JoinSingles2All only) [1]"); - - System.err.println(os + "maxDistance=NUM Only calculate LOD scores between this many markers (JoinSingles2All only) [not set]"); - - System.err.println(os + "distortionLod=1 Use segregation distortion aware LOD scores (JoinSingles2All only) [not set]"); - System.err.println(os + "iterate=1 Iterate single joining until no markers can be added (JoinSingles2All only) [not set]"); - System.err.println(os + " (iterating is much faster than running JoinSingles2All multiple times)"); - System.err.println(os + "mask=map_file2 Filter out markers not (in group) 1 in the map_file2"); - break; - case 702: - System.err.println("Error: BetweenSameType=1 only works with a single family and three lodLimits"); - break; - case 703: - System.err.println("Error: Only one lodLimit accepted"); - break; - case 501: - System.err.println("usage: java ParentCall2 [options] data=file"); - System.err.println("options:"); - System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); - System.err.println(os + " Column 1: contig, Column 2: pos"); - System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); - System.err.println(os + " columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); - - //System.err.println(os + "callLimit=NUM Required log-odds difference to call a genotype [2.0]"); - System.err.println(os + "familyLimit=NUM Required log-odds difference to call a SNP [2.0]"); - System.err.println(os + "ZLimit=NUM Required log-odds difference to call a SNP with Z inheritance [inf]"); - System.err.println(os + "XLimit=NUM Required log-odds difference to call a SNP with X inheritance [inf]"); - - System.err.println(os + "removeNonInformative=1 Remove markers that are not informative"); - System.err.println(os + "ignoreParentOrder=1 Do not care about the order of parental genotypes [not set]"); - System.err.println(os + "outputParentPosterior=1 Outputs the genotype likelihoods (posteriors) for the parents as well[not set]"); - System.err.println(os + "halfSibs=1 Look for identical parent names for half-sib parental genotype inference[not set]"); - System.err.println(os + "vcfFile=file Read genotype likelihoods (posteriors) from a vcf file"); - System.err.println(os + "posteriorFile=file Read genotype likelihoods (posteriors) from a text file"); - System.err.println(os + "outputRaw=1 Do not call parents, just output the raw data likelihoods (posteriors)"); - break; - case 502: - System.err.println("Error: Cannot find the parent(s) (family " + extrainfo + ")"); - break; - case 503: - System.err.println("Error: Wrong number of columns in the input file"); - break; - case 504: - System.err.println("Error: Unable to load input file or errors in the file"); - break; - case 505: - System.err.println("Error: Internal error"); - break; - case 506: - System.err.println("Error: Unknown sex code (family:id " + extrainfo + ")"); - break; - case 507: - System.err.println("Error: Pedigree"); - break; - case 508: - System.err.println("Error: Pedigree"); - break; - case 509: - System.err.println("Error: Multiple parents (family:id " + extrainfo + ")"); - break; - case 511: - System.err.println("Error: Sex of the parent does not match the pedigree (family:id " + extrainfo + ")"); - break; - case 512: - System.err.println("Error: Too many parents (family:id " + extrainfo + ")"); - break; - case 513: - System.err.println("Error: Grandparents do not match the pedigree or are not present (family:id " + extrainfo + ")"); - break; - case 514: - System.err.println("Error: Only one of vcfFile or posteriorFile parameters can be provided"); - break; - case 515: - System.err.println("Error: Same individual is twice in the data"); - break; - case 517: - System.err.println("Error: Individual names not found from the vcf file"); - break; - case 518: - System.err.println("Error: vcf file does not contain such field"); - break; - case 519: - System.err.println("Error: vcf file does not contain any of PL/GL/GT fields"); - break; - case 520: - System.err.println("Error: No parent(s) in a family " + extrainfo); - break; - case 1401: - System.err.println("usage: java SeparateChromosomes2 [options] data=file >map.txt"); - System.err.println("options:"); - System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); - System.err.println(os + " Column 1: contig, Column 2: pos"); - System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); - System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); - System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "families=F1 [F2 ...] Use only some families [not set]"); - - System.err.println(os + "theta=NUM Fixed recombination fraction [0.03]"); - System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [theta]"); - System.err.println(os + "sizeLimit=NUM Remove LGs with < NUM markers [1]"); - System.err.println(os + "numThreads=NUM Use maximum of NUM threads [1]"); - System.err.println(os + "subsample=NUM Use only a random NUM fraction of markers [1] (speedup is 1/NUM^2)"); - System.err.println(os + "samplePairs=NUM Use only a random NUM fraction of marker pairs [1] (speedup is 1/NUM)"); - - System.err.println(os + "phasedData=1 Data is phased [not set]"); - System.err.println(os + "grandparentPhase=1 Pphase data based on grandparents [not set]"); - - System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); - System.err.println(os + " 1: haplotypes match (4 alleles, max LOD = log(4^n)"); - System.err.println(os + " 2: homozygotes match (3 alleles, max LOD = log(3^n))"); - System.err.println(os + " 3: homozygotes or heterozygotes match (2 alleles, max LOD = log(2^n))"); - - System.err.println(os + "distortionLod=1 Use segregation distortion aware LOD scores [not set]"); - - System.err.println(os + "map=file refine linkage group lg of map file"); - System.err.println(os + "lg=NUM refine linkage group lg [1 if map is provided]"); - System.err.println(os + "renameLGs=0 do not rename linkage groups after refine"); - - System.err.println(os + "minLod=NUM minimum LOD value for each family (used for multi-family maps without parents) [not set]"); - break; - case 1402: - case 1403: - System.err.println("Error: Unable to load input file"); - break; - case 401: - System.err.println("usage: java SeparateIdenticals [options] data=file >map.txt 2>prints.txt"); - System.err.println("options:"); - System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); - System.err.println(os + " Column 1: contig, Column 2: pos"); - System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); - System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); - System.err.println(os + "lodLimit=NUM LOD score limit [10.0]"); - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "theta=NUM Fixed recombination fraction [0.0]"); - System.err.println(os + "(fe)maleTheta=NUM Fixed recombination fraction separately for both sex [0.0]"); - System.err.println(os + "sizeLimit=NUM Remove LGs with < NUM markers [1]"); - System.err.println(os + "numThreads=NUM Use maximum of NUM threads (most speedup if equals numParts) [1]"); - System.err.println(os + "numParts=NUM Divide markers to NUM parts [1]"); - System.err.println(os + "removeSingles=0 Do not remove single markers (slower but does not miss markers)"); - System.err.println(os + "keepRate=NUM Keep joined markers with this prob (1.0 = all pair-wise comparisons are done) [1.0]"); - System.err.println(os + "betweenSameType=1 Only compute LOD scores between identically informative markers (applicable to single family data)"); - System.err.println(os + " Also one has to specify 3 LOD limits (paternal, maternal and both) in this case"); - - System.err.println(os + "lod3Mode=NUM Controls how LOD scores are computed between double informative markers [1]"); - System.err.println(os + " 1: haplotypes match (4 alleles, max LOD = log(4^n)"); - System.err.println(os + " 2: homozygotes match (3 alleles, max LOD = log(3^n))"); - System.err.println(os + " 3: homozygotes or heterozygotes match (2 alleles, max LOD = log(2^n))"); - break; - case 402: - case 403: - System.err.println("Error: Unable to load input file"); - break; - case 301: -// pp.warning(new String[]{}); - - System.err.println("usage: java OrderMarkers2 [options] data=file.posterior"); - System.err.println(os + "data=file Loads genotype posteriors from a file (- for standard input)"); - System.err.println(os + " Column 1: contig, Column 2: pos"); - System.err.println(os + " Columns 3,...,N+2: pedigree information for lines 1-6, for lines > 6"); - System.err.println(os + " Columns 3,...,10*N+2: 10 posteriors for each individual and each genotype combination (AA,AC,..., GT,TT)"); - - System.err.println(os + "map=chromosome_map_file LG map file. Typically generated by SeparateChromosomes2 or JoinSingles2."); - System.err.println(os + "evaluateOrder=order.txt Load initial marker order (single chromosome) from a file"); - - System.err.println(os + "informativeMask=STR Use only markers with informative father (1), mother(2), both parents(3) or neither parent(0) [0123]"); - System.err.println(os + "useMorgan=1 Use Morgan (linear) mapping function"); - System.err.println(os + "useKosambi=1 Use Kosambi mapping function"); - System.err.println(os + "improveOrder=0 Do not improve the order (used to only (re)evaluate an order)"); - System.err.println(os + "numThreads=NUM Use NUM threads [1]"); - System.err.println(os + "numMergeIterations=NUM Run NUM iterations [6]"); - System.err.println(os + "chromosome=NUM Order chromosome NUM only [all]"); - System.err.println(os + "families=F1 [F2 ...] Use only some families [not set]"); - - - System.err.println(os + "scale=NUM NUM2 Scale posteriors by NUM (p -> p^NUM) with a maximum of NUM2 (>=NUM) times map 'end effect' correction [M/N 2]"); - System.err.println(os + " , where N is number of markers and M number of individuals (e.g. 3M/N 3, 100/N 3)"); - System.err.println(os + "scale=NUM Scale posteriors \"NUM 2\""); - System.err.println(os + "scale=NUM NUM2 NUM3 same as \"NUM NUM2\" but cap maximum scale to NUM3"); - - System.err.println(os + "scaleMode=1 Use the old data scaling mode [2]"); - - System.err.println(os + "minError=NUM Set minimum posterior value [0.001]"); - System.err.println(os + "outputPhasedData=0 Do not output phased data"); - System.err.println(os + "outputPhasedData=1 Output phased data [1]"); - System.err.println(os + "outputPhasedData=2 Output phased data but mask uncertain haplotypes"); - System.err.println(os + "outputPhasedData=3 Output phased data + haplotype likelihoods"); - System.err.println(os + "outputPhasedData=4 Output phased data but mask uncertain haplotypes + haplotype likelihoods"); - System.err.println(os + "removeMarkers=m1 [ m2 m3 ...] Remove markers"); - System.err.println(os + "sexAveraged=1 Calculate sex-averaged map distances"); - System.err.println(os + "phasedData=1 Input data is phased"); - System.err.println(os + "grandparentPhase=1 Use grandparents to phase data, removes markers that cannot be phased"); - - System.err.println(os + "selfingPhase=1 Phase data so that homozygotes and heterozygotes are kept as in selfing crosses(experimental)"); - - System.err.println(os + "recombination1=NUM Recombination rate for male [0.001]"); - System.err.println(os + "recombination2=NUM Recombination rate for female [0.001]"); - System.err.println(os + "interference1=NUM Recombination interference for male [0.001]"); - System.err.println(os + "interference2=NUM Recombination interference for female [0.001]"); - - System.err.println(os + "identicalLimit=NUM Reduce the number of markers (conditional on the order)"); - System.err.println(os + " If the absolute probability difference between markers is < NUM they are collapsed [0.01]"); - System.err.println(os + "computeLODScores=file Evaluate pair-wise LOD scores and store to file"); - System.err.println(os + "calculateIntervals=file [NUM=1] Evaluate and store to a file the interval(s) for each marker where it could be located"); - System.err.println(os + " within NUM likelihood treshold. Useful for matching physical and linkage postions of markers"); - - System.err.println(os + "randomPhase=1 Start the phasing algorithm from a random phase configuration"); - System.err.println(os + " Useful if the phasing does not converge properly with evaluateOrder"); - System.err.println(os + "hyperPhaser=1 Use 'hyper' (instead of super) phasing algorithm."); - System.err.println(os + " Useful if the phasing does not converge properly"); - System.err.println(os + "phasingIterations=NUM Run NUM phasing iterations [1]."); - System.err.println(os + " Useful if the phasing does not converge properly"); - - System.err.println(os + "usePhysical=1 NUM Use physical positions in the marker ordering, [not set, NUM=0.01]"); - System.err.println(os + " penalise adjacent markers in different contigs by NUM"); - - System.err.println(os + "maskIgnoreParentOrder=1 Mask markers where the order of parental genotypes is not clear"); - System.err.println(os + " (ignoreParentOrder=1 in ParentCall2)"); - - System.err.println(os + "refineParentOrder=1 Refine the unclear order of parental genotypes"); - System.err.println(os + " (requires evaluateOrder, ignoreParentOrder=1 in ParentCall2)"); - - break; - case 4406: - System.err.println("Error: a chromosome map file must be provided (map=file)"); - break; - case 302: - System.err.println("Error: unable to load chromosome map file"); - break; - case 303: - System.err.println("Error: either evaluateOrder or map parameter must be provided"); - break; - case 304: - System.err.println("Error: unable to parse scale parameter"); - break; - case 305: - System.err.println("Error: do not use maskIgnoreParentOrder=1 with refineParentOrder=1 or grandParentPhase=1"); - break; - case 101: - System.err.println("Error: Multiple IDs in the input file"); - break; - case 102: - System.err.println("Error: Sex of the parent(s) is not specified"); - break; - case 103: - System.err.println("Error: Unable to load input file"); - break; - case 298: - case 299: - System.err.println("Error: Trying to add multiple genotype data for a individual"); - break; - default: - System.err.println("Error " + code); - } - System.exit(-1); - } - public static void warning(int code) - { - switch (code) { - case 3003: - System.err.println("Warning: different length of pileup quality and alignment columns (add \"-q 1\" to samtools mpileup)!"); - System.err.println("cutting to min length, strings below:"); - break; -// case 101: -// System.err.println("Warning 1"); -// break; -// case 102: -// System.err.println("Warning 2"); -// break; - default: - System.err.println("Warning " + code); - } - } -} diff --git a/software/LepMap3/lm3/src/Family2.java b/software/LepMap3/lm3/src/Family2.java deleted file mode 100644 index e91a3c4..0000000 --- a/software/LepMap3/lm3/src/Family2.java +++ /dev/null @@ -1,1144 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -import java.util.ArrayList; -import java.util.Arrays; - -public class Family2 { - - private String name; - - private int numChildren; - private int numMarkers; - - private int numInfFather = 0; - private int numInfMother = 0; - private int numThreeAlleles = 0; - private int numFourAlleles = 0; - - //use these instead of every 64 in LOD calculation - private final double MAX_VALUE = 1e200; - private final double MIN_VALUE = -1e200; - - private boolean phasedData = false; - - - // how double informative markers are treated (typically 2 alleles ==> haplotypes not known for heterozygotes) - private int lod3Mode = 1; // 1 normal, 2 identical, 3 identical or complementary - - // how double informative markers are treated (typically 2 alleles ==> haplotypes not known for heterozygotes) - private boolean distortionLodMode = false; // segregation distortion aware LOD score - - private ArrayList haplotypeProb = new ArrayList(); - - private ArrayList motherInf = new ArrayList(); - private ArrayList fatherInf = new ArrayList(); - //private ArrayList numAlleles = new ArrayList(); - - private double[][] freqs = null; - - - //double genotypeProbabilities[][]; - - public String getChildID(int c) - { - return "" + c; - } - - public float[] getProb(int marker) - { - return haplotypeProb.get(marker); - } - - - public int getNumChildren() - { - return numChildren; - } - - public String getName() - { - return name; - } - - public void setLod3Mode(int mode) - { - lod3Mode = mode; - } - public void setPhasedData(boolean value) - { - phasedData = value; - } - - - public void setDistortionLodMode() - { - distortionLodMode = true; - - System.err.print("Calculating allele frequencies..."); - //calculate haplotype frequencies... - freqs = new double[numMarkers][4]; - double post[][] = new double[numChildren][4]; - for (int i = 0; i < numMarkers; ++i) - if (isFatherInformative(i) || isMotherInformative(i)) { - float hp[] = haplotypeProb.get(i); - for (int j = 0; j < numChildren; ++j) { - post[j][0] = hp[4 * j + 0]; - post[j][1] = hp[4 * j + 1]; - post[j][2] = hp[4 * j + 2]; - post[j][3] = hp[4 * j + 3]; - } - - freqs[i] = Filtering2.getFrequencies(post); - //System.err.println(freqs[i][0] + " " + freqs[i][1] + " " + freqs[i][2] + " " + freqs[i][3]); - } - System.err.println("done"); - - } - - - public int getNumMarkers() - { - return numMarkers; - } - - public boolean isMotherInformative(int marker) { - return (motherInf.get(marker) == 1); - } - public boolean isFatherInformative(int marker) { - return (fatherInf.get(marker) == 1); - } - - public void maskInformative(String informativeMask) - { - for (int m = 0; m < numMarkers; ++m) { - int info = (isFatherInformative(m)?1:0) + (isMotherInformative(m)?2:0); - if (informativeMask.indexOf("" + info) < 0) - removeMarker(m); - } - } - - private int firstAllele(int genotype) - { - if (genotype < 0) - Error.error(-995); - if (genotype < 4) - return 0; - if (genotype < 7) - return 1; - if (genotype < 9) - return 2; - if (genotype == 9) - return 3; - Error.error(-995); - return -1; - } - - private int secondAllele(int genotype) - { - if (genotype < 0) - Error.error(-995); - if (genotype < 4) - return genotype; - if (genotype < 7) - return genotype - 3; - if (genotype < 9) - return genotype - 5; - if (genotype == 9) - return 3; - Error.error(-995); - return -1; - } - - private int mapAlleles(int a1, int a2) - { - if (a1 > a2) - return mapAlleles(a2, a1); // a1 <= a2 - if (a2 > 3) - Error.error(-995); - if (a1 == 0) - return a2; - if (a1 == 1) - return 3 + a2; - if (a1 == 2) - return 5 + a2; - if (a1 == 3) - return 9; - Error.error(-995); - return -1; - } - - - private boolean isInformative(int genotype) - { - return !(genotype == 0 || genotype == 4 || genotype == 7 || genotype == 9); - } - - public Family2(String name) - { - this.name = name; - } - public void updateNumChildren(int newNumChildren) - { - if (numChildren == 0) - numChildren = newNumChildren; - if (numChildren != newNumChildren) - Error.error(4404); - } - - public void addPedigree(ArrayList familyIndex, ArrayList names, ArrayList sex, ArrayList traits) - { - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 2); - int motherIndex = familyIndex.get(numInd - 1); - - if (sex.get(motherIndex) == 1) { - int tmp = fatherIndex; - fatherIndex = motherIndex; - motherIndex = tmp; - } - assert((sex.get(motherIndex) == 2) && (sex.get(fatherIndex) == 1)); - for (int i : familyIndex) { - if (i != fatherIndex && i != motherIndex) { - } - } - } - public void addMarker() // add a dummy marker - { - ++numMarkers; - fatherInf.add(0); - motherInf.add(0); - //numAlleles.add(2); - haplotypeProb.add(null); // to save memory... - } - - //calculate the probability of allele a from genotype posteriors - private double pAllele(int a, ArrayList prob, int index) - { - if (index < 0) - return 1.0; - double ret = 0; - index *= 10; - for (int a1 = 0; a1 < 4; ++a1) - for (int a2 = a1; a2 < 4; ++a2) - if (a1 == a || a2 == a) - ret += prob.get(index + mapAlleles(a1, a2)); - return ret; - } - - public void addMarker(ArrayList alleleProb, ArrayList familyIndex, ArrayList sex, String informativeMask, boolean grandparentPhase, int parentIndex[]) - { - - int numInd = familyIndex.size(); - - updateNumChildren(numInd - 2); - - int fatherIndex = familyIndex.get(numInd - 2); - int motherIndex = familyIndex.get(numInd - 1); - - if (sex.get(motherIndex) == 1) { - int tmp = fatherIndex; - fatherIndex = motherIndex; - motherIndex = tmp; - } - //System.err.println(); - - assert((sex.get(motherIndex) == 2) && (sex.get(fatherIndex) == 1)); - - int fatherA = 0; - int motherA = 0; - double sumMother = 0; - double sumFather = 0; - for (int i = 0; i < 10; ++i) { - if (alleleProb.get(10 * fatherIndex + fatherA) < alleleProb.get(10 * fatherIndex + i)) - fatherA = i; - if (alleleProb.get(10 * motherIndex + motherA) < alleleProb.get(10 * motherIndex + i)) - motherA = i; - sumFather += alleleProb.get(10 * motherIndex + i); - sumMother += alleleProb.get(10 * motherIndex + i); - } - final double FAMILY_LIMIT = 0.1; // how certain parental genotypes must be... - - int info = (sumFather <= 1 + FAMILY_LIMIT && isInformative(fatherA)?1:0) + (sumMother <= 1 + FAMILY_LIMIT && isInformative(motherA)?2:0); - - if (informativeMask.indexOf("" + info) < 0) { // to save memory... - addMarker(); - return; - } - - int fa1 = firstAllele(fatherA); - int fa2 = secondAllele(fatherA); - int ma1 = firstAllele(motherA); - int ma2 = secondAllele(motherA); - - if (grandparentPhase && info > 0) { //phasing logic with grandparents - int p1 = parentIndex[0]; //parent1 - int p2 = parentIndex[1]; //parent2 - int gp11 = parentIndex[2]; //grandparent1 of parent1 - int gp12 = parentIndex[3]; //grandparent2 of parent1 - int gp21 = parentIndex[4]; //grandparent1 of parent2 - int gp22 = parentIndex[5]; //grandparent2 of parent2 - - final double PHASE_LIMIT = 0.01; // how certain phase must be... - - assert(p1 == fatherIndex && p2 == motherIndex); - - if (info == 1 || info == 3) { //father informative - double at1 = pAllele(fa1, alleleProb, gp11) * pAllele(fa2, alleleProb, gp12); - double ta1 = pAllele(fa2, alleleProb, gp11) * pAllele(fa1, alleleProb, gp12); - if (at1 < ta1 * PHASE_LIMIT) { // second, first - int tmp = fa1; - fa1 = fa2; - fa2 = tmp; - } else if (ta1 < at1 * PHASE_LIMIT) { // first, second - //default way will do - } else { - addMarker(); // remove marker - return; - } - } - if (info == 2 || info == 3) { // mother informative - double at2 = pAllele(ma1, alleleProb, gp21) * pAllele(ma2, alleleProb, gp22); - double ta2 = pAllele(ma2, alleleProb, gp21) * pAllele(ma1, alleleProb, gp22); - - if (at2 < ta2 * PHASE_LIMIT) { // second, first - int tmp = ma1; - ma1 = ma2; - ma2 = tmp; - } else if (ta2 < at2 * PHASE_LIMIT) { // first, second - //default way will do - } else { - addMarker(); // remove marker - return; - } - - } - } - - fatherInf.add((isInformative(fatherA)) ? 1:0); - motherInf.add((isInformative(motherA)) ? 1:0); - - int c[] = {-1, -1, -1, -1}; - - int alleles = 2; - - if (isInformative(fatherA)) { - ++numInfFather; - if (isInformative(motherA)) { - ++numInfMother; - if (fatherA == motherA) // two alleles - ; - else if (ma1 == fa1 || ma1 == fa2 || ma2 == fa1 || ma2 == fa2) {// three alleles - ++numThreeAlleles; - alleles = 3; - } - else {// four alleles - ++numFourAlleles; - alleles = 4; - } - - } - } else if (isInformative(motherA)) - ++numInfMother; - - //numAlleles.add(alleles); - - c[0] = mapAlleles(fa1, ma1); - c[1] = mapAlleles(fa1, ma2); - c[2] = mapAlleles(fa2, ma1); - c[3] = mapAlleles(fa2, ma2); - - - int numTable = 4 * (numInd - 2); - float f[] = new float[numTable]; - - - for (int i = 0; i < numTable; i+=4) - for (int j = 0; j < 4; ++j) - f[i + j] = new Float(alleleProb.get(10 * familyIndex.get(i / 4) + c[j])); - //if (c[j] >= 0) - // f[i + j] = new Float(alleleProb.get(10 * familyIndex.get(i / 4) + c[j])); - //else - // f[i + j] = 1.0f; - normalize(f); - - - haplotypeProb.add(f); - /* - for (int i = 0; i < numTable; i+=4) { - for (int j = 0; j < 4; ++j) - System.err.print(f[i + j] + " "); - System.err.print("\t"); - } - System.err.println(); - */ - ++numMarkers; - - } - - public void printStatistics() - { - System.err.println("Family " + name + ":"); - - System.err.println("Number of paternally informative markers = " + numInfFather); - System.err.println("Number of maternally informative markers = " + numInfMother); - - System.err.println("Number of double informative markers with three alleles = " + numThreeAlleles); - System.err.println("Number of double informative markers with four alleles = " + numFourAlleles); - } - - public void callGenotypes(int marker, double limit) - { - float f[] = getProb(marker); - int tableSize = 4 * numChildren; - - if ((lod3Mode==2 || lod3Mode==3) && isFatherInformative(marker) && isMotherInformative(marker)) { - //TODO : check lod3Mode==3 - - for (int ci = 0; ci < tableSize; ci+=4) { - double g0 = f[ci + 0]; - double g1 = f[ci + 1] + f[ci + 2]; - double g2 = f[ci + 3]; - if (g0 > 1 - limit) { - f[ci + 0] = 1; - f[ci + 1] = 0; - f[ci + 2] = 0; - f[ci + 3] = 0; - } else if (g1 > 1 - limit) { - f[ci + 0] = 0; - f[ci + 1] /= g1; - f[ci + 2] /= g1; - f[ci + 3] = 0; - } else if (g2 > 1 - limit) { - f[ci + 0] = 0; - f[ci + 1] = 0; - f[ci + 2] = 0; - f[ci + 3] = 1; - } - } - return; - } - - for (int ci = 0; ci < tableSize; ci+=4) { - double pat0 = f[ci] + f[ci + 1]; - if (pat0 <= limit) { - f[ci + 0] = 0; - f[ci + 1] = 0; - f[ci + 2] /= (1 - pat0); - f[ci + 3] /= (1 - pat0); - } - else if (pat0 >= 1 - limit) { - f[ci + 0] /= pat0; - f[ci + 1] /= pat0; - f[ci + 2] = 0; - f[ci + 3] = 0; - } - double mat0 = f[ci] + f[ci + 2]; - - if (mat0 <= limit) { - f[ci + 0] = 0; - f[ci + 2] = 0; - f[ci + 1] /= (1 - mat0); - f[ci + 3] /= (1 - mat0); - } - else if (mat0 >= 1 - limit) { - f[ci + 0] /= mat0; - f[ci + 2] /= mat0; - f[ci + 1] = 0; - f[ci + 3] = 0; - } - } - } - - public void normalize(int m1) - { - normalize(haplotypeProb.get(m1)); - } - - private void normalize(float prob[]) - { - for (int i = 0; i < prob.length; i+=4) { - double sum = prob[i] + prob[i + 1] + prob[i + 2] + prob[i + 3] + 1e-20; - for (int j = 0; j < 4; ++j) - prob[i + j] = (float) ((prob[i + j] + 0.25e-20) / sum); - } - } - - private final int mapping[][] = {{0,1,2,3}, {2,3,0,1}, {1,0,3,2}, {3,2,1,0}}; - - public void scale(double value) { - if (value != 1.0) - for (float h[] : haplotypeProb) { - if (h != null) - for (int i = 0; i < h.length; ++i) - h[i] = (float) Math.pow(h[i], value); - } - } - - private void swap(int i, int j, float t[]) - { - float tmp = t[i]; - t[i] = t[j]; - t[j] = tmp; - } - - public void randomPhase() { - for (float h[] : haplotypeProb) { - if (h != null) { - if (Math.random() < 0.5) - for (int i = 0; i < h.length; i+=4) { - swap(i + 0, i + 2, h); - swap(i + 1, i + 3, h); - } - if (Math.random() < 0.5) - for (int i = 0; i < h.length; i+=4) { - swap(i + 0, i + 1, h); - swap(i + 2, i + 3, h); - } - } - } - } - - - public void minError(float value) { - if (value != 0.0) - for (float h[] : haplotypeProb) { - if (h != null) - for (int i = 0; i < h.length; ++i) - h[i] = (h[i] < value) ? value : h[i]; - } - } - - double computeLOD(double theta1, double theta2, int m1, int m2) - { - if (isMotherInformative(m1) && isMotherInformative(m2)) { - if (isFatherInformative(m1) && isFatherInformative(m2)) { - //TODO: LOD3,LOD3' - if (lod3Mode == 1) { - // return computeLOD(theta1, theta2, m1, m2, 0); - double lod1 = computeLOD(theta1, theta2, m1, m2, 0); - if (phasedData) - return lod1; - double lod2 = computeLOD(theta1, theta2, m1, m2, 1); - double lod3 = computeLOD(theta1, theta2, m1, m2, 2); - double lod4 = computeLOD(theta1, theta2, m1, m2, 3); - return Math.max(Math.max(Math.max(lod1, lod2), lod3), lod4); - } else if (lod3Mode == 2 && theta1 == theta2) { - double lod1 = computeLOD2(theta1, m1, m2, 0); - if (phasedData) - return lod1; - double lod2 = computeLOD2(theta1, m1, m2, 1); - return Math.max(lod1, lod2); - } else if (lod3Mode == 3 && theta1 == theta2) { - double lod1 = computeLOD3(theta1, m1, m2, 0); - if (phasedData) - return lod1; - double lod2 = computeLOD3(theta1, m1, m2, 1); - return Math.max(lod1, lod2); - } else - Error.error(1014); - } else { - double lod1 = computeLOD_2(theta2, m1, m2, 0); - if (phasedData) - return lod1; - double lod2 = computeLOD_2(theta2, m1, m2, 2); - return Math.max(lod1, lod2); - } - } else if (isFatherInformative(m1) && isFatherInformative(m2)) { - double lod1 = computeLOD_1(theta1, m1, m2, 0); - if (phasedData) - return lod1; - double lod2 = computeLOD_1(theta1, m1, m2, 1); - return Math.max(lod1, lod2); - } - return 0.0; - } - - private void computeLNoLinkage12(int m1) - { - //freqs[]; - } - private void computeLNoLinkage3(int phaseMapping[]) - { - - } - private void computeLNoLinkage4(int phaseMapping[]) - { - - } - - //TODO: consider lod3Mode - public double maxLodScore(double theta1, double theta2, int m1) - { - float f1[] = getProb(m1); - if (f1 == null) - return 0.0; - - int tableSize = 4 * numChildren; - - double lNoLinkage1 = 2.0; - double lNoLinkage2 = 2.0; - double lNoLinkage3 = 3.0; - double lNoLinkage4 = 2.0; - if (distortionLodMode) { // TODO: figure out how to implement here... - lNoLinkage1 = 2.0; - lNoLinkage2 = 2.0; - lNoLinkage3 = 3.0; - lNoLinkage4 = 2.0; - } - double logRet = 0.0; - double ret = 1.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = f1[ci + 0] + f1[ci + 1]; - double pat = Math.max(sum1, (1 - sum1)); - - sum1 = f1[ci + 0] + f1[ci + 2]; - double mat = Math.max(sum1, (1 - sum1)); - - ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); - ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - if (lod3Mode == 2 && theta1 == theta2 && isMotherInformative(m1) && isFatherInformative(m1)) { - double ret2 = 1.0; - - double logRet2 = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = 2 * f1[ci + 0]; - double sum2 = f1[ci + 1] + f1[ci + 2]; // TODO:Check - double sum3 = 2 * f1[ci + 3]; - double sum = sum1 + sum2 + sum3; - - double max = Math.max(Math.max(sum1, sum2), sum3) / sum; - - ret2 *= lNoLinkage3 * (theta1 * (1 - max) + (1 - theta1) * max); - - if ((ci + 4 >= tableSize) || ret2 > MAX_VALUE || ret2 < MIN_VALUE ) { - logRet2 += Math.log10(ret2); - ret2 = 1.0; - } - - } - return Math.max(logRet, logRet2); - } - if (lod3Mode == 3 && theta1 == theta2 && isMotherInformative(m1) && isFatherInformative(m1)) { - double ret2 = 1.0; - double logRet2 = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = f1[ci + 0] + f1[ci + 3]; - double max = Math.max(sum1, 1 - sum1); - ret2 *= lNoLinkage4 * (theta1 * (1 - max) + (1 - theta1) * max); - if ((ci + 4 >= tableSize) || ret2 > MAX_VALUE || ret2 < MIN_VALUE) { - logRet2 += Math.log10(ret2); - ret2 = 1.0; - } - } - return Math.max(logRet, logRet2); - } - return logRet; - } - - //TODO: faster by evaluating maximum LOD score obtained - private double computeLOD(double theta1, double theta2, int m1, int m2, int phase) - { - float f1[] = getProb(m1); - float f2[] = getProb(m2); - - int tableSize = 4 * numChildren; - int map[] = mapping[phase]; - - double ret = 1.0; - double logRet = 0.0; - - double lNoLinkage1 = 2.0; - double lNoLinkage2 = 2.0; - if (distortionLodMode) { // distortion aware lod score - double p = freqs[m1][0]+freqs[m1][1]; - double q = freqs[m2][map[0]]+freqs[m2][map[1]]; - lNoLinkage1 = p * q + (1 - p) * (1 - q); - if (lNoLinkage1 <= 0.5) - lNoLinkage1 = 2.0; - else - lNoLinkage1 = 1.0 / lNoLinkage1; - - p = freqs[m1][0] + freqs[m1][2]; - q = freqs[m2][map[0]] + freqs[m2][map[2]]; - lNoLinkage2 = p * q + (1 - p) * (1 - q); - if (lNoLinkage2 <= 0.5) - lNoLinkage2 = 2.0; - else - lNoLinkage2 = 1.0 / lNoLinkage2; - } - - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = f1[ci + 0] + f1[ci + 1]; - double sum2 = f2[ci + map[0]] + f2[ci + map[1]]; - double pat = sum1 * sum2 + (1 - sum1) * (1 - sum2); - - sum1 = f1[ci + 0] + f1[ci + 2]; - sum2 = f2[ci + map[0]] + f2[ci + map[2]]; - double mat = sum1 * sum2 + (1 - sum1) * (1 - sum2); - - ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); - ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) - return logRet; - } - private double computeLOD_1(double theta1, int m1, int m2, int phase) - { - float f1[] = getProb(m1); - float f2[] = getProb(m2); - - int tableSize = 4 * numChildren; - int map[] = mapping[phase]; - - double lNoLinkage1 = 2.0; - if (distortionLodMode) { // distortion aware lod score - double p = freqs[m1][0]+freqs[m1][1]; - double q = freqs[m2][map[0]]+freqs[m2][map[1]]; - lNoLinkage1 = p * q + (1 - p) * (1 - q); - if (lNoLinkage1 <= 0.5) - lNoLinkage1 = 2.0; - else - lNoLinkage1 = 1.0 / lNoLinkage1; - } - - double ret = 1.0; - double logRet = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = f1[ci + 0] + f1[ci + 1]; - double sum2 = f2[ci + map[0]] + f2[ci + map[1]]; - double pat = sum1 * sum2 + (1 - sum1) * (1 - sum2); - - ret *= lNoLinkage1 * (theta1 * (1 - pat) + (1 - theta1) * pat); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) - return logRet; - } - - private double computeLOD_2(double theta2, int m1, int m2, int phase) - { - float f1[] = getProb(m1); - float f2[] = getProb(m2); - - int tableSize = 4 * numChildren; - int map[] = mapping[phase]; - - double lNoLinkage2 = 2.0; - if (distortionLodMode) { // distortion aware lod score - double p = freqs[m1][0]+freqs[m1][2]; - double q = freqs[m2][map[0]]+freqs[m2][map[2]]; - lNoLinkage2 = p * q + (1 - p) * (1 - q); - if (lNoLinkage2 <= 0.5) - lNoLinkage2 = 2.0; - else - lNoLinkage2 = 1.0 / lNoLinkage2; - } - - double ret = 1.0; - double logRet = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum1 = f1[ci + 0] + f1[ci + 2]; - double sum2 = f2[ci + map[0]] + f2[ci + map[2]]; - double mat = sum1 * sum2 + (1 - sum1) * (1 - sum2); - - ret *= lNoLinkage2 * (theta2 * (1 - mat) + (1 - theta2) * mat); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) - return logRet; - } - - // LOD score for double informative markers, - // mode 2 - - private final int mapping3[][] = {{0,3}, {3,0}}; - - //+log(3) bit for identical genotype - private double computeLOD2(double theta, int m1, int m2, int phase) - { - float f1[] = getProb(m1); - float f2[] = getProb(m2); - - int tableSize = 4 * numChildren; - int map[] = mapping3[phase]; - - double lNoLinkage3 = 3.0; - if (distortionLodMode) { - double p1 = 2.0 * freqs[m1][0]; - double p2 = 2.0 * freqs[m1][3]; - double p3 = freqs[m1][1] + freqs[m1][2]; - double sump = p1 + p2 + p3; - - double q1 = 2.0 * freqs[m1][map[0]]; - double q2 = 2.0 * freqs[m1][map[1]]; - double q3 = freqs[m1][1] + freqs[m1][2]; - double sumq = q1 + q2 + q3; - - lNoLinkage3 = (p1 * q1 + p2 * q2 + p3 * q3) / (sump * sumq); - if (lNoLinkage3 <= Constants.ONETHIRD) - lNoLinkage3 = 3.0; - else - lNoLinkage3 = 1.0 / lNoLinkage3; - } - - - double ret = 1.0; - double logRet = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum11 = 2 * f1[ci + 0]; - double sum21 = 2 * f2[ci + map[0]]; - - double sum12 = 2 * f1[ci + 3]; - double sum22 = 2 * f2[ci + map[1]]; - - double sum13 = f1[ci + 1] + f1[ci + 2]; - double sum23 = f2[ci + 1] + f2[ci + 2]; - - double sum1 = sum11 + sum12 + sum13; - double sum2 = sum21 + sum22 + sum23; - - double s = 1.0 / (sum1 * sum2); - - double t0 = (sum11 * sum21) * s; - double t1 = (sum12 * sum22) * s; - double t2 = (sum13 * sum23) * s; - - double t = t0 + t1 + t2; - - ret *= lNoLinkage3 * (theta * (1 - t) + (1 - theta) * t); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) - return logRet; - } - - // LOD score for double informative markers, - // mode 3 - //+1 bit for homozygote-heterozygote... (phase=1) - //+1 bit for homozygote-homozygote... (phase=0) - private double computeLOD3(double theta, int m1, int m2, int phase) - { - float f1[] = getProb(m1); - float f2[] = getProb(m2); - - int tableSize = 4 * numChildren; - - double lNoLinkage4 = 2.0; - if (distortionLodMode) { - double p = freqs[m1][0]+freqs[m1][3]; - double q = (phase == 1) ? freqs[m2][1] + freqs[m2][2] : freqs[m2][0] + freqs[m2][3]; - lNoLinkage4 = p * q + (1 - p) * (1 - q); - if (lNoLinkage4 <= 0.5) - lNoLinkage4 = 2.0; - else - lNoLinkage4 = 1.0 / lNoLinkage4; - } - - double ret = 1.0; - double logRet = 0.0; - for (int ci = 0; ci < tableSize; ci+=4) - { - double sum11 = f1[ci + 0] + f1[ci + 3]; - double sum21 = (phase == 1) ? f2[ci + 1] + f2[ci + 2] : f2[ci + 0] + f2[ci + 3]; - double sum12 = 1 - sum11; - double sum22 = 1 - sum21; - - double t0 = sum11 * sum21; - double t1 = sum12 * sum22; - double t = t0 + t1; - ret *= lNoLinkage4 * (theta * (1 - t) + (1 - theta) * t); - if ((ci + 4 >= tableSize) || ret > MAX_VALUE || ret < MIN_VALUE ) { - logRet += Math.log10(ret); - ret = 1.0; - } - } - //TODO: support for larger and smaller LOD scores... (maybe by taking log at every K:th individual) - return logRet; - } - - //private final double MINPROB_COMBINE = 0.001; - - // from m2 to m1 - public void setProb(int m1, int m2) - { -/* float f1[] = haplotypeProb.get(m1); - float f2[] = haplotypeProb.get(m2); - int tableSize = 4 * numChildren; - for (int i = 0; i < tableSize; ++i) - f1[i] = f2[i];*/ - haplotypeProb.set(m1, haplotypeProb.get(m2)); - } - public void setProb(int m1, float f[]) - { -/* float f1[] = haplotypeProb.get(m1); - float f2[] = haplotypeProb.get(m2); - int tableSize = 4 * numChildren; - for (int i = 0; i < tableSize; ++i) - f1[i] = f2[i];*/ - haplotypeProb.set(m1, f); - } - - - - private final double NORMALIZE_SMALL = 0.25e-20; - public void combineAndNormalize(int m1, int m2, double theta1, double theta2) - { - if (theta1 != 0 && theta2 != 0) - return; - - int tableSize = 4 * numChildren; - float f1[] = getProb(m1); - if (f1 == null) { - f1 = new float[4 * numChildren]; - Arrays.fill(f1, 0.25f); - haplotypeProb.add(m1, f1); - } - - float f2[] = getProb(m2); - if (f2 == null) { - f2 = new float[4 * numChildren]; - Arrays.fill(f2, 0.25f); - haplotypeProb.add(m2, f2); - } - - - if (theta1 == theta2 && lod3Mode == 2 && isMotherInformative(m1) && isMotherInformative(m2) && isFatherInformative(m1) && isFatherInformative(m2)) { - double table[] = { - computeLOD2(theta1, m1, m2, 0), - computeLOD2(theta1, m1, m2, 1)}; - int max = table[0] > table[1] ? 0 : 1; - if (max == 0) - for (int i = 0; i < tableSize; i+=4) { - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) { - sum += f1[i + j] * f2[i + j]; - } - for (int j = 0; j < 4; ++j) - f1[i + j] = (float)((f1[i + j] * (double) f2[i + j] + NORMALIZE_SMALL) / sum); - } else { - for (int i = 0; i < tableSize; i+=4) { - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) - sum += f1[i + j] * f2[i + ((j == 0 || j == 3) ? 3 - j : j)]; - for (int j = 0; j < 4; ++j) - f1[i + j] = (float)((f1[i + j] * (double) f2[i + ((j == 0 || j == 3) ? 3 - j : j)] + NORMALIZE_SMALL) / sum); - } - } - return; - } - - if (theta1 == theta2 && lod3Mode == 3 && isMotherInformative(m1) && isMotherInformative(m2) && isFatherInformative(m1) && isFatherInformative(m2)) { - double table[] = { - computeLOD3(theta1, m1, m2, 0), - computeLOD3(theta1, m1, m2, 1)}; - - int max = table[0] >= table[1] ? 0 : 1; - - if (max == 0) - for (int i = 0; i < tableSize; i+=4) { - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) { - sum += f1[i + j] * f2[i + j]; - } - for (int j = 0; j < 4; ++j) - f1[i + j] = (float)((f1[i + j] * (double) f2[i + j] + NORMALIZE_SMALL) / sum); - } else { - for (int i = 0; i < tableSize; i+=4) { - double hom1 = f1[i + 0] + f1[i + 3]; - double hom2 = f2[i + 0] + f2[i + 3]; - - double sum = hom1 * (1 - hom2) + (1 - hom1) * hom2 + 4 * NORMALIZE_SMALL; - - f1[i + 0] = (float)((f1[i + 0] * (1 - hom2) + NORMALIZE_SMALL) / sum); - f1[i + 1] = (float)((f1[i + 1] * (hom2) + NORMALIZE_SMALL) / sum); - f1[i + 2] = (float)((f1[i + 2] * (hom2) + NORMALIZE_SMALL) / sum); - f1[i + 3] = (float)((f1[i + 3] * (1 - hom2) + NORMALIZE_SMALL) / sum); - } - - } - - return; - } - - - double table[] = { - computeLOD(theta1, theta2, m1, m2, 0), - computeLOD(theta1, theta2, m1, m2, 1), - computeLOD(theta1, theta2, m1, m2, 2), - computeLOD(theta1, theta2, m1, m2, 3)}; - - int maxi = 0; - for (int i = 1; i < 4; ++i) - if (table[i] > table[maxi]) - maxi = i; - - int map[] = mapping[maxi]; - - - - if (theta1 == 0 && theta2 == 0) - for (int i = 0; i < tableSize; i+=4) { - - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) - sum += f1[i + j] * (double) f2[i + map[j]]; - - for (int j = 0; j < 4; ++j) { - //if (p < MINPROB_COMBINE) - // p = MINPROB_COMBINE; - f1[i + j] = (float)((f1[i + j] * (double) f2[i + map[j]] + NORMALIZE_SMALL) / sum); - } - } - - else if (theta1 == 0) { - for (int i = 0; i < tableSize; i+=4) { - double p = f2[i + map[0]]; - p += f2[i + map[1]]; - double ret[] = new double[4]; - //if (p < MINPROB_COMBINE) - // p = MINPROB_COMBINE; - for (int j = 0; j < 4; ++j) - ret[j] = f1[i + j] * ((j < 2) ? p : 1 - p); - - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) - sum += ret[j]; - for (int j = 0; j < 4; ++j) - f1[i + j] = (float)((ret[j] + NORMALIZE_SMALL) / sum); - } - } - else if (theta2 == 0) { - for (int i = 0; i < tableSize; i+=4) { - double p = f2[i + map[0]]; - p += f2[i + map[2]]; - double ret[] = new double[4]; - //if (p < MINPROB_COMBINE) - // p = MINPROB_COMBINE; - for (int j = 0; j < 4; ++j) - ret[j] = f1[i + j] * ((j == 0 || j == 2) ? p : 1 - p); - - double sum = 4 * NORMALIZE_SMALL; - for (int j = 0; j < 4; ++j) - sum += ret[j]; - for (int j = 0; j < 4; ++j) - f1[i + j] = (float)((ret[j] + NORMALIZE_SMALL) / sum); - } - } - - //normalize(f1); - - } - - - public String pattern(int marker) - { - int tableSize = 4 * numChildren; - - final double LIMIT = 0.1; - - float f[] = getProb(marker); - - String s1 = ""; - String s2 = ""; - - if (f == null) - for (int i = 0; i < tableSize; i+=4) { - s1 = s1 + "?"; - s2 = s2 + "?"; - } - else if ((lod3Mode == 2 || lod3Mode == 3) && (isFatherInformative(marker) && isMotherInformative(marker))) { - for (int i = 0; i < tableSize; i+=4) { - double p0 = f[i + 0]; - double p1 = f[i + 1] + f[i + 2]; - double p2 = f[i + 3]; - if (p0 >= 1 - LIMIT) - s1 = s1 + "0"; - else if (p1 >= 1 - LIMIT) - s1 = s1 + "1"; - else if (p2 >= 1 - LIMIT) - s1 = s1 + "2"; - else - s1 = s1 + "?"; - } - s2 = s1; - - } else - for (int i = 0; i < tableSize; i+=4) { - double pat = f[i + 0] + f[i + 1]; - double mat = f[i + 0] + f[i + 2]; - if (pat >= 1 - LIMIT) - s1 = s1 + "0"; - else if (pat <= LIMIT) - s1 = s1 + "1"; - else - s1 = s1 + "?"; - - if (mat >= 1 - LIMIT) - s2 = s2 + "0"; - else if (mat <= LIMIT) - s2 = s2 + "1"; - else - s2 = s2 + "?"; - } - - return s1 + "\t" + s2; - } - - private void printPattern(int marker) - { - System.err.println(pattern(marker)); - } - - public void removeMarker(int marker) - { - motherInf.set(marker, motherInf.get(marker) + 2); - fatherInf.set(marker, fatherInf.get(marker) + 2); - haplotypeProb.set(marker, null); - - } - - - -} diff --git a/software/LepMap3/lm3/src/Filtering2.java b/software/LepMap3/lm3/src/Filtering2.java deleted file mode 100644 index e7cf0a4..0000000 --- a/software/LepMap3/lm3/src/Filtering2.java +++ /dev/null @@ -1,623 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP2. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge -*/ - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Scanner; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; - -import java.util.StringTokenizer; -// Posterior aware (subset of) Filtering -//TODO: removeIndividuals, removeGrandParents, parse pedigree better and detect errors -public class Filtering2 { - - private final double SMALL = 1e-20; // to avoid problems with zero probabilities - private int numIndividuals = 0; - - private boolean removeNonInformative = false; - - private ArrayList> families = new ArrayList>(); - private ArrayList familyNames = new ArrayList(); - private ArrayList sex = new ArrayList(); - - HashMap familyHash = new HashMap(); - HashMap familyHash2 = new HashMap(); - - private double dataTolerance = 0.0; - private double X2Limits[] = new double[4]; - - private double mafLimit = 0.0; - - private boolean outputHWE = false; - - private boolean noSexFiltering = false; - - private double missingLimit = 0.0; - private double missingTolerance = 0.0; - - //rivate double homozygoteLimit = 0.0; - //private double heterozygoteLimit = 0.0; - private double familyInformativeLimit = 0.0; - - private boolean convert2Biallelic = false; - - private final double LIKELIHOOD_TOLERANCE = 0.001; // used in EM and chiX2 tests - - private double initDistribution[] = new double[]{0.25,0.25,0.25,0.25}; - - - //private void setHeterozygoteLimit(double value) - //{ - // heterozygoteLimit = value; - //} - //private void setHomozygoteLimit(double value) - //{ - // homozygoteLimit = value; - //} - private void setNoSexFiltering(boolean value) - { - noSexFiltering = value; - } - - private void setFamilyInformativeLimit(double value) - { - familyInformativeLimit = value; - } - - - private double tailX2(double x, int df) - { - return GammaFunction.incompleteGammaQ(0.5 * df, 0.5 * x); - } - - - private double findLimit(int df, double tolerance) - { - if (tolerance <= 0.0) - return Double.MAX_VALUE; - //System.err.println(); - - double x = 0.0; - double adder = 2.0; - - while (adder >= 0.5 * LIKELIHOOD_TOLERANCE) { - while (tailX2(x, df) >= tolerance) - x += adder; - x -= adder; - adder *= 0.5; - //System.err.println(x); - } - return x; - } - - public void setDataTolerance(double value) - { - dataTolerance = value; - X2Limits[0] = Double.MAX_VALUE; - X2Limits[1] = findLimit(1, value); - X2Limits[2] = findLimit(2, value); - X2Limits[3] = findLimit(3, value); - System.err.println("chi^2 limits are " + X2Limits[1] + ", " + X2Limits[2] + ", " + X2Limits[3]); - - - } - - public void setRemoveNonInformative(boolean value) - { - removeNonInformative = value; - } - - public void setOutputHWE(boolean value){ - outputHWE = value; - } - public void setMAFLimit(double value){ - mafLimit = value; - } - public void setMissingLimit(double value){ - missingLimit = value; - } - public void setMissingTolerance(double value){ - missingTolerance = value; - } - - private void parsePedigree(String names[], String fathers[], String mothers[]) { - //TODO: Move the pedigree parsing logic to here - //TODO: Add pedigree checking here... - for (int i = 2; i < names.length; ++i) { - if (fathers[i].equals("0")) { //move parents to the end... - ArrayList findex = families.get(familyHash2.get(i - 2)); - if (!findex.remove(new Integer(i - 2))) - Error.error(1002); - findex.add(i - 2); - } - } - } - - //also prints... - public void filter(String filename) { - DataParser dp = new DataParser(); - dp.loadFile(filename, null, null); - - ArrayList dl = dp.getNextLine(true); - - families = dp.getFamilies(); - //parentIndex = dp.getParentIndex(); - sex = dp.getSex(); - numIndividuals = dp.getNumIndividuals(); - int fam = 0; - for (ArrayList f : families) { - for (int i : f) - familyHash2.put(i, fam); - ++fam; - } - int numMarkers = 0; - while (dl != null) { - ++numMarkers; - //System.err.println(dl); - filter(dp.getMarkerName(), dl); - dl = dp.getNextLine(true); - } - System.err.println("Number of markers = " + numMarkers); - //System.err.println("Number of individuals = " + numIndividuals); - //System.err.println("Number of families = " + families.size()); - } - - - private void printResult(String suffix, ArrayList posteriors) - { - StringBuilder sb = new StringBuilder(suffix); - //System.out.print(suffix); - - for (int i = 0; i < numIndividuals; ++i) { - //System.out.print("\t"); - sb.append('\t'); - double max = SMALL; - for (int j = 0; j < 10; ++j) - max = Math.max(max, posteriors.get(10 * i + j)); - - for (int j = 0; j < 10; ++j) { - if (max == SMALL) - //System.out.print(1); - sb.append('1'); - else { - double r = posteriors.get(10 * i + j) / max; - if (r == 0.0) - //System.out.print(0); // save some space - sb.append('0'); - else - //System.out.print(r); - sb.append(r); - } - if (j != 9) - //System.out.print(" "); - sb.append(' '); - } - } - System.out.println(sb); - } - - public void convertBiAllelic(ArrayList familyIndex, ArrayList posteriors) { - - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 1); - int motherIndex = familyIndex.get(numInd - 2); - if (sex.get(motherIndex) == 1|| sex.get(motherIndex) == 2) { - int tmp = motherIndex; - motherIndex = fatherIndex; - fatherIndex = tmp; - } - - int motherG = -1; - int fatherG = -1; - - for (int i = 0; i < 10; ++i) - if (posteriors.get(10 * fatherIndex + i) == 1) { - if (fatherG >= 0) - return; - fatherG = i; - } - - for (int i = 0; i < 10; ++i) - if (posteriors.get(10 * motherIndex + i) == 1) { - if (motherG >= 0) - return; - motherG = i; - } - - int fatherA1 = allele1(fatherG); - int fatherA2 = allele2(fatherG); - int motherA1 = allele1(motherG); - int motherA2 = allele2(motherG); - if (fatherA1 != fatherA2 && motherA1 != motherA2) { - if (fatherA1 != motherA1 || fatherA2 != motherA2) { // more than two alleles - for (int i = 0; i < 10; ++i) { - posteriors.set(10 * motherIndex + i, (i == 1) ? 1.0 : 0.0); // AC - posteriors.set(10 * fatherIndex + i, (i == 1) ? 1.0 : 0.0); // AC - } - for (int index : familyIndex) - if (index != fatherIndex && index != motherIndex) { - double p0 = posteriors.get(10 * index + mapAlleles(fatherA1, motherA1)); - double p1 = posteriors.get(10 * index + mapAlleles(fatherA1, motherA2)) + posteriors.get(10 * index + mapAlleles(fatherA2, motherA1)); - double p2 = posteriors.get(10 * index + mapAlleles(fatherA2, motherA2)); - for (int i = 0; i < 10; ++i) - posteriors.set(10 * index + i, 0.0); - double maxp = Math.max(Math.max(p0, p1), p2); - posteriors.set(10 * index, p0 / maxp); //AA - posteriors.set(10 * index + 1, p1 / maxp); //AC - posteriors.set(10 * index + 4, p2 / maxp); //CC - } - } - } - //TODO: other cases (do not make difference...) - } - - public void filter(String suffix, ArrayList posteriors) - { - int numFamilies = families.size(); - double maf[] = new double[4]; - - boolean skipDistortion = false; - if (noSexFiltering && suffix.indexOf('*') >= 0) - skipDistortion = true; - - //int family = 0; - if (outputHWE) - System.err.print(suffix); - - for (ArrayList familyIndex : families) { - if (convert2Biallelic) { - convertBiAllelic(familyIndex, posteriors); - } - boolean filterMarker = isSignificantlyDistorted(posteriors, familyIndex, maf); - if (skipDistortion) - filterMarker = false; - - double scale = 1.0; - if (mafLimit >= 1.0) - scale = familyIndex.size() - 2; - - for (int h = 0; h < 4; ++h) - if (scale * maf[h] < mafLimit) - filterMarker = true; - - scale = 1.0; - if (missingLimit < 1.0) - scale = 1.0 / (familyIndex.size() - 2); - if (numMissingGenotypes(posteriors, familyIndex) * scale > missingLimit) - filterMarker = true; - - - if (filterMarker) - { - for (int i : familyIndex) - for (int j = 0; j < 10; ++j) - posteriors.set(10 * i + j, 1.0); - } - //++family; - } - if (outputHWE) - System.err.println(); - - - boolean informative = false; - int informativeFamilies = 0; - - for (ArrayList familyIndex : families) { - int numInd = familyIndex.size(); - int parents[] = {familyIndex.get(numInd - 1), familyIndex.get(numInd - 2)}; - for (int i : parents) { - int maxj = 0; - double sum = 0.0; - for (int j = 0; j < 10; ++j) { - double p = posteriors.get(10 * i + j); - sum += p; - if (p >= 1.0 - SMALL) - maxj = j; - } - if (sum <= 1.0 + SMALL && ("0479".indexOf("" + maxj) < 0)) { - informative = true; - ++informativeFamilies; - } - } - } - if ((informative || !removeNonInformative) && informativeFamilies >= familyInformativeLimit) - printResult(suffix, posteriors); - - } -//Returns frequencies for haplotypes 00, 01, 10 and 11 -//Used to calculate distortion aware LOD scores... - public static double[] getFrequencies(double posteriors[][]) - { - Filtering2 f = new Filtering2(); - double ret[] = new double[4]; - f.em(posteriors, ret, Double.POSITIVE_INFINITY); - return ret; - } - - public double em(double posteriors[][]) - { - return em(posteriors, new double[4], Double.POSITIVE_INFINITY); - } - - //allow different distribution for selfing data... - public void setInitDistribution(double het) - { - if (het >= 1.0 || het <= 0.0) { - System.err.println("Error: Expected distribution must be < 1 and > 0"); - System.exit(-1); - } - initDistribution[0] = (1.0 - het) * 0.5; - initDistribution[1] = het * 0.5; - initDistribution[2] = het * 0.5; - initDistribution[3] = (1.0 - het) * 0.5; - } - - public double em(double posteriors[][], double finalP[], double XLimit) - { - double p[] = new double[4]; - for (int i = 0; i < 4;++i) - p[i] = initDistribution[i]; - - double t[] = new double[]{0, 0, 0, 0}; - double q[] = new double[]{0, 0, 0, 0}; - double initL = Double.NEGATIVE_INFINITY; - double finalL = Double.NEGATIVE_INFINITY; - - for (int iteration = 0; iteration < 100; ++iteration) { - Arrays.fill(q, 0.0); - double logL = 0.0; - double ll = 1.0; - for (double post[] : posteriors) { - for (int i = 0; i < 4; ++i) - t[i] = p[i] * post[i]; - double l = (t[0] + t[1] + t[2] + t[3]); - if (l < 1e-100) // set missing if very small - l = 1e-100; - double il = 1.0 / l; - for (int i = 0; i < 4; ++i) - q[i] += t[i] * il; - ll *= l; - if (ll < 1e-200) { // log when needed - logL += Math.log(ll); - ll = 1.0; - } - } - logL += Math.log(ll); - //System.err.println(logL); - - double sum = q[0] + q[1] + q[2] + q[3]; - double isum = 1.0 / sum; - for (int i = 0; i < 4; ++i) - p[i] = q[i] * isum; - //System.err.println("ll = " + ll); - if (iteration == 0) - initL = logL; - else { - double oldL = finalL; - finalL = logL; - if (finalL - oldL < LIKELIHOOD_TOLERANCE || 2 * (finalL - initL) >= XLimit) - break; - } - } - //System.err.println("p = " + p[0] + "," + p[1] + "," + p[2] + "," + p[3]); - for (int i = 0; i < 4; ++i) - finalP[i] = p[i]; - - return finalL - initL; // likelihood ratio... - } - - public int numMissingGenotypes(ArrayList posteriors, ArrayList familyIndex) - { - int ret = 0; - for (int i = 0; i < familyIndex.size() - 2; ++i) { - int index = 10 * familyIndex.get(i); - - double sum = 0.0; - for (int j = 0; j < 10; ++j) - sum += posteriors.get(index + j); - - if (sum >= 1.0 + missingTolerance || sum == 0) - ++ret; - } - return ret; - } - - public boolean isSignificantlyDistorted(ArrayList posteriors, ArrayList familyIndex, double maf[]) { - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 1); - int motherIndex = familyIndex.get(numInd - 2); - if (sex.get(motherIndex) == 1 || sex.get(fatherIndex) == 2) { - int tmp = motherIndex; - motherIndex = fatherIndex; - fatherIndex = tmp; - } - fatherIndex *= 10; - motherIndex *= 10; - - int motherG = -1; - int fatherG = -1; - - for (int i = 0; i < 10; ++i) - if (posteriors.get(fatherIndex + i) == 1) { - if (fatherG >= 0) { - //clear all - if (outputHWE) - System.err.print("\tX2 = " + 0 + "\tdf = " + 0); - return true; - } - fatherG = i; - } - - for (int i = 0; i < 10; ++i) - if (posteriors.get(motherIndex + i) == 1) { - if (motherG >= 0) { - //clear all - if (outputHWE) - System.err.print("\tX2 = " + 0 + "\tdf = " + 0); - return true; - } - motherG = i; - } - - int fatherA1 = allele1(fatherG); - int fatherA2 = allele2(fatherG); - int motherA1 = allele1(motherG); - int motherA2 = allele2(motherG); - - - int df = 0; - - if (fatherA1 != fatherA2) { - if (motherA1 != motherA2) { - df = 2; - if (fatherA1 != motherA1 || fatherA2 != motherA2) - df = 3; - } - else - df = 1; - } else if (motherA1 != motherA2) { - df = 1; - } - double post[][] = new double[familyIndex.size() - 2][4]; - - for (int i = 0; i < familyIndex.size() - 2; ++i) { - int index = 10 * familyIndex.get(i); - post[i][0] = posteriors.get(index + mapAlleles(fatherA1, motherA1)); - post[i][1] = posteriors.get(index + mapAlleles(fatherA1, motherA2)); - post[i][2] = posteriors.get(index + mapAlleles(fatherA2, motherA1)); - post[i][3] = posteriors.get(index + mapAlleles(fatherA2, motherA2)); - } - - double X2 = 2 * em(post, maf, X2Limits[df]); - if (outputHWE) { - X2 = 2 * em(post, maf, Double.POSITIVE_INFINITY); - System.err.print("\tX2 = " + X2 + "\tdf = " + df); - } - return (X2 >= X2Limits[df]); - } - - - private int mapAlleles(int a1, int a2) - { - if (a1 > a2) - return mapAlleles(a2, a1); // a1 <= a2 - if (a2 > 3) - Error.error(1005); - if (a1 == 0) - return a2; - if (a1 == 1) - return 3 + a2; - if (a1 == 2) - return 5 + a2; - if (a1 == 3) - return 9; - Error.error(1005); - return -1; - } - - private int allele1(int g) - { - if (g < 4) - return 0; - if (g < 7) - return 1; - if (g < 9) - return 2; - if (g == 9) - return 3; - Error.error(1005); - return -1; - } - - private int allele2(int g) - { - if (g < 4) - return g; - if (g < 7) - return g - 3; - if (g < 9) - return g - 5; - if (g == 9) - return 3; - Error.error(1005); - return -1; - } - - public void setConvert2Biallelic(boolean convert) { - convert2Biallelic = convert; - } - - //TODO: "informativeMask", "families", "removeMarkers" - //TODO: dataTolerance separately for each family - //TODO: Give X2 limits (separately for each family) - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(1001); - String extraParameters = ""; - System.out.print("#java Filtering2"); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(1001); - pp.warning(new String[]{"data", "dataTolerance", "removeNonInformative", "outputHWE", "MAFLimit", "missingLimit", "convert2Biallelic", "familyInformativeLimit", "noSexFiltering", "heterozygoteRate"}); // , "homozygoteLimit", "heterozygoteLimit" - - String filename = pp.getValueAsString("data", null); - if (filename == null) - Error.error(1001); - - Filtering2 filter = new Filtering2(); - //filter.set - - //double post[][] = new double[][]{{1, 1, 0, 1}, {1, 0, 1, 1}, {1, 1, 1, 0}, {0, 1, 1, 0}}; - //System.out.println(filter.em(post)); - //System.out.println(); - - double dataTolerance = Double.parseDouble(pp.getValueAsString("dataTolerance", "0.001")); - - filter.setDataTolerance(dataTolerance); - filter.setRemoveNonInformative(pp.getValueAsString("removeNonInformative", "0").equals("1")); - filter.setOutputHWE(pp.getValueAsString("outputHWE", "0").equals("1")); - filter.setMAFLimit(Double.parseDouble(pp.getValueAsString("MAFLimit", "0.0"))); - - //filter.setHeterozygoteLimit(Double.parseDouble(pp.getValueAsString("heterozygoteLimit", "0.0"))); - //filter.setHomozygoteLimit(Double.parseDouble(pp.getValueAsString("homozygoteLimit", "0.0"))); - filter.setFamilyInformativeLimit(Integer.parseInt(pp.getValueAsString("familyInformativeLimit", "0"))); - - filter.setMissingLimit(Double.parseDouble(pp.getValueAsString("missingLimit", 0, "" + Double.MAX_VALUE))); - filter.setMissingTolerance(Double.parseDouble(pp.getValueAsString("missingLimit", 1, "0.1"))); - filter.setConvert2Biallelic(pp.getValueAsString("convert2Biallelic", "0").equals("1")); - - boolean noSexFiltering = pp.getValueAsString("noSexFiltering", "0").equals("1"); - filter.setNoSexFiltering(noSexFiltering); - double het = Double.parseDouble(pp.getValueAsString("heterozygoteRate", "0.5")); - filter.setInitDistribution(het); - - filter.filter(filename); - } -} diff --git a/software/LepMap3/lm3/src/GammaFunction.java b/software/LepMap3/lm3/src/GammaFunction.java deleted file mode 100644 index 8e21420..0000000 --- a/software/LepMap3/lm3/src/GammaFunction.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * GammaFunction.java - * - * Copyright (C) 2002-2006 Alexei Drummond and Andrew Rambaut - * - * This file is part of BEAST. - * See the NOTICE file distributed with this work for additional - * information regarding copyright ownership and licensing. - * - * BEAST is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * BEAST is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with BEAST; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -//package dr.math; - - -/** - * gamma function - * - * @author Korbinian Strimmer - * @version $Id: GammaFunction.java,v 1.3 2005/05/24 20:26:01 rambaut Exp $ - */ -public class GammaFunction { - // - // Public stuff - // - - // Gamma function - - /** - * log Gamma function: ln(gamma(alpha)) for alpha>0, accurate to 10 decimal places - * - * @param alpha argument - * @return the log of the gamma function of the given alpha - */ - public static double lnGamma(double alpha) { - // Pike MC & Hill ID (1966) Algorithm 291: Logarithm of the gamma function. - // Communications of the Association for Computing Machinery, 9:684 - - double x = alpha, f = 0.0, z; - - if (x < 7) { - f = 1; - z = x - 1; - while (++z < 7) { - f *= z; - } - x = z; - f = -Math.log(f); - } - z = 1 / (x * x); - - return - f + (x - 0.5) * Math.log(x) - x + 0.918938533204673 + - (((-0.000595238095238 * z + 0.000793650793651) * - z - 0.002777777777778) * z + 0.083333333333333) / x; - } - - /** - * Incomplete Gamma function Q(a,x) - * (a cleanroom implementation of Numerical Recipes gammq(a,x); - * in Mathematica this function is called GammaRegularized) - * - * @param a parameter - * @param x argument - * @return function value - */ - public static double incompleteGammaQ(double a, double x) { - return 1.0 - incompleteGamma(x, a, lnGamma(a)); - } - - /** - * Incomplete Gamma function P(a,x) = 1-Q(a,x) - * (a cleanroom implementation of Numerical Recipes gammp(a,x); - * in Mathematica this function is 1-GammaRegularized) - * - * @param a parameter - * @param x argument - * @return function value - */ - public static double incompleteGammaP(double a, double x) { - return incompleteGamma(x, a, lnGamma(a)); - } - - /** - * Incomplete Gamma function P(a,x) = 1-Q(a,x) - * (a cleanroom implementation of Numerical Recipes gammp(a,x); - * in Mathematica this function is 1-GammaRegularized) - * - * @param a parameter - * @param x argument - * @param lnGammaA precomputed lnGamma(a) - * @return function value - */ - public static double incompleteGammaP(double a, double x, double lnGammaA) { - return incompleteGamma(x, a, lnGammaA); - } - - - /** - * Returns the incomplete gamma ratio I(x,alpha) where x is the upper - * limit of the integration and alpha is the shape parameter. - * - * @param x upper limit of integration - * @param alpha shape parameter - * @param ln_gamma_alpha the log gamma function for alpha - * @return the incomplete gamma ratio - */ - private static double incompleteGamma(double x, double alpha, double ln_gamma_alpha) { - // (1) series expansion if (alpha>x || x<=1) - // (2) continued fraction otherwise - // RATNEST FORTRAN by - // Bhattacharjee GP (1970) The incomplete gamma integral. Applied Statistics, - // 19: 285-287 (AS32) - - double accurate = 1e-8, overflow = 1e30; - double factor, gin, rn, a, b, an, dif, term; - double pn0, pn1, pn2, pn3, pn4, pn5; - - if (x == 0.0) { - return 0.0; - } - if (x < 0.0 || alpha <= 0.0) { - throw new IllegalArgumentException("Arguments out of bounds"); - } - - factor = Math.exp(alpha * Math.log(x) - x - ln_gamma_alpha); - - if (x > 1 && x >= alpha) { - // continued fraction - a = 1 - alpha; - b = a + x + 1; - term = 0; - pn0 = 1; - pn1 = x; - pn2 = x + 1; - pn3 = x * b; - gin = pn2 / pn3; - - do { - a++; - b += 2; - term++; - an = a * term; - pn4 = b * pn2 - an * pn0; - pn5 = b * pn3 - an * pn1; - - if (pn5 != 0) { - rn = pn4 / pn5; - dif = Math.abs(gin - rn); - if (dif <= accurate) { - if (dif <= accurate * rn) { - break; - } - } - - gin = rn; - } - pn0 = pn2; - pn1 = pn3; - pn2 = pn4; - pn3 = pn5; - if (Math.abs(pn4) >= overflow) { - pn0 /= overflow; - pn1 /= overflow; - pn2 /= overflow; - pn3 /= overflow; - } - } while (true); - gin = 1 - factor * gin; - } else { - // series expansion - gin = 1; - term = 1; - rn = alpha; - do { - rn++; - term *= x / rn; - gin += term; - } - while (term > accurate); - gin *= factor / alpha; - } - return gin; - } - -} - diff --git a/software/LepMap3/lm3/src/IBD.java b/software/LepMap3/lm3/src/IBD.java deleted file mode 100644 index f91e4ba..0000000 --- a/software/LepMap3/lm3/src/IBD.java +++ /dev/null @@ -1,720 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP3. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge -*/ - -import java.util.ArrayList; -import java.util.Arrays; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.ReentrantLock; -import java.util.HashMap; - -// Posterior aware (subset of) Filtering -public class IBD { -// private final ReentrantLock lock = new ReentrantLock(); - - private final double SMALL = 1e-20; // to avoid problems with zero probabilities - private int numIndividuals = 0; - - private double mafLimit=0.1; - - private double gLimit=0.1; - - ArrayList data = new ArrayList(); - ArrayList frequencies = new ArrayList(); - - private double missingLimit = Double.MAX_VALUE; - private double missingTolerance = 0.1; - - private final double LIKELIHOOD_TOLERANCE = 1e-12; // used in EM - private final double LIKELIHOOD_TOLERANCE2 = 1e-6; // used in IBD - - private int numThreads = 4; - - String names[] = null; - - double biAllelicLimit = 1; - - public void setBiAllelic(double value){ - biAllelicLimit = value; - } - - public void setMAFLimit(double value){ - mafLimit = value; - } - public void setGLimit(double value){ - gLimit = value; - } - public void setMissingLimit(double value){ - missingLimit = value; - } - public void setMissingTolerance(double value){ - missingTolerance = value; - } - - public void setNumThreads(int value){ - numThreads = value; - } - - //print also... - public void filter(DataParser dp) { - int lineNumber = 0; - while (true) { - ArrayList doubleLine = dp.getNextLine(false, false, true); - if (numIndividuals == 0) - numIndividuals = dp.getNumIndividuals(); - if (doubleLine == null) - break; - - if (lineNumber++ % 100000 == 99999) - System.err.println("processed " + lineNumber + " lines"); - - filter(dp.getMarkerName(), doubleLine); - } - System.err.println("Number of markers = " + lineNumber + " of which " + data.size() + " pass filtering"); - System.err.println("Number of individuals = " + numIndividuals); - - names = new String[numIndividuals + 2]; - for (int i = 0; i < numIndividuals; ++i) - names[i + 2] = dp.getIndividualName(i); - } - - public boolean filter(String prefix, ArrayList posteriors) - { - if (numMissingGenotypes(posteriors) > missingLimit) - return false; - - int numInd = posteriors.size() / 10; - float p[][] = new float[numInd][10]; - for (int i = 0; i < numInd; ++i) - for (int j = 0; j < 10; ++j) - p[i][j] = posteriors.get(10 * i + j).floatValue(); - double afreq[] = new double[4]; - double freq[] = new double[10]; - em(p, freq, afreq); - - double gfreq[] = new double[10]; - em_10(p, gfreq); - - int max = 0; - for (int j = 1; j < 4; ++j) - if (afreq[j] > afreq[max]) - max = j; - int max2 = max ^ 1; - for (int j = 0; j < 4; ++j) - if (j != max) - if (afreq[j] > afreq[max2]) - max2 = j; - - int maxG = 0; - for (int j = 1; j < 10; ++j) - if (gfreq[j] > gfreq[maxG]) - maxG = j; - - if (afreq[max] <= 1.0 - mafLimit && gfreq[maxG] <= 1.0 - gLimit && afreq[max] + afreq[max2] >= 1 - biAllelicLimit) { - //lock.lock(); - //try { - data.add(p); - frequencies.add(freq); - //} finally { - // lock.unlock(); - //} - //frequencies.add(freq); - //System.err.println(prefix + "\t" + freq[max] ); - return true; - } - return false; - } - - private class FilterThread implements Runnable{ - String markers[] = null; - ArrayList doubleLines[] = null; - int index1 = 0; - int index2 = 0; - - public FilterThread(int index1, int index2, ArrayList doubleLines[], String markers[]) { - this.index1 = index1; - this.index2 = index2; - this.markers = markers; - this.doubleLines = doubleLines; - } - public void run() { - for (int i = index1; i < index2; ++i) - filter(markers[i], doubleLines[i]); - } - } - - private String s(double v) - { - int vi = (int)(1000 * v + 0.5); - if (vi == 0) - return "0"; - if (vi == 1000) - return "1"; - - return "" + (vi / 1000.0); - } - - public double em_10(float posteriors[][], double finalP[]) - { - double p[] = new double[]{0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1}; - double finalL = Double.NEGATIVE_INFINITY; - - for (int iteration = 0; iteration < 100; ++iteration) { - double q[] = new double[10]; - double logL = 0.0; - double ll = 1.0; - for (float post[] : posteriors) { - double l = 0.0; - for (int j = 0; j < 10; ++j) - l += (p[j] * post[j]); - double il = 1.0 / l; - for (int j = 0; j < 10; ++j) - q[j] += (p[j] * post[j] * il); - ll *= l; - if (ll < 1e-200) { // log when needed - logL += Math.log(ll); - ll = 1.0; - } - - } - logL += Math.log(ll); - - double sum = 0.0; - for (int j = 0; j < 10; ++j) - sum += q[j]; - double iSum = 1.0 / sum; - for (int j = 0; j < 10; ++j) - p[j] = q[j] * iSum; - //System.err.println("ll = " + ll); - double oldL = finalL; - finalL = logL; - if (finalL - oldL < LIKELIHOOD_TOLERANCE && iteration >= 10) - break; - - } - //System.err.println("p = " + p[0] + "," + s(p[1]) + "," + s(p[2]) + "," + s(p[3]) + "," + s(p[4]) + "," + s(p[5]) + "," + s(p[6]) + "," + s(p[7]) + "," + s(p[8]) + "," + s(p[9])); - for (int i = 0; i < 10; ++i) - finalP[i] = p[i]; - - return finalL; - } - - public double em(float posteriors[][], double finalP[], double aFreq[]) - { - double p[] = new double[]{0.25, 0.25, 0.25, 0.25}; - double p2[] = new double[]{0.25, 0.25, 0.25, 0.25}; - double finalL = Double.NEGATIVE_INFINITY; - - for (int iteration = 0; iteration < 100; ++iteration) { - double q[] = new double[4]; - double logL = 0.0; - double ll = 1.0; - for (float post[] : posteriors) { - double l = 0.0; - for (int a = 0; a < 4; ++a) - for (int b = 0; b < 4; ++b) - l += (p[a] * p[b] * post[mapAlleles(a, b)]); - - double iL = 1.0 / l; - - for (int a = 0; a < 4; ++a) - p2[a] = p[a] * iL; - - for (int a = 0; a < 4; ++a) - for (int b = 0; b < 4; ++b) - q[a] += (p2[a] * p[b] * post[mapAlleles(a, b)]); - - ll *= l; - if (ll < 1e-200) { // log when needed - logL += Math.log(ll); - ll = 1.0; - } - } - logL += Math.log(ll); - - double sum = 0.0; - for (int j = 0; j < 4; ++j) - sum += q[j]; - for (int j = 0; j < 4; ++j) - p[j] = q[j] / sum; - //System.err.println("ll = " + ll); - double oldL = finalL; - finalL = logL; - if (finalL - oldL < LIKELIHOOD_TOLERANCE && iteration >= 10) - break; - - } - - //System.err.println("p = " + p[0] + "," + s(p[1]) + "," + s(p[2]) + "," + s(p[3])); - - Arrays.fill(finalP, 0.0); - for (int a = 0; a < 4; ++a) - for (int b = 0; b < 4; ++b) - finalP[mapAlleles(a, b)] += p[a] * p[b]; - - for (int a = 0; a < 4; ++a) - aFreq[a] = p[a]; - - return finalL; - } - - public int numMissingGenotypes(ArrayList posteriors) { - ArrayList familyIndex = new ArrayList(); - for (int i = 0; i <= numIndividuals; ++i) - familyIndex.add(i); - return numMissingGenotypes(posteriors, familyIndex); - } - - public int numMissingGenotypes(ArrayList posteriors, ArrayList familyIndex) - { - int ret = 0; - for (int i = 0; i < familyIndex.size() - 2; ++i) { - int index = 10 * familyIndex.get(i); - - double sum = 0.0; - for (int j = 0; j < 10; ++j) - sum += posteriors.get(index + j); - - if (sum >= 1.0 + missingTolerance) - ++ret; - } - return ret; - } - - - private int mapAlleles(int a1, int a2) - { - if (a1 > a2) - return mapAlleles(a2, a1); // a1 <= a2 - if (a2 > 3) - Error.error(1005); - if (a1 == 0) - return a2; - if (a1 == 1) - return 3 + a2; - if (a1 == 2) - return 5 + a2; - if (a1 == 3) - return 9; - Error.error(1005); - return -1; - } - - private int allele1(int g) - { - if (g < 4) - return 0; - if (g < 7) - return 1; - if (g < 9) - return 2; - if (g == 9) - return 3; - Error.error(1005); - return -1; - } - - private int allele2(int g) - { - if (g < 4) - return g; - if (g < 7) - return g - 3; - if (g < 9) - return g - 5; - if (g == 9) - return 3; - Error.error(1005); - return -1; - } - - private int ibs(int g1, int g2){ - if (g1 == g2) - return 2; - - int g1a1 = allele1(g1); - int g1a2 = allele2(g1); - int g2a1 = allele1(g2); - int g2a2 = allele2(g2); - - if (g1a1 == g2a1 || g1a1 == g2a2 || g1a2 == g2a1 || g1a2 == g2a2) - return 1; - - return 0; - } - - private final int PRINT_SIZE = 10000; - - - private class PairwiseThread implements Runnable{ - private AtomicInteger index = null; - StringBuilder sb = null; - - public PairwiseThread(AtomicInteger index) { - this.index = index; - } - private void printResult() { - synchronized(System.out) { - System.out.print(sb.toString()); - } - sb.setLength(0); - } - - public void run() { - sb = new StringBuilder(); - for (int ind1 = index.getAndIncrement(); ind1 < numIndividuals; ind1 = index.getAndIncrement()) - for (int ind2 = ind1 + 1; ind2 < numIndividuals; ++ind2) { - sb.append(pairwise(ind1, ind2)); - sb.append('\n'); - if (sb.length() >= PRINT_SIZE) - printResult(); - - } - printResult(); - } - } - - - - public void pairwise() - { -/* String s[]={"AA","AC","AG","AT","CC","CG","CT","GG","GT","TT"}; - for (int g1 = 0; g1 < 10; ++g1) { - for (int g2 = 0; g2 < 10; ++g2) { - System.err.println(s[g1] + "\t" + s[g2] + "\t" + ibs(g1, g2)); - } - System.err.println(); - }*/ - PairwiseThread pairwiseThreads[] = new PairwiseThread[numThreads]; - Thread threads[] = new Thread[numThreads]; - AtomicInteger index = new AtomicInteger(); - for (int i = 0; i < numThreads; ++i) { - threads[i] = new Thread(new PairwiseThread(index)); - threads[i].start(); - } - for (int i = 0; i < numThreads; ++i) { - while (threads[i].isAlive()) - try { - threads[i].join(); - } catch (Exception e) { - e.printStackTrace(); - System.exit(-1); - } - } - } - - private boolean validTrio(int p1, int p2, int c) - { - int p11 = allele1(p1); - int p12 = allele2(p1); - int p21 = allele1(p2); - int p22 = allele2(p2); - return (c == mapAlleles(p11, p21) || c == mapAlleles(p11, p22) || c == mapAlleles(p12, p21) || c == mapAlleles(p12, p22)); - } - private boolean validDuo(int p1, int c) - { - int p11 = allele1(p1); - int p12 = allele2(p1); - int c1 = allele1(c); - int c2 = allele2(c); - return (c1 == p11 || c2 == p11 || c1 == p12 || c2 == p12); - } - - private class ParentCheckThread implements Runnable{ - int ind1, ind2; - StringBuilder ret = new StringBuilder(); - - public String getOutput(){ - return ret.toString(); - } - public ParentCheckThread(int ind1, int ind2) { - this.ind1 = ind1; - this.ind2 = ind2; - } - public void run() { - int numMarkers = data.size(); - if (ind2 < 0) { // check single parent case - String prefix = names[ind1 + 2] + "\tNA\t"; - for (int ci = 0; ci < numChildren; ++ci) { - int child = childIndex[ci]; - double err = 0.0; - double n[] = new double[2]; - double p[] = new double[2]; - for (int m = 0; m < numMarkers; ++m) { - Arrays.fill(p, 0.0); - float posterior[][] = data.get(m); - - for (int g1 = 0; g1 < 10; ++g1) - if (posterior[ind1][g1] > 1e-10) - for (int g2 = 0; g2 < 10; ++g2) - if (posterior[child][g2] > 1e-10) { - int vIndex = validDuo(g1, g2) ? 0 : 1; - p[vIndex] = Math.max(p[vIndex], posterior[ind1][g1] * posterior[child][g2]); - } - if (p[0] > p[1]) { - n[0] += (p[0] - p[1]); - err += (p[0] - p[1]) * p[1] / (p[0] + p[1]); - } - else { - n[1] += (p[1] - p[0]); - err += (p[1] - p[0]) * p[0] / (p[0] + p[1]); - } - } - ret.append(prefix + names[child + 2] + '\t' + (Math.max(0, n[1] - err) / (n[0] + n[1] - err)) + '\t' + n[1] + '\t' + n[0] + '\t' + err + '\n'); - } - - } else { // two parents... - String prefix = names[ind2 + 2] + "\t" + names[ind1 + 2] + "\t"; - - for (int ci = 0; ci < numChildren; ++ci) { - int child = childIndex[ci]; - double n[] = new double[2]; - double p[] = new double[2]; - double err = 0.0; - for (int m = 0; m < numMarkers; ++m) { - Arrays.fill(p, 0.0); - float posterior[][] = data.get(m); - - for (int g1 = 0; g1 < 10; ++g1) - if (posterior[ind1][g1] > 1e-10) - for (int g2 = 0; g2 < 10; ++g2) - if (posterior[ind2][g2] > 1e-10) { - double p12 = posterior[ind1][g1] * posterior[ind2][g2]; - for (int g3 = 0; g3 < 10; ++g3) - if (posterior[child][g3] > 1e-10) { - int vindex = validTrio(g1, g2, g3) ? 0 : 1; - p[vindex] = Math.max(p[vindex], p12 * posterior[child][g3]); - } - } - if (p[0] > p[1]) { - n[0] += (p[0] - p[1]); - err += (p[0] - p[1]) * p[1] / (p[0] + p[1]); - } - else { - n[1] += (p[1] - p[0]); - err += (p[1] - p[0]) * p[0] / (p[0] + p[1]); - } - } - ret.append(prefix + names[child + 2] + '\t' + (Math.max(0, n[1] - err) / (n[0] + n[1] - err)) + '\t' + n[1] + '\t' + n[0] + '\t' + err + '\n'); - } - } - } - } - int numChildren = 0; - int numParents = 0; - int parentIndex[] = null; - int childIndex[] = null; - - public void checkParents(ArrayList parents, boolean allpairs) - { - - boolean isParent[] = new boolean[names.length]; - HashMap hm = new HashMap(); - - int index = -2; - for (String name : names) { - if (index >= 0) - hm.put(name, index); - ++index; - } - for (String parent : parents) { - if (!hm.containsKey(parent)) - System.err.println("Warning: parent " + parent + " is missing"); - else - isParent[hm.get(parent)] = true; - } - parentIndex = new int[numIndividuals]; - childIndex = new int[numIndividuals]; - for (int i = 0; i < numIndividuals; ++i) { - if (isParent[i]) - parentIndex[numParents++] = i; - if (!isParent[i] || allpairs) - childIndex[numChildren++] = i; - } - - int activeThreads = 0; - Thread threads[] = new Thread[numThreads]; - ParentCheckThread pthreads[] = new ParentCheckThread[numThreads]; - activeThreads = 0; - for (int pi1i = -1; pi1i < numParents; ++pi1i) { - int pi1 = (pi1i < 0) ? pi1i: parentIndex[pi1i]; - for (int pi2i = pi1i + 1; pi2i < numParents; ++pi2i) { - int pi2 = parentIndex[pi2i]; - if (activeThreads < numThreads) { - pthreads[activeThreads] = new ParentCheckThread(pi2, pi1); - (threads[activeThreads] = new Thread(pthreads[activeThreads])).start(); - ++activeThreads; - } - if (activeThreads == numThreads || pi1i == numParents - 2) { - for (int i = 0; i < activeThreads; ++i) { - if (threads[i].isAlive()) - try { - threads[i].join(); - } catch (Exception e) { - e.printStackTrace(); - System.exit(-1); - } - System.out.print(pthreads[i].getOutput()); - } - activeThreads = 0; - } - } - } - } - - public String pairwise(int ind1, int ind2) - { - int numMarkers = data.size(); - - double p[] = new double[3]; - for (int j = 0; j <= 2; ++j) - p[j] = 1.0 / 3.0; - double oldL = -1e100; - - for (int iteration = 0; iteration < 100; ++iteration) { - double logL = 0.0; - double q[] = new double[3]; - double dibs[] = new double[3]; - double pibs[] = new double[3]; - - double ll = 1.0; - for (int m = 0; m < numMarkers; ++m) { - Arrays.fill(dibs, 0.0); - Arrays.fill(pibs, 0.0); - - float posterior[][] = data.get(m); - double freq[] = frequencies.get(m); - - for (int g1 = 0; g1 < 10; ++g1) - for (int g2 = 0; g2 < 10; ++g2) { - int ibs = ibs(g1, g2); - //System.err.println(ibs); - dibs[ibs] = Math.max(dibs[ibs], posterior[ind1][g1] * posterior[ind2][g2]); - pibs[ibs] += freq[g1] * freq[g2]; - } - //for (int a = 0; a <= 2; ++a) - // System.err.println(pibs[a] + " vs " + dibs[a]); - //System.err.println("*"); - - double c2 = dibs[2]; - double c1 = (pibs[2] * dibs[2] + pibs[1] * dibs[1]) / (1 - pibs[0]); - double c0 = pibs[2] * dibs[2] + pibs[1] * dibs[1] + pibs[0] * dibs[0]; - - double c[] = {c0, c1, c2}; - double l = 0.0; - for (int j = 0; j <= 2; ++j) - l += p[j] * c[j]; - double iL = 1.0 / l; - - for (int j = 0; j <= 2; ++j) - q[j] += p[j] * c[j] * iL; - ll *= l; - if (ll < 1e-200) { // log when needed - logL += Math.log(ll); - ll = 1.0; - } - } - logL += Math.log(ll); - double sum = 0.0; - for (int j = 0; j <= 2; ++j) - sum += q[j]; - - double iSum = 1.0 / sum; - for (int j = 0; j <= 2; ++j) - p[j] = q[j] * iSum; - - //System.err.println("logL =" + ll); - if (logL - oldL < LIKELIHOOD_TOLERANCE2) - break; - oldL = logL; - } - //System.err.println("**"); - return names[ind1 + 2] + "\t" + names[ind2 + 2]+ "\t" + s(p[2] + 0.5 * p[1]) + "\t" + s(p[0]) + "\t" + s(p[1]) + "\t" + s(p[2]); - - } - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(2001); - String extraParameters = ""; - System.out.print("#java IBD"); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(2001); - pp.warning(new String[]{"data", "posteriorFile", "vcfFile", "MAFLimit", "missingLimit", "genotypeLimit", "numThreads", "parents", "allParentChildPairs"}); - - String filename = pp.getValueAsString("data", null); - DataParser dp = new DataParser(); - if (filename == null) { - //only vcf or posterior input? - String pfn = pp.getValueAsString("posteriorFile", null); - String vfn = pp.getValueAsString("vcfFile", null); - if (pfn != null || vfn != null) { - dp.loadFile(null, vfn, pfn); - } - else - Error.error(2001); - } else - dp.loadFile(filename, pp.getValueAsString("posteriorFile", null), pp.getValueAsString("vcfFile", null)); - - IBD ibd = new IBD(); - - ibd.setMAFLimit(Double.parseDouble(pp.getValueAsString("MAFLimit", "0.05"))); - ibd.setGLimit(Double.parseDouble(pp.getValueAsString("genotypeLimit", "0.1"))); - - ibd.setMissingLimit(Double.parseDouble(pp.getValueAsString("missingLimit", 0, "" + Double.MAX_VALUE))); - ibd.setMissingTolerance(Double.parseDouble(pp.getValueAsString("missingLimit", 1, "0.1"))); - - ibd.setNumThreads(Integer.parseInt(pp.getValueAsString("numThreads", "4"))); - - String ba = pp.getValueAsString("biAllelicLimit", null); - if (ba != null) - ibd.setBiAllelic(Double.parseDouble(ba)); - - System.err.println("filtering markers..."); - ibd.filter(dp); - - if (!pp.getValueAsString("onlyFilter", "0").equals("1")) - if (pp.getNumberOfValues("parents") > 0) { - ArrayList parents = new ArrayList(); - parents = pp.getValuesAsList("parents"); - //int n = parents.size(); - System.err.println("Starting computations to check parenthood..."); - //for (int p1 = 0; p1 < n ; ++p1) - // ibd.checkParent(parents.get(p1)); - - //for (int p1 = 0; p1 < n ; ++p1) - // for (int p2 = p1 + 1; p2 < n; ++p2) - // ibd.checkParents(parents.get(p1), parents.get(p2)); - ibd.checkParents(parents, pp.getValueAsString("allParentChildPairs", "0").equals("1")); - } else { - System.err.println("Starting pairwise computations..."); - ibd.pairwise(); - } - } -} diff --git a/software/LepMap3/lm3/src/Input.java b/software/LepMap3/lm3/src/Input.java deleted file mode 100644 index 226f444..0000000 --- a/software/LepMap3/lm3/src/Input.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki -*/ -//Reads files to ArrayLists of Strings -import java.io.*; -import java.util.*; - -public class Input { - private Input() { }; - - public static ArrayList loadTableRow(BufferedReader br, String delim) throws Exception - { - String s = ""; - do { - s = br.readLine(); - //System.err.println(s); - if (s != null) { - int index = s.indexOf('#'); - if (index >= 0) { - s = s.substring(0, index); - } - } - } while ( s != null && (s.length() == 0) ); - if (s == null) - return null; - - StringTokenizer st = new StringTokenizer(s, delim, false); - ArrayList row = new ArrayList(); - while (st.hasMoreTokens()) { - String nt = st.nextToken(); - row.add(nt); - } - //String sa[] = s.split(delim); - //ArrayList row = new ArrayList(); - //for (String tmp : sa) - // row.add(tmp); - return row; - } - - public static ArrayList> loadTable(BufferedReader br, String delim) throws Exception { - ArrayList> ret = new ArrayList>(); - //ArrayList comments = new ArrayList(); - while (true) { - ArrayList row = loadTableRow(br, delim); - if (row == null) - break; - else - ret.add(row); - } - return ret; - } - - public static ArrayList> loadTable(BufferedReader br, String delim, String returnDelim) throws Exception { - ArrayList> ret = new ArrayList>(); - - //ArrayList comments = new ArrayList(); - while (true) { - String s = ""; - do { - s = br.readLine(); - if (s != null) { - int index = s.indexOf('#'); - if (index >= 0) { - //comments.add(s.substring(index)); - s = s.substring(0, index); - } - } - } while ( s != null && (s.length() == 0 || !new StringTokenizer(s, delim).hasMoreTokens()) ); - if (s == null) - break; - StringTokenizer st = new StringTokenizer(s, delim, true); - ArrayList row = new ArrayList(); - while (st.hasMoreTokens()) { - String nt = st.nextToken(); - if (delim.indexOf(nt) >= 0) { - if (returnDelim.indexOf(nt) >= 0) - row.add(nt); - } else - row.add(nt); - } - ret.add(row); - } - return ret; - } - - public static ArrayList> loadTable(String filename, String delim, String returnDelim) { - try { - BufferedReader br = new BufferedReader(new FileReader(filename)); - ArrayList> t = loadTable(br, delim, returnDelim); - br.close(); - return t; - - } catch (Exception e) { - //System.err.print(e); - return null; - } - } - - - public static ArrayList> loadTable(String filename, String delim) { - try { - BufferedReader br = new BufferedReader(new FileReader(filename)); - ArrayList> t = loadTable(br, delim); - br.close(); - return t; - - } catch (Exception e) { - //System.err.print(e); - return null; - } - } - - public static int[][] loadIntTable(String filename, String delim) { - - ArrayList ret = new ArrayList(); - try { - BufferedReader br = new BufferedReader(new FileReader(filename)); - while (true) { - ArrayList t = loadTableRow(br, delim); - if (t == null) - break; - else { - int it[] = new int[t.size()]; - int i = 0; - for (String s : t) - it[i++] = Integer.parseInt(s); - ret.add(it); - } - - } - br.close(); - return ret.toArray(new int[ret.size()][]); - - } catch (Exception e) { - //System.err.print(e); - return null; - } - } - - public static void main(String args[]) - { - ArrayList> test = Input.loadTable("/home/prastas/workspace/PedSimulator/recombinationMap/pedigree.txt", " \t"); - for (ArrayList row : test) { - for (String item : row) - System.err.print(item + " "); - System.err.println(); - } - - - } - -} diff --git a/software/LepMap3/lm3/src/JoinIdenticalLGs.java b/software/LepMap3/lm3/src/JoinIdenticalLGs.java deleted file mode 100644 index 2f64137..0000000 --- a/software/LepMap3/lm3/src/JoinIdenticalLGs.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge -*/ -// Joins singular markers to LGs -import java.util.ArrayList; -//Errorcodes 7xx -public class JoinIdenticalLGs { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(601); - String extraParameters = ""; - System.out.print("#java JoinLGs "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(601); - pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "alleleLimit", "lod3Mode", "map"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - - int numDataFiles = pp.getNumberOfValues("data"); - if (numDataFiles == 0) - Error.error(4402); - for (int i = 0; i < numDataFiles; ++i) { - String filename = pp.getValueAsString("data", i, null); - if (filename == null) - Error.error(4403); - sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); - } - - double lodLimit[]; - int nv = pp.getNumberOfValues("lodLimit"); - if (nv >= 1) { - lodLimit = new double[nv]; - for (int i = 0; i < nv; ++i) - lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); - } else - lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; - - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - LGMap2 map = new LGMap2(); - if (!map.loadLGMap(pp.getValueAsString("map", null))) - Error.error(4406); - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - sc.joinLGs(lodLimit, map, Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - - //sc.SeparateChromosomes(lodLimit); - //map.renameLGs(); - //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); - //map.printLGAssignment(sc.getNumMarkers()); - - } - -} diff --git a/software/LepMap3/lm3/src/JoinSingles2All.java b/software/LepMap3/lm3/src/JoinSingles2All.java deleted file mode 100644 index 694e697..0000000 --- a/software/LepMap3/lm3/src/JoinSingles2All.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -// Joins singular markers to LGs -import java.util.ArrayList; -//Errorcodes 7xx -public class JoinSingles2All { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(701); - String extraParameters = ""; - System.out.print("#java JoinSingles2 "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(701); - - pp.warning(new String[]{"minLod","map", "data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "lodDifference", "lod3Mode", "betweenSameType", "numThreads", "distortionLod", "iterate", "maxDistance", "mask"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.03")); - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - sc.setMinLod(Double.parseDouble(pp.getValueAsString("minLod", "" + Double.NEGATIVE_INFINITY))); - - - int numDataFiles = pp.getNumberOfValues("data"); - if (numDataFiles == 0) - Error.error(1402); - for (int i = 0; i < numDataFiles; ++i) { - String filename = pp.getValueAsString("data", i, null); - if (filename == null) - Error.error(1403); - sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); - } - - double lodLimit[]; - int nv = pp.getNumberOfValues("lodLimit"); - if (nv >= 1) { - lodLimit = new double[nv]; - for (int i = 0; i < nv; ++i) - lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); - } else - lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; - - LGMap2 map = new LGMap2(); - if (!map.loadLGMap(pp.getValueAsString("map", null))) - Error.error(4406); - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - if (pp.getValueAsString("distortionLod", "0").equals("1")) - sc.setDistortionLodMode(); - - String maskFile = pp.getValueAsString("mask", null); - if (maskFile != null) { - LGMap2 mask = new LGMap2(); - if (!mask.loadLGMap(maskFile)) - Error.error(302); - sc.maskLG(mask, 1); - } - - sc.joinSingles(lodLimit, Double.parseDouble(pp.getValueAsString("lodDifference", "0.0")), map, pp.getValueAsString("betweenSameType", "0").equals("1"), pp.getValueAsString("iterate", "0").equals("1"), Integer.parseInt(pp.getValueAsString("numThreads", "1")), Integer.parseInt(pp.getValueAsString("maxDistance", "" + Integer.MAX_VALUE))); - - //sc.SeparateChromosomes(lodLimit); - //map.renameLGs(); - //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); - //map.printLGAssignment(sc.getNumMarkers()); - - } - -} diff --git a/software/LepMap3/lm3/src/JoinSingles2Identicals.java b/software/LepMap3/lm3/src/JoinSingles2Identicals.java deleted file mode 100644 index e633243..0000000 --- a/software/LepMap3/lm3/src/JoinSingles2Identicals.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -// Joins singular markers to LGs -import java.util.ArrayList; -//Errorcodes 7xx -public class JoinSingles2Identicals { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(701); - String extraParameters = ""; - System.out.print("#java JoinSingles2 "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(701); - - pp.warning(new String[]{"map", "data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "alleleLimit", "lodDifference", "lod3Mode", "betweenSameType", "numThreads"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - - int numDataFiles = pp.getNumberOfValues("data"); - if (numDataFiles == 0) - Error.error(4402); - for (int i = 0; i < numDataFiles; ++i) { - String filename = pp.getValueAsString("data", i, null); - if (filename == null) - Error.error(4403); - sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); - } - - double lodLimit[]; - int nv = pp.getNumberOfValues("lodLimit"); - if (nv >= 1) { - lodLimit = new double[nv]; - for (int i = 0; i < nv; ++i) - lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); - } else - lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; - - LGMap2 map = new LGMap2(); - if (!map.loadLGMap(pp.getValueAsString("map", null))) - Error.error(4406); - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - sc.joinSingles2Identicals(lodLimit, Double.parseDouble(pp.getValueAsString("lodDifference", "0.0")), map, pp.getValueAsString("betweenSameType", "0").equals("1"), Integer.parseInt(pp.getValueAsString("numThreads", "1"))); - - //sc.SeparateChromosomes(lodLimit); - //map.renameLGs(); - //map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); - //map.printLGAssignment(sc.getNumMarkers()); - - } - -} diff --git a/software/LepMap3/lm3/src/LGMap2.java b/software/LepMap3/lm3/src/LGMap2.java deleted file mode 100644 index 7e80ef0..0000000 --- a/software/LepMap3/lm3/src/LGMap2.java +++ /dev/null @@ -1,204 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -// Stores a linkage map -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; - -public class LGMap2 { - private ArrayList lGNames = new ArrayList(); - - LGMap2() - { - lGNames.clear(); - - } - LGMap2(int numMarkers) - { - lGNames.clear(); - for (int i = 0; i < numMarkers; ++i) - lGNames.add(0); - } - - public int getNumLGs() - { - int numLGs = 0; - for (int cn : lGNames) - numLGs = Math.max(numLGs, cn); - return numLGs; - } - - - private class intArrayComparator implements Comparator{ - public int compare(int a1[], int a2[]) - { - int r = 0; - for (int i = 0; r == 0 && i < Math.min(a1.length, a2.length); ++i) - r = new Integer(a1[i]).compareTo(a2[i]); - return r; - } - - } - - public void renameLGs() - { - int sizes[] = new int[getNumLGs() + 1]; - for (int m = 0; m < getNumMarkers(); ++m) { - int name = lGNames.get(m); - if (name > 0) - ++sizes[name]; - } - ArrayList al = new ArrayList(); - for (int m = 0; m < getNumMarkers(); ++m) { - int name = lGNames.get(m); - if (name > 0 && sizes[name] > 0) { - al.add(new int[]{-sizes[name], name}); - sizes[name] = 0; - } - } - Collections.sort(al, new intArrayComparator()); - int names[] = new int[getNumLGs() + 1]; - int j = 0; - for (int sn[] : al) - names[sn[1]] = ++j; - - for (int m = 0; m < getNumMarkers(); ++m) { - int name = lGNames.get(m); - if (name > 0) - lGNames.set(m, names[name]); - } - - } - // returns markers of each LG - public ArrayList> getMarkersOfLGs(int numMarkers) - { - if (numMarkers != getNumMarkers()) { - System.err.println("Warning: The map has different number of markers as the data, "); - System.err.println(numMarkers + " and " + getNumMarkers()); - } - //renameLGs(); - ArrayList> ret = new ArrayList>(); - int numLGs = getNumLGs(); - for (int i = 0; i <= numLGs; ++i) - ret.add(new ArrayList()); - for (int m = 0; m < numMarkers; ++m) { - int name = lGNames.get(m); - ret.get(name).add(m); - } - return ret; - } - - public int getLGName(int marker) - { - return lGNames.get(marker); - } - public void setLGName(int marker, int name) - { - lGNames.set(marker, name); - } - public ArrayList getLGNames() - { - return lGNames; - } - public int getNumMarkers() - { - return lGNames.size(); - } - -/* public void printLGAssignment(Data d) - { - int singles = 0; - int numChr = 0; - int numMarkers = d.getNumMarkers(); - int names[] = new int[numMarkers]; - - for (int m = 0; m < numMarkers; ++m) { - String chrType = ""; - int name = lGNames.get(m); - if (d.getMarkerType(m) == Family.Z_CHR && name != 0) - chrType = "\tZ"; - System.out.println(name + chrType); - if (name == 0) - ++singles; - else - if (names[name] == 0) - names[name] = ++numChr; - } - System.err.println("Number of LGs = " + numChr + ", markers in LGs = " + (numMarkers - singles) + ", singles = " + singles); - }*/ - public void printLGAssignment(int numMarkers) - { - int singles = 0; - int numChr = 0; - int names[] = new int[numMarkers]; - - StringBuilder sb = new StringBuilder(); - for (int m = 0; m < numMarkers; ++m) { - int name = lGNames.get(m); - //System.out.println(name); - sb.append(name); - sb.append('\n'); - if (sb.length() > 10000 || (m == numMarkers - 1)) { - System.out.print(sb); - sb.setLength(0); - } - - if (name == 0) - ++singles; - else - if (names[name] == 0) - names[name] = ++numChr; - } - System.err.println("Number of LGs = " + numChr + ", markers in LGs = " + (numMarkers - singles) + ", singles = " + singles); - } - - - - public void removeSmallLGs(int sizeLimit) - { - int numNames = getNumLGs(); - int sizes[] = new int[numNames + 1]; - int numMarkers = getNumMarkers(); - for (int i = 0; i < numMarkers; ++i) - ++sizes[lGNames.get(i)]; - for (int i = 0; i < numMarkers; ++i) - if (sizes[lGNames.get(i)] < sizeLimit) - lGNames.set(i, 0); - for (int i = 1; i <= numNames; ++i) - if (sizes[i] > 0 && sizes[i] < sizeLimit) - System.err.println("Removing LG " + i + " (as too small) with size " + sizes[i] ); - } - public boolean loadLGMap(String filename) - { - ArrayList> table = Input.loadTable(filename, " \t"); - if (table == null) - return false; - - lGNames.clear(); - - for (ArrayList line : table) { - //if (line.size() != 1 && line.size() != 2) - // Error2.error(104); - lGNames.add(Integer.parseInt(line.get(0))); - } - return true; - } - -} diff --git a/software/LepMap3/lm3/src/LMPlot.java b/software/LepMap3/lm3/src/LMPlot.java deleted file mode 100644 index 6c99fd5..0000000 --- a/software/LepMap3/lm3/src/LMPlot.java +++ /dev/null @@ -1,377 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2017 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki - -*/ - - -import java.util.*; -import java.io.*; -//TODO: Add support for missing phased haplotypes (-) -public class LMPlot{ - - private int numNodes; - private ArrayList nodeNames = new ArrayList(); - private ArrayList nodeWeights = new ArrayList(); - private ArrayList prints = new ArrayList(); - - UnionFind uf = null; - int cname[] = null; - int size[] = null; - int numComponents = 0; - int familySize[]; - - boolean selfingPhase = false; - boolean outputAll = false; - - HashMap hm = new HashMap(); - - public LMPlot() { - } - - private int addNode(String name, long segPrint[][][], int weight) - { - if (!hm.containsKey(name)) { - hm.put(name, numNodes); - nodeNames.add(name); - nodeWeights.add(weight); - prints.add(segPrint); - return numNodes++; - } else - return hm.get(name); - } - - - public void connectedComponenets() { - cname = new int[numNodes]; - size = new int[numNodes]; - numComponents = 0; - for (int n = 0; n < numNodes; ++n) { - int c = uf.find(n); - if (cname[c] == 0) - cname[c] = ++numComponents; - ++size[cname[c]]; - } - System.out.println("#Connected components = " + numComponents); - } - - private long[][] string2BitPrints(String s) - { - int n = s.length(); - long ret[][] = new long[2][(n+63) / 64]; - - int index = 0; - long bitIndex = 1; - - for (int i = 0; i < n; ++i) { - char c = s.charAt(i); - if (c == '0' || c == '1') { - ret[1][index] |= bitIndex; - if (c == '1') - ret[0][index] |= bitIndex; - } - - bitIndex *= 2; - if (bitIndex == 0) { - bitIndex = 1; - ++index; - } - } - return ret; - } - - //mask out if both p1 and p2 are heterozygote - private int[] hammingDistance3(long p1[][][], long p2[][][]) - { - int ret[] = new int[3]; - // store different individual... - int difFam = -1; - for (int f = 0; f < p1.length; ++f) { - int n = p1[f][0].length; - int d1 = 0; - int d2 = 0; - for (int i = 0; i < n; ++i) { - long mask1 = (p1[f][0][i] ^ p1[f ^ 1][0][i]); // 1 if heterozygote - long mask2 = (p2[f][0][i] ^ p2[f ^ 1][0][i]); // 1 if heterozygote - long mask12 = ~(mask1 & mask2); // 0 if both heterozygote - - long mask = p1[f][1][i] & p2[f][1][i] & mask12; - long b1 = (p1[f][0][i] ^ p2[f][0][i]) & mask; - d1 += Long.bitCount(b1); - d2 += Long.bitCount(b1 ^ mask); - } - if (d1 == 1 || d2 == 1) - difFam = f; - if (d1 >= d2) { - ret[0] += d2; - ret[1] += d1; - } else { - ret[0] += d1; - ret[1] += d2; - } - } - - if (ret[0] == 1) { - int n = p1[difFam][0].length; - for (int i = 0; i < n; ++i) { - long mask = p1[difFam][1][i] & p2[difFam][1][i]; - long b1 = (p1[difFam][0][i] ^ p2[difFam][0][i]) & mask; - int d1 = Long.bitCount(b1); - int d2 = Long.bitCount(b1 ^ mask); - if (d1 == 1 || d2 == 1) { - if (d2 == 1) - b1 = b1 ^ mask; - - ret[2] = familySize[difFam/2] + i * 64 + Long.numberOfTrailingZeros(b1) + 1; - return ret; - } - } - - } - return ret; - } - - private int[] hammingDistance(long p1[][][], long p2[][][]) - { - if (selfingPhase) - return hammingDistance3(p1, p2); - int ret[] = new int[3]; - // store different individual... - int difFam = -1; - for (int f = 0; f < p1.length; ++f) { - int n = p1[f][0].length; - int d1 = 0; - int d2 = 0; - for (int i = 0; i < n; ++i) { - long mask = p1[f][1][i] & p2[f][1][i]; - long b1 = (p1[f][0][i] ^ p2[f][0][i]) & mask; - d1 += Long.bitCount(b1); - d2 += Long.bitCount(b1 ^ mask); - } - if (d1 == 1 || d2 == 1) - difFam = f; - if (d1 >= d2) { - ret[0] += d2; - ret[1] += d1; - } else { - ret[0] += d1; - ret[1] += d2; - } - } - - if (ret[0] == 1) { - int n = p1[difFam][0].length; - for (int i = 0; i < n; ++i) { - long mask = p1[difFam][1][i] & p2[difFam][1][i]; - long b1 = (p1[difFam][0][i] ^ p2[difFam][0][i]) & mask; - int d1 = Long.bitCount(b1); - int d2 = Long.bitCount(b1 ^ mask); - if (d1 == 1 || d2 == 1) { - if (d2 == 1) - b1 = b1 ^ mask; - - ret[2] = familySize[difFam/2] + i * 64 + Long.numberOfTrailingZeros(b1) + 1; - return ret; - } - } - - } - - return ret; - } - - public String normalize(String s){ - return ""; - } - - public boolean loadPrints(String fn, int limit2) - { - HashMap printMap = new HashMap(); - int numPrints = 0; - - try { - BufferedReader br = null; - if (fn.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(fn)); - String line = null; - do { - line = br.readLine(); - if (line == null) - break; - if (line.charAt(0) != '#') { - String[] row = line.split("\t"); - StringBuilder sb = new StringBuilder(); - for (int i = 4; i < row.length; ++i) - sb.append(row[i].substring(0, row[i].indexOf(" "))); - String str = sb.toString(); - - if (!printMap.containsKey(str)) { - printMap.put(str, numPrints++); - long ps[][][] = new long[(row.length - 4) * 2][][]; - if (familySize == null) { - familySize = new int[row.length - 4 + 1]; - for (int i = 4; i < row.length; ++i) - familySize[i - 3] = familySize[i - 4] + row[i].substring(0, row[i].indexOf(" ")).length() / 2; - } - for (int i = 4; i < row.length; ++i) { - String str12 = row[i].substring(0, row[i].indexOf(" ")); - int mid = str12.length() / 2; - ps[(i-4) * 2] = string2BitPrints(str12.substring(0, mid)); - ps[(i-4) * 2 + 1] = string2BitPrints(str12.substring(mid)); - } - addNode("" + numPrints, ps, 1); - } else { - int n = printMap.get(str); - nodeWeights.set(n, nodeWeights.get(n) + 1); - } - } - } while (true); - System.err.println("#nodes=" + numNodes); - - br.close(); - - if (outputAll) - for (int n1 = 0; n1 < numNodes; ++n1) - for (int n2 = n1 + 1; n2 < numNodes; ++n2) { - int d[] = hammingDistance(prints.get(n1), prints.get(n2)); - System.err.println((n1 + 1) + "\t" + (n2 + 1) + "\t" + d[0] + "\t" + d[1]); - } - - - uf = new UnionFind(numNodes); - - System.err.println("Computing pair-wise distances"); - System.out.println("graph g {"); - System.out.println("node [fontsize=40,penwidth=4]"); - System.out.println("edge [penwidth=3]"); - - for (int n1 = 0; n1 < numNodes; ++n1) { - double area = Math.sqrt(nodeWeights.get(n1)) / 30.0; - System.out.println(nodeNames.get(n1) + "[width=" + area + ",height=" + area + ",fixedsize=true]"); - } - boolean dir = Math.random() < 0.5; - - int minDist[] = new int[numNodes]; - int union[] = new int[numNodes]; - while (true) { - boolean allDone = true; - Arrays.fill(minDist, Integer.MAX_VALUE); - //calculate minDist - for (int n1 = 0; n1 < numNodes; ++n1) { - int u1 = uf.find(n1); - for (int n2 = n1 + 1; n2 < numNodes; ++n2) { - int u2 = uf.find(n2); - if (u1 != u2) { - int d[] = hammingDistance(prints.get(n1), prints.get(n2)); - if (d[1] >= limit2) { - allDone = false; - minDist[u1] = Math.min(minDist[u1], d[0]); - minDist[u2] = Math.min(minDist[u2], d[0]); - } - } - } - } - if (allDone) - break; - - for (int n1 = 0; n1 < numNodes; ++n1) { - int u = uf.find(n1); - union[n1] = u; - } - - for (int n1 = 0; n1 < numNodes; ++n1) { - int u1 = union[n1]; - int md1 = minDist[u1]; - for (int n2 = n1 + 1; n2 < numNodes; ++n2) { - int u2 = union[n2]; - if (u1 != u2) { - int d[] = hammingDistance(prints.get(n1), prints.get(n2)); - if (d[1] >= limit2 && (d[0] <= md1 || d[0] <= minDist[u2])) { - uf.union(u1, u2); - - if (Math.random() < 0.1) - dir = !dir; - - String color = ""; - try { - int name1 = Integer.parseInt(nodeNames.get(n1)); - int name2 = Integer.parseInt(nodeNames.get(n2)); - if (Math.abs(name1 - name2) > 1) - color = "color=red"; - } catch (Exception e) - { - } - int limit = d[0]; - if (limit == 0) // add edge for distance 0 as well... - ++limit; - if (dir) - for (int i = 0; i < limit; ++i) - System.out.println(nodeNames.get(n1) + "--" + nodeNames.get(n2) + "[" + ((d[0] == 1) ? "label=" + d[2] + "": "") + color + "]"); - else - for (int i = 0; i < limit; ++i) - System.out.println(nodeNames.get(n2) + "--" + nodeNames.get(n1) + "[" + ((d[0] == 1) ? "label=" + d[2] + "": "") + color + "]"); - } - } - } - } - } - System.out.println("}"); - return true; - } catch (Exception e) { - e.printStackTrace(); - System.err.println("Error"); - return false; - } - } - - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(1201); - - String extraParameters = ""; - System.out.print("#java LMPlot " + args[0]); - for (int i = 1; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(801); - pp.warning(new String[]{"limit2", "selfingPhase", "outputAllDistances"}); - - - LMPlot sp = new LMPlot(); - sp.setOutputAll(pp.getValueAsString("outputAllDistances", "0").equals("1")); - sp.setSelfingPhase(pp.getValueAsString("selfingPhase", "0").equals("1")); - sp.loadPrints(args[0], Integer.parseInt(pp.getValueAsString("limit2", "1"))); - //sp.printDot(); - } - - private void setOutputAll(boolean value) { - outputAll = value; - } - - private void setSelfingPhase(boolean value) { - selfingPhase = value; - } -} diff --git a/software/LepMap3/lm3/src/MarkerList.java b/software/LepMap3/lm3/src/MarkerList.java deleted file mode 100644 index 0d793e0..0000000 --- a/software/LepMap3/lm3/src/MarkerList.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki -*/ -// Stores a list of markers -import java.util.ArrayList; -public class MarkerList { - - private UnionFind uf = null; - private ArrayList> markers=new ArrayList>(); - - public MarkerList(int numMarkers) - { - uf = new UnionFind(numMarkers); - for (int i = 0; i < numMarkers; ++i) { - ArrayList al = new ArrayList(); - al.add(i); - markers.add(al); - } - - } - // This could be made more efficient by using (modified) double linked lists - // However, this is probably as efficient as is needed - public int union(int m1, int m2) - { - int c1 = uf.find(m1); - int c2 = uf.find(m2); - if (c1 == c2) - return c1; - int c = uf.union(c1, c2); - if (c == c1) { - markers.get(c1).addAll(markers.get(c2)); - markers.set(c2, null); - } - else { - markers.get(c2).addAll(markers.get(c1)); - markers.set(c1, null); - } - return c; - } - - public int unionBetween(int m1, int m2, int markerToAdd) - { - int c1 = uf.find(m1); - int c2 = uf.find(m2); - if (c1 == c2) { - int c = uf.union(c1, markerToAdd); - for (int i = 0; i < markers.get(c2).size(); ++i) { - int m = markers.get(c2).get(i); - if (m == m1 || m == m2) { - markers.get(c2).add(i, markerToAdd); - return c; - } - } - Error.error(504); - } else - Error.error(503); - return 0; - } - - public int getFirstMarker(int c) - { - return markers.get(c).get(0); - } - public int getLastMarker(int c) - { - return markers.get(c).get(markers.get(c).size() - 1); - } - public int numMarkers(int c) - { - return markers.get(c).size(); - } - - - // This could be made more efficient by using (modified) double linked lists - // However, this is probably as efficient as is needed - public ArrayList unionMarkersWithOrder(int m1, int m2) - { - int c1 = uf.find(m1); - int c2 = uf.find(m2); - ArrayList list1 = markers.get(c1); - ArrayList list2 = markers.get(c2); - ArrayList al = new ArrayList(); - int s1 = list1.size(); - int s2 = list2.size(); - - if (list1.get(s1 - 1) == m1) - al.addAll(list1); - else - if (list1.get(0) == m1) - for (int i = s1 - 1; i >= 0; --i) - al.add(list1.get(i)); - else { - System.err.println(list1); - Error.error(501); - } - - if (list2.get(0) == m2) - al.addAll(list2); - else - if (list2.get(s2 - 1) == m2) - for (int i = s2 - 1; i >= 0; --i) - al.add(list2.get(i)); - else { - System.err.println(list2); - System.err.println(m2); - Error.error(502); - } - return al; - } - - public void unionWithOrder(int m1, int m2) - { - ArrayList al = unionMarkersWithOrder(m1, m2); - - int c1 = uf.find(m1); - int c2 = uf.find(m2); - int c = uf.union(c1, c2); - markers.set(c1, null); - markers.set(c2, null); - markers.set(c, al); - } - public int find(int marker) - { - return uf.find(marker); - } - public boolean isEmpty(int m) - { - return (markers.get(m) == null); - } - public void removeMarkers(int c) - { - markers.get(c).clear(); - } - - public ArrayList getMarkers(int c) - { - return markers.get(c); - } - public ArrayList getMarkersCopy(int c) - { - return new ArrayList(getMarkers(c)); // if we should copy - } - - -} diff --git a/software/LepMap3/lm3/src/Misc.java b/software/LepMap3/lm3/src/Misc.java deleted file mode 100644 index 35d58c9..0000000 --- a/software/LepMap3/lm3/src/Misc.java +++ /dev/null @@ -1,384 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki -*/ -//Miscellaneous functions -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Random; -public class Misc { - - - private static Random seedGenerator = new Random(); - private static long seed = seedGenerator.nextLong(); - private static Random rand = new Random(seed); - - public static void setSeed(long seed) { - Misc.seed = seed; - rand.setSeed(seed); - } - - public static long getSeed() { - return seed; - } - - public static double random() { - return rand.nextDouble(); - } - - //exponential distribution capped to [0,1[. - public static double exponential01(double lambda) { - double ret = 2.0; - while (ret > 1.0) - ret = -Math.log(Misc.random()) / lambda; - return ret; - } - public static double entropy(double p[]) - { - double sum = 0.0; - for (double x : p) - sum += x; - - assert(sum > 0); - - double iSum = 1.0 / sum; - double ret = 0; - for (double x : p) - if (x > 0) { - double y = x * iSum; - ret += y * Math.log(y); - } - return - ret * Constants.invLN2; - } - - public static double entropy(float p[]) - { - double sum = 0.0; - for (double x : p) - sum += x; - - assert(sum > 0); - - double iSum = 1.0 / sum; - double ret = 0; - for (double x : p) - if (x > 0) { - double y = x * iSum; - ret += y * Math.log(y); - } - return - ret * Constants.invLN2; - } - - public static int[][] permutation(int n){ - if (n > 12) - return null; - int m = 1; - ArrayList elements = new ArrayList(); - for (int i = 1; i <= n; ++i) { - m *= i; - elements.add(i - 1); - } - - ArrayList> perm = permutation(elements); - int i = 0; - int ret[][] = new int[m][n]; - for (ArrayList p : perm) { - for (int j = 0; j < n; ++j) - ret[i][j] = p.get(j); - ++i; - } - return ret; - } - - private static ArrayList> permutation(ArrayList elements){ - ArrayList> ret = new ArrayList>(); - if (elements.size() <= 1) { - ArrayList tmp = new ArrayList(); - tmp.addAll(elements); - ret.add(tmp); - return ret; - } - for (int i = 0; i < elements.size(); ++i) { - Integer element = elements.remove(i); - ArrayList> perm0 = permutation(elements); - for (ArrayList p : perm0) { - p.add(0, element); - ret.add(p); - } - elements.add(i, element); - } - return ret; - } - - //no permutations that have been tried earlier - public static int[][] prunePermutation1(int perm[][]) - { - int k = perm[0].length; - int ret[][] = new int[perm.length - perm.length / k + 1][]; - int i = 0; - for (int p[] : perm) { - if (p[0] != 0 || i == 0) - ret[i++] = p; - } - return ret; - } - - //no symmetric permutations - public static int[][] prunePermutation2(int perm[][]) - { - int k = perm[0].length; - int ret[][] = new int[perm.length / 2][]; - int i = 0; - for (int p[] : perm) { - if (p[0] < p[k - 1]) - ret[i++] = p; - } - return ret; - } - - public static class ArrayIndexComparator> implements Comparator - { - private final T[] array; - - public ArrayIndexComparator(T[] array) - { - this.array = array; - } - @SuppressWarnings("unchecked") - public ArrayIndexComparator(ArrayList alArray) - { - this.array = (T[]) alArray.toArray(new Comparable[0]); - } - - public Integer[] createIndexArray() - { - Integer[] indexes = new Integer[array.length]; - for (int i = 0; i < array.length; i++) - { - indexes[i] = i; - } - return indexes; - } - - public int compare(Integer index1, Integer index2) - { - return array[index1].compareTo(array[index2]); - } - } - //Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(table); - //Integer[] indexes = comparator.createIndexArray(); - //Arrays.sort(indexes, comparator); - - private static final double LN10 = Math.log(10); - private static final double invLN10 = 1.0 / Math.log(10); - - public static double logSumFast(double logX, double logY) - { - if (logX >= logY) { - if (logX == Double.NEGATIVE_INFINITY) - return Double.NEGATIVE_INFINITY; - return logX + log1pExpFast(logY - logX); - } - else - return logY + log1pExpFast(logX - logY); - } - - public static double getLookup(double x) { - if (x >= lookup.length - 1) - return lookup[lookup.length - 1][0]; - int ix = (int) x; - return lookup[ix][(int)(lookup[ix].length * (x - ix))]; - } - - private static double lookup[][] = null; - static { - int bins = 10; - int size = 1 << bins; - lookup = new double[bins + 1][]; - for (int i = 0; i <= bins; ++i) { - lookup[i] = new double[size]; - for (int j = 0; j < size; ++j) - lookup[i][j] = Math.log1p(Math.exp(-i - (j + 0.5) / size)); //add 0.5 to get mid point of each interval - size >>= 1; - } - lookup[bins][0] = 0.0; - } - - //x <= 0 - private static double log1pExpFast(double x) { - return getLookup(-x); - } - - - public static double logSum(double logX, double logY) - { - if (logX >= logY) { - if (logX == Double.NEGATIVE_INFINITY) - return Double.NEGATIVE_INFINITY; - return logX + Math.log1p(Math.exp(logY - logX)); - } - else - return logY + Math.log1p(Math.exp(logX - logY)); - - } - public static double logSub(double logX, double logY) - { - return logX + Math.log1p(-Math.exp(logY - logX)); - } - - public static double exp10(double a) - { - return Math.exp(a * LN10); - } - private static class KthSmallest{ - double t[]; - public KthSmallest(double t[]) - { - this.t = t; - } - public double getKthSmallest(int k){ // k = 0, 1, ... t.length - 1 - getKthSmallest(k, 0, t.length - 1); - return t[k]; - } - private void getKthSmallest(int k, int low, int high) { - int i = low, j = high; - double pivot = t[low + (high-low)/2]; - while (i <= j) { - while (t[i] < pivot) - i++; - while (t[j] > pivot) - j--; - if (i <= j) { - double tmp = t[i]; - t[i] = t[j]; - t[j] = tmp; - i++; - j--; - } - } - if (low < j && k <= j) - getKthSmallest(k, low, j); - else if (i < high && k >= i) - getKthSmallest(k, i, high); - } - }; - public static double getKthSmallest(int k, double t[]) - { - KthSmallest ks = new KthSmallest(t); - return ks.getKthSmallest(k); - } - public static int[] randomPermutation(int n){ - int perm[] = new int[n]; - randomPermutation(perm, n); - return perm; - } - public static void randomPermutation(int perm[], int n){ - randomPermutation(perm, n, n - 1); - } - public static void randomPermutation(int perm[], int n, int k){ - for (int i = 0; i < n; ++i) - perm[i] = i; - for (int i = 0; i < k; ++i) { - int j = i + (int) (Misc.random() * (n - i)); - int tmp = perm[i]; - perm[i] = perm[j]; - perm[j] = tmp; - } - } - static float[] resizeArray(float array[], int newSize) { - float[] na = new float[newSize]; - System.arraycopy(array, 0, na, 0, Math.min(newSize, array.length)); - return na; - } - static int[] resizeArray(int array[], int newSize) { - int[] na = new int[newSize]; - System.arraycopy(array, 0, na, 0, Math.min(newSize, array.length)); - return na; - } - - public static byte[][] transpose(byte array[][]) - { - if (array.length == 0) - return new byte[0][0]; //??? - byte[][] ret = new byte[array[0].length][array.length]; - for (int i = 0; i < ret.length; ++i) - for (int j = 0; j < ret[i].length; ++j) - ret[i][j] = array[j][i]; - return ret; - } - - public static void printArray(int array[][]) - { - for (int a[] : array) { - for (int ai : a) - System.out.print(ai + "\t"); - System.out.println(); - } - } - public static void printArray(double array[][]) - { - for (double a[] : array) { - for (double ai : a) - System.out.print(ai + "\t"); - System.out.println(); - } - } - - public static void printList(double array[]) - { - for (double ai : array) - System.out.print(ai + "\t"); - System.out.println(); - } - - public static void main(String args[]) - { - for (BigDecimal x = new BigDecimal("0.0"); x.doubleValue() > -11; x=x.subtract(new BigDecimal("0.01"))) { - double v1 = log1pExpFast(x.doubleValue()); - double v2 = Math.log1p(Math.exp(x.doubleValue())); - System.err.println(x + " " + v1 + " " + v2 + " " + (v1 - v2)); - } - - - //printArray(permutation(4)); - printArray(prunePermutation1(permutation(5))); - - - - - for (int i = 0; i < 10; ++i) - System.out.println(exponential01(10)); - - int n = 10; - double t[] = new double[n]; - for (int k = 0; k < n; ++k) - t[k] = Math.random(); - double old = 0; - for (int k = 0; k < n; ++k) { - double sk = getKthSmallest(k, t); - if (sk < old) - System.err.println("error"); - System.err.println(sk + "\t" + 1.0 * k / n ); - old = sk; - } - } - - - -} diff --git a/software/LepMap3/lm3/src/Order.java b/software/LepMap3/lm3/src/Order.java deleted file mode 100644 index b197c69..0000000 --- a/software/LepMap3/lm3/src/Order.java +++ /dev/null @@ -1,577 +0,0 @@ - -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP2. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ - -//Marker ordering functions -import java.util.*; -import java.text.*; -import java.io.PrintStream; - -public class Order { - private Data2 data; - private LGMap2 chromosomeMap; - - private int mappingFunction = 1; - - private boolean sexAveraged = false; - - private int numMarkers; - - private int printPhased; - - private OrderFinder of = new OrderFinder(); - - ArrayList lastOrder = new ArrayList(); - - public Order() { - } - - - public void setPrintPhased(int value) - { - printPhased = value; - } - - public void setUsePhysical(int value, double prob) - { - of.setUsePhysical(value, prob); - } - - public void setKosambi() - { - mappingFunction = 2; - } - - public void setMorgan() - { - mappingFunction = 0; - } - - public void setHaldane() - { - mappingFunction = 1; - } - public void init(Data2 data, LGMap2 cm) { - this.data = data; - this.chromosomeMap = cm; - numMarkers = data.getNumMarkers(); - } - public void setDataScale(String s, double maxS, double capS, int mode) - { - of.setDataScale(s, maxS, capS, mode); - } - - public void setSelfingPhase(boolean value) - { - of.setSelfingPhase(value); - } - - public void setRecombination(double rec1, double rec2, double inter1, double inter2) { - of.setRecombination(rec1, rec2, inter1, inter2); - } - public void setIdenticalLimit(double limit) { - of.setIdenticalLimit(limit); - } - public void setFilterWindow(int value) - { - } - public void setNumThreads(int numThreads) - { - of.setNumThreads(numThreads); - } - public void setNumMergeIterations(int numIterations) - { - of.setNumMergeIterations(numIterations); - } - - public void computeLODScores(String filename) - { - try { - PrintStream stream = new PrintStream(filename); - of.printLOD(lastOrder, stream); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void calculateIntervals(String filename, double limit) - { - try { - PrintStream stream = new PrintStream(filename); - of.printIntervals(lastOrder, stream, limit); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - public void evaluateOrder(String filename, boolean improveOrder) { - evaluateOrder(filename, 0, improveOrder); - } - - - public void evaluateOrder(String filename, int chr, boolean improveOrder) { - ArrayList order = new ArrayList(); - ArrayList> table = Input.loadTable(filename, " \t"); - if (table == null) - return; - for (ArrayList line : table) { -// if (line.size() != 1) -// Error.error(104); - if (line.get(0).equals("***")) - continue; - int i = Integer.parseInt(line.get(0)); - //System.err.println(i); - order.add(i - 1); - } - - if (!improveOrder) { - ArrayList order2 = orderChromosome(order, false, false); - printOrder(order2, 0, false, System.out, false); - } - - if (improveOrder) { - ArrayList order2 = orderChromosome(order, false, true); - printOrder(order2, 0, false, System.out); - } - - - } - - private double mappingFunction(double r) - { - if (mappingFunction == 0) - return r; - else if (mappingFunction == 2) - return kosambi(r); - else - return haldane(r); - } - - private double haldane(double r) { - return -0.5 * Math.log(1 - 2 * r); - } - private double kosambi(double r) { - return 0.25 * Math.log ((1 + 2 * r) / (1 - 2 * r)); - } - - - private String getHaplotypeLine(ArrayList hap, int marker) - { - char mapping[] = {'0', '1', '-'}; - StringBuilder ret = new StringBuilder(); - for (int h1[][] : hap) { - ret.append("\t"); - int[] tmp = h1[marker]; - for (int i = 0; i < tmp.length - 2; ++i) // individual - ret.append(mapping[tmp[i]]); - ret.append(" "); - ret.append(tmp[tmp.length - 2]); - ret.append(" "); - ret.append(tmp[tmp.length - 1]); - } - return ret.toString(); - } - - private String getQualityLine(ArrayList q, int marker) - { - StringBuilder ret = new StringBuilder(); - for (float qf[][] : q) { // family - float[] tmp = qf[marker]; - ret.append('\t'); - for (int i = 0; i < tmp.length; ++i) {// individual - ret.append(tmp[i]); - if (i != tmp.length - 1) - ret.append(' '); - } - - } - return ret.toString(); - } - - private double[] getRecombinationRates(ArrayList hap, int marker) { - double ret[] = new double[2]; - int n = 0; - for (int h1[][] : hap) { - int[] tmp = h1[marker]; - ret[0] += tmp[tmp.length - 2]; - ret[1] += tmp[tmp.length - 1]; - n += (tmp.length - 2) / 2; - } - ret[0] /= n; - ret[1] /= n; - return ret; - } - - private double[] getRecombinationRates(ArrayList hap, int marker, int firstInf1[], int firstInf2[], int lastInf1[], int lastInf2[]) { - double ret[] = new double[2]; - int n1 = 0; - int n2 = 0; - int fam = 0; - for (int h1[][] : hap) { - int[] tmp = h1[marker]; - ret[0] += tmp[tmp.length - 2]; - ret[1] += tmp[tmp.length - 1]; - if (marker > firstInf1[fam] && marker <= lastInf1[fam]) - n1 += (tmp.length - 2) / 2; - if (marker > firstInf2[fam] && marker <= lastInf2[fam]) - n2 += (tmp.length - 2) / 2; - ++fam; - } - if (n1 > 0) - ret[0] /= n1; - if (n2 > 0) - ret[1] /= n2; - return ret; - } - - public void setHyperPhaser(boolean value) - { - of.setHyperPhasing(value); - } - - public void setPhasingIterations(int value) - { - of.setPhasingIterations(value); - } - - public void printOrder(ArrayList order, int chr, boolean estimateIndividualErrors, PrintStream stream) { - printOrder(order, chr, estimateIndividualErrors, stream, true); - } - - - public void printOrder(ArrayList order, int chr, boolean estimateIndividualErrors, PrintStream stream, boolean setHaplotypes) { - - if (setHaplotypes) { - of.setHaplotypes(processHaplotypes(order), informativeMarkers(order), parentOrder(order), data, order); - } - - ArrayList order2 = new ArrayList(); - for (int i = 0; i < order.size(); ++i) - order2.add(i); - - lastOrder.clear(); - lastOrder.addAll(order2); - - double ll = of.likelihood(order2); - - if (!Double.isNaN(bestScore) && ll != bestScore) { - System.err.println("Warning: Inconsistencies in phasing, please try using randomPhase=1 and/or hyperPhaser=1 in OrderMarkers2"); - - if (ll < bestScore - 1e-6) { - if (!of.isHyperPhasing()) { - System.err.println("Enabling hyperPhaser..."); - of.setHyperPhasing(true); - } - of.setPhasingIterations(3); - ll = of.likelihood(order2); - System.err.println("Phasing likelihoods = " + bestScore + " " + ll); - } - } - - - //ArrayList iee = null; - //if (estimateIndividualErrors) - // iee = of.getIndividualErrorEstimates(order2); - - //of.setHaplotypes(data) - ArrayList phasedHaplotypes = null; - - phasedHaplotypes = of.getPhasedHaplotypes(order2, false, (printPhased == 2 || printPhased == 4)); - - ArrayList quality = null; - if (printPhased > 2) - quality = of.getPhasedQualityData(order2); - - DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(); - otherSymbols.setDecimalSeparator('.'); - DecimalFormat df3 = new DecimalFormat("0.000", otherSymbols); - DecimalFormat df4 = new DecimalFormat("#.####", otherSymbols); - - stream.println("#*** LG = " + chr + " likelihood = " + df4.format(ll)) ; - stream.println("#marker_number\tmale_position\tfemale_position\t( 0.0 )[\tphased data]") ; - - double pos1 = 0.0; - double pos2 = 0.0; - int numChr = 1; - int j = 0; - - int firstInformative1[] = new int[data.getNumFamilies()]; - int firstInformative2[] = new int[data.getNumFamilies()]; - int lastInformative1[] = new int[data.getNumFamilies()]; - int lastInformative2[] = new int[data.getNumFamilies()]; - Arrays.fill(firstInformative1, Integer.MAX_VALUE); - Arrays.fill(firstInformative2, Integer.MAX_VALUE); - - for (int i = 0; i < order.size(); ++i) { - int m = order.get(i); - int fi = 0; - for (Family2 f : data.getFamilies()) { - if (f.isFatherInformative(m)) { - if (i < firstInformative1[fi]) - firstInformative1[fi] = i; - if (i > lastInformative1[fi]) - lastInformative1[fi] = i; - } - if (f.isMotherInformative(m)) { - if (i < firstInformative2[fi]) - firstInformative2[fi] = i; - if (i > lastInformative2[fi]) - lastInformative2[fi] = i; - } - ++fi; - } - } - - for (int i = 0; i < order.size(); ++i) { - double distance1 = 0.0; - double distance2 = 0.0; - double r[] = getRecombinationRates(phasedHaplotypes, i, firstInformative1, firstInformative2, lastInformative1, lastInformative2);//getRecombinationRates(phasedHaplotypes, i); - if (sexAveraged) { - distance1 = distance2 = mappingFunction(0.5 * (r[0] + r[1])); - } else { - distance1 = mappingFunction(r[0]); - distance2 = mappingFunction(r[1]); - } - pos1 += distance1; - pos2 += distance2; - - if (Double.isInfinite(pos1) || Double.isNaN(pos1) || Double.isInfinite(pos2) || Double.isNaN(pos2)) { - stream.println("#*** LG = " + chr + "." + (numChr++)); - pos1 = 0.0; - pos2 = 0.0; - } - String qstr = ""; - if (printPhased > 2) - qstr = "#" + getQualityLine(quality, i); - - stream.println((order.get(i) + 1) + "\t" + df3.format(100 * pos1) + "\t" + df3.format(100 * pos2) + "\t( " - + df4.format(0.0) + " )" + ((printPhased != 0) ? getHaplotypeLine(phasedHaplotypes, i) : "") + qstr); - - - } - //stream.println("#COUNT = " + of.getCount()); - //if (estimateIndividualErrors) { - // stream.println("#Error estimate for individuals:"); - // stream.println("#ID\terror_rate:"); - // int i = 0; - // for (Family2 f : data.getFamilies()) - // for (int child = 0; child < f.getNumChildren(); ++child) - // stream.println("#" + f.getChildID(child) + "\t" + (iee.get(i++))); - // assert(i == iee.size()); - //} - - - } - - public void setSexAveraged(boolean sexAveraged) - { - this.sexAveraged = sexAveraged; - } - - public void orderChromosomes(boolean findIntial, boolean improveOrder, boolean estimateIndividualErrors) { - orderChromosomes(-1, findIntial, improveOrder, estimateIndividualErrors); - } - - public void orderChromosomes(int chr, boolean findIntial, boolean improveOrder, boolean estimateIndividualErrors) { - ArrayList> chromosomesPI = new ArrayList>(); - ArrayList> chromosomes = new ArrayList>(); - - int numInformative[] = new int[data.getNumFamilies()]; - - - for (int i = 0; i < numMarkers; ++i) { - int fi = 0; - for (Family2 f : data.getFamilies()) { - if (f.isFatherInformative(i) || f.isMotherInformative(i)) - ++numInformative[fi]; - ++fi; - } - } - int perm[] = Misc.randomPermutation(numMarkers); - - for (int ii = 0; ii < numMarkers; ++ii) { - int i = perm[ii]; - boolean informative = false; - int fi = 0; - for (Family2 f : data.getFamilies()) - if ((numInformative[fi++] > 1 || !improveOrder) && (f.isFatherInformative(i) || f.isMotherInformative(i))) - informative = true; - int nameI = chromosomeMap.getLGName(i); - for (int j = chromosomes.size(); j <= nameI; ++j) { - chromosomesPI.add(new ArrayList()); - chromosomes.add(new ArrayList()); - } - if (informative) - chromosomesPI.get(nameI).add(i); - chromosomes.get(nameI).add(i); - } - - int numChromosomes = chromosomes.size() - 1; - System.err.println("Number of LGs = " + numChromosomes); - - for (int c = 1; c <= numChromosomes; ++c) { - if (chr <= 0 || c == chr) { - - ArrayList markers = new ArrayList(); - for (int i : chromosomesPI.get(c)) { - markers.add(i); - } - - ArrayList order = orderChromosome(markers, findIntial, improveOrder); - printOrder(order, c, estimateIndividualErrors, System.out); - } - } - } - - public ArrayList informativeMarkers(ArrayList markers) - { - ArrayList ret = new ArrayList(); - for (Family2 f : data.getFamilies()) { - int inf[] = new int[markers.size()]; - int k = 0; - for (int m : markers) { - int i = 0; - if (f.isFatherInformative(m)) - i+=1; - if (f.isMotherInformative(m)) - i+=2; - inf[k++] = i; - } - ret.add(inf); - } - return ret; - } - - public ArrayList parentOrder(ArrayList markers) - { - ArrayList ret = new ArrayList(); - if (of.getRefineParentOrder()) { - int numM = markers.size(); - int numF = data.getNumFamilies(); - for (int f = 0; f < numF; ++f) { - ret.add(new char[numM]); - } - for (int m = 0; m < numM; ++m) { - char po[] = data.getIgnoreParentOrder(markers.get(m)); - for (int f = 0; f < numF; ++f) - ret.get(f)[m] = po[f]; - } - } - return ret; - } - - - public ArrayList processHaplotypes(ArrayList markers) - { - ArrayList ret = new ArrayList(); - for (Family2 f : data.getFamilies()) { - float h[][][] = new float[markers.size()][f.getNumChildren()][4]; - int k = 0; - for (int m : markers) { - float prob[] = f.getProb(m); - if (prob == null) { - prob = new float[4 * f.getNumChildren()]; - Arrays.fill(prob, 1.0f); - } - for (int i = 0; i < f.getNumChildren(); ++i) { - float max = Float.MIN_NORMAL; - for (int j = 0; j < 4; ++j) - max = Math.max(prob[4 * i + j], max); - for (int j = 0; j < 4; ++j) { - h[k][i][j] = prob[4 * i + j] / max; - } - } - ++k; - } - ret.add(h); - } - //System.err.println(ret.get(0).length); - - - /*for (Family2 f : data.getFamilies()) { - - byte h1[][] = f.getPaternalHaplotypes(markers); - byte h2[][] = f.getMaternalHaplotypes(markers); - - for (int mi = 0; mi < markers.size(); ++mi) { - int m = markers.get(mi); - if (!f.isFatherInformative(m)) - for (int i = 0; i < h1.length; ++i) - h1[i][mi] = 2; - if (!f.isMotherInformative(m)) - for (int i = 0; i < h2.length; ++i) - h2[i][mi] = 2; - if (f.isFatherInformative(m) && f.isMotherInformative(m)) - for (int i = 0; i < h2.length; ++i) - if (h1[i][mi] == 2 && h2[i][mi] == 2 && f.getGenotype(m, i) == 2) { - h1[i][mi] = 3; - h2[i][mi] = 3; - } - } - ret.add(Misc.transpose(h1)); - ret.add(Misc.transpose(h2)); - }*/ - return ret; - } - - private double bestScore = 0; - - private ArrayList orderChromosome(ArrayList markersAll, boolean findInitial, boolean improveOrder) { - - ArrayList markers = new ArrayList(); - for (int m1 : markersAll) { - boolean informative = false; - for (Family2 f : data.getFamilies()) - if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) - informative = true; - if (informative) - markers.add(m1); - } - - System.err.println("Number of markers = " + markers.size()); - - of.setHaplotypes(processHaplotypes(markers), informativeMarkers(markers), parentOrder(markers), data, markers); - - if (improveOrder) { - ArrayList markers2 = of.findOrder(findInitial); - bestScore = of.getBestScore(); - for (int i = 0; i < markers.size(); ++i) - markers2.set(i, markers.get(markers2.get(i))); - markers = markers2; - } else - bestScore = Double.NaN; - - ArrayList ret = new ArrayList(); - for (int m : markers) - ret.add(m); - return ret; - } - - - public void setRefineParentOrder(boolean value) { - // TODO Auto-generated method stub - of.setRefineParentOrder(value); - } - - - - -} diff --git a/software/LepMap3/lm3/src/OrderFinder.java b/software/LepMap3/lm3/src/OrderFinder.java deleted file mode 100644 index 10d0a1d..0000000 --- a/software/LepMap3/lm3/src/OrderFinder.java +++ /dev/null @@ -1,2953 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP2. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -//TODO: superPhaserer -import java.util.ArrayList; - -import java.util.Arrays; -import java.util.Collections; -import java.util.concurrent.*; -//import java.util.concurrent.atomic.DoubleAdder; in java 1.8 -import java.io.PrintStream; - -//TODO: Scaling to recombination parameters... To reduce end effects -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; - -public class OrderFinder { - ArrayList originalHaplotypes; - ArrayList originalInformative; - ArrayList originalInformation; - ArrayList originalParentOrder; - - private int numMergeIterations = 6; - private int numOriginalMarkers; - - private double RECOMBINATION1 = 0.01; - private double RECOMBINATION2 = 0.01; - private double INTERFERENCE1 = 0.01; - private double INTERFERENCE2 = 0.01; - - private int phasingIterations = 1; - - private String dataScaleString = "1.0"; - private double fullDataScale = 1.0; - private double dataScale = 1.0; - private double MAX_SCALE = 1.0; - private double CAP_SCALE = 1.0; - private int dataScalingMode = 1; - - private boolean selfingPhase = false; - - private boolean hyperPhasing = false; - - private double DISTANCE_LIMIT = 0.01; - - private boolean phasedData = false; - - private int usePhysicalPositions = 0; - private double logPhysicalPenalty = 0.0; - - private int NUM_THREADS = 1; - - float qTables[][][] = null; - double __tmpRec[][][] = new double[2][2][]; - - //to avoid new calls in merge class - double forwardM1[] = null; - double forwardM2[] = null; - double backwardM1[] = null; - double backwardM2[] = null; - double scoresM[] = null; - - ArrayList markerNames = new ArrayList(); - - long originalPhysicalPositions[] = null; - - String individualNames[] = null; - - private SingleFamily[] sfs; - - private PhysicalFamily[] pfs; - - OrderFinder() - { - } - - // for future parallel implementation - OrderFinder(OrderFinder other) - { - numMergeIterations = other.numMergeIterations; - RECOMBINATION1 = other.RECOMBINATION1; - RECOMBINATION2 = other.RECOMBINATION2; - INTERFERENCE1 = other.INTERFERENCE1; - INTERFERENCE2 = other.INTERFERENCE2; - - phasingIterations = other.phasingIterations; - - dataScaleString = other.dataScaleString; - fullDataScale = other.fullDataScale; - dataScale = other.dataScale; - MAX_SCALE = other.MAX_SCALE; - CAP_SCALE = other.CAP_SCALE; - dataScalingMode = other.dataScalingMode; - hyperPhasing = other.hyperPhasing; - DISTANCE_LIMIT = other.DISTANCE_LIMIT; - phasedData = other.phasedData; - selfingPhase = other.selfingPhase; - NUM_THREADS = other.NUM_THREADS; - } - - public void setDataScale(String s, double maxS, double capS, int mode) - { - MAX_SCALE = maxS; - CAP_SCALE = 1.0 / capS; - dataScaleString = s; - dataScalingMode = mode; - } - public void setPhasingIterations(int value) - { - phasingIterations = value; - } - - public void setSelfingPhase(boolean value) - { - selfingPhase = value; - } - - public void setUsePhysical(int value, double prob) - { - usePhysicalPositions = value; - logPhysicalPenalty = Math.log(prob); - } - - private void initDataScale() - { - int numIndividuals = 0; - for (SingleFamily sf : sfs) - numIndividuals += sf.numIndividuals; - if (dataScaleString.equals("M/N")) { - dataScale = (double)numIndividuals / numOriginalMarkers; - } else { - int mpn = dataScaleString.indexOf("M/N"); - if (mpn >= 0) { - if (mpn == 0 || mpn != dataScaleString.length() - 3) { - Error.error(304); - System.exit(-1); - } - dataScale = Double.parseDouble(dataScaleString.substring(0, mpn)) * numIndividuals / numOriginalMarkers; - } else { - int pn = dataScaleString.indexOf("/N"); - if (pn >= 0) { - if (pn == 0 || pn != dataScaleString.length() - 2) { - //System.err.println("|" + dataScaleString + "|"); - Error.error(303); - System.exit(-1); - } - dataScale = Double.parseDouble(dataScaleString.substring(0, pn)) / numOriginalMarkers; - } else { - dataScale = Double.parseDouble(dataScaleString); - } - } - } - if (dataScale > 1.0) - dataScale = 1.0; - fullDataScale = dataScale; - System.err.println("Setting dataScale to " + dataScale + " all likelihoods will be multiplied by " + (1.0 / dataScale)); - } - - public void setRecombination(double rec1, double rec2, double inter1, double inter2) { - RECOMBINATION1 = rec1; - RECOMBINATION2 = rec2; - INTERFERENCE1 = inter1; - INTERFERENCE2 = inter2; - initTmpRec(); - } - - private final double WORK_PER_THREAD = 300.0 * 300.0 * 100.0; // at least this amount of individual score evaluations should be done in a single thread... - private final int SPACE_PER_THREAD = 2000000; // space for each thread to store scores... - - private int calcNumThreadsPolish(double numMarkers, double numPositions, double numIndividuals) { - double n = numMarkers; - double m = numPositions; - double k = numIndividuals; - double threads = n * m * k / WORK_PER_THREAD; - if (threads >= 0.25 * numMarkers) - threads = 0.25 * numMarkers; // at least 4 jobs per thread, overhead <= 25% - return (int) Math.min(NUM_THREADS, threads); - } - - private int calcNumThreadsScore(int numMarkers, int numPositions, int numIndividuals, int maxJobs) { - double n = numMarkers; - double m = numPositions; - double k = numIndividuals; - double threads = Math.min(maxJobs, n * m) * k / WORK_PER_THREAD; - if (threads >= 0.25 * numMarkers * numPositions) - threads = 0.25 * numMarkers * numPositions; // at least 4 jobs per thread, overhead <= 25% - return (int) Math.min(NUM_THREADS, threads); - } - - public void initTmpRec(){ //double scale) { - - double r1 = RECOMBINATION1; - double r2 = RECOMBINATION2; - double i1 = INTERFERENCE1; - double i2 = INTERFERENCE2; - - //tmpRec[0][0] = new double[]{(1 - r1) * (1 - r2), i1 * (1 - r2), (1 - r1) * i2, i1 * i2}; - //tmpRec[0][1] = new double[]{(1 - r1) * (1 - r2), i1 * (1 - r2), (1 - r1) * r2, i1 * r2}; - //tmpRec[1][0] = new double[]{(1 - r1) * (1 - r2), r1 * (1 - r2), (1 - r1) * i2, r1 * i2}; - //tmpRec[1][1] = new double[]{(1 - r1) * (1 - r2), r1 * (1 - r2), (1 - r1) * r2, r1 * r2}; //phew... - - //assumed 1-r1 and 1-r2 are close to 1 - __tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; - __tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; - __tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; - __tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... - - for (double t2[][] : __tmpRec) - for (double t[] : t2) - for (int i = 0; i < t.length; ++i) - t[i] = Math.log(t[i]); - - //for first version of recombination scaling -/* double tmpRec1[][][] = new double[2][2][]; - double tmpRec2[][][] = new double[2][2][]; - - double logI1 = Math.log(i1); - tmpRec1[0][0] = new double[]{0.0, logI1, 0.0, logI1}; - tmpRec1[0][1] = new double[]{0.0, logI1, 0.0, logI1}; - double logR1 = Math.log(r1); - tmpRec1[1][0] = new double[]{0.0, logR1, 0.0, logR1}; - tmpRec1[1][1] = new double[]{0.0, logR1, 0.0, logR1}; //phew... - - double logI2 = Math.log(i2); - tmpRec2[0][0] = new double[]{0.0, 0.0, logI2, logI2}; - double logR2 = Math.log(r2); - tmpRec2[0][1] = new double[]{0.0, 0.0, logR2, logR2}; - tmpRec2[1][0] = new double[]{0.0, 0.0, logI2, logI2}; - tmpRec2[1][1] = new double[]{0.0, 0.0, logR2, logR2}; //phew...*/ - } - - public void setIdenticalLimit(double limit) { - DISTANCE_LIMIT = limit; - } - - - public void setNumThreads(int numThreads) - { - NUM_THREADS = numThreads; - } - - public void setNumMergeIterations(int numIterations) - { - numMergeIterations = numIterations; - } - - public void setHyperPhasing(boolean value) - { - hyperPhasing = value; - } - - public boolean isHyperPhasing() - { - return hyperPhasing; - } - - - public ArrayList getPhasedHaplotypes(ArrayList markers, boolean silent, boolean maskHaplotypes) - { - numOriginalMarkers = originalHaplotypes.get(0).length; - ArrayList ret = new ArrayList(); - ArrayList retI = new ArrayList(); - - for (float h[][][] : originalHaplotypes) { - int numIndividuals = h[0].length; - int ph[][] = new int[numOriginalMarkers][numIndividuals * 2 + 2]; - ret.add(ph); - retI.add(new int[numIndividuals]); - } - double c[] = new double[2]; - for (SingleFamily sf : sfs) { - double tmp[] = sf.Viterbi2(markers, ret, retI, silent, maskHaplotypes); - c[0] += tmp[0]; - c[1] += tmp[1]; - } - if (!silent) { - System.err.println("number of recombinations = " + c[0] + " logL = " + c[1]); - int i = 0; - for (int r[] : retI) { - for (int j = 0; j < r.length; ++j) - if (r[j] >= 1) { - System.err.println("Individual\t" + individualNames[i + j] + "\trecombines\t" + r[j] + "\ttimes"); - } - i += r.length; - } - } - return ret; - } - - public ArrayList getPhasedHaplotypes(ArrayList markers) - { - return getPhasedHaplotypes(markers, false, false); - } - - public ArrayList getPhasedQualityData(ArrayList markers) - { - numOriginalMarkers = originalHaplotypes.get(0).length; - ArrayList quality = new ArrayList(); - - for (float h[][][] : originalHaplotypes) { - int numIndividuals = h[0].length; - float q[][] = new float[numOriginalMarkers][numIndividuals * 4]; - quality.add(q); - } - for (SingleFamily sf : sfs) { - sf.Viterbi3(markers, quality); - } - return quality; - } - - //checks whether posterior is informative for paternal (parent=0) or maternal (parent=1) side - private boolean nonMissing(int parent, float prob[]){ - final double MISSING_LIMIT = Math.log(0.8); // second posterior of 0.8 or higher is considered missing... - if (parent == 0) - return (prob[0] + prob[2] < MISSING_LIMIT && prob[1] + prob[3] < MISSING_LIMIT); // + is product but max(a,b) = 0 so a + b is min... - else { - assert(parent == 1); - return (prob[0] + prob[1] < MISSING_LIMIT && prob[2] + prob[3] < MISSING_LIMIT); // + is product but max(a,b) = 0 so a + b is min... - } - } - - - - public void setHaplotypes(ArrayList data, ArrayList dataInf, ArrayList dataParentOrder, Data2 data2, ArrayList order) - { - if (order.size() == 0) // nothing to do... - return; - - phasedData = data2.isPhased(); - - originalHaplotypes = new ArrayList(); - - numOriginalMarkers = data.get(0).length; - -// haplotypes = new ArrayList(); - originalInformative = new ArrayList(); - //informative = new ArrayList(); - - originalInformation = new ArrayList(); - //information = new ArrayList(); - - originalParentOrder = new ArrayList(); - - int numIndividuals = 0; - int fam = 0; - for (float h[][][] : data) { - char parentOrder[] = null; - if (refineParentOrder) - parentOrder = dataParentOrder.get(fam); - - int inf[] = new int[numOriginalMarkers]; - float inf2[] = new float[numOriginalMarkers]; - int numInd = (h.length > 0) ? h[0].length : 0; - //float ohn[][][] = new float[numOriginalMarkers][numInd][5]; - float ohn[][][] = new float[numOriginalMarkers][numInd][4]; - float hn[][][] = new float[numOriginalMarkers][][]; - for (int m = 0; m < numOriginalMarkers; ++m) { - double sume = 0.0; - for (int ind = 0; ind < numInd; ++ind) { - for (int haplotype = 0; haplotype < 4; ++haplotype) - ohn[m][ind][haplotype] = (float) Math.log(h[m][ind][haplotype]); - - double e = 2.0 - Misc.entropy(h[m][ind]); - sume += e; - //ohn[m][ind][4] = (float) (e); //store information content for element 5... for future use ... - } - hn[m] = ohn[m]; - inf2[m] = (float) (sume / numInd); - //System.err.println(m + "\t" + (sume / numInd)); - - if (dataInf == null) { - boolean allMissing1 = true; - for (float hap[] : ohn[m]) - if (nonMissing(0, hap)) - allMissing1 = false; - - boolean allMissing2 = true; - for (float hap[] : ohn[m]) - if (nonMissing(1, hap)) - allMissing2 = false; - - if (!allMissing1) - inf[m] += 1; - if (!allMissing2) - inf[m] += 2; - } else - inf[m] = dataInf.get(fam)[m]; - } - ++fam; - //haplotypes.add(hn); - originalHaplotypes.add(ohn); - - originalInformative.add(inf); - //informative.add(new int[numOriginalMarkers]); - - originalInformation.add(inf2); - //information.add(new float[numOriginalMarkers]); - - originalParentOrder.add(parentOrder); - - // - // - numIndividuals += hn[0].length; - } - - markerNames = order; - - if (usePhysicalPositions > 0) { - //physicalPositions = new long[numOriginalMarkers]; - originalPhysicalPositions = new long[numOriginalMarkers]; - //order.size == numOriginalMarkers? - for (int i = 0; i < order.size(); ++i) { - originalPhysicalPositions[i] = data2.getMarkerNameNumber(order.get(i)); - //System.err.println(order.get(i) + "\t" + (data2.getMarkerNameNumber(order.get(i)) >>> 32)); - } - - pfs = new PhysicalFamily[1]; - pfs[0] = new PhysicalFamily(); - } - - individualNames = new String[numIndividuals]; - for (int i = 0; i < numIndividuals; ++i) - individualNames[i] = data2.getIndividualName(i); - - qTables = new float[numIndividuals][numOriginalMarkers + 1][4]; - //mergePath = new boolean[numOriginalMarkers / 2 + 1][numOriginalMarkers / 2 + 2]; - - int numFamilies = originalHaplotypes.size(); - - sfs = new SingleFamily[numFamilies]; - - for (int i = 0; i < numFamilies; ++i) { - sfs[i] = new SingleFamily(i); - } - - forwardM1 = new double[numOriginalMarkers]; - forwardM2 = new double[numOriginalMarkers]; - backwardM1 = new double[numOriginalMarkers]; - backwardM2 = new double[numOriginalMarkers]; - scoresM = new double[SPACE_PER_THREAD * NUM_THREADS]; //space to store enough values to justify creating threads... - - initDataScale(); - } - - public void initMarkers(ArrayList markers) - { - } - - - public double scoreBetter(ArrayList markers, double limit) - { - return score(markers); - } - - public double score(ArrayList markers) - { - return likelihood(markers); - } - - public double likelihood(ArrayList markers) - { - return likelihood(markers, false); - } - - public double likelihood(ArrayList markers, boolean keepTables) - { - initMarkers(markers); - double ll = 0.0; - - /*if (NUM_THREADS > 1 && originalHaplotypes.size() > 1 && markers.size() >= 32) { - ExecutorService ftb = Executors.newFixedThreadPool(NUM_THREADS); - CompletionService ecs = new ExecutorCompletionService(ftb); - - for (SingleFamily sf : sfs) - ecs.submit(sf); - - try { - for (int t = 0; t < sfs.length; ++t) - ll += ecs.take().get(); - } catch (Exception e){ - Error.error(-999999); - } - if (keepTables) - for (SingleFamily sf : sfs) - ftb.execute(sf); - - ftb.shutdown(); - } else*/ { - for (SingleFamily sf : sfs) - ll += sf.phase(markers); - if (keepTables) { - for (SingleFamily sf : sfs) - sf.computeTables(markers); - } - } - //physical info... - if (pfs != null) { - for (PhysicalFamily pf : pfs) - ll += pf.likelihood(markers, keepTables); - } - - return ll; - } - - //TODO: DISTANCE_LIMIT - private class PhysicalFamily{ - //private double logScore = Math.log(0.01); - private ArrayList initMarkers = null; - - private double scoreLong(long c1, long c2) { - if ((c1 | 0xFFFFFFFFl) == (c2 | 0xFFFFFFFFl)) // same contig - return 0; - return logPhysicalPenalty; //TODO: position within contigs... - // positions (c1 & 0xFFFFFFFFl) and (c2 & 0xFFFFFFFFl) - } - - - private double likelihood(ArrayList markers_, boolean keepTables) - { - int numMarkers = markers_.size(); - double ll = 0.0; - for (int m = 1; m < numMarkers; ++m) - ll += scoreLong(originalPhysicalPositions[markers_.get(m - 1)], originalPhysicalPositions[markers_.get(m)]); - //use physicalPosition - if (keepTables) - initMarkers = markers_; - return ll; - } - - private double polishScore(int perm[], int pos, ArrayList markers) - { - double ll = 0.0; - int k = perm.length; - for (int i = 1; i < k; ++i) - ll += scoreLong(originalPhysicalPositions[perm[i - 1]], originalPhysicalPositions[perm[i]]); - - if (pos > 0) - ll += scoreLong(originalPhysicalPositions[markers.get(pos - 1)], originalPhysicalPositions[perm[0]]); - - if (pos + k < markers.size()) - ll += scoreLong(originalPhysicalPositions[perm[k - 1]], originalPhysicalPositions[markers.get(pos + k)]); - - return ll; - } - private double scoreDistance(int pos1, int pos2) - { - return scoreLong(originalPhysicalPositions[initMarkers.get(pos1)], originalPhysicalPositions[pos2]); - } - - // assumes likelihood(markers, true) has been called - private double score(int marker, int pos) - { - //if (true) - // return 0.0; - int prev = pos - 1; - int next = pos; - if (prev >= 0 && initMarkers.get(prev).equals(marker)) - --prev; - if (next < initMarkers.size() && initMarkers.get(next).equals(marker)) - ++next; - double ll = 0.0; - if (prev >= 0) - ll += scoreLong(originalPhysicalPositions[initMarkers.get(prev)], originalPhysicalPositions[marker]); - if (next < initMarkers.size()) - ll += scoreLong(originalPhysicalPositions[marker], originalPhysicalPositions[initMarkers.get(next)]); - - return ll; - } - } - - private class SingleFamily implements Callable, Runnable{ - public int fam; - - public int numIndividuals; - - //private int hyperMarkers[] = new int[numOriginalMarkers]; - double forwardSP[][][]; - double backwardSP[][][]; - - double logLs[]; - - double tmpB[] = new double[16]; - - double forwardV[][]; - double forwardV2[][]; - int path[][]; - - RecombinationScale recScale = (dataScalingMode == 2) ? new RecombinationScale2() : new RecombinationScale1(); - - public int getFamilyIndex() - { - return fam; - } - - //index 4 binary indexes into one array index - private int index4(int i1, int i2, int i3, int i4) - { - return 8 * i1 + 4 * i2 + 2 * i3 + i4; - //return (i1 << 3) + (i2 << 2) + (i3 << 1) + i4; -// return ((2 * i1 + i2) * 2 + i3) * 2 + i4; -// int ret = i1 + i1 + i2; -// ret += ret + i3; -// ret += ret + i4; -// return ret; - } - - public SingleFamily(int fam) - { - this.fam = fam; - - numIndividuals = originalHaplotypes.get(fam)[0].length; - - forwardSP = new double[numIndividuals][numOriginalMarkers + 1][16]; - backwardSP = new double[numIndividuals][2][16]; - logLs = new double[numIndividuals]; - - for (int hi = 0; hi < numIndividuals; ++hi) { - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - if (r1 > 0 || r2 > 0) { - forwardSP[hi][0][index4(0,0,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardSP[hi][0][index4(0,1,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardSP[hi][0][index4(1,0,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardSP[hi][0][index4(1,1,r1,r2)] = Double.NEGATIVE_INFINITY; - } - } - - forwardV = new double[numOriginalMarkers + 1][16]; - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - if (r1 > 0 || r2 > 0) { - forwardV[0][index4(0,0,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardV[0][index4(0,1,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardV[0][index4(1,0,r1,r2)] = Double.NEGATIVE_INFINITY; - forwardV[0][index4(1,1,r1,r2)] = Double.NEGATIVE_INFINITY; - } - - forwardV2 = new double[numOriginalMarkers + 1][16]; - - - path = new int[numOriginalMarkers + 1][16]; - - - } - - //swaps t[i] and t[j] - private void swap(int i, int j, float t[]) - { - float tmp = t[i]; - t[i] = t[j]; - t[j] = tmp; - } - - - public double phase(ArrayList markers) - { - double ret = 0.0; - //System.err.println("phasing..."); - -// int numInfMarkers = 0; - //numInfMarkers1 = 0; - //numInfMarkers2 = 0; - -// int inf[] = originalInformative.get(fam); -// int numMarkers = markers_.size(); - //int markers[] = new int[numMarkers]; - - - - //for (int mi = 0; mi < numMarkers; ++mi) { - // int m = markers_.get(mi); - // if (inf[m] > 0) { - // markers[numInfMarkers++] = m; - // //if ((inf[m] & 1) == 1) - // ++numInfMarkers1; - //if ((inf[m] & 2) == 2) - // ++numInfMarkers2; - - // } - //} - - //TODO: Check if this is really needed (or is markers_ <=> markers enough) - int inf[] = originalInformative.get(fam); - ArrayList markers_ = new ArrayList(); - for (int m : markers) - if (inf[m] > 0) - markers_.add(m); - recScale.init(markers_); - - //System.err.println(numMarkers1 + "\t" + numMarkers2 + "\t" + numMarkersAll); - - if (phasedData) { - ret += Viterbi2Fast(markers_); - } else { - if (hyperPhasing) { - double ll = hyperPhaser(markers_); - //iterate - if (phasingIterations > 1) { - //System.err.println(ll); - float phap[][][] = getPhase(markers_); - for (int i = 1; i < phasingIterations; ++i) { - randomPhase(markers_); - double ll2 = hyperPhaser(markers_); - //System.err.println(ll2); - if (ll2 > ll) { - ll = ll2; - phap = getPhase(markers_); - } - } - setPhase(markers_, phap); - } - ret += ll; - } else { - //double l[]; - //while ((l = superPhaser(numInfMarkers, markers))[0] > 0){ - // n += l[0]; - //} - //ret += l[1]; - double ll = superPhaser(markers_); - //iterate - if (phasingIterations > 1) { - float phap[][][] = getPhase(markers_); - //System.err.println(ll); - for (int i = 1; i < phasingIterations; ++i) { - randomPhase(markers_); - double ll2 = superPhaser(markers_); - //System.err.println(ll2); - if (ll2 > ll) { - ll = ll2; - phap = getPhase(markers_); - } - } - setPhase(markers_, phap); - } - ret += ll; - } - } - //System.err.println("running superPhaser!\n" + n + " changes"); - return ret; - } - - private float[][][] getPhase(ArrayList markers) - { - int numMarkers = markers.size(); - - float[][][] hap = originalHaplotypes.get(fam); - float[][][] ret = new float[numMarkers][numIndividuals][4]; - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - for (int i = 0; i < numIndividuals; ++i) { - for (int j = 0; j < 4; ++j) - ret[mi][i][j] = hap[m][i][j]; - } - } - - return ret; - } - - private void setPhase(ArrayList markers, float newhap[][][]) - { - int numMarkers = markers.size(); - - float[][][] hap = originalHaplotypes.get(fam); - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - for (int i = 0; i < numIndividuals; ++i) { - for (int j = 0; j < 4; ++j) - hap[m][i][j] = newhap[mi][i][j]; - } - } - } - - private void randomPhase(ArrayList markers) - { - float[][][] hap = originalHaplotypes.get(fam); - - for (int m : markers) { - if (!selfingPhase) { - if (Misc.random() < 0.5) - for (int i = 0; i < numIndividuals; ++i) { - swap(0, 2, hap[m][i]); - swap(1, 3, hap[m][i]); - } - if (Misc.random() < 0.5) - for (int i = 0; i < numIndividuals; ++i) { - swap(0, 1, hap[m][i]); - swap(2, 3, hap[m][i]); - } - } else { // do not mix phase with selfingPhase - if (Misc.random() < 0.5) - for (int i = 0; i < numIndividuals; ++i) { - swap(0, 2, hap[m][i]); - swap(1, 3, hap[m][i]); - swap(0, 1, hap[m][i]); - swap(2, 3, hap[m][i]); - } - } - } - } - - - - public double hyperPhaser(ArrayList markers) - { - //totalMarkers = markers.size(); - return hyperPhaser_(1, markers); - } - - public double hyperPhaser_(int adder, ArrayList markers) - { - int totalMarkers = markers.size(); - if (totalMarkers >= 6 * adder) - hyperPhaser_(2 * adder, markers); - ArrayList hyperMarkers = new ArrayList(); - for (int i = 0; i < totalMarkers; i+=adder) - hyperMarkers.add(markers.get(i)); - dataScale = Math.min(1.0, fullDataScale * totalMarkers / hyperMarkers.size()); - return superPhaser(hyperMarkers); - } - public double superPhaser(ArrayList markers) - { - double ret = 0.0; - int n = 0; - double l[]; - while ((l = superPhaser_(markers))[0] > 0){ - n += l[0]; - } - ret += l[1]; - //System.err.println("running superPhaser!\n" + n + " changes"); - return ret; - } - - //phase data by maximizing its likelihood - public double[] superPhaser_(ArrayList markers) - { - double logL = 0.0; - - float[][][] hap = originalHaplotypes.get(fam); - char[] parentOrder = originalParentOrder.get(fam); - - int numPhases = 7; - if (refineParentOrder) - numPhases = 14; - double pSP[] = new double[numPhases]; - double QPhaseSP[] = new double[numPhases]; - - int numParentChanges = 0; - - // forwardSP and iscaleSP have been initialized already... - - for (int hi = 0; hi < numIndividuals; ++hi) { - logL += ViterbiForwardIndividual(hi, forwardSP[hi], markers, null); - } - //System.err.println("logL = " + logL); - - int numMarkers = markers.size(); - - initBackward(numMarkers & 1); - //for (int hi = 0; hi < numIndividuals; ++hi) - // for (int b1 = 0; b1 < 2; ++b1) - // for (int b2 = 0; b2 < 2; ++b2) - // for (int r1 = 0; r1 < 2; ++r1) - // for (int r2 = 0; r2 < 2; ++r2) - // backwardSP[hi][numMarkers2 & 1][b1][b2][r1][r2] = 0.0; - - int s1 = 0; - int s2 = 0; - int phasesChanged = 0; - for (int mi = numMarkers - 1; mi >= 0; --mi) { - int m = markers.get(mi); - - Arrays.fill(QPhaseSP, 0.0); - for (int hi = 0; hi < numIndividuals; ++hi) { - double fTable[] = forwardSP[hi][mi + 1]; - double bTable[] = backwardSP[hi][(mi + 1) & 1]; - Arrays.fill(pSP, Double.NEGATIVE_INFINITY); - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - for (int a1 = 0; a1 < 2; ++a1) - for (int a2 = 0; a2 < 2; ++a2) { - int b1 = a1 ^ s1; - int b2 = a2 ^ s2; - - double commonTerm = fTable[index4(b1,b2,r1,r2)] + bTable[index4(a1,a2,r1,r2)]; - pSP[0] = Math.max(pSP[0], commonTerm); // no change - if (!selfingPhase) { - pSP[1] = Math.max(pSP[1], fTable[index4(b1 ^ 1,b2 ,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for male - pSP[2] = Math.max(pSP[2], fTable[index4(b1 ,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for female - } - pSP[3] = Math.max(pSP[3], fTable[index4(b1 ^ 1,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); // change phase of forward for both - commonTerm -= emission(hap[m][hi], b1, b2); - if (!selfingPhase) { - pSP[4] = Math.max(pSP[4], commonTerm + emission(hap[m][hi], b1 ^ 1, b2 )); // change phase of marker m for male - pSP[5] = Math.max(pSP[5], commonTerm + emission(hap[m][hi], b1 , b2 ^ 1)); // change phase of marker m for female - } - pSP[6] = Math.max(pSP[6], commonTerm + emission(hap[m][hi], b1 ^ 1, b2 ^ 1)); // change phase of marker m for both - - if (refineParentOrder && parentOrder[m] == '+') { // change parental genotypes for marker m... - commonTerm = fTable[index4(b1,b2,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1, b2); - pSP[7] = Math.max(pSP[7], commonTerm + emission(hap[m][hi], b2, b1)); // no change, but parents - if (!selfingPhase) { - pSP[8] = Math.max(pSP[8], fTable[index4(b1 ^ 1,b2 ,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1 ^ 1, b2) + emission(hap[m][hi], b2, b1 ^ 1)); // change phase of forward for male - pSP[9] = Math.max(pSP[9], fTable[index4(b1 ,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1, b2 ^ 1) + emission(hap[m][hi], b2 ^ 1, b1)) ; // change phase of forward for female - } - pSP[10] = Math.max(pSP[10], fTable[index4(b1 ^ 1,b2 ^ 1,r1,r2)] + bTable[index4(a1,a2,r1,r2)] - emission(hap[m][hi], b1 ^ 1, b2 ^ 1) + emission(hap[m][hi], b2 ^ 1, b1 ^ 1)); // change phase of forward for both - if (!selfingPhase) { - pSP[11] = Math.max(pSP[11], commonTerm + emission(hap[m][hi], b2, b1 ^ 1)); // change phase of marker m for male - pSP[12] = Math.max(pSP[12], commonTerm + emission(hap[m][hi], b2 ^ 1, b1)); // change phase of marker m for female - } - pSP[13] = Math.max(pSP[13], commonTerm + emission(hap[m][hi], b2 ^ 1, b1 ^ 1)); // change phase of marker m for both - } - - //double em = emission(hap[m][hi], b1 ^ 1, b2 ^ 1); - //pSP[7] = Math.max(pSP[7], fTable[b1 ^ 1][b2 ][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1 ^ 1, b2) + em); // change forward for male and female for marker m - //pSP[8] = Math.max(pSP[8], fTable[b1 ][b2 ^ 1][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1, b2 ^ 1) + em); // change forward for female and male for marker m - //pSP[9] = Math.max(pSP[9], fTable[b1 ^ 1][b2 ][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1 ^ 1, b2) + emission(hap[m][hi], b1, b2 ^ 1)); // change forward for male and female for marker m - //pSP[10] = Math.max(pSP[10], fTable[b1 ][b2 ^ 1][r1][r2] + bTable[a1][a2][r1][r2] - emission(hap[m][hi], b1, b2 ^ 1) + emission(hap[m][hi], b1 ^ 1, b2)); // change forward for female and male for marker m - } - - for (int d=0; d < numPhases; ++d) - QPhaseSP[d] += pSP[d]; - - } - - //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6]); - int e1 = 0; - int e2 = 0; - - int max = 0; - for (int j = 1; j < numPhases; ++j) - if (QPhaseSP[j] > QPhaseSP[max] + 1e-9) - max = j; - - if (max >= 7) { //refineParentOrder - ++numParentChanges; - for (int i = 0; i < numIndividuals; ++i) - swap(1, 2, hap[m][i]); // swap mother and father... - max -= 7; // continue with phase - } - - if (max < 4) { - s1 = s1 ^ (max & 1); - s2 = s2 ^ (max >> 1); - } - else if (max < 7){ - e1 = (max - 3) & 1; - e2 = (max - 3) >> 1; - } else { // unreachable code... - e1 = (max & 1) ^ 1; - e2 = (max & 1); - s1 = s1 ^ e2; - s2 = s2 ^ e1; - } - //System.err.println("" + s1 + s2); - - - if ((s1 ^ e1) == 1 || (s2 ^ e2) == 1) { - ++phasesChanged; - if ((s1 ^ e1) == 1) - for (int i = 0; i < numIndividuals; ++i) { - swap(0, 2, hap[m][i]); - swap(1, 3, hap[m][i]); - } - if ((s2 ^ e2) == 1) { - for (int i = 0; i < numIndividuals; ++i) { - swap(0, 1, hap[m][i]); - swap(2, 3, hap[m][i]); - } - } - } - if (max > 0) { - //System.err.print(max + "\t"); - //System.err.print((QPhaseSP[max] - QPhaseSP[0]) + "\t"); - //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6]); - //System.err.println(QPhaseSP[0] + "\t" + QPhaseSP[1] + "\t" + QPhaseSP[2] + "\t" + QPhaseSP[3] + "\t" + QPhaseSP[4] + "\t" + QPhaseSP[5] + "\t" + QPhaseSP[6] + "\t" + QPhaseSP[7] + "\t" + QPhaseSP[8]); - - //scale = Math.exp((QPhaseSP[0] - QPhaseSP[max]) * onePerNumIndividuals); //Math.pow(QPhase[0] / QPhase[max], 1.0 / numIndividuals); - //System.err.println(Math.log10(QPhaseSP[max] / QPhaseSP[0]) + "\t" + max + "\t" + mi); - } - - updateBackward(mi, 1, markers); - } - //if (numParentChanges > 0) { - // System.err.println("Changing " + numParentChanges + " parents"); - //} - //if (phasesChanged > 0) - // System.err.println("Family " + fam + " changed " + phasesChanged + " marker phases"); - //System.err.println("logL = " + logL); - return new double[]{phasesChanged + numParentChanges, logL}; - } - - public void computeTables(ArrayList markers_) - { - - int fi = 0; //index for each individual - for (int i = 0; i < fam; ++i) - fi += originalHaplotypes.get(i)[0].length; - - int numMarkers = markers_.size(); - - recScale.init(markers_); - - // forwardSP and iscaleSP have been initialized already... - - for (int hi = 0; hi < numIndividuals; ++hi) { - logLs[hi] = ViterbiForwardIndividual(hi, forwardSP[hi], markers_, null); - } - - - - //System.err.println(iscaleSP[0][numMarkers]); - - //for (int hi = 0; hi < numIndividuals; ++hi) - // for (int b1 = 0; b1 < 2; ++b1) - // for (int b2 = 0; b2 < 2; ++b2) - // for (int r1 = 0; r1 < 2; ++r1) - // for (int r2 = 0; r2 < 2; ++r2) - // backwardSP[hi][numMarkers & 1][b1][b2][r1][r2] = 0.0; - initBackward(numMarkers & 1); - - - for (int m = numMarkers - 1; m >= -1; --m) { - double _tmpRec[][][] = recScale.getRecMatrix(m + 1); // TODO: check - - for (int hi = 0; hi < numIndividuals; ++hi) { - double fTable[] = forwardSP[hi][m + 1]; - double bTable[] = backwardSP[hi][(m + 1) & 1]; - - float qt[][] = qTables[fi + hi]; - Arrays.fill(qt[m + 1], Float.NEGATIVE_INFINITY); - - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) { - double f[] = {_tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )] + bTable[index4(b1,b2,r1,r2)], - _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )] + bTable[index4(b1,b2,r1,r2)], - _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)] + bTable[index4(b1,b2,r1,r2)], - _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)] + bTable[index4(b1,b2,r1,r2)]}; - int max = 0; - for (int p = 1; p < 4; ++p) - if (f[p] > f[max]) - max = p; - qt[m + 1][2 * b1 + b2] = Math.max(qt[m + 1][2 * b1 + b2], (float) (f[max] - logLs[hi])); - } - } - if (m >= 0) - updateBackward(m, 1, markers_); - } - } - - //init backward and forward tables... - //to evaluate local changes fast - private void calcForward(ArrayList markers){ - - recScale.init(markers); - // forwardSP and iscaleSP have been initialized already... - - for (int hi = 0; hi < numIndividuals; ++hi) { - ViterbiForwardIndividual(hi, forwardSP[hi], markers, null); - } - } - - private final void initBackward(int position){ - for (int hi = 0; hi < numIndividuals; ++hi) - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - backwardSP[hi][position][index4(b1,b2,r1,r2)] = 0.0; - } - - // s1 and s2 are the two states - private double emission(float posterior[], int s1, int s2) - { - //return dataScale * posterior[2 * s1 + s2]; - return posterior[2 * s1 + s2]; - } - - //TODO: finish RecombinationScale - private abstract class RecombinationScale{ - public abstract void update(int perm[], int start); - public abstract void init(ArrayList markers); - public abstract double[][][] getRecMatrix(int position); - } - private class RecombinationScale1 extends RecombinationScale{ - private int inf1[] = null; - private int inf2[] = null; - private int infLimitLow = 0; - - private double scalePerMax = 1.0; - private double tmpRec2[][][] = new double[2][2][4]; - - private double prevScale1 = 1.0; - private double prevScale2 = 1.0; - - public void init(ArrayList markers) { - scalePerMax = 1.0 / MAX_SCALE; - infLimitLow = (scalePerMax >= 1.0 / dataScale) ? 0 : (int) (1.0 / (dataScale * scalePerMax)); - - if (infLimitLow == 0) - return; - int numMarkers = markers.size(); - - inf1 = new int[numMarkers + 1]; - inf2 = new int[numMarkers + 1]; - int inf[] = originalInformative.get(fam);//originalInformative.get(fam); - int numInf1 = 0; - int numInf2 = 0; - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - if ((inf[m] & 1) == 1) - ++numInf1; - if ((inf[m] & 2) == 2) - ++numInf2; - inf1[mi + 1] = numInf1; - inf2[mi + 1] = numInf2; - } - - } - public void update(int perm[], int start) { // update for polishScore - if (infLimitLow == 0) - return; - int k = perm.length; - int inf[] = originalInformative.get(fam);//originalInformative.get(fam); - - int numInf1 = inf1[start]; - int numInf2 = inf2[start]; - - for (int mi = 0; mi < k; ++mi) { - int m = perm[mi]; - if ((inf[m] & 1) == 1) - ++numInf1; - if ((inf[m] & 2) == 2) - ++numInf2; - inf1[start + mi + 1] = numInf1; - inf2[start + mi + 1] = numInf2; - } - - } - private void initMatrix(double scale1, double scale2) { - if (infLimitLow == 0 || (prevScale1 == scale1 && prevScale2 == scale2)) - return; - double logI1 = scale1 * __tmpRec[0][0][1]; - double logI2 = scale2 * __tmpRec[0][0][2]; - double logR1 = scale1 * __tmpRec[1][1][1]; - double logR2 = scale2 * __tmpRec[1][1][2]; - -// tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; -// tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; -// tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; -// tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... - - tmpRec2[0][0][1] = logI1; - tmpRec2[0][0][2] = logI2; - tmpRec2[0][0][3] = logI1 + logI2; - - tmpRec2[0][1][1] = logI1; - tmpRec2[0][1][2] = logR2; - tmpRec2[0][1][3] = logI1 + logR2; - - tmpRec2[1][0][1] = logR1; - tmpRec2[1][0][2] = logI2; - tmpRec2[1][0][3] = logR1 + logI2; - - tmpRec2[1][1][1] = logR1; - tmpRec2[1][1][2] = logR2; - tmpRec2[1][1][3] = logR1 + logR2; - prevScale1 = scale1; - prevScale2 = scale2; - } - - public double[][][] getRecMatrix(int position) - { - if (infLimitLow == 0) - return __tmpRec; - - double scale1 = 1.0 / dataScale; - double scale2 = scale1; - double cap = Math.min(CAP_SCALE, scale1); - - int infTotal1 = inf1[inf1.length - 1]; - int infTotal2 = inf2[inf2.length - 1]; - int numInf1 = inf1[position]; - int numInf2 = inf2[position]; - - if (numInf1 < infLimitLow || infTotal1 - numInf1 < infLimitLow) { - int k = Math.min(numInf1, infTotal1 - numInf1); - scale1 = (k <= 1) ? scalePerMax : k * scalePerMax; - } - if (numInf2 < infLimitLow || infTotal2 - numInf2 < infLimitLow) { - int k = Math.min(numInf2, infTotal2 - numInf2); - scale2 = (k <= 1) ? scalePerMax : k * scalePerMax; - } - //System.err.println("getRecMatrix " + position + " scale " + scale1 + " " + scale2 + " informative " + (inf1[position + 1] - inf1[position] + 2 *(inf2[position + 1] - inf2[position])) ); - - scale1 = Math.max(scale1, cap); - scale2 = Math.max(scale2, cap); - - if (scale1 == 1.0 && scale2 == 1.0) { - //System.err.println(scale1 + "\t" + scale2);// + "\t" + informative.get(fam)[position]); - return __tmpRec; - } - else { - //System.err.println(scale1 + "\t" + scale2 + "\t" + informative.get(fam)[position]); - initMatrix(scale1, scale2); - return tmpRec2; - } - } - } - private class RecombinationScale2 extends RecombinationScale{ - private double inf1[] = null; - private double inf2[] = null; - private int infLimitLow = 0; - - private double scalePerMax = 1.0; - private double tmpRec2[][][] = new double[2][2][4]; - - private double prevScale1 = 1.0; - private double prevScale2 = 1.0; - - private double scale1 = 1.0; - private double scale2 = 1.0; - - public void init(ArrayList markers) { - scalePerMax = 1.0 / MAX_SCALE; - infLimitLow = (scalePerMax >= 1.0 / dataScale) ? 0 : (int) (1.0 / (dataScale * scalePerMax)); - //infLimitLow = (1.0 / (dataScale * scalePerMax)); - - if (infLimitLow == 0) - return; - int numMarkers = markers.size(); - - inf1 = new double[numMarkers + 1]; - inf2 = new double[numMarkers + 1]; - int inf[] = originalInformative.get(fam);//originalInformative.get(fam); - float info[] = originalInformation.get(fam);//originalInformative.get(fam); - double numInf1 = 0.0; - double numInf2 = 0.0; - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - if (inf[m] > 0) { - if (inf[m] == 3) { - numInf1 += 0.5 * info[m]; - numInf2 += 0.5 * info[m]; - } - else if (inf[m] == 1) { - numInf1 += info[m]; - } - else if (inf[m] == 2) { - numInf2 += info[m]; - } - } - inf1[mi + 1] = numInf1; - inf2[mi + 1] = numInf2; - } - - //for (int mi = 0; mi < numMarkers; ++mi) { - // getRecMatrix(mi); - // System.err.println(mi + "\t" + scale1 + "\t" + scale2); - //} - - - } - public void update(int perm[], int start) { // update for polishScore - if (infLimitLow == 0) - return; - int k = perm.length; - int inf[] = originalInformative.get(fam);//originalInformative.get(fam); - float info[] = originalInformation.get(fam); - - double numInf1 = inf1[start]; - double numInf2 = inf2[start]; - - for (int mi = 0; mi < k; ++mi) { - int m = perm[mi]; - if (inf[m] > 0) { - if (inf[m] == 3) { - numInf1 += 0.5 * info[m]; - numInf2 += 0.5 * info[m]; - } - else if (inf[m] == 1) { - numInf1 += info[m]; - } - else if (inf[m] == 2) { - numInf2 += info[m]; - } - } - inf1[start + mi + 1] = numInf1; - inf2[start + mi + 1] = numInf2; - } - - } - private void initMatrix() { - if (infLimitLow == 0 || (prevScale1 == scale1 && prevScale2 == scale2)) - return; - double logI1 = scale1 * __tmpRec[0][0][1]; - double logI2 = scale2 * __tmpRec[0][0][2]; - double logR1 = scale1 * __tmpRec[1][1][1]; - double logR2 = scale2 * __tmpRec[1][1][2]; - -// tmpRec[0][0] = new double[]{1.0, i1, i2, i1 * i2}; -// tmpRec[0][1] = new double[]{1.0, i1, r2, i1 * r2}; -// tmpRec[1][0] = new double[]{1.0, r1, i2, r1 * i2}; -// tmpRec[1][1] = new double[]{1.0, r1, r2, r1 * r2}; //phew... - - tmpRec2[0][0][1] = logI1; - tmpRec2[0][0][2] = logI2; - tmpRec2[0][0][3] = logI1 + logI2; - - tmpRec2[0][1][1] = logI1; - tmpRec2[0][1][2] = logR2; - tmpRec2[0][1][3] = logI1 + logR2; - - tmpRec2[1][0][1] = logR1; - tmpRec2[1][0][2] = logI2; - tmpRec2[1][0][3] = logR1 + logI2; - - tmpRec2[1][1][1] = logR1; - tmpRec2[1][1][2] = logR2; - tmpRec2[1][1][3] = logR1 + logR2; - prevScale1 = scale1; - prevScale2 = scale2; - } - - public double[][][] getRecMatrix(int position) - { - if (infLimitLow == 0) - return __tmpRec; - - scale1 = 1.0 / dataScale; - scale2 = scale1; - double cap = Math.min(CAP_SCALE, scale1); - - double infTotal1 = inf1[inf1.length - 1]; - double infTotal2 = inf2[inf2.length - 1]; - double numInf1 = inf1[position]; - double numInf2 = inf2[position]; - - if (numInf1 < infLimitLow || infTotal1 - numInf1 < infLimitLow) { - double k = Math.min(numInf1, infTotal1 - numInf1); - scale1 = (k <= 1) ? scalePerMax : k * scalePerMax; - } - if (numInf2 < infLimitLow || infTotal2 - numInf2 < infLimitLow) { - double k = Math.min(numInf2, infTotal2 - numInf2); - scale2 = (k <= 1) ? scalePerMax : k * scalePerMax; - } - //System.err.println("getRecMatrix " + position + " scale " + scale1 + " " + scale2 + " informative " + (inf1[position + 1] - inf1[position] + 2 *(inf2[position + 1] - inf2[position])) ); - - scale1 = Math.max(scale1, cap); - scale2 = Math.max(scale2, cap); - - if (scale1 == 1.0 && scale2 == 1.0) { - //System.err.println(scale1 + "\t" + scale2);// + "\t" + informative.get(fam)[position]); - return __tmpRec; - } - else { - //System.err.println(scale1 + "\t" + scale2 + "\t" + informative.get(fam)[position]); - initMatrix(); - return tmpRec2; - } - } - } - - - //forward Viterbi calculations for single individual - private double ViterbiForwardIndividual(int hi, double forward[][], ArrayList markers, int path[][]){ - return ViterbiForwardIndividual(hi, forward, markers, path, false); - } - - final static double VITERBI_SMALL = 1e-9; - - private double ViterbiForwardIndividual(int hi, double forward[][], ArrayList markers, int path[][], boolean allSolutions){ - float[][][] hap = originalHaplotypes.get(fam); - int numMarkers = markers.size(); - - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - double _tmpRec[][][] = recScale.getRecMatrix(mi); - - double fTable[] = forward[mi]; - double fTable2[] = forward[mi + 1]; - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) { - double emis = emission(hap[m][hi], b1, b2); - //double fTable22[][] = fTable2[b1][b2]; - for (int r1 = 0; r1 < 2; ++r1) { - for (int r2 = 0; r2 < 2; ++r2) { - double f[] = {_tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )], - _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )], - _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)], - _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)]}; - int max = 0; - for (int p = 1; p < 4; ++p) - if (f[p] > f[max]) - max = p; - - double fMax = f[max] + emis; - //fTable22[r1][r2] = fMax; - fTable2[index4(b1, b2, r1, r2)] = fMax; - if (path != null) - switch (max) { - case 0: path[m + 1][index4(b1,b2,r1,r2)] = b1 + 2 * b2 + 4 * r1 + 8 * r2;break; - case 1: path[m + 1][index4(b1,b2,r1,r2)] = (b1 ^ r1) + 2 * b2 + 4 * (r1 ^ 1) + 8 * r2;break; - case 2: path[m + 1][index4(b1,b2,r1,r2)] = b1 + 2 * (b2 ^ r2) + 4 * r1 + 8 * (r2 ^ 1);break; - case 3: path[m + 1][index4(b1,b2,r1,r2)] = (b1 ^ r1) + 2 * (b2 ^ r2) + 4 * (r1 ^ 1) + 8 * (r2 ^ 1);break; - } - if (allSolutions) { - int states = 0; - for (int p = 0; p < 4; ++p) - if (f[p] >= f[max] - VITERBI_SMALL) - switch (p) { - case 0: - states += 16 << (b1 + 2 * b2 + 4 * r1 + 8 * r2); - break; - case 1: - states += 16 << ((b1 ^ r1) + 2 * b2 + 4 * (r1 ^ 1) + 8 * r2); - break; - case 2: - states += 16 << (b1 + 2 * (b2 ^ r2) + 4 * r1 + 8 * (r2 ^ 1)); - break; - case 3: - states += 16 << ((b1 ^ r1) + 2 * (b2 ^ r2) + 4 * (r1 ^ 1) + 8 * (r2 ^ 1)); - break; - } - path[m + 1][index4(b1,b2,r1,r2)] += states; - } - } - } - } - - } - double logL = Double.NEGATIVE_INFINITY; - double fTable[] = forward[numMarkers]; - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - logL = Math.max(logL, fTable[index4(b1,b2,r1,r2)]); - return logL; - } - - private void ViterbiForwardIndividualFaster(int hi, double forward[][], int numMarkers2, int markers[], int start){ // for polishScore - float[][][] hap = originalHaplotypes.get(fam); - - double f[] = new double[5]; // save new...? - for (int mi = 0; mi < numMarkers2; ++mi) { - double _tmpRec[][][] = recScale.getRecMatrix(mi + start); - - int m = markers[mi]; - - double fTable[] = forward[mi]; - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) { - //double fTable2[][] = forward[mi + 1][b1][b2]; - double fTable2[] = forward[mi + 1]; - double emis = emission(hap[m][hi], b1, b2); - for (int r1 = 0; r1 < 2; ++r1) { - for (int r2 = 0; r2 < 2; ++r2) { - f[0] = _tmpRec[r1][r2][0] + fTable[index4(b1 ,b2 ,r1 ,r2 )]; - f[1] = _tmpRec[r1][r2][1] + fTable[index4(b1 ^ r1,b2 ,r1 ^ 1,r2 )]; - f[2] = _tmpRec[r1][r2][2] + fTable[index4(b1 ,b2 ^ r2,r1 ,r2 ^ 1)]; - f[3] = _tmpRec[r1][r2][3] + fTable[index4(b1 ^ r1,b2 ^ r2,r1 ^ 1,r2 ^ 1)]; - - int max = 0; - for (int p = 1; p < 4; ++p) - if (f[p] > f[max]) - max = p; - fTable2[index4(b1, b2, r1, r2)] = f[max] + emis; - } - } - } - } - } - - - private final void updateBackward(int mi, int mask, ArrayList markers){ - float hap[][][] = originalHaplotypes.get(fam); - int m = markers.get(mi); - double _tmpRec[][][] = recScale.getRecMatrix(mi); // TODO: check if + 1 is needed - - for (int hi = 0; hi < numIndividuals; ++hi) { - - double bTable[] = backwardSP[hi][(mi + 1) & mask]; - double bTable2[] = backwardSP[hi][mi & mask]; - - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) { - double emis = emission(hap[m][hi], b1, b2); - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - tmpB[index4(b1,b2,r1,r2)] = bTable[index4(b1,b2,r1,r2)] + emis; - } - - - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) { - for (int a1 = 0; a1 < 2; ++a1) - for (int a2 = 0; a2 < 2; ++a2) { - double f[] = {_tmpRec[r1 ][r2 ][0] + tmpB[index4(a1 ,a2 ,r1 ,r2 )], - _tmpRec[r1 ^ 1][r2 ][1] + tmpB[index4(a1 ^ r1 ^ 1,a2 ,r1 ^ 1,r2 )], - _tmpRec[r1 ][r2 ^ 1][2] + tmpB[index4(a1 ,a2 ^ r2 ^ 1,r1 ,r2 ^ 1)], - _tmpRec[r1 ^ 1][r2 ^ 1][3] + tmpB[index4(a1 ^ r1 ^ 1,a2 ^ r2 ^ 1,r1 ^ 1,r2 ^ 1)]}; - - int max = 0; - for (int p = 1; p < 4; ++p) - if (f[p] > f[max]) - max = p; - bTable2[index4(a1,a2,r1,r2)] = f[max]; - } - } - } - } - - private double polishScore(int perm[], int pos) { - - int k = perm.length; - - double logL = 0.0; - for (int hi = 0; hi < numIndividuals; ++hi) { - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - forwardV2[0][index4(b1,b2,r1,r2)] = forwardSP[hi][pos][index4(b1,b2,r1,r2)]; - - recScale.update(perm, pos); - ViterbiForwardIndividualFaster(hi, forwardV2, k, perm, pos); - - double max = Double.NEGATIVE_INFINITY; - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - max = Math.max(max, forwardV2[k][index4(b1,b2,r1,r2)] + backwardSP[hi][(pos + k) & 1][index4(b1,b2,r1,r2)]); - //System.err. - - logL += max; - } - return logL; - } - - public double Viterbi2Fast(ArrayList markers) { - double logL = 0.0; - - //forwardV and tmpRec are initialized - - for (int hi = 0; hi < numIndividuals; ++hi) { - logL += ViterbiForwardIndividual(hi, forwardV, markers, null); - } - return logL; - } - - - private int[] getBits16(int number){ - int n = 0; - for (int bit = 0; bit < 16; ++bit) - if ((number & (1 << bit)) != 0) - ++n; - - int ret[] = new int[n]; - n = 0; - for (int bit = 0; bit < 16; ++bit) - if ((number & (1 << bit)) != 0) - ret[n++] = bit; - - return ret; - } - - public void Viterbi3(ArrayList markers_, ArrayList quality_ret) - { - float quality[][] = quality_ret.get(fam); - - int numMarkers = markers_.size(); - - double logL = 0.0; - for (int hi = 0; hi < numIndividuals; ++hi) { - logL += ViterbiForwardIndividual(hi, forwardSP[hi], markers_, null); - } - - initBackward(numMarkers & 1); - double q[][] = new double[2][2]; - - for (int m = numMarkers - 1; m >= 0; --m) { - for (int hi = 0; hi < numIndividuals; ++hi) { - double fTable[] = forwardSP[hi][m + 1]; - double bTable[] = backwardSP[hi][(m + 1) & 1]; - q[0][0] = Double.NEGATIVE_INFINITY; - q[0][1] = Double.NEGATIVE_INFINITY; - q[1][0] = Double.NEGATIVE_INFINITY; - q[1][1] = Double.NEGATIVE_INFINITY; - - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - for (int a1 = 0; a1 < 2; ++a1) - for (int a2 = 0; a2 < 2; ++a2) { - q[a1][a2] = Misc.logSum(q[a1][a2], fTable[index4(a1,a2,r1,r2)] + bTable[index4(a1,a2,r1,r2)]); - } - double max = Double.NEGATIVE_INFINITY; - for (int a1 = 0; a1 < 2; ++a1) - for (int a2 = 0; a2 < 2; ++a2) - max = Math.max(max, q[a1][a2]); - - quality[m][4 * hi + 0] = (float)Math.exp(q[0][0] - max); - quality[m][4 * hi + 1] = (float)Math.exp(q[0][1] - max); - quality[m][4 * hi + 2] = (float)Math.exp(q[1][0] - max); - quality[m][4 * hi + 3] = (float)Math.exp(q[1][1] - max); - } - updateBackward(m, 1, markers_); - } - } - - public double[] Viterbi2(ArrayList markers_, ArrayList ret, ArrayList ret2, boolean silent, boolean maskHaplotypes) - { - - double logL = 0.0; - int count = 0; - - int numMarkers = markers_.size(); - - //forwardV already initialized - //tmpRec already initialized - - recScale.init(markers_); - - float[][][] hap = originalHaplotypes.get(fam); - int [][] retF = ret.get(fam); - int [] retI = ret2.get(fam); //individual recombination rate - - - for (int hi = 0; hi < numIndividuals; ++hi) { - logL += ViterbiForwardIndividual(hi, forwardV, markers_, path, maskHaplotypes); - - double max = Double.NEGATIVE_INFINITY; - int maxB1 = 0; - int maxB2 = 0; - int maxR1 = 0; - int maxR2 = 0; - - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) { - double f = forwardV[numMarkers][index4(b1,b2,r1,r2)]; - if (f > max) { - max = f; - maxB1 = b1; - maxB2 = b2; - maxR1 = r1; - maxR2 = r2; - } - } - - - for (int m = numMarkers - 1; m >= 0; --m) { //backtrack most likely path - retF[m][hi] = maxB1; - retF[m][hi + hap[0].length] = maxB2; - - int p = path[m + 1][index4(maxB1,maxB2,maxR1,maxR2)]; - int tmpB1 = (p & 1); - int tmpB2 = (p & 2) >> 1; - int tmpR1 = (p & 4) >> 2; - int tmpR2 = (p & 8) >> 3; - - if (tmpB1 != maxB1) { - ++count; - ++retF[m][2 * hap[0].length]; - ++retI[hi]; - } - if (tmpB2 != maxB2) { - ++count; - ++retF[m][2 * hap[0].length + 1]; - ++retI[hi]; - } - maxB1 = tmpB1; - maxB2 = tmpB2; - maxR1 = tmpR1; - maxR2 = tmpR2; - } - //mask uncertain haplotypes - if (maskHaplotypes) { - int states = 0; //set of possible states - for (int r1 = 0; r1 < 2; ++r1) - for (int r2 = 0; r2 < 2; ++r2) - for (int b1 = 0; b1 < 2; ++b1) - for (int b2 = 0; b2 < 2; ++b2) - if (forwardV[numMarkers][index4(b1,b2,r1,r2)] >= max - VITERBI_SMALL) - states += 1 << (b1 + 2 * b2 + 4 * r1 + 8 * r2); - - //ArrayList tmp = new ArrayList(); - //for (int s : getBits16(states)) - // tmp.add(s); - //System.err.println(states + " " + tmp); - - - for (int m = numMarkers - 1; m >= 0; --m) { //backtrack most likely paths - int nextStates = 0; - int bits[] = getBits16(states); - int b1Mask = 0; - int b2Mask = 0; - for (int p: bits) { - int b1 = (p & 1); - int b2 = (p & 2) >> 1; - int r1 = (p & 4) >> 2; - int r2 = (p & 8) >> 3; - b1Mask |= (1 << b1); - b2Mask |= (1 << b2); - nextStates |= (path[m + 1][index4(b1,b2,r1,r2)] >> 4); - } - states = nextStates; - if (b1Mask == 3) - retF[m][hi] = 2; - if (b2Mask == 3) - retF[m][hi + hap[0].length] = 2; - } - - } - - } - - if (!silent) - System.err.println("logL = " + logL); - return new double[]{count, logL}; - } - - @Override - public Double call() - { - return 0.0;//phase(); - } - @Override - public void run() - { - //computeTables(); - } - - } - - // assumes likelihood(markers, true) has been called - // and then initData(markers2) - //TODO: handle phased data (maxPhase should do it) - //TODO: handle selfing data (phaseAdder should do it) - public double score(int marker, int position) - { - double ret = 0.0; - - int phaseAdder = 1; - int maxPhase = 4; - if (phasedData) - maxPhase = 1; - else if (selfingPhase) // only 0 and 3 as phase for selfing data - phaseAdder = 3; - - - int numF = originalHaplotypes.size(); - int fi = 0; - for (int fam = 0; fam < numF; ++fam) { - float[][][] hap = originalHaplotypes.get(fam); // TODO: Check ... (haplotypes.get does not work...) - double retPhase[] = new double[4]; - int numIndividuals = hap[0].length; - for (int hi = 0; hi < numIndividuals; ++hi) { - float Q[] = qTables[fi][position]; - ++fi; - for (int phase = 0; phase < maxPhase; phase+=phaseAdder) { - //double f = Q[phase] + dataScale * hap[marker][hi][0]; - double f = Q[phase] + hap[marker][hi][0]; - for (int haplotype = 1; haplotype < 4; ++haplotype) - f = Math.max(f, Q[haplotype ^ phase] + hap[marker][hi][haplotype]); - //f = Math.max(f, Q[haplotype ^ phase] + dataScale * hap[marker][hi][haplotype]); - - /* //possible improvement, take the sum of two best scores - double f = Q[phase] + hap[marker][hi][0]; - double f2 = Double.NEGATIVE_INFINITY; - for (int haplotype = 1; haplotype < 4; ++haplotype) { - double nf = Q[haplotype ^ phase] + hap[marker][hi][haplotype]; - if (nf > f) { - f2 = f; - f = nf; - } else - f2 = Math.max(f2, nf); - } - //retPhase[phase] = f + Misc.getLookup(f - f2);//Misc.LogSumFast(f,f2) - */ - retPhase[phase] += f; - } - } - //System.err.println(retPhase1[0] + "\t" + retPhase1[1] + "\t" + retPhase1[2] + "\t" + retPhase1[3]); - if (phasedData) - ret += retPhase[0]; - else if (selfingPhase) - ret += Math.max(retPhase[0], retPhase[3]); - else - ret += Math.max(Math.max(Math.max(retPhase[0], retPhase[1]), retPhase[2]), retPhase[3]); - } - //System.err.println("score = " + ret); - if (pfs != null) - for (PhysicalFamily pf : pfs) - ret += pf.score(marker, position); - return ret; - } - - - private static int perm4[][] = Misc.permutation(4); - private static int perm4_s[][] = Misc.prunePermutation1(perm4); - private static int perm5[][] = Misc.permutation(5); - private static int perm5_s[][] = Misc.prunePermutation1(perm5); - - - final double IMPROVE_TOLERANCE = 0.001; - - //check if distance between two positions is higher than DISTANCE_LIMIT, handles parameter identicalLimit in OrderMarkers2 - private boolean distanceHigher(int pos1, int pos2) - { - double d = 0.0; - - //distance based on physical family - if (pfs != null) { - for (PhysicalFamily pf : pfs) { - double pd = pf.scoreDistance(pos1, pos2); - if (pd != 0) - d += (1.0 - Math.exp(pd)); // is pd is between 0 and 1? - } - } - if (d > DISTANCE_LIMIT) - return true; - - for (float ind[][] : qTables) { - double maxD = 0.0; - for (int j = 0; j < 4; ++j) { - double i1 = ind[pos1][j]; - double i2 = ind[pos2][j]; - if (i1 != i2) - maxD = Math.max(maxD, Math.abs(Math.exp(i1) - Math.exp(i2))); - } - d += maxD; - if (d > DISTANCE_LIMIT) - return true; - } - return false; - } - - private ArrayList getUniquePositions(ArrayList markers) { - int numMarkers = markers.size(); - ArrayList phasedHaplotypes = getPhasedHaplotypes(markers, true, false); - - ArrayList positions = new ArrayList(); - - int lastPos = 0; - while (lastPos < numMarkers) { - int nextPos = lastPos + 1; - int delta = 0; - while (nextPos < numMarkers) { - for (int ph[][] : phasedHaplotypes) { - int phh[] = ph[nextPos]; - delta += phh[phh.length - 1] + phh[phh.length - 2]; - } - if (delta > 0) - break; - ++nextPos; - } - positions.add((nextPos + lastPos + 1) / 2); - lastPos = nextPos; - } - return positions; - } - - - private ArrayList getPositions(ArrayList markers) { - return getPositions(markers, null); - } - - private ArrayList getPositions(ArrayList markers, ArrayList> markersInNearestBin) { - int n = markers.size(); - ArrayList ret = new ArrayList(); - - //int numPos = 1; - int prev = 0; - ret.add(0); - for (int i = 1; i <= n; ++i) - if (i == 1 || i >= n - 1 || distanceHigher(prev, i)) { - if (markersInNearestBin != null) - for (int mi = prev; mi < i; ++mi) - markersInNearestBin.get(prev + 1).add(markers.get(mi)); - ret.add(i); - prev = i; - //++numPos; - } - //System.err.println("numPos = " + ret.size() + "/" + (n + 1)); - - return ret; - } - - - private class polishThread implements Runnable { - ArrayList positions; - ArrayList markers; - int m1; - int m2; - int ret[]; - - public polishThread(ArrayList positions, ArrayList markers, int m1, int m2, int ret[]) { - this.ret = ret; - this.m1 = m1; - this.m2 = m2; - this.markers = markers; - this.positions = positions; - } - @Override - public void run() { - for (int mi = m1; mi < m2; ++mi) { - int m = markers.get(mi); - int maxPos = 0; - double maxScore = Double.NEGATIVE_INFINITY; - - for (int p : positions) { - double s = score(m, p); - if (s > maxScore) { - maxScore = s; - maxPos = p; - } - } - ret[mi] = maxPos; - } - - } - - } - - private ArrayList polishTest(ArrayList markers) - { - double ll = likelihood(markers, true); // to store tables, used in merge... - - //System.err.println("score = " + ll); - - ArrayList positions = getPositions(markers); - - int numMarkers = markers.size(); - - ArrayList> order = new ArrayList>(); - for (int i = 0; i <= numMarkers; ++i) - order.add(new ArrayList()); - - int numPositions = positions.size(); - - int nt = (int) calcNumThreadsPolish(numMarkers, numPositions, qTables.length); - - if (nt <= 1) { - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - int maxPos = 0; - double maxScore = Double.NEGATIVE_INFINITY; - for (int p: positions) { - double s = score(m, p); - if (s > maxScore) { - maxScore = s; - maxPos = p; - } - //System.err.print(s + "\t"); - } - order.get(maxPos).add(m); - //System.err.println(maxPos); - //System.err.println(); - } - } else { //parallel implementation - //System.err.println(nt + " threads and " + numMarkers + " markers and " + numPositions + " positions"); - int ret[] = new int[numMarkers]; - - Thread threads[] = new Thread[nt]; - - for (int t = 0; t < nt; ++t) { - threads[t] = new Thread(new polishThread(positions, markers, t * markers.size() / nt, (t + 1) * markers.size() / nt, ret)); - threads[t].start(); - } - try { - for (int t = 0; t < nt; ++t) - threads[t].join(); - - } catch (Exception e) { - e.printStackTrace(); - Error.error(-99999999); - System.exit(-1); - } - for (int mi = 0; mi < numMarkers; ++mi) { - int m = markers.get(mi); - order.get(ret[mi]).add(m); - } - } - - markers.clear(); - for (int i = 0; i <= numMarkers; ++i) - markers.addAll(order.get(i)); - - return markers; - } - - private static int perm_all[][][] = - {Misc.prunePermutation2(Misc.permutation(3)), Misc.prunePermutation2(Misc.permutation(4)), Misc.prunePermutation2(Misc.permutation(5))}; - - private ArrayList bestOrder(ArrayList markers) { - int n = markers.size(); - int perm[][] = null; - if (n > 5 || n <= 2) - return markers; - else { - perm = perm_all[n - 3]; - } - - ArrayList markers2 = new ArrayList(); - markers2.addAll(markers); - - double maxL = Double.NEGATIVE_INFINITY; - int maxpi = 0; - int numSolutions = 0; - for (int pi = 0; pi < perm.length; ++pi) { - int p[] = perm[pi]; - for (int i = 0; i < n; ++i) - markers2.set(i, markers.get(p[i])); - double ll = score(markers2); - //System.err.println(ll + "\t" + markers2); - if (ll > maxL - IMPROVE_TOLERANCE) { - if (ll > maxL + IMPROVE_TOLERANCE) - numSolutions = 1; - else - ++numSolutions; - if (Misc.random() <= 1.0 / numSolutions) - maxpi = pi; - maxL = Math.max(ll, maxL); - } - } - for (int i = 0; i < n; ++i) - markers2.set(i, markers.get(perm[maxpi][i])); - - return markers2; - } - - private ArrayList polishFast(ArrayList markers, int permFirst[][], int permSecond[][]) - { - return polishFast(markers, permFirst, permSecond, 1.0); - } - - private ArrayList polishFast(ArrayList markers, int permFirst[][], int permSecond[][], double rate) - { - int numMarkers = markers.size(); - - int k = permFirst[0].length; - - if (k > numMarkers) - return markers; - - int tmp[] = new int[k]; - int tmp2[] = new int[k]; - - double logL = score(markers); - //if (k != 4) - if (rate == 1.0) - System.err.println("score = " + logL); - - for (SingleFamily sf : sfs) // calculate forward tables... - sf.calcForward(markers); - - for (SingleFamily sf : sfs) // init backward tables... - sf.initBackward(numMarkers & 1); - - for (int i = numMarkers - k; i >= 0; --i) { - - - double maxL = Double.NEGATIVE_INFINITY; - int numSolutions = 0; - int perm[][] = (i == numMarkers - k) ? permFirst : permSecond; - for (int pi = 0; pi < perm.length; ++pi) { - int p[] = perm[pi]; - - for (int j = 0; j < k; ++j) { - tmp[j] = markers.get(i + p[j]); - } - - double ll = 0.0; - for (SingleFamily sf : sfs) // calculate polish tables... - ll += sf.polishScore(tmp, i); - - if (pfs != null) - for (PhysicalFamily pf : pfs) - ll += pf.polishScore(tmp, i, markers); - - if (ll >= maxL - IMPROVE_TOLERANCE) { - if (ll >= maxL + IMPROVE_TOLERANCE) - numSolutions = 1; - else - ++numSolutions; - if (Misc.random() <= 1.0 / numSolutions) { - for (int j = 0; j < k; ++j) - tmp2[j] = tmp[j]; - } - maxL = Math.max(ll, maxL); - } - while (rate < 1.0 && Misc.random() > rate) // skip with prob 1-rate - ++pi; - } - for (int j = 0; j < k; ++j) { - markers.set(i + j, tmp2[j]); - } - - for (SingleFamily sf : sfs) {// calculate polish tables... - sf.recScale.update(tmp2, i); // update recombination scaler - sf.updateBackward(i + k - 1, 1, markers); - } - - } - - ArrayList markersRet = new ArrayList(); - for (int m = 0; m < numMarkers; ++m) - markersRet.add((markers.get(m))); - - return markersRet; - } - - - private class MergeClass{ - private ArrayList positions = null; - private ArrayList markers = null; - - private int numPositions = 0; - private int numMarkers = 0; - - double f1[] = null; - double f2[] = null; - - double b1[] = null; - double b2[] = null; - - private ArrayList> ret = null; - - ParallelScoreCalculator psc; - - private class ParallelScoreCalculator{ - double scores[] = null; - int p1, p2, m1, m2, pos; - int currentP, currentM; - int nt; - long numCalculated; - boolean backward; - - private class UpdateScoreThread implements Runnable{ - int currentP, currentM, start, end; - - UpdateScoreThread(int start, int end, int currentP, int currentM) { - this.currentM = currentM; - this.currentP = currentP; - this.start = start; - this.end = end; - } - - - @Override - public void run() - { - if (backward) { - out:while (currentP >= p1) { - while (currentM >= m1) { - scores[start++] = score(markers.get(currentM), positions.get(currentP)); - --currentM; - if (start >= end) - break out; - } - currentM = m2 - 1; - --currentP; - } - } else { - out:while (currentP < p2) { - while (currentM < m2) { - scores[start++] = score(markers.get(currentM), positions.get(currentP)); - ++currentM; - if (start >= end) - break out; - } - currentM = m1; - ++currentP; - } - } - } - } - - public ParallelScoreCalculator() { - scores = scoresM; - } - - private void updateScores() - { - pos = 0; - int numElements = (int) Math.min(scores.length, ((long) (m2 - m1)) * (p2 - p1) - numCalculated); - numCalculated += numElements; - this.nt = calcNumThreadsScore(m2 - m1, p2 - p1, qTables.length, numElements); - - if (nt <= 1) { // nt <= 1 - int i = 0; - if (backward) { - out:while (currentP >= p1) { - while (currentM >= m1) { - scores[i++] = score(markers.get(currentM), positions.get(currentP)); - --currentM; - if (i >= scores.length) - break out; - } - currentM = m2 - 1; - --currentP; - } - } else { - out:while (currentP < p2) { - while (currentM < m2) { - scores[i++] = score(markers.get(currentM), positions.get(currentP)); - ++currentM; - if (i >= scores.length) - break out; - } - currentM = m1; - ++currentP; - } - } - } else { - //System.err.println(nt + " threads in merge " + numMarkers + " markers and " + numPositions + " positions "); - //if ((m2 - m1) * (p2 - p1) > scores.length) - // System.err.println("split " + currentP + " " + currentM + " (" + p1 + "," + p2 + ") " + "(" + m1 + "," + m2 + ") " + scores.length); - - Thread threads[] = new Thread[nt]; - - for (int t = 0; t < nt; ++t) { - int start = t * numElements / nt; - int end = (t + 1) * numElements / nt; - threads[t] = new Thread(new UpdateScoreThread(start, end, currentP, currentM)); - threads[t].start(); - if (backward) { - currentM -= (end - start) % (m2 - m1); - currentP -= (end - start) / (m2 - m1); - if (currentM < m1) { - currentM += m2 - m1; - --currentP; - } - } else { - currentM += (end - start) % (m2 - m1); - currentP += (end - start) / (m2 - m1); - if (currentM >= m2) { - currentM -= m2 - m1; - ++currentP; - } - } - } - try { - for (int t = 0; t < nt; ++t) - threads[t].join(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - - public void setArea(int p1, int p2, int m1, int m2, boolean backward) - { - this.p1 = p1; - this.p2 = p2; - this.m1 = m1; - this.m2 = m2; - this.backward = backward; - this.numCalculated = 0; - - if (backward) { - currentP = p2 - 1; - currentM = m2 - 1; - } else { - currentP = p1; - currentM = m1; - } - updateScores(); - //nt = scores.length / (m2 - m1); - } - - public double getNextScore(){ - if (pos >= scores.length) { - updateScores(); - } - return scores[pos++]; - } - } - - - MergeClass(ArrayList markers1, ArrayList markers2) { - markers = markers2; - - ret = new ArrayList>(); // there might be an overhead of creating this... - - ret.add(new ArrayList()); // first place - for (int m : markers1) { - ret.add(new ArrayList()); - //ret.get(ret.size() - 1).add(m); - } - positions = getPositions(markers1, ret); - //System.err.println("Hiphei"); - - numPositions = positions.size(); - numMarkers = markers.size(); - - f1 = forwardM1;//new double[numMarkers]; - f2 = forwardM2;//new double[numMarkers]; - b1 = backwardM1;//new double[numMarkers]; - b2 = backwardM2;//new double[numMarkers]; - - psc = new ParallelScoreCalculator(); - - } - - //boolean print = true; - //double tmpscore = 0.0; - - public ArrayList merge() - { -// print = true; -// tmpscore = 0.0; - - merge(0, numPositions, 0, numMarkers); -// System.err.println(tmpscore); - - ArrayList ret2 = new ArrayList(); - for (ArrayList l : ret) - ret2.addAll(l); - - //System.err.println(numPositions + "\t" + ret2); - - - return ret2; - } - - public void merge(int p1, int p2, int m1, int m2) - { - if (m2 <= m1) // no markers - return; - if (p2 - p1 <= 1) { // only one position - assert(p2 - p1 == 1); - int pos = positions.get(p1); - for (int j = m1; j < m2; ++j) { - ret.get(pos).add(markers.get(j)); - // tmpscore += score(markers.get(j), pos); - } - return; - } - - int mid = (p1 + p2) / 2; - - double f[] = calcMergeForward_old(p1, mid, m1, m2); - double b[] = calcMergeBackward_old(mid, p2, m1, m2); - double max = Double.NEGATIVE_INFINITY; - int midMarker = 0; - - int numSolutions = 0; - - for (int j = m1 - 1; j < m2; ++j) { - double r = 0.0; - if (j >= m1) - r = f[j]; - if (j < m2 - 1) - r += b[j + 1]; - if (r > max - IMPROVE_TOLERANCE) { - if (r > max + IMPROVE_TOLERANCE) { - numSolutions = 1; - midMarker = j; - } else { - ++numSolutions; - if (Misc.random() <= 1.0 / numSolutions) - midMarker = j; - } - max = Math.max(r, max); - } - } -// if (print) { -// System.err.println("mid = " + mid + "," + midMarker + " score = " + max); -// print = false; -// } - //System.err.println("mid = " + mid + "," + midMarker + " score = " + max); - //calcMergeForward_old(p1, p2, m1, m2); - - - merge(p1, mid, m1, midMarker + 1); - merge(mid, p2, midMarker + 1, m2); - } - - private double[] calcMergeForward_old(int p1, int p2, int m1, int m2) - { - psc.setArea(p1, p2, m1, m2, false); - - double prevRow[] = f1; - double row[] = f2; - - for (int j = m1; j < m2; ++j) - prevRow[j] = Double.NEGATIVE_INFINITY; - - for (int i = p1; i < p2; ++i) { - //row[m1] = Math.max(prevRow[m1], score(markers.get(m1), positions.get(i))); - row[m1] = Math.max(prevRow[m1], psc.getNextScore()); - - for (int j = m1 + 1; j < m2; ++j) { - double v1 = prevRow[j]; - //double v2 = row[j - 1] + score(markers.get(j), positions.get(i)); - double v2 = row[j - 1] + psc.getNextScore(); - if (v1 > v2) { - row[j] = v1; - } - else { - row[j] = v2; - } - - } - double tmp[] = prevRow; - prevRow = row; - row = tmp; - } - //System.err.println("Merge score = " + prevRow[m2 - 1]); - return prevRow; - } - - private double[] calcMergeBackward_old(int p1, int p2, int m1, int m2) - { - psc.setArea(p1, p2, m1, m2, true); - - double prevRow[] = b1; - double row[] = b2; - - for (int j = m1; j < m2; ++j) - prevRow[j] = Double.NEGATIVE_INFINITY; - - for (int i = p2 - 1; i >= p1; --i) { - //row[m2 - 1] = Math.max(prevRow[m2 - 1], score(markers.get(m2 - 1), positions.get(i))); - row[m2 - 1] = Math.max(prevRow[m2 - 1], psc.getNextScore()); - - for (int j = m2 - 2; j >= m1; --j) { - double v1 = prevRow[j]; - //double v2 = row[j + 1] + score(markers.get(j), positions.get(i)); - double v2 = row[j + 1] + psc.getNextScore(); - if (v1 > v2) { - row[j] = v1; - } - else { - row[j] = v2; - } - } - double tmp[] = prevRow; - prevRow = row; - row = tmp; - } - //System.err.println("Merge score = " + prevRow[m1]); - return prevRow; - } - - - - -/* private double[] calcMergeForward_wrong(int p1, int p2, int m1, int m2) - { - int nt = calcNumThreads(p2 - p1, m2 - m1); - if (nt <= 1) - return calcMergeForward_old(p1, p2, m1, m2); - - for (int i = p1; i < p2; ++i) - currentPosition[i] = -1; - - if (p1 > 0) - currentPosition[p1 - 1] = Integer.MAX_VALUE; - - for (int j = m1; j < m2; ++j) - f2[j] = Double.NEGATIVE_INFINITY; - - Thread threads[] = new Thread[nt]; - - MergeRow ret = null; - - int rett = (p2 - p1 - 1) % nt; - - for (int t = 0; t < nt; ++t) { - MergeRow mt = new MergeRow(p1 + t, p2, m1, m2, nt, ((t & 1) == 0) ? f1 : f2, ((t & 1) == 0) ? f2 : f1, false); - threads[t] = new Thread(mt); - threads[t].start(); - if (t == rett) - ret = mt; - } - try { - for (int t = 0; t < nt; ++t) - threads[t].join(); - return ret.getLastLine(); - - } catch (Exception e) { - e.printStackTrace(); - return null; - } - }*/ - - } - - - - private ArrayList merge(ArrayList markers1, ArrayList markers2) { - MergeClass mc = new MergeClass(markers1, markers2); - //System.err.println(markers1 + "|" + markers2); - - //System.err.println(mc.merge()); - //System.err.println(merge_old(markers1, markers2)); - - //return merge_old(markers1, markers2); - return mc.merge(); - } - - - //TODO: backtrack in linear space..., now path stores |M1|*(|M2| + 1) booleans (bytes), done - private ArrayList merge_old(ArrayList markers1, ArrayList markers2) - { - ArrayList positions = getPositions(markers1); - //int numM1 = markers1.size(); - int numM2 = markers2.size(); - boolean path[][] = new boolean[numM2][positions.size()]; - - double prevRow[] = new double[positions.size()]; - double row[] = new double[positions.size()]; - - for (int j = 0; j < numM2; ++j) { - double v = score(markers2.get(j), positions.get(0)); - path[j][0] = true; - row[0] = prevRow[0] + v; - - for (int i = 1; i < positions.size(); ++i) { - double v1 = prevRow[i] + score(markers2.get(j), positions.get(i)); - double v2 = row[i - 1]; - if (v1 > v2 || (v1 == v2 && Misc.random() < 0.5)) { - row[i] = v1; - path[j][i] = true; - } - else { - row[i] = v2; - path[j][i] = false; - } - - } - double tmp[] = prevRow; - prevRow = row; - row = tmp; - } - //System.err.println("Merge score = " + prevRow[positions.size() - 1]); - ArrayList ret = new ArrayList(); - - int prevPosI = markers1.size() - 1; - int i = positions.size() - 1; - int j = numM2 - 1; - - while (i > 0 || j >= 0) { - if (j >= 0 && path[j][i]) { - ret.add(markers2.get(j)); - --j; - } - else { - --i; - for (int k = prevPosI; k >= positions.get(i); --k) - ret.add(markers1.get(k)); - prevPosI = positions.get(i) - 1; - - } - } - return ret; - } - - //private int totalMarkers = 0; - - private ArrayList fastOrder(ArrayList markers, boolean permutate) - { - int numM = markers.size(); - int perm[] = Misc.randomPermutation(numM); - ArrayList m = new ArrayList(); - for (int i = 0; i < numM; ++i) - if (permutate) - m.add(markers.get(perm[i])); - else - m.add(markers.get(i)); - - //totalMarkers = numM; - m = fastOrder_(m, 0, numM); - System.err.println(" done"); - - //printOrder(m, -1, System.err); needs marker names - return m; - } - - private double computeE(ArrayList m) - { - int n = m.size(); - int ret1 = 0; - int ret2 = 0; - - for (int i = 0; i < n; ++i) - System.err.print(markerNames.get(m.get(i)) +"\t"); - - for (int i = 0; i < n; ++i) - for (int j = i + 1; j < n; ++j) { - if (markerNames.get(m.get(i)) > markerNames.get(m.get(j))) - ++ret1; - else if (markerNames.get(m.get(i)) < markerNames.get(m.get(j))) - ++ret2; - } - - return ((double)Math.max(ret1, ret2)) / (ret1 + ret2); - } - - private ArrayList fastOrder_(ArrayList markers, int level, int totalMarkers) - { - int numM = markers.size(); - if (numM > 2) { - if (numM <= 5) { - dataScale = Math.min(1.0, fullDataScale * totalMarkers / numM); - markers = bestOrder(markers); - } else { - ArrayList m1 = new ArrayList(); - ArrayList m2 = new ArrayList(); - int r = 0; - for (int i = 0; i < numM; ++i) { - if ((i & 1) == 0) { - r = (int) (Misc.random() * 2); - if (r == 0) - m1.add(markers.get(i)); - else - m2.add(markers.get(i)); - } else { - if (r == 1) - m1.add(markers.get(i)); - else - m2.add(markers.get(i)); - } - -// if ((i & 1) == 0) -// m1.add(markers.get(i)); -// else -// m2.add(markers.get(i)); - } - - m1 = fastOrder_(m1, level + 1, totalMarkers); - m2 = fastOrder_(m2, level + 1, totalMarkers); - dataScale = Math.min(1.0, fullDataScale * totalMarkers / numM); - - //initTmpRec(((double) totalMarkers) / numM); // take into account the fact that subproblems have less markers... - - double ll = likelihood(m1, true); // to store tables, used in merge... - //System.err.println("logL (half) = " + ll); - ArrayList merge1 = merge(m1, m2); - Collections.reverse(m2); - ArrayList merge2 = merge(m1, m2); - - merge2 = polishTest(merge2); - double l2 = score(merge2); - - merge1 = polishTest(merge1); - double l1 = score(merge1); - - if (l1 >= l2 || Double.isNaN(l2)) { // NaN check to be safe... - markers = merge1; - //System.err.println("logL = " + l1 + " merge1 (" + l2 + ") n=" + numM); - //System.err.print(l1 + "\t" + l2 + "\t"); - } - else { - markers = merge2; - } - if (numM <= 32) - markers = polishFast(markers, perm4, perm4_s, 1.1); //with this extra polish we get more accurate maps but it takes a long time... - } - } - if (level <= 3) - System.err.print((1 << level)); - //System.err.println("Test\t" + computeE(markers)); - return markers; - } - - - private double bestScore = 0; - private boolean refineParentOrder; - public double getBestScore() - { - return bestScore; - } - - public ArrayList findOrder(boolean findInitialOrder) - { - ArrayList ret = new ArrayList(); - ArrayList markers = new ArrayList(); - for (int i = 0; i < numOriginalMarkers; ++i) { - markers.add(i); - ret.add(i); - } - bestScore = score(markers); - double s = bestScore; - System.err.println("Initial score = " + bestScore); - - for (int it = 1; it <= numMergeIterations; ++it) { - - System.err.println("Iteration " + it + " of " + numMergeIterations); - markers = fastOrder(markers, (it == 1) && findInitialOrder); - System.err.println("Polishing map..."); - - markers = polishFast(markers, perm4, perm4_s); // no need if polishFast is called in fastOrder - s = score(markers); - if (s > bestScore) { - System.err.print("*"); - bestScore = s; - for (int i = 0; i < numOriginalMarkers; ++i) - ret.set(i, markers.get(i)); - } - System.err.println("score = " + s); - markers = polishTest(markers); - markers = polishFast(markers, perm5, perm5_s); - s = score(markers); - - //System.err.println("Test\t" + markers + "\t" + computeE(markers) + "\t" + score(markers)); - - if (s > bestScore) { - System.err.print("*"); - bestScore = s; - for (int i = 0; i < numOriginalMarkers; ++i) - ret.set(i, markers.get(i)); - } else if (Misc.random() < 0.75) { - for (int i = 0; i < numOriginalMarkers; ++i) - markers.set(i, ret.get(i)); - } - System.err.println("score = " + s); - - } - - //System.err.println("Final polishing..."); - //ret = polish(ret, perm4first, perm4); - //bestScore = score(ret); - - //improveOrder(ret, 5 * markers.size(), true); - System.err.println("Final score = " + bestScore); - - return ret; - } - - private double computeLOD(float q1[], float q2[], int phase) - { - double f = -23.0; - double sum1 = 1e-10; - double sum2 = 1e-10; - for (int haplotype = 0; haplotype < 4; ++haplotype) { - double q12 = q1[haplotype] + q2[haplotype ^ phase]; - f = Math.max(f, q12); - sum1 += Math.exp(q1[haplotype]); - sum2 += Math.exp(q2[haplotype]); - } - return 4.0 * Math.exp(f) / (sum1 * sum2); - } - - //TODO: Could be more efficient by using StringBuilder - public void printLOD(ArrayList markers, PrintStream stream) - { - //ArrayList markers = new ArrayList(); - //for (int i = 0; i < numMarkers; ++i) - // markers.add(i); - - double ll = likelihood(markers, true); // to store tables, used in merge... - //System.err.println("score = " + ll); - ArrayList positions = this.getUniquePositions(markers);//getPositions(markers); - - int numF = originalHaplotypes.size(); - - stream.print("position"); - for (int i = 0; i < positions.size(); ++i) - stream.print("\tpos_" + i); - stream.println(); - - for (int i = 0; i < markers.size(); ++i) { - stream.print("pos_" + i); - for (int j = 0; j < positions.size(); ++j) { - int fi = 0; - double loglod2 = 0.0; - for (int fam = 0; fam < numF; ++fam) { - int numIndividuals = sfs[fam].numIndividuals; - double maxLogLod = Double.NEGATIVE_INFINITY; - for (int phase = 0; phase < 4; ++phase){ - double lod = 1.0; - double loglod = 0.0; - for (int hi = 0; hi < numIndividuals; ++hi) { - float Q1[] = originalHaplotypes.get(fam)[i][hi];//qTables[fi][positions.get(i)]; - float Q2[] = qTables[fi + hi][positions.get(j)]; - lod *= computeLOD(Q1, Q2, phase); - if (hi == numIndividuals - 1 || (hi & 15) == 15) { - loglod += Math.log10(lod); - lod = 1.0; - } - } - maxLogLod = Math.max(maxLogLod, loglod); - } - loglod2 += maxLogLod; - fi += numIndividuals; - } - stream.print("\t" + loglod2); - } - stream.println(); - } - } - - //TODO: Could be more efficient by using StringBuilder - public void printIntervals(ArrayList markers, PrintStream stream, double limit) - { - //ArrayList markers = new ArrayList(); - //for (int i = 0; i < numMarkers; ++i) - // markers.add(i); - int numMarkers = markers.size(); - - double ll = likelihood(markers, true); // to store tables, used in merge... - ArrayList phasedHaplotypes = getPhasedHaplotypes(markers, true, false); - - ArrayList positions = new ArrayList(); - ArrayList recombinations = new ArrayList(); - - int lastPos = 0; - int recombinationPos = 0; - while (lastPos < numMarkers) { - int nextPos = lastPos + 1; - int delta = 0; - while (nextPos < numMarkers) { - for (int ph[][] : phasedHaplotypes) { - int phh[] = ph[nextPos]; - delta += phh[phh.length - 1] + phh[phh.length - 2]; - } - if (delta > 0) - break; - ++nextPos; - } - positions.add((nextPos + lastPos + 1) / 2); - recombinations.add(recombinationPos); - recombinationPos += delta; - lastPos = nextPos; - } - - int numPositions = positions.size(); - for (int marker = 0; marker < numMarkers; ++marker) { - stream.print((markerNames.get(marker) + 1)); - double maxLod = Double.NEGATIVE_INFINITY; - for (int p = 0; p < numPositions; ++p) - maxLod = Math.max(maxLod, score(marker, positions.get(p))); - - int p = 0; - while (p < numPositions) { - while (p < numPositions && score(marker, positions.get(p)) < maxLod - limit) { - ++p; - } - if (p < numPositions) { - stream.print("\t" + recombinations.get(p)); - while (p < numPositions && score(marker, positions.get(p)) >= maxLod - limit) { - ++p; - } - stream.print("\t" + recombinations.get(p - 1)); - } - } - stream.println(); - - } - - //TODO: continue... - - - //System.err.println("score = " + ll); - - //stream.println(); - } - - - -/* public void refineParents(ArrayList markers, boolean unknownOrder[][]) { - - //for (SingleFamily sf : sfs) - // sf.refineParents(markers, unknownOrder[sf.getFamilyIndex()]); - - - //00,01,10,11 => 00,10,01,11 - //XX XX - //XX XX - int numF = sfs.length; - int numM = markers.size(); - for (int f = 0; f < numF; ++f) { - float[][][] hap = originalHaplotypes.get(fam); - double ll = sfs[f].phase(markers); - for (int mi = 0; mi < numM; ++mi) { - if (unknownOrder[f][mi]) { - swap(mi); // or swapParents(markers.get(mi)); - double llnew = sfs[f].phase(markers); - if (llnew <= ll) - swapParents(mi); // or swapParents(markers.get(mi)); - } - } - System.err.println(sfs[f].numIndividuals); - } - //TODO: add code to figure parental genotypes... - private void refineParents(ArrayList order) - { - ArrayList markers = new ArrayList(); - for (int m1 : order) { - boolean informative = false; - for (Family2 f : data.getFamilies()) - if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) - informative = true; - if (informative) - markers.add(m1); - } - - System.err.println("Refining parents: number of markers = " + markers.size()); - - ArrayList markers2 = new ArrayList(); - boolean unknownOrder[][] = new boolean[data.getNumFamilies()][data.getNumMarkers()]; - for (int mi = 0; mi < markers.size(); ++mi) { - int m = markers.get(mi); - char ipo[] = data.getIgnoreParentOrder(m); - for (int f = 0; f < data.getNumFamilies(); ++f) - unknownOrder[f][mi] = (ipo[f] == '+'); - markers2.add(mi); - } - - of.setHaplotypes(processHaplotypes(markers), informativeMarkers(markers), data, markers); - of.refineParents(markers2, unknownOrder); - } - }*/ - - public void setRefineParentOrder(boolean value) { - refineParentOrder = value; - } - public boolean getRefineParentOrder() { - return refineParentOrder; - } - - -/* public static void main(String args[]) - { - OrderFinder of = new OrderFinder(10); - of.testThreads(); - System.err.println("finished"); - }*/ -} diff --git a/software/LepMap3/lm3/src/OrderMarkers2.java b/software/LepMap3/lm3/src/OrderMarkers2.java deleted file mode 100644 index 4cc1043..0000000 --- a/software/LepMap3/lm3/src/OrderMarkers2.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2017 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ - -//Errorcodes 3xx -//Command line interface for marker ordering -import java.util.ArrayList; -public class OrderMarkers2 { - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(301); - String extraParameters = ""; - for (int i = 0; i < args.length; ++i) { - extraParameters += " " + args[i]; - } - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(301); - - pp.warning(new String[]{"refineParentOrder", "maskIgnoreParentOrder", "calculateIntervals", "data", "informativeMask", "useKosambi", "useMorgan", "improveOrder", "evaluateOrder", "map", "numThreads", "numMergeIterations", "chromosome", "scale", "scaleMode", "minError", "outputPhasedData", "removeMarkers", "sexAveraged", "phasedData", "recombination1", "recombination2", "interference1", "interference2", "identicalLimit", "computeLODScores", "randomPhase", "randSeed", "grandparentPhase", "hyperPhaser", "phasingIterations", "selfingPhase", "families", "usePhysical"}); - - if (pp.getValueAsString("randSeed", null) != null) - Misc.setSeed(Long.parseLong(pp.getValueAsString("randSeed", null))); - else - extraParameters += " randSeed=" + Misc.getSeed(); - - System.out.println("#java OrderMarkers2" + extraParameters); - - Order o3 = new Order(); - Data2 data = new Data2(); - LGMap2 lgm = null; - - if (pp.getValueAsString("useKosambi", "0").equals("1")) - o3.setKosambi(); - else if (pp.getValueAsString("useMorgan", "0").equals("1")) - o3.setMorgan(); - o3.setNumThreads(Integer.parseInt(pp.getValueAsString("numThreads", "1"))); - o3.setNumMergeIterations(Integer.parseInt(pp.getValueAsString("numMergeIterations", "6"))); - o3.setSexAveraged(pp.getValueAsString("sexAveraged", "0").equals("1")); - - double r1 = Double.parseDouble(pp.getValueAsString("recombination1", "0.001")); - double r2 = Double.parseDouble(pp.getValueAsString("recombination2", "0.001")); - double i1 = Double.parseDouble(pp.getValueAsString("interference1", "0.001")); - double i2 = Double.parseDouble(pp.getValueAsString("interference2", "0.001")); - o3.setRecombination(r1, r2, i1, i2); - - o3.setIdenticalLimit(Double.parseDouble(pp.getValueAsString("identicalLimit", "0.01"))); - - o3.setUsePhysical(Integer.parseInt(pp.getValueAsString("usePhysical", 0, "0")), Double.parseDouble(pp.getValueAsString("usePhysical", 1, "0.01"))); - - System.err.println(pp.getValueAsString("usePhysical", 0, "0")); - System.err.println(pp.getValueAsString("usePhysical", 1, "0.01")); - - String chr = pp.getValueAsString("chromosome", null); - String mapFile = pp.getValueAsString("map", null); - boolean mask[] = null; - if (mapFile != null) { - lgm = new LGMap2(); - if (!lgm.loadLGMap(mapFile)) - Error.error(302); - - int numMarkers = lgm.getNumMarkers(); - mask = new boolean[numMarkers];// make a mask to skip unnecessary markers - int chromosome = (chr == null) ? -1 : Integer.parseInt(chr); - for (int i = 0; i < numMarkers; ++i) { - int lg = lgm.getLGName(i); - if (lg != 0 && (chromosome < 0 || chromosome == lg)) - mask[i] = true; - } - - } - - String filename = pp.getValueAsString("data", null); - if (filename == null) - Error.error(301); - - boolean gpPhase = false; - if (pp.getValueAsString("grandparentPhase", "0").equals("1")) { - gpPhase = true; - //System.err.println("Error:grandparentPhase not yet implemented"); - //System.exit(-1); - } - - data.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123"), mask, gpPhase); //somehow input gpPhase - - if (lgm == null) - lgm = new LGMap2(data.getNumMarkers()); - - o3.init(data, lgm); - - - String dataScale = pp.getValueAsString("scale", 0, "M/N"); - - double maxDataScale = Double.parseDouble(pp.getValueAsString("scale", 1, "2")); - double capDataScale = Double.parseDouble(pp.getValueAsString("scale", 2, "" + maxDataScale)); - //data.scale(dataScale); - double minError = Double.parseDouble(pp.getValueAsString("minError", "0.001")); - data.setMinError(minError); - - data.setPhasedData(pp.getValueAsString("phasedData", "0").equals("1") || gpPhase); - - if (pp.getValueAsString("randomPhase", "0").equals("1")) - data.setRandomPhase(); - - if (pp.getValueAsString("selfingPhase", "0").equals("1")) - o3.setSelfingPhase(true); - - o3.setDataScale(dataScale, maxDataScale, capDataScale, Integer.parseInt(pp.getValueAsString("scaleMode", "2"))); - - o3.setHyperPhaser(pp.getValueAsString("hyperPhaser", "0").equals("1")); - o3.setPhasingIterations(Integer.parseInt(pp.getValueAsString("phasingIterations", "1"))); - - for (int m = 0; m < pp.getNumberOfValues("removeMarkers"); ++m) - data.removeMarker(Integer.parseInt(pp.getValueAsString("removeMarkers", m, "0")) - 1); - - if (pp.getNumberOfValues("families") > 0) { - ArrayList f = pp.getValue("families"); - data.keepFamilies(f); - } - - boolean maskParentOrder = pp.getValueAsString("maskIgnoreParentOrder", "0").equals("1"); - if (maskParentOrder) - data.maskIgnoreParentOrder(); - - - String orderFile = pp.getValueAsString("evaluateOrder", null); - boolean refineParentOrder = pp.getValueAsString("refineParentOrder", "0").equals("1"); - if (refineParentOrder && (maskParentOrder || gpPhase)) - Error.error(305); - - o3.setRefineParentOrder(refineParentOrder); - - o3.setPrintPhased(Integer.parseInt(pp.getValueAsString("outputPhasedData", "1"))); - if (orderFile != null) { - o3.evaluateOrder(orderFile, pp.getValueAsString("improveOrder", "1").equals("1")); - } - else { - if (mapFile == null) - Error.error(303); - if (chr == null) - o3.orderChromosomes(true, pp.getValueAsString("improveOrder", "1").equals("1"), pp.getValueAsString("evaluateIndividualErrors", "0").equals("1")); - else - o3.orderChromosomes(Integer.parseInt(chr), true, pp.getValueAsString("improveOrder", "1").equals("1"), pp.getValueAsString("evaluateIndividualErrors", "0").equals("1")); - } - - if (pp.getValueAsString("computeLODScores", null) != null) { - o3.computeLODScores(pp.getValueAsString("computeLODScores", null)); - } - - if (pp.getValueAsString("calculateIntervals", 0, null) != null) { - double limit = Double.parseDouble(pp.getValueAsString("calculateIntervals", 1, "1.0")); - o3.calculateIntervals(pp.getValueAsString("calculateIntervals", 0, null), limit); - } - - } - -} diff --git a/software/LepMap3/lm3/src/OutputData.java b/software/LepMap3/lm3/src/OutputData.java deleted file mode 100644 index c591a86..0000000 --- a/software/LepMap3/lm3/src/OutputData.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki, University of Cambridge -*/ - -//TODO: Test that String builder works -public class OutputData { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(901); - String extraParameters = ""; - System.out.print("#java OutputData "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(901); - pp.warning(new String[]{"data", "map", "sizeLimit", "lod3Mode", "informativeMask"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); // not possible to set... - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); // not possible to set... - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); // not possible to set... - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - - int numDataFiles = pp.getNumberOfValues("data"); - if (numDataFiles == 0 || numDataFiles > 1) - Error.error(4402); - for (int i = 0; i < numDataFiles; ++i) { - String filename = pp.getValueAsString("data", i, null); - if (filename == null) - Error.error(4403); - sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); - } - - //sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - - LGMap2 map = new LGMap2(); - map.loadLGMap(pp.getValueAsString("map", null)); - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - - sc.joinIdenticalsFast(map);// check how works... - - sc.outputData(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - - - //sep.separateChromosomesLOD2(lodLimit); - //LGMap cm = sep.getLGMap(); - //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - //cm.printLGAssignment(data); - } -} diff --git a/software/LepMap3/lm3/src/ParameterParser.java b/software/LepMap3/lm3/src/ParameterParser.java deleted file mode 100644 index 2d38d7c..0000000 --- a/software/LepMap3/lm3/src/ParameterParser.java +++ /dev/null @@ -1,216 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki -*/ -//Parses parameters given as "x=a y=b c d z = e" -import java.util.StringTokenizer; -import java.util.ArrayList; -import java.util.HashMap; - -public class ParameterParser { - private HashMap> hm; - - public ParameterParser() - { - - } - public ParameterParser(String parameters) - { - if (!init(parameters)) - hm = null; - } - - public boolean init(ArrayList tokens) - { - hm = new HashMap>(); - int n = tokens.size(); - int i = 0; - while (i < n) { - String key = tokens.get(i); - if (key.equals("=")) - return false; - ++i; - if (i < n - 1) { - if (!tokens.get(i).equals("=")) - return false; - ++i; - } else - return false; - - ArrayList value = new ArrayList(); - while (i == n - 1 || (i < n - 1 && !tokens.get(i + 1).equals("="))) { - String nv = tokens.get(i); - if (nv.equals("=")) - return false; - value.add(nv); - ++i; - } - if (hm.containsKey(key)) - return false; - hm.put(key, value); - } - return true; - } - public boolean init(String parameters) - { - String delims = "\t =;"; - StringTokenizer st = new StringTokenizer(parameters, delims, true); - - ArrayList tokens = new ArrayList (); - while (st.hasMoreTokens()) { - String nt = st.nextToken(); - if (delims.indexOf(nt) >= 0) { - if (nt.equals("=") || nt.equals(";")) - tokens.add(nt); - } else - tokens.add(nt); - - } - return init(tokens); - } - public ArrayList getValue(String variable) - { - return hm.get(variable); - } - public String getValueAsString(String variable, String defaultValue) - { - ArrayList ret = getValue(variable); - if (ret != null) { - String rets = ""; - for (String s : ret) - rets += " " + s; - return rets.substring(Math.min(1, rets.length())); // remove first space - } - return defaultValue; - } - public int getNumberOfValues(String variable) - { - ArrayList ret = getValue(variable); - if (ret != null) - return ret.size(); - else - return 0; - } - public String getValueAsString(String variable, int index, String defaultValue) - { - ArrayList ret = getValue(variable); - if (ret != null) { - //if (ret.size() == 1 && index >= 0) - //return ret.get(0); - if (index + 1 > ret.size()) // this makes more sense? - return defaultValue; - else - return ret.get(index); - } - return defaultValue; - } - public ArrayList getValuesAsList(String variable) - { - return getValuesAsList(variable, 1, null); - } - - public ArrayList getValuesAsList(String variable, int size, String defaultValue) - { - ArrayList ret = new ArrayList(); - if (getNumberOfValues(variable) == 1 && getValueAsString(variable, null).startsWith("file:")) { - ArrayList> matrix = Input.loadTable(getValueAsString(variable, null).substring(5), "[\t ]"); - if (matrix.size() == 1) - ret.addAll(matrix.get(0)); - if (matrix.size() > 1) { // transpose matrix - ArrayList tp = new ArrayList(); - boolean ok = true; -// System.err.println("Reading matrix"); - for (ArrayList als : matrix) { - if (als.size() != 1) - ok = false; - else - tp.add(als.get(0)); - } - if (ok) - ret.addAll(tp); -// System.err.println("Reading matrix ok" + ok); - } - } else - for (int i = 0; i < getNumberOfValues(variable); ++i) - ret.add(getValueAsString(variable, i, null)); - if (ret.size() == 0) - ret.add(defaultValue); - if (ret.size() == 1) - for (int i = 0; i < size - 1; ++i) - ret.add(new String(ret.get(0))); - return ret; - } - - - public ArrayList> getValuesAsMatrix(String variable) - { - if (getNumberOfValues(variable) == 1 && getValueAsString(variable, null).startsWith("file:")) { -// System.err.println("loading matrix " + getValueAsString(variable, null).substring(5)); - ArrayList> matrix = Input.loadTable(getValueAsString(variable, null).substring(5), "[\t ]"); - return matrix; - } - ArrayList> ret = new ArrayList>(); - if (getNumberOfValues(variable) > 0) - ret.add(new ArrayList()); - int line = 0; - - for (int i = 0; i < getNumberOfValues(variable); ++i) { - if (getValueAsString(variable, i, null).equals(";")) { - ++line; - ret.add(new ArrayList()); - } else - ret.get(line).add(getValueAsString(variable, i, null)); - } - return ret; - } - public boolean warning(String keyWords[]) - { - HashMap hm2 = new HashMap(); - - for (String s : hm.keySet()) - hm2.put(s, 1); - - for (String s : keyWords) - hm2.remove(s); - - if (hm2.size() > 0) { - System.err.println("Error! Unknown parameters: "); - for (String s : hm2.keySet()) - System.err.print(s + " "); - System.err.println(); - System.exit(-1); - } - - return false; - } - - public static void main(String args[]) - { - ParameterParser pp = new ParameterParser("a=40 10 30 b=10 d = 1 2;3 4 6 e=file:ped1"); - System.err.println("a = " + pp.getValue("a")); - System.err.println("b = " + pp.getValue("b")); - System.err.println("c = " + pp.getValue("c")); - System.err.println("d = " + pp.getValue("d")); - System.err.println("number of values for a = " + pp.getNumberOfValues("a")); - System.err.println("number of values for b = " + pp.getNumberOfValues("b")); - System.err.println("number of values for c = " + pp.getNumberOfValues("c")); - System.err.println(pp.getValuesAsList("d")); - System.err.println(pp.getValuesAsMatrix("d")); - System.err.println(pp.getValuesAsMatrix("e")); - } - -} diff --git a/software/LepMap3/lm3/src/ParentCall2.java b/software/LepMap3/lm3/src/ParentCall2.java deleted file mode 100644 index 5874d6d..0000000 --- a/software/LepMap3/lm3/src/ParentCall2.java +++ /dev/null @@ -1,1021 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP3. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge -*/ - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; - -// Posterior aware (subset of) Counts2Genotypes -public class ParentCall2 { - - private final double SMALL = 1e-40; // to avoid problems with zero probabilities - private int numIndividuals = 0; - - private double ZLimit = Double.NEGATIVE_INFINITY; - private double XLimit = Double.NEGATIVE_INFINITY; - private double familyLimit = 2; - - private String names[] = null; - - private boolean ignoreParentOrder = false; - private boolean outputParentPosterior = false; - private boolean halfSibs = false; - - private boolean removeNonInformative = false; - - private ArrayList> families = null; - private ArrayList parentIndex = null; - private ArrayList sex = null; - - private double gpp[][] = new double[6][4]; - - private HashMap familyHash2 = new HashMap(); - - private HashMap> halfSibHash = new HashMap>(); - - private int maxFather; - private int maxMother; - private int maxFather2; - private int maxMother2; - private double maxP; - private double maxP2; - private double maxP3; - - private int numCalledMarkers = 0; - private int numCalledSexMarkers = 0; - private int numInformativeMarkers = 0; - - private DataParser dp = null; - - private boolean outputRaw = false; - - - public void setRaw(boolean value) - { - outputRaw = value; - } - - public void setFamilyLimit(double limit) - { - familyLimit = limit; - } - public void setZLimit(double limit) - { - ZLimit = limit; - } - public void setXLimit(double limit) - { - XLimit = limit; - } - public void setIngnoreParentOrder(boolean value) - { - ignoreParentOrder = value; - //if (ignoreParentOrder) - // System.err.println("ignoreParentOrder is not currently implemented"); - } - public void setRemoveNonInformative(boolean value) - { - removeNonInformative = value; - } - - public void setOutputParentPosterior(boolean value) - { - outputParentPosterior = value; - } - public void setHalfSibs(boolean value) - { - halfSibs = value; - //if (ignoreParentOrder) - // System.err.println("ignoreParentOrder is not currently implemented"); - } - - - //prints also... - public void callParents(String filename, String vcfFile, String posteriorFile, boolean outputLikelihood) { - dp = new DataParser(); - dp.loadFile(filename, vcfFile, posteriorFile); - - ArrayList dl = dp.getNextLine(true); - - families = dp.getFamilies(); - parentIndex = dp.getParentIndex(); - sex = dp.getSex(); - numIndividuals = dp.getNumIndividuals(); - int fam = 0; - for (ArrayList f : families) { - for (int i : f) - familyHash2.put(i, fam); - int[] gp = parentIndex.get(fam); - - // add information about parents to detect half-sibs... - String father = dp.getIndividualName(gp[0]); - String mother = dp.getIndividualName(gp[1]); - if (!halfSibHash.containsKey(father)) - halfSibHash.put(father, new ArrayList()); - if (!halfSibHash.containsKey(mother)) - halfSibHash.put(mother, new ArrayList()); - halfSibHash.get(father).add(gp[0]); - halfSibHash.get(mother).add(gp[1]); - - for (int i : gp) - if (i >= 0) - familyHash2.put(i, fam); - ++fam; - } - for (String parent : halfSibHash.keySet()) - if (halfSibHash.get(parent).size() > 1) { - System.err.print("parent " + parent + " occurs " + halfSibHash.get(parent).size() + " times in the pedigree"); - System.err.println((halfSibs) ? "": " use halfSibs=1 to utilize this information"); - } - while (dl != null) { - //System.err.println(dl); - if (outputRaw) - printRaw(dp.getMarkerName(), dl); - else - callParents(dp.getMarkerName(), dl, outputLikelihood); - dl = dp.getNextLine(true); - } - - System.err.println("Number of called markers = " + numCalledMarkers + " (" + numInformativeMarkers + " informative)"); - System.err.println("Number of called Z/X markers = " + numCalledSexMarkers); - } - private void printResult(String suffix, double output[], int bestMother[], int bestFather[]) - { - //System.out.print(suffix); - StringBuilder sb = new StringBuilder(suffix); - - for (int i = 0; i < numIndividuals; ++i) { - int f = familyHash2.get(i); - int mother = bestMother[f]; - int father = bestFather[f]; - int index = 10 * (numIndividuals * (10 * father + mother) + i); - //System.out.print("\t"); - sb.append('\t'); - double max = SMALL; - for (int j = 0; j < 10; ++j) - max = Math.max(max, output[index + j]); - -/* int fa1 = allele1(father); - int fa2 = allele2(father); - int ma1 = allele1(mother); - int ma2 = allele2(mother); - - System.out.print(output[f][index + mapAlleles(fa1, ma1)] / max + " "); //haplotype 00 - System.out.print(output[f][index + mapAlleles(fa1, ma2)] / max + " "); //haplotype 01 - System.out.print(output[f][index + mapAlleles(fa2, ma1)] / max + " "); //haplotype 10 - System.out.print(output[f][index + mapAlleles(fa2, ma2)] / max); //haplotype 11 -*/ - for (int j = 0; j < 10; ++j) { - if (max == SMALL) - //System.out.print(1); - sb.append('1'); - else { - double r = output[index + j] / max; - if (r == 0.0) - //System.out.print(0); // save some space - sb.append('0'); - else - sb.append(r); - //System.out.print(r); - } - if (j != 9) - sb.append(' '); - //System.out.print(" "); - } - } - System.out.println(sb); - } - - private void printRaw(String suffix, ArrayList dl) - { - StringBuilder sb = new StringBuilder(suffix); - - for (int i = 0; i < numIndividuals; ++i) { - sb.append('\t'); - double max = SMALL; - int index = 10 * i; - for (int j = 0; j < 10; ++j) - max = Math.max(max, dl.get(index + j)); - - for (int j = 0; j < 10; ++j) { - if (max == SMALL) - sb.append('1'); - else { - double r = dl.get(index + j) / max; - if (r == 0.0) - sb.append('0'); - else - sb.append(r); - } - if (j != 9) - sb.append(' '); - } - } - System.out.println(sb); - } - - - private void printResult(String suffix, double output[], double likelihoods[][]) - { - System.out.print(suffix); - for (double ll[] : likelihoods) { // calculate scales for each family - double max = Double.NEGATIVE_INFINITY; - for (int k = 0; k < 100; ++k) - max = Math.max(max, ll[k]); - double sum = 0.0; - for (int k = 0; k < 100; ++k) { - double e = Misc.exp10(ll[k] - max); - ll[k] = e; - sum += e; - } - for (int k = 0; k < 100; ++k) - ll[k] /= sum; - } - - for (int i = 0; i < numIndividuals; ++i) { - int f = familyHash2.get(i); - - double max = SMALL; - for (int j = 0; j < 10; ++j) { - double r = 0.0; - for (int father = 0; father < 10; ++father) - for (int mother = 0; mother < 10; ++mother) { - int index = 10 * (numIndividuals * (10 * father + mother) + i); - double scale = likelihoods[f][10 * father + mother]; - r += scale * output[index + j]; - } - max = Math.max(max, r); - } - System.out.print("\t"); - - for (int j = 0; j < 10; ++j) { - if (max == SMALL) - System.out.print(1); - else { - double r = 0.0; - for (int father = 0; father < 10; ++father) - for (int mother = 0; mother < 10; ++mother) { - int index = 10 * (numIndividuals * (10 * father + mother) + i); - double scale = likelihoods[f][10 * father + mother]; - r += scale * output[index + j]; - } - r = r / max; - if (r == 0.0) - System.out.print(0); // save some space - else - System.out.print(r); - } - if (j != 9) - System.out.print(" "); - } - } - System.out.println(); - } - - private void update_halfSibs(ArrayList posteriors, double likelihoods[][], boolean swapSex) - { - //marginalize parents out from likelihoods - - int numFamilies = likelihoods.length; - - double marginal1[][] = new double[numFamilies][10];//father - double marginal2[][] = new double[numFamilies][10];//mother - for (int fam = 0; fam < numFamilies; ++fam){ - Arrays.fill(marginal1[fam], Double.NEGATIVE_INFINITY); - Arrays.fill(marginal2[fam], Double.NEGATIVE_INFINITY); - } - - for (int iterations = 1; iterations <= 2; ++iterations) - for (int fam = 0; fam < numFamilies; ++fam) { // for each family - double ll[] = likelihoods[fam]; - - ArrayList familyIndex = families.get(fam); - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 1); - int motherIndex = familyIndex.get(numInd - 2); - if ((sex.get(motherIndex) == 1 && !swapSex) || (sex.get(motherIndex) == 2 && swapSex)) { - int tmp = motherIndex; - motherIndex = fatherIndex; - fatherIndex = tmp; - } - if (iterations == 1) { // calculate marginals... - for (int gFather = 0; gFather < 10; ++gFather) - for (int gMother = 0; gMother < 10; ++gMother) { - marginal1[fam][gFather] = Misc.logSum(marginal1[fam][gFather], ll[10 * gFather + gMother] * Constants.LN10); - marginal2[fam][gMother] = Misc.logSum(marginal2[fam][gMother], ll[10 * gFather + gMother] * Constants.LN10); - } - double max1 = Double.NEGATIVE_INFINITY; - double max2 = Double.NEGATIVE_INFINITY; - for (int parent = 0; parent < 10; ++parent) { - marginal1[fam][parent] -= Math.log(SMALL + posteriors.get(10 * fatherIndex + parent)); - marginal2[fam][parent] -= Math.log(SMALL + posteriors.get(10 * motherIndex + parent)); - max1 = Math.max(max1, marginal1[fam][parent]); - max2 = Math.max(max2, marginal2[fam][parent]); - } - for (int parent = 0; parent < 10; ++parent) { - marginal1[fam][parent] -= max1; - marginal2[fam][parent] -= max2; - } - } else { // add marginals to parental genotype likelihoods... - String father = dp.getIndividualName(fatherIndex); - String mother = dp.getIndividualName(motherIndex); - ArrayList parents1 = halfSibHash.get(father); - ArrayList parents2 = halfSibHash.get(mother); - - double logP[] = new double[10]; - for (int gFather = 0; gFather < 10; ++gFather) - logP[gFather] = Math.log(SMALL * 1e-6 + posteriors.get(10 * fatherIndex + gFather)); - double logM[] = new double[10]; - for (int gMother = 0; gMother < 10; ++gMother) - logM[gMother] = Math.log(SMALL * 1e-6 + posteriors.get(10 * motherIndex + gMother)); - - for (int otherFather : parents1) - if (otherFather != fatherIndex) { - int fam2 = familyHash2.get(otherFather); - for (int gFather = 0; gFather < 10; ++gFather) - logP[gFather] += marginal1[fam2][gFather]; - } - for (int otherMother : parents2) - if (otherMother != motherIndex) { - int fam2 = familyHash2.get(otherMother); - for (int gMother = 0; gMother < 10; ++gMother) - logM[gMother] += marginal2[fam2][gMother]; - } - double maxLogP = Double.NEGATIVE_INFINITY; - for (int gFather = 0; gFather < 10; ++gFather) - maxLogP = Math.max(maxLogP, logP[gFather]); - double maxlogM = Double.NEGATIVE_INFINITY; - for (int gMother = 0; gMother < 10; ++gMother) - maxlogM = Math.max(maxlogM, logM[gMother]); - - for (int gFather = 0; gFather < 10; ++gFather) - posteriors.set(10 * fatherIndex + gFather, Math.exp(logP[gFather] - maxLogP)); - for (int gMother = 0; gMother < 10; ++gMother) - posteriors.set(10 * motherIndex + gMother, Math.exp(logM[gMother] - maxlogM)); - } - } - //System.out.println(posteriors); - } - - - public void callParents(String suffix, ArrayList posteriors, boolean outputLikelihood) - { - double lz = Double.NEGATIVE_INFINITY; - double lx = Double.NEGATIVE_INFINITY; - double ll = 0.0; - int numFamilies = families.size(); - - double output1[] = new double[numIndividuals * 10 * 100]; - double output2[] = new double[numIndividuals * 10 * 100]; - - double likelihoods1[][] = new double[numFamilies][100]; - double likelihoods2[][] = new double[numFamilies][100]; - int bestFather[] = new int[numFamilies]; - int bestMother[] = new int[numFamilies]; - int secondBestFather[] = new int[numFamilies]; - int secondBestMother[] = new int[numFamilies]; - - int bestFather2[] = new int[numFamilies]; - int bestMother2[] = new int[numFamilies]; - int secondBestFather2[] = new int[numFamilies]; - int secondBestMother2[] = new int[numFamilies]; - - double maxPs[] = new double[numFamilies]; - double maxP2s[] = new double[numFamilies]; - double maxP3s[] = new double[numFamilies]; - - double maxPs2[] = new double[numFamilies]; - double maxP2s2[] = new double[numFamilies]; - double maxP3s2[] = new double[numFamilies]; - - boolean informative = false; - boolean orderIgnored = false; - - char ignoreOrder[] = new char[numFamilies]; - - - int family = 0; - for (ArrayList familyIndex : families) { - ll += likelihood(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); - - //System.err.println(maxP - maxP2); - bestFather[family] = maxFather; - bestMother[family] = maxMother; - secondBestFather[family] = maxFather2; - secondBestMother[family] = maxMother2; - - maxPs[family] = maxP; - maxP2s[family] = maxP2; - maxP3s[family] = maxP3; - - ++family; - } - - if (!Double.isInfinite(ZLimit)) { - lz = 0.0; - family = 0; - for (ArrayList familyIndex : families) { - lz += likelihoodZ(posteriors, familyIndex, parentIndex.get(family), output2, likelihoods2[family]); - bestFather2[family] = maxFather; - bestMother2[family] = maxMother; - secondBestFather2[family] = maxFather2; - secondBestMother2[family] = maxMother2; - - maxPs2[family] = maxP; - maxP2s2[family] = maxP2; - maxP3s2[family] = maxP3; - - ++family; - } - //if (lz >= ll + ZLimit) - //System.err.println(lz + " Z vs. " + ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")"); - } else if (!Double.isInfinite(XLimit)) { - lx = 0.0; - family = 0; - for (ArrayList familyIndex : families) { - lx += likelihoodX(posteriors, familyIndex, parentIndex.get(family), output2, likelihoods2[family]); - bestFather2[family] = maxFather; - bestMother2[family] = maxMother; - secondBestFather2[family] = maxFather2; - secondBestMother2[family] = maxMother2; - - maxPs2[family] = maxP; - maxP2s2[family] = maxP2; - maxP3s2[family] = maxP3; - - ++family; - } - //if (lx >= ll + XLimit) { - // System.err.println(lx + " X vs. " + ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")" + " " + bestFather[family - 1] + ","+ bestMother[family - 1]); - //} - - } - - boolean XMarker = lx - XLimit >= ll; - boolean ZMarker = lz - ZLimit >= ll; - boolean sexMarker = (XMarker || ZMarker); - - if (sexMarker) { - maxPs = maxPs2; - maxP2s = maxP2s2; - maxP3s = maxP3s2; - - bestFather = bestFather2; - bestMother = bestMother2; - secondBestFather = secondBestFather2; - secondBestMother = secondBestMother2; - - likelihoods1 = likelihoods2; - output1 = output2; - - suffix = suffix + "*"; - - if (outputLikelihood) - System.err.println(suffix + "\t" + Math.max(lx, lz)); - - } else { - if (outputLikelihood) - System.err.println(suffix + "\t" + ll); - } - - if (halfSibs) { - - if (XMarker) - update_halfSibs(posteriors, likelihoods1, true); - else - update_halfSibs(posteriors, likelihoods1, false); - - family = 0; - Arrays.fill(output1, 0.0); - for (ArrayList familyIndex : families) { - if (XMarker) - likelihoodX(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); - else if (ZMarker) - likelihoodZ(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); - else - likelihood(posteriors, familyIndex, parentIndex.get(family), output1, likelihoods1[family]); - - //System.err.println(maxP - maxP2); - bestFather[family] = maxFather; - bestMother[family] = maxMother; - secondBestFather[family] = maxFather2; - secondBestMother[family] = maxMother2; - - maxPs[family] = maxP; - maxP2s[family] = maxP2; - maxP3s[family] = maxP3; - - ++family; - - } - } - - for (family = 0; family < numFamilies; ++family) { - double maxP = maxPs[family]; - double maxP2 = maxP2s[family]; - double maxP3 = maxP3s[family]; - - int maxFather = bestFather[family]; - int maxMother = bestMother[family]; - - int maxFather2 = secondBestFather[family]; - int maxMother2 = secondBestMother[family]; - - boolean orderClear = maxP - maxP2 >= familyLimit; - - if (orderClear || (ignoreParentOrder && maxMother == maxFather2 && maxFather == maxMother2 && maxP - maxP3 >= familyLimit)) { - - if (("0479".indexOf("" + maxFather) < 0 || "0479".indexOf("" + maxMother) < 0)) // informative - informative = true; - if (sexMarker && maxFather != maxMother) - informative = true; - - if (!orderClear) { - orderIgnored = true; - ignoreOrder[family] = '+'; - } else - ignoreOrder[family] = '_'; - - //in case of either parents could be informative, put father as informative - if (!orderClear && ignoreParentOrder && maxP - maxP2 <= SMALL) { // order of parents ignored, no difference in likelihood - if (("0479".indexOf("" + maxMother) < 0 && "0479".indexOf("" + maxFather) >= 0)) {// mother only informative - bestFather[family] = maxFather2; - bestMother[family] = maxMother2; - } - } - } else { - ArrayList familyIndex = families.get(family); - for (int i : familyIndex) // clear posteriors - for (int j = 0; j < 10; ++j) - output1[10 * numIndividuals * (10 * maxFather + maxMother) + j + 10 * i] = 1.0; - - if (outputParentPosterior) { - for (int k = 0; k < 100; ++k) - for (int i : familyIndex) // clear posteriors - for (int j = 0; j < 10; ++j) - output1[10 * numIndividuals * k + j + 10 * i] = 1.0; - } - - ignoreOrder[family] = '_'; - } - //System.err.println(ll + " " + maxFather + " x " + maxMother + " (" + maxFather2 + " x " + maxMother2 + ")"); - } - - if (informative) - ++numInformativeMarkers; - if (informative || !removeNonInformative) { - if (orderIgnored) { - if (!outputParentPosterior) - printResult(suffix + new String(ignoreOrder), output1, bestMother, bestFather); - else - printResult(suffix + new String(ignoreOrder), output1, likelihoods1); - } - else - if (!outputParentPosterior) - printResult(suffix, output1, bestMother, bestFather); - else - printResult(suffix, output1, likelihoods1); - ++numCalledMarkers; - if (sexMarker) - ++numCalledSexMarkers; - } - } - - private int mapAlleles(int a1, int a2) - { - if (a1 > a2) - return mapAlleles(a2, a1); // a1 <= a2 - if (a2 > 3) - Error.error(505); - if (a1 == 0) - return a2; - if (a1 == 1) - return 3 + a2; - if (a1 == 2) - return 5 + a2; - if (a1 == 3) - return 9; - Error.error(505); - return -1; - } - - private int allele1(int g) - { - if (g < 4) - return 0; - if (g < 7) - return 1; - if (g < 9) - return 2; - if (g == 9) - return 3; - Error.error(505); - return -1; - } - - private int allele2(int g) - { - if (g < 4) - return g; - if (g < 7) - return g - 3; - if (g < 9) - return g - 5; - if (g == 9) - return 3; - Error.error(505); - return -1; - } - public double likelihoodZ(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) - { - return likelihoodZX(posteriors, familyIndex, grandParentIndex, output, likelihoods, true); - } - public double likelihoodX(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) - { - return likelihoodZX(posteriors, familyIndex, grandParentIndex, output, likelihoods, false); - } - public double likelihoodZX(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[], boolean isZ) { - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 1); - int motherIndex = familyIndex.get(numInd - 2); - if ((sex.get(motherIndex) == 1 && isZ) || (sex.get(motherIndex) == 2 && !isZ)) { - int tmp = motherIndex; - motherIndex = fatherIndex; - fatherIndex = tmp; - } - fatherIndex *= 10; - motherIndex *= 10; - maxP = Double.NEGATIVE_INFINITY; - maxP2 = Double.NEGATIVE_INFINITY; - maxP3 = Double.NEGATIVE_INFINITY; - Arrays.fill(likelihoods, Double.NEGATIVE_INFINITY); - - int outputIndex = 0; - for (int fatherAllele1 = 0; fatherAllele1 < 4; ++fatherAllele1) - for (int fatherAllele2 = fatherAllele1; fatherAllele2 < 4; ++fatherAllele2) - for (int motherAllele1 = 0; motherAllele1 < 4; ++motherAllele1) - for (int motherAllele2 = motherAllele1; motherAllele2 < 4; ++motherAllele2) { - if (motherAllele1 == motherAllele2) { - int gFather = mapAlleles(fatherAllele1, fatherAllele2); - int gMother = mapAlleles(motherAllele1, motherAllele2); - - double pF = Math.log10(SMALL + posteriors.get(fatherIndex + gFather)); - double pM = Math.log10(SMALL + posteriors.get(motherIndex + gMother)); - double p = pF + pM; - - //grandparents... - for (int gpii = 2; gpii < 6; ++gpii) { - int gpi = 10 * grandParentIndex[gpii]; - if (!isZ) - gpi = 10 * grandParentIndex[7 - gpii]; // put parentIndex in correct order fox XY system... - if (gpi >= 0) { - Arrays.fill(gpp[gpii], 0.0); - for (int g1 = 0; g1 < 10; ++g1) { - double post = posteriors.get(gpi + g1); - if (gpi == fatherIndex) //backcross support - post = (g1 == gFather) ? 1 : 0; - if (gpi == motherIndex) //backcross support - post = (g1 == gMother) ? 1 : 0; - - int a1 = allele1(g1); - int a2 = allele2(g1); - boolean valid = false; - if (gpii == 2) { - output[outputIndex + gpi + g1] = post; - valid = true; - } - if (gpii == 3 && a1 == a2 && (a1 == fatherAllele1 || a1 == fatherAllele2)) { - output[outputIndex + gpi + mapAlleles(a1, motherAllele1)] = post; - valid = true; - } - if (gpii == 4 && (a1 == motherAllele1 || a2 == motherAllele1)) { - output[outputIndex + gpi + g1] = post; - valid = true; - } - if (gpii == 5 && a1 == a2) { - output[outputIndex + gpi + mapAlleles(a1, motherAllele1)] = post; - valid = true; - } - if (valid) { - gpp[gpii][a1] = Math.max(gpp[gpii][a1], post); - gpp[gpii][a2] = Math.max(gpp[gpii][a2], post); - } - - } - - //normalize gpp - double max = 0.0; - for (int a1 = 0; a1 < 4; ++a1) - if (gpp[gpii][a1] > max) - max = gpp[gpii][a1]; - double imax = 1.0; - if (max > 0.0) - imax = 1.0 / max; - - for (int a1 = 0; a1 < 4; ++a1) - gpp[gpii][a1] *= imax; - - //if (gpii == 2); // fathers grandfather - //if (gpii == 3); // fathers grandmother - //if (gpii == 4); // mothers grandfather - //if (gpii == 5); // mothers grandmother - - } else - Arrays.fill(gpp[gpii], 1.0); - } - - //System.out.println("**"); - //System.out.println((fatherAllele1+1) + "x" + (fatherAllele2 + 1)); - //Misc.printArray(gpp); - //System.out.println("**"); - - //autosome: - //p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); - //p += Math.log10(SMALL + Math.max(gpp[4][motherAllele1] * gpp[5][motherAllele2], gpp[4][motherAllele2] * gpp[5][motherAllele1])); - - p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); - p += Math.log10(SMALL + gpp[4][motherAllele1]); - - //grandparents... - - for (int i : familyIndex) { - int j = 10 * i; - if (j != motherIndex && j != fatherIndex) { - int s = sex.get(i); - if (!isZ && (s == 1 || s == 2)) - s = 3 - s; - - if (s == 0) { - - int g1 = mapAlleles(fatherAllele1, motherAllele1); - int g2 = mapAlleles(fatherAllele2, motherAllele1); - - int g3 = mapAlleles(fatherAllele1, fatherAllele1); - int g4 = mapAlleles(fatherAllele2, fatherAllele2); - - double p1 = posteriors.get(j + g1); - double p2 = posteriors.get(j + g2); - double p3 = posteriors.get(j + g3); - double p4 = posteriors.get(j + g4); - - output[outputIndex + j + g1] += p1; - output[outputIndex + j + g2] += p2; - - if (fatherAllele1 != fatherAllele2) { //note: identical code below... - if (fatherAllele1 != motherAllele1) - g3 = mapAlleles(fatherAllele1, motherAllele1); - if (fatherAllele2 != motherAllele1) - g4 = mapAlleles(fatherAllele2, motherAllele1); - } - - output[outputIndex + j + g3] += p3; - output[outputIndex + j + g4] += p4; - - p += Math.log10(SMALL + p1 + p2 + p3 + p4) - Constants.LOGFOUR; - - } else if (s == 1) { - int g1 = mapAlleles(fatherAllele1, motherAllele1); - int g2 = mapAlleles(fatherAllele2, motherAllele1); - double p1 = posteriors.get(j + g1); - double p2 = posteriors.get(j + g2); - - output[outputIndex + j + g1] += p1; - output[outputIndex + j + g2] += p2; - - p += Math.log10(0.5 * SMALL + p1 + p2) - Constants.LOGTWO; - - } else if (s == 2) { - int g1 = mapAlleles(fatherAllele1, fatherAllele1); - int g2 = mapAlleles(fatherAllele2, fatherAllele2); - double p1 = posteriors.get(j + g1); - double p2 = posteriors.get(j + g2); - - if (fatherAllele1 != fatherAllele2) { //note: identical code above... - if (fatherAllele1 != motherAllele1) - g1 = mapAlleles(fatherAllele1, motherAllele1); - if (fatherAllele2 != motherAllele1) - g2 = mapAlleles(fatherAllele2, motherAllele1); - } - output[outputIndex + j + g1] += p1; - output[outputIndex + j + g2] += p2; - p += Math.log10(0.5 * SMALL + p1 + p2) - Constants.LOGTWO; - - - } else { - Error.error(506); - } - } - } - if (p > maxP) { - maxP3 = maxP2; - - maxP2 = maxP; - maxFather2 = maxFather; - maxMother2 = maxMother; - - maxP = p; - maxFather = gFather; - maxMother = gMother; - } else if (p > maxP2) { - maxP3 = maxP2; - - maxP2 = p; - maxFather2 = gFather; - maxMother2 = gMother; - } else if (p > maxP3) - maxP3 = p; - - likelihoods[10 * gFather + gMother] = p; - - if (fatherAllele1 == fatherAllele2 && fatherAllele1 != motherAllele1) { - gMother = mapAlleles(fatherAllele1, motherAllele1); - } - - output[outputIndex + fatherIndex + gFather] += 1; - output[outputIndex + motherIndex + gMother] += 1; - } // end of if (motherAllele1 == motherAllele2) - outputIndex += 10 * numIndividuals; - } - return maxP; - //System.err.println(maxMother + " x " + maxFather); - } - - public double likelihood(ArrayList posteriors, ArrayList familyIndex, int grandParentIndex[], double output[], double likelihoods[]) { - int numInd = familyIndex.size(); - int fatherIndex = familyIndex.get(numInd - 1); - int motherIndex = familyIndex.get(numInd - 2); - - if (sex.get(motherIndex) == 1) { // is this needed? - int tmp = motherIndex; - motherIndex = fatherIndex; - fatherIndex = tmp; - } - //System.err.println("motherIndex = " + motherIndex); - //System.err.println("fatherIndex = " + fatherIndex); - fatherIndex *= 10; - motherIndex *= 10; - maxP = Double.NEGATIVE_INFINITY; - maxP2 = Double.NEGATIVE_INFINITY; - maxP3 = Double.NEGATIVE_INFINITY; - int outputIndex = 0; - for (int fatherAllele1 = 0; fatherAllele1 < 4; ++fatherAllele1) - for (int fatherAllele2 = fatherAllele1; fatherAllele2 < 4; ++fatherAllele2) - for (int motherAllele1 = 0; motherAllele1 < 4; ++motherAllele1) - for (int motherAllele2 = motherAllele1; motherAllele2 < 4; ++motherAllele2) { - int gFather = mapAlleles(fatherAllele1, fatherAllele2); - int gMother = mapAlleles(motherAllele1, motherAllele2); - double pF = Math.log10(SMALL + posteriors.get(fatherIndex + gFather)); - double pM = Math.log10(SMALL + posteriors.get(motherIndex + gMother)); - double p = pF + pM; - - //grandparents... - for (int gpii = 2; gpii < 6; ++gpii) { - int gpi = 10 * grandParentIndex[gpii]; - if (gpi >= 0) { - Arrays.fill(gpp[gpii], 0.0); - - for (int g1 = 0; g1 < 10; ++g1) { - double post = posteriors.get(gpi + g1); - - //System.err.println(gpi + "\t" + fatherIndex); - if (gpi == fatherIndex) { //backcross support - post = (g1 == gFather) ? 1 : 0; - //System.err.println("Hiphei"); - } - if (gpi == motherIndex) { //backcross support - post = (g1 == gMother) ? 1 : 0; - } - - output[outputIndex + gpi + g1] = post; //keep the posteriors for grandparents - - gpp[gpii][allele1(g1)] = Math.max(gpp[gpii][allele1(g1)], post); - gpp[gpii][allele2(g1)] = Math.max(gpp[gpii][allele2(g1)], post); - } - //if (gpii == 2); // fathers grandfather - //if (gpii == 3); // fathers grandmother - //if (gpii == 4); // mothers grandfather - //if (gpii == 5); // mothers grandmother - } else - Arrays.fill(gpp[gpii], 1.0); - } - - p += Math.log10(SMALL + Math.max(gpp[2][fatherAllele1] * gpp[3][fatherAllele2], gpp[2][fatherAllele2] * gpp[3][fatherAllele1])); - p += Math.log10(SMALL + Math.max(gpp[4][motherAllele1] * gpp[5][motherAllele2], gpp[4][motherAllele2] * gpp[5][motherAllele1])); - - //grandparents... - - for (int i : familyIndex) { - int j = 10 * i; - if (j != motherIndex && j != fatherIndex) { - int g1 = mapAlleles(fatherAllele1, motherAllele1); - int g2 = mapAlleles(fatherAllele1, motherAllele2); - int g3 = mapAlleles(fatherAllele2, motherAllele1); - int g4 = mapAlleles(fatherAllele2, motherAllele2); - double p1 = posteriors.get(j + g1); - double p2 = posteriors.get(j + g2); - double p3 = posteriors.get(j + g3); - double p4 = posteriors.get(j + g4); - output[outputIndex + j + g1] += p1; - output[outputIndex + j + g2] += p2; - output[outputIndex + j + g3] += p3; - output[outputIndex + j + g4] += p4; - p += Math.log10(SMALL + p1 + p2 + p3 + p4) - Constants.LOGFOUR; - - } - } - output[outputIndex + fatherIndex + gFather] += 1; - output[outputIndex + motherIndex + gMother] += 1; - outputIndex += 10 * numIndividuals; - if (p > maxP) { - maxP3 = maxP2; - - maxP2 = maxP; - maxFather2 = maxFather; - maxMother2 = maxMother; - - maxP = p; - maxFather = gFather; - maxMother = gMother; - } else if (p > maxP2) { - maxP3 = maxP2; - - maxP2 = p; - maxFather2 = gFather; - maxMother2 = gMother; - } else if (p > maxP3) - maxP3 = p; - likelihoods[10 * gFather + gMother] = p; - } - return maxP; - //System.err.println(maxMother + " x " + maxFather); - } - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(501); - String extraParameters = ""; - System.out.print("#java ParentCall2"); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(501); - pp.warning(new String[]{"data", "familyLimit", "ZLimit", "XLimit", "ignoreParentOrder", "removeNonInformative", "vcfFile", "posteriorFile", "outputParentPosterior", "halfSibs", "outputSNPLikelihood", "outputRaw"}); - - String filename = pp.getValueAsString("data", null); - if (filename == null) - Error.error(501); - - String vcfFile = pp.getValueAsString("vcfFile", null); - String posteriorFile = pp.getValueAsString("posteriorFile", null); - if (vcfFile != null && posteriorFile != null) - Error.error(514); - - ParentCall2 pg = new ParentCall2(); - - double familyLimit = Double.parseDouble(pp.getValueAsString("familyLimit", "2")); - pg.setFamilyLimit(familyLimit); - pg.setZLimit(Double.parseDouble(pp.getValueAsString("ZLimit", "" + Double.POSITIVE_INFINITY))); - pg.setXLimit(Double.parseDouble(pp.getValueAsString("XLimit", "" + Double.POSITIVE_INFINITY))); - if (pp.getValueAsString("ignoreParentOrder", "0").equals("1")) - pg.setIngnoreParentOrder(true); - if (pp.getValueAsString("removeNonInformative", "0").equals("1")) - pg.setRemoveNonInformative(true); - - if (pp.getValueAsString("outputParentPosterior", "0").equals("1")) - pg.setOutputParentPosterior(true); - - if (pp.getValueAsString("halfSibs", "0").equals("1")) - pg.setHalfSibs(true); - - if (pp.getValueAsString("outputRaw", "0").equals("1")) - pg.setRaw(true); - - - pg.callParents(filename, vcfFile, posteriorFile, pp.getValueAsString("outputSNPLikelihood", "0").equals("1")); - } -} diff --git a/software/LepMap3/lm3/src/Pileup2Likelihoods.java b/software/LepMap3/lm3/src/Pileup2Likelihoods.java deleted file mode 100644 index 7bb17df..0000000 --- a/software/LepMap3/lm3/src/Pileup2Likelihoods.java +++ /dev/null @@ -1,549 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2020 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki -*/ -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; - -//TODO: vcf output, indels, output depth, ploidy - -public class Pileup2Likelihoods { - - int ploidy = 2; - double minQ = 0.001; - boolean callIndels = false; - - float logP2[][][] = new float[3][94][94]; //33-126 - ArrayList numAlleles = null; - ArrayList numAllelesT = null; // store array in transpose as well - - - public void setPloidy(int ploidy) { - this.ploidy = ploidy; - logP2 = new float[ploidy + 1][94][94]; - } - - public void setCallIndels(boolean value) { - callIndels = value; - } - - public void setMinQ(double value) - { - minQ = value; - } - - private final double logTerm = -0.1 * Constants.LN10; - - private double quality(int q) { - if (q == 0) - return 0.75; // all 4 bases equal prob - if (q == 1) - return 0.725; // between q=1 and q=2 - return Math.exp(logTerm * q); - } - - private double combineQ(int q1, int q2) { - double p1 = quality(q1); - double p2 = quality(q2); - double ret = p1 + p2 - p1 * p2; - if (ret > 0.75) - ret = 0.75; - return ret; - } - - public void initTables() - { - double iploidy = 1.0 / ploidy; - for (int i = 0; i < 94; ++i) { - boolean fill = false; - for (int j = i; j < 94; ++j) { - if (fill) { - for (int pl = 0; pl <= ploidy; ++pl) - logP2[pl][j][i] = logP2[pl][i][j] = logP2[pl][i][j - 1]; - } else { - double q = combineQ(i, j); - if (q < minQ) { - q = minQ; - fill = true; - } - double q3 = q / 3.0; - - for (int pl = 0; pl <= ploidy; ++pl) - logP2[pl][j][i] = logP2[pl][i][j] = (float) Math.log((pl * (1 - q) + (ploidy - pl) * q3) * iploidy); - - //logP2[0] - //logP2[1] - //logP2[2] - - //logP[j][i] = logP[i][j] = (float) Math.log(q / 3); - //logNP2[j][i] = logNP2[i][j] = (float) (Math.log(q / 3 + (1 - q)) + Constants.LNHALF); - //logNP[j][i] = logNP[i][j] = (float) Math.log(1 - q); - } - } - - } - int allele[] = new int[ploidy]; - //for (int pl = 0; pl < ploidy; ++pl) - // allele[pl] = 1; - numAlleles = new ArrayList(); - numAlleles.add(new int[]{ploidy,0,0,0}); //A..A - int k = ploidy - 1; - while (k >= 0) { - if (allele[k] < 3) { - ++allele[k]; - for (int l = k + 1; l < ploidy; ++l) - allele[l] = allele[k]; - int na[] = new int[4]; - for (int l = 0; l < ploidy; ++l) - ++na[allele[l]]; - numAlleles.add(na); - k = ploidy - 1; - } - else - --k; - } - //print genotypes - int g = 0; - for (int[] list : numAlleles) { - String alleles = "ACGT"; - for (int i = 0; i < 4; ++i) - for (int j = 0; j < list[i]; ++j) - System.err.print(alleles.charAt(i)); - System.err.println("\t" + (g + 1)); - ++g; - } - numAllelesT = new ArrayList(); // transpose - for (int i = 0; i < 4; ++i) { - int na[] = new int[numAlleles.size()]; - int j = 0; - for (int[] list : numAlleles) - na[j++] = list[i]; - numAllelesT.add(na); - } - - - System.err.println("number of different genotypes is " + numAlleles.size()); - } - - public Pileup2Likelihoods() { - } - int numIndividuals = 0; - - private int count[]; - private int count2[] = new int[4]; - - private int intMapping[]; - - private int coveragePerIndividual = 0; - private int numLowerCoverage = 0; - private int minimumAlleleFreq = 0; - private int minCoverageSum = 0; - - private void setMinCoverageSum(int value) { - if (value < 0) - minCoverageSum = (numIndividuals - numLowerCoverage) * coveragePerIndividual; - else - minCoverageSum = value; - } - - private void setCoveragePerIndividual(int value) { - coveragePerIndividual = value; - } - - private void setMinimumAlleleFreq(int value) { - minimumAlleleFreq = value; - } - - private void setMinimumAlleleFreqRatio(double value) { - minimumAlleleFreq = (int)(0.5 + value * numIndividuals); - } - - private void setNumLowerCoverage(int value) { - numLowerCoverage = value; - } - - private void setNumLowerCoverageRatio(double value) { - numLowerCoverage = (int) (0.5 + numIndividuals * value); - } - - ArrayList individualNames = new ArrayList(); - - private void processMapping(String mappingFile) - { - ArrayList> it = Input.loadTable(mappingFile, "\t "); - ArrayList values = new ArrayList(); - - if (it == null || it.size() == 0) - Error.error(3002); - - int n = 0; - for (ArrayList row : it) { - if (row.size() == 0 || (n > 0 && row.size() != n)) - Error.error(3002); - values.addAll(row); - n = row.size(); - } - if (it.size() > 1 && n > 1) - Error.error(3002); - - - HashMap hm = new HashMap(); - - numIndividuals = 0; - for (String m : values) - if (!hm.containsKey(m)) { - hm.put(m, numIndividuals++); - individualNames.add(m); - } - - intMapping = new int[values.size()]; - int i = 0; - for (String m : values) - intMapping[i++] = hm.get(m); - - count = new int[numIndividuals]; - - System.err.println("Number of bams is " + values.size()); - System.err.println("Number of individuals is " + numIndividuals); - } - private void processPileup(String filename) - { - System.out.print("CHR\tPOS"); - for (int i = 0; i < numIndividuals; ++i) { - System.out.print("\t" + individualNames.get(i)); - } - System.out.println(); - - try { - BufferedReader br = null; - if (filename.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(filename)); - - ArrayList line = Input.loadTableRow(br, "\t"); - while (line != null) { - processOneRow(line); - line = Input.loadTableRow(br, "\t"); - } - } catch (Exception e) { - e.printStackTrace(); - System.exit(-1); - } - } - - // save storage space (small=>0, 1.0=>1) and slightly faster - private String myExp(double value){ - if (value == 0.0) - return "1"; - else if (value < -46.0) - return "0"; - else - return "" + (float) Math.exp(value); - } - - - private void processOneRow(ArrayList row) - { - //ArrayList row2 = new ArrayList(); - //row2.addAll(row); - ArrayList> indels = null; - if (callIndels) { - indels = new ArrayList>(); - for (int i = 0; i < numIndividuals; ++i) - indels.add(new ArrayList()); - } - - int sum = 0; - Arrays.fill(count, 0); - - int mIndex = 0; - for (int i = 3; i < row.size(); i+=4) { - int c = Integer.parseInt(row.get(i)); - sum += c; - count[intMapping[mIndex++]] += c; - if (c == 0){ // remove "*" if no reads - while (row.size() <= i + 3) - row.add(""); - row.set(i + 1, ""); - row.set(i + 2, ""); - row.set(i + 3, ""); - } - } - if (sum < minCoverageSum) - return; - - int missing = 0; - for (int i = 0; i < numIndividuals; ++i) - if (count[i] < coveragePerIndividual) - ++missing; - - if (missing > numLowerCoverage) - return; - //filtering... - - Arrays.fill(count2, 0); - for (int i = 4; i < row.size(); i+=4) { - char ca[] = row.get(i).toCharArray(); - int caIndex = 0; - - int n = ca.length; - for (int j = 0; j < n; ++j) { - char c = ca[j]; - switch (c) { - case '*': - ca[caIndex++]=4; // missing - break; - case '+': - case '-': - int l = 0; - ++j; - while (j < n && ca[j] >= '0' && ca[j] <= '9') { - l = 10 * l + (ca[j] - '0'); - ++j; - } - j += (l - 1); // correct for last j++ - if (callIndels) { - if (c == '-') - indels.get(intMapping[(i >> 2) - 1]).add(-l); - else - indels.get(intMapping[(i >> 2) - 1]).add(l); - } - break; - case '^': ++j; - case '$': - break; - - case 'a': - case 'A': ++count2[0];ca[caIndex++]=0; - break; - case 'c': - case 'C': ++count2[1];ca[caIndex++]=1; - break; - case 'g': - case 'G': ++count2[2];ca[caIndex++]=2; - break; - case 't': - case 'T': ++count2[3];ca[caIndex++]=3; - break; - } - } - row.set(i, new String(ca, 0, caIndex)); - } - int alleles = 0; - for (int i = 0; i < 4; ++i) - if (count2[i] >= minimumAlleleFreq) - ++alleles; - - //System.err.println(rowNumber + " " + row[0]); - - if (alleles >= 2) { - int numGenotypes = numAlleles.size(); - double prob[][] = new double[numIndividuals][numGenotypes]; - - mIndex = 0; - - for (int i = 4; i < row.size(); i+=4) { - String s = row.get(i); - String q1 = (row.size() > i + 1) ? row.get(i + 1) : ""; - String q2 = (row.size() > i + 2) ? row.get(i + 2) : ""; - - //System.err.println(s); - //System.err.println(q1); - //System.err.println(q2); - - //assert(s.length() == q1.length() && q1.length() == q2.length()); - if(s.length() != q1.length() || q1.length() != q2.length()) { //quality and aligment have different number of values... - //System.err.println(row2.get(i)); - - for (int j = 0; j < s.length(); ++j) - System.err.print("acgtN".charAt(s.charAt(j))); - System.err.println(); - System.err.println(q1); - System.err.println(q2); - Error.warning(3003); - int l = Math.min(Math.min(s.length(), q1.length()), q2.length()); - s = s.substring(0, l); - q1 = q1.substring(0, l); - q2 = q2.substring(0, l); - } - int n = s.length(); - int ind = intMapping[mIndex++]; - for (int j = 0; j < n; ++j) { - char c = s.charAt(j); - if (c < 4) { - char qc1 = q1.charAt(j); - char qc2 = q2.charAt(j); - int nat[] = numAllelesT.get(c); - for (int g = 0; g < numGenotypes; ++g) - prob[ind][g] += logP2[nat[g]][qc1-33][qc2-33]; - } - } - // get qualities and output genotype likelihoods... - } - StringBuilder sb = new StringBuilder(); - sb.append(row.get(0)); - sb.append('\t'); - sb.append(row.get(1)); - for (int ind = 0; ind < numIndividuals; ++ind) { - double maxp = Double.NEGATIVE_INFINITY; - for (int g = 0; g < numGenotypes; ++g) - maxp = Math.max(maxp, prob[ind][g]); - for (int g = 0; g < numGenotypes; ++g) { - if (g == 0) - sb.append('\t'); - else - sb.append(' '); - sb.append(myExp(prob[ind][g] - maxp)); - } - } - //print result - System.out.println(sb); - } else if (alleles == 1 && callIndels) { - ArrayList lengths = new ArrayList(); - for (ArrayList list : indels) - lengths.addAll(list); - if (lengths.size() > minimumAlleleFreq && lengths.size() >= 1) { - Collections.sort(lengths); - int numL = lengths.size(); - int cid = 1; - int id = 0; - for (int i = 1; i < numL; ++i) { - if (lengths.get(i - 1) == lengths.get(i)) { - ++cid; - } else { - if (cid >= minimumAlleleFreq) { - ++alleles; - id = lengths.get(i - 1); - } - cid = 1; - } - } - if (cid >= minimumAlleleFreq) { - ++alleles; - id = lengths.get(lengths.size() - 1); - } - if (alleles == 2) { // two values - int numGenotypes = numAlleles.size(); - - StringBuilder sb = new StringBuilder(); - sb.append(row.get(0)); - sb.append('\t'); - sb.append(row.get(1)); - - for (int ind = 0; ind < numIndividuals; ++ind) { - ArrayList list = indels.get(ind); - int c = 0; - for (int l : list) - if (l == id) - ++c; - - double prob[] = count2likelihood(count[ind] - c, c); - for (int g = 0; g < numGenotypes; ++g) { - if (g == 0) - sb.append('\t'); - else - sb.append(' '); - if (ind == 0) - sb.append((float) Math.exp(prob[g])); - else - sb.append(myExp(prob[g])); - } - } - System.out.println(sb); - } - } - } - } - private double[] count2likelihood(int c1, int c2){ - int numGenotypes = numAlleles.size(); - - double prob[] = new double[numGenotypes]; - - int nat[] = numAllelesT.get(0); - for (int g = 0; g < numGenotypes; ++g) - prob[g] += c1 * logP2[nat[g]][20][20]; - - nat = numAllelesT.get(1); - for (int g = 0; g < numGenotypes; ++g) - prob[g] += c2 * logP2[nat[g]][20][20]; - - double maxp = Double.NEGATIVE_INFINITY; - for (int g = 0; g < numGenotypes; ++g) - maxp = Math.max(maxp, prob[g]); - - for (int g = 0; g < numGenotypes; ++g) - prob[g] = prob[g] - maxp; - - return prob; - } - - public static void main(String args[]){ - ParameterParser pp = new ParameterParser(); - StringBuilder extraParameters = new StringBuilder(); - for (int i = 0; i < args.length; ++i) { - extraParameters.append(args[i] + " "); - } - if (!pp.init(extraParameters.toString())) - Error.error(3001); - pp.warning(new String[]{"minCoverage", "numLowerCoverage", "minAlleleFreq", "minQuality", "minCoverageSum", "mappingFile", "pileup", "ploidy", "callIndels"}); - - Pileup2Likelihoods p2l = new Pileup2Likelihoods(); - int ploidy = Integer.parseInt(pp.getValueAsString("ploidy", "2")); - if (ploidy != 2) - p2l.setPloidy(ploidy); - - int cov = Integer.parseInt(pp.getValueAsString("minCoverage", "3")); - - double numLow = Double.parseDouble(pp.getValueAsString("numLowerCoverage", "0.3")); - - double minAlleleFreq = Double.parseDouble(pp.getValueAsString("minAlleleFreq", "0.1")); - //double minSum = Double.parseDouble(pp.getValueAsString("minCoverageSum", "0")); - - double minQ = Double.parseDouble(pp.getValueAsString("minQuality", "0.001")); - - p2l.processMapping(pp.getValueAsString("mappingFile", "mapping.txt")); - - p2l.setCoveragePerIndividual(cov); - if (numLow >= 1) - p2l.setNumLowerCoverage((int) (0.5 + numLow)); - else - p2l.setNumLowerCoverageRatio(numLow); - if (minAlleleFreq >= 1) - p2l.setMinimumAlleleFreq((int)(0.5 + minAlleleFreq)); - else - p2l.setMinimumAlleleFreqRatio(minAlleleFreq); - - p2l.setMinQ(minQ); - - - p2l.setMinCoverageSum(Integer.parseInt(pp.getValueAsString("minCoverageSum", "-1"))); - - if (pp.getValueAsString("callIndels", "0").equals("1")) - p2l.setCallIndels(true); - - p2l.initTables(); - p2l.processPileup(pp.getValueAsString("pileup", "-")); - - } - -} diff --git a/software/LepMap3/lm3/src/Separate2.java b/software/LepMap3/lm3/src/Separate2.java deleted file mode 100644 index e0a4afc..0000000 --- a/software/LepMap3/lm3/src/Separate2.java +++ /dev/null @@ -1,1414 +0,0 @@ -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.concurrent.locks.ReentrantLock; - -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge -*/ -// User interface for SeparateChromosomes module -//Errorcodes 44xx -public class Separate2 { - private final ReentrantLock lock = new ReentrantLock(); - - private double theta1; - private double theta2; - - private double minLod = Double.NEGATIVE_INFINITY; - - private Data2 data = new Data2(); - - private UnionFind chromosomes; - private UnionFind identicals; - - public void keepFamilies(ArrayList families) { - data.keepFamilies(families); - } - - public void setPhasedData(boolean value) - { - for (Family2 f : data.getFamilies()) - f.setPhasedData(value); - data.setPhasedData(value); - } - - public int getNumMarkers() - { - return data.getNumMarkers(); - } - - public void setTheta1(double theta) - { - theta1 = theta; - //logTheta1 = Math.log(theta); - //log1mTheta1 = Math.log(1.0 - theta); - } - public void setTheta2(double theta) - { - theta2 = theta; - //logTheta2 = Math.log(theta); - //log1mTheta2 = Math.log(1.0 - theta); - } - - //public void addFamilyFromFile(String filename) { - // data.addFamilyFromFile(filename); - //} - public void addFamilyFromFile(String filename, String informativeMask) { - data.addFamilyFromFile(filename, informativeMask, null, false); - } - - public void addFamilyFromFile(String filename, String informativeMask, boolean mask[], boolean gpPhase) { - data.addFamilyFromFile(filename, informativeMask, mask, gpPhase); - } - public void subsample(double rate) { - data.subSampleData(rate); - } - - public double computeLOD(int m1, int m2) { - double ret = 0.0; - for (Family2 f : data.getFamilies()) { - double l = f.computeLOD(theta1, theta2, m1, m2); - if (l < minLod) - l = minLod; - ret += l; - } - return ret; - } - - public void maskInformative(String informativeMask) { - for (Family2 f : data.getFamilies()) - f.maskInformative(informativeMask); - } - public void maskLG(LGMap2 map, int lg) { - for (Family2 f : data.getFamilies()) - for (int i = 0; i < map.getNumMarkers(); ++i) - if (map.getLGName(i) != lg) - f.removeMarker(i); - } - - public void maskLG(LGMap2 map, boolean lgs[]) { - for (Family2 f : data.getFamilies()) - for (int i = 0; i < map.getNumMarkers(); ++i) - if (!lgs[map.getLGName(i)]) - f.removeMarker(i); - } - - public void setLod3Mode(int mode) - { - for (Family2 f : data.getFamilies()) - f.setLod3Mode(mode); - } - - public void setDistortionLodMode() - { - for (Family2 f : data.getFamilies()) - f.setDistortionLodMode(); - } - - - -/* private void joinIdenticals(LGMap2 map) - { - joinIdenticals(map, true, theta1, theta2); - } - private void joinIdenticals(LGMap2 map, boolean printPatterns) - { - joinIdenticals(map, printPatterns, theta1, theta2); - } - private void joinIdenticals(LGMap2 map, double theta1, double theta2) - { - joinIdenticals(map, true, theta1, theta2); - } - */ - - private void joinIdenticals(ArrayList markers, double theta1, double theta2, double lodLimit, UnionFind uf) - { - ArrayList infoMarkers = new ArrayList(); - - ArrayList maxScores = new ArrayList(); - - for (int m1 : markers) { - boolean informative = false; - for (Family2 f : data.getFamilies()) - if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) { - informative = true; - break; - } - if (informative) { - double maxLODScore = 0.0; - for (Family2 f : data.getFamilies()) - maxLODScore += f.maxLodScore(theta1, theta2, m1); - - if (maxLODScore >= lodLimit) { - infoMarkers.add(m1); - maxScores.add(maxLODScore); - } - } - } - if (infoMarkers.size() == 0) { - markers.clear(); - return; - } - - Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(maxScores); - Integer[] indexes = comparator.createIndexArray(); - Arrays.sort(indexes, comparator); - - ArrayList infoMarkers2 = new ArrayList(); - for (int i : indexes) { - infoMarkers2.add(infoMarkers.get(i)); - //System.err.println(maxScores.get(i)); - } - //System.err.println(); - infoMarkers = infoMarkers2; - Collections.reverse(infoMarkers); - - while (true) { - ArrayList> cliques = new ArrayList>(); - cliques.add(new ArrayList()); - for (int m : infoMarkers) { - boolean canAdd = true; - //int perm[] = Misc.randomPermutation(cliques.size()); - //for (int cliquei : perm) { - // ArrayList clique = cliques.get(cliquei); //Randomize the clique order - for (ArrayList clique : cliques) { - canAdd = true; - for (int cm : clique) - if (computeLOD(m, cm) < lodLimit) { - canAdd = false; - break; - } - if (canAdd) { - clique.add(m); - break; - } - } - if (!canAdd) { - ArrayList al = new ArrayList(); - al.add(m); - cliques.add(al); - } - } - //System.err.println(cliques.size() +"\t" + infoMarkers.size()); - if (infoMarkers.size() == cliques.size()) - break; - infoMarkers.clear(); - for (ArrayList clique : cliques) { - int c0 = clique.get(0); - infoMarkers.add(c0); - for (int cm : clique) - if (cm != c0) { - for (Family2 f : data.getFamilies()) { - f.combineAndNormalize(c0, cm, theta1, theta2); - } - uf.union(cm, c0); - } - for (int cm : clique) - if (cm != c0) - for (Family2 f : data.getFamilies()) - f.setProb(cm, c0); - } - } - markers.clear(); - markers.addAll(infoMarkers); - } - - private void printPatterns(int name, int size, int marker) - { - for (Family2 f : data.getFamilies()) { - int type = 0; - if (f.isFatherInformative(marker)) - type += 1; - if (f.isMotherInformative(marker)) - type += 2; - - System.err.print(name + "\t" + type + "\t" + size + "\t" + f.pattern(marker) + "\t"); - } - System.err.println(); - } - private void printPatterns(int name, ArrayList markers) - { - for (Family2 f : data.getFamilies()) { - int numP = 1; - for (int m : markers) { - System.err.print(name + "." + numP + "\t" + f.pattern(m) + "\t"); - ++numP; - } - } - System.err.println(); - } - - - public void joinSingles2Identicals(double lodLimit_[], double lodDifference, LGMap2 map, boolean betweenSameTypeOnly, int numThreads) - { - //joinIdenticals(map, true, theta1, theta2, lodLimit[0]); - if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) - Error.error(701); - - if (!betweenSameTypeOnly && lodLimit_.length > 1) - Error.error(702); - - @SuppressWarnings("unchecked") - ArrayList smap[] = new ArrayList[getNumMarkers()]; - for (int i = 0; i < getNumMarkers(); ++i) { - smap[i] = new ArrayList(); - int chr = map.getLGName(i); - if (chr != 0) - smap[i].add((double) chr); - } - //int joined = 0; - //int joined2 = 0; - - String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; - - joinIdenticalsFast(map); - - for (String mask : masks) { - double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; - - ArrayList infoMarkers = new ArrayList(); - for (int m1 = 0; m1 < getNumMarkers(); ++m1) - if (map.getLGName(m1) == 0) { - boolean informative = false; - for (Family2 f : data.getFamilies()) { - int imode = 0; - if (f.isFatherInformative(m1)) - ++imode; - if (f.isMotherInformative(m1)) - imode +=2; - if (mask.contains("" + imode)) { - informative = true; - break; - } - } - if (informative) { - double maxLODScore = 0.0; - for (Family2 f : data.getFamilies()) - maxLODScore += f.maxLodScore(theta1, theta2, m1); - if (maxLODScore >= lodLimit) - infoMarkers.add(m1); - } - } - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - - ArrayList groupsWithMarkers = new ArrayList(); - for (int c = 1; c < markers.size(); ++c) - if (markers.get(c).size() > 0) { - if (betweenSameTypeOnly) { - int m1 = markers.get(c).get(0); - int imode = 0; - for (Family2 f : data.getFamilies()) { - if (f.isFatherInformative(m1)) - ++imode; - if (f.isMotherInformative(m1)) - imode +=2; - } - if (mask.contains("" + imode)) - groupsWithMarkers.add(c); - } else - groupsWithMarkers.add(c); - } - - ArrayList> markersMasked = new ArrayList>(); - - for (ArrayList mc : markers) { - ArrayList mcm = new ArrayList(); - markersMasked.add(mcm); - for (int m2 : mc) { - int imode = 0; - for (Family2 f : data.getFamilies()) { - if (f.isFatherInformative(m2)) - ++imode; - if (f.isMotherInformative(m2)) - imode +=2; - } - if (mask.contains("" + imode)) { - mcm.add(m2); - break; - } - } - } - - Thread threads[] = new Thread[numThreads]; - - for (int t = 0; t < numThreads; ++t) { - threads[t] = new Thread(new JoinSinglesThread(infoMarkers, markersMasked, lodLimit, lodDifference, t, numThreads, smap, t == 0)); - threads[t].start(); - } - try { - for (int t = 0; t < numThreads; ++t) - if (threads[t].isAlive()) - threads[t].join(); - } catch (Exception e) { - e.printStackTrace(); - Error.error(-99999999); - } - } - for (int i = 0; i < getNumMarkers(); ++i) { - StringBuilder str = new StringBuilder(); - if (smap[i].size() == 0) - str.append('0'); - if (smap[i].size() == 1) - str.append(smap[i].get(0).intValue()); - else - for (int j = 0; j < smap[i].size(); j+=2) { - str.append(smap[i].get(j).intValue()); - str.append('\t'); - str.append(smap[i].get(j+1)); - } - System.out.println(str); - } - //System.err.println("#joined = " + joined + " #joined2 = " + joined2); - } - - private class JoinSinglesThread implements Runnable - { - ArrayList infoMarkers; - ArrayList> markers; - double lodLimit, lodDifference; - int numThreads, start; - ArrayList smap[]; - boolean print; - - public JoinSinglesThread(ArrayList infoMarkers, ArrayList> markers, double lodLimit, double lodDifference, int start, int numThreads,ArrayList smap[], boolean print) - { - this.infoMarkers = infoMarkers; - this.markers = markers; - this.lodLimit = lodLimit; - this.lodDifference = lodDifference; - this.numThreads = numThreads; - this.start = start; - this.smap = smap; - this.print = print; - } - - @Override - public void run() { - int progress = 0; - int prevProgress = 0; - - for (int m2i = start; m2i < infoMarkers.size(); m2i+=numThreads) { - int m2 = infoMarkers.get(m2i); - if (print) { - progress = (10 * m2i / infoMarkers.size()); - if (progress != prevProgress) { - System.err.print(progress + "."); - prevProgress = progress; - } - } - - - double maxScore = Double.NEGATIVE_INFINITY; - double maxScore2 = Double.NEGATIVE_INFINITY; - - - for (int c = 1; c < markers.size(); ++c) { - double score = Double.NEGATIVE_INFINITY; - for (int m1 : markers.get(c)) { - double l = computeLOD(m1, m2); - if (l > score) - score = l; - } - if (score > maxScore) { - maxScore2 = maxScore; - maxScore = score; - } else - maxScore2 = Math.max(maxScore2, score); - - - if (score >= lodLimit) { - - if (smap[m2].size() == 0) { - smap[m2].add((double) c); - smap[m2].add(score); - } - else { - double bestScore = smap[m2].get(1); - if (score > bestScore) { - smap[m2].add(smap[m2].get(0)); - smap[m2].add(bestScore); - smap[m2].set(0, (double) c); - smap[m2].set(1, score); - } - else { - smap[m2].add((double)c); - smap[m2].add(score); - } - } - - } - } - if (maxScore - maxScore2 < lodDifference) { - smap[m2].clear(); - } - } - if (print) - System.err.println(" done!"); - - } - } - - private class JoinSinglesThreadMaxDistance implements Runnable - { - ArrayList infoMarkers; - double lodLimit, lodDifference; - int numThreads, start; - ArrayList smap[]; - boolean print; - int maxDistance; - - public JoinSinglesThreadMaxDistance(ArrayList infoMarkers, double lodLimit, double lodDifference, int start, int numThreads,ArrayList smap[], boolean print, int maxDistance) - { - this.infoMarkers = infoMarkers; - this.lodLimit = lodLimit; - this.lodDifference = lodDifference; - this.numThreads = numThreads; - this.start = start; - this.smap = smap; - this.print = print; - this.maxDistance = maxDistance; - } - - @Override - public void run() { - int progress = 0; - int prevProgress = 0; - - for (int m2i = start; m2i < infoMarkers.size(); m2i+=numThreads) { - int m2 = infoMarkers.get(m2i); - if (print) { - progress = (10 * m2i / infoMarkers.size()); - if (progress != prevProgress) { - System.err.print(progress + "."); - prevProgress = progress; - } - } - if (smap[m2].size() == 1) - continue; - - double maxScore = Double.NEGATIVE_INFINITY; - int maxChr = -1; - - for (int m1i = Math.max(0, m2i - maxDistance); m1i < m2i + maxDistance && m1i < infoMarkers.size(); ++m1i) { - int m1 = infoMarkers.get(m1i); - if (smap[m1].size() != 1) - continue; - double l = computeLOD(m1, m2); - if (l > maxScore) { - int chr = smap[m1].get(0).intValue(); - maxScore = l; - maxChr = chr; - } - } - double maxScore2 = Double.NEGATIVE_INFINITY; - for (int m1i = Math.max(0, m2i - maxDistance); m1i < m2i + maxDistance && m1i < infoMarkers.size(); ++m1i) { - int m1 = infoMarkers.get(m1i); - if (smap[m2].size() != 1) - continue; - int chr = smap[m1].get(0).intValue(); - if (chr != maxChr) - maxScore2 = Math.max(maxScore2, computeLOD(m1, m2)); - } - if (maxScore >= lodLimit) { - if (smap[m2].size() == 0) { - smap[m2].add((double) maxChr); - smap[m2].add(maxScore); - } - else { - double bestScore = smap[m2].get(1); - if (maxScore > bestScore) { - smap[m2].add(smap[m2].get(0)); - smap[m2].add(bestScore); - smap[m2].set(0, (double) maxChr); - smap[m2].set(1, maxScore); - } - else { - smap[m2].add((double) maxChr); - smap[m2].add(maxScore); - } - } - - } - if (maxScore - maxScore2 < lodDifference) { - smap[m2].clear(); - } - } - if (print) - System.err.println(" done!"); - } - } - - public void joinSingles(double lodLimit_[], double lodDifference, LGMap2 map, boolean betweenSameTypeOnly, boolean iterate, final int numThreads, int maxDistance) - { - //joinIdenticals(map, true, theta1, theta2, lodLimit[0]); - if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) - Error.error(701); - - if (!betweenSameTypeOnly && lodLimit_.length > 1) - Error.error(702); - - @SuppressWarnings("unchecked") - ArrayList smap[] = new ArrayList[getNumMarkers()]; - for (int i = 0; i < getNumMarkers(); ++i) { - smap[i] = new ArrayList(); - int chr = map.getLGName(i); - if (chr != 0) - smap[i].add((double) chr); - } - - String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; - - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - - for (String mask : masks) { - double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; - - final ArrayList infoMarkers = new ArrayList(); - for (int m1 = 0; m1 < getNumMarkers(); ++m1) - if (map.getLGName(m1) == 0 || maxDistance < Integer.MAX_VALUE) { - boolean informative = false; - for (Family2 f : data.getFamilies()) { - int imode = 0; - if (f.isFatherInformative(m1)) - ++imode; - if (f.isMotherInformative(m1)) - imode +=2; - if (mask.contains("" + imode)) { - informative = true; - break; - } - } - if (informative) { - double maxLODScore = 0.0; - for (Family2 f : data.getFamilies()) - maxLODScore += f.maxLodScore(theta1, theta2, m1); - if (maxLODScore >= lodLimit) - infoMarkers.add(m1); - } - } - - ArrayList> markersMasked = null; - if (betweenSameTypeOnly) { - markersMasked = new ArrayList>(); - for (ArrayList mc : markers) { - ArrayList mcm = new ArrayList(); - markersMasked.add(mcm); - for (int m2 : mc) { - int imode = 0; - for (Family2 f : data.getFamilies()) { - if (f.isFatherInformative(m2)) - ++imode; - if (f.isMotherInformative(m2)) - imode +=2; - } - if (mask.contains("" + imode)) - mcm.add(m2); - } - - } - } - else - markersMasked = markers; - - boolean changed = true; - int iteratation = 1; - do { - Thread threads[] = new Thread[numThreads]; - - for (int t = 0; t < numThreads; ++t) { - if (maxDistance < Integer.MAX_VALUE) - threads[t] = new Thread(new JoinSinglesThreadMaxDistance(infoMarkers, lodLimit, lodDifference, t, numThreads, smap, t == 0, maxDistance)); - else - threads[t] = new Thread(new JoinSinglesThread(infoMarkers, markersMasked, lodLimit, lodDifference, t, numThreads, smap, t == 0)); - threads[t].start(); - } - try { - for (int t = 0; t < numThreads; ++t) - if (threads[t].isAlive()) - threads[t].join(); - } catch (Exception e) { - e.printStackTrace(); - Error.error(-99999999); - } - if (iterate) { - changed = false; - for (ArrayList mc : markersMasked) - mc.clear(); - ArrayList infoMarkers2 = new ArrayList(); - for (int m : infoMarkers) - if (smap[m].size() == 0) - infoMarkers2.add(m); - else { - int chr = smap[m].get(0).intValue(); - markersMasked.get(chr).add(m); - changed = true; - } - if (changed) - System.err.println("Starting iteration " + (++iteratation)); - - infoMarkers.clear(); - infoMarkers.addAll(infoMarkers2); - } - - } while (changed && iterate); - } - - for (int i = 0; i < getNumMarkers(); ++i) { - StringBuilder str = new StringBuilder(); - if (smap[i].size() == 0) - str.append('0'); - if (smap[i].size() == 1) - str.append(smap[i].get(0).intValue()); - else - for (int j = 0; j < smap[i].size(); j+=2) { - if (j > 0) - str.append('\t'); - str.append(smap[i].get(j).intValue()); - str.append('\t'); - str.append(smap[i].get(j+1)); - } - System.out.println(str); - } - } - - - public void joinIdenticals(LGMap2 map) - { - UnionFind uf = new UnionFind(getNumMarkers()); - //joinIdenticals(....,uf) - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - for (int c1 = 1; c1 < markers.size(); ++c1) { - ArrayList mc = markers.get(c1); - joinIdenticals(mc, 0.0, 0.0, 0.0, uf); // quite slow with many markers... - if (mc.size() > 0) - printPatterns(c1, mc.size(), mc.get(0)); - } - - } - public void joinIdenticalsFast(LGMap2 map) //avoid quadratic time consumption... - { - if (theta1 != 0.0 || theta2 != 0.0) - return; - - //UnionFind uf = new UnionFind(getNumMarkers()); - //joinIdenticals(....,uf) - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - for (int c1 = 1; c1 < markers.size(); ++c1) { - ArrayList mc = markers.get(c1); - if (mc.size() > 0) { - int mc0 = mc.get(0); - for (int m : mc) - if (m != mc0) - join(mc0, m); - for (int m : mc) - if (m != mc0) - for (Family2 f : data.getFamilies()) - f.setProb(m, mc0); - - } - //joinIdenticals(mc, 0.0, 0.0, 0.0, uf); // quite slow with many markers... - if (mc.size() > 0) - printPatterns(c1, mc.size(), mc.get(0)); - } - - } - - - - public void joinLGs(double lodLimit[], LGMap2 map, int sizeLimit) - { - //joinIdenticals(map, true, 0.0, 0.0, lodLimit[0]); - -/* UnionFind uf = new UnionFind(getNumMarkers()); - //joinIdenticals(....,uf) - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - for (int c1 = 1; c1 < markers.size(); ++c1) { - ArrayList mc = markers.get(c1); - ArrayList tmp = new ArrayList(); - tmp.addAll(mc); - //joinIdenticals(mc, 0.0, 0.0, 0.0, uf); - if (mc.size() > 0) - printPatterns(c1, mc.get(0)); - markers.set(c1, tmp); - //if (mc.size() > 0) { - // int m0 = mc.get(0); - // for (int m: mc) - // if (m != m0) - // join(m0, m); - // printPatterns(c1, m0); - //} - }*/ - - joinIdenticalsFast(map); - - ArrayList> markers = map.getMarkersOfLGs(getNumMarkers()); - - UnionFind chromosomes = new UnionFind(markers.size()); - - double maxScore = Double.NEGATIVE_INFINITY; - - for (int c1 = 1; c1 < markers.size(); ++c1) { - if (markers.get(c1).size() > sizeLimit) { - int m2 = markers.get(c1).get(0); - int f1 = chromosomes.find(c1); - for (int c2 = c1 + 1; c2 < markers.size(); ++c2) - if (markers.get(c2).size() > sizeLimit && chromosomes.find(c2) != f1) { - int m1 = markers.get(c2).get(0); - double l = computeLOD(m1, m2); - double maxLODScore1 = 0.0; - double maxLODScore2 = 0.0; - for (Family2 f : data.getFamilies()) { - maxLODScore1 += f.maxLodScore(theta1, theta2, m1); - maxLODScore2 += f.maxLodScore(theta1, theta2, m1); - } - int j = 0; - while (j < lodLimit.length - 1 && (maxLODScore1 < lodLimit[j] || maxLODScore2 < lodLimit[j])) - ++j; - - if (l > lodLimit[j]) { - f1 = chromosomes.union(c1, c2); - } - else - maxScore = Math.max(maxScore, l); - } - } - } - - - int names2[] = new int[getNumMarkers()]; - - int names[] = new int[markers.size()]; - int numLGs = 0; - - for (int c1 = 1; c1 < markers.size(); ++c1) { - if (markers.get(c1).size() > 0) { - int f1 = chromosomes.find(c1); - if (names[f1] == 0) - names[f1] = ++numLGs; - for (int m: markers.get(c1)) - names2[m] = names[f1]; - - } - } - for (int i = 0; i < getNumMarkers(); ++i) { - System.out.println(names2[i] + "\t" + map.getLGName(i)); - } - - System.err.println((markers.size() - 1) + "->" + numLGs); - System.err.println("Next join at LOD=" + maxScore); - } - - - private void join(int m1, int m2) - { - for (Family2 f : data.getFamilies()){ - f.combineAndNormalize(m1, m2, theta1, theta2); - //f.normalize(m1); - } - } - - private class SeparateIdenticalThread implements Runnable{ - private ArrayList infoMarkers_; - private double lodLimit; - private boolean print; - private double keepRate = 0.5; - - public SeparateIdenticalThread(ArrayList markers, double lodLimit, boolean print, double keepRate) - { - infoMarkers_ = markers; - this.lodLimit = lodLimit; - this.print = print; - this.keepRate = keepRate; - } - - public void run() - { - ArrayList infoMarkers = new ArrayList(); - infoMarkers.addAll(infoMarkers_); - - int oldProgress = 0; - if (print) - System.err.println("computing pairwise LOD scores"); - for (int m1i = 0; m1i < infoMarkers.size() - 1; ++m1i) { - int m1 = infoMarkers.get(m1i); - int c1 = chromosomes.find(m1); - - if (print) { - int newProgress = 10 * m1i / infoMarkers.size(); - for (int i = oldProgress; i < newProgress; ++i) - System.err.print(i + 1); - oldProgress = newProgress; - } - - int infoIndex = m1i + 1; - - for (int m2i = m1i + 1; m2i < infoMarkers.size(); ++m2i) - { - int m2 = infoMarkers.get(m2i); - int c2 = chromosomes.find(m2); - boolean didJoin = false; - if (c1 != c2) { - double lod = computeLOD(m1, m2); - if (lod >= lodLimit) { - c1 = chromosomes.union(c1, c2); - didJoin = true; - } - } - if (!didJoin || Math.random() < keepRate) { - infoMarkers.set(infoIndex, m2); - ++infoIndex; - } - } - for (int i = infoMarkers.size() - 1; i >= infoIndex; --i) - infoMarkers.remove(i); - - } - - infoMarkers.clear(); - - ArrayList> markers = new ArrayList>(); - - int name[] = new int[getNumMarkers()]; - int numC = 0; - - for (int m : infoMarkers_) { - int c = chromosomes.find(m); - if (name[c] == 0) - name[c] = ++numC; - while (markers.size() < name[c]) { - markers.add(new ArrayList()); - } - markers.get(name[c] - 1).add(m); - } - - for (ArrayList al : markers) { - joinIdenticals(al, theta1, theta2, lodLimit, identicals); - for (int m : al) - infoMarkers.add(m); - } - - - - infoMarkers_.clear(); - infoMarkers_.addAll(infoMarkers); - - if (print) - System.err.println(" done!"); - } - } - - - public LGMap2 separateIdenticals(double lodLimit_[], int numParts, int numThreads, boolean removeSingles, double keepRate, boolean betweenSameTypeOnly) - { - - if (betweenSameTypeOnly && (data.getNumFamilies() > 1 || lodLimit_.length != 3)) - Error.error(701); - - if (!betweenSameTypeOnly && lodLimit_.length > 1) - Error.error(702); - - String masks[] = (betweenSameTypeOnly) ? new String[]{"1", "2", "3"}:new String[]{"123"}; - - numThreads = Math.min(numThreads, numParts); - - chromosomes = new UnionFind(getNumMarkers()); - identicals = new UnionFind(getNumMarkers()); - - for (String mask : masks) { - double lodLimit = (betweenSameTypeOnly) ? lodLimit_[Integer.parseInt(mask) - 1] : lodLimit_[0]; - - ArrayList infoMarkers = new ArrayList(); - ArrayList maxScores = new ArrayList(); - - for (int m1 = 0; m1 < getNumMarkers(); ++m1) { - boolean informative = false; - for (Family2 f : data.getFamilies()) { - int imode = 0; - if (f.isFatherInformative(m1)) - ++imode; - if (f.isMotherInformative(m1)) - imode +=2; - if (mask.contains("" + imode)) { - informative = true; - break; - } - } - if (informative) { - double maxLODScore = 0.0; - for (Family2 f : data.getFamilies()) - maxLODScore += f.maxLodScore(theta1, theta2, m1); - - if (maxLODScore >= lodLimit) { - infoMarkers.add(m1); - maxScores.add(maxLODScore); - } - } - } - - - int markerIndex[] = new int[getNumMarkers()]; - int index = 0; - for (int m : infoMarkers) { - markerIndex[m] = index >> 5; // keep 32 adjacent markers together (physical order) - if ((++index >> 5) >= numParts) - index = 0; - } - - Misc.ArrayIndexComparator comparator = new Misc.ArrayIndexComparator(maxScores); - Integer[] indexes = comparator.createIndexArray(); - Arrays.sort(indexes, comparator); - - ArrayList infoMarkers2 = new ArrayList(); - - - for (int i : indexes) { - infoMarkers2.add(infoMarkers.get(i)); - //System.err.println(maxScores.get(i)); - } - infoMarkers = infoMarkers2; - Collections.reverse(infoMarkers); - - ArrayList> infoMarkersForEachThread = new ArrayList>(); - - - - for (int i = 0; i < numParts; ++i) - infoMarkersForEachThread.add(new ArrayList()); - - for (int m : infoMarkers) { - infoMarkersForEachThread.get(markerIndex[m]).add(m); // keep 32 markers in the physical order together... - } - - Thread threads[] = new Thread[numThreads]; - - for (int j = 0; j < numParts; j+= numThreads) { - for (int i = 1; i < numThreads; ++i) { - if (i + j < numParts) { - threads[i] = new Thread(new SeparateIdenticalThread(infoMarkersForEachThread.get(i + j), lodLimit, false, keepRate)); - threads[i].start(); - } - } - new SeparateIdenticalThread(infoMarkersForEachThread.get(j), lodLimit, true, keepRate).run(); - int t = 1; - while (t < numThreads) { - while (threads[t].isAlive()) - try { - threads[t].join(); - } catch (Exception e) { - e.printStackTrace(); - Error.error(-99999999); - } - ++t; - } - } - - if (numParts >= 1) { - System.err.println("combining all"); - - System.err.print(infoMarkers.size() + "->"); - - if (removeSingles) { - int sizes[] = new int[getNumMarkers()]; - int sizes2[] = new int[getNumMarkers()]; - for (int m = 0; m < getNumMarkers(); ++m) { - ++sizes[identicals.find(m)]; - ++sizes2[chromosomes.find(m)]; - } - - for (int i = 0; i < numParts; ++i) { - ArrayList ml = infoMarkersForEachThread.get(i); - ArrayList ml2 = new ArrayList(); - for (int m : ml) - if (sizes2[chromosomes.find(m)] > 1 && sizes[identicals.find(m)] >= 1) { - ml2.add(m); - sizes[identicals.find(m)] = 0; - } - infoMarkersForEachThread.set(i, ml2); - } - } - - infoMarkers.clear(); - int maxM = 0; - for (int i = 0; i < numParts; ++i) - maxM = Math.max(maxM, infoMarkersForEachThread.get(i).size()); - - for (int m = 0; m < maxM; ++m) - for (int i = 0; i < numParts; ++i) { - ArrayList ml = infoMarkersForEachThread.get(i); - if (ml.size() > m) - infoMarkers.add(ml.get(m)); - } - System.err.println(infoMarkers.size()); - - SeparateIdenticalThread st = new SeparateIdenticalThread(infoMarkers, lodLimit, true, 1.0); - int oldSize = infoMarkers.size(); - st.run(); - System.err.println(oldSize + "->" + infoMarkers.size()); - st.run(); - } - } - - int sizes[] = new int[getNumMarkers()]; - int names[] = new int[getNumMarkers()]; - int numChromosomes = 0; - - for (int m = 0; m < getNumMarkers(); ++m) { - int c = identicals.find(m); - ++sizes[c]; - if (names[c] == 0 && sizes[c] > 1) - names[c] = ++numChromosomes; - } - //System.err.println("numChromosomes = " + numChromosomes); - - LGMap2 lGMap = new LGMap2(getNumMarkers()); - for (int m = 0; m < getNumMarkers(); ++m) - lGMap.setLGName(m, names[identicals.find(m)]); - - lGMap.renameLGs(); - for (int m = 0; m < getNumMarkers(); ++m) { - int c = identicals.find(m); - if (names[c] > 0) { - printPatterns(lGMap.getLGName(m), sizes[c], m); - names[c] = 0; - } - } - - //lGMap.printLGAssignment(numMarkers); - return lGMap; - } - - public void outputData() - { - outputData(0); - } - public void outputData(int sizeLimit) - { - - System.out.print("CHR\tPOS"); - for (Family2 f : data.getFamilies()) { - for (int i = 0; i < f.getNumChildren() + 2; ++i) - System.out.print("\t" + f.getName()); - } - System.out.println(); - - System.out.print("CHR\tPOS"); - int fam = 1; - for (Family2 f : data.getFamilies()) { - for (int i = 0; i < f.getNumChildren() + 2; ++i) - System.out.print("\t" + (i + fam)); - fam += f.getNumChildren() + 3; - } - System.out.println(); - - System.out.print("CHR\tPOS"); - fam = 1; - for (Family2 f : data.getFamilies()) { - System.out.print("\t0\t0"); - for (int i = 0; i < f.getNumChildren(); ++i) - System.out.print("\t" + fam); - fam += f.getNumChildren() + 3; - - } - System.out.println(); - - System.out.print("CHR\tPOS"); - fam = 1; - for (Family2 f : data.getFamilies()) { - System.out.print("\t0\t0"); - for (int i = 0; i < f.getNumChildren(); ++i) - System.out.print("\t" + (fam + 1)); - fam += f.getNumChildren() + 3; - } - System.out.println(); - - System.out.print("CHR\tPOS"); - for (Family2 f : data.getFamilies()) { - System.out.print("\t1\t2"); - for (int i = 0; i < f.getNumChildren(); ++i) - System.out.print("\t0"); - } - System.out.println(); - - System.out.print("CHR\tPOS"); - for (Family2 f : data.getFamilies()) { - for (int i = 0; i < f.getNumChildren() + 2; ++i) - System.out.print("\t0"); - } - System.out.println(); - - HashMap hm = new HashMap(); - - for (Family2 f : data.getFamilies()) - for (int m1 = 0; m1 < getNumMarkers(); ++m1) { - float p[] = f.getProb(m1); - if (!hm.containsKey(p)) - hm.put(p, 0); - hm.put(p, hm.get(p) + 1); - } - - for (int m1 = 0; m1 < getNumMarkers(); ++m1) { - //System.out.print("CHR\tPOS"); - //System.out.print(data.getMarkerName(m1)); - StringBuilder sb = new StringBuilder(data.getMarkerName(m1)); - for (Family2 f : data.getFamilies()) { - float p[] = f.getProb(m1); - if (hm.get(p) < sizeLimit) - p = null; - if (p == null || (!f.isFatherInformative(m1) && !f.isMotherInformative(m1))) { - for (int i = 0; i < f.getNumChildren() + 2; ++i) - //System.out.print("\t1 1 1 1 1 1 1 1 1 1"); - sb.append("\t1 1 1 1 1 1 1 1 1 1"); - } else { - int tableSize = p.length; - if (f.isFatherInformative(m1) && f.isMotherInformative(m1)) { - //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); - //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); - sb.append("\t0 1 0 0 0 0 0 0 0 0\t0 1 0 0 0 0 0 0 0 0"); - for (int i = 0; i < tableSize; i+=4) { - double r0 = p[i]; - double r2 = p[i + 3]; - double r1 = 1 - r0 - r2; - double max = Math.max(r0, Math.max(r1, r2)); - //System.out.print("\t" + r0 / max + " " + r1 / max + " 0 0 " + r2/max + " 0 0 0 0 0"); - sb.append("\t" + r0 / max + " " + r1 / max + " 0 0 " + r2/max + " 0 0 0 0 0"); - } - } - else if (f.isFatherInformative(m1)) { - //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); - //System.out.print("\t1 0 0 0 0 0 0 0 0 0"); - sb.append("\t0 1 0 0 0 0 0 0 0 0\t1 0 0 0 0 0 0 0 0 0"); - for (int i = 0; i < tableSize; i+=4) { - double r = (p[i] + p[i + 1]); - double max = Math.max(r, 1 - r); - sb.append("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); - //System.out.print("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); - } - - } - else if (f.isMotherInformative(m1)) { - //System.out.print("\t1 0 0 0 0 0 0 0 0 0"); - //System.out.print("\t0 1 0 0 0 0 0 0 0 0"); - sb.append("\t1 0 0 0 0 0 0 0 0 0\t0 1 0 0 0 0 0 0 0 0"); - for (int i = 0; i < tableSize; i+=4) { - double r = (p[i] + p[i + 2]); - double max = Math.max(r, 1 - r); - sb.append("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); - //System.out.print("\t" + r / max + " " + (1 - r) / max + " 0 0 0 0 0 0 0 0"); - } - } - } - - } - //System.out.println(); - System.out.println(sb); - } - } - - private final int MAX_TABLE_SIZE = 1000000; - - private final int RAND_TABLE_SIZE = 1024; - - private class SeparateThread implements Runnable{ - private ArrayList infoMarkers; - private double lodLimit; - private boolean print; - - private int numResults = 0; - private int resultsM1[] = new int[MAX_TABLE_SIZE]; - private int resultsM2[] = new int[MAX_TABLE_SIZE]; - private int prevR1 = 0; - private int prevR2 = 0; - private int rand[] = null; - private boolean sample = false; - - private int m1i, m2i, start, numThreads; - - int oldProgress = 0; - - - public SeparateThread(ArrayList markers, int start, int numThreads, double lodLimit, boolean print, double samplingRate) - { - this.infoMarkers = markers; - this.lodLimit = lodLimit; - this.print = print; - this.start = start; - this.numThreads = numThreads; - this.m1i = 0; - this.m2i = start + 1; - this.sample = false; - - if (samplingRate < 1.0) { - sample = true; - rand = new int[RAND_TABLE_SIZE]; - for (int i = 0; i < RAND_TABLE_SIZE; ++i) { - double r = 0.0; - while (r < 1e-20) - r = Math.random(); - int j = 1; - while (r >= samplingRate) { - r *= (1 - samplingRate); - ++j; - } - rand[i] = j * numThreads; - } - } - - } - - - public void run() - { - int rindex = 0; - numResults = 0; - while (m1i < infoMarkers.size() - 1) { - int m1 = infoMarkers.get(m1i); - int c1 = chromosomes.find(m1); - if (print) { - int newProgress = 10 * m1i / infoMarkers.size(); - for (int i = oldProgress; i < newProgress; ++i) - System.err.print(i + 1); - oldProgress = newProgress; - } - while (m2i < infoMarkers.size()) { - int m2 = infoMarkers.get(m2i); - int c2 = chromosomes.find(m2); - if (c1 != c2 && ((prevR1 != c1 || prevR2 != c2) && (prevR1 != c2 || prevR2 != c1))) { - double lod = computeLOD(m1, m2); - if (lod >= lodLimit) { - resultsM1[numResults] = c1; - resultsM2[numResults] = c2; - prevR1 = c1; - prevR2 = c2; - ++numResults; - if (numResults == MAX_TABLE_SIZE) { - processResults(); - c1 = chromosomes.find(m1); - } - //if (numResults == MAX_TABLE_SIZE) - // return; - } - } - if (sample) - m2i += rand[(rindex++) & (RAND_TABLE_SIZE - 1)]; - else - m2i += numThreads; - } - ++m1i; - m2i = start + m1i + 1; - } - - processResults(); - - if (print) - System.err.println(" done!"); - } - - public void processResults() - { - lock.lock(); - try { - for (int r = 0; r < numResults; ++r) - chromosomes.union(resultsM1[r], resultsM2[r]); - numResults = 0; - } finally { - lock.unlock(); - } - } - } - - public LGMap2 separateChromosomes(double lodLimit, int numThreads, double samplePairs) - { - chromosomes = new UnionFind(getNumMarkers()); - ArrayList infoMarkers = new ArrayList(); - - for (int m1 = 0; m1 < getNumMarkers(); ++m1) { - boolean informative = false; - for (Family2 f : data.getFamilies()) - if (f.isFatherInformative(m1) || f.isMotherInformative(m1)) { - informative = true; - break; - } - - if (informative) { - double maxLODScore = 0.0; - for (Family2 f : data.getFamilies()) - maxLODScore += f.maxLodScore(theta1, theta2, m1); - if (maxLODScore >= lodLimit) - infoMarkers.add(m1); - } - } - System.err.println("computing pairwise LOD scores"); - - if (samplePairs < 0.0001) { - samplePairs = 0.0001; - System.err.println("Warning: samplePairs rounded to " + samplePairs); - } - - SeparateThread sepT[] = new SeparateThread[numThreads]; - for (int t = 0; t < numThreads; ++t) - sepT[t] = new SeparateThread(infoMarkers, t, numThreads, lodLimit, t == 0, samplePairs); - - Thread threads[] = new Thread[numThreads]; - - if (numThreads > 1) { - for (int t = 0; t < numThreads; ++t) { - threads[t] = new Thread(sepT[t]); - threads[t].start(); - } - try { - for (int t = 0; t < numThreads; ++t) - if (threads[t].isAlive()) - threads[t].join(); - } catch (Exception e) { - e.printStackTrace(); - Error.error(-99999999); - } - } else - sepT[0].run(); - System.err.println(" done!"); - - int sizes[] = new int[getNumMarkers()]; - for (int m = 0; m < getNumMarkers(); ++m) - ++sizes[chromosomes.find(m)]; - - int names[] = new int[getNumMarkers()]; - int numChromosomes = 0; - int numSingles = 0; - for (int m = 0; m < getNumMarkers(); ++m) { - if (sizes[m] > 1) - names[chromosomes.find(m)] = ++numChromosomes; - else if (sizes[m] == 1) - ++numSingles; - } - System.err.println("number of LGs = " + numChromosomes + " singles = " + numSingles); - LGMap2 lGMap = new LGMap2(getNumMarkers()); - for (int m = 0; m < getNumMarkers(); ++m) - lGMap.setLGName(m, names[chromosomes.find(m)]); - lGMap.renameLGs(); - - return lGMap; - } - - public void setMinLod(double parseDouble) { - // TODO Auto-generated method stub - minLod = parseDouble; - } - - -} diff --git a/software/LepMap3/lm3/src/SeparateChromosomes2.java b/software/LepMap3/lm3/src/SeparateChromosomes2.java deleted file mode 100644 index 304160e..0000000 --- a/software/LepMap3/lm3/src/SeparateChromosomes2.java +++ /dev/null @@ -1,141 +0,0 @@ -import java.util.ArrayList; - -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ - -public class SeparateChromosomes2 { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(1401); - String extraParameters = ""; - System.out.print("#java SeparateChromosomes2 "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(1401); - pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "numThreads", "lod3Mode", "subsample", "distortionLod", "map", "lg", "renameLGs", "families", "samplePairs", "phasedData", "grandparentPhase", "minLod"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.03")); - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); - - boolean gpPhase = false; - if (pp.getValueAsString("grandparentPhase", "0").equals("1")) { - gpPhase = true; - } - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - sc.setMinLod(Double.parseDouble(pp.getValueAsString("minLod", "" + Double.NEGATIVE_INFINITY))); - - String mapFile = pp.getValueAsString("map", null); - LGMap2 map2 = new LGMap2(); - int lg = Integer.parseInt(pp.getValueAsString("lg", "1")); - boolean mask[] = null; - if (mapFile != null) { //Refine previous lg assignment - if (!(map2.loadLGMap(mapFile))) - Error.error(1011); - int nv = pp.getNumberOfValues("lg"); - if (nv > 1) - Error.error(1012); - - int numMarkers = map2.getNumMarkers(); - mask = new boolean[numMarkers];// make a mask to skip unnecessary markers - for (int i = 0; i < numMarkers; ++i) { - if (map2.getLGName(i) == lg) - mask[i] = true; - } - } - - - String dataFile = pp.getValueAsString("data", null); - if (dataFile == null) - Error.error(1402); - - sc.addFamilyFromFile(dataFile, pp.getValueAsString("informativeMask", "0123"), mask, gpPhase); - - if (mapFile != null) { - if (sc.getNumMarkers() != map2.getNumMarkers()) - Error.error(1013); - sc.maskLG(map2, lg); - } - sc.setPhasedData(pp.getValueAsString("phasedData", "0").equals("1") || gpPhase); - - int nv = pp.getNumberOfValues("lodLimit"); - if (nv > 1) - Error.error(1010); - double lodLimit = Double.parseDouble(pp.getValueAsString("lodLimit", "10.0")); - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - double subFraction = Double.parseDouble(pp.getValueAsString("subsample", "1.0")); - sc.subsample(subFraction); - - if (pp.getValueAsString("distortionLod", "0").equals("1")) - sc.setDistortionLodMode(); - - - if (pp.getNumberOfValues("families") > 0) { - ArrayList f = pp.getValue("families"); - sc.keepFamilies(f); - } - - - LGMap2 map = sc.separateChromosomes(lodLimit, Integer.parseInt(pp.getValueAsString("numThreads", "1")), Double.parseDouble(pp.getValueAsString("samplePairs", "1.0"))); - - if (mapFile != null) { //Refine previous lg assignment - int numLGs = map2.getNumLGs(); - for (int i = 0; i < map.getNumMarkers(); ++i) { - int lgMap = map.getLGName(i); - int lgMap2 = map2.getLGName(i); - if (lgMap == 0) { - if (lgMap2 != lg) - map.setLGName(i, lgMap2); - } else { // lgMap > 0 - if (lgMap == 1) //largest group keeps name lg - map.setLGName(i, lg); - else - map.setLGName(i, lgMap + numLGs - 1); //others go to the end - } - } - if (pp.getValueAsString("renameLGs", "1").equals("1")) - map.renameLGs(); - } else - map.renameLGs(); - - map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); - map.printLGAssignment(sc.getNumMarkers()); - - //data.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - //sep.separateChromosomesLOD2(lodLimit); - //LGMap cm = sep.getLGMap(); - //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - //cm.printLGAssignment(data); - } -} diff --git a/software/LepMap3/lm3/src/SeparateIdenticals.java b/software/LepMap3/lm3/src/SeparateIdenticals.java deleted file mode 100644 index 3407159..0000000 --- a/software/LepMap3/lm3/src/SeparateIdenticals.java +++ /dev/null @@ -1,100 +0,0 @@ -import java.util.ArrayList; - -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -//Should this work only for a single family? -public class SeparateIdenticals { - public static void main(String args[]) - { - if (args.length == 0) - Error.error(401); - String extraParameters = ""; - System.out.print("#java SeparateIdenticals "); - for (int i = 0; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(401); - pp.warning(new String[]{"data", "lodLimit", "informativeMask", "femaleTheta", "maleTheta", "sizeLimit", "theta", "numThreads", "numParts", "removeSingles", "lod3Mode", "keepRate", "betweenSameType", "families"}); - - double theta = Double.parseDouble(pp.getValueAsString("theta", "0.0")); - double theta1 = Double.parseDouble(pp.getValueAsString("maleTheta", "" + theta)); - double theta2 = Double.parseDouble(pp.getValueAsString("femaleTheta", "" + theta)); - - Separate2 sc = new Separate2(); - sc.setTheta1(theta1); - sc.setTheta2(theta2); - - int numDataFiles = pp.getNumberOfValues("data"); - if (numDataFiles == 0 || numDataFiles > 1) - Error.error(402); - for (int i = 0; i < numDataFiles; ++i) { - String filename = pp.getValueAsString("data", i, null); - if (filename == null) - Error.error(403); - sc.addFamilyFromFile(filename, pp.getValueAsString("informativeMask", "0123")); - } - - double lodLimit[]; - int nv = pp.getNumberOfValues("lodLimit"); - if (nv >= 2) { - lodLimit = new double[nv]; - for (int i = 0; i < nv; ++i) - lodLimit[i] = Double.parseDouble(pp.getValueAsString("lodLimit", i, "10.0")); - } else - lodLimit = new double[]{Double.parseDouble(pp.getValueAsString("lodLimit", "10.0"))}; - - sc.maskInformative(pp.getValueAsString("informativeMask", "0123")); - int numThreads = Integer.parseInt(pp.getValueAsString("numThreads", "1")); - - sc.setLod3Mode(Integer.parseInt(pp.getValueAsString("lod3Mode", "1"))); - - boolean sameType = pp.getValueAsString("betweenSameType", "0").equals("1"); - if (sameType) { - if (lodLimit.length != 3) // either 3 values... - Error.error(4499); - } - - if (pp.getNumberOfValues("families") > 0) { - ArrayList f = pp.getValue("families"); - sc.keepFamilies(f); - } - - LGMap2 map = sc.separateIdenticals(lodLimit, Integer.parseInt(pp.getValueAsString("numParts", "" + numThreads)), numThreads, pp.getValueAsString("removeSingles", "1").equals("1"), Double.parseDouble(pp.getValueAsString("keepRate", "1.0")), sameType); - ///if (pp.getValueAsString("outputData", "0").equals("1")) { - // sc.outputData(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - //} else { - map.renameLGs(); - map.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "1"))); - map.printLGAssignment(sc.getNumMarkers()); - //} - - //data.maskInformative(pp.getValueAsString("informativeMask", "0123")); - - //sep.separateChromosomesLOD2(lodLimit); - //LGMap cm = sep.getLGMap(); - //cm.removeSmallLGs(Integer.parseInt(pp.getValueAsString("sizeLimit", "0"))); - //cm.printLGAssignment(data); - } -} diff --git a/software/LepMap3/lm3/src/ShortPath.java b/software/LepMap3/lm3/src/ShortPath.java deleted file mode 100644 index cfc7cac..0000000 --- a/software/LepMap3/lm3/src/ShortPath.java +++ /dev/null @@ -1,344 +0,0 @@ -/** - This file is part of Lep-MAP3. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013-2016 Pasi Rastas, pasi.rastas@gmail.com, University of Helsinki, University of Cambridge - -*/ -import java.util.*; -import java.io.*; - -public class ShortPath{ - - private ArrayList edges = new ArrayList(); - private int numNodes; - private ArrayList nodeNames = new ArrayList(); - - private ArrayList edgeWeights = new ArrayList(); - private ArrayList nodeWeights = new ArrayList(); - private ArrayList prints = new ArrayList(); - - private int alpha = 0; - private int beta = 1; - - UnionFind uf = null; - int cname[] = null; - int size[] = null; - int numComponents = 0; - - HashMap hm = new HashMap(); - - public ShortPath(int alpha, int beta) { - this.alpha = alpha; - this.beta = beta; - } - - private int addNode(String name, long segPrint[][], int weight) - { - if (!hm.containsKey(name)) { - hm.put(name, numNodes); - nodeNames.add(name); - nodeWeights.add(weight); - prints.add(segPrint); - return numNodes++; - } else - return hm.get(name); - } - - - public void connectedComponenets() { - cname = new int[numNodes]; - size = new int[numNodes]; - numComponents = 0; - for (int n = 0; n < numNodes; ++n) { - int c = uf.find(n); - if (cname[c] == 0) - cname[c] = ++numComponents; - ++size[cname[c]]; - } - System.out.println("#Connected components = " + numComponents); - } - - - private void allPairsShortestPaths(String name1, String name2, ArrayList nodeIndex, ArrayList edgeIndex, int component) - { - int numNodes = nodeIndex.size(); - - int sp[][] = new int[numNodes][numNodes]; - int sp2[][] = new int[numNodes][numNodes]; - - int next[][] = new int[numNodes][numNodes]; - //int count[][] = new int[numNodes][numNodes]; - - for (int i = 0; i < numNodes; ++i) - for (int j = 0; j < numNodes; ++j) { - sp[i][j] = (i == j) ? 0 : Integer.MAX_VALUE; - sp2[i][j] = nodeWeights.get(nodeIndex.get(i)); - } - - for (int ei : edgeIndex) { - int n1 = edges.get(ei)[0]; - int n2 = edges.get(ei)[1]; - - int w = edgeWeights.get(ei); - int nw = nodeWeights.get(n1) + nodeWeights.get(n2); - - for (int i = 0; i < numNodes; ++i) { - int ni = nodeIndex.get(i); - if (ni == n1) { - n1 = i; - break; - } - } - for (int i = 0; i < numNodes; ++i) { - int ni = nodeIndex.get(i); - if (ni == n2) { - n2 = i; - break; - } - } - - - if (w == 0) { - sp[n1][n2] = (n1 < n2) ? 0 : 1; - sp[n2][n1] = (n1 < n2) ? 1 : 0; - } else { - sp[n1][n2] = w; - sp[n2][n1] = w; - } - sp2[n1][n2] = nw; - sp2[n2][n1] = nw; - next[n1][n2] = n2; - next[n2][n1] = n1; - } - - for (int k = 0; k < numNodes; ++k) - for (int i = 0; i < numNodes; ++i) - if (sp[i][k] < Integer.MAX_VALUE) - for (int j = 0; j < numNodes; ++j) - if (sp[k][j] < Integer.MAX_VALUE) { - int newValue = sp[i][k] + sp[k][j]; - int newValue2 = sp2[i][k] + sp2[k][j] - nodeWeights.get(nodeIndex.get(k)); - if (newValue < sp[i][j] || (newValue == sp[i][j] && newValue2 > sp2[i][j]) ) { - sp[i][j] = newValue; - sp2[i][j] = newValue2; - next[i][j] = next[i][k]; - //count[i][j] = 1; - }/* else if (newValue == sp[i][j]) { - ++count[i][j]; - if (Math.random() < 1.0 / count[i][j]) - next[i][j] = next[i][k]; - }*/ - } - - - int longestSP = 0; - int maxI = 0; - int maxJ = 0; - int countLongest = 0; - for (int i = 0; i < numNodes; ++i) - for (int j = 0; j < numNodes; ++j) - if (sp2[i][j] >= longestSP) { - if (sp2[i][j] > longestSP) - countLongest = 1; - else - ++countLongest; - if (Math.random() < 1.0 / countLongest) { - maxI = i; - maxJ = j; - } - longestSP = sp2[i][j]; - } - if (name1 != null) { - for (int i = 0; i < numNodes; ++i) - if (nodeNames.get(nodeIndex.get(i)).equals(name1)) - maxI = i; - } - if (name2 != null) { - for (int i = 0; i < numNodes; ++i) - if (nodeNames.get(nodeIndex.get(i)).equals(name2)) - maxJ = i; - } - - - System.out.println("#Path length = " + sp[maxI][maxJ]); - System.out.println("#Path weight = " + sp2[maxI][maxJ]); - - System.err.println("Heviest Shortest Path = " + longestSP); - System.err.println("Number of solutions = " + countLongest); - while (maxI != maxJ) { - //System.out.println("^" + nodeNames.get(next[maxI][maxJ]) + "\t" + nodeNames.get(maxI)); - //System.out.println("^" + nodeNames.get(maxI) + "\t" + nodeNames.get(next[maxI][maxJ])); - System.out.println(nodeNames.get(nodeIndex.get(maxI)) + "\t" + component + "\t" + nodeWeights.get(nodeIndex.get(maxI))); - int oldMaxI = maxI; - maxI = next[maxI][maxJ]; - if (oldMaxI != maxI) { - int d[] = hammingDistance(prints.get(nodeIndex.get(maxI)), prints.get(nodeIndex.get(oldMaxI))); - if (d[0] != 1) - System.out.println("#distance = " + d[0]); - } - } - System.out.println(nodeNames.get(nodeIndex.get(maxI)) + "\t" + component + "\t" + nodeWeights.get(nodeIndex.get(maxI))); - } - - public void allPairsShortestPaths(String name1, String name2) - { - System.err.println("#Nodes = " + numNodes); - System.err.println("#Edges = " + edges.size()); - - ArrayList> nodeIndex = new ArrayList>(); - ArrayList> edgeIndex = new ArrayList>(); - - for (int component = 0; component <= numComponents; ++component) { - nodeIndex.add(new ArrayList()); - edgeIndex.add(new ArrayList()); - } - - for (int i = 0; i < numNodes; ++i) { - int c = uf.find(i); - nodeIndex.get(cname[c]).add(i); - } - - for (int ei = 0; ei < edges.size(); ++ei) { - int c = uf.find(edges.get(ei)[0]); - edgeIndex.get(cname[c]).add(ei); - } - - - for (int component = 1; component <= numComponents; ++component) { - System.err.println("#Component = " + component); - System.err.println("#Nodes = " + nodeIndex.get(component).size()); - allPairsShortestPaths(name1, name2, nodeIndex.get(component), edgeIndex.get(component), component); - - - } - } - - private long[][] string2BitPrints(String s) - { - int n = s.length(); - long ret[][] = new long[2][(n+63) / 64]; - - int index = 0; - long bitIndex = 1; - - for (int i = 0; i < n; ++i) { - char c = s.charAt(i); - if (c == '0' || c == '2' || c == '1') { - ret[1][index] |= bitIndex; - if (c == '1') - ret[0][index] |= bitIndex; - } - bitIndex *= 2; - if (bitIndex == 0) { - bitIndex = 1; - ++index; - } - } - return ret; - } - - private int[] hammingDistance(long p1[][], long p2[][]) - { - int n = p1[0].length; - int d1 = 0; - int d2 = 0; - for (int i = 0; i < n; ++i) { - long mask = p1[1][i] & p2[1][i]; - long b1 = (p1[0][i] ^ p2[0][i]) & mask; - d1 += Long.bitCount(b1); - d2 += Long.bitCount(b1 ^ mask); - } - if (d1 >= d2) - return new int[]{d2, d1}; - else - return new int[]{d1, d2}; - } - - - public boolean loadPrints(String fn, int type, int sizeLimit, int limit1, int limit2) - { - try { - BufferedReader br = null; - if (fn.equals("-")) - br = new BufferedReader(new InputStreamReader(System.in)); - else - br = new BufferedReader(new FileReader(fn)); - String line = null; - do { - line = br.readLine(); - if (line == null) - break; - if (line.charAt(0) != '#') { - String[] row = line.split("\t"); - if (row.length >= 5 && Integer.parseInt(row[1]) == type && Integer.parseInt(row[2]) > sizeLimit) - addNode(row[0], string2BitPrints(row[(type == 2) ? 4 : 3]), alpha + beta * Integer.parseInt(row[2])); - } - } while (true); - - br.close(); - - uf = new UnionFind(numNodes); - - System.err.println("Computing pair-wise distances"); - for (int n1 = 0; n1 < numNodes; ++n1) - for (int n2 = n1 + 1; n2 < numNodes; ++n2) { - int d[] = hammingDistance(prints.get(n1), prints.get(n2)); - if (d[0] <= limit1 && d[1] >= limit2) { - edges.add(new int[]{n1, n2}); - edgeWeights.add(Math.max(0, 4 * d[0] - 3)); - //edgeWeights.add(d[0]); - uf.union(n1, n2); - } - } - - connectedComponenets(); - - - return true; - - } catch (Exception e) { - System.err.println("Error"); - return false; - } - } - - - public static void main(String args[]) - { - if (args.length == 0) - Error.error(801); - - String extraParameters = ""; - System.out.print("#java ShortPath " + args[0]); - for (int i = 1; i < args.length; ++i) { - extraParameters += args[i] + " "; - System.out.print(" " + args[i]); - } - System.out.println(); - - ParameterParser pp = new ParameterParser(); - if (!pp.init(extraParameters)) - Error.error(801); - pp.warning(new String[]{"informativeMask", "sizeLimit", "limit1", "limit2", "alpha", "beta", "begin", "end"}); - - - ShortPath sp = new ShortPath(Integer.parseInt(pp.getValueAsString("alpha", "0")), Integer.parseInt(pp.getValueAsString("beta", "1"))); - sp.loadPrints(args[0], Integer.parseInt(pp.getValueAsString("informativeMask", "1")), Integer.parseInt(pp.getValueAsString("sizeLimit", "1")), Integer.parseInt(pp.getValueAsString("limit1", "1")), Integer.parseInt(pp.getValueAsString("limit2", "1"))); - - sp.allPairsShortestPaths(pp.getValueAsString("begin", null), pp.getValueAsString("end", null)); - - } -} diff --git a/software/LepMap3/lm3/src/UnionFind.java b/software/LepMap3/lm3/src/UnionFind.java deleted file mode 100644 index c211192..0000000 --- a/software/LepMap3/lm3/src/UnionFind.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - This file is part of Lep-MAP. - - Lep-MAP is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Lep-MAP is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Lep-MAP. If not, see . - - Copyright (C) 2013 Pasi Rastas, pasi.rastas@helsinki.fi, University of Helsinki -*/ -// Union-Find data structure - -public class UnionFind { - - private volatile int rank[]; - private volatile int uf[]; - - public UnionFind(int size) - { - rank = new int[size]; - uf = new int[size]; - for (int i = 0; i < size; ++i) - uf[i] = i; - } - public int find(int element) { - int j = element; - while (j != uf[j]) - j = uf[j]; - - int i = element; - while (i != uf[i]) { - int t = uf[i]; - uf[i] = j; - i = t; - } - - return j; - } - public int union(int element1, int element2) { - int i = find(element1); - int j = find(element2); - if (i != j) { - if (rank[j] > rank[i]) - uf[i] = j; - else if (rank[j] < rank[i]) - uf[j] = i; - else { - uf[j] = i; - ++rank[i]; - } - } - return uf[i]; - } - - public static void main(String args[]) - { - final int size = 6000000; - final UnionFind uf = new UnionFind(size); - - for (int i = 0; i < size / 2; ++i) - uf.union(size / 2 + i, i/32); - for (int i = 0; i < 64; ++i) - System.err.println(uf.find(i) + "\t " + uf.rank[i]); - } -} From 2667c65da25c0b416a26a057a9beec7963e260d8 Mon Sep 17 00:00:00 2001 From: Pavel Dimens Date: Thu, 3 Jun 2021 12:44:57 -0400 Subject: [PATCH 27/27] upadd filter --- scripts/FilterLinkageMap.r | 129 +++++++++++++++++++++++++++++++++ scripts/RecombinationSummary.r | 12 +-- 2 files changed, 130 insertions(+), 11 deletions(-) create mode 100644 scripts/FilterLinkageMap.r diff --git a/scripts/FilterLinkageMap.r b/scripts/FilterLinkageMap.r new file mode 100644 index 0000000..31fa7ff --- /dev/null +++ b/scripts/FilterLinkageMap.r @@ -0,0 +1,129 @@ +# This R file performs an adaptive method of filtering a linkage map +# It works by creating a spline on the linkage map, then performing +# a sliding window analysis on the residuals of the spline, calculating +# a local threshold of 2 x mean(local residuals) to flag markers as +# possible outliers. + +# More specifically, lgFilter creates two splines ("higher" and +# "lower" resolution), and performs a 50% overlapping sliding +# window analysis with a different window size for each resolution. +# Pass/Fails go into a simple penalty matrix and markers >= 3 penalties are +# finally flagged as FAIL. 3 fails means the marker failed both times for one +# sliding window and at least once for the other. End-markers that only get +# tested 2x (lack of overlaps) incur double-penalties. + +library(tidyverse) +library(splines) + +# will require un-gzipped mareydata +marey <- read_delim("data.marey.trimmed", delim = "\t", col_names = FALSE) %>% + select(X3, X2, X5, X6) %>% + rename(LG = X3, MB = X2, MALE = X5, FEMALE = X6) %>% + rowwise() %>% + mutate(AVG = mean(c(MALE,FEMALE))) %>% + pivot_longer(c(MALE,FEMALE), values_to = "CM", names_to = "SEX") + +lgFilter <- function(mb,cm){ + n <- length(mb) + knots <- round(n/100) + .spline <- lm(cm ~ bs(mb, knots = knots)) + res <- .spline$residuals + # mb = physical position vector + # cm = genetic position vector + # divide by 10 and round to next even integer + windowsize <- 2 * round((n/10)/2) + slide <- windowsize/2 + # sliding window of `windowsize`, sliding at half its length each iteration + # the input vector is divided into 10 ~even windows + windowseq <- seq(from = 1, to = n-slide, by = slide ) + # create empty penalty matrix + penalty <- rep(0, n) + for (.window in windowseq){ + # workaround for last window not being an even size + if (.window == windowseq[length(windowseq)]){ + .residuals <- res[.window:n] + } else{ + .residuals <- res[.window:(.window + windowsize-1)] + } + threshold <- mean(abs(.residuals)) * 2 + # workaround like above + # add +1 penalty to end-markers b/c they dont get scanned 4x like the others + if (.window == windowseq[length(windowseq)]){ + penalty[.window:n] <- penalty[.window:n] + (abs(.residuals) > threshold) + #slide window up to the halfway point + halfwindow = median(.window:n) + # double the penalty for the end points that only get scanned 2x rather than 4x + penalty[halfwindow:n] <- penalty[halfwindow:n] + 1 + } else { + penalty[.window:(.window+windowsize-1)] <- penalty[.window:(.window+windowsize-1)] + (abs(.residuals) > threshold) + } + } + # a second window ~30% smaller + knots <- round(n/70) + .spline <- lm(cm ~ bs(mb, knots = knots)) + res <- .spline$residuals + windowsize <- 2 * round((n/7)/2) + slide <- windowsize/2 + windowseq <- seq(from = 1, to = n-slide, by = slide ) + for (.window in windowseq){ + if (.window == windowseq[length(windowseq)]){ + .residuals <- res[.window:n] + } else{ + .residuals <- res[.window:(.window + windowsize-1)] + } + threshold <- mean(abs(.residuals)) * 2 + # workaround like above + if (.window == windowseq[length(windowseq)]){ + penalty[.window:n] <- penalty[.window:n] + (abs(.residuals) > threshold) + #slide window up to the halfway point + halfwindow = median(.window:n) + # double the penalty for the end points that only get scanned 2x rather than 4x + penalty[halfwindow:n] <- penalty[halfwindow:n] + 1 + } else { + penalty[.window:(.window+windowsize-1)] <- penalty[.window:(.window+windowsize-1)] + (abs(.residuals) > threshold) + } + } + qual <- penalty >= 3 + # convert to PASS/FAIL instead of TRUE/FALSE + qual[qual] <- "FAIL" + qual[qual == FALSE] <- "PASS" + return(qual) +} + +filter_df <- marey %>% filter(SEX == "MALE") %>% + group_by(LG) %>% + arrange(MB) %>% + group_by(LG) %>% + mutate(QC = lgFilter(MB, CM)) + +filter_df %>% + ggplot(aes(x = MB, y = CM)) + + geom_point(aes(color = QC)) + + facet_wrap(~LG, scales = "free") + + labs( + title = "Sex-Averaged markers removed by filtering" + ) + +ggsave("sexavg.filtering.png", width = 10, height = 10, units = "in") + +filter_df %>% filter(QC == "PASS") %>% + ggplot(aes(x = MB, y = CM)) + + geom_point(color = "dodgerblue", shape = 20, alpha = 0.5) + + facet_wrap(~LG, scales = "free") + + labs( + title = "Filtered Sex-Averaged Linkage Maps" + ) +ggsave("sexavg.filtered.png", width = 10, height = 10, units = "in") + +marey %>% + group_by(LG, SEX) %>% + arrange(MB) %>% + group_by(LG) %>% + mutate(QC = lgFilter(MB, CM)) %>% + ggplot(aes(x = MB, y = CM)) + + geom_point(aes(color = QC, shape = SEX)) + + facet_wrap(~LG, scales = "free") + + labs( + title = "Markers removed by filtering" + ) +ggsave("malefemale.filtered.png", width = 10, height = 10, units = "in") diff --git a/scripts/RecombinationSummary.r b/scripts/RecombinationSummary.r index a9a6da8..e792bf4 100755 --- a/scripts/RecombinationSummary.r +++ b/scripts/RecombinationSummary.r @@ -37,14 +37,4 @@ recomb_df <- recomb_df[, cnames] outfile <- paste(args[1], "recombination.summary", sep = "/") -print(recomb_df, row.names = FALSE, width = 10000) -q() -write.table( - recomb_df, - file=outfile, - append=FALSE, - sep = "\t", - quote = FALSE, - row.names = FALSE, - col.names = TRUE -) \ No newline at end of file +print(recomb_df, row.names = FALSE, width = 10000) \ No newline at end of file

Cp+BJ*JTu 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