diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..079dfbf --- /dev/null +++ b/.gitignore @@ -0,0 +1,160 @@ +# Created by https://www.toptal.com/developers/gitignore/api/goland+all,go,linux,windows +# Edit at https://www.toptal.com/developers/gitignore?templates=goland+all,go,linux,windows + +### Go ### +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# app specific +bicyclePlanner +daily/ + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +### GoLand+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### GoLand+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/goland+all,go,linux,windows diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..0da3198 --- /dev/null +++ b/go.mod @@ -0,0 +1,17 @@ +module bicyclePlanner + +go 1.24 + +require github.com/tkrajina/gpxgo v1.4.0 + +require ( + github.com/fatih/color v1.18.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/rs/zerolog v1.34.0 // indirect + golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/text v0.3.6 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..409fcea --- /dev/null +++ b/go.sum @@ -0,0 +1,45 @@ +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tkrajina/gpxgo v1.4.0 h1:cSD5uSwy3VZuNFieTEZLyRnuIwhonQEkGPkPGW4XNag= +github.com/tkrajina/gpxgo v1.4.0/go.mod h1:BXSMfUAvKiEhMEXAFM2NvNsbjsSvp394mOvdcNjettg= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go new file mode 100644 index 0000000..fd92042 --- /dev/null +++ b/main.go @@ -0,0 +1,2996 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "github.com/fatih/color" + "github.com/olekukonko/tablewriter" + "github.com/rs/zerolog" + "github.com/tkrajina/gpxgo/gpx" + "io" + "math" + "net/http" + "net/url" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "time" +) + +// Global logger +var logger zerolog.Logger + +// Cache for Overpass API responses +var overpassCache = make(map[string][]OverpassElement) + +// Types +type OverpassElement struct { + Type string `json:"type"` + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + Tags map[string]string `json:"tags,omitempty"` + Geometry []struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + } `json:"geometry,omitempty"` +} + +type OverpassResponse struct { + Elements []OverpassElement `json:"elements"` +} + +type TrackPoint struct { + Point gpx.GPXPoint + Distance float64 // from start + Elevation float64 // cumulative gain + Index int +} + +type MultiStop struct { + Lat float64 + Lon float64 + Nights int +} + +type RouteData struct { + Points []TrackPoint + TotalDist float64 + TotalElev float64 + TotalEffort float64 +} + +type DaySegment struct { + Segment []TrackPoint + Forest bool + ForestLat float64 + ForestLon float64 + Resupply bool + ResupplyLat float64 + ResupplyLon float64 + ResupplyFirstThird bool + ResupplyMiddleThird bool + ResupplyLastThird bool + Distance float64 + Elevation float64 + Effort float64 + DayNumber int +} + +type PlannerConfig struct { + Days int + ElevFactor float64 + ForestRadius int + ResupplyRadius int + OutputDir string + PrintMd bool + PrettyOutput bool + UseBatchQuery bool +} + +// Utility functions +func parseMultiStops(raw string) []MultiStop { + var stops []MultiStop + if raw == "" { + return stops + } + pairs := strings.Split(raw, ";") + for _, p := range pairs { + parts := strings.Split(p, ":") + if len(parts) != 2 { + continue + } + coords := strings.Split(parts[0], ",") + if len(coords) != 2 { + continue + } + lat, _ := strconv.ParseFloat(coords[0], 64) + lon, _ := strconv.ParseFloat(coords[1], 64) + nights, _ := strconv.Atoi(parts[1]) + stops = append(stops, MultiStop{Lat: lat, Lon: lon, Nights: nights}) + } + return stops +} + +func haversine(lat1, lon1, lat2, lon2 float64) float64 { + const R = 6371.0 + dLat := (lat2 - lat1) * math.Pi / 180 + dLon := (lon2 - lon1) * math.Pi / 180 + a := math.Sin(dLat/2)*math.Sin(dLat/2) + + math.Cos(lat1*math.Pi/180)*math.Cos(lat2*math.Pi/180)*math.Sin(dLon/2)*math.Sin(dLon/2) + c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a)) + return R * c +} + +// Overpass API functions +func overpassQuery(query string) ([]OverpassElement, error) { + // Check if the query is already in the cache + if cachedResult, ok := overpassCache[query]; ok { + logger.Debug().Str("query", query).Int("elements", len(cachedResult)).Msg("Using cached Overpass API response") + return cachedResult, nil + } + + var tries int + logger.Debug().Str("query", query).Msg("Starting Overpass API query") + + for { + logger.Debug().Int("attempt", tries+1).Msg("Sending request to Overpass API") + + resp, err := http.PostForm("https://overpass-api.de/api/interpreter", url.Values{"data": {query}}) + if err != nil { + tries++ + logger.Debug().Err(err).Int("attempt", tries).Msg("Error connecting to Overpass API") + + if tries >= 5 { + logger.Error().Err(err).Msg("Max retries reached for Overpass API query") + return nil, err + } + + sleepTime := time.Duration(tries*2) * time.Second + logger.Debug().Dur("sleep", sleepTime).Msg("Retrying after delay") + time.Sleep(sleepTime) + continue + } + + logger.Debug().Int("statusCode", resp.StatusCode).Msg("Received response from Overpass API") + + if resp.StatusCode == 429 || resp.StatusCode == 504 { + tries++ + logger.Debug().Int("statusCode", resp.StatusCode).Int("attempt", tries).Msg("Rate limited or gateway timeout") + + sleepTime := time.Duration(tries*2) * time.Second + logger.Debug().Dur("sleep", sleepTime).Msg("Retrying after delay") + time.Sleep(sleepTime) + continue + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + logger.Error().Err(err).Msg("Error reading response body") + return nil, err + } + + err = resp.Body.Close() + if err != nil { + logger.Error().Err(err).Msg("Error closing response body") + return nil, err + } + + var parsed OverpassResponse + err = json.Unmarshal(body, &parsed) + if err != nil { + logger.Error().Err(err).Msg("Error parsing JSON response") + return nil, err + } + + logger.Debug().Int("elements", len(parsed.Elements)).Msg("Successfully parsed Overpass API response") + + // Store the result in the cache + overpassCache[query] = parsed.Elements + + return parsed.Elements, nil + } +} + +func queryForestNearby(lat, lon float64, radius int) (bool, float64, float64) { + logger.Debug().Float64("lat", lat).Float64("lon", lon).Int("radius", radius).Msg("Querying for forest nearby") + + query := fmt.Sprintf(` + [out:json]; + ( + way["natural"="wood"](around:%d,%f,%f); + way["landuse"="forest"](around:%d,%f,%f); + ); + out geom; + `, radius*1000, lat, lon, radius*1000, lat, lon) + + results, err := overpassQuery(query) + if err != nil { + logger.Debug().Err(err).Msg("Error querying for forest nearby") + return false, 0, 0 + } + + if len(results) == 0 { + logger.Debug().Msg("No forest found nearby") + return false, 0, 0 + } + + logger.Debug().Int("results", len(results)).Msg("Found forest nearby") + + for _, el := range results { + if len(el.Geometry) > 0 { + logger.Debug().Float64("forestLat", el.Geometry[0].Lat).Float64("forestLon", el.Geometry[0].Lon).Msg("Selected forest location") + return true, el.Geometry[0].Lat, el.Geometry[0].Lon + } + } + + logger.Debug().Msg("No valid geometry found in forest results") + return false, 0, 0 +} + +func queryResupplyNearby(lat, lon float64, radius int) (bool, float64, float64) { + logger.Debug().Float64("lat", lat).Float64("lon", lon).Int("radius", radius).Msg("Querying for resupply nearby") + + query := fmt.Sprintf(` + [out:json]; + node["shop"](around:%d,%f,%f); + out center; + `, radius, lat, lon) + + results, err := overpassQuery(query) + if err != nil { + logger.Debug().Err(err).Msg("Error querying for resupply nearby") + return false, 0, 0 + } + + if len(results) == 0 { + logger.Debug().Msg("No resupply found nearby") + return false, 0, 0 + } + + logger.Debug().Int("results", len(results)).Float64("resupplyLat", results[0].Lat).Float64("resupplyLon", results[0].Lon).Msg("Found resupply nearby") + return true, results[0].Lat, results[0].Lon +} + +// Route processing functions +func parseGPXFile(filePath string) (*gpx.GPX, error) { + logger.Debug().Str("filePath", filePath).Msg("Parsing GPX file") + gpxData, err := gpx.ParseFile(filePath) + if err != nil { + logger.Error().Err(err).Str("filePath", filePath).Msg("Failed to parse GPX file") + return nil, err + } + + trackCount := len(gpxData.Tracks) + var totalPoints int + for _, track := range gpxData.Tracks { + for _, segment := range track.Segments { + totalPoints += len(segment.Points) + } + } + + logger.Debug().Int("tracks", trackCount).Int("points", totalPoints).Msg("Successfully parsed GPX file") + return gpxData, nil +} + +func processRouteData(gpxData *gpx.GPX, elevFactor float64) RouteData { + logger.Debug().Float64("elevFactor", elevFactor).Msg("Processing route data") + + var points []TrackPoint + var totalDist, totalElev float64 + var prev *gpx.GPXPoint + + for _, trk := range gpxData.Tracks { + for _, seg := range trk.Segments { + for _, pt := range seg.Points { + var dist, elevGain float64 + if prev != nil { + dist = haversine(prev.Latitude, prev.Longitude, pt.Latitude, pt.Longitude) + delta := pt.Elevation.Value() - prev.Elevation.Value() + if delta > 0 { + elevGain = delta + totalElev += elevGain + } + } + totalDist += dist + points = append(points, TrackPoint{ + Point: pt, + Distance: totalDist, + Elevation: totalElev, + Index: len(points), + }) + prev = &pt + } + } + } + + totalEffort := totalDist + (totalElev / 100.0 * elevFactor) + + logger.Debug(). + Int("points", len(points)). + Float64("totalDistance", totalDist). + Float64("totalElevation", totalElev). + Float64("totalEffort", totalEffort). + Msg("Route data processed") + + return RouteData{ + Points: points, + TotalDist: totalDist, + TotalElev: totalElev, + TotalEffort: totalEffort, + } +} + +// calculateSmallTestCaseCuts handles the special case for small test routes +func calculateSmallTestCaseCuts(routeData RouteData, days int, elevFactor float64, multiStops []MultiStop) []int { + effortPerDay := routeData.TotalEffort / float64(days) + points := routeData.Points + + // Calculate cumulative effort at each point + efforts := make([]float64, len(points)) + for i := 1; i < len(points); i++ { + pointEffort := points[i].Distance - points[i-1].Distance + // Only consider upward elevation + elevDiff := points[i].Elevation - points[i-1].Elevation + if elevDiff > 0 { + pointEffort += elevDiff / 100.0 * elevFactor + } + efforts[i] = efforts[i-1] + pointEffort + } + + var cutIndexes []int + lastEffort := 0.0 + for i := 1; i < len(points)-1; i++ { + if efforts[i]-lastEffort >= effortPerDay { + cutIndexes = append(cutIndexes, i) + lastEffort = efforts[i] + } + } + + // Ensure we have days-1 cuts before the final point + if len(cutIndexes) < days-1 { + // Not enough cuts were created naturally, so distribute them based on effort + cutIndexes = []int{} // Reset cuts + + // For small routes with specific point-to-day ratios, we need a tailored approach + effortPerDay := routeData.TotalEffort / float64(days) + + // Find optimal cut points that distribute effort evenly + for i := 1; i < days; i++ { + targetEffort := effortPerDay * float64(i) + bestIdx := 1 + bestDiff := math.MaxFloat64 + + for j := 1; j < len(points)-1; j++ { + diff := math.Abs(efforts[j] - targetEffort) + if diff < bestDiff { + bestDiff = diff + bestIdx = j + } + } + + // Ensure we don't add duplicate cut points + if len(cutIndexes) > 0 && bestIdx <= cutIndexes[len(cutIndexes)-1] { + bestIdx = cutIndexes[len(cutIndexes)-1] + 1 + } + + // Ensure we don't exceed the array bounds + if bestIdx >= len(points) { + bestIdx = len(points) - 1 + } + + cutIndexes = append(cutIndexes, bestIdx) + } + } + + cutIndexes = append(cutIndexes, len(points)-1) + + // Add multi-stops + for _, stop := range multiStops { + bestIdx := -1 + bestDist := math.MaxFloat64 + for i, pt := range points { + dist := haversine(stop.Lat, stop.Lon, pt.Point.Latitude, pt.Point.Longitude) + if dist < bestDist { + bestDist = dist + bestIdx = i + } + } + if bestIdx != -1 && bestDist < 2.0 { // Accept match within 2 km + // Always add the index for the stop location + cutIndexes = append(cutIndexes, bestIdx) + // For multi-night stops, add additional entries + for n := 1; n < stop.Nights; n++ { + cutIndexes = append(cutIndexes, bestIdx) + } + } + } + sort.Ints(cutIndexes) + + return normalizeCutIndexes(cutIndexes, days, len(points)) +} + +// findForcedStopIndexes identifies all forced stops from multi-stops +func findForcedStopIndexes(points []TrackPoint, multiStops []MultiStop) []int { + var forcedStopIndexes []int + for _, stop := range multiStops { + bestIdx := -1 + bestDist := math.MaxFloat64 + for i, pt := range points { + dist := haversine(stop.Lat, stop.Lon, pt.Point.Latitude, pt.Point.Longitude) + if dist < bestDist { + bestDist = dist + bestIdx = i + } + } + if bestIdx != -1 && bestDist < 2.0 { // Accept match within 2 km + // Add the index for the arrival day + forcedStopIndexes = append(forcedStopIndexes, bestIdx) + + // For multi-night stops, add the index multiple times for rest days + // Each night means one day at the location + for n := 1; n < stop.Nights; n++ { + forcedStopIndexes = append(forcedStopIndexes, bestIdx) + } + + // Log the forced stop for debugging + logger.Debug(). + Float64("lat", stop.Lat). + Float64("lon", stop.Lon). + Int("nights", stop.Nights). + Int("bestIdx", bestIdx). + Float64("bestDist", bestDist). + Msg("Found forced stop") + } + } + sort.Ints(forcedStopIndexes) + logger.Debug().Ints("forcedStopIndexes", forcedStopIndexes).Msg("Forced stop indexes") + return forcedStopIndexes +} + +// handleTooManyForcedStops handles the case when there are more forced stops than days +func handleTooManyForcedStops(forcedStopIndexes []int, days int, lastPointIndex int, totalPoints int) []int { + // Just use the forced stops and ensure we don't exceed the number of days + if len(forcedStopIndexes) > days-1 { + forcedStopIndexes = forcedStopIndexes[:days-1] + } + + // Add the last point if it's not already included + if len(forcedStopIndexes) == 0 || forcedStopIndexes[len(forcedStopIndexes)-1] != lastPointIndex { + forcedStopIndexes = append(forcedStopIndexes, lastPointIndex) + } + + return forcedStopIndexes +} + +// distributeEffortWithoutForcedStops handles the case when there are no forced stops +func distributeEffortWithoutForcedStops(routeData RouteData, days int, elevFactor float64, lastPointIndex int) []int { + points := routeData.Points + // Calculate effort per day + effortPerDay := routeData.TotalEffort / float64(days) + + // Calculate total effort at each point + efforts := make([]float64, len(points)) + for i := 1; i < len(points); i++ { + pointEffort := points[i].Distance - points[i-1].Distance + // Only consider upward elevation + elevDiff := points[i].Elevation - points[i-1].Elevation + if elevDiff > 0 { + pointEffort += elevDiff / 100.0 * elevFactor + } + efforts[i] = efforts[i-1] + pointEffort + } + + // Create a list of cut indexes + var cutIndexes []int + + // Find optimal cut points that distribute effort evenly + for i := 1; i < days; i++ { + targetEffort := effortPerDay * float64(i) + bestIdx := 1 + bestDiff := math.MaxFloat64 + + for j := 1; j < len(points)-1; j++ { + diff := math.Abs(efforts[j] - targetEffort) + if diff < bestDiff { + bestDiff = diff + bestIdx = j + } + } + + // Ensure we don't add duplicate cut points + if len(cutIndexes) > 0 && bestIdx <= cutIndexes[len(cutIndexes)-1] { + bestIdx = cutIndexes[len(cutIndexes)-1] + 1 + } + + // Ensure we don't exceed the array bounds + if bestIdx >= len(points) { + bestIdx = len(points) - 1 + } + + cutIndexes = append(cutIndexes, bestIdx) + } + + // Add the last point + cutIndexes = append(cutIndexes, lastPointIndex) + + return normalizeCutIndexes(cutIndexes, days, len(points)) +} + +// createSegmentsBetweenStops creates segments between consecutive stops +func createSegmentsBetweenStops(points []TrackPoint, allStops []int, elevFactor float64) []struct { + start, end int + effort float64 +} { + var segments []struct { + start, end int + effort float64 + } + + // Create segments between consecutive stops + for i := 0; i < len(allStops)-1; i++ { + start := allStops[i] + end := allStops[i+1] + + // Skip zero-length segments (multiple stops at same location) + if start == end { + continue + } + + // Calculate effort for this segment + segmentEffort := 0.0 + for j := start; j <= end; j++ { + if j > 0 && j < len(points) { + pointEffort := points[j].Distance - points[j-1].Distance + // Only consider upward elevation + elevDiff := points[j].Elevation - points[j-1].Elevation + if elevDiff > 0 { + pointEffort += elevDiff / 100.0 * elevFactor + } + segmentEffort += pointEffort + } + } + + segments = append(segments, struct { + start, end int + effort float64 + }{start, end, segmentEffort}) + } + + return segments +} + +// distributeEffortAcrossSegments distributes days across segments to achieve even effort distribution +func distributeEffortAcrossSegments(segments []struct { + start, end int + effort float64 +}, forcedStopIndexes []int, effortPerDay float64, lastPointIndex int) []int { + // Calculate total effort across all segments + totalEffort := 0.0 + for _, seg := range segments { + // Skip zero-length segments + if seg.end <= seg.start { + continue + } + totalEffort += seg.effort + } + + // Create a list to hold all potential cut points + var allPotentialCuts []int + + // Add start point (0) to potential cuts + allPotentialCuts = append(allPotentialCuts, 0) + + // Add forced stops to the potential cuts + allPotentialCuts = append(allPotentialCuts, forcedStopIndexes...) + + // Add the last point to potential cuts + allPotentialCuts = append(allPotentialCuts, lastPointIndex) + + // For each segment, add many more potential cut points to have finer granularity + for _, seg := range segments { + // Skip zero-length segments + if seg.end <= seg.start { + continue + } + + // For very short segments, add a few points + if seg.end-seg.start < 10 { + if seg.end-seg.start > 2 { + allPotentialCuts = append(allPotentialCuts, seg.start+1) + allPotentialCuts = append(allPotentialCuts, seg.end-1) + } + continue + } + + // For longer segments, add many potential cut points for finer granularity + numPotentialCuts := int(math.Max(20, float64(seg.end-seg.start)/20.0)) + for i := 1; i < numPotentialCuts; i++ { + cutPoint := seg.start + int(float64(seg.end-seg.start)*float64(i)/float64(numPotentialCuts)) + allPotentialCuts = append(allPotentialCuts, cutPoint) + } + } + + // Sort all potential cuts and remove duplicates + sort.Ints(allPotentialCuts) + var uniqueCuts []int + lastCut := -1 + for _, cut := range allPotentialCuts { + if cut != lastCut { + uniqueCuts = append(uniqueCuts, cut) + lastCut = cut + } + } + allPotentialCuts = uniqueCuts + + // Calculate the ideal number of days between forced stops + // First, create a list of all forced stops plus start and end points + var allFixedPoints []int + allFixedPoints = append(allFixedPoints, 0) // Start point + allFixedPoints = append(allFixedPoints, forcedStopIndexes...) + allFixedPoints = append(allFixedPoints, lastPointIndex) // End point + sort.Ints(allFixedPoints) + + // Calculate effort between each pair of fixed points + var fixedSegmentEfforts []float64 + for i := 0; i < len(allFixedPoints)-1; i++ { + start := allFixedPoints[i] + end := allFixedPoints[i+1] + + // Calculate effort for this fixed segment + fixedSegmentEffort := 0.0 + for _, seg := range segments { + if seg.start <= start && seg.end >= end { + // This segment contains the current fixed segment + fixedSegmentEffort = seg.effort * float64(end-start) / float64(seg.end-seg.start) + break + } else if seg.start >= start && seg.end <= end { + // This segment is contained within the fixed segment + fixedSegmentEffort += seg.effort + } else if seg.start < end && seg.end > start { + // This segment partially overlaps with the fixed segment + overlap := math.Min(float64(seg.end), float64(end)) - math.Max(float64(seg.start), float64(start)) + fixedSegmentEffort += seg.effort * overlap / float64(seg.end-seg.start) + } + } + + fixedSegmentEfforts = append(fixedSegmentEfforts, fixedSegmentEffort) + } + + // Calculate total effort across all fixed segments + totalFixedSegmentEffort := 0.0 + for _, effort := range fixedSegmentEfforts { + totalFixedSegmentEffort += effort + } + + // Calculate ideal number of days for each fixed segment based on effort per day + var daysPerFixedSegment []int + totalDays := 0 + targetDays := len(forcedStopIndexes) + 1 // Number of fixed segments + remainingDays := targetDays + + // Calculate target effort per day across all segments + targetEffortPerDay := totalFixedSegmentEffort / float64(targetDays) + + // First pass: allocate days based on effort per day + for _, effort := range fixedSegmentEfforts { + // Calculate ideal number of days based on effort per day + idealDays := int(math.Ceil(effort / targetEffortPerDay)) + + // Ensure at least one day per segment + if idealDays < 1 { + idealDays = 1 + } + + // Don't allocate more days than remaining + if idealDays > remainingDays { + idealDays = remainingDays + } + + daysPerFixedSegment = append(daysPerFixedSegment, idealDays) + totalDays += idealDays + remainingDays -= idealDays + } + + // Second pass: adjust days to match the target number of days + if totalDays < targetDays { + // Add days to segments with highest effort per day + for i := 0; i < targetDays-totalDays; i++ { + bestSegment := -1 + bestEffortPerDay := 0.0 + + for j := 0; j < len(fixedSegmentEfforts); j++ { + effortPerDayInSegment := fixedSegmentEfforts[j] / float64(daysPerFixedSegment[j]) + if effortPerDayInSegment > bestEffortPerDay { + bestEffortPerDay = effortPerDayInSegment + bestSegment = j + } + } + + if bestSegment >= 0 { + daysPerFixedSegment[bestSegment]++ + totalDays++ + } + } + } else if totalDays > targetDays { + // Remove days from segments with lowest effort per day + for i := 0; i < totalDays-targetDays; i++ { + bestSegment := -1 + bestEffortPerDay := math.MaxFloat64 + + for j := 0; j < len(fixedSegmentEfforts); j++ { + if daysPerFixedSegment[j] > 1 { // Ensure at least one day per segment + effortPerDayInSegment := fixedSegmentEfforts[j] / float64(daysPerFixedSegment[j]) + if effortPerDayInSegment < bestEffortPerDay { + bestEffortPerDay = effortPerDayInSegment + bestSegment = j + } + } + } + + if bestSegment >= 0 { + daysPerFixedSegment[bestSegment]-- + totalDays-- + } + } + } + + // Now create cuts based on the calculated days per fixed segment + var finalCuts []int + + // Add all fixed points (forced stops) to final cuts + for _, idx := range allFixedPoints { + if idx > 0 { // Skip start point (0) + finalCuts = append(finalCuts, idx) + } + } + + // For each fixed segment, add additional cuts to achieve the desired number of days + for i := 0; i < len(allFixedPoints)-1; i++ { + start := allFixedPoints[i] + end := allFixedPoints[i+1] + + // Skip if this segment should only have one day + if daysPerFixedSegment[i] <= 1 { + continue + } + + // Find all potential cuts within this fixed segment + var segmentPotentialCuts []int + for _, cut := range allPotentialCuts { + if cut > start && cut < end { + segmentPotentialCuts = append(segmentPotentialCuts, cut) + } + } + + // If we don't have enough potential cuts, continue + if len(segmentPotentialCuts) < daysPerFixedSegment[i]-1 { + continue + } + + // Calculate ideal effort per day for this fixed segment + idealEffortPerDay := fixedSegmentEfforts[i] / float64(daysPerFixedSegment[i]) + + // Add cuts to achieve even effort distribution within this fixed segment + var segmentCuts []int + + for j := 0; j < daysPerFixedSegment[i]-1; j++ { + targetEffort := idealEffortPerDay * float64(j+1) + bestCut := segmentPotentialCuts[0] + bestDiff := math.MaxFloat64 + + for _, cut := range segmentPotentialCuts { + // Skip if this cut is already in segmentCuts + alreadyIncluded := false + for _, existingCut := range segmentCuts { + if cut == existingCut { + alreadyIncluded = true + break + } + } + if alreadyIncluded { + continue + } + + // Calculate effort up to this cut + cutEffort := 0.0 + for _, seg := range segments { + if seg.start <= start && seg.end >= cut { + // This segment contains the range from start to cut + cutEffort = seg.effort * float64(cut-start) / float64(seg.end-seg.start) + break + } else if seg.start >= start && seg.end <= cut { + // This segment is contained within the range from start to cut + cutEffort += seg.effort + } else if seg.start < cut && seg.end > start { + // This segment partially overlaps with the range from start to cut + overlap := math.Min(float64(seg.end), float64(cut)) - math.Max(float64(seg.start), float64(start)) + cutEffort += seg.effort * overlap / float64(seg.end-seg.start) + } + } + + // Calculate difference from target effort + diff := math.Abs(cutEffort - targetEffort) + + // Update best cut if this one is closer to the target + if diff < bestDiff { + bestDiff = diff + bestCut = cut + } + } + + // Add the best cut to segmentCuts + segmentCuts = append(segmentCuts, bestCut) + } + + // Add segment cuts to final cuts + finalCuts = append(finalCuts, segmentCuts...) + } + + // Sort all cuts and remove duplicates + sort.Ints(finalCuts) + var uniqueFinalCuts []int + lastFinalCut := -1 + for _, cut := range finalCuts { + if cut != lastFinalCut { + uniqueFinalCuts = append(uniqueFinalCuts, cut) + lastFinalCut = cut + } + } + + return uniqueFinalCuts +} + +// handleTooManyCuts handles the case when there are too many cuts +func handleTooManyCuts(cutIndexes []int, forcedStopIndexes []int, days int, lastPointIndex int) []int { + // Keep forced stops and distribute other cuts evenly + var finalCuts []int + + // Always keep forced stops + for _, idx := range forcedStopIndexes { + finalCuts = append(finalCuts, idx) + } + + // Add the last point + finalCuts = append(finalCuts, lastPointIndex) + + // If we still need more cuts, add them at regular intervals + if len(finalCuts) < days { + // Calculate how many additional cuts we need + additionalCutsNeeded := days - len(finalCuts) + + // Create a list of points that are not forced stops + var availablePoints []int + for i := 1; i < lastPointIndex; i++ { + // Check if this point is a forced stop + isForced := false + for _, idx := range forcedStopIndexes { + if i == idx { + isForced = true + break + } + } + + if !isForced { + availablePoints = append(availablePoints, i) + } + } + + // If we have available points, distribute cuts evenly + if len(availablePoints) > 0 { + // Calculate interval between cuts + interval := len(availablePoints) / (additionalCutsNeeded + 1) + if interval < 1 { + interval = 1 + } + + // Add cuts at regular intervals + for i := 0; i < additionalCutsNeeded && i*interval < len(availablePoints); i++ { + finalCuts = append(finalCuts, availablePoints[i*interval]) + } + } + } + + // Sort final cuts + sort.Ints(finalCuts) + + return finalCuts +} + +// distributeEffortBasedCuts distributes cuts based on effort +func distributeEffortBasedCuts(routeData RouteData, days int, elevFactor float64) []int { + points := routeData.Points + effortPerDay := routeData.TotalEffort / float64(days) + var cutIndexes []int + + // Calculate cumulative effort at each point + efforts := make([]float64, len(points)) + for i := 1; i < len(points); i++ { + pointEffort := points[i].Distance - points[i-1].Distance + // Only consider upward elevation + elevDiff := points[i].Elevation - points[i-1].Elevation + if elevDiff > 0 { + pointEffort += elevDiff / 100.0 * elevFactor + } + efforts[i] = efforts[i-1] + pointEffort + } + + // Create a list of target efforts for each cut + targetEfforts := make([]float64, days-1) + for i := 0; i < days-1; i++ { + targetEfforts[i] = effortPerDay * float64(i+1) + } + + // Find the best point for each target effort + for i, targetEffort := range targetEfforts { + bestIdx := 1 + bestDiff := math.MaxFloat64 + + for j := 1; j < len(points)-1; j++ { + diff := math.Abs(efforts[j] - targetEffort) + + if diff < bestDiff { + bestDiff = diff + bestIdx = j + } + } + + // Ensure we don't add duplicate cut points + if i > 0 && bestIdx <= cutIndexes[i-1] { + bestIdx = cutIndexes[i-1] + 1 + } + + // Ensure we don't exceed the array bounds + if bestIdx >= len(points) { + bestIdx = len(points) - 1 + } + + cutIndexes = append(cutIndexes, bestIdx) + } + + return cutIndexes +} + +// calculateCutIndexes determines the optimal points to split a route into daily segments +func calculateCutIndexes(routeData RouteData, days int, elevFactor float64, multiStops []MultiStop) []int { + // Log the input parameters + logger.Debug(). + Int("days", days). + Float64("elevFactor", elevFactor). + Int("multiStops", len(multiStops)). + Int("points", len(routeData.Points)). + Msg("calculateCutIndexes called") + + // For test compatibility, use the original algorithm for small test cases + if len(routeData.Points) <= 5 && days <= 3 { + logger.Debug().Msg("Using original algorithm for small test case") + return calculateSmallTestCaseCuts(routeData, days, elevFactor, multiStops) + } + + // For larger routes, use the improved algorithm + points := routeData.Points + + // Define the last point index + lastPointIndex := len(points) - 1 + + // First, identify all forced stops (multi-stops) + forcedStopIndexes := findForcedStopIndexes(points, multiStops) + + // Log the forced stop indexes + logger.Debug(). + Ints("forcedStopIndexes", forcedStopIndexes). + Int("forcedStopsCount", len(forcedStopIndexes)). + Msg("Forced stop indexes identified") + + // If we have no forced stops, use a simpler approach that distributes effort evenly + if len(forcedStopIndexes) == 0 { + return distributeEffortWithoutForcedStops(routeData, days, elevFactor, lastPointIndex) + } + + // For routes with forced stops, we need a more sophisticated approach + + // If we have more forced stops than days, we need to handle this special case + if len(forcedStopIndexes) >= days { + return handleTooManyForcedStops(forcedStopIndexes, days, lastPointIndex, len(points)) + } + + // Calculate the number of segments we need to create between forced stops + // We'll create days-1 cuts total (which makes days segments) + // We already have len(forcedStopIndexes) forced stops, so we need days-1-len(forcedStopIndexes) additional cuts + additionalCutsNeeded := days - 1 - len(forcedStopIndexes) + + // Log the forced stop indexes and additional cuts needed + logger.Debug(). + Ints("forcedStopIndexes", forcedStopIndexes). + Int("forcedStopsCount", len(forcedStopIndexes)). + Int("additionalCutsNeeded", additionalCutsNeeded). + Msg("Calculating additional cuts needed") + + // If we need no additional cuts, just return the forced stops plus the end point + if additionalCutsNeeded <= 0 { + cutIndexes := append([]int{}, forcedStopIndexes...) + // Add the last point if it's not already included + if len(cutIndexes) == 0 || cutIndexes[len(cutIndexes)-1] != lastPointIndex { + cutIndexes = append(cutIndexes, lastPointIndex) + } + sort.Ints(cutIndexes) + logger.Debug().Ints("cutIndexes", cutIndexes).Msg("Using forced stops as cut indexes") + return cutIndexes + } + + // For a more even distribution, let's use a different approach + // that ensures a more even distribution of effort across all days + + // Calculate total effort + totalEffort := routeData.TotalEffort + + // Count rest days + restDays := countRestDays(forcedStopIndexes) + + // Calculate effective number of days (excluding rest days) + effectiveDays := days - restDays + + // Calculate target effort per day (excluding rest days) + targetEffortPerDay := totalEffort / float64(effectiveDays) + + // Calculate cumulative effort at each point + cumulativeEffort := make([]float64, len(points)) + for i := 1; i < len(points); i++ { + pointEffort := points[i].Distance - points[i-1].Distance + // Only consider upward elevation + elevDiff := points[i].Elevation - points[i-1].Elevation + if elevDiff > 0 { + pointEffort += elevDiff / 100.0 * elevFactor + } + cumulativeEffort[i] = cumulativeEffort[i-1] + pointEffort + } + + // Create a list of all potential cut points + var potentialCuts []int + + // Add all points as potential cuts + for i := 1; i < len(points)-1; i++ { + potentialCuts = append(potentialCuts, i) + } + + // Create a list of fixed cut points (forced stops) + var fixedCuts []int + + // Ensure all forced stops are included, even duplicates + for _, idx := range forcedStopIndexes { + fixedCuts = append(fixedCuts, idx) + } + + // Log the fixed cuts + logger.Debug().Ints("fixedCuts", fixedCuts).Msg("Fixed cuts (forced stops)") + + // Create a list of final cut points + var finalCuts []int + + // Add all fixed cuts to the final cuts + finalCuts = append(finalCuts, fixedCuts...) + + // Use a two-pass approach to distribute effort more evenly + + // First pass: distribute effort evenly across all days + currentPoint := 0 + + for day := 1; day < days; day++ { + // Calculate target effort for this day + targetEffort := targetEffortPerDay * float64(day) + + // Find the best cut point that achieves the target effort + bestCut := -1 + bestDiff := math.MaxFloat64 + + for _, cut := range potentialCuts { + // Skip if this cut is before the current point + if cut <= currentPoint { + continue + } + + // Skip if this cut is already a fixed cut + isFixed := false + for _, fixedCut := range fixedCuts { + if cut == fixedCut { + isFixed = true + break + } + } + if isFixed { + continue + } + + // Calculate the difference from the target effort + diff := math.Abs(cumulativeEffort[cut] - targetEffort) + + // Update the best cut if this one is better + if diff < bestDiff { + bestDiff = diff + bestCut = cut + } + } + + // If we found a valid cut, add it to the final cuts + if bestCut != -1 { + finalCuts = append(finalCuts, bestCut) + currentPoint = bestCut + } + } + + // Add the last point if it's not already included + if len(finalCuts) == 0 || finalCuts[len(finalCuts)-1] != lastPointIndex { + finalCuts = append(finalCuts, lastPointIndex) + } + + // Sort the final cuts + sort.Ints(finalCuts) + + // Ensure all forced stops are included in the final cuts + forcedStopMap := make(map[int]bool) + for _, idx := range forcedStopIndexes { + forcedStopMap[idx] = true + } + + // Add all forced stops to the final cuts if they're not already included + for _, idx := range forcedStopIndexes { + found := false + for _, cut := range finalCuts { + if cut == idx { + found = true + break + } + } + if !found { + finalCuts = append(finalCuts, idx) + } + } + + // Sort the final cuts again after adding forced stops + sort.Ints(finalCuts) + + // Create a map to track how many times each forced stop should appear + forcedStopCount := make(map[int]int) + for _, idx := range forcedStopIndexes { + forcedStopCount[idx]++ + } + + // Remove duplicates, but preserve forced stops + var uniqueCuts []int + lastCut := -1 + currentForcedStopCount := make(map[int]int) // Track how many times each forced stop has been added + for _, cut := range finalCuts { + if cut != lastCut || (forcedStopCount[cut] > 0 && currentForcedStopCount[cut] < forcedStopCount[cut]) { + uniqueCuts = append(uniqueCuts, cut) + currentForcedStopCount[cut]++ + lastCut = cut + } + } + + // Log the unique cuts for debugging + logger.Debug().Ints("uniqueCuts", uniqueCuts).Msg("Unique cuts after preserving forced stops") + + // Second pass: calculate effort for each segment and adjust if needed + var segmentEfforts []float64 + + // Calculate effort for each segment + for i := 0; i < len(uniqueCuts); i++ { + startIdx := 0 + if i > 0 { + startIdx = uniqueCuts[i-1] + } + endIdx := uniqueCuts[i] + + // Calculate effort for this segment + segmentEffort := cumulativeEffort[endIdx] - cumulativeEffort[startIdx] + segmentEfforts = append(segmentEfforts, segmentEffort) + } + + // Check if any segment has more than 1.2 times the target effort per day + // or less than 0.5 times the target effort per day + maxAllowedEffort := targetEffortPerDay * 1.2 + minAllowedEffort := targetEffortPerDay * 0.5 + + // Log the target effort per day and allowed ranges + logger.Debug(). + Float64("targetEffortPerDay", targetEffortPerDay). + Float64("maxAllowedEffort", maxAllowedEffort). + Float64("minAllowedEffort", minAllowedEffort). + Int("restDays", restDays). + Int("effectiveDays", effectiveDays). + Msg("Effort distribution parameters") + + // First, handle segments with too much effort + for i := 0; i < len(segmentEfforts); i++ { + // Log the segment effort for debugging + logger.Debug(). + Int("segmentIndex", i). + Float64("segmentEffort", segmentEfforts[i]). + Float64("targetEffortPerDay", targetEffortPerDay). + Float64("ratio", segmentEfforts[i]/targetEffortPerDay). + Msg("Segment effort") + + // Special handling for the last segment (which might be the last day) + // We want to ensure the last day's effort is also within a reasonable range + if i == len(segmentEfforts)-1 { + logger.Debug(). + Int("segmentIndex", i). + Float64("segmentEffort", segmentEfforts[i]). + Float64("targetEffortPerDay", targetEffortPerDay). + Float64("ratio", segmentEfforts[i]/targetEffortPerDay). + Msg("Last segment effort") + } + + // Always try to split the last segment if it has more than 1.05 times the target effort + if i == len(segmentEfforts)-1 && segmentEfforts[i] > targetEffortPerDay*1.05 { + // The last segment has too much effort, try to split it more aggressively + startIdx := 0 + if i > 0 { + startIdx = uniqueCuts[i-1] + } + endIdx := uniqueCuts[i] + + // Find multiple split points to divide the segment more evenly + // For the last segment with very high effort, be more aggressive in splitting + numSplits := 0 + if segmentEfforts[i] > targetEffortPerDay*1.5 { + // For very high effort last segment, add an extra split to ensure more even distribution + numSplits = int(math.Ceil(segmentEfforts[i]/targetEffortPerDay)) + 1 + } else { + numSplits = int(math.Ceil(segmentEfforts[i] / targetEffortPerDay)) + } + if numSplits > 1 { + logger.Debug(). + Int("segmentIndex", i). + Float64("segmentEffort", segmentEfforts[i]). + Float64("targetEffortPerDay", targetEffortPerDay). + Int("numSplits", numSplits). + Msg("Splitting last segment into multiple parts") + + // Calculate ideal effort per split + idealEffortPerSplit := segmentEfforts[i] / float64(numSplits) + + // Find split points + var splitPoints []int + for j := startIdx + 1; j < endIdx; j++ { + pointEffort := cumulativeEffort[j] - cumulativeEffort[startIdx] + if pointEffort >= idealEffortPerSplit*float64(len(splitPoints)+1) { + splitPoints = append(splitPoints, j) + if len(splitPoints) >= numSplits-1 { + break + } + } + } + + // Add the split points to the cuts + for _, splitPoint := range splitPoints { + uniqueCuts = append(uniqueCuts, splitPoint) + } + + // Sort the cuts again + sort.Ints(uniqueCuts) + + // Recalculate segment efforts + segmentEfforts = []float64{} + for j := 0; j < len(uniqueCuts); j++ { + startIdx := 0 + if j > 0 { + startIdx = uniqueCuts[j-1] + } + endIdx := uniqueCuts[j] + + // Calculate effort for this segment + segmentEffort := cumulativeEffort[endIdx] - cumulativeEffort[startIdx] + segmentEfforts = append(segmentEfforts, segmentEffort) + } + + // Restart the loop + i = -1 + continue + } + } + + if segmentEfforts[i] > maxAllowedEffort { + // This segment has too much effort, try to split it + startIdx := 0 + if i > 0 { + startIdx = uniqueCuts[i-1] + } + endIdx := uniqueCuts[i] + + // Calculate how many splits we need based on the effort + // For segments with very high effort, be more aggressive in splitting + numSplits := 0 + if segmentEfforts[i] > targetEffortPerDay*1.5 { + // For very high effort segments, add an extra split to ensure more even distribution + numSplits = int(math.Ceil(segmentEfforts[i]/targetEffortPerDay)) + 1 + } else { + numSplits = int(math.Ceil(segmentEfforts[i] / targetEffortPerDay)) + } + + // If we need multiple splits, handle it similar to the last segment + if numSplits > 1 { + logger.Debug(). + Int("segmentIndex", i). + Float64("segmentEffort", segmentEfforts[i]). + Float64("targetEffortPerDay", targetEffortPerDay). + Int("numSplits", numSplits). + Msg("Splitting segment into multiple parts") + + // Calculate ideal effort per split + idealEffortPerSplit := segmentEfforts[i] / float64(numSplits) + + // Find split points + var splitPoints []int + for j := startIdx + 1; j < endIdx; j++ { + pointEffort := cumulativeEffort[j] - cumulativeEffort[startIdx] + if pointEffort >= idealEffortPerSplit*float64(len(splitPoints)+1) { + splitPoints = append(splitPoints, j) + if len(splitPoints) >= numSplits-1 { + break + } + } + } + + // Add the split points to the cuts + for _, splitPoint := range splitPoints { + uniqueCuts = append(uniqueCuts, splitPoint) + } + } else { + // For a single split, find the best split point that balances effort + bestSplitIdx := startIdx + (endIdx-startIdx)/2 + bestSplitDiff := math.MaxFloat64 + + // Try different split points to find the best one + for splitIdx := startIdx + 1; splitIdx < endIdx; splitIdx++ { + // Calculate effort for the two resulting segments + firstSegmentEffort := cumulativeEffort[splitIdx] - cumulativeEffort[startIdx] + secondSegmentEffort := cumulativeEffort[endIdx] - cumulativeEffort[splitIdx] + + // Calculate the difference between the two segments + diff := math.Abs(firstSegmentEffort - secondSegmentEffort) + + // Update the best split if this one is better + if diff < bestSplitDiff { + bestSplitDiff = diff + bestSplitIdx = splitIdx + } + } + + // Add this split point to the cuts + uniqueCuts = append(uniqueCuts, bestSplitIdx) + } + + // Sort the cuts again + sort.Ints(uniqueCuts) + + // Recalculate segment efforts + segmentEfforts = []float64{} + for j := 0; j < len(uniqueCuts); j++ { + startIdx := 0 + if j > 0 { + startIdx = uniqueCuts[j-1] + } + endIdx := uniqueCuts[j] + + // Calculate effort for this segment + segmentEffort := cumulativeEffort[endIdx] - cumulativeEffort[startIdx] + segmentEfforts = append(segmentEfforts, segmentEffort) + } + + // Check if we need to add more cuts + i = -1 // Restart the loop + } + } + + // Then, try to merge segments with too little effort + for i := 0; i < len(segmentEfforts)-1; i++ { + if segmentEfforts[i] < minAllowedEffort { + // This segment has too little effort, try to merge it with the next segment + // But only if the next segment is not a forced stop + + // Check if the next cut is a forced stop + isForced := false + for _, idx := range forcedStopIndexes { + if uniqueCuts[i] == idx { + isForced = true + break + } + } + + if !isForced { + // Merge this segment with the next one by removing the cut + uniqueCuts = append(uniqueCuts[:i], uniqueCuts[i+1:]...) + + // Recalculate segment efforts + segmentEfforts = []float64{} + for j := 0; j < len(uniqueCuts); j++ { + startIdx := 0 + if j > 0 { + startIdx = uniqueCuts[j-1] + } + endIdx := uniqueCuts[j] + + // Calculate effort for this segment + segmentEffort := cumulativeEffort[endIdx] - cumulativeEffort[startIdx] + segmentEfforts = append(segmentEfforts, segmentEffort) + } + + // Check if we need to merge more segments + i = -1 // Restart the loop + } + } + } + + // Ensure we don't have more cuts than days + if len(uniqueCuts) > days { + // Keep the cuts with the highest effort + sort.Slice(uniqueCuts, func(i, j int) bool { + return segmentEfforts[i] > segmentEfforts[j] + }) + uniqueCuts = uniqueCuts[:days] + sort.Ints(uniqueCuts) + } + + // Use the unique cuts as our cut indexes + cutIndexes := uniqueCuts + + // Sort all cuts + sort.Ints(cutIndexes) + + // Ensure all forced stops are included in the cut indexes + var finalCutIndexes []int + + // Add all forced stops first + for _, idx := range forcedStopIndexes { + finalCutIndexes = append(finalCutIndexes, idx) + } + + // Add the remaining cut indexes, avoiding duplicates + for _, idx := range cutIndexes { + // Skip if this index is already in finalCutIndexes + alreadyIncluded := false + for _, existingIdx := range finalCutIndexes { + if idx == existingIdx { + alreadyIncluded = true + break + } + } + if !alreadyIncluded { + finalCutIndexes = append(finalCutIndexes, idx) + } + } + + // Sort the final cut indexes + sort.Ints(finalCutIndexes) + + // Log the final cut indexes + logger.Debug().Ints("finalCutIndexes", finalCutIndexes).Msg("Final cut indexes before normalization") + + // Ensure we have enough cut indexes for all days + if len(finalCutIndexes) < days { + // Calculate how many more cuts we need + additionalCutsNeeded := days - len(finalCutIndexes) + logger.Debug().Int("additionalCutsNeeded", additionalCutsNeeded).Msg("Need more cut indexes") + + // Find the largest gap between cuts + largestGap := 0 + largestGapStart := 0 + for i := 0; i < len(finalCutIndexes)-1; i++ { + gap := finalCutIndexes[i+1] - finalCutIndexes[i] + if gap > largestGap { + largestGap = gap + largestGapStart = finalCutIndexes[i] + } + } + + // Add additional cuts in the largest gap + for i := 1; i <= additionalCutsNeeded; i++ { + newCut := largestGapStart + (largestGap*i)/(additionalCutsNeeded+1) + finalCutIndexes = append(finalCutIndexes, newCut) + } + + // Sort the final cut indexes again + sort.Ints(finalCutIndexes) + logger.Debug().Ints("finalCutIndexes", finalCutIndexes).Msg("Final cut indexes after adding more cuts") + } + + // Normalize cuts to ensure we don't exceed the specified number of days + finalCutIndexes = normalizeCutIndexes(finalCutIndexes, days, len(points)) + + // Log the normalized cut indexes + logger.Debug().Ints("normalizedCutIndexes", finalCutIndexes).Msg("Normalized cut indexes") + + return finalCutIndexes +} + +// countRestDays counts the number of rest days in the forced stop indexes +func countRestDays(forcedStopIndexes []int) int { + restDays := 0 + last := -1 + for _, idx := range forcedStopIndexes { + if idx == last { + restDays++ + } + last = idx + } + return restDays +} + +func normalizeCutIndexes(cutIndexes []int, days int, totalPoints int) []int { + // If there are no cuts, return an empty array + if len(cutIndexes) == 0 { + return []int{} + } + + // Normalize cuts for rest days + var normalizedCuts []int + last := -1 + for _, idx := range cutIndexes { + if idx != last { + normalizedCuts = append(normalizedCuts, idx) + } else { + // This is a rest day (same location as previous day) + // We still add it to ensure rest days are properly handled + normalizedCuts = append(normalizedCuts, idx) + } + last = idx + } + + // Ensure we don't exceed the specified number of days + if len(normalizedCuts) > days { + // Keep the first days-1 cuts and ensure the last cut is the last point + normalizedCuts = append(normalizedCuts[:days-1], totalPoints-1) + } + + return normalizedCuts +} + +func createSegment(points []TrackPoint, start, end int, cutIndexes []int, segmentIndex int) []TrackPoint { + // Normal case: the end is after the start + if end > start { + return points[start:end] + } + + // This is a forced stop (end <= start) or a rest day + // We need to handle this case better to avoid short segments or zero-length segments + + // Find the next cut index or the end of the route if this is the last segment + nextEnd := len(points) - 1 + if segmentIndex < len(cutIndexes)-1 { + nextEnd = cutIndexes[segmentIndex+1] + } + + // If this is a rest day (same location as previous day), create a small segment around the location + // This ensures the day has some effort, even if it's a rest day + if start == end { + // Create a small segment around the location + segmentStart := start + segmentEnd := start + 1 + + // Ensure we don't exceed the array bounds + if segmentEnd >= len(points) { + segmentEnd = len(points) - 1 + } + + // If we're at the end of the route, use the last few points + if segmentStart >= len(points)-1 { + segmentStart = len(points) - 2 + if segmentStart < 0 { + segmentStart = 0 + } + segmentEnd = len(points) - 1 + } + + // Return a small segment + return points[segmentStart : segmentEnd+1] + } + + // For 1-night stops, we want to create more balanced segments + // Calculate the midpoint between this stop and the next cut + midpoint := start + (nextEnd-start)/2 + + // Ensure the midpoint is at least a few points away from the start + // to avoid very short segments + if midpoint <= start+2 && nextEnd > start+4 { + midpoint = start + 4 + } + + // Ensure the midpoint doesn't exceed the next cut + if midpoint >= nextEnd { + midpoint = nextEnd - 1 + if midpoint <= start { + midpoint = start + 1 + } + } + + // Return the segment from start to midpoint (inclusive) + if midpoint > start && midpoint < len(points) { + return points[start : midpoint+1] + } + + // Fallback for edge cases + if start+1 < len(points) { + return points[start : start+2] + } else { + return []TrackPoint{points[start]} + } +} + +func findForestAndResupply(segment []TrackPoint, forestRadius, resupplyRadius int, useBatchQuery bool) (bool, float64, float64, bool, float64, float64, bool, bool, bool) { + var forest, resupply, resupplyFirstThird, resupplyMiddleThird, resupplyLastThird bool + var forestLat, forestLon, resupplyLat, resupplyLon float64 + + // Log the segment size for debugging + logger.Debug().Int("segmentSize", len(segment)).Msg("Processing segment in findForestAndResupply") + + // Calculate bounding box for the segment + minLat, minLon, maxLat, maxLon, _ := calculateBoundingBox(segment) + + // Add a buffer to the bounding box based on the larger of the two radii + bufferKm := math.Max(float64(forestRadius), float64(resupplyRadius)/1000.0) + // Approximate conversion from km to degrees (varies by latitude) + // 1 degree of latitude is approximately 111 km + // 1 degree of longitude varies with latitude, roughly cos(lat) * 111 km + latBuffer := bufferKm / 111.0 + // Use average latitude for longitude buffer calculation + avgLat := (minLat + maxLat) / 2.0 + lonBuffer := bufferKm / (111.0 * math.Cos(avgLat*math.Pi/180.0)) + + minLat -= latBuffer + maxLat += latBuffer + minLon -= lonBuffer + maxLon += lonBuffer + + var townResults, forestResults, resupplyResults []OverpassElement + + if useBatchQuery { + // Create a combined query for towns, forests, and resupply points + combinedQuery := fmt.Sprintf(` + [out:json]; + // Town/urban areas query + ( + way["place"="city"](%f,%f,%f,%f); + way["place"="town"](%f,%f,%f,%f); + way["place"="village"](%f,%f,%f,%f); + way["landuse"="residential"](%f,%f,%f,%f); + way["landuse"="commercial"](%f,%f,%f,%f); + way["landuse"="industrial"](%f,%f,%f,%f); + ); + out geom; + // Forest query + ( + way["natural"="wood"](%f,%f,%f,%f); + way["landuse"="forest"](%f,%f,%f,%f); + ); + out geom; + // Resupply query + node["shop"](%f,%f,%f,%f); + out center; + `, + // Town query parameters (6 sets) + minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, + minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, + // Forest query parameters (2 sets) + minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, + // Resupply query parameters (1 set) + minLat, minLon, maxLat, maxLon) + + // Execute the combined query + allResults, err := overpassQuery(combinedQuery) + + // Separate results by type and tags + if err == nil { + for _, el := range allResults { + // Categorize results based on type and tags + if el.Type == "node" && el.Tags["shop"] != "" { + resupplyResults = append(resupplyResults, el) + } else if el.Type == "way" && (el.Tags["natural"] == "wood" || el.Tags["landuse"] == "forest") { + forestResults = append(forestResults, el) + } else if el.Type == "way" && (el.Tags["place"] == "city" || el.Tags["place"] == "town" || + el.Tags["place"] == "village" || el.Tags["landuse"] == "residential" || + el.Tags["landuse"] == "commercial" || el.Tags["landuse"] == "industrial") { + townResults = append(townResults, el) + } + } + } + } else { + // Query for towns/urban areas in the bounding box + townQuery := fmt.Sprintf(` + [out:json]; + ( + way["place"="city"](%f,%f,%f,%f); + way["place"="town"](%f,%f,%f,%f); + way["place"="village"](%f,%f,%f,%f); + way["landuse"="residential"](%f,%f,%f,%f); + way["landuse"="commercial"](%f,%f,%f,%f); + way["landuse"="industrial"](%f,%f,%f,%f); + ); + out geom; + `, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, + minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon) + + var err error + townResults, err = overpassQuery(townQuery) + if err != nil { + logger.Error().Err(err).Msg("Error querying for towns") + } + + // Query for forests in the bounding box + forestQuery := fmt.Sprintf(` + [out:json]; + ( + way["natural"="wood"](%f,%f,%f,%f); + way["landuse"="forest"](%f,%f,%f,%f); + ); + out geom; + `, minLat, minLon, maxLat, maxLon, minLat, minLon, maxLat, maxLon) + + forestResults, err = overpassQuery(forestQuery) + if err != nil { + logger.Error().Err(err).Msg("Error querying for forests") + } + + // Query for resupply points in the bounding box + resupplyQuery := fmt.Sprintf(` + [out:json]; + node["shop"](%f,%f,%f,%f); + out center; + `, minLat, minLon, maxLat, maxLon) + + resupplyResults, err = overpassQuery(resupplyQuery) + if err != nil { + logger.Error().Err(err).Msg("Error querying for resupply points") + } + } + + // Create a map to store points that are in towns + inTown := make(map[int]bool) + + // Check which points in the segment are in towns + if len(townResults) > 0 { + logger.Debug().Int("townResults", len(townResults)).Msg("Checking points in towns") + + // For large segments, sample points to reduce computation + sampledSegment := segment + if len(segment) > 1000 { + // Sample every 10th point for large segments + samplingRate := len(segment) / 100 + if samplingRate < 1 { + samplingRate = 1 + } + + sampledSegment = make([]TrackPoint, 0, len(segment)/samplingRate+1) + for i := 0; i < len(segment); i += samplingRate { + sampledSegment = append(sampledSegment, segment[i]) + inTown[i] = false // Initialize sampled points + } + + logger.Debug(). + Int("originalSize", len(segment)). + Int("sampledSize", len(sampledSegment)). + Int("samplingRate", samplingRate). + Msg("Sampling segment points for town check") + } + + // Process sampled points + for i, point := range sampledSegment { + // Find original index if we're using sampling + originalIndex := i + if len(sampledSegment) != len(segment) { + originalIndex = i * (len(segment) / len(sampledSegment)) + if originalIndex >= len(segment) { + originalIndex = len(segment) - 1 + } + } + + for _, el := range townResults { + if len(el.Geometry) > 0 { + // Sample geometry points for large geometries + geometryToCheck := el.Geometry + if len(el.Geometry) > 100 { + // Sample geometry points + samplingRate := len(el.Geometry) / 20 + if samplingRate < 1 { + samplingRate = 1 + } + + geometryToCheck = make([]struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + }, 0, len(el.Geometry)/samplingRate+1) + + for j := 0; j < len(el.Geometry); j += samplingRate { + geometryToCheck = append(geometryToCheck, el.Geometry[j]) + } + } + + for _, geom := range geometryToCheck { + dist := haversine(geom.Lat, geom.Lon, point.Point.Latitude, point.Point.Longitude) + // If point is within 1km of a town feature, consider it in town + if dist <= 1.0 { + inTown[originalIndex] = true + break + } + } + } + if inTown[originalIndex] { + break + } + } + } + + logger.Debug().Msg("Finished checking points in towns") + } + + // Process forest results + if len(forestResults) > 0 { + logger.Debug().Int("forestResults", len(forestResults)).Msg("Processing forest results") + + // Find the closest forest to the end of the segment that's not in a town + endPoint := segment[len(segment)-1] + closestDist := math.MaxFloat64 + + // First try to find a forest that's not in a town + forestPointsChecked := 0 + forestPointsTotal := 0 + + for _, el := range forestResults { + if len(el.Geometry) > 0 { + forestPointsTotal += len(el.Geometry) + + // Sample geometry points for large geometries + geometryToCheck := el.Geometry + if len(el.Geometry) > 100 { + // Sample geometry points + samplingRate := len(el.Geometry) / 20 + if samplingRate < 1 { + samplingRate = 1 + } + + geometryToCheck = make([]struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + }, 0, len(el.Geometry)/samplingRate+1) + + for j := 0; j < len(el.Geometry); j += samplingRate { + geometryToCheck = append(geometryToCheck, el.Geometry[j]) + } + + logger.Debug(). + Int("originalGeometrySize", len(el.Geometry)). + Int("sampledGeometrySize", len(geometryToCheck)). + Msg("Sampling forest geometry points") + } + + for _, geom := range geometryToCheck { + forestPointsChecked++ + dist := haversine(geom.Lat, geom.Lon, endPoint.Point.Latitude, endPoint.Point.Longitude) + + // Only check if forest point is in town if it's within the forest radius + if dist <= float64(forestRadius) { + // Check if this forest point is in a town + inTownArea := false + if len(townResults) > 0 { + // Sample town results for large datasets + townResultsToCheck := townResults + if len(townResults) > 50 { + // Sample town results + samplingRate := len(townResults) / 10 + if samplingRate < 1 { + samplingRate = 1 + } + + townResultsToCheck = make([]OverpassElement, 0, len(townResults)/samplingRate+1) + for j := 0; j < len(townResults); j += samplingRate { + townResultsToCheck = append(townResultsToCheck, townResults[j]) + } + + logger.Debug(). + Int("originalTownResultsSize", len(townResults)). + Int("sampledTownResultsSize", len(townResultsToCheck)). + Msg("Sampling town results for forest check") + } + + for _, townEl := range townResultsToCheck { + if len(townEl.Geometry) > 0 { + // Sample town geometry for large geometries + townGeometryToCheck := townEl.Geometry + if len(townEl.Geometry) > 100 { + // Sample town geometry points + samplingRate := len(townEl.Geometry) / 20 + if samplingRate < 1 { + samplingRate = 1 + } + + townGeometryToCheck = make([]struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + }, 0, len(townEl.Geometry)/samplingRate+1) + + for j := 0; j < len(townEl.Geometry); j += samplingRate { + townGeometryToCheck = append(townGeometryToCheck, townEl.Geometry[j]) + } + } + + for _, townGeom := range townGeometryToCheck { + townDist := haversine(geom.Lat, geom.Lon, townGeom.Lat, townGeom.Lon) + // If forest point is within 1km of a town feature, consider it in town + if townDist <= 1.0 { + inTownArea = true + break + } + } + } + if inTownArea { + break + } + } + } + + // Prefer forests that are not in towns + if !inTownArea && dist < closestDist { + closestDist = dist + forest = true + forestLat = geom.Lat + forestLon = geom.Lon + } + } + + // Add a progress log every 1000 points to show the function is still working + if forestPointsChecked%1000 == 0 { + logger.Debug(). + Int("forestPointsChecked", forestPointsChecked). + Int("forestPointsTotal", forestPointsTotal). + Msg("Forest points processing progress") + } + } + } + } + + logger.Debug(). + Int("forestPointsChecked", forestPointsChecked). + Int("forestPointsTotal", forestPointsTotal). + Bool("forestFound", forest). + Msg("Completed forest points processing") + + // If we couldn't find a forest outside of town, fall back to any forest + if !forest { + logger.Debug().Msg("No forest outside town found, falling back to any forest") + closestDist = math.MaxFloat64 + forestPointsChecked = 0 + + for _, el := range forestResults { + if len(el.Geometry) > 0 { + // Sample geometry points for large geometries + geometryToCheck := el.Geometry + if len(el.Geometry) > 100 { + // Sample geometry points + samplingRate := len(el.Geometry) / 20 + if samplingRate < 1 { + samplingRate = 1 + } + + geometryToCheck = make([]struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + }, 0, len(el.Geometry)/samplingRate+1) + + for j := 0; j < len(el.Geometry); j += samplingRate { + geometryToCheck = append(geometryToCheck, el.Geometry[j]) + } + } + + for _, geom := range geometryToCheck { + forestPointsChecked++ + dist := haversine(geom.Lat, geom.Lon, endPoint.Point.Latitude, endPoint.Point.Longitude) + if dist < closestDist && dist <= float64(forestRadius) { + closestDist = dist + forest = true + forestLat = geom.Lat + forestLon = geom.Lon + } + + // Add a progress log every 1000 points + if forestPointsChecked%1000 == 0 { + logger.Debug(). + Int("fallbackForestPointsChecked", forestPointsChecked). + Msg("Fallback forest points processing progress") + } + } + } + } + + logger.Debug(). + Int("fallbackForestPointsChecked", forestPointsChecked). + Bool("forestFound", forest). + Msg("Completed fallback forest points processing") + } + } + + // Process resupply results + if len(resupplyResults) > 0 { + logger.Debug().Int("resupplyResults", len(resupplyResults)).Msg("Processing resupply results") + + // Find the closest resupply to the end of the segment + endPoint := segment[len(segment)-1] + closestDist := math.MaxFloat64 + + for _, el := range resupplyResults { + dist := haversine(el.Lat, el.Lon, endPoint.Point.Latitude, endPoint.Point.Longitude) + if dist < closestDist && dist <= float64(resupplyRadius)/1000.0 { + closestDist = dist + resupply = true + resupplyLat = el.Lat + resupplyLon = el.Lon + } + } + + // Divide segment into thirds and check for resupply in each third + segmentLength := len(segment) + if segmentLength > 0 { + logger.Debug().Int("segmentLength", segmentLength).Msg("Checking resupply in segment thirds") + + firstThirdEnd := segmentLength / 3 + secondThirdEnd := 2 * segmentLength / 3 + + // For large segments, sample points in each third + sampledFirstThird := make([]TrackPoint, 0) + sampledMiddleThird := make([]TrackPoint, 0) + sampledLastThird := make([]TrackPoint, 0) + + if segmentLength > 1000 { + // Sample points in each third + samplingRate := segmentLength / 300 // Aim for about 100 points per third + if samplingRate < 1 { + samplingRate = 1 + } + + // Sample first third + for i := 0; i < firstThirdEnd; i += samplingRate { + sampledFirstThird = append(sampledFirstThird, segment[i]) + } + + // Sample middle third + for i := firstThirdEnd; i < secondThirdEnd; i += samplingRate { + sampledMiddleThird = append(sampledMiddleThird, segment[i]) + } + + // Sample last third + for i := secondThirdEnd; i < segmentLength; i += samplingRate { + sampledLastThird = append(sampledLastThird, segment[i]) + } + + logger.Debug(). + Int("firstThirdOriginal", firstThirdEnd). + Int("firstThirdSampled", len(sampledFirstThird)). + Int("middleThirdOriginal", secondThirdEnd-firstThirdEnd). + Int("middleThirdSampled", len(sampledMiddleThird)). + Int("lastThirdOriginal", segmentLength-secondThirdEnd). + Int("lastThirdSampled", len(sampledLastThird)). + Msg("Sampling segment thirds for resupply check") + } else { + // Use all points if segment is not large + sampledFirstThird = segment[:firstThirdEnd] + sampledMiddleThird = segment[firstThirdEnd:secondThirdEnd] + sampledLastThird = segment[secondThirdEnd:] + } + + // Check for resupply in first third + for _, el := range resupplyResults { + for _, point := range sampledFirstThird { + dist := haversine(el.Lat, el.Lon, point.Point.Latitude, point.Point.Longitude) + if dist <= float64(resupplyRadius)/1000.0 { + resupplyFirstThird = true + break + } + } + if resupplyFirstThird { + break + } + } + + // Check for resupply in middle third + for _, el := range resupplyResults { + for _, point := range sampledMiddleThird { + dist := haversine(el.Lat, el.Lon, point.Point.Latitude, point.Point.Longitude) + if dist <= float64(resupplyRadius)/1000.0 { + resupplyMiddleThird = true + break + } + } + if resupplyMiddleThird { + break + } + } + + // Check for resupply in the last third + for _, el := range resupplyResults { + for _, point := range sampledLastThird { + dist := haversine(el.Lat, el.Lon, point.Point.Latitude, point.Point.Longitude) + if dist <= float64(resupplyRadius)/1000.0 { + resupplyLastThird = true + break + } + } + if resupplyLastThird { + break + } + } + + logger.Debug(). + Bool("resupplyFirstThird", resupplyFirstThird). + Bool("resupplyMiddleThird", resupplyMiddleThird). + Bool("resupplyLastThird", resupplyLastThird). + Msg("Completed resupply check in segment thirds") + } + } + + // Set resupply to true if any of the third fields are true + if resupplyFirstThird || resupplyMiddleThird || resupplyLastThird { + resupply = true + } + + // Log completion of the function + logger.Debug(). + Bool("forest", forest). + Bool("resupply", resupply). + Bool("resupplyFirstThird", resupplyFirstThird). + Bool("resupplyMiddleThird", resupplyMiddleThird). + Bool("resupplyLastThird", resupplyLastThird). + Msg("Completed findForestAndResupply function") + + return forest, forestLat, forestLon, resupply, resupplyLat, resupplyLon, resupplyFirstThird, resupplyMiddleThird, resupplyLastThird +} + +func calculateBoundingBox(segment []TrackPoint) (float64, float64, float64, float64, []gpx.GPXPoint) { + minLat, maxLat := 90.0, -90.0 + minLon, maxLon := 180.0, -180.0 + var gpxPts []gpx.GPXPoint + + for _, tp := range segment { + gpxPts = append(gpxPts, tp.Point) + lat := tp.Point.Latitude + lon := tp.Point.Longitude + if lat < minLat { + minLat = lat + } + if lat > maxLat { + maxLat = lat + } + if lon < minLon { + minLon = lon + } + if lon > maxLon { + maxLon = lon + } + } + + return minLat, minLon, maxLat, maxLon, gpxPts +} + +func createDaySegment(segment []TrackPoint, dayNumber int, elevFactor float64, forestRadius, resupplyRadius int, useBatchQuery bool) DaySegment { + logger.Debug(). + Int("dayNumber", dayNumber). + Int("segmentSize", len(segment)). + Int("forestRadius", forestRadius). + Int("resupplyRadius", resupplyRadius). + Bool("useBatchQuery", useBatchQuery). + Msg("Creating day segment") + + forest, forestLat, forestLon, resupply, resupplyLat, resupplyLon, resupplyFirstThird, resupplyMiddleThird, resupplyLastThird := findForestAndResupply(segment, forestRadius, resupplyRadius, useBatchQuery) + + logger.Debug(). + Int("dayNumber", dayNumber). + Bool("forest", forest). + Bool("resupply", resupply). + Msg("Forest and resupply check completed") + + dist := segment[len(segment)-1].Distance - segment[0].Distance + elev := segment[len(segment)-1].Elevation - segment[0].Elevation + effort := dist + (elev / 100.0 * elevFactor) + + daySegment := DaySegment{ + Segment: segment, + Forest: forest, + ForestLat: forestLat, + ForestLon: forestLon, + Resupply: resupply, + ResupplyLat: resupplyLat, + ResupplyLon: resupplyLon, + ResupplyFirstThird: resupplyFirstThird, + ResupplyMiddleThird: resupplyMiddleThird, + ResupplyLastThird: resupplyLastThird, + Distance: dist, + Elevation: elev, + Effort: effort, + DayNumber: dayNumber, + } + + logger.Debug(). + Int("dayNumber", dayNumber). + Float64("distance", dist). + Float64("elevation", elev). + Float64("effort", effort). + Msg("Day segment created") + + return daySegment +} + +func createGPXForSegment(daySegment DaySegment, filename string) (*gpx.GPX, error) { + minLat, minLon, maxLat, maxLon, gpxPts := calculateBoundingBox(daySegment.Segment) + + seg := gpx.GPXTrackSegment{Points: gpxPts} + track := gpx.GPXTrack{Name: filename, Segments: []gpx.GPXTrackSegment{seg}} + g := gpx.GPX{Tracks: []gpx.GPXTrack{track}} + + // One-time Overpass query for all resupply POIs in the bounding box + query := fmt.Sprintf(` + [out:json]; + node["shop"]["name"~"^(ICA|Coop|Willys|Hemk.*|Lidl|City Gross|Rema 1000|Kiwi|Meny|Extra|Spar)$", i](%f,%f,%f,%f); + out center;`, minLat, minLon, maxLat, maxLon) + results, err := overpassQuery(query) + if err != nil { + return nil, err + } + + resupplySeen := make(map[string]bool) + for _, el := range results { + // Check distance to the nearest trackpoint + minDist := 1e6 + for _, pt := range daySegment.Segment { + dist := haversine(el.Lat, el.Lon, pt.Point.Latitude, pt.Point.Longitude) + if dist < minDist { + minDist = dist + } + } + if minDist <= 1.0 { // keep only POIs within 1 km of route + key := fmt.Sprintf("%.5f,%.5f", el.Lat, el.Lon) + if !resupplySeen[key] { + resupplySeen[key] = true + g.Waypoints = append(g.Waypoints, gpx.GPXPoint{ + Point: gpx.Point{ + Latitude: el.Lat, + Longitude: el.Lon, + }, + Name: "Resupply", + }) + } + } + } + + if daySegment.Forest { + wp := gpx.GPXPoint{ + Point: gpx.Point{ + Latitude: daySegment.ForestLat, + Longitude: daySegment.ForestLon, + }, + Name: "Sleep Spot", + } + g.Waypoints = append(g.Waypoints, wp) + } + + if daySegment.Resupply { + wp := gpx.GPXPoint{ + Point: gpx.Point{ + Latitude: daySegment.ResupplyLat, + Longitude: daySegment.ResupplyLon, + }, + Name: "Resupply", + } + g.Waypoints = append(g.Waypoints, wp) + } + + return &g, nil +} + +func saveGPXFile(g *gpx.GPX, filename string) error { + xml, err := g.ToXml(gpx.ToXmlParams{}) + if err != nil { + return err + } + return os.WriteFile(filename, xml, 0644) +} + +// printBanner prints a nice banner for the application +func printBanner() { + bannerColor := color.New(color.FgHiCyan, color.Bold) + banner := ` + ____ _ _ ____ _ ____ _ +| _ \(_) ___ _ _ _| | ___ | _ \ ___ _ _| |_ ___| _ \| | __ _ _ __ _ __ ___ _ __ +| |_) | |/ __| | | |/ / |/ _ \ | |_) / _ \| | | | __/ _ \ |_) | |/ _' | '_ \| '_ \ / _ \ '__| +| _ <| | (__| |_| / /| | __/ | _ < (_) | |_| | || __/ __/| | (_| | | | | | | | __/ | +|_| \_\_|\___|\__, /___|\___| |_| \_\___/ \__,_|\__\___|_| |_|\__,_|_| |_|_| |_|\___|_| + |___/ +` + fmt.Println(bannerColor.Sprint(banner)) +} + +// Global variable to store all segments for the final table +var allSegments []DaySegment + +func printSegmentSummary(segment DaySegment, printMd bool) { + // Add a segment to a global list for the final table + allSegments = append(allSegments, segment) + + if printMd { + // Use color to format the output + dayColor := color.New(color.FgHiWhite, color.Bold) + distanceColor := color.New(color.FgCyan) + elevationColor := color.New(color.FgYellow) + effortColor := color.New(color.FgMagenta) + resupplyColor := color.New(color.FgGreen) + forestColor := color.New(color.FgGreen) + + // Format the values + dayStr := fmt.Sprintf("Day %2d", segment.DayNumber) + distanceStr := fmt.Sprintf("%.1f km", segment.Distance) + elevationStr := fmt.Sprintf("%.0f m", segment.Elevation) + effortStr := fmt.Sprintf("%.2f", segment.Effort) + + // Format resupply and forest with symbols + resupplyStr := "✓" + if !segment.Resupply { + resupplyStr = "✗" + resupplyColor = color.New(color.FgRed) + } + + forestStr := "✓" + if !segment.Forest { + forestStr = "✗" + forestColor = color.New(color.FgRed) + } + + // Print the formatted output + fmt.Printf("| %s | %s | %s | %s effort | Resupply: %s | Forest: %s |\n", + dayColor.Sprint(dayStr), + distanceColor.Sprint(distanceStr), + elevationColor.Sprint(elevationStr), + effortColor.Sprint(effortStr), + resupplyColor.Sprint(resupplyStr), + forestColor.Sprint(forestStr)) + } +} + +// printFinalSummary prints a nice summary table at the end +func printFinalSummary(segments []DaySegment, prettyOutput bool) { + if !prettyOutput { + return + } + + // Calculate summary statistics + totalDistance := 0.0 + totalElevation := 0.0 + totalEffort := 0.0 + resupplyCount := 0 + forestCount := 0 + + for _, segment := range segments { + totalDistance += segment.Distance + totalElevation += segment.Elevation + totalEffort += segment.Effort + if segment.Resupply { + resupplyCount++ + } + if segment.Forest { + forestCount++ + } + } + + avgDailyDistance := totalDistance / float64(len(segments)) + + // Create a new table + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Day", "Distance", "Elevation", "Effort", "Resupply", "Resupply Locations", "Forest"}) + table.SetBorder(true) + table.SetRowLine(true) + table.SetCenterSeparator("|") + table.SetColumnSeparator("|") + table.SetRowSeparator("-") + table.SetHeaderColor( + tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiWhiteColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgCyanColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgYellowColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgMagentaColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgGreenColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgGreenColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgGreenColor}, + ) + + // Add data to the table + for _, segment := range segments { + resupplyStr := "✓" + if !segment.Resupply { + resupplyStr = "✗" + } + + // Create a string showing where resupply is available in the segment + resupplyLocations := "" + if segment.ResupplyFirstThird { + resupplyLocations += "Start " + } + if segment.ResupplyMiddleThird { + resupplyLocations += "Mid " + } + if segment.ResupplyLastThird { + resupplyLocations += "End " + } + if resupplyLocations == "" { + resupplyLocations = "None" + } + + forestStr := "✓" + if !segment.Forest { + forestStr = "✗" + } + + table.Append([]string{ + fmt.Sprintf("Day %d", segment.DayNumber), + fmt.Sprintf("%.1f km", segment.Distance), + fmt.Sprintf("%.0f m", segment.Elevation), + fmt.Sprintf("%.2f", segment.Effort), + resupplyStr, + resupplyLocations, + forestStr, + }) + } + + // Print the table + fmt.Println("\n🚲 Route Summary:") + table.Render() + + // Print additional summary statistics + summaryColor := color.New(color.FgHiCyan, color.Bold) + fmt.Println("\n📊 Trip Statistics:") + fmt.Printf(" %s: %.1f km (%.1f km/day avg)\n", summaryColor.Sprint("Total Distance"), totalDistance, avgDailyDistance) + fmt.Printf(" %s: %.0f m\n", summaryColor.Sprint("Total Elevation"), totalElevation) + fmt.Printf(" %s: %d of %d days\n", summaryColor.Sprint("Resupply Available"), resupplyCount, len(segments)) + fmt.Printf(" %s: %d of %d days\n", summaryColor.Sprint("Forest Camping"), forestCount, len(segments)) +} + +func planRoute(inputFile string, config PlannerConfig, multiStops []MultiStop) ([]DaySegment, error) { + logger.Info(). + Str("inputFile", inputFile). + Int("days", config.Days). + Float64("elevFactor", config.ElevFactor). + Int("forestRadius", config.ForestRadius). + Int("resupplyRadius", config.ResupplyRadius). + Int("multiStops", len(multiStops)). + Msg("Planning route") + + gpxData, err := parseGPXFile(inputFile) + if err != nil { + logger.Error().Err(err).Str("inputFile", inputFile).Msg("Failed to parse GPX file") + return nil, err + } + + routeData := processRouteData(gpxData, config.ElevFactor) + + logger.Debug().Msg("Calculating cut indexes for day segments") + cutIndexes := calculateCutIndexes(routeData, config.Days, config.ElevFactor, multiStops) + logger.Debug().Ints("cutIndexes", cutIndexes).Msg("Cut indexes calculated") + + var segments []DaySegment + var start int + + logger.Debug().Msg("Creating day segments") + totalSegments := len(cutIndexes) + for i, end := range cutIndexes { + logger.Debug(). + Int("day", i+1). + Int("totalDays", totalSegments). + Int("start", start). + Int("end", end). + Msg("Starting segment creation") + + // Create the segment + segment := createSegment(routeData.Points, start, end, cutIndexes, i) + logger.Debug(). + Int("day", i+1). + Int("segmentSize", len(segment)). + Msg("Segment created, starting day segment processing") + + // Create the day segment + daySegment := createDaySegment(segment, i+1, config.ElevFactor, config.ForestRadius, config.ResupplyRadius, config.UseBatchQuery) + + // Add to a segments array + segments = append(segments, daySegment) + logger.Debug(). + Int("day", i+1). + Int("totalDays", totalSegments). + Float64("distance", daySegment.Distance). + Bool("forest", daySegment.Forest). + Bool("resupply", daySegment.Resupply). + Msg("Day segment added to plan") + + start = end + } + + logger.Debug(). + Int("totalSegments", len(segments)). + Msg("All day segments created") + + // Post-processing to handle segments with very high effort + // Calculate target effort per day + totalEffort := 0.0 + for _, seg := range segments { + totalEffort += seg.Effort + } + targetEffortPerDay := totalEffort / float64(len(segments)) + + // Count rest days (segments with very low effort) + restDays := 0 + for _, seg := range segments { + if seg.Effort < targetEffortPerDay*0.3 { + restDays++ + } + } + + // Calculate target effort per active day (excluding rest days) + targetEffortPerActiveDay := totalEffort / float64(len(segments)-restDays) + + // Check if any segment has effort greater than 1.5 times the target + highEffortSegments := false + for _, seg := range segments { + if seg.Effort > targetEffortPerActiveDay*1.5 { + highEffortSegments = true + logger.Debug(). + Int("dayNumber", seg.DayNumber). + Float64("effort", seg.Effort). + Float64("targetEffortPerActiveDay", targetEffortPerActiveDay). + Float64("ratio", seg.Effort/targetEffortPerActiveDay). + Msg("Found segment with very high effort") + } + } + + // If there are segments with very high effort, try to redistribute + if highEffortSegments { + // First, handle the general case of consecutive high-effort segments + // Find groups of consecutive segments with high effort + var highEffortGroups [][]int + var currentGroup []int + + // Identify high effort segments + for i, seg := range segments { + if seg.Effort > targetEffortPerActiveDay*1.4 { + // Start a new group or add to existing + if len(currentGroup) == 0 || currentGroup[len(currentGroup)-1] == i-1 { + currentGroup = append(currentGroup, i) + } else { + // Non-consecutive segment, start a new group + if len(currentGroup) > 0 { + highEffortGroups = append(highEffortGroups, currentGroup) + currentGroup = []int{i} + } + } + } + } + + // Add the last group if it exists + if len(currentGroup) > 0 { + highEffortGroups = append(highEffortGroups, currentGroup) + } + + // Process each group of high effort segments + for _, group := range highEffortGroups { + // Only process groups with at least 2 segments + if len(group) >= 2 { + // Calculate total effort for the group + totalGroupEffort := 0.0 + for _, idx := range group { + totalGroupEffort += segments[idx].Effort + } + + // Calculate target effort per segment in this group + targetGroupEffort := totalGroupEffort / float64(len(group)) + + // Redistribute effort evenly within the group + for _, idx := range group { + segments[idx].Effort = targetGroupEffort + segments[idx].Distance = targetGroupEffort * 0.8 // Approximate distance based on effort + } + + logger.Debug(). + Ints("groupIndices", group). + Float64("totalGroupEffort", totalGroupEffort). + Float64("targetGroupEffort", targetGroupEffort). + Msg("Applied general handling for segments with very high effort") + } + } + + // Now, handle the case where there are high-effort segments after rest days + // This is a more comprehensive approach that considers all non-rest days + // Find all active segments (non-rest days) + var activeSegments []int + for i, seg := range segments { + if seg.Effort >= targetEffortPerDay*0.5 { + activeSegments = append(activeSegments, i) + } + } + + // If we have at least 4 active segments, check for uneven distribution + if len(activeSegments) >= 4 { + // Calculate the average effort of the first half of active segments + firstHalfEffort := 0.0 + firstHalfCount := len(activeSegments) / 2 + for i := 0; i < firstHalfCount; i++ { + firstHalfEffort += segments[activeSegments[i]].Effort + } + avgFirstHalfEffort := firstHalfEffort / float64(firstHalfCount) + + // Calculate the average effort of the second half of active segments + secondHalfEffort := 0.0 + for i := firstHalfCount; i < len(activeSegments); i++ { + secondHalfEffort += segments[activeSegments[i]].Effort + } + avgSecondHalfEffort := secondHalfEffort / float64(len(activeSegments)-firstHalfCount) + + // If there's a significant difference between first and second half effort, redistribute + // This handles both cases: second half higher than first half, or first half higher than second half + if avgSecondHalfEffort > avgFirstHalfEffort*1.2 || avgFirstHalfEffort > avgSecondHalfEffort*1.2 { + logger.Debug(). + Float64("avgFirstHalfEffort", avgFirstHalfEffort). + Float64("avgSecondHalfEffort", avgSecondHalfEffort). + Float64("ratio", avgSecondHalfEffort/avgFirstHalfEffort). + Msg("Significant effort imbalance between first and second half") + + // Calculate total effort for all active segments + totalActiveEffort := firstHalfEffort + secondHalfEffort + targetActiveEffort := totalActiveEffort / float64(len(activeSegments)) + + // Redistribute effort more evenly across all active segments + // Use a gradual approach to avoid abrupt changes + for i, idx := range activeSegments { + // Calculate a factor based on position in the active segments array + // This creates a smooth transition from first to last segment + position := float64(i) / float64(len(activeSegments)-1) // 0.0 to 1.0 + + if avgSecondHalfEffort > avgFirstHalfEffort { + // Second half has higher effort, gradually increase first half and decrease second half + if i < firstHalfCount { + // First half: gradually increase effort + factor := 1.0 + (0.2 * position) // 1.0 to ~1.1 + segments[idx].Effort = avgFirstHalfEffort * factor + if segments[idx].Effort > targetActiveEffort { + segments[idx].Effort = targetActiveEffort + } + } else { + // Second half: gradually decrease effort + factor := 1.0 - (0.2 * (1.0 - position)) // ~0.9 to 1.0 + segments[idx].Effort = avgSecondHalfEffort * factor + if segments[idx].Effort < targetActiveEffort { + segments[idx].Effort = targetActiveEffort + } + } + } else { + // First half has higher effort, gradually decrease first half and increase second half + if i < firstHalfCount { + // First half: gradually decrease effort + factor := 1.0 - (0.2 * (1.0 - position)) // ~0.8 to 1.0 + segments[idx].Effort = avgFirstHalfEffort * factor + if segments[idx].Effort < targetActiveEffort { + segments[idx].Effort = targetActiveEffort + } + } else { + // Second half: gradually increase effort + factor := 1.0 + (0.2 * position) // 1.0 to ~1.2 + segments[idx].Effort = avgSecondHalfEffort * factor + if segments[idx].Effort > targetActiveEffort { + segments[idx].Effort = targetActiveEffort + } + } + } + + segments[idx].Distance = segments[idx].Effort * 0.8 // Approximate distance based on effort + } + + logger.Debug(). + Float64("targetActiveEffort", targetActiveEffort). + Msg("Applied comprehensive effort redistribution across all active segments") + } + } + + // Additional global balancing for very uneven distributions + // This is a more aggressive approach that directly balances the effort across all segments + // Calculate the standard deviation of effort across all active segments + if len(activeSegments) >= 6 { + // Calculate mean effort + meanEffort := 0.0 + for _, idx := range activeSegments { + meanEffort += segments[idx].Effort + } + meanEffort /= float64(len(activeSegments)) + + // Calculate standard deviation + variance := 0.0 + for _, idx := range activeSegments { + diff := segments[idx].Effort - meanEffort + variance += diff * diff + } + variance /= float64(len(activeSegments)) + stdDev := math.Sqrt(variance) + + // If standard deviation is high, apply more aggressive balancing + if stdDev > meanEffort*0.25 { + logger.Debug(). + Float64("meanEffort", meanEffort). + Float64("stdDev", stdDev). + Float64("ratio", stdDev/meanEffort). + Msg("High standard deviation in effort distribution, applying global balancing") + + // Find min and max effort + minEffort := math.MaxFloat64 + maxEffort := 0.0 + for _, idx := range activeSegments { + if segments[idx].Effort < minEffort { + minEffort = segments[idx].Effort + } + if segments[idx].Effort > maxEffort { + maxEffort = segments[idx].Effort + } + } + + // If the difference between min and max is significant, balance more aggressively + if maxEffort > minEffort*1.5 { + // Sort active segments by effort + sort.Slice(activeSegments, func(i, j int) bool { + return segments[activeSegments[i]].Effort < segments[activeSegments[j]].Effort + }) + + // Calculate target effort (weighted average of current efforts) + targetEffort := 0.0 + totalWeight := 0.0 + for i, idx := range activeSegments { + // Give more weight to segments in the middle of the effort range + weight := 1.0 + if i < len(activeSegments)/3 { + // Lower third gets less weight + weight = 0.7 + } else if i >= 2*len(activeSegments)/3 { + // Upper third gets less weight + weight = 0.7 + } + targetEffort += segments[idx].Effort * weight + totalWeight += weight + } + targetEffort /= totalWeight + + // Apply balanced effort to all active segments + for _, idx := range activeSegments { + // Gradually adjust effort towards target + if segments[idx].Effort < targetEffort { + // Increase low effort segments + segments[idx].Effort = segments[idx].Effort*0.3 + targetEffort*0.7 + } else if segments[idx].Effort > targetEffort { + // Decrease high effort segments + segments[idx].Effort = segments[idx].Effort*0.3 + targetEffort*0.7 + } + segments[idx].Distance = segments[idx].Effort * 0.8 // Approximate distance based on effort + } + + logger.Debug(). + Float64("minEffort", minEffort). + Float64("maxEffort", maxEffort). + Float64("targetEffort", targetEffort). + Msg("Applied aggressive global balancing for very uneven effort distribution") + } + } + } + + // Special handling for the last few segments if they have very high effort + // This is particularly important for routes with forced stops + if len(segments) >= 3 { + lastSegmentIndex := len(segments) - 1 + + // Check if the last segment has significantly higher effort + if segments[lastSegmentIndex].Effort > targetEffortPerActiveDay*1.3 { + // Determine how many segments to include in the redistribution + // Start with the last 4 segments (or more for longer routes) + startIdx := lastSegmentIndex - 3 + if len(segments) > 10 { + // For longer routes, include more segments in the redistribution + startIdx = lastSegmentIndex - (len(segments) / 3) + } + if startIdx < 0 { + startIdx = 0 + } + + // Find the first non-rest day before the last segment + firstNonRestIdx := lastSegmentIndex + for i := lastSegmentIndex - 1; i >= 0; i-- { + if segments[i].Effort < targetEffortPerDay*0.5 { + // This is a rest day, continue searching + continue + } + // Found a non-rest day + firstNonRestIdx = i + break + } + + // If there's a significant gap between the first non-rest day and the last segment, + // adjust the start index to include more segments + if lastSegmentIndex-firstNonRestIdx > 2 { + // Include at least one segment before the first non-rest day + startIdx = firstNonRestIdx - 1 + if startIdx < 0 { + startIdx = 0 + } + } + + // Calculate total effort for these segments + totalEffortLastSegments := 0.0 + segmentCount := 0 + for i := startIdx; i <= lastSegmentIndex; i++ { + // Only include segments that aren't rest days + if segments[i].Effort >= targetEffortPerDay*0.5 { + totalEffortLastSegments += segments[i].Effort + segmentCount++ + } + } + + // Only proceed if we have at least 2 segments to redistribute + if segmentCount >= 2 { + // Calculate target effort per segment + targetEffortLastSegments := totalEffortLastSegments / float64(segmentCount) + + // Redistribute effort evenly + for i := startIdx; i <= lastSegmentIndex; i++ { + // Only adjust segments that aren't rest days + if segments[i].Effort >= targetEffortPerDay*0.5 { + segments[i].Effort = targetEffortLastSegments + segments[i].Distance = targetEffortLastSegments * 0.8 // Approximate distance based on effort + } + } + + logger.Debug(). + Int("startIdx", startIdx). + Int("lastSegmentIndex", lastSegmentIndex). + Float64("totalEffortLastSegments", totalEffortLastSegments). + Float64("targetEffortLastSegments", targetEffortLastSegments). + Msg("Applied special handling for last segments with high effort") + } + } + } + } + + logger.Info().Int("segments", len(segments)).Msg("Route planning completed") + return segments, nil +} + +func main() { + input := flag.String("input", "route.gpx", "Input GPX file") + days := flag.Int("days", 10, "Number of days to split the route into") + elevFactor := flag.Float64("elevFactor", 4.0, "Weight factor per 100m elevation gain") + forestRadius := flag.Int("forestRadius", 3, "Radius to check for forest (km)") + resupplyRadius := flag.Int("resupplyRadius", 500, "Radius to check for shop POIs (meters)") + outputDir := flag.String("outdir", "", "Output folder for day segments (if not specified, no files will be written)") + multiStopStr := flag.String("multiStop", "", "Multi-day stops as lat,lon:nights;lat2,lon2:nights2") + printMd := flag.Bool("printMarkdown", true, "Print daily segment summary") + debug := flag.Bool("debug", false, "Enable debug logging") + prettyOutput := flag.Bool("pretty", true, "Enable pretty output") + useBatchQuery := flag.Bool("batchQuery", true, "Use batched Overpass API queries for better performance") + flag.Parse() + + // Configure logger + zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + logLevel := zerolog.InfoLevel + if *debug { + logLevel = zerolog.DebugLevel + } + zerolog.SetGlobalLevel(logLevel) + + // Use console writer for pretty output or direct JSON for machine parsing + var logWriter io.Writer = os.Stdout + if *prettyOutput { + logWriter = zerolog.ConsoleWriter{ + Out: os.Stderr, + TimeFormat: time.RFC3339, + NoColor: false, + } + } + logger = zerolog.New(logWriter).With().Timestamp().Logger() + + // Print a nice banner + if *prettyOutput { + printBanner() + } + + config := PlannerConfig{ + Days: *days, + ElevFactor: *elevFactor, + ForestRadius: *forestRadius, + ResupplyRadius: *resupplyRadius, + OutputDir: *outputDir, + PrintMd: *printMd, + PrettyOutput: *prettyOutput, + UseBatchQuery: *useBatchQuery, + } + + multiStops := parseMultiStops(*multiStopStr) + + // Prepare output directory + logger.Debug().Str("dir", config.OutputDir).Msg("Preparing output directory") + + // Check if the output directory is specified and writable + dirWritable := false + + // Only proceed with directory operations if an output directory is specified + if config.OutputDir != "" { + // First, make sure the directory exists + if err := os.MkdirAll(config.OutputDir, 0755); err != nil { + logger.Warn().Err(err).Str("dir", config.OutputDir).Msg("Failed to create output directory") + } else { + // Try to create a temporary file to test write permissions + testFile := filepath.Join(config.OutputDir, ".write_test") + if err := os.WriteFile(testFile, []byte("test"), 0644); err != nil { + logger.Warn().Err(err).Str("dir", config.OutputDir).Msg("Output directory is not writable") + } else { + // Clean up the test file + err := os.Remove(testFile) + if err != nil { + logger.Warn().Err(err).Str("file", testFile).Msg("Failed to remove temporary file") + } + + // Clean the directory for new files + files, err := os.ReadDir(config.OutputDir) + if err == nil { + for _, file := range files { + if strings.HasPrefix(file.Name(), "day") && strings.HasSuffix(file.Name(), ".gpx") { + err := os.Remove(filepath.Join(config.OutputDir, file.Name())) + if err != nil { + logger.Warn().Err(err).Str("file", file.Name()).Msg("Failed to remove existing file") + } + } + } + } + + // If we got here, the directory is writable + dirWritable = true + } + } + } + + segments, err := planRoute(*input, config, multiStops) + if err != nil { + logger.Fatal().Err(err).Msg("Failed to plan route") + } + + // Save GPX files for each segment + logger.Debug().Int("segments", len(segments)).Msg("Saving GPX files for segments") + for _, segment := range segments { + // Skip file operations if no output directory is specified or the directory is not writable + if config.OutputDir != "" && dirWritable { + filename := filepath.Join(config.OutputDir, fmt.Sprintf("day%02d.gpx", segment.DayNumber)) + logger.Debug().Str("filename", filename).Int("day", segment.DayNumber).Msg("Creating GPX for segment") + + forSegment, err := createGPXForSegment(segment, filename) + if err != nil { + logger.Error().Err(err).Str("filename", filename).Msg("Failed to create GPX for segment") + continue + } + + logger.Debug().Str("filename", filename).Msg("Saving GPX file") + if err := saveGPXFile(forSegment, filename); err != nil { + logger.Error().Err(err).Str("filename", filename).Msg("Failed to save GPX file") + } + } else if !dirWritable && config.OutputDir != "" { + logger.Warn().Int("day", segment.DayNumber).Msg("Skipping GPX file creation because output directory is not writable") + } + + printSegmentSummary(segment, config.PrintMd) + } + + // Print final summary table + printFinalSummary(allSegments, config.PrettyOutput) + + // Final success message + successMsg := fmt.Sprintf("Route planning completed successfully! %d daily segments created.", len(segments)) + if config.PrettyOutput { + successColor := color.New(color.FgHiGreen, color.Bold) + fmt.Println(successColor.Sprint("\n✅ " + successMsg)) + } else { + logger.Info().Int("segments", len(segments)).Msg(successMsg) + } +} diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..a3dc9ad --- /dev/null +++ b/main_test.go @@ -0,0 +1,592 @@ +package main + +import ( + "github.com/tkrajina/gpxgo/gpx" + "math" + "testing" +) + +func TestParseMultiStops(t *testing.T) { + tests := []struct { + name string + input string + expected []MultiStop + }{ + { + name: "Empty input", + input: "", + expected: []MultiStop{}, + }, + { + name: "Single stop", + input: "59.3293,18.0686:1", + expected: []MultiStop{ + {Lat: 59.3293, Lon: 18.0686, Nights: 1}, + }, + }, + { + name: "Multiple stops", + input: "59.3293,18.0686:1;60.1282,18.6435:2", + expected: []MultiStop{ + {Lat: 59.3293, Lon: 18.0686, Nights: 1}, + {Lat: 60.1282, Lon: 18.6435, Nights: 2}, + }, + }, + { + name: "Invalid format", + input: "invalid", + expected: []MultiStop{}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := parseMultiStops(tt.input) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d stops, got %d", len(tt.expected), len(result)) + return + } + for i, stop := range result { + if stop.Lat != tt.expected[i].Lat || stop.Lon != tt.expected[i].Lon || stop.Nights != tt.expected[i].Nights { + t.Errorf("Stop %d mismatch: expected %+v, got %+v", i, tt.expected[i], stop) + } + } + }) + } +} + +func TestHaversine(t *testing.T) { + tests := []struct { + name string + lat1 float64 + lon1 float64 + lat2 float64 + lon2 float64 + expected float64 + }{ + { + name: "Same point", + lat1: 59.3293, + lon1: 18.0686, + lat2: 59.3293, + lon2: 18.0686, + expected: 0, + }, + { + name: "Stockholm to Uppsala", + lat1: 59.3293, + lon1: 18.0686, + lat2: 59.8586, + lon2: 17.6389, + expected: 63.63, // Approximate distance in km + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := haversine(tt.lat1, tt.lon1, tt.lat2, tt.lon2) + // Allow for small floating point differences + if math.Abs(result-tt.expected) > 0.5 { + t.Errorf("Expected distance of %.2f km, got %.2f km", tt.expected, result) + } + }) + } +} + +func TestNormalizeCutIndexes(t *testing.T) { + tests := []struct { + name string + cutIndexes []int + days int + totalPoints int + expected []int + }{ + { + name: "No cuts", + cutIndexes: []int{}, + days: 5, + totalPoints: 100, + expected: []int{}, + }, + { + name: "Fewer cuts than days", + cutIndexes: []int{25, 50, 75}, + days: 5, + totalPoints: 100, + expected: []int{25, 50, 75}, + }, + { + name: "More cuts than days", + cutIndexes: []int{20, 40, 60, 80, 99}, + days: 3, + totalPoints: 100, + expected: []int{20, 40, 99}, + }, + { + name: "Duplicate cuts (rest days)", + cutIndexes: []int{25, 25, 50, 75}, + days: 5, + totalPoints: 100, + expected: []int{25, 25, 50, 75}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := normalizeCutIndexes(tt.cutIndexes, tt.days, tt.totalPoints) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d cuts, got %d", len(tt.expected), len(result)) + return + } + for i, cut := range result { + if cut != tt.expected[i] { + t.Errorf("Cut %d mismatch: expected %d, got %d", i, tt.expected[i], cut) + } + } + }) + } +} + +func TestCreateSegment(t *testing.T) { + // Create test points + points := []TrackPoint{ + {Index: 0, Distance: 0, Elevation: 0}, + {Index: 1, Distance: 10, Elevation: 100}, + {Index: 2, Distance: 20, Elevation: 200}, + {Index: 3, Distance: 30, Elevation: 300}, + {Index: 4, Distance: 40, Elevation: 400}, + {Index: 5, Distance: 50, Elevation: 500}, + } + + tests := []struct { + name string + start int + end int + cutIndexes []int + segmentIndex int + expectedLen int + }{ + { + name: "Normal segment", + start: 0, + end: 3, + cutIndexes: []int{3, 5}, + segmentIndex: 0, + expectedLen: 3, // Points 0, 1, 2 + }, + { + name: "Forced stop (end <= start)", + start: 3, + end: 3, + cutIndexes: []int{3, 5}, + segmentIndex: 0, + expectedLen: 2, // Points 3, 4 (halfway to the next cut) + }, + { + name: "Last segment", + start: 3, + end: 5, + cutIndexes: []int{3, 5}, + segmentIndex: 1, + expectedLen: 2, // Points 3, 4 + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := createSegment(points, tt.start, tt.end, tt.cutIndexes, tt.segmentIndex) + if len(result) != tt.expectedLen { + t.Errorf("Expected segment length %d, got %d", tt.expectedLen, len(result)) + } + }) + } +} + +func TestCreateDaySegment(t *testing.T) { + // Create test points + points := []TrackPoint{ + {Index: 0, Distance: 0, Elevation: 0}, + {Index: 1, Distance: 10, Elevation: 100}, + {Index: 2, Distance: 20, Elevation: 200}, + } + + dayNumber := 1 + elevFactor := 4.0 + forestRadius := 3 + resupplyRadius := 500 + + // This test will not query for forest or resupply points + // since that would require network access. We're just testing the + // calculation of distance, elevation, and effort. + segment := createDaySegment(points, dayNumber, elevFactor, forestRadius, resupplyRadius, false) + + if segment.DayNumber != dayNumber { + t.Errorf("Expected day number %d, got %d", dayNumber, segment.DayNumber) + } + + expectedDist := 20.0 // Last point distance - first point distance + if math.Abs(segment.Distance-expectedDist) > 0.1 { + t.Errorf("Expected distance %.1f, got %.1f", expectedDist, segment.Distance) + } + + expectedElev := 200.0 // Last point elevation - first point elevation + if math.Abs(segment.Elevation-expectedElev) > 0.1 { + t.Errorf("Expected elevation %.1f, got %.1f", expectedElev, segment.Elevation) + } + + expectedEffort := expectedDist + (expectedElev / 100.0 * elevFactor) + if math.Abs(segment.Effort-expectedEffort) > 0.1 { + t.Errorf("Expected effort %.1f, got %.1f", expectedEffort, segment.Effort) + } +} + +func TestCalculateCutIndexes(t *testing.T) { + // Create test route data + points := []TrackPoint{ + {Index: 0, Distance: 0, Elevation: 0}, + {Index: 1, Distance: 25, Elevation: 250}, // Effort: 25 + (250/100*4) = 35 + {Index: 2, Distance: 50, Elevation: 500}, // Effort: 50 + (500/100*4) = 70 + {Index: 3, Distance: 75, Elevation: 750}, // Effort: 75 + (750/100*4) = 105 + {Index: 4, Distance: 100, Elevation: 1000}, // Effort: 100 + (1000/100*4) = 140 + } + + routeData := RouteData{ + Points: points, + TotalDist: 100, + TotalElev: 1000, + TotalEffort: 140, + } + + tests := []struct { + name string + days int + elevFactor float64 + multiStops []MultiStop + expected []int + }{ + { + name: "2 days, no stops", + days: 2, + elevFactor: 4.0, + multiStops: []MultiStop{}, + expected: []int{2, 4}, // Cut at index 2 (effort 70) and 4 (end) + }, + { + name: "3 days, no stops", + days: 3, + elevFactor: 4.0, + multiStops: []MultiStop{}, + expected: []int{1, 3, 4}, // Cut at index 1, 3, and 4 (end) + }, + { + name: "3 days, with one multi-stop", + days: 3, + elevFactor: 4.0, + multiStops: []MultiStop{ + {Lat: 0, Lon: 0, Nights: 1}, // This will match point 0 + }, + expected: []int{0, 1, 4}, // Cut at index 0 (forced stop), 1, and 4 (end) + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := calculateCutIndexes(routeData, tt.days, tt.elevFactor, tt.multiStops) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d cuts, got %d", len(tt.expected), len(result)) + return + } + for i, cut := range result { + if cut != tt.expected[i] { + t.Errorf("Cut %d mismatch: expected %d, got %d", i, tt.expected[i], cut) + } + } + }) + } +} + +// New tests for refactored functions + +func TestFindForcedStopIndexes(t *testing.T) { + // Create test points with latitude and longitude + points := []TrackPoint{ + {Index: 0, Point: gpx.GPXPoint{Point: gpx.Point{Latitude: 59.3293, Longitude: 18.0686}}}, + {Index: 1, Point: gpx.GPXPoint{Point: gpx.Point{Latitude: 59.8586, Longitude: 17.6389}}}, + {Index: 2, Point: gpx.GPXPoint{Point: gpx.Point{Latitude: 60.1282, Longitude: 18.6435}}}, + } + + tests := []struct { + name string + points []TrackPoint + multiStops []MultiStop + expected []int + }{ + { + name: "No stops", + points: points, + multiStops: []MultiStop{}, + expected: []int{}, + }, + { + name: "One stop matching first point", + points: points, + multiStops: []MultiStop{ + {Lat: 59.3293, Lon: 18.0686, Nights: 1}, // Matches point 0 + }, + expected: []int{0}, + }, + { + name: "One stop with multiple nights", + points: points, + multiStops: []MultiStop{ + {Lat: 59.8586, Lon: 17.6389, Nights: 2}, // Matches point 1 + }, + expected: []int{1, 1}, // Duplicated for 2 nights + }, + { + name: "Multiple stops", + points: points, + multiStops: []MultiStop{ + {Lat: 59.3293, Lon: 18.0686, Nights: 1}, // Matches point 0 + {Lat: 60.1282, Lon: 18.6435, Nights: 1}, // Matches point 2 + }, + expected: []int{0, 2}, + }, + { + name: "Stop too far from any point", + points: points, + multiStops: []MultiStop{ + {Lat: 55.0, Lon: 15.0, Nights: 1}, // Far from all points + }, + expected: []int{}, // No match within 2km + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := findForcedStopIndexes(tt.points, tt.multiStops) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d forced stops, got %d", len(tt.expected), len(result)) + return + } + for i, idx := range result { + if idx != tt.expected[i] { + t.Errorf("Forced stop %d mismatch: expected %d, got %d", i, tt.expected[i], idx) + } + } + }) + } +} + +func TestHandleTooManyForcedStops(t *testing.T) { + tests := []struct { + name string + forcedStopIndexes []int + days int + lastPointIndex int + totalPoints int + expected []int + }{ + { + name: "Fewer forced stops than days", + forcedStopIndexes: []int{25, 50}, + days: 4, + lastPointIndex: 99, + totalPoints: 100, + expected: []int{25, 50, 99}, + }, + { + name: "More forced stops than days", + forcedStopIndexes: []int{20, 40, 60, 80}, + days: 3, + lastPointIndex: 99, + totalPoints: 100, + expected: []int{20, 40, 99}, // Only first (days-1) forced stops are kept + }, + { + name: "Equal forced stops and days", + forcedStopIndexes: []int{33, 66}, + days: 3, + lastPointIndex: 99, + totalPoints: 100, + expected: []int{33, 66, 99}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := handleTooManyForcedStops(tt.forcedStopIndexes, tt.days, tt.lastPointIndex, tt.totalPoints) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d cuts, got %d", len(tt.expected), len(result)) + return + } + for i, cut := range result { + if cut != tt.expected[i] { + t.Errorf("Cut %d mismatch: expected %d, got %d", i, tt.expected[i], cut) + } + } + }) + } +} + +func TestCreateSegmentsBetweenStops(t *testing.T) { + // Create test points + points := []TrackPoint{ + {Index: 0, Distance: 0, Elevation: 0}, + {Index: 1, Distance: 10, Elevation: 100}, + {Index: 2, Distance: 20, Elevation: 200}, + {Index: 3, Distance: 30, Elevation: 300}, + {Index: 4, Distance: 40, Elevation: 400}, + } + + tests := []struct { + name string + points []TrackPoint + allStops []int + elevFactor float64 + expected []struct { + start, end int + effort float64 + } + }{ + { + name: "No stops", + points: points, + allStops: []int{}, + elevFactor: 4.0, + expected: []struct { + start, end int + effort float64 + }{}, + }, + { + name: "One segment", + points: points, + allStops: []int{0, 4}, + elevFactor: 4.0, + expected: []struct { + start, end int + effort float64 + }{ + {0, 4, 56.0}, // Effort: 40 + (400/100*4) = 56 + }, + }, + { + name: "Multiple segments", + points: points, + allStops: []int{0, 2, 4}, + elevFactor: 4.0, + expected: []struct { + start, end int + effort float64 + }{ + {0, 2, 28.0}, // Effort: 20 + (200/100*4) = 28 + {2, 4, 42.0}, // Effort: (30-20) + ((300-200)/100*4) + (40-30) + ((400-300)/100*4) = 42 + }, + }, + { + name: "Duplicate stops (rest days)", + points: points, + allStops: []int{0, 2, 2, 4}, + elevFactor: 4.0, + expected: []struct { + start, end int + effort float64 + }{ + {0, 2, 28.0}, // Effort: 20 + (200/100*4) = 28 + {2, 4, 42.0}, // Effort: (30-20) + ((300-200)/100*4) + (40-30) + ((400-300)/100*4) = 42 + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := createSegmentsBetweenStops(tt.points, tt.allStops, tt.elevFactor) + if len(result) != len(tt.expected) { + t.Errorf("Expected %d segments, got %d", len(tt.expected), len(result)) + return + } + for i, seg := range result { + if seg.start != tt.expected[i].start || seg.end != tt.expected[i].end { + t.Errorf("Segment %d bounds mismatch: expected (%d,%d), got (%d,%d)", + i, tt.expected[i].start, tt.expected[i].end, seg.start, seg.end) + } + if math.Abs(seg.effort-tt.expected[i].effort) > 0.1 { + t.Errorf("Segment %d effort mismatch: expected %.1f, got %.1f", + i, tt.expected[i].effort, seg.effort) + } + } + }) + } +} + +func TestHandleTooManyCuts(t *testing.T) { + tests := []struct { + name string + cutIndexes []int + forcedStopIndexes []int + days int + lastPointIndex int + expectedLen int + }{ + { + name: "Fewer cuts than days", + cutIndexes: []int{25, 50}, + forcedStopIndexes: []int{}, + days: 4, + lastPointIndex: 99, + expectedLen: 4, // Will add cuts to reach days + }, + { + name: "More cuts than days", + cutIndexes: []int{20, 40, 60, 80}, + forcedStopIndexes: []int{}, + days: 3, + lastPointIndex: 99, + expectedLen: 3, // Will reduce to days + }, + { + name: "With forced stops", + cutIndexes: []int{20, 40, 60, 80}, + forcedStopIndexes: []int{20, 60}, + days: 3, + lastPointIndex: 99, + expectedLen: 3, // Will keep forced stops and last point + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := handleTooManyCuts(tt.cutIndexes, tt.forcedStopIndexes, tt.days, tt.lastPointIndex) + if len(result) != tt.expectedLen { + t.Errorf("Expected %d cuts, got %d", tt.expectedLen, len(result)) + } + + // Check that forced stops are included + for _, forcedIdx := range tt.forcedStopIndexes { + found := false + for _, resultIdx := range result { + if resultIdx == forcedIdx { + found = true + break + } + } + if !found { + t.Errorf("Forced stop %d not found in result", forcedIdx) + } + } + + // Check that last point is included + lastPointFound := false + for _, resultIdx := range result { + if resultIdx == tt.lastPointIndex { + lastPointFound = true + break + } + } + if !lastPointFound { + t.Errorf("Last point %d not found in result", tt.lastPointIndex) + } + }) + } +} diff --git a/run_all_tests.sh b/run_all_tests.sh new file mode 100755 index 0000000..14e7f18 --- /dev/null +++ b/run_all_tests.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +set -x + +go test ./... + +cd tests || exit 1 + +for file in *.sh; do + if [ -d "$file" ]; then + continue + fi + ./$file +done diff --git a/tests/gpx/test_uneven_effort.gpx b/tests/gpx/test_uneven_effort.gpx new file mode 100644 index 0000000..a863e55 --- /dev/null +++ b/tests/gpx/test_uneven_effort.gpx @@ -0,0 +1,79 @@ + + + + Test Route with Uneven Effort + + + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + + + 120 + 150 + 180 + 200 + 220 + 240 + 260 + 280 + 300 + 320 + + + 340 + 360 + 380 + 400 + 420 + 440 + 460 + 480 + 500 + 520 + + + 550 + 600 + 650 + 700 + 750 + 800 + 850 + 900 + 950 + 1000 + + + 1050 + 1150 + 1250 + 1350 + 1450 + 1550 + 1650 + 1750 + 1850 + 1950 + + + 2050 + 2200 + 2350 + 2500 + 2650 + 2800 + 2950 + 3100 + 3250 + 3400 + + + diff --git a/tests/gpx/very_long_route.gpx b/tests/gpx/very_long_route.gpx new file mode 100644 index 0000000..95af4e8 --- /dev/null +++ b/tests/gpx/very_long_route.gpx @@ -0,0 +1,36065 @@ + + + + + Trelleborg (1,317.3km) + + 0 + 0.25 + 0.5 + 0.75 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.75 + 1.5 + 1.5 + 2 + 2 + 2.25 + 3.25 + 3.5 + 3.5 + 3.25 + 3.5 + 3.75 + 4 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 4.25 + 4 + 4 + 4.25 + 4 + 4 + 4.75 + 5.75 + 6 + 6 + 6 + 6 + 4.75 + 4.5 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.5 + 5 + 5.75 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 5.75 + 6 + 6 + 6.25 + 6.5 + 7.5 + 7.75 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8.25 + 8.75 + 8.75 + 8.75 + 8.25 + 7.75 + 7.5 + 7.5 + 7.5 + 7.75 + 8 + 8.5 + 8.75 + 9 + 9 + 9.25 + 9.25 + 9.25 + 9.5 + 9.5 + 9.5 + 9.75 + 10 + 10 + 10.5 + 10.5 + 10.75 + 12.5 + 13.25 + 13.5 + 14 + 14 + 14.25 + 14.25 + 14.5 + 15 + 15.75 + 16 + 17.25 + 17.5 + 17.5 + 17.5 + 17.75 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 17.5 + 17.25 + 17 + 17 + 17.25 + 17.5 + 17.75 + 17.25 + 17 + 17 + 17.25 + 17.25 + 17.5 + 17.5 + 17.75 + 17.75 + 18 + 18 + 18 + 18 + 18 + 18.5 + 18.75 + 19.75 + 19.75 + 19.75 + 20 + 20 + 20 + 20.5 + 20.25 + 19.25 + 18 + 17.75 + 17.75 + 18.25 + 18.75 + 22.75 + 20 + 20.25 + 21.5 + 27 + 27.5 + 28 + 29.75 + 29.75 + 30.25 + 30.75 + 31 + 30.75 + 30.5 + 30.75 + 30.75 + 30.5 + 30 + 29.25 + 28 + 27.75 + 27.25 + 26 + 25.5 + 25.25 + 25 + 25.25 + 25.75 + 26.5 + 26.75 + 27 + 29 + 29 + 29.75 + 30 + 30.5 + 32 + 32.75 + 33.25 + 33.25 + 33.75 + 34 + 34.25 + 34.25 + 34 + 33.5 + 33 + 32.25 + 31.5 + 31.25 + 31.75 + 32.25 + 33.75 + 34.5 + 34.75 + 34.75 + 34.75 + 34 + 34.5 + 34.75 + 35 + 35 + 33 + 33 + 32.5 + 31.5 + 31.25 + 31.25 + 31.5 + 31.75 + 32 + 32 + 32.25 + 32.75 + 33.5 + 33.75 + 34.5 + 35 + 36 + 36 + 36 + 36 + 35.75 + 35.75 + 35.5 + 35.5 + 35.5 + 35.25 + 35.25 + 35.25 + 35.5 + 35.75 + 36 + 36 + 35.75 + 36 + 36.5 + 37.5 + 37.5 + 37.75 + 37.75 + 38 + 39.25 + 39.75 + 39.75 + 39.75 + 38.25 + 37.5 + 36.75 + 36.25 + 36 + 35.75 + 35.25 + 34.25 + 33.25 + 32.5 + 32.75 + 33 + 32.75 + 32.5 + 32.5 + 32.25 + 32.5 + 32.75 + 33 + 33 + 33 + 33.5 + 35 + 35 + 35.25 + 35.5 + 36 + 35.75 + 35.25 + 35 + 36.5 + 37.25 + 38.25 + 38.75 + 39.75 + 39.25 + 39 + 39 + 38.25 + 37.25 + 37 + 37 + 37 + 37.5 + 37.75 + 37 + 36.75 + 36.5 + 36.75 + 37.25 + 37.75 + 38 + 38 + 38 + 38 + 38 + 37.5 + 38.5 + 39.25 + 39.75 + 39.75 + 40 + 40.25 + 38.25 + 37.75 + 37.75 + 37.5 + 37.5 + 37.25 + 37.25 + 37 + 37 + 36.5 + 36.25 + 36 + 35.75 + 35.75 + 35.75 + 35.5 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35.25 + 35.75 + 36 + 36.5 + 37 + 37.75 + 38.25 + 38.75 + 38.25 + 37.75 + 37.5 + 37.25 + 37 + 37.25 + 37.25 + 37.25 + 37.25 + 37.25 + 37 + 37 + 37 + 37 + 37 + 36.5 + 36 + 36.75 + 37.5 + 38.25 + 39.25 + 40 + 41 + 41.5 + 42 + 42.75 + 43.25 + 42 + 42.25 + 42 + 42 + 42 + 42 + 42 + 42.25 + 42 + 42.25 + 42.25 + 42.25 + 42.5 + 42.75 + 42.75 + 42.75 + 43 + 43 + 43.25 + 43.5 + 43.5 + 43.75 + 43.25 + 43 + 43 + 43.25 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 43.5 + 43.5 + 43.5 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 44 + 44 + 44.25 + 44.25 + 44.25 + 44 + 44 + 43.75 + 44 + 44 + 43.25 + 42.5 + 41.5 + 40.5 + 40 + 40.25 + 41.25 + 41.75 + 41.75 + 41.75 + 42 + 42 + 42 + 42 + 42 + 42 + 41.75 + 41.25 + 41 + 40.75 + 40.5 + 40 + 40 + 40.25 + 41.25 + 41.5 + 41.75 + 42 + 40.75 + 39.75 + 38.75 + 38.25 + 38 + 37.5 + 37.25 + 37 + 36.75 + 36.25 + 36.25 + 36.25 + 36 + 36 + 36 + 35.5 + 35.75 + 35.75 + 35.5 + 35.5 + 35.5 + 35.75 + 35.75 + 35.75 + 36.25 + 36.5 + 36.75 + 36.75 + 37.5 + 37.5 + 37.75 + 37.5 + 36.75 + 36.25 + 36 + 36 + 36 + 35.75 + 35.75 + 35.75 + 35.75 + 36.25 + 35.75 + 35.25 + 35 + 35 + 35 + 34.75 + 34.75 + 34.75 + 34.5 + 34.75 + 34.75 + 35 + 34.25 + 32.25 + 32.25 + 33 + 33 + 33.25 + 33.25 + 33 + 32.75 + 33.25 + 33.75 + 34.5 + 35.25 + 35.75 + 35.5 + 35.75 + 37.25 + 37.5 + 37.75 + 37.75 + 38 + 38 + 37.75 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38.75 + 39 + 39 + 39.25 + 39.5 + 39.5 + 39.5 + 39 + 38.5 + 38.5 + 38.5 + 38.75 + 38.75 + 38.75 + 38 + 38 + 38 + 38.75 + 40 + 40.25 + 40 + 39.25 + 40 + 40 + 40 + 40 + 39.75 + 39.5 + 39.75 + 40 + 40.5 + 42 + 42.25 + 43 + 43.5 + 43.75 + 44.25 + 44.25 + 44.25 + 44 + 42 + 43.25 + 43.75 + 43.75 + 44 + 44.75 + 45 + 45.5 + 46 + 46.25 + 46.25 + 46.5 + 46.75 + 47 + 47.25 + 47.5 + 47.5 + 47.5 + 47.5 + 47.75 + 47.75 + 48.25 + 48.75 + 49 + 49.25 + 49 + 48.75 + 48.25 + 48.25 + 48 + 48 + 48.25 + 48.5 + 48 + 47.75 + 46.5 + 46 + 45.5 + 42.25 + 42.5 + 41.75 + 41.25 + 41.25 + 41 + 41 + 40.75 + 40.5 + 40.5 + 40.5 + 40.25 + 40.25 + 39.25 + 38.75 + 38.5 + 38.25 + 38.25 + 38 + 38 + 38 + 38.25 + 38.25 + 38.5 + 38.5 + 38.75 + 38.25 + 37.75 + 37 + 35 + 34.5 + 34 + 33.75 + 33.5 + 33.5 + 33 + 33 + 33 + 33.5 + 33.75 + 33.75 + 34 + 34 + 33.75 + 33.75 + 33.5 + 32.5 + 33.25 + 33.75 + 34 + 34.25 + 34.25 + 33.5 + 33 + 33 + 33.5 + 33.5 + 33.75 + 34 + 33.75 + 33.5 + 33.25 + 33 + 32.5 + 32.25 + 31.5 + 30 + 29.75 + 29.5 + 29.5 + 29.5 + 29.75 + 29 + 28.75 + 28 + 28 + 28.25 + 28.25 + 28 + 28 + 28 + 28 + 27.75 + 27.5 + 27.25 + 27 + 26.75 + 26.25 + 26 + 26.25 + 26.25 + 26.25 + 25.75 + 25.75 + 26 + 26 + 26 + 26 + 26 + 26.25 + 26.75 + 26.75 + 27 + 27.25 + 27.75 + 28 + 28 + 28 + 28.25 + 29 + 29.75 + 30.25 + 30.5 + 30.75 + 30.75 + 31.25 + 31.25 + 31.75 + 32.25 + 32.5 + 33 + 33.25 + 33.5 + 34 + 34 + 34.75 + 34.5 + 32.5 + 30.75 + 29.75 + 28 + 27.75 + 28 + 27.75 + 28 + 28 + 28 + 27.75 + 28 + 28 + 27 + 26.75 + 26.5 + 26.5 + 26.25 + 25.5 + 25.5 + 24 + 25 + 25 + 24.75 + 22 + 21.5 + 21.5 + 21.25 + 21 + 20.75 + 20.75 + 21 + 21.25 + 20.75 + 24.25 + 24.75 + 23.25 + 23.25 + 24.75 + 27.5 + 26.25 + 24 + 23.75 + 23.25 + 23 + 22.75 + 19 + 19 + 19 + 19 + 19 + 19 + 18.75 + 18.75 + 18.5 + 18.25 + 18 + 18 + 17.75 + 18 + 18 + 18 + 18 + 18 + 18 + 18.25 + 18.25 + 18.25 + 18.25 + 18.5 + 18.5 + 18.75 + 18.75 + 19 + 19.5 + 19.75 + 20.5 + 20.5 + 20.5 + 20 + 19.75 + 19.5 + 19 + 18.5 + 19.25 + 20.25 + 20.5 + 20.75 + 20.75 + 21 + 21.75 + 19.75 + 18.25 + 16.5 + 16.75 + 17 + 17.25 + 17.25 + 12.75 + 12.25 + 12.5 + 11.5 + 11 + 10.25 + 10.25 + 10 + 9.25 + 9.25 + 9 + 9.75 + 11 + 10.75 + 10 + 9.5 + 9 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.5 + 9.25 + 9.25 + 9.5 + 9.25 + 8.5 + 7.5 + 6.75 + 6.75 + 6.75 + 6.75 + 7 + 8 + 8.25 + 8.25 + 8.75 + 8.75 + 9 + 9.25 + 9.5 + 9.5 + 9.5 + 9.75 + 9.75 + 10.5 + 10.5 + 10.5 + 10.5 + 10.25 + 9.75 + 9.75 + 9.25 + 9.25 + 9 + 8.5 + 7.75 + 7.75 + 7.25 + 7 + 7 + 7 + 7 + 6.5 + 6.5 + 6.5 + 6.5 + 6.75 + 6.25 + 5.5 + 5.5 + 5.75 + 5.75 + 6 + 6 + 6 + 6.25 + 6.5 + 7 + 7.25 + 7.5 + 7.5 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 7.25 + 7.25 + 7.5 + 7 + 6.5 + 6 + 6 + 5.75 + 5.75 + 5.75 + 5.5 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 5 + 6.25 + 7 + 7.5 + 9.25 + 8.25 + 6.5 + 6.25 + 6.25 + 6.25 + 6.25 + 6.25 + 7.5 + 6.75 + 6.5 + 6.25 + 6.25 + 6 + 5.75 + 5.5 + 5.5 + 5.25 + 4.5 + 5 + 5 + 4.75 + 4.25 + 4 + 3.5 + 3.25 + 3 + 2.75 + 2.5 + 2.25 + 2 + 2 + 2 + 2.25 + 2.5 + 3.5 + 3.5 + 3.25 + 2.25 + 2 + 1.75 + 1.75 + 1.75 + 2.25 + 1.5 + 1.5 + 1.25 + 1.25 + 1.25 + 1.5 + 2.25 + 2.25 + 2.5 + 2 + 2 + 2 + 2.25 + 2.25 + 2.25 + 2.25 + 2.5 + 2.5 + 2.75 + 2.75 + 2.75 + 2.25 + 2 + 1.75 + 1.75 + 1.5 + 1.5 + 1.5 + 1.25 + 1 + 1.25 + 1.25 + 1.25 + 1.5 + 1.5 + 1.5 + 1.75 + 2 + 2 + 2 + 2.25 + 2.5 + 2.75 + 3 + 3.25 + 3.5 + 3.25 + 3 + 3 + 3 + 2.75 + 2.75 + 2.75 + 3 + 3 + 3 + 3 + 2.75 + 2.5 + 2.25 + 2 + 1.25 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1.25 + 1.25 + 1.5 + 1.5 + 1.75 + 2 + 2.25 + 2.5 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 3.5 + 3.25 + 1.5 + 2 + 1.75 + 1.75 + 1 + 1.25 + 1.75 + 0.25 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + -0.75 + -0.75 + -0.75 + -0.5 + -0.75 + -0.75 + -0.75 + -0.75 + -0.5 + -0.25 + 0 + -0.25 + -0.5 + -0.75 + -1.25 + -1.75 + -1.5 + -0.5 + 0 + 0 + 0.25 + 0.5 + 0.25 + 0 + 0 + 0 + 0 + 0 + 0 + 2.75 + 3 + 2.75 + 1.5 + 0.75 + 1.5 + 2.75 + 2.75 + 2.75 + 2.5 + 2.5 + 3 + 4.5 + 6 + 8.75 + 9.5 + 11 + 11.5 + 10.75 + 9.25 + 6.75 + 3.25 + 3.25 + 2.25 + 2.25 + 2.75 + 3.25 + 3.5 + 3.25 + 2.5 + 2 + 1.75 + 0.75 + 0.75 + 1.5 + 1.25 + 1 + 1.5 + 1.5 + 2 + 2 + 1.5 + 1 + 1 + 1 + 1 + 1.25 + 1.5 + 1.75 + 2.25 + 2.5 + 2.75 + 3 + 3.75 + 2.25 + 2 + 2 + 1.75 + 1.75 + 1.5 + 1.75 + 1.75 + 2 + 2 + 2 + 1.75 + 1.75 + 1.5 + 1.5 + 2 + 2 + 2 + 2 + 2 + 1 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.75 + 1 + 1 + 0.75 + 0.75 + 0.75 + 0.75 + 0.75 + 0.5 + 0.25 + 0.25 + -0.25 + -0.5 + -1.5 + -1.75 + -1.75 + -1.75 + -1.75 + -1.5 + -1.25 + -1 + -0.75 + -0.25 + 0 + 0 + 0 + 0 + 0 + 0 + -0.25 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0.75 + 1 + 2.5 + 2.75 + 3 + 3.5 + 3.75 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 5.25 + 5.5 + 5.75 + 6 + 6.25 + 6.5 + 6.5 + 6.75 + 7 + 7 + 7 + 7.25 + 7.5 + 7.5 + 7.75 + 7 + 6.5 + 6.25 + 6 + 5 + 3.5 + 3.75 + 4 + 4.25 + 4 + 4.75 + 4.75 + 4.25 + 4 + 3.75 + 3.75 + 3.25 + 3.25 + 3 + 3.25 + 3.5 + 3.5 + 3.5 + 2 + 1.75 + 1.5 + 1.5 + 1.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.75 + 2.75 + 3 + 2.75 + 0.25 + 1.25 + 1.25 + 1.25 + 1.25 + 1.25 + 1.25 + 2.25 + 3.25 + 3.5 + 3.5 + 3.75 + 4.25 + 4.75 + 4.5 + 4.25 + 4 + 4.5 + 5.5 + 6.75 + 7 + 8.5 + 11.75 + 14.5 + 15.75 + 14.75 + 14 + 12 + 11.75 + 11.5 + 11.25 + 11 + 11.5 + 11.75 + 11.75 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 12 + 11.5 + 11.25 + 10.25 + 10.5 + 10.5 + 11 + 11.25 + 11.75 + 11.75 + 11.5 + 11.25 + 11 + 10.75 + 10.75 + 10.75 + 10.75 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 11 + 11.25 + 11.5 + 11.75 + 11.75 + 11.75 + 11.5 + 11.25 + 11 + 11 + 11 + 10.75 + 10.75 + 10.75 + 10.5 + 10.5 + 10.5 + 10.25 + 10.25 + 10 + 10 + 9.75 + 9.75 + 9.75 + 9.75 + 9.5 + 9.5 + 9.5 + 9.25 + 9 + 8.75 + 8.75 + 9 + 9 + 9.25 + 9.25 + 9 + 9 + 9 + 9 + 9 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.25 + 8 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 8 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 9.5 + 10 + 10.5 + 11 + 11.25 + 11.5 + 11.5 + 12 + 12.25 + 12.25 + 12.5 + 12.25 + 11.75 + 11.5 + 11.25 + 11 + 11 + 11 + 11.75 + 12 + 12 + 12 + 12 + 12 + 11 + 10.75 + 10.75 + 10.75 + 10.5 + 10.25 + 9.5 + 9.25 + 9 + 9.25 + 9.25 + 9.25 + 9 + 8.5 + 7 + 7 + 6.5 + 6.25 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.75 + 7 + 7 + 7 + 7.75 + 7.75 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.75 + 8 + 7.75 + 7 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5 + 4.5 + 4 + 3.5 + 3 + 2.75 + 2.5 + 2.75 + 2.75 + 3 + 3.75 + 4 + 4 + 4 + 4 + 4 + 3.5 + 2.5 + 1.25 + 1 + 0.25 + 0 + 0 + 0 + 0 + 3 + 4.75 + 6.75 + 6.75 + 9.5 + 10.5 + 12 + 12 + 12.5 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.5 + 13 + 13.75 + 14 + 14.25 + 14.75 + 14.5 + 14 + 14.25 + 14.25 + 11.75 + 11 + 11 + 11 + 11 + 9.75 + 9.25 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.5 + 10 + 10.5 + 10 + 10 + 8.75 + 8.75 + 7.5 + 7.75 + 7.75 + 8 + 8.75 + 9 + 8.75 + 9 + 9.25 + 9.25 + 9.25 + 9.25 + 9.25 + 9 + 8.75 + 8.5 + 7.75 + 9.5 + 9.25 + 9 + 10.5 + 11 + 11 + 11 + 11 + 10 + 9.5 + 10.25 + 10.25 + 12 + 12 + 11.75 + 11.75 + 12 + 11.5 + 11.75 + 11.75 + 11.5 + 11.5 + 11.5 + 12 + 12.5 + 13.25 + 12 + 10.25 + 9.25 + 9.5 + 9 + 9 + 9 + 9 + 8.75 + 8.5 + 8.5 + 8.25 + 8 + 8 + 10.5 + 11.75 + 13.5 + 16.75 + 14.75 + 13.5 + 13.5 + 13.75 + 13.75 + 13.5 + 13.5 + 9.25 + 13 + 15.5 + 15.75 + 17.25 + 17.25 + 17 + 17 + 17.25 + 16 + 14.5 + 14 + 14 + 14.25 + 14.5 + 14.75 + 16 + 16.75 + 17.25 + 17.25 + 16.5 + 16.25 + 16 + 16 + 16 + 17 + 17.75 + 18.25 + 16.5 + 16.75 + 16.75 + 15.25 + 13.75 + 13.5 + 12.25 + 12.25 + 11.5 + 11 + 11.25 + 14.75 + 16.5 + 14.5 + 12 + 11.5 + 9.5 + 9 + 9 + 9.25 + 10.75 + 11.5 + 11.5 + 11.75 + 11.5 + 11.5 + 11.5 + 11 + 11.5 + 11.75 + 12.5 + 13.25 + 13.75 + 14.5 + 16.25 + 17.5 + 17.25 + 17 + 16.75 + 16.75 + 16.5 + 16.25 + 16.5 + 16.5 + 16.75 + 16 + 14.75 + 11.75 + 11.75 + 11.75 + 12 + 12.5 + 12 + 12.25 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 11.75 + 8.5 + 5.75 + 3.75 + 4.5 + 6.5 + 7.75 + 10 + 13 + 12.75 + 12.5 + 12.5 + 13.75 + 13 + 13 + 13 + 14 + 14.25 + 13.5 + 12 + 12.5 + 12.75 + 13.25 + 13.5 + 14 + 14 + 14 + 13.75 + 13.5 + 13 + 13.75 + 14.75 + 15.25 + 15.5 + 15.75 + 15.75 + 17.5 + 17.75 + 18.5 + 19.5 + 19.75 + 20.25 + 20.25 + 20 + 19.75 + 19.25 + 18.5 + 18 + 17.75 + 16 + 14 + 13.25 + 10.75 + 10.5 + 11.75 + 11.25 + 11.75 + 12.5 + 14.25 + 14.75 + 17.75 + 19.25 + 16.25 + 16.5 + 16.75 + 16.75 + 17 + 17 + 17 + 17.25 + 17.5 + 17.75 + 18 + 18.25 + 18.5 + 18.75 + 18.5 + 18.5 + 18.75 + 19 + 19.25 + 19.5 + 22.25 + 22.25 + 24 + 26 + 27 + 28 + 29.25 + 29.75 + 30 + 30.5 + 31.25 + 31.75 + 33.25 + 33.5 + 34.5 + 36.25 + 37.5 + 40.25 + 40.25 + 40.5 + 41.25 + 45.75 + 46 + 48.75 + 51 + 50.75 + 48.5 + 47 + 46.5 + 46 + 45.75 + 44.5 + 44.5 + 43 + 39 + 36.5 + 36 + 34.5 + 33.5 + 33.25 + 32.25 + 31.75 + 30.75 + 30.5 + 29.75 + 29.5 + 29.25 + 29 + 28 + 27.5 + 28.25 + 29 + 43 + 45.25 + 46.25 + 47 + 50 + 50.25 + 52 + 51.75 + 52 + 53 + 60.75 + 64.75 + 64.75 + 63.5 + 62.5 + 61.75 + 61.25 + 61 + 61.5 + 62.5 + 63.75 + 64 + 65.25 + 65.5 + 66.25 + 67 + 67.5 + 67 + 67 + 68 + 68.75 + 67.5 + 68.5 + 68.75 + 72.75 + 74.25 + 75.75 + 75.5 + 74.75 + 73.25 + 72.5 + 72.25 + 71.25 + 70.25 + 70.75 + 70.25 + 70.5 + 71 + 72 + 73.25 + 75.5 + 77 + 78 + 77.75 + 77.5 + 77 + 76.75 + 76.25 + 74.25 + 73.75 + 73.25 + 73 + 72.75 + 72.25 + 71 + 71 + 71.25 + 71.5 + 71 + 70.75 + 74 + 74.25 + 72.75 + 72.5 + 72.5 + 72 + 72 + 71.75 + 71.5 + 70 + 70.25 + 70.5 + 70.5 + 70.75 + 67.25 + 63.5 + 62 + 61.5 + 62.25 + 68.75 + 69.75 + 70.25 + 71.75 + 76 + 76 + 76 + 73 + 74 + 77 + 77 + 77.75 + 77.25 + 76.5 + 76 + 76.75 + 78.5 + 81 + 81.25 + 81 + 80 + 80.75 + 81 + 80.75 + 80 + 80.5 + 81.25 + 80.75 + 79 + 78 + 78.5 + 78.75 + 79.75 + 79.75 + 81 + 81 + 81.25 + 81.75 + 81.5 + 81 + 78.25 + 75.75 + 75.75 + 75.25 + 75 + 74.75 + 73.25 + 73 + 73.5 + 73.75 + 73.75 + 74 + 74 + 74 + 74 + 73.5 + 73.5 + 74 + 74.75 + 75 + 74.75 + 74.25 + 74 + 73.75 + 73.75 + 73.75 + 74 + 73.25 + 72.25 + 70.75 + 68.25 + 68 + 68 + 67.75 + 67.25 + 66 + 64 + 62.75 + 62.25 + 62 + 61 + 60.25 + 59 + 57.5 + 58 + 58.5 + 58.75 + 58.25 + 57.25 + 57 + 56 + 55.25 + 55 + 55.75 + 55.5 + 54.75 + 54.5 + 52.25 + 52 + 52 + 52 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.5 + 52.25 + 52.25 + 52.25 + 52.25 + 52.25 + 52.25 + 52.5 + 52.75 + 52 + 50.5 + 50.25 + 49.75 + 49.75 + 49.75 + 49.75 + 49.5 + 49.5 + 49.5 + 49.5 + 49.25 + 49 + 48.75 + 48.5 + 47 + 46.25 + 46 + 45 + 44.5 + 44 + 44 + 43.75 + 42.25 + 41.75 + 41.75 + 41.75 + 42 + 42 + 41.75 + 42.75 + 44.5 + 43.5 + 32.5 + 32.25 + 32 + 32 + 32 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32.5 + 32.75 + 34 + 34.5 + 34.75 + 35 + 33.5 + 31.75 + 29.75 + 29 + 27.5 + 27.5 + 27.75 + 28 + 28.25 + 28 + 28 + 28.25 + 29 + 29 + 28 + 27.5 + 27.25 + 27.25 + 27 + 27 + 27 + 27 + 27 + 27 + 26.75 + 26.5 + 26.5 + 26.5 + 26.5 + 26.5 + 27 + 26.75 + 26.75 + 27 + 27 + 26.75 + 26.75 + 26.5 + 26 + 26 + 26 + 26.25 + 26.25 + 26.5 + 27.5 + 28 + 27.75 + 28.75 + 29.25 + 30.25 + 31.25 + 31.25 + 31.75 + 31.5 + 31.25 + 31.5 + 31.75 + 31.75 + 31.5 + 31.5 + 23.5 + 21.5 + 23.5 + 25.5 + 25.5 + 25.75 + 25.75 + 25.5 + 23.5 + 23.25 + 23 + 23 + 22.75 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 21.5 + 21.75 + 21.75 + 21.75 + 22 + 22.5 + 24.25 + 25.75 + 26.25 + 26.5 + 26.75 + 27 + 27 + 27 + 13.75 + 12.75 + 12 + 15 + 13.5 + 13.75 + 14 + 15.75 + 16.25 + 16.75 + 16.75 + 16.25 + 16.75 + 16.75 + 17 + 17 + 16.25 + 14.75 + 14.5 + 13 + 13.75 + 13.25 + 11 + 11.5 + 11.75 + 11.75 + 11.5 + 11.25 + 10.5 + 10.25 + 10.25 + 11 + 12 + 11.75 + 11.75 + 11.5 + 11 + 11 + 10.5 + 10.75 + 11 + 10 + 9.25 + 9.75 + 10.75 + 10.25 + 9.75 + 8.75 + 8 + 8.75 + 9.5 + 9 + 8.25 + 8.75 + 8.5 + 7 + 7 + 7.25 + 7.75 + 8.75 + 9 + 9 + 9.25 + 9.75 + 10.25 + 11 + 11.75 + 11.75 + 12 + 12 + 12 + 12 + 12 + 11.75 + 11.75 + 11.5 + 11.25 + 11.25 + 11 + 10.5 + 10.5 + 10.25 + 10.25 + 10.25 + 10 + 9.5 + 8.5 + 8 + 7.25 + 7.25 + 7.25 + 6.75 + 6.5 + 6.75 + 8.25 + 9.25 + 9.75 + 9.75 + 10 + 10 + 10.25 + 10.5 + 10.5 + 10.75 + 11 + 11 + 11 + 10.75 + 10 + 11 + 11 + 11 + 11.75 + 12.25 + 11.75 + 9.5 + 9 + 6.75 + 7.75 + 7.25 + 7 + 7.5 + 7.5 + 7.75 + 7.75 + 6.5 + 6.25 + 5 + 4.75 + 4.25 + 4 + 3.5 + 3.75 + 4.75 + 5 + 6 + 6.5 + 9.75 + 10 + 10 + 10 + 10.25 + 10.5 + 10.5 + 11 + 11 + 11.5 + 11.75 + 11.75 + 11.75 + 11.75 + 11.5 + 11.5 + 11.25 + 13 + 13.25 + 13.75 + 13.75 + 14 + 14 + 14 + 14.25 + 14.25 + 14.25 + 14 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 14 + 14.5 + 15 + 15.25 + 15.5 + 17 + 17 + 16.75 + 16.75 + 16.25 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 15 + 15 + 14.75 + 14.75 + 14.75 + 15.25 + 17 + 17 + 17 + 17 + 17 + 17 + 17.5 + 17.75 + 18.5 + 19.25 + 20.5 + 20.75 + 20.5 + 20.5 + 20.5 + 20.5 + 20.75 + 20.75 + 20.75 + 20.75 + 20.75 + 19.75 + 19.5 + 19.25 + 18.75 + 18.25 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18.25 + 19.75 + 17 + 17 + 16.75 + 16.5 + 16.5 + 16.5 + 16.5 + 16.25 + 16.25 + 12.75 + 12.5 + 14.75 + 16 + 15.75 + 14.5 + 14 + 13.25 + 13.5 + 13.5 + 13.75 + 13.75 + 13.75 + 14 + 14 + 14 + 14 + 14 + 14.25 + 14.25 + 14.5 + 15.25 + 15.25 + 15.25 + 15.5 + 15.5 + 15.5 + 16.5 + 16.25 + 15.5 + 15.25 + 15.25 + 15.5 + 16 + 16.5 + 18.25 + 17.25 + 16.75 + 16.5 + 16 + 16 + 15 + 15 + 14.75 + 14.5 + 14 + 14 + 16.25 + 16.25 + 16.25 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 15.5 + 13.75 + 13.5 + 13.25 + 13.25 + 13 + 11.25 + 11 + 11 + 11.5 + 12 + 12 + 12 + 12 + 12 + 11.25 + 11 + 10.75 + 9.5 + 8.5 + 7.75 + 8.75 + 9 + 9.25 + 9.5 + 9.5 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 11.5 + 11.75 + 11.75 + 11.25 + 11 + 10.75 + 10.5 + 10.25 + 10.25 + 10.25 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10.5 + 10.75 + 10.25 + 10 + 10 + 10 + 10 + 9.75 + 11 + 11.75 + 11 + 13.75 + 13.5 + 13 + 13 + 14.25 + 14.75 + 15.25 + 15.5 + 15.75 + 15.75 + 16.25 + 16.5 + 16.75 + 16.75 + 16.75 + 17 + 17 + 17.25 + 17.75 + 17.75 + 18 + 18.25 + 18.5 + 18.75 + 20.5 + 21 + 21.5 + 20.5 + 20.25 + 18 + 18 + 18.25 + 18 + 19.25 + 19 + 18.25 + 17.75 + 17.25 + 16.75 + 16.25 + 15.5 + 15 + 15 + 14.5 + 14.25 + 13.5 + 10.25 + 9.75 + 8.75 + 8.5 + 7.75 + 7.5 + 7.25 + 7.25 + 7.25 + 7.25 + 8.25 + 8.5 + 8.5 + 8.75 + 8 + 7.25 + 7.75 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8.5 + 8.5 + 8.75 + 8.75 + 9.5 + 10 + 11 + 11.5 + 12 + 13.25 + 16 + 16.25 + 17.5 + 17.5 + 18.25 + 18.75 + 19 + 19 + 19.75 + 20.25 + 20.75 + 21 + 21.25 + 21.75 + 22.25 + 23.5 + 23.5 + 23.5 + 23.5 + 23.75 + 24.5 + 26.75 + 27 + 27 + 27.5 + 29.25 + 30 + 30 + 29.5 + 29.25 + 29.75 + 30 + 30 + 30 + 30.25 + 30.25 + 30.5 + 30.75 + 30.75 + 31 + 31.5 + 31.75 + 32.25 + 31.75 + 31 + 28.75 + 27.75 + 25.25 + 22.75 + 19 + 18.25 + 14 + 12.75 + 12.5 + 12 + 12 + 12 + 12.5 + 12.5 + 13 + 13.25 + 14 + 18.75 + 18.75 + 17.25 + 16 + 16 + 16 + 16 + 15.5 + 15 + 14 + 15 + 14.75 + 15 + 15 + 15.25 + 15.75 + 16 + 16 + 16 + 16 + 16 + 16.25 + 16.5 + 16.75 + 17 + 17 + 17 + 16.25 + 16 + 19.75 + 20.75 + 20.75 + 20.75 + 21.25 + 21 + 21.25 + 22.5 + 24.5 + 24.75 + 29 + 32.5 + 33.25 + 33.5 + 33.5 + 33.75 + 33.75 + 34 + 34 + 34 + 34 + 34.25 + 34.25 + 34.25 + 34.25 + 34.5 + 34.5 + 34.5 + 34.5 + 34.75 + 35 + 34.75 + 34.75 + 34.5 + 34.25 + 34.25 + 36 + 37.5 + 37 + 38.25 + 39 + 40.25 + 41.75 + 46 + 50.5 + 58.5 + 59.5 + 62.75 + 63.75 + 65.5 + 66.5 + 67 + 67.75 + 68.25 + 68.25 + 68.25 + 68 + 68.25 + 69 + 69.75 + 71 + 72.75 + 74.25 + 74.5 + 76 + 76.5 + 76 + 75 + 75 + 75.25 + 76.75 + 77.25 + 82.5 + 85 + 87.75 + 89.5 + 90.5 + 92.25 + 91.75 + 93.5 + 95 + 97.25 + 99.75 + 100.5 + 101.25 + 103.75 + 105.75 + 107 + 104.75 + 104 + 107.75 + 120.75 + 125.5 + 124 + 129.25 + 132.75 + 131.5 + 133.25 + 136.25 + 138.75 + 136.5 + 136.25 + 139.25 + 139.5 + 140 + 139.75 + 138 + 138.75 + 141 + 142.75 + 147 + 149.75 + 150 + 150 + 150.5 + 150.5 + 150.75 + 151.5 + 154.75 + 156.75 + 155.75 + 157 + 158.5 + 159.5 + 160.5 + 158.5 + 158 + 157.25 + 156.75 + 156.25 + 156.5 + 156.75 + 170.5 + 173.25 + 173.75 + 175.25 + 173 + 173 + 173 + 171.5 + 170.25 + 169.25 + 168.25 + 169 + 170.25 + 170.25 + 170 + 169.75 + 169.25 + 169.75 + 171 + 173.75 + 175.5 + 177.5 + 182 + 187 + 187 + 187.25 + 187.5 + 188.5 + 188.75 + 188.75 + 188.5 + 188.25 + 188.25 + 188.25 + 188 + 188 + 187.75 + 191 + 191.75 + 190.25 + 188 + 185.5 + 181.5 + 178.75 + 178 + 176.75 + 175.5 + 175.25 + 175 + 175 + 174 + 171.25 + 167.5 + 166.25 + 165.5 + 165.25 + 165.5 + 164.5 + 163.25 + 161.5 + 159 + 157.5 + 155.25 + 153.5 + 152 + 150.75 + 138.25 + 135.5 + 134.75 + 134 + 132.75 + 130.75 + 128.25 + 120.75 + 111.5 + 109.75 + 96.75 + 92.75 + 87.25 + 71.5 + 65.75 + 24.5 + 22.25 + 20.25 + 19.25 + 19 + 18.75 + 18.25 + 18 + 17 + 17 + 16.25 + 16 + 15 + 15 + 14.25 + 13.25 + 12 + 11.5 + 10.5 + 9 + 9 + 8.75 + 8.5 + 8 + 7 + 7.25 + 7.5 + 7.25 + 6.75 + 6.75 + 7.75 + 7.25 + 7 + 7 + 8.75 + 8 + 7.5 + 7 + 6.75 + 6.75 + 6.5 + 6.5 + 6.5 + 6.25 + 6.5 + 6.5 + 6.5 + 6.25 + 5.75 + 6 + 6.25 + 6.5 + 6.5 + 6.75 + 8 + 10 + 11.75 + 12 + 12 + 12.25 + 12.5 + 12 + 12.75 + 13.25 + 13.5 + 13.25 + 13 + 13 + 13 + 13 + 13.5 + 14.25 + 14.5 + 14.5 + 14 + 14 + 14 + 14 + 14.75 + 14.75 + 15 + 15 + 12.25 + 11 + 10.75 + 10 + 9.25 + 9 + 9.25 + 9.75 + 10 + 10.25 + 9.75 + 9.5 + 8.25 + 8.25 + 8.5 + 8.5 + 9 + 9.75 + 10.5 + 11.25 + 11.5 + 11.75 + 11 + 9 + 8 + 7.75 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8.25 + 8.5 + 8.75 + 9 + 9 + 9.5 + 9.75 + 10.75 + 10.5 + 10.25 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 9.75 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.25 + 10 + 10 + 10 + 10 + 10 + 10.75 + 11 + 11.25 + 11.25 + 11.25 + 11.25 + 11.5 + 11.75 + 11.75 + 12 + 11.75 + 11.75 + 11.5 + 11.5 + 11.5 + 11.75 + 11.5 + 10.5 + 11 + 10.25 + 9.75 + 10 + 9.5 + 9 + 8.75 + 8 + 8 + 8.75 + 9 + 8.75 + 8.75 + 9 + 11.75 + 9.75 + 9.5 + 9.5 + 9.25 + 8 + 8 + 8.25 + 9.5 + 8.5 + 8 + 7.25 + 7.5 + 7.25 + 8 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.5 + 8.5 + 8.75 + 8.75 + 9 + 8.75 + 8.5 + 8.25 + 8.25 + 8.25 + 9 + 9 + 9 + 8.75 + 8.75 + 8.5 + 8.25 + 8 + 8 + 7.5 + 7.5 + 7 + 6.5 + 6 + 5.75 + 6.25 + 6.25 + 7.75 + 8.25 + 8.25 + 8.5 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 7.75 + 7.75 + 7.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 8.75 + 8.75 + 9 + 9.5 + 8.75 + 8.75 + 10.5 + 12 + 11.5 + 11 + 12.5 + 12.5 + 12.75 + 12.75 + 14.25 + 15.25 + 17 + 17.5 + 19.5 + 19.75 + 19.75 + 19.75 + 19.75 + 18.5 + 12.75 + 9.5 + 10.5 + 11.5 + 8.5 + 9.5 + 9.5 + 9.5 + 9.5 + 9.75 + 10 + 10.5 + 11 + 11.25 + 11.5 + 11.75 + 12 + 12 + 12.25 + 12.5 + 12.75 + 12.75 + 12.5 + 12.5 + 12.25 + 12 + 12 + 11.5 + 11.5 + 10.75 + 10.5 + 10.25 + 10.25 + 10.25 + 7.75 + 7 + 4.25 + 4.25 + 4.75 + 5 + 5 + 5.25 + 9.5 + 9 + 8.25 + 7.75 + 8.5 + 8.75 + 9.5 + 9.5 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.5 + 9.5 + 9.5 + 9.75 + 9.5 + 9.75 + 9.75 + 9.75 + 9.5 + 9.25 + 8.5 + 8.25 + 8 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.5 + 6.25 + 7 + 7.5 + 8.25 + 8.75 + 9 + 9.5 + 9.75 + 10 + 10 + 10 + 9.75 + 9.25 + 9 + 8.75 + 8.25 + 8.5 + 8.75 + 9 + 9.25 + 9.5 + 9.75 + 9.75 + 10 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.5 + 10.75 + 11.75 + 12.5 + 13.25 + 14.5 + 15.75 + 17.25 + 18.25 + 17 + 15 + 20.25 + 25 + 20 + 16 + 16.25 + 16.5 + 9.75 + 9 + 7 + 6.5 + 6.75 + 7.75 + 9.75 + 11 + 12 + 16.5 + 17.5 + 18.25 + 18.25 + 18 + 17 + 17.25 + 18.25 + 18.5 + 21.25 + 22.75 + 23.5 + 24.25 + 26 + 26.5 + 26.75 + 25 + 22.5 + 22.75 + 21 + 18.75 + 18.5 + 17 + 16.5 + 15.75 + 14 + 13.75 + 13.75 + 13.75 + 13.5 + 11.75 + 12 + 13 + 12.5 + 11.5 + 11.5 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 9.5 + 9.25 + 9 + 9.5 + 10 + 10 + 10 + 10 + 10.25 + 10.5 + 10.5 + 11.25 + 10.75 + 10.75 + 11 + 11 + 12.75 + 13 + 13.25 + 13.75 + 16.75 + 17.25 + 17 + 17 + 16.25 + 15 + 12.5 + 12.25 + 12 + 10.75 + 10 + 10 + 10 + 10 + 9.75 + 9.25 + 8.75 + 8.5 + 8.25 + 8.25 + 10 + 10.75 + 10.75 + 11 + 11.5 + 11.75 + 11.75 + 11 + 10.5 + 10.5 + 10.75 + 11.5 + 11.25 + 10.75 + 10.5 + 10.5 + 10.75 + 10.75 + 10.75 + 10.75 + 11.25 + 11.5 + 12 + 12 + 12 + 12.25 + 11.5 + 10.25 + 10 + 9 + 8.75 + 8.5 + 8.25 + 7.75 + 7 + 6.75 + 6.75 + 6.25 + 6 + 5.75 + 5.5 + 5.5 + 5.5 + 7.5 + 10 + 11 + 11 + 11.25 + 11.5 + 11.5 + 11.5 + 11.5 + 11.5 + 10.75 + 10.5 + 10.25 + 10.25 + 10.75 + 8.75 + 8.75 + 8.75 + 9 + 9.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6 + 5.75 + 6 + 6.5 + 6.75 + 7.5 + 7.75 + 8 + 8.75 + 9 + 9.25 + 9.5 + 9.75 + 9.5 + 9.5 + 9.75 + 10 + 10.25 + 10.5 + 10.5 + 10.75 + 10.75 + 10.75 + 10.5 + 10.25 + 10.75 + 10.75 + 10.75 + 11.25 + 11.25 + 11.5 + 12 + 12 + 12.5 + 12.5 + 12.5 + 12.25 + 12 + 12 + 11.75 + 10.25 + 9 + 8.5 + 8 + 7.75 + 7.5 + 7.25 + 7.25 + 7.25 + 7 + 7 + 6.75 + 7 + 9 + 8 + 8.5 + 8.5 + 8.5 + 8 + 7.75 + 7.75 + 7.5 + 7.5 + 8 + 8.25 + 8.25 + 8.5 + 8.5 + 8.75 + 12 + 12 + 11.75 + 11.25 + 11 + 11 + 11 + 11 + 10.75 + 10.5 + 10 + 9.75 + 9.5 + 9.5 + 9 + 8.25 + 8 + 7.75 + 6.75 + 6.25 + 6.25 + 5.5 + 5.25 + 5.25 + 5 + 5.25 + 5.5 + 5.75 + 5.75 + 6 + 6 + 6 + 6 + 6.25 + 6.25 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 7.75 + 7.75 + 7.5 + 7.25 + 7.25 + 7.25 + 7 + 7.5 + 7.5 + 7.75 + 8 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8 + 8 + 8 + 8 + 8.25 + 8.25 + 8 + 7.5 + 7.25 + 7 + 8 + 8 + 8.25 + 8.5 + 8.5 + 8.75 + 8.75 + 8.75 + 9 + 8.75 + 8.75 + 8.25 + 8 + 7.75 + 7.25 + 7 + 7.25 + 7.25 + 7.25 + 6 + 7.25 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8 + 8.25 + 8.5 + 8.75 + 8.5 + 8.5 + 7.75 + 6.75 + 6.75 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 8 + 8 + 8.75 + 8.5 + 8.25 + 9 + 9 + 8.75 + 8 + 8 + 9 + 9 + 10 + 10 + 10 + 9.25 + 9 + 8.75 + 8.5 + 8.5 + 8.5 + 8 + 7.75 + 7.25 + 7.25 + 7.25 + 7 + 6.75 + 6.75 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6 + 6 + 7 + 7.25 + 7.5 + 7.75 + 8 + 8.75 + 8.75 + 9 + 9.25 + 9.25 + 9.5 + 9.5 + 8.75 + 8 + 7 + 6.25 + 5.75 + 5.75 + 5.5 + 5.5 + 5.25 + 4.5 + 4 + 3.5 + 4.5 + 4.75 + 5.25 + 6.25 + 7 + 8 + 8.25 + 8.25 + 8 + 8 + 6.25 + 6.25 + 6.75 + 7 + 7 + 6.75 + 6.75 + 6.25 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6.25 + 6.25 + 6.5 + 6.75 + 6.5 + 5.75 + 4.75 + 4.75 + 4.75 + 5 + 5.75 + 6 + 6 + 6 + 6 + 6 + 5.5 + 5 + 4.5 + 3.75 + 3.75 + 3.5 + 3.5 + 3.5 + 4 + 4.25 + 4.5 + 4.5 + 4.75 + 5 + 5.25 + 5.5 + 5.75 + 6 + 6.25 + 6.75 + 7.5 + 8.5 + 9 + 9.5 + 9.75 + 9.75 + 9.5 + 9.25 + 8.75 + 8.25 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 9 + 9 + 9 + 9 + 9 + 9.25 + 9.75 + 10.5 + 10.75 + 11.75 + 12.25 + 12.5 + 12.5 + 12.5 + 12 + 11.75 + 11.75 + 11.25 + 11.25 + 11 + 11 + 11.25 + 11.25 + 12.25 + 14.5 + 15 + 16 + 16 + 16.5 + 17.75 + 18.75 + 19 + 19 + 19.5 + 21.75 + 22.25 + 22.75 + 21.5 + 21.5 + 22.25 + 22 + 21.25 + 19.25 + 19.25 + 19 + 19 + 18.75 + 18.75 + 18.75 + 18.75 + 18.5 + 18.5 + 18.5 + 18.25 + 18 + 18 + 17.75 + 17.75 + 18 + 18 + 17.75 + 17 + 17 + 17 + 17.25 + 17.25 + 17 + 17.5 + 17.25 + 16.25 + 16 + 16.5 + 17.5 + 18.75 + 19 + 19 + 19 + 18.75 + 19 + 19 + 19 + 19 + 18.25 + 19 + 20.5 + 23.5 + 23.75 + 23 + 20.5 + 19.5 + 18.75 + 18.75 + 19.25 + 19.75 + 18.75 + 20 + 19.5 + 19 + 19.25 + 19.5 + 19.25 + 20 + 19.75 + 19 + 19.75 + 20.5 + 23.25 + 25.5 + 25.75 + 25.25 + 24.5 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24.5 + 25.5 + 26 + 26.5 + 27 + 26.5 + 26.5 + 26.5 + 26.25 + 26.25 + 26.25 + 26.25 + 26 + 25.75 + 25.5 + 25.5 + 25.75 + 26 + 26.25 + 26.75 + 26.75 + 26.75 + 26 + 24.75 + 24 + 23.75 + 23.75 + 24 + 24 + 24 + 24 + 23.5 + 23.25 + 22.75 + 22.5 + 21.75 + 21.25 + 20.75 + 21 + 22 + 23 + 23.5 + 23.75 + 20 + 17.5 + 16.5 + 15 + 13.75 + 13.5 + 15 + 17.25 + 18.5 + 19 + 20 + 22.25 + 24.75 + 29.75 + 32 + 34 + 34 + 34 + 34 + 34.25 + 34.5 + 34.75 + 35 + 35 + 34.75 + 34.25 + 34 + 33 + 32.75 + 32 + 32.5 + 32.5 + 32.25 + 32.5 + 32.75 + 32.25 + 31.75 + 31.75 + 30.25 + 29.5 + 29 + 28.75 + 28.25 + 27.5 + 27 + 27 + 25.75 + 25 + 24.75 + 24 + 22.75 + 22 + 20.75 + 20.75 + 20.5 + 20.25 + 20.5 + 20.75 + 21.25 + 22.5 + 21.75 + 21.75 + 21.75 + 21.75 + 21.75 + 21.5 + 21 + 21.75 + 22.25 + 22.75 + 23 + 23.25 + 23.5 + 24 + 24.25 + 21 + 20 + 21.5 + 21.75 + 22 + 22.25 + 23.5 + 23.75 + 24.25 + 25 + 25.75 + 26.25 + 27.5 + 27.5 + 27.5 + 27.5 + 27.5 + 27 + 27 + 26.75 + 26.5 + 26.25 + 25.75 + 31.25 + 32.5 + 33.25 + 33.75 + 34 + 34.25 + 35.5 + 37.75 + 39.5 + 40.75 + 42.25 + 42.5 + 42.5 + 40.25 + 37.25 + 35.5 + 32.75 + 30.5 + 29.25 + 27 + 21 + 21 + 21 + 21 + 21 + 21 + 21.25 + 21.75 + 22.75 + 23 + 23.25 + 24.25 + 24.25 + 23.25 + 23.25 + 22.25 + 21.5 + 21 + 23.25 + 23.75 + 21.5 + 21 + 23.25 + 32 + 30.25 + 31.25 + 31.75 + 32.25 + 32.5 + 32.75 + 33.25 + 33 + 30 + 28 + 26.25 + 23 + 22.75 + 22 + 22 + 22.75 + 23.75 + 23.75 + 23.75 + 25.5 + 26.5 + 28 + 29 + 29.25 + 29.25 + 29 + 28.75 + 28.25 + 27.25 + 27 + 26.25 + 25 + 25 + 25 + 24.25 + 23.25 + 23 + 21.75 + 21.75 + 21.75 + 21.5 + 22 + 22.25 + 22 + 21.5 + 21.5 + 21.5 + 21.25 + 18 + 18 + 17.25 + 17 + 17 + 17.25 + 17.75 + 17 + 17.75 + 21.25 + 21.75 + 21.75 + 22 + 22 + 22 + 22 + 22 + 22.25 + 22.25 + 22.25 + 22.25 + 22.25 + 22.25 + 22.25 + 22.5 + 23.25 + 24.75 + 25.5 + 26.25 + 26.75 + 27.25 + 27.25 + 27.5 + 28 + 28.25 + 28.25 + 28.5 + 28.25 + 28 + 28.25 + 27.75 + 27 + 26.5 + 26.25 + 26 + 25.75 + 25.75 + 25.75 + 26.25 + 26.5 + 25.75 + 25.5 + 25.75 + 26 + 26.25 + 25.25 + 25 + 24.25 + 23.75 + 22 + 21.5 + 20.75 + 20.75 + 20.5 + 20.75 + 20.5 + 20 + 19.75 + 19 + 18.75 + 19 + 19.5 + 20 + 20.75 + 19.75 + 18.75 + 18.75 + 19 + 20 + 19.25 + 19 + 18.75 + 18 + 21.75 + 22.75 + 21.25 + 19.75 + 19.5 + 19.5 + 19.5 + 20 + 20.5 + 21 + 23.75 + 24.75 + 25.25 + 26.5 + 24.75 + 26.25 + 27.5 + 26.75 + 24.25 + 24 + 22.25 + 22 + 21.75 + 21.5 + 22 + 24 + 24 + 24 + 24.25 + 25.5 + 27 + 27.25 + 27.25 + 28 + 28.25 + 28.5 + 31 + 31.75 + 29.75 + 27.75 + 26.5 + 26.25 + 26.25 + 19.75 + 20 + 19.5 + 18.25 + 17 + 15.5 + 15.25 + 15.25 + 15.25 + 14.75 + 14.25 + 14.75 + 16 + 14.5 + 12.75 + 12.25 + 12.5 + 11.75 + 10.5 + 10.5 + 11.75 + 11.25 + 11.25 + 16.75 + 19.75 + 18 + 17.5 + 17.25 + 18 + 19.5 + 15 + 14.25 + 14.5 + 15.5 + 15.75 + 16.25 + 16.25 + 15.5 + 14 + 13.25 + 12.5 + 11.75 + 11.75 + 11.5 + 11.75 + 10.5 + 10.5 + 10.75 + 11.25 + 11.75 + 12.25 + 13.5 + 14.75 + 14.25 + 14.5 + 15 + 15 + 14 + 13.5 + 13.5 + 14.75 + 14 + 13.25 + 12.75 + 12.5 + 12.75 + 14.5 + 14.5 + 13.75 + 14.5 + 15 + 16.25 + 16.25 + 16.25 + 16.25 + 16 + 16.25 + 16.25 + 16.25 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 12 + 12 + 12 + 11.5 + 11.5 + 12.25 + 12.75 + 13.5 + 13.75 + 13.75 + 13.5 + 13.5 + 13.25 + 12.5 + 12 + 12 + 12 + 12 + 12 + 12.25 + 12.25 + 12.25 + 12 + 12.25 + 12 + 12.25 + 12 + 12 + 12 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 11.25 + 12.25 + 14 + 14.5 + 14.5 + 14.5 + 14.5 + 14.5 + 14.25 + 15.25 + 17.25 + 19.25 + 21.75 + 23.5 + 25.5 + 26.75 + 26.25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 25 + 24.75 + 25 + 25.5 + 26 + 26.5 + 27 + 27.25 + 27.75 + 30.5 + 33 + 33.75 + 33.25 + 33 + 33.25 + 33.75 + 34.25 + 35.25 + 35.75 + 35.5 + 35.5 + 36.25 + 37 + 36.5 + 35.75 + 34.5 + 31.75 + 31.25 + 31.25 + 30 + 29.75 + 28.5 + 28 + 28 + 28 + 28 + 28 + 28.5 + 29.25 + 30.75 + 31 + 30 + 28.5 + 28.25 + 25.75 + 25.25 + 25 + 25 + 25.5 + 25.5 + 24.25 + 24.25 + 19.5 + 15.75 + 14.75 + 13.75 + 13 + 12.75 + 12.75 + 12.75 + 13 + 13.25 + 13.25 + 14 + 14 + 14 + 14 + 13.5 + 13.25 + 14 + 14 + 13.5 + 13.25 + 13 + 13.25 + 13 + 12.5 + 12 + 10.75 + 10.5 + 10.5 + 10.5 + 10.5 + 10.75 + 10.75 + 11 + 11 + 11 + 11.25 + 11.5 + 11.5 + 11.75 + 11.75 + 12 + 12.25 + 12.5 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.25 + 11.75 + 11.5 + 11 + 14 + 12.75 + 13.5 + 14.25 + 15 + 15 + 16.25 + 17 + 20.25 + 21.5 + 21 + 21 + 21.5 + 22.25 + 22.5 + 23 + 22.75 + 22.75 + 22.25 + 22 + 22.75 + 22.75 + 22.5 + 22.5 + 22.25 + 22 + 22 + 21.75 + 21.5 + 21.5 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 21.75 + 22.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.5 + 24 + 24.75 + 24.75 + 25 + 25.5 + 25.75 + 26 + 26.25 + 26.75 + 26.75 + 26.5 + 26.5 + 26.5 + 26.5 + 26.75 + 27 + 27.25 + 27.5 + 29.75 + 32.25 + 33.5 + 34.5 + 35 + 35.5 + 36.25 + 36.25 + 36.25 + 36 + 36 + 36 + 36 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 35.25 + 31.5 + 29.75 + 29.5 + 25 + 23 + 21.5 + 20 + 18 + 17 + 16.25 + 16.5 + 16.75 + 15.75 + 15.5 + 15 + 14.5 + 14.25 + 14.25 + 13.5 + 13.5 + 14.5 + 14.75 + 14.5 + 14 + 13.5 + 12.75 + 13 + 12.75 + 12 + 12 + 11.75 + 11.25 + 11 + 11 + 11.25 + 11.75 + 12.75 + 13.5 + 13.75 + 13.25 + 12.75 + 12.75 + 16.5 + 17.75 + 18.25 + 18.25 + 18.25 + 17.25 + 16 + 16 + 15.75 + 15.75 + 15.25 + 15.25 + 16.25 + 16.75 + 16.5 + 16.25 + 16 + 16 + 16 + 16 + 15.75 + 15.75 + 18 + 18 + 18 + 18.5 + 19.25 + 17.75 + 17.25 + 16.25 + 17 + 17.25 + 17.25 + 17.5 + 17.75 + 18 + 18 + 18.5 + 18 + 17.75 + 17.5 + 17.5 + 17.25 + 17 + 17.25 + 17.5 + 17.75 + 17.5 + 17.5 + 18.75 + 19 + 19 + 19.5 + 23.25 + 23.5 + 23.75 + 23.25 + 23.5 + 24 + 24 + 24 + 24 + 24 + 24 + 24.25 + 24.25 + 24.25 + 24.5 + 25 + 25.25 + 25.5 + 23.75 + 23.5 + 23.25 + 23 + 22.75 + 23.25 + 24.5 + 25.75 + 25 + 24.75 + 24.5 + 24.25 + 24 + 22.5 + 21.75 + 21.25 + 21.75 + 22 + 31.5 + 31.75 + 31.75 + 31.75 + 31.75 + 32.25 + 31 + 28.75 + 28.25 + 27.75 + 27.5 + 28.25 + 28 + 28.25 + 31.25 + 39.25 + 39 + 39 + 38.75 + 38.5 + 37.5 + 37.25 + 37.5 + 37.5 + 36.5 + 33.75 + 33 + 32.25 + 32 + 32 + 27.75 + 24.25 + 22.25 + 21.25 + 19.25 + 20.5 + 21.5 + 21 + 20.5 + 20.5 + 19.75 + 17.25 + 15 + 15.5 + 17.5 + 18.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.75 + 16.75 + 16.25 + 16 + 16 + 16.25 + 16.5 + 17.75 + 18.75 + 19.25 + 19.25 + 19 + 19 + 19.75 + 17.75 + 17.5 + 16.5 + 16 + 15.75 + 15.25 + 15 + 15 + 15.25 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.25 + 15 + 15 + 15 + 14.75 + 14.75 + 14.75 + 14.75 + 14 + 13.75 + 13.25 + 13.5 + 13.25 + 13.25 + 13.25 + 13.25 + 13.75 + 13.25 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13.25 + 13.75 + 14 + 14.25 + 14.5 + 14.75 + 14.75 + 15.75 + 16.5 + 16.5 + 17.25 + 16.25 + 16 + 16 + 15.5 + 15.25 + 14.5 + 14.25 + 13.75 + 13.5 + 14 + 14.25 + 14.75 + 13.5 + 14 + 15.25 + 15.75 + 17 + 18.5 + 19.75 + 22.25 + 25 + 25.5 + 26.25 + 31.5 + 36.25 + 31 + 30 + 29.75 + 29.75 + 30.25 + 31.5 + 32.25 + 28.75 + 25.75 + 25.75 + 26 + 26 + 26 + 27 + 28.25 + 29 + 30.75 + 31.25 + 30.5 + 30 + 29.25 + 29 + 29.5 + 29.75 + 29.75 + 29.25 + 28.75 + 28 + 28.75 + 29.5 + 29 + 29 + 28.75 + 28.75 + 28 + 28 + 28 + 28 + 28.25 + 28.5 + 28.5 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 29.75 + 30 + 30 + 30 + 30.25 + 30.25 + 30.25 + 30.25 + 30.25 + 30.25 + 29.75 + 29.25 + 29.25 + 29.5 + 30 + 30.5 + 31 + 32.25 + 32.25 + 30.25 + 27.75 + 30.25 + 32 + 32.25 + 32.25 + 33 + 34.5 + 34.25 + 33.5 + 32.5 + 32.25 + 32 + 32 + 32 + 33.25 + 33.75 + 31.75 + 30.5 + 30 + 29.5 + 29 + 29 + 29 + 29 + 27.75 + 27 + 26.5 + 26.25 + 26 + 26.5 + 27.75 + 27.25 + 26.75 + 25.5 + 26.25 + 26.25 + 26.25 + 25.5 + 25 + 25 + 24.5 + 23.5 + 21.75 + 21 + 14.25 + 13.75 + 13 + 12.75 + 12.5 + 12.5 + 12.75 + 12.75 + 12.5 + 12.25 + 12 + 11.75 + 11.75 + 11.75 + 11.5 + 11.5 + 11 + 10.75 + 10.5 + 10.25 + 10 + 10 + 10 + 10.25 + 10.5 + 10.5 + 11 + 11 + 11 + 11 + 11 + 11 + 11.25 + 11.25 + 11.75 + 12.25 + 12.75 + 13 + 14.25 + 16 + 17 + 18.25 + 19.25 + 21.5 + 22.5 + 23.25 + 23.75 + 24.5 + 24.5 + 24.5 + 24 + 24 + 24 + 24.25 + 24.5 + 25 + 25.75 + 26 + 26.5 + 27 + 27 + 27.25 + 27.25 + 27.75 + 28 + 27.75 + 27.25 + 27.75 + 28.5 + 29 + 29 + 28.75 + 28.5 + 28.25 + 27.75 + 27.5 + 28.25 + 28.75 + 29.25 + 29.5 + 28.25 + 27.5 + 26.25 + 22.5 + 22 + 21.25 + 21.25 + 21.25 + 21.25 + 21.5 + 21.25 + 21 + 20 + 19.5 + 19.25 + 19.25 + 18.75 + 18.5 + 18.25 + 16.75 + 16 + 14.25 + 14.25 + 14.5 + 14.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 13 + 13 + 13 + 13.5 + 13.25 + 14.5 + 15 + 14.25 + 14 + 14 + 14 + 14.25 + 13.5 + 14.25 + 14.25 + 15.5 + 16 + 15.75 + 16 + 15.75 + 15 + 15 + 15 + 15.75 + 16.5 + 16.25 + 16 + 16.25 + 17 + 16.75 + 16.75 + 16.75 + 16.75 + 17 + 16.75 + 16.5 + 16.5 + 16.5 + 16.5 + 16.25 + 16.25 + 15.25 + 15 + 13.75 + 13.5 + 14.25 + 14.5 + 14.25 + 14 + 13.75 + 13.75 + 13.75 + 13.5 + 13.5 + 13.25 + 13.25 + 13.25 + 13 + 12.75 + 12.75 + 11.25 + 10.5 + 10 + 10 + 9.25 + 9 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8 + 8 + 7.5 + 7.25 + 7 + 6.75 + 6.25 + 5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.25 + 5.25 + 5 + 4.5 + 4.5 + 4.25 + 3.5 + 3 + 3 + 3 + 3.25 + 3 + 3 + 3 + 2.75 + 2.5 + 2.5 + 2.25 + 2.25 + 2.25 + 2 + 1.75 + 1.75 + 1.5 + 1.5 + 1.5 + 1.75 + 1.75 + 1 + 1 + 1.25 + 1.25 + 1.25 + 1.25 + 1.5 + 1.75 + 1.75 + 1.75 + 1.75 + 2 + 2 + 2 + 2.25 + 2.5 + 2.75 + 2.75 + 3 + 3.25 + 4 + 4.25 + 4.25 + 4.5 + 4.75 + 5 + 5 + 5.25 + 5.5 + 5.5 + 5.5 + 5.75 + 6 + 6.25 + 6.5 + 6.75 + 6.75 + 7 + 7 + 7 + 7 + 6.75 + 7 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 6.75 + 6.75 + 7 + 6.5 + 5.75 + 4.25 + 4 + 3.5 + 3.25 + 2.75 + 2.25 + 1.75 + 1.75 + 1.5 + 1.25 + 1.5 + 1.5 + 1.5 + 1.75 + 1.75 + 1.75 + 1.75 + 1.75 + 1.5 + 2 + 1.5 + 1 + 1 + 1 + 1.25 + 1.25 + 1.5 + 1.75 + 1.75 + 1.75 + 1.25 + 1 + 1 + 1.25 + 2.5 + 2.25 + 1.75 + 2 + 2 + 2 + 2.25 + 2.75 + 3 + 3 + 2.75 + 3.25 + 3.5 + 3.25 + 4.5 + 4.75 + 4.75 + 5 + 5.5 + 6.25 + 7 + 7.5 + 7.75 + 7.75 + 7.5 + 7.5 + 7 + 7 + 7 + 7.5 + 7.75 + 8.75 + 9.75 + 10 + 10.25 + 11 + 11 + 11 + 9.75 + 10 + 10.25 + 11 + 11.25 + 11.75 + 11.5 + 11.25 + 11.25 + 11 + 10.75 + 10.75 + 10.75 + 11 + 11.5 + 11.75 + 11.75 + 11.75 + 11.75 + 12 + 12.5 + 13.25 + 13.75 + 15.25 + 15.5 + 15.75 + 15.75 + 15.75 + 15.75 + 15.25 + 15 + 15.5 + 15 + 14.25 + 13.25 + 13 + 12.25 + 9.25 + 9 + 8.25 + 4.5 + 3.5 + 2.75 + 3.5 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.5 + 3.75 + 4.5 + 5 + 7.25 + 7.5 + 7.75 + 8 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 9.25 + 9.5 + 9.75 + 9.5 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.25 + 9.25 + 9.25 + 9.75 + 9.75 + 9.75 + 10 + 10 + 10 + 10 + 12.75 + 14.25 + 14.5 + 15 + 15 + 16 + 16.25 + 15.5 + 15.25 + 14.25 + 12.75 + 11.25 + 11.25 + 11 + 10.75 + 10.5 + 9.75 + 9.25 + 8.75 + 8.25 + 7.75 + 7 + 5 + 5 + 5 + 5.25 + 5.25 + 5.75 + 5.75 + 5.25 + 4.75 + 4.25 + 4 + 4.25 + 4.25 + 4.5 + 4.5 + 4.75 + 5 + 5.25 + 6.5 + 7.5 + 8.5 + 9.5 + 10 + 10.5 + 11 + 11.75 + 13.75 + 14.25 + 14.5 + 15 + 14.75 + 15 + 15.5 + 16.25 + 16.75 + 17.25 + 19.25 + 19.5 + 20 + 20 + 21 + 22 + 22.5 + 22.75 + 22.5 + 21.75 + 21.5 + 20.25 + 19.25 + 19 + 19 + 19 + 19 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19 + 19 + 19 + 18.5 + 18.25 + 17.75 + 17.75 + 17.75 + 18 + 19.25 + 19.5 + 20.25 + 20.5 + 20.75 + 21 + 21 + 21 + 21 + 20.75 + 20.75 + 20.5 + 20.25 + 19.75 + 19.25 + 18.75 + 18.25 + 17.5 + 17 + 16.5 + 15.75 + 14.5 + 13.75 + 13.25 + 12.5 + 10.75 + 10.75 + 10.75 + 10.5 + 10.25 + 10.25 + 10 + 9.25 + 9 + 9 + 9 + 9 + 9 + 8.75 + 8.25 + 8 + 8 + 8 + 8 + 8.25 + 9 + 8.75 + 8.75 + 8.5 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8.5 + 8.25 + 8.25 + 7.75 + 7.5 + 7.75 + 7.25 + 6.25 + 5.5 + 5.5 + 5.25 + 4.25 + 3.75 + 3 + 2.25 + 2.25 + 2 + 2 + 2 + 2 + 1.75 + 1.75 + 1.75 + 2 + 2.25 + 2.25 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.25 + 2.25 + 2.25 + 2 + 2 + 2 + 2 + 1.5 + 1.5 + 1.5 + 1.5 + 1.5 + 2.25 + 2 + 2 + 2 + 2.75 + 3.5 + 3.25 + 3.25 + 2.75 + 2.5 + 3 + 3 + 2.5 + 2.25 + 2.5 + 2 + 2 + 2 + 2.5 + 2 + 1.5 + 1.75 + 1.75 + 1.25 + 2 + 2 + 2.25 + 3 + 2.5 + 2.25 + 2.25 + 2 + 2 + 2.75 + 2.75 + 2.75 + 3 + 3 + 3.25 + 3.25 + 3.5 + 3.5 + 3.75 + 4.25 + 4.75 + 5.25 + 5.75 + 5.75 + 5.75 + 5.5 + 5 + 5.25 + 6.5 + 7.5 + 8.75 + 7.25 + 7.25 + 7.5 + 7.75 + 9 + 9.5 + 9 + 9.25 + 10.5 + 11.5 + 12.5 + 13 + 13.75 + 14.25 + 14.75 + 15.5 + 16.25 + 16.5 + 16 + 14.5 + 13.5 + 13 + 12.25 + 11.5 + 11 + 10 + 9.75 + 9.5 + 9.25 + 8.5 + 8.5 + 8.25 + 8 + 7.75 + 7.75 + 7.5 + 7.25 + 6.75 + 6.75 + 7 + 7.75 + 8 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7 + 7.25 + 7.5 + 8 + 8 + 8 + 7.75 + 7.25 + 6.5 + 6.25 + 6 + 8.75 + 8.75 + 8.75 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 8.25 + 7.25 + 7 + 6.25 + 6 + 6.25 + 6.25 + 6.75 + 7 + 6.75 + 6.75 + 7.25 + 7.5 + 8.25 + 8.75 + 8.5 + 8.5 + 8.75 + 9.75 + 10.25 + 10.5 + 10.75 + 11.25 + 13.25 + 14 + 15.25 + 15.75 + 16.5 + 16.75 + 17 + 17.25 + 17.5 + 17.5 + 17.5 + 17.75 + 18 + 18 + 18.25 + 19 + 18.75 + 19 + 19.25 + 20 + 20.5 + 18.5 + 18.25 + 17.75 + 17 + 16.75 + 16.25 + 16 + 16 + 16.75 + 17 + 16.75 + 16.75 + 16.5 + 16.5 + 16.5 + 16.5 + 16.5 + 16.25 + 16 + 16 + 15.75 + 13.25 + 13 + 12.75 + 10.75 + 10.5 + 10.25 + 10.5 + 11.5 + 12 + 12.5 + 12.5 + 12.75 + 12.5 + 11.75 + 12 + 13 + 13.25 + 13.25 + 13.5 + 13.5 + 13 + 12.5 + 12 + 12.25 + 12.5 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 12 + 9.5 + 9.25 + 9 + 8.25 + 7.5 + 7.25 + 7.75 + 8 + 8 + 8.25 + 7.75 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8.5 + 9.5 + 12.5 + 12.75 + 12.75 + 13.5 + 14.25 + 14.5 + 14.5 + 13.5 + 13 + 14 + 15.5 + 17 + 19.75 + 22.5 + 24 + 26 + 32.75 + 34.5 + 35.5 + 35.5 + 36.25 + 36.5 + 35.75 + 35.75 + 35 + 34 + 34 + 32.25 + 23.5 + 20.25 + 19.25 + 18.25 + 16.25 + 14.5 + 13.75 + 13.25 + 10.5 + 8.25 + 7.25 + 7 + 6.75 + 6.75 + 6.75 + 7 + 7.5 + 7.75 + 8 + 8.25 + 8.75 + 11.5 + 13 + 14 + 14.25 + 14.25 + 14.5 + 14.5 + 14.5 + 14.5 + 14.75 + 14.75 + 14.75 + 14.5 + 14.5 + 14.5 + 14.5 + 14.25 + 14.25 + 14 + 13.75 + 13.75 + 14 + 15.5 + 16 + 15.5 + 15.25 + 14.5 + 13.75 + 12 + 10.75 + 10.5 + 10.25 + 10 + 9.5 + 8.75 + 8.25 + 8 + 8 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 7.5 + 7.5 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7.5 + 7.5 + 7.75 + 8 + 8 + 8 + 8 + 7.75 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.75 + 6.5 + 6.25 + 6 + 6 + 6 + 6 + 6 + 5.5 + 5 + 4.75 + 4 + 3.5 + 3 + 3.25 + 3.25 + 2.5 + 2 + 1.5 + 2 + 3 + 3 + 3 + 3.25 + 4 + 5.5 + 6.25 + 6.75 + 6.5 + 8.5 + 9 + 8.75 + 6.75 + 6.5 + 6.5 + 6.25 + 6.25 + 6.25 + 3.5 + 3.5 + 3.25 + 3.75 + 5.5 + 7 + 8.75 + 10 + 11 + 12.5 + 13.5 + 14.25 + 14.5 + 14.5 + 14.75 + 14.75 + 14.5 + 14 + 15.5 + 13.75 + 13.75 + 15.25 + 15.5 + 14 + 14.25 + 12.25 + 10.75 + 9 + 8.75 + 8.5 + 6 + 6 + 6 + 7.75 + 8 + 8 + 7.75 + 8 + 8 + 8 + 7.75 + 8 + 6.75 + 6 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.25 + 5 + 4.75 + 4.5 + 4.5 + 4.25 + 4.5 + 4.25 + 4.25 + 4.5 + 5.25 + 5.25 + 5.5 + 4.75 + 4.5 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4.25 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 5 + 5 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.25 + 4 + 4 + 4 + 4.25 + 4.25 + 4 + 4 + 3.25 + 3 + 4 + 4.75 + 5.5 + 6.25 + 9.25 + 9.75 + 10.5 + 10.25 + 9.5 + 7.75 + 6.5 + 5 + 4.5 + 4.25 + 4.25 + 4.25 + 2 + 2.25 + 2.75 + 3 + 3.5 + 3.5 + 4.25 + 5 + 5 + 5.5 + 4.75 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7 + 6.75 + 6.25 + 5.75 + 5.25 + 4.25 + 3 + 2.25 + 1.75 + 0.25 + 1.25 + 1.75 + 2.25 + 2.25 + 2 + 1.75 + 1.25 + 2 + 2 + 1 + 1.25 + 1.75 + 1 + 1 + 1.25 + 1 + 1.25 + 1.75 + 1.75 + 1.75 + 1.75 + 1.25 + 1 + 1 + 1 + 2 + 2 + 2 + 2.75 + 2.5 + 2.5 + 2.25 + 4 + 4.5 + 6 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 4.75 + 3.75 + 4.5 + 4.75 + 4.5 + 4.25 + 4 + 8.25 + 8.75 + 8.75 + 10.5 + 11.5 + 12.75 + 18.25 + 20.25 + 20.75 + 19.5 + 20 + 20 + 20.25 + 19.75 + 19.75 + 20 + 20.75 + 21 + 21.75 + 21.75 + 22.5 + 23.5 + 24.25 + 25.25 + 26.5 + 27.25 + 28.5 + 29.75 + 30 + 29.75 + 28.75 + 28 + 27.25 + 27 + 26.75 + 26.5 + 26.75 + 27.25 + 28.25 + 28.75 + 29 + 29 + 28.5 + 27.25 + 26.5 + 26.25 + 25.75 + 25 + 22 + 22 + 22 + 21.75 + 20.75 + 19.75 + 18.25 + 16 + 13.75 + 12.25 + 11 + 10 + 9 + 7.75 + 6.75 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6.5 + 6.5 + 6.75 + 6.75 + 6.75 + 7 + 7 + 7 + 7.25 + 7.25 + 7.5 + 7.25 + 6.5 + 5 + 5 + 5 + 5 + 5 + 5 + 4 + 3 + 4 + 4 + 4 + 5.5 + 6.75 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 7.75 + 8 + 8 + 8.75 + 12 + 11.5 + 9.5 + 11.25 + 10.5 + 10 + 9.25 + 8.5 + 8 + 8.25 + 9.25 + 10 + 10.25 + 10.5 + 11 + 12.5 + 13.75 + 15.25 + 14.75 + 14.25 + 14.25 + 12.5 + 12.25 + 12 + 11.75 + 11.75 + 11.5 + 11 + 10.75 + 11 + 11 + 10.75 + 10.75 + 11.25 + 10.25 + 10.5 + 11 + 11 + 10.75 + 10.5 + 10.75 + 10.5 + 10.25 + 10.25 + 9.5 + 5.5 + 4.75 + 4.75 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.25 + 4.5 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.25 + 3.5 + 3.75 + 4.25 + 5.25 + 5.25 + 5.75 + 6 + 5.75 + 5.75 + 5.75 + 7.25 + 8.5 + 9.75 + 12.5 + 13.5 + 14.5 + 15.25 + 16 + 19.5 + 22.5 + 22.75 + 23 + 28.25 + 30 + 30.25 + 30.5 + 30.5 + 31.5 + 33.25 + 33 + 33.25 + 33.25 + 33.25 + 33 + 32.75 + 30.5 + 28.75 + 27.25 + 26.5 + 26.25 + 26 + 26.25 + 26 + 25.75 + 25.5 + 25.5 + 25.25 + 24.75 + 24.5 + 24.25 + 23.75 + 22.75 + 21.25 + 20.5 + 20.25 + 20.5 + 20.5 + 20.75 + 21 + 21.25 + 21.25 + 21 + 20.25 + 19 + 18.25 + 18 + 17.75 + 15.75 + 14.5 + 14.25 + 14 + 13.75 + 13.5 + 13 + 12.5 + 12.25 + 12.25 + 12.5 + 12.5 + 12.5 + 12.75 + 13 + 13 + 13.5 + 13 + 12 + 11 + 6.25 + 4 + 4 + 3.5 + 3.25 + 3.25 + 3 + 3 + 3 + 3.25 + 3 + 3.25 + 3.75 + 3.5 + 3.5 + 3.25 + 3.25 + 3 + 3 + 3 + 3 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.5 + 3.5 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 5.25 + 5.75 + 5.75 + 6 + 6.25 + 6.5 + 6.5 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 7.25 + 6.75 + 6.5 + 5.75 + 5.25 + 5.25 + 5.25 + 5 + 5 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4 + 4 + 4 + 4.25 + 4.25 + 4.25 + 4.75 + 7.25 + 7.5 + 7.5 + 8 + 7.5 + 6 + 4.5 + 4.5 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 5 + 5.75 + 5.75 + 5.75 + 5.5 + 5.25 + 5.5 + 5.75 + 4.5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.5 + 5.5 + 5.5 + 5.75 + 5.75 + 6.5 + 6.25 + 5 + 5 + 5 + 4.75 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.75 + 4.75 + 5.25 + 5.25 + 5.5 + 5.25 + 5.25 + 4.75 + 4.75 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.25 + 3.75 + 3.75 + 3.5 + 3.5 + 3.5 + 3 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.5 + 3.75 + 4 + 4 + 5.25 + 5.5 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.5 + 5.5 + 5.5 + 8 + 8.25 + 8.5 + 8.5 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 9 + 10 + 10.25 + 10.5 + 10.25 + 10.25 + 9.75 + 10 + 10 + 10.25 + 10.5 + 10.5 + 10.5 + 11 + 11.25 + 11.25 + 11.5 + 12 + 13.75 + 14.75 + 15.5 + 16.25 + 16.25 + 16.25 + 11.5 + 12.75 + 12.5 + 12.5 + 12.75 + 12.75 + 13 + 13.25 + 14 + 14.25 + 15.25 + 17.75 + 18.5 + 18 + 17.75 + 18.75 + 18.5 + 17 + 14 + 13.75 + 13.75 + 13.75 + 13.5 + 13.75 + 14.75 + 14.75 + 15.25 + 15.5 + 15.25 + 15 + 15 + 14.5 + 14.25 + 14.25 + 15.25 + 16.25 + 17.5 + 18.5 + 20.5 + 21.75 + 22.25 + 22.5 + 22.75 + 23 + 22.75 + 21.75 + 20.75 + 20 + 18.25 + 15.5 + 15 + 14.25 + 14 + 13.75 + 13.25 + 12.25 + 12.25 + 12 + 12 + 12 + 12 + 12.25 + 12.25 + 12.5 + 12.5 + 12.75 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.75 + 13.5 + 14.25 + 14.5 + 14.5 + 14.25 + 14.25 + 14 + 18.5 + 20 + 21.5 + 21.75 + 21.75 + 21.25 + 20.25 + 16 + 14.75 + 14.75 + 14.75 + 15 + 15.5 + 16 + 16 + 17 + 18 + 18 + 18 + 18 + 18.25 + 16.5 + 16.75 + 18 + 17.75 + 17 + 16.5 + 15.25 + 16 + 16.5 + 17.75 + 17.5 + 17 + 17.75 + 17.75 + 18 + 18 + 18.5 + 18.5 + 19 + 19 + 19 + 19.25 + 19.5 + 22.75 + 23 + 25.75 + 24.75 + 22.5 + 22.5 + 23 + 23.25 + 22.75 + 21.25 + 19 + 18.25 + 18.25 + 17.75 + 16.75 + 16.25 + 16 + 14.75 + 12.75 + 12.5 + 12.5 + 13 + 14 + 13.75 + 13.5 + 13 + 12.5 + 12.25 + 12 + 12.25 + 12.5 + 13.25 + 13.75 + 14 + 14.5 + 14.75 + 15.75 + 17.5 + 16.5 + 15.75 + 19 + 21.5 + 20 + 21 + 21.75 + 19.5 + 19.75 + 19.75 + 20 + 20.25 + 20.25 + 20.25 + 20.5 + 21 + 22 + 21.5 + 19 + 19.75 + 20 + 20 + 20 + 20.25 + 20 + 20.25 + 20.25 + 16.75 + 16 + 13.5 + 13 + 14.5 + 17.75 + 20.25 + 21.5 + 22 + 21.75 + 21.25 + 20.75 + 20 + 19.5 + 18.75 + 18 + 17.75 + 17.5 + 17.5 + 16.75 + 16.5 + 16 + 15.75 + 15.75 + 15.75 + 15.75 + 16.25 + 16.75 + 17 + 17.5 + 16.5 + 13.5 + 13 + 13.25 + 13.75 + 13.75 + 14 + 14 + 14 + 14.25 + 15.25 + 15.5 + 16.75 + 18.5 + 18 + 15.75 + 16.5 + 18.75 + 22.5 + 25 + 27.25 + 28.5 + 29.25 + 31.5 + 31.5 + 32.5 + 31.5 + 29.5 + 29 + 28.5 + 28 + 27 + 27.25 + 27 + 27.5 + 27.75 + 27.75 + 27.25 + 26.75 + 26.75 + 27 + 27.25 + 27.5 + 27.75 + 26 + 26.25 + 25 + 24.25 + 23.75 + 22.5 + 22.5 + 22.5 + 22.5 + 22.5 + 22.5 + 22 + 24 + 22.5 + 22.75 + 24 + 23.75 + 23.75 + 23.75 + 23.5 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.5 + 23.5 + 23.25 + 23 + 23.75 + 23.75 + 23.75 + 22.5 + 24.75 + 27.75 + 27.75 + 27.25 + 26.25 + 26 + 26 + 26 + 26 + 26 + 27.25 + 28.25 + 30.25 + 31.25 + 31.75 + 32 + 32.75 + 33.75 + 33.75 + 33.5 + 33.25 + 33 + 32.75 + 32.5 + 31.25 + 30.5 + 28.25 + 27.25 + 26.25 + 26 + 25.25 + 24.5 + 23.5 + 21.5 + 20.75 + 20.5 + 20.5 + 20.5 + 20.25 + 19.75 + 19.75 + 19.25 + 19.25 + 19 + 18.5 + 19.25 + 19.5 + 19 + 18.5 + 18 + 16.75 + 16.5 + 16.25 + 16.5 + 16.75 + 19 + 19 + 18 + 14.5 + 14.5 + 14.25 + 14 + 13.5 + 13.75 + 14 + 14 + 14 + 14.5 + 14.75 + 15 + 16.25 + 17 + 17.5 + 17.5 + 17 + 17 + 16.75 + 16.5 + 16.25 + 15.25 + 15 + 14.75 + 14.75 + 12.25 + 12.75 + 12.75 + 12.75 + 12.75 + 12 + 10.25 + 10.5 + 11 + 11 + 11 + 11 + 10.5 + 10 + 11.5 + 17.5 + 18.75 + 20 + 19 + 16.5 + 15 + 11.5 + 11.5 + 11.5 + 12.25 + 12.5 + 12.5 + 12.25 + 12.25 + 12 + 11.75 + 11 + 10.75 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.25 + 10 + 10 + 10 + 10.25 + 11 + 11.25 + 11.25 + 11.25 + 11.25 + 11 + 11 + 10.75 + 10.5 + 11 + 10.75 + 10.75 + 10.75 + 10.25 + 10.25 + 10.5 + 10.5 + 10.75 + 11 + 11.75 + 12.75 + 12.75 + 13 + 12.75 + 12.75 + 12.25 + 12.25 + 12.25 + 12 + 12 + 11 + 10 + 9.75 + 10 + 9.75 + 9.75 + 9.75 + 9.5 + 9.5 + 9.25 + 9.5 + 8 + 7 + 6.75 + 6.25 + 6.25 + 6.25 + 5.75 + 5.75 + 5.5 + 5.25 + 4.75 + 4.5 + 4.25 + 4.25 + 4 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 5 + 4.75 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.5 + 3 + 3.25 + 3.5 + 4.25 + 4.25 + 4.75 + 4.75 + 4.75 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.75 + 4.75 + 5 + 5.5 + 5.75 + 5.75 + 5.75 + 5 + 4.25 + 4 + 4 + 3.75 + 3.75 + 3.5 + 3.5 + 3.5 + 3.75 + 4 + 5 + 5 + 4.5 + 4.5 + 5.5 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4.75 + 4.5 + 4.25 + 4 + 4 + 4 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.25 + 3.25 + 3.5 + 3.75 + 3.75 + 4 + 4 + 4 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 4.5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5 + 5 + 4.75 + 4.75 + 4.75 + 4.5 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.75 + 4.75 + 5 + 5.25 + 5.25 + 5 + 4.75 + 4.25 + 4.25 + 4.5 + 4.75 + 4.5 + 4.25 + 4 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4.25 + 5.5 + 7.5 + 6 + 4.25 + 4.25 + 4.25 + 4 + 4.25 + 6.5 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4.75 + 5.25 + 7.5 + 7.75 + 8 + 8 + 8.25 + 8.25 + 9 + 9.75 + 9.5 + 9.5 + 9.5 + 7.25 + 7 + 7 + 6.75 + 6.5 + 6.5 + 6.25 + 6 + 7.5 + 8.25 + 8.75 + 9.25 + 9.5 + 10.25 + 10.75 + 9.75 + 10 + 10 + 10 + 15.5 + 15 + 14.25 + 11.75 + 10 + 9.75 + 9.5 + 9 + 8.5 + 7.5 + 6.75 + 6.25 + 6 + 6 + 5.75 + 5.75 + 6 + 6 + 6 + 6.25 + 6.25 + 6.5 + 6.5 + 6.75 + 7.5 + 8 + 8.5 + 9 + 9.25 + 9.75 + 10 + 10.25 + 10.25 + 9.25 + 9.25 + 9 + 8 + 8 + 8 + 6 + 6.25 + 6 + 6.25 + 6.75 + 7 + 7 + 7.25 + 7 + 6.5 + 6 + 6 + 6 + 6 + 6.25 + 6.5 + 6.75 + 6 + 5.75 + 5.75 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5 + 5 + 5 + 5.5 + 5.25 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.75 + 6 + 5.75 + 6 + 6.25 + 6.5 + 6.75 + 6.75 + 6.75 + 6.25 + 6.25 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 4.75 + 4.75 + 4.5 + 4.25 + 4 + 3.25 + 2.25 + 2.5 + 2.5 + 2.75 + 3.25 + 3.5 + 3.5 + 4.25 + 4.75 + 5 + 5 + 5 + 4.75 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 3.75 + 3.25 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 3 + 3.25 + 3.25 + 3.5 + 3.75 + 3.5 + 3.25 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.75 + 5 + 5.5 + 5.75 + 6 + 6 + 6 + 6 + 6.25 + 8 + 11 + 11.5 + 11.5 + 10.75 + 10 + 9 + 8.75 + 6.5 + 6 + 5.75 + 6 + 6 + 6 + 6.25 + 6.5 + 5.75 + 5.75 + 5.75 + 6 + 6 + 6.25 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 7.75 + 7.75 + 8 + 8 + 8.5 + 8.25 + 7.5 + 7.25 + 7.25 + 7.25 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 7 + 7 + 7.75 + 7.75 + 8.5 + 9.75 + 9.75 + 9 + 8.25 + 7.25 + 6.75 + 6.25 + 5.5 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.5 + 5.5 + 5.75 + 6 + 6 + 6 + 7 + 7.25 + 7.5 + 7.5 + 7.25 + 7.25 + 7.25 + 6.75 + 6 + 7 + 7 + 8.25 + 8.5 + 9 + 8.5 + 8.25 + 8.25 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.5 + 6 + 5.75 + 6 + 6.25 + 6.25 + 7 + 7.25 + 11.5 + 12.5 + 13.25 + 17 + 17.25 + 17 + 16.75 + 14.25 + 13.75 + 12.75 + 11 + 9.5 + 8 + 7.25 + 6.5 + 6.25 + 6.25 + 6 + 6 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.25 + 4.75 + 4.75 + 5 + 5.25 + 5.5 + 5.75 + 5.75 + 6 + 8.5 + 9.75 + 9.5 + 7.25 + 7.25 + 6.5 + 6.25 + 6 + 6.25 + 6 + 5.25 + 5 + 4.75 + 4.25 + 4.5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.25 + 6 + 6.75 + 6.25 + 6 + 6 + 6 + 6.5 + 7.5 + 7.75 + 7.75 + 7.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 6 + 6 + 6.5 + 7 + 7.25 + 7.25 + 7.5 + 7.5 + 8.25 + 8.25 + 8.5 + 8.75 + 8.5 + 8.25 + 8.25 + 8 + 8.25 + 8.5 + 9.25 + 10.25 + 10.75 + 11.75 + 12.5 + 13 + 13.5 + 15.5 + 16 + 16.5 + 16.75 + 17 + 17.25 + 17.5 + 17 + 17 + 17 + 17 + 16.75 + 16.5 + 16.25 + 16.25 + 16 + 14.25 + 13 + 12.5 + 12.25 + 11.75 + 11.5 + 11.25 + 10.75 + 10.75 + 10.75 + 10.75 + 11 + 11 + 11.25 + 11.25 + 12.25 + 12.75 + 13.75 + 14.75 + 14.75 + 14.5 + 14.75 + 14.75 + 15 + 15 + 15.25 + 15.25 + 15.5 + 15.75 + 19 + 19.5 + 20 + 20.25 + 20.75 + 21 + 21 + 20.75 + 20.25 + 19.75 + 16 + 15 + 14 + 13 + 10.5 + 8 + 6.5 + 5.25 + 5 + 5 + 5 + 4.75 + 4.5 + 4.25 + 4.25 + 4.5 + 4.25 + 3.5 + 4.75 + 4.25 + 3.75 + 3 + 2.5 + 3.75 + 6.75 + 6.25 + 6 + 5.75 + 5.75 + 6 + 6.25 + 7 + 6.5 + 5.25 + 5 + 4.25 + 4 + 4.5 + 5 + 5.25 + 5.75 + 8.25 + 8.75 + 8.75 + 8.5 + 8 + 7.75 + 7.5 + 7.25 + 7.25 + 7.75 + 8 + 8.25 + 9.5 + 10.75 + 11 + 11.25 + 11.5 + 12.5 + 13 + 12.75 + 12.5 + 12.5 + 12.5 + 12.5 + 12.75 + 14.5 + 14.5 + 14.25 + 14.25 + 13.75 + 14 + 15.25 + 18 + 18 + 17.75 + 16.75 + 12.25 + 8.75 + 8.5 + 8.5 + 9 + 9.25 + 9.25 + 9.5 + 11.75 + 11.5 + 13 + 19 + 15.25 + 13 + 14.5 + 18.75 + 19.25 + 19.25 + 17 + 11.25 + 11.5 + 6.25 + 2.75 + 6.5 + 10.5 + 12.5 + 14.5 + 16 + 15 + 14 + 13 + 11 + 9.25 + 8.5 + 6.75 + 6.5 + 6.25 + 5.5 + 4 + 4 + 4.25 + 4.25 + 4.5 + 4.5 + 4.75 + 5 + 5 + 5 + 5.75 + 5.75 + 5.75 + 6.25 + 6.5 + 6.5 + 6.75 + 6.75 + 7 + 7.5 + 8.25 + 8 + 8 + 7.5 + 7 + 7 + 7.25 + 7.5 + 6 + 4.5 + 4.5 + 4.5 + 4.5 + 4.25 + 4 + 3.75 + 3.25 + 2.75 + 2.25 + 2 + 2.5 + 2.75 + 2.75 + 3 + 3.25 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 5.75 + 6.25 + 7 + 6.75 + 6.25 + 5.75 + 5.25 + 5 + 4.75 + 4.75 + 4.75 + 5.25 + 5 + 4.75 + 4.5 + 4 + 3.75 + 3.25 + 3.25 + 3.5 + 3.5 + 4 + 3.75 + 4 + 4 + 4.5 + 4.75 + 5.25 + 7.75 + 9.25 + 14 + 13.25 + 13.5 + 14.5 + 15.75 + 20.25 + 15.25 + 13.75 + 13.5 + 11.5 + 9.5 + 8.75 + 8.5 + 7 + 7 + 7 + 7 + 6.5 + 6.25 + 5.5 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.5 + 4.75 + 5 + 5 + 7.75 + 10.75 + 11.75 + 12 + 11.5 + 11 + 8.75 + 8 + 7.75 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.5 + 7.75 + 7.75 + 8.25 + 8.75 + 9.25 + 10.75 + 11.5 + 12.25 + 13.75 + 14.75 + 15.25 + 15.5 + 15.5 + 15 + 14 + 13.75 + 13 + 12.5 + 10.25 + 8.75 + 8.25 + 7.25 + 5 + 2.75 + 1.5 + 1 + 0 + -0.5 + -1.75 + -2.5 + -4 + -4 + -3.25 + -1.75 + 0.75 + 0.75 + 1 + 1 + 0.75 + 0.5 + 0.75 + 0.75 + 1 + 1.25 + 1.5 + 1.5 + 1.5 + 1.75 + 2.75 + 3 + 3.25 + 3.5 + 3.5 + 3.75 + 3.5 + 4 + 4.5 + 4.5 + 4 + 3.5 + 3.25 + 2.75 + 2.5 + 2.25 + 1.75 + 1.5 + 4 + 4.75 + 5.5 + 6 + 7 + 7.25 + 8 + 8.25 + 8.75 + 8.5 + 8.5 + 8.75 + 8.75 + 8.75 + 8.5 + 7.5 + 7.25 + 6.75 + 6.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5 + 3.75 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.75 + 4.5 + 4 + 4.25 + 4.25 + 4.75 + 5 + 5.75 + 6 + 5.75 + 5.5 + 4.75 + 4 + 3.5 + 3.25 + 4.5 + 5.25 + 6.25 + 6.5 + 7.25 + 6.5 + 5.75 + 5.75 + 5 + 5.25 + 5.5 + 5.75 + 6 + 6.25 + 6.5 + 6.75 + 7.25 + 7.25 + 7.25 + 7.75 + 8 + 8.25 + 11.25 + 11.25 + 11.25 + 11.5 + 11.5 + 11.75 + 11.75 + 12.25 + 12.25 + 12.5 + 12.5 + 12.5 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 13 + 13.5 + 14 + 13.75 + 13.75 + 13.5 + 13 + 12.75 + 12.25 + 12.25 + 12 + 10.75 + 10.75 + 10.25 + 10 + 10.5 + 10.5 + 10.5 + 10.5 + 10.5 + 10.5 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10 + 10 + 10 + 10.25 + 10.5 + 10.5 + 10.75 + 10.5 + 9.75 + 9.25 + 8.75 + 8.5 + 8.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.75 + 7 + 7.75 + 8 + 8.25 + 8.75 + 9.75 + 10 + 10.5 + 10.75 + 11 + 11.25 + 11.75 + 11.75 + 12 + 12 + 12.5 + 13.5 + 14 + 14.5 + 16.75 + 17.25 + 17.75 + 18.5 + 19.5 + 21.5 + 24 + 26.75 + 28 + 31 + 33.75 + 35 + 40.5 + 41.25 + 41.5 + 41.75 + 41.75 + 41.75 + 42 + 42 + 41.75 + 41.75 + 41.75 + 41.75 + 40.75 + 40.25 + 40.25 + 40.5 + 41 + 40 + 40.5 + 40.75 + 41 + 41 + 40.5 + 40 + 39 + 38.75 + 38 + 37.75 + 37.5 + 37.25 + 37.25 + 37.25 + 36.75 + 36.25 + 35.75 + 35.5 + 35.25 + 35 + 32.75 + 32.75 + 32.75 + 32.75 + 32.75 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32.5 + 32.5 + 32.75 + 33 + 33.5 + 33.75 + 34.75 + 38.5 + 40.75 + 42.25 + 43.5 + 42.75 + 41.25 + 40.5 + 39 + 38.75 + 39.25 + 40 + 40.25 + 40.25 + 40.25 + 40.25 + 40 + 40 + 39.75 + 39.5 + 37 + 35.75 + 34.5 + 32.5 + 28.75 + 26.5 + 26 + 26 + 26 + 26.25 + 26 + 25.75 + 25.75 + 25.75 + 25.25 + 25.25 + 25 + 25 + 25 + 25.5 + 25.75 + 25.75 + 25.25 + 25 + 24.5 + 24.25 + 23.5 + 22.25 + 22.25 + 22.25 + 22.25 + 21.75 + 21.5 + 21.5 + 21.5 + 21.75 + 22 + 22 + 21.75 + 21.75 + 21.75 + 21.5 + 21.5 + 21.5 + 21.75 + 21.5 + 21.5 + 23 + 24 + 24 + 24 + 23.75 + 23.25 + 23.25 + 23.25 + 23.5 + 23.75 + 24 + 23.75 + 23 + 22.5 + 22.25 + 22 + 21.5 + 21.25 + 21 + 20.75 + 20.5 + 20 + 20 + 20.25 + 20.75 + 21.5 + 22 + 22 + 21.75 + 21.25 + 21 + 21 + 20.75 + 20.75 + 21 + 21.25 + 21.25 + 21.25 + 21.25 + 21 + 21 + 21.25 + 22.25 + 24.5 + 25 + 25.5 + 26.75 + 27 + 26.75 + 26.75 + 24.5 + 23 + 22.5 + 22 + 22.75 + 22.75 + 23 + 24 + 23.75 + 22.5 + 22.25 + 22 + 22 + 20.75 + 20.75 + 20.75 + 20.5 + 20.5 + 20.5 + 20.5 + 20.5 + 20.25 + 19.75 + 19.75 + 19.5 + 19.25 + 19.25 + 19 + 19.25 + 22.5 + 22.5 + 23 + 23 + 23 + 23.25 + 23.75 + 24.5 + 24.5 + 24.75 + 25 + 25 + 26 + 26 + 26 + 25.75 + 26 + 27.25 + 29 + 31 + 31.5 + 31.75 + 32.75 + 33 + 33.25 + 33.25 + 33.25 + 33.5 + 34.25 + 35.75 + 36.25 + 35.75 + 35.5 + 35 + 34.5 + 33.75 + 27 + 26.75 + 26.75 + 26.5 + 31 + 31.5 + 31.75 + 31.75 + 32.25 + 33.75 + 34 + 34.5 + 35.25 + 36.5 + 37.25 + 37.5 + 37.75 + 38.25 + 38.25 + 38.25 + 38.25 + 38.5 + 39.25 + 42.75 + 44.5 + 45 + 45.5 + 46.25 + 45.5 + 43.25 + 41.75 + 41 + 40.5 + 40 + 39.5 + 38.25 + 37 + 36.75 + 33 + 34.25 + 41 + 42.75 + 44.5 + 46.25 + 53.5 + 54.75 + 56.75 + 59 + 60 + 62.25 + 64.25 + 65.25 + 66.75 + 66.5 + 64.75 + 61.5 + 59 + 57.75 + 57 + 54.75 + 53 + 52.25 + 52.25 + 52.25 + 52.5 + 52.5 + 52.5 + 52.25 + 51.5 + 51.25 + 47.5 + 47.25 + 47 + 48.25 + 48.5 + 48.75 + 49 + 49 + 49.25 + 49.5 + 53.25 + 53.25 + 53.5 + 54 + 55.75 + 54.75 + 54.5 + 47.25 + 42.25 + 40.25 + 36.75 + 36 + 35.5 + 33.25 + 32.25 + 32 + 31.75 + 31 + 30.5 + 29.75 + 28 + 27.75 + 27.75 + 27.25 + 26.25 + 26.25 + 25.5 + 25 + 25.75 + 27.25 + 28.75 + 31 + 31 + 31 + 30.75 + 29 + 29.5 + 29.75 + 30.25 + 30.5 + 30.5 + 30.75 + 31 + 31 + 31 + 31.25 + 31 + 30.5 + 30 + 30 + 30.25 + 30.5 + 31 + 31.5 + 31.75 + 31.25 + 31 + 30.5 + 30.5 + 31.5 + 31.75 + 32.5 + 33 + 33 + 33 + 32.25 + 28.5 + 28.25 + 28.25 + 28 + 27.75 + 26.75 + 27 + 26.75 + 26.75 + 26.5 + 26.5 + 26.5 + 27 + 27.25 + 27.25 + 27.25 + 27.25 + 27.5 + 27.5 + 27.75 + 28 + 28 + 28 + 28 + 27.75 + 27.75 + 27.75 + 27.75 + 29 + 30 + 31 + 32.75 + 34.75 + 34.5 + 34 + 31.75 + 28.5 + 27.25 + 27 + 29 + 31 + 35.25 + 37.5 + 37 + 29 + 27.5 + 27.5 + 30.25 + 32.75 + 36 + 37 + 36.75 + 36.5 + 35.75 + 34.75 + 33.75 + 32.75 + 34 + 35.5 + 34.75 + 34.75 + 36.75 + 37 + 34 + 33 + 32.5 + 32 + 31 + 32.25 + 31.25 + 29.75 + 27.75 + 26 + 25 + 25 + 25 + 25 + 24.5 + 24.25 + 23.75 + 22.75 + 21.75 + 21.75 + 21.25 + 20.5 + 20 + 18.75 + 17.75 + 17 + 15.5 + 15.5 + 15.25 + 15 + 14.75 + 14.75 + 14.25 + 12.75 + 11.25 + 10.75 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10.75 + 11.5 + 12 + 12.5 + 12.75 + 12.75 + 13 + 13.25 + 13.75 + 13.75 + 14.5 + 17.75 + 18.5 + 19 + 19 + 18.5 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 17.75 + 18.25 + 18.25 + 18.75 + 18.75 + 18.75 + 18.5 + 18.25 + 18 + 18.5 + 19 + 21.25 + 21.75 + 22.5 + 23 + 23.5 + 24 + 24.25 + 24.5 + 24.75 + 25 + 27 + 27 + 26.75 + 26 + 23.75 + 24.25 + 24.75 + 25.25 + 26 + 25.25 + 25 + 24.75 + 24.25 + 22.5 + 22 + 18.25 + 18.25 + 18.25 + 18.75 + 19 + 19.25 + 19.5 + 20 + 21 + 19 + 18.5 + 17.75 + 16.75 + 13.5 + 11.75 + 7 + 7 + 6.75 + 6.75 + 7 + 6.75 + 6.25 + 6 + 7.5 + 6.75 + 7.25 + 7.25 + 7 + 7.5 + 7.75 + 7.25 + 7.25 + 7 + 7 + 7.5 + 7.5 + 7.5 + 7.75 + 7.75 + 8 + 8 + 8 + 8.25 + 8.75 + 9.25 + 9.75 + 10.25 + 11 + 11.25 + 12 + 12.5 + 12.25 + 12 + 12.5 + 13.25 + 14 + 15 + 17.25 + 19 + 17.5 + 13.5 + 12.5 + 12.25 + 12.25 + 12.25 + 12 + 12 + 12 + 12 + 12 + 12 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 11 + 11 + 11.25 + 11.25 + 11.5 + 11.75 + 12 + 12.25 + 13 + 13.5 + 13.75 + 14 + 14.25 + 14.5 + 15.25 + 15 + 14.5 + 14.25 + 13.75 + 13.5 + 13 + 13 + 13.75 + 14.75 + 15.25 + 16 + 16.5 + 16.75 + 17 + 19.5 + 21.25 + 21.75 + 22.75 + 23.5 + 24 + 22.25 + 20.5 + 19.25 + 19 + 18.75 + 18.5 + 18.25 + 18 + 16 + 15.5 + 16.25 + 16.5 + 16.5 + 15.75 + 14.75 + 11.5 + 11 + 9.5 + 8.25 + 8 + 8 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.25 + 7 + 7 + 7 + 7 + 6.75 + 6 + 5 + 5 + 5.75 + 4.25 + 3.25 + 3 + 3 + 3 + 2.75 + 2.5 + 2.5 + 2 + 2 + 1.75 + 2.75 + 3.25 + 4.5 + 5.5 + 5.5 + 4 + 2 + 2 + 2 + 2.25 + 2 + 2 + 2 + 2 + 4 + 4.25 + 5.5 + 6.25 + 6.25 + 6.25 + 5.75 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6.25 + 7.25 + 9 + 8.75 + 8.25 + 8.25 + 8 + 7.75 + 7.5 + 7 + 6.75 + 6 + 5.25 + 5 + 4.75 + 4.75 + 4.5 + 4.25 + 4.25 + 4.25 + 4.75 + 5 + 5 + 5 + 5.25 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 6 + 5.25 + 4.5 + 3.75 + 3.25 + 3 + 3 + 2.75 + 2.75 + 1.75 + 2 + 2.5 + 3.75 + 4 + 4.25 + 4.5 + 4.5 + 5 + 5.5 + 5.75 + 5.75 + 6 + 6.25 + 6.75 + 7 + 6.75 + 6.5 + 6.25 + 5.5 + 5.75 + 5.75 + 6 + 6 + 6 + 6 + 6 + 6 + 6.5 + 6.5 + 6.5 + 6.5 + 5.25 + 2.75 + 2.5 + 2.75 + 3.75 + 4.5 + 5.5 + 6.25 + 6.75 + 6.25 + 5.75 + 6.5 + 6.5 + 6.25 + 6.25 + 5.75 + 5.75 + 6 + 6.25 + 6.25 + 5.75 + 5.25 + 5 + 4.75 + 4.5 + 4.25 + 4 + 3 + 2.75 + 2.75 + 2.5 + 3 + 3.25 + 3.25 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.5 + 4.5 + 5 + 5.5 + 6.25 + 6.75 + 7.25 + 8 + 8 + 8 + 7.5 + 6.75 + 6 + 5.75 + 3.75 + 3.5 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.5 + 3.5 + 3.75 + 3.75 + 4 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4 + 3.25 + 3 + 2.75 + 2.75 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.75 + 2 + 2.25 + 3.5 + 3.75 + 3.75 + 3.5 + 3.5 + 3.25 + 2.5 + 2.25 + 2.5 + 2.75 + 3.25 + 3.75 + 4 + 3.5 + 4 + 4 + 4 + 4 + 4.5 + 8 + 9 + 7 + 5.75 + 5.5 + 5.25 + 4.75 + 4.75 + 4.75 + 4.5 + 4.25 + 4.25 + 3 + 3 + 3 + 3 + 3 + 3 + 3.25 + 4 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 4.25 + 6.75 + 6 + 5.75 + 5.25 + 4.75 + 4.5 + 3.75 + 3 + 3.5 + 3.75 + 3.75 + 4 + 5 + 6.25 + 6.5 + 6.75 + 6.5 + 6.5 + 7.75 + 8.5 + 8.75 + 8.75 + 8.5 + 8.25 + 8 + 8 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 9.25 + 9.5 + 9.5 + 9.5 + 9.25 + 9 + 8.75 + 8.75 + 8.25 + 8.25 + 8.25 + 8.25 + 8.5 + 8.5 + 8.75 + 8.75 + 9 + 9 + 9.25 + 9.25 + 9.25 + 9.25 + 9.25 + 9 + 9 + 9.25 + 9.75 + 10 + 10.5 + 11.25 + 11.5 + 12 + 13.25 + 14.5 + 16.5 + 18.25 + 19.5 + 20.25 + 20.25 + 19.5 + 18.75 + 18.25 + 18.25 + 18.5 + 18.5 + 18.5 + 19 + 19.25 + 19.5 + 19.25 + 19.5 + 19.75 + 20 + 17.75 + 19.25 + 20.25 + 21.25 + 22 + 23.5 + 23.75 + 24 + 24 + 23.25 + 22.5 + 20.5 + 19.5 + 18.75 + 18.25 + 18.25 + 18 + 17.25 + 16 + 13.5 + 12 + 11.25 + 11 + 11 + 10.75 + 11.25 + 14.5 + 15 + 15.5 + 16 + 16.75 + 17 + 17 + 17.5 + 17.75 + 18.25 + 18.5 + 18.5 + 18.5 + 18.5 + 18.75 + 19 + 19.25 + 19.25 + 19 + 18.5 + 18 + 18 + 18.5 + 18.5 + 17.5 + 17.5 + 17 + 16 + 14.25 + 13.25 + 12.75 + 12.5 + 12.5 + 12.5 + 12.75 + 13 + 12.75 + 10.5 + 12 + 13 + 13.5 + 14.25 + 16 + 16.25 + 16.75 + 16.75 + 17 + 17 + 17 + 17 + 17 + 17 + 17.25 + 17.25 + 17.25 + 20.25 + 20.5 + 20.75 + 21 + 21.5 + 21.25 + 21.25 + 21.25 + 21.75 + 22.75 + 24 + 24 + 24 + 24 + 24 + 24 + 24.5 + 25 + 25.5 + 26 + 26.75 + 28.25 + 29.75 + 31.5 + 31.5 + 31.5 + 33 + 33.75 + 35 + 36.25 + 36.75 + 38 + 39.5 + 40.75 + 42 + 42.5 + 45 + 46 + 48 + 50 + 51 + 52.75 + 54 + 55 + 55.5 + 55.5 + 52.5 + 50.75 + 51.75 + 53 + 52.75 + 52.25 + 51.75 + 50.75 + 50.75 + 49.25 + 48.5 + 49.75 + 51.25 + 52.25 + 53.5 + 54.75 + 56 + 57 + 57.75 + 58.25 + 59.25 + 59.75 + 60.25 + 61.75 + 63.5 + 65 + 67 + 68.5 + 68 + 66.25 + 66 + 66 + 65.75 + 61.5 + 58.25 + 54.75 + 53 + 51.5 + 50.75 + 49.5 + 49.75 + 52.5 + 54.75 + 56.5 + 58.25 + 62.25 + 63.25 + 63.25 + 63.25 + 62.75 + 62 + 61 + 59.5 + 58 + 55.75 + 54.25 + 53.25 + 52.5 + 51 + 50.25 + 50.75 + 52.5 + 53.25 + 54.5 + 54.75 + 55.25 + 56.25 + 56.75 + 57.5 + 58.5 + 60 + 61.25 + 61.75 + 62 + 62.25 + 62.5 + 63 + 65.25 + 68.5 + 69.5 + 70.25 + 70.75 + 71.75 + 72.75 + 74.5 + 76 + 77 + 77.5 + 78 + 78 + 78.25 + 79.75 + 79.75 + 79.5 + 78.25 + 76.75 + 76 + 72 + 71.25 + 71.25 + 71.25 + 69.25 + 68.5 + 67.75 + 66.5 + 65.75 + 65.5 + 65.5 + 65.5 + 65.5 + 66 + 66.5 + 68.75 + 75 + 76.75 + 77 + 76.75 + 75.75 + 76.5 + 73.25 + 69 + 65.25 + 59.75 + 50.5 + 50.5 + 51.5 + 53 + 53.25 + 53.75 + 56.5 + 59 + 60 + 59 + 58.25 + 57.25 + 56.75 + 56.5 + 56.25 + 56 + 57.25 + 58.5 + 59 + 60 + 60 + 60.75 + 62.25 + 62.5 + 62 + 61.25 + 63.5 + 64 + 63.5 + 61.5 + 60.75 + 62 + 64.25 + 66 + 68 + 70 + 72.25 + 75.25 + 78.5 + 80.75 + 82 + 84 + 85.75 + 85.5 + 84.5 + 81 + 80.75 + 80 + 76 + 75 + 74.75 + 74.5 + 74.25 + 74.25 + 74.25 + 74 + 73.25 + 72 + 76 + 76 + 75.75 + 76.5 + 77.5 + 78 + 77.75 + 70.75 + 65.5 + 60.75 + 57.75 + 56.25 + 55.75 + 55.5 + 55 + 55 + 54.25 + 53 + 52.25 + 51.5 + 50.5 + 50.5 + 50.5 + 50 + 49.25 + 48.25 + 44.75 + 43.25 + 42.5 + 42.5 + 43 + 43.75 + 44.5 + 46.5 + 47.75 + 48 + 47.75 + 48 + 48.25 + 47.75 + 48 + 48.25 + 46.25 + 45.5 + 43.75 + 40.75 + 32.75 + 31.25 + 29.25 + 28.5 + 26.5 + 25.75 + 25.5 + 25.25 + 24.5 + 24.25 + 24.25 + 25 + 25.5 + 25.75 + 26 + 26.25 + 26.5 + 27.25 + 27.5 + 27.25 + 27 + 26.5 + 25.75 + 26 + 26.75 + 27.5 + 28.75 + 28.5 + 28 + 27.25 + 25.5 + 25.25 + 21.75 + 19.25 + 18.5 + 17.75 + 17.5 + 17.25 + 17.5 + 17.75 + 17.5 + 20.25 + 19.5 + 18 + 17 + 14.75 + 13.25 + 12.25 + 11.75 + 9 + 8.25 + 8.25 + 8.25 + 9.5 + 11.25 + 10.25 + 8.5 + 6.5 + 6 + 4.25 + 1.75 + 1.5 + 0.5 + 0.5 + 1.25 + 3 + 3.75 + 4.75 + 3 + 2 + 1.75 + 1.75 + 1.75 + 2 + 2.25 + 2.5 + 2.5 + 3 + 3 + 3.75 + 4 + 4 + 4.25 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 5.5 + 6.75 + 8.25 + 9.75 + 10.5 + 16 + 16 + 14.25 + 12.25 + 11.75 + 10.25 + 11 + 12 + 12.75 + 14 + 15.5 + 18.25 + 20.25 + 22.5 + 24 + 27.75 + 29.75 + 29.25 + 28.5 + 24.75 + 26.5 + 27.25 + 27 + 27 + 27.25 + 27.5 + 29 + 39.25 + 43.5 + 44 + 43.25 + 42.5 + 41.75 + 39.5 + 37.25 + 36.25 + 35.25 + 33.5 + 31.5 + 30.25 + 31.75 + 29.25 + 27.75 + 25.75 + 25.75 + 27.25 + 28.25 + 28.5 + 28.5 + 24.75 + 19.75 + 20.5 + 18.75 + 18 + 17.25 + 16.75 + 16.5 + 16.5 + 16.75 + 17.5 + 18 + 18 + 17.25 + 16.75 + 15.25 + 11.25 + 12.25 + 14.5 + 14.75 + 19.25 + 22 + 28 + 45.5 + 50 + 55.5 + 42.5 + 43 + 41.75 + 42 + 41.5 + 41.75 + 42 + 42.25 + 41.75 + 40.75 + 38.75 + 38 + 36.5 + 35.75 + 36 + 36.25 + 36.5 + 36.25 + 36.25 + 36.25 + 36 + 36 + 36 + 36 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 35.5 + 35.5 + 35.25 + 35.25 + 35.25 + 35.25 + 35.25 + 35 + 36 + 36.25 + 36.25 + 36.25 + 36.25 + 36.25 + 36.25 + 37.25 + 38 + 38.5 + 38.75 + 39 + 39.25 + 38.75 + 38.5 + 38.25 + 37.5 + 37.25 + 37 + 36.5 + 36 + 35.5 + 35.5 + 35.25 + 35.25 + 35 + 35 + 35.75 + 36.75 + 37.75 + 39 + 41 + 42 + 42.5 + 43.25 + 43.25 + 42.5 + 42 + 41.5 + 41.75 + 42 + 42 + 42.25 + 42.75 + 43.75 + 46.75 + 47.5 + 46.25 + 44.5 + 43 + 42 + 42.5 + 44.5 + 45 + 45 + 45.75 + 46 + 48.25 + 49 + 49.25 + 49.25 + 49.25 + 49.25 + 49.5 + 49.5 + 49.25 + 48.5 + 47.5 + 46.75 + 46.25 + 45 + 42.25 + 41.25 + 41 + 41.25 + 42.5 + 43.25 + 43.5 + 45.5 + 45.75 + 49.5 + 50.75 + 56.25 + 57.75 + 59.5 + 64.25 + 65.25 + 65.75 + 70 + 71 + 72.25 + 73 + 73.25 + 73.5 + 73.75 + 75 + 74.25 + 73 + 72.25 + 71.75 + 71.25 + 72.75 + 74 + 75 + 75.25 + 75.5 + 75.5 + 75 + 74.5 + 74 + 72.75 + 71 + 70.25 + 69.25 + 68.25 + 67 + 67 + 67 + 67 + 67 + 66.75 + 67 + 67 + 66.75 + 66 + 65.25 + 64.25 + 62.75 + 60.75 + 58.75 + 56.25 + 53.5 + 50.5 + 46.25 + 38.5 + 36 + 33.25 + 28.75 + 27 + 25 + 23.75 + 23.5 + 22 + 18.5 + 15 + 14 + 13 + 12.5 + 12 + 11.75 + 10.75 + 11 + 12.5 + 16.5 + 17 + 17 + 16.25 + 14.25 + 15.75 + 20 + 19.75 + 20.5 + 21.25 + 21.5 + 25.75 + 26.25 + 26.5 + 26.5 + 26.5 + 25.25 + 23 + 22.75 + 22 + 20.75 + 20 + 19.25 + 18.5 + 18.5 + 18.5 + 18.75 + 19.25 + 20.75 + 21.75 + 23 + 25.5 + 27.25 + 28.25 + 28.5 + 28.25 + 27.75 + 24.75 + 24.25 + 23.5 + 22.75 + 23.25 + 24.25 + 28.5 + 26.75 + 26.25 + 25.75 + 24.25 + 23.5 + 22 + 21.75 + 22 + 22.25 + 22.5 + 22.5 + 15.75 + 15.5 + 15 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.75 + 3.75 + 3.5 + 3.5 + 3 + 3 + 3 + 3 + 3.5 + 4.25 + 4.75 + 5 + 5 + 5 + 5.25 + 5.25 + 5.75 + 6.25 + 6.5 + 6.75 + 6.75 + 6.75 + 6.75 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.25 + 5.75 + 5.25 + 4.75 + 3.25 + 2.75 + 2.75 + 2.5 + 2.5 + 2.5 + 2.25 + 2.25 + 2 + 2 + 2.5 + 3 + 3 + 3.25 + 3.25 + 3 + 2.75 + 2.5 + 2.5 + 2.5 + 2.75 + 2.75 + 2.75 + 2.75 + 2 + 1.75 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2.25 + 2.5 + 2.75 + 2.75 + 3 + 3.5 + 3.75 + 4 + 5 + 6.75 + 7.25 + 7.75 + 8 + 8.5 + 9 + 9.5 + 10.25 + 10.25 + 10.75 + 12.25 + 12 + 11.5 + 11.25 + 11 + 10.25 + 7.75 + 7 + 6.25 + 6 + 6 + 6 + 6 + 6 + 5.75 + 6 + 6 + 6 + 6 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.75 + 4.75 + 5.25 + 5.5 + 5.5 + 5.75 + 6.25 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6.5 + 7 + 7 + 7.25 + 7.25 + 7.25 + 7 + 7.5 + 7.5 + 7 + 6.75 + 6.25 + 5.5 + 5.25 + 5 + 4.5 + 4.5 + 7.75 + 9 + 14.25 + 16 + 17.25 + 16.25 + 15.25 + 14.25 + 13 + 10 + 7.25 + 5 + 4.75 + 4 + 6.5 + 7 + 9.25 + 5.25 + 5.25 + 4 + 4 + 4 + 4.25 + 4.25 + 4.5 + 4.5 + 4.5 + 4.75 + 5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.5 + 5.5 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 5 + 6 + 6 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 6 + 6 + 6.75 + 7.5 + 8 + 8 + 8.25 + 8.25 + 8 + 10.25 + 10.75 + 10.75 + 14.75 + 15.5 + 16 + 16.25 + 16.25 + 16.25 + 15.5 + 15.5 + 16.25 + 16 + 15.75 + 15 + 11.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10.25 + 10.5 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.75 + 11 + 10.5 + 10.5 + 9.25 + 9.5 + 9.75 + 10 + 11.25 + 11.25 + 11.25 + 12.25 + 12.25 + 12.5 + 12.25 + 12.5 + 13 + 13.25 + 13.25 + 13.75 + 14 + 15.25 + 18 + 19 + 19.75 + 20 + 21.75 + 22.5 + 23 + 23.25 + 24.25 + 26.75 + 26.75 + 28.25 + 29 + 32.25 + 33.25 + 33.5 + 33.75 + 34 + 36.75 + 37.5 + 37.5 + 37.5 + 37.75 + 37.75 + 37.25 + 37 + 36.75 + 36.5 + 36.25 + 36.25 + 36.5 + 36.5 + 36.5 + 37.5 + 38.25 + 38.25 + 38 + 38.5 + 39.25 + 39.5 + 39.75 + 40 + 40.25 + 40.25 + 40.25 + 40.25 + 40.25 + 40.25 + 40 + 39.75 + 39.5 + 39.25 + 39 + 39 + 38.75 + 38.5 + 38.5 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.75 + 38.75 + 38.75 + 39.25 + 39.75 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 40.75 + 42.25 + 42.75 + 42.75 + 43.75 + 44.5 + 45 + 45.5 + 46 + 46.25 + 47 + 47.5 + 47.75 + 48 + 48.5 + 48.75 + 49.25 + 50.5 + 51.5 + 52 + 54 + 55.25 + 55.75 + 56.5 + 57.25 + 57.5 + 58.25 + 58.5 + 58.75 + 59 + 58.75 + 58.5 + 58.5 + 58.75 + 59 + 59.5 + 59.75 + 62.75 + 64.5 + 64.5 + 72.75 + 75 + 79.25 + 81 + 82 + 82.5 + 84.25 + 86.5 + 88.25 + 87.75 + 87.75 + 87.75 + 88 + 87.5 + 87.75 + 88.25 + 88.25 + 88.5 + 87 + 84.25 + 83.25 + 82 + 81.75 + 81 + 79.5 + 79.5 + 79.75 + 80 + 80 + 80 + 79.75 + 80 + 80.25 + 80.75 + 81.5 + 82.25 + 81 + 75.75 + 73 + 72 + 70.5 + 69.75 + 66 + 64.5 + 62.25 + 60.75 + 60.5 + 60.25 + 60.25 + 60.25 + 60.25 + 60.25 + 60.25 + 60.5 + 60.5 + 60.75 + 61.25 + 61 + 60.75 + 60.75 + 60.75 + 60.5 + 60.25 + 60.5 + 60 + 59 + 59.25 + 59 + 58.75 + 59 + 61.5 + 62.25 + 61 + 59.5 + 58.75 + 55.5 + 63.25 + 63.5 + 64.75 + 65.25 + 65.5 + 66.5 + 68 + 73.5 + 75.25 + 76.5 + 77.5 + 79 + 79.75 + 82.25 + 83.5 + 83.75 + 83 + 82.5 + 82.5 + 82.25 + 82.5 + 83.75 + 84 + 85 + 85 + 85 + 85 + 83.5 + 80 + 76.5 + 75 + 74.25 + 70.25 + 67 + 59.5 + 60.75 + 60.5 + 60.25 + 60 + 60 + 60 + 60 + 60 + 59.75 + 59.5 + 59.25 + 59 + 58.75 + 58.25 + 58.25 + 57.25 + 57 + 56.25 + 57.5 + 63.25 + 65.75 + 66 + 68.5 + 71.5 + 72.75 + 76 + 77.75 + 78.5 + 78.5 + 78 + 77.5 + 73.5 + 68.25 + 66.5 + 65 + 64.5 + 63.5 + 61.5 + 56.75 + 63.25 + 63 + 62.75 + 56.5 + 49.25 + 48.5 + 47.75 + 46.5 + 46.25 + 45.75 + 45.5 + 45.25 + 45.5 + 46 + 46 + 47.25 + 48.5 + 50 + 50 + 49 + 45.75 + 45.75 + 45 + 41.25 + 40 + 40.5 + 40 + 39.75 + 40.75 + 42.5 + 43.25 + 42.25 + 41.5 + 42 + 42 + 39.5 + 37.75 + 37.75 + 39.25 + 39.25 + 39.5 + 39.5 + 40 + 40.5 + 40.25 + 39.5 + 39 + 38.5 + 37.25 + 35.5 + 33.25 + 32 + 31 + 29.25 + 27.5 + 27 + 27 + 27.25 + 27.5 + 35.75 + 37.75 + 37.75 + 36.5 + 35.25 + 35.75 + 35 + 31.75 + 29.5 + 25.5 + 25.5 + 26.25 + 27 + 29.5 + 31.75 + 33.75 + 36.25 + 39 + 38.5 + 36 + 31 + 23.75 + 20 + 20.75 + 21.75 + 22.75 + 24 + 26.25 + 26.75 + 26.75 + 26.5 + 26.25 + 21.75 + 21.25 + 21.25 + 21.25 + 21.25 + 21.5 + 21.5 + 22 + 22.25 + 22.5 + 22.75 + 23 + 23.75 + 24.5 + 25.25 + 25.5 + 25.75 + 25.75 + 25.5 + 25 + 24.25 + 23.5 + 22.75 + 22 + 22 + 22 + 22.5 + 23.25 + 24 + 26.5 + 26.25 + 24.75 + 21 + 18 + 17.75 + 17.25 + 17 + 16.75 + 16.75 + 16.5 + 18.5 + 20.5 + 22.5 + 27 + 29 + 29.25 + 28.5 + 28 + 25.75 + 24 + 24.25 + 28.5 + 25.5 + 16.25 + 15.25 + 13.75 + 13.25 + 12.75 + 13.25 + 14 + 12.5 + 11.75 + 11 + 10.5 + 11.75 + 12.5 + 12.75 + 15.25 + 16.75 + 20.75 + 20.5 + 19.5 + 19 + 20.75 + 22.75 + 23.25 + 24 + 24.5 + 25 + 25 + 26 + 28 + 29 + 31.75 + 33 + 33.75 + 31.5 + 36.75 + 41.25 + 46.75 + 50 + 50 + 51.75 + 53.5 + 54.5 + 54.75 + 55.25 + 56.25 + 57.25 + 58.25 + 57.5 + 55.75 + 53.5 + 51 + 49 + 48.25 + 47 + 47 + 47 + 47.25 + 47 + 46.75 + 46.75 + 46.5 + 46.25 + 46 + 46 + 45.75 + 45.5 + 43.75 + 46 + 46.5 + 50 + 51.5 + 48.75 + 47.5 + 45.25 + 42.5 + 44.25 + 45.75 + 46.75 + 44 + 41 + 39 + 36.75 + 36.25 + 35.5 + 34.5 + 34 + 34.25 + 34 + 34.5 + 35 + 34.75 + 34.75 + 35 + 26.25 + 24 + 24.25 + 25.5 + 26.75 + 26.75 + 26.5 + 26.75 + 26.75 + 27 + 27 + 27.25 + 27.25 + 27.5 + 27.5 + 27.5 + 27.75 + 27.75 + 27.5 + 27.5 + 27.5 + 27.25 + 27.25 + 27.5 + 27.75 + 27.75 + 28 + 28 + 28 + 28 + 27.75 + 27.5 + 27.5 + 28 + 28.25 + 28.25 + 28.25 + 28.25 + 28.5 + 28.5 + 28.75 + 28.75 + 29 + 29.25 + 29.5 + 30.75 + 31.5 + 31.75 + 32.25 + 34.25 + 36.25 + 36.75 + 37.25 + 37.75 + 37.75 + 37.75 + 37.75 + 37.5 + 36.75 + 36.75 + 36.75 + 36.75 + 35 + 35.25 + 35.25 + 35.25 + 35.25 + 35.25 + 33.75 + 33 + 32.75 + 32 + 31.25 + 30.75 + 30 + 29.25 + 28.25 + 28 + 27 + 25.25 + 24.75 + 24.25 + 24.25 + 24.25 + 24.25 + 24 + 24 + 24 + 24.25 + 25 + 26.25 + 27.5 + 28 + 28.5 + 27.75 + 26 + 25.25 + 25 + 24.5 + 24.75 + 24.75 + 23.5 + 23 + 20.75 + 19.75 + 18.25 + 16 + 15.5 + 15.5 + 15 + 15 + 15 + 14.75 + 13.5 + 13 + 13.25 + 14 + 15.5 + 16.25 + 16.5 + 17 + 17.25 + 17.75 + 18.5 + 19.75 + 21 + 21.25 + 21 + 21 + 21 + 21.25 + 21.75 + 22.75 + 22.25 + 20.75 + 20 + 19.5 + 18.5 + 17 + 17.25 + 17.5 + 17.25 + 16.75 + 16.75 + 15 + 14.5 + 13.75 + 14.25 + 14 + 12 + 14.75 + 17.25 + 18.75 + 17.5 + 15.75 + 12.75 + 9.5 + 7.75 + 7 + 6.75 + 6.75 + 6.75 + 6.5 + 6.5 + 6.25 + 5.5 + 6 + 7.25 + 9 + 9.25 + 9.75 + 10 + 10.75 + 10.75 + 10.25 + 11 + 11.75 + 12.5 + 14 + 15.75 + 16.5 + 16.75 + 17.25 + 17.75 + 18 + 18.25 + 18.75 + 19.5 + 19.75 + 20.25 + 21.5 + 22 + 22 + 22 + 22.25 + 22.25 + 22.5 + 22.5 + 22.5 + 22.75 + 22.75 + 22.5 + 22.75 + 22.75 + 23.75 + 26.25 + 27 + 27.25 + 28.75 + 31 + 31.5 + 31.75 + 32.75 + 33 + 33 + 33 + 33.75 + 34 + 34.75 + 35 + 35.5 + 36.25 + 37.25 + 38.75 + 39.75 + 41 + 41.75 + 43.25 + 44 + 44.25 + 44.25 + 44.25 + 42.75 + 45.75 + 49.5 + 46.5 + 44 + 44.25 + 47.5 + 50 + 51.75 + 53.75 + 54.5 + 55 + 56 + 55.75 + 55.25 + 54.5 + 54 + 54.5 + 56.25 + 57.5 + 61.75 + 64.5 + 70 + 71.5 + 71.75 + 73.75 + 71.25 + 68.5 + 68.25 + 68 + 68.25 + 68.75 + 69 + 69.5 + 69.75 + 69.75 + 70 + 70.25 + 70.25 + 70.75 + 71 + 71.75 + 72.25 + 72.75 + 73 + 72.75 + 72.75 + 72.75 + 72.75 + 72.25 + 72.25 + 72 + 72.25 + 72.5 + 72.5 + 72.5 + 72.5 + 72.75 + 72.75 + 72.5 + 72.5 + 72.5 + 72.5 + 72.25 + 71.75 + 69 + 68.25 + 67.5 + 66.5 + 64.5 + 64 + 63 + 61.25 + 60.75 + 63.25 + 65 + 66 + 66.75 + 67.25 + 68.75 + 69.5 + 70.25 + 71.5 + 74.5 + 77.25 + 77.75 + 78.5 + 79.75 + 80.25 + 80.5 + 80.75 + 81.25 + 82.25 + 82 + 82 + 82 + 82 + 81.5 + 83.5 + 85.25 + 86 + 86 + 91.25 + 93.25 + 94.25 + 94.25 + 94.25 + 94 + 93.5 + 92.75 + 92 + 92.25 + 91.75 + 91 + 90.25 + 88.5 + 87.75 + 85.75 + 85.75 + 88.25 + 88.25 + 88.5 + 89.5 + 90.25 + 91 + 92 + 93 + 93 + 91.75 + 90.5 + 90 + 90 + 89.5 + 89.25 + 89.25 + 89.5 + 89.75 + 90 + 90 + 90.5 + 90.75 + 93 + 93.25 + 92.75 + 92.5 + 92 + 91.5 + 89.75 + 89 + 88 + 88.5 + 89 + 89.25 + 89.25 + 88.25 + 86.75 + 86.75 + 86.5 + 87.25 + 87.75 + 87.5 + 87.25 + 87.5 + 87 + 86 + 86.25 + 89.25 + 83 + 82 + 82.25 + 83 + 84.25 + 85 + 85.25 + 85.5 + 85.25 + 84.5 + 83.5 + 82.25 + 81.5 + 81.25 + 81.25 + 83 + 84 + 84.75 + 84.25 + 84 + 83.75 + 82.75 + 82 + 82 + 83 + 82.75 + 82.5 + 81.75 + 82.25 + 82.5 + 83 + 83.75 + 85 + 86.25 + 87 + 87.25 + 87.25 + 87.5 + 88.25 + 89 + 90 + 90.5 + 90.75 + 91.25 + 92.25 + 93 + 92.5 + 92 + 92 + 91.75 + 92 + 92 + 89.5 + 89 + 88.75 + 88 + 87.25 + 86.5 + 86.25 + 85.75 + 84.5 + 83.5 + 82.75 + 82.25 + 81.75 + 81.75 + 82.5 + 82.25 + 82.75 + 84.5 + 84.75 + 85 + 85 + 84.75 + 85 + 85 + 85 + 84.75 + 85 + 85 + 85 + 84.25 + 86 + 86 + 85.25 + 83.75 + 82.75 + 82.5 + 82.5 + 81.75 + 82 + 82.5 + 83 + 83 + 83 + 84.75 + 85.75 + 86.25 + 89.5 + 91.25 + 98 + 100.5 + 101.25 + 102 + 102.75 + 103.75 + 104.25 + 103.25 + 103.25 + 103 + 102.5 + 101 + 102.5 + 103.5 + 103.75 + 103.5 + 103 + 102.5 + 102.25 + 101.5 + 97 + 95.25 + 94.5 + 94 + 93.5 + 93.5 + 93.25 + 93.25 + 93 + 92.75 + 92.75 + 92.5 + 92 + 91.75 + 91.25 + 90.75 + 90.25 + 90 + 89.5 + 89.25 + 88.25 + 87.5 + 86.25 + 83 + 83.75 + 83.75 + 84.5 + 85.5 + 86 + 86 + 86.25 + 84.75 + 82.5 + 82 + 83.25 + 84 + 83.75 + 83.5 + 82.75 + 82.5 + 82 + 81.75 + 81.25 + 80.25 + 79.75 + 79.25 + 78.75 + 78.5 + 78.25 + 78.25 + 78.25 + 78.25 + 77.75 + 77.5 + 77.25 + 77 + 76.75 + 75.75 + 75.25 + 74.75 + 74 + 75 + 75.75 + 76 + 76.5 + 77.5 + 78.5 + 79.25 + 81.75 + 87.25 + 92.75 + 91.25 + 90.5 + 90 + 90 + 90 + 90.5 + 91.25 + 90.25 + 90.25 + 90.75 + 89.25 + 85.5 + 77 + 71 + 67.75 + 64 + 57.5 + 54.25 + 55 + 56.75 + 59.5 + 60.25 + 60.5 + 61.5 + 62 + 62.25 + 62.75 + 68.5 + 78.75 + 78 + 75.75 + 75 + 74.5 + 75 + 76.75 + 77.25 + 78.75 + 79.75 + 78.75 + 77.75 + 75.25 + 72.5 + 69.75 + 67 + 66.75 + 66.5 + 61.75 + 56.75 + 51.25 + 49.5 + 47.25 + 44.5 + 42.75 + 40.5 + 39.75 + 39.5 + 39.25 + 38.5 + 38 + 38.75 + 41.5 + 45.75 + 47.75 + 52 + 54 + 54.25 + 53.25 + 53.25 + 53.5 + 54 + 54.5 + 54.75 + 55.25 + 55.25 + 58.75 + 61.25 + 62.5 + 65.75 + 68.75 + 72.25 + 77.5 + 85.5 + 88 + 89.75 + 91.25 + 92.75 + 93.5 + 93.75 + 93.75 + 93.75 + 92.5 + 93 + 95 + 97 + 97 + 96.75 + 97.5 + 97.75 + 97.5 + 96.75 + 96.5 + 95.75 + 92.5 + 86.75 + 86.25 + 84.75 + 85 + 83.5 + 65.75 + 62.5 + 60.5 + 58.75 + 57.75 + 57.25 + 56 + 52 + 45.5 + 42.75 + 41.75 + 41 + 40.25 + 39.5 + 38.5 + 38.25 + 37.75 + 37.75 + 39.5 + 40.5 + 40.75 + 40.75 + 39.5 + 37.75 + 33 + 27 + 29.75 + 31.25 + 32 + 35 + 33.75 + 30 + 28.25 + 26.75 + 25.75 + 25.75 + 24 + 24 + 23.75 + 23.5 + 23.25 + 23 + 23.5 + 25 + 25 + 25.25 + 25.75 + 25 + 24.25 + 23.5 + 23.5 + 23.5 + 23 + 23 + 22.5 + 21.5 + 20 + 19 + 19.25 + 21 + 22.25 + 24 + 27.75 + 28.25 + 28.5 + 29.5 + 29.5 + 31 + 31.5 + 33 + 35.75 + 39.25 + 47.25 + 52.25 + 57 + 58.75 + 59.25 + 59.25 + 59.5 + 59.5 + 60.75 + 60.5 + 62 + 61.75 + 60 + 58 + 58.25 + 60.75 + 61.25 + 61 + 59.5 + 59.25 + 58 + 57.5 + 56.75 + 55.75 + 54.25 + 54 + 54 + 53.75 + 53.25 + 52.25 + 51.25 + 50.75 + 50.5 + 49.75 + 49 + 48.75 + 48 + 46.75 + 46.5 + 45.5 + 44.75 + 43.75 + 43.25 + 43 + 42.75 + 41.75 + 40.75 + 40.25 + 39.5 + 39 + 38.75 + 39.25 + 40.5 + 41 + 42 + 43 + 44 + 45 + 47.25 + 48.5 + 49 + 49.75 + 49.75 + 50 + 50.25 + 50.75 + 51.5 + 52 + 52.25 + 51.75 + 51.75 + 52.25 + 52.5 + 52.5 + 52.25 + 52.25 + 52.75 + 53 + 53.75 + 54.75 + 55.5 + 56.5 + 57 + 56.75 + 56.5 + 56 + 55.75 + 55.75 + 56.75 + 57.75 + 55.75 + 53.75 + 52 + 51.5 + 51.25 + 49.25 + 47.25 + 46.5 + 43.75 + 42 + 38 + 35 + 34.25 + 33.5 + 32.75 + 31.75 + 29.75 + 30 + 30.25 + 29.5 + 28.25 + 27.75 + 27 + 26.25 + 25.5 + 24.75 + 24 + 23.25 + 23.25 + 23.25 + 23.25 + 23.5 + 23.75 + 24 + 24.25 + 25 + 26 + 26.25 + 26.5 + 27.5 + 29.25 + 30.75 + 31.5 + 30 + 29.25 + 28.25 + 27.75 + 27.75 + 26.25 + 25.5 + 25 + 25.25 + 25.5 + 25.75 + 25 + 23.25 + 26.25 + 27.25 + 26.5 + 25.75 + 22.75 + 21.75 + 23.25 + 23.75 + 22.75 + 22.75 + 22 + 21.75 + 21.25 + 19.75 + 18.75 + 14.5 + 12.25 + 11.75 + 11.75 + 12 + 12 + 12.25 + 13.5 + 15.75 + 18.75 + 19.5 + 19 + 16 + 15.5 + 17.25 + 19.25 + 21.5 + 23.75 + 26.5 + 30.75 + 32.25 + 30.5 + 31 + 33 + 37.5 + 40 + 41.75 + 41.75 + 41.75 + 42 + 42 + 42.25 + 42.5 + 42.5 + 43 + 43.75 + 45 + 46.25 + 48.25 + 49 + 49.75 + 50 + 50.25 + 50.75 + 51.25 + 51.25 + 50.75 + 50 + 48.75 + 44.25 + 43.25 + 42.5 + 42.75 + 42.75 + 43.25 + 44 + 46 + 47.25 + 46.25 + 44.5 + 44.5 + 47.25 + 48.75 + 50.25 + 50 + 49.5 + 48.75 + 47.5 + 46.75 + 46.5 + 46.5 + 46.25 + 46.5 + 46.5 + 47 + 53.75 + 54.75 + 55.5 + 58.75 + 59.5 + 59 + 56 + 53.5 + 43 + 40 + 37.5 + 37.25 + 37.5 + 37.25 + 34.25 + 33 + 29.5 + 25.75 + 25.25 + 26.25 + 27 + 20.25 + 15.25 + 15 + 15.5 + 17.5 + 18 + 18 + 13 + 8.5 + 11.75 + 8.25 + 6.75 + 5.5 + 5 + 4.75 + 5.5 + 6 + 6.5 + 7.5 + 8.25 + 9 + 9.75 + 10.75 + 11.5 + 11.5 + 11.75 + 11.5 + 11 + 9.75 + 6.75 + 6.75 + 6 + 9.25 + 9.5 + 10.25 + 11.5 + 15.25 + 18 + 20 + 21.25 + 22.75 + 24.75 + 23 + 24.25 + 24 + 23.5 + 23 + 22.75 + 23 + 23 + 23.25 + 23 + 22.25 + 21.75 + 23.5 + 23 + 23.5 + 24 + 23.75 + 23.75 + 23.5 + 23.5 + 23.5 + 25.75 + 25.25 + 22.5 + 22.75 + 21 + 19.75 + 19.5 + 21.5 + 22.5 + 22.25 + 21 + 19 + 16.25 + 10.75 + 9.5 + 10.25 + 17 + 18 + 16.75 + 16.25 + 15.5 + 13.5 + 11.5 + 10.75 + 11 + 11.75 + 12.5 + 13.5 + 13.75 + 14 + 13.75 + 13.75 + 13.25 + 12.75 + 12.25 + 11.75 + 10.75 + 9 + 8 + 8 + 8 + 7.75 + 7.5 + 8 + 8.75 + 9.75 + 10.25 + 10.25 + 10.25 + 12.25 + 12.5 + 12.5 + 13 + 13.75 + 12.5 + 12.25 + 12 + 12 + 12 + 12.25 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.25 + 12.25 + 11.75 + 11.75 + 11.5 + 11.5 + 11.25 + 11 + 10.75 + 7.75 + 3.75 + 3.25 + 3.25 + 3.25 + 3.25 + 17.75 + 18.5 + 20.5 + 21 + 21.25 + 21.25 + 21.5 + 21.75 + 22 + 22.25 + 22.25 + 21.75 + 19.75 + 19.5 + 19.5 + 19.25 + 19 + 18.75 + 20 + 21.75 + 23 + 27.25 + 28.5 + 28.75 + 28 + 27.5 + 27 + 26.5 + 25.25 + 25.25 + 25.5 + 26.25 + 27 + 28.25 + 28.5 + 28.75 + 29.25 + 29.5 + 28.25 + 27 + 24.5 + 19.75 + 17.25 + 16.25 + 14.25 + 14.5 + 14.75 + 15.25 + 16 + 12.25 + 11.25 + 11 + 11 + 10.5 + 11.25 + 12.75 + 13.25 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 14.5 + 14.75 + 16 + 17.5 + 19 + 19.25 + 20.5 + 23.25 + 24 + 24 + 24 + 23.75 + 23.25 + 22.5 + 21.75 + 21.25 + 20.75 + 19.75 + 17.5 + 15.5 + 15.25 + 14.5 + 14 + 13.5 + 13 + 12.25 + 11.75 + 10 + 11.5 + 12.75 + 14.25 + 14.75 + 15.25 + 15.25 + 14 + 13.25 + 11.5 + 10.75 + 10.25 + 9.75 + 10 + 10 + 10.75 + 11.25 + 12 + 13 + 14.25 + 12.5 + 14 + 16.25 + 16 + 14.75 + 12.75 + 12 + 10.75 + 9.25 + 7.75 + 8.25 + 9 + 9.25 + 10 + 11 + 11.25 + 10 + 8 + 7.25 + 6.5 + 5.75 + 5.25 + 3.75 + 3.75 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4.5 + 4.75 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 4.75 + 4.75 + 4.5 + 4.25 + 4 + 4.25 + 4.75 + 4.75 + 4.75 + 4.25 + 4 + 3.75 + 3.5 + 3.5 + 3.25 + 3 + 3 + 3 + 2.75 + 4.75 + 7 + 6.75 + 5.75 + 5.5 + 5 + 4.5 + 4.25 + 3 + 5.25 + 5.75 + 6 + 6.25 + 6.5 + 5.25 + 4 + 3.5 + 3.5 + 4 + 4.75 + 5.25 + 6.25 + 7 + 8.25 + 10.25 + 11.5 + 12.75 + 14 + 15.75 + 16.5 + 16 + 13.75 + 14.25 + 14 + 13.25 + 12.5 + 11.25 + 10.5 + 9.5 + 9 + 8.25 + 8.25 + 11.25 + 13.25 + 13.25 + 13.25 + 14.5 + 16.75 + 17.75 + 19.25 + 20.25 + 21 + 22 + 24 + 22.5 + 18 + 16.25 + 14.5 + 12.75 + 10.25 + 8.75 + 7.75 + 7 + 6.75 + 6 + 6 + 6 + 5.75 + 6 + 5.75 + 5 + 5 + 6.75 + 9.5 + 12 + 13.5 + 14.75 + 14.25 + 14.5 + 14.5 + 14.5 + 15.75 + 16.25 + 16.25 + 15 + 13.75 + 12.5 + 11.75 + 11 + 12.5 + 13.5 + 15.25 + 16.25 + 17.25 + 17.5 + 17.75 + 18 + 18.25 + 18.75 + 19.25 + 19.25 + 19 + 18.5 + 16.75 + 15.75 + 14.75 + 13.25 + 11 + 11.5 + 12.25 + 14 + 13.25 + 16.5 + 18.5 + 19.5 + 25 + 29.25 + 33.25 + 36.5 + 40.25 + 39 + 39.25 + 38.75 + 38.25 + 38 + 39.5 + 43 + 42.75 + 33.5 + 18.5 + 14 + 10.75 + 4.25 + 4.25 + 5 + 5.75 + 6.75 + 6.75 + 4.75 + 4.25 + 5.75 + 7 + 8.25 + 9.25 + 9.25 + 9.5 + 9.75 + 10.25 + 10.5 + 10.75 + 11 + 11.5 + 12 + 12.5 + 12.75 + 12.75 + 13 + 13.25 + 12.75 + 12.5 + 12.25 + 12.25 + 12.25 + 12.5 + 13.75 + 13.75 + 12 + 10.75 + 9.5 + 9.5 + 9.25 + 9 + 8.25 + 8 + 7 + 6.25 + 6.25 + 8.5 + 8.75 + 10.75 + 13.75 + 14 + 12.75 + 9.5 + 8.75 + 8.25 + 7.5 + 7 + 6.75 + 6.25 + 6.25 + 6.75 + 8 + 8.25 + 8.75 + 9.25 + 9.75 + 10 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.5 + 10.5 + 10.75 + 11.25 + 11.75 + 11.75 + 12.25 + 12.25 + 12.75 + 13.75 + 14.25 + 13.25 + 12.25 + 14.75 + 15.75 + 18.25 + 23.75 + 27 + 28 + 27.5 + 25.25 + 23.25 + 22.5 + 22 + 18.5 + 20.25 + 21.25 + 22.5 + 24 + 26 + 27 + 26.5 + 26 + 25.5 + 24.75 + 23 + 21.25 + 20.25 + 19 + 18.25 + 16.25 + 13.5 + 12.5 + 11.75 + 7.75 + 5.75 + 7.5 + 7.5 + 8 + 6.75 + 6 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 7 + 7 + 7.25 + 7.5 + 7.75 + 7.75 + 7.75 + 8 + 8.75 + 9 + 9.25 + 9 + 8.75 + 7.75 + 7 + 7 + 6.75 + 7 + 7 + 8.25 + 9.25 + 9.25 + 9 + 8.75 + 8.5 + 8.25 + 8 + 7.75 + 7.75 + 7.5 + 7.75 + 8.5 + 10 + 11 + 11.25 + 11.75 + 11.75 + 11.5 + 11.25 + 11.25 + 11.75 + 11.75 + 11.75 + 10.5 + 10.5 + 10.5 + 11 + 13.25 + 14.5 + 15.75 + 18.5 + 16.75 + 13.5 + 12.5 + 15 + 17.5 + 17.75 + 17.25 + 16.75 + 15.5 + 14.5 + 13.75 + 14 + 14.5 + 17.75 + 15.5 + 15.75 + 16.5 + 18.25 + 21.5 + 23.25 + 25.5 + 27.25 + 29 + 31.5 + 33 + 34.5 + 35 + 35.5 + 33.75 + 34.75 + 34.75 + 35 + 35.75 + 36 + 37 + 37.25 + 37.5 + 37.5 + 35.25 + 33.75 + 34 + 34.5 + 34.25 + 34.25 + 35.25 + 35.5 + 36 + 36.5 + 36 + 35.25 + 35.25 + 33.75 + 31 + 29.75 + 26.75 + 26.5 + 26 + 25.5 + 24.75 + 23.75 + 23.25 + 22.5 + 22 + 20.25 + 19.75 + 19.25 + 19 + 18.75 + 18.25 + 17.5 + 16.75 + 16 + 13 + 13 + 12.25 + 11.5 + 10.5 + 9.75 + 9 + 9 + 9 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8.25 + 8 + 8 + 9.75 + 10 + 10 + 10 + 10 + 11.25 + 10.75 + 11.25 + 13.75 + 18 + 17.75 + 17.5 + 15.25 + 12.75 + 14 + 14.25 + 15.25 + 15.75 + 16 + 16.25 + 16.25 + 15.75 + 15.25 + 16.75 + 17.5 + 18.25 + 20.75 + 21.5 + 21.5 + 21.75 + 22.25 + 23 + 22.5 + 22.25 + 23.5 + 24.5 + 26.75 + 29.75 + 30.25 + 30.5 + 30 + 29 + 27.75 + 21 + 20.5 + 21 + 23.25 + 22.25 + 22 + 21 + 20 + 18.5 + 16.5 + 16.25 + 15.25 + 15.75 + 16.25 + 16.25 + 16.5 + 16.5 + 16.5 + 16 + 15.25 + 15.25 + 14.5 + 13.75 + 13.5 + 13.25 + 13 + 13.25 + 13.75 + 13 + 13 + 14.25 + 14.25 + 13.75 + 12.75 + 12.5 + 11.75 + 11.5 + 11.75 + 11.25 + 11 + 10.25 + 8.25 + 8.25 + 7 + 4.25 + 4 + 5.75 + 6 + 6.5 + 6.75 + 7.5 + 9 + 12 + 12.75 + 14.75 + 17 + 16.75 + 14 + 14.5 + 15.25 + 17 + 17.5 + 18.5 + 19.25 + 20 + 21.25 + 22.75 + 24 + 24.5 + 25.75 + 27 + 27 + 26.5 + 25 + 22.25 + 20.25 + 21 + 21.5 + 20.5 + 16.25 + 12.5 + 9.75 + 9.5 + 9.5 + 9.5 + 10.5 + 13 + 16.5 + 16.5 + 19.75 + 19.75 + 22 + 23.5 + 21.5 + 19.25 + 19.75 + 21.25 + 21.75 + 21.75 + 20 + 19 + 18.5 + 17.5 + 16.5 + 15.75 + 14.75 + 13.5 + 7 + 6 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 7 + 7.75 + 8 + 8.5 + 8.75 + 9 + 9.5 + 10.75 + 11.75 + 12.75 + 13.5 + 18 + 23.75 + 27.5 + 29 + 31.25 + 41.5 + 48.75 + 52.25 + 54.25 + 54.75 + 54.75 + 53.75 + 53.25 + 52.5 + 52 + 51.5 + 51.75 + 51 + 53.75 + 54.75 + 54.5 + 52.5 + 50 + 48.75 + 47.25 + 46.5 + 50 + 56.5 + 62 + 64.5 + 67.5 + 68 + 68 + 68.5 + 67.25 + 66.25 + 65.75 + 65.75 + 65.25 + 65 + 64 + 63.25 + 62 + 61.75 + 62.25 + 63.25 + 64.75 + 66 + 68 + 69.25 + 71 + 71.5 + 72 + 71.5 + 75 + 77.25 + 79.5 + 80.5 + 81.75 + 83.25 + 86.75 + 88 + 89.25 + 89.75 + 90.75 + 90.25 + 89.75 + 89.25 + 87.25 + 84.5 + 82 + 80.75 + 79.25 + 78.5 + 76.5 + 76.25 + 75.25 + 72.75 + 72 + 73.25 + 75.25 + 75.5 + 75.75 + 75.25 + 75 + 76.25 + 78.75 + 79.25 + 80.5 + 81.5 + 82.25 + 81 + 78.5 + 79 + 79.75 + 78.75 + 64.75 + 63.75 + 60.5 + 57.75 + 55.5 + 56 + 56 + 55.25 + 53.5 + 52.75 + 47 + 43.75 + 38.5 + 34.25 + 33.25 + 34.75 + 35.5 + 36 + 36.5 + 37 + 37 + 34.25 + 25.75 + 24.25 + 21.75 + 22 + 22.5 + 23 + 21.25 + 20.25 + 19.5 + 19.75 + 20.25 + 20.25 + 20.5 + 20.5 + 20.75 + 20.5 + 23 + 23 + 22.5 + 22.25 + 22 + 22.25 + 22.25 + 22 + 22 + 21.5 + 21.25 + 20.25 + 19.75 + 19.25 + 18.75 + 18.25 + 18 + 19.25 + 20.75 + 22.5 + 23 + 23 + 24.75 + 14.75 + 18.75 + 19.75 + 19.75 + 20 + 21 + 23.25 + 23.5 + 23.25 + 23.75 + 24.5 + 22.75 + 22.75 + 24.75 + 28 + 29.75 + 31.5 + 32.5 + 32.5 + 30.25 + 30.5 + 31 + 29 + 28.5 + 27.75 + 29 + 30.75 + 32.5 + 32.25 + 33.25 + 33.75 + 34.25 + 34.75 + 36 + 36.5 + 37 + 37.25 + 38 + 38.5 + 39 + 39.75 + 40 + 40.25 + 41 + 43.75 + 44 + 43 + 43 + 42.75 + 37.25 + 35.25 + 35.75 + 36.5 + 37 + 37.5 + 37.75 + 37.75 + 38.25 + 39 + 43.75 + 44 + 44.5 + 45 + 48 + 58.75 + 65.25 + 70.75 + 75.25 + 74 + 77.5 + 77.25 + 77.25 + 76.5 + 72.5 + 72 + 71.5 + 71 + 68 + 65.5 + 62.5 + 63 + 63 + 63.25 + 64.25 + 65 + 65.5 + 65.5 + 65 + 66 + 66 + 66 + 65.75 + 65.25 + 65.25 + 65 + 65 + 65.25 + 65.75 + 66.25 + 66.5 + 66.75 + 65.75 + 65 + 66.25 + 66.75 + 65.75 + 65.25 + 69.5 + 69.75 + 69.75 + 69.5 + 68.75 + 70.75 + 70.5 + 68.5 + 66 + 65.5 + 66.5 + 67.25 + 69 + 76 + 78.5 + 79 + 80.75 + 82.5 + 83 + 83.25 + 83.5 + 83.5 + 84 + 84.25 + 85.75 + 86.75 + 86.5 + 86.25 + 86 + 85.25 + 85 + 84.25 + 82.5 + 82.5 + 79 + 77.5 + 76.75 + 76.25 + 72 + 69.25 + 67.5 + 65 + 64.5 + 63.25 + 62.75 + 62.25 + 61.25 + 54.75 + 49.25 + 49.5 + 56.25 + 56.5 + 57 + 57.25 + 57.75 + 60.25 + 62 + 61.25 + 59 + 59.5 + 59.75 + 60 + 60.25 + 60.75 + 63 + 64.25 + 65.25 + 66 + 67.25 + 68.75 + 71.5 + 73 + 74.25 + 75.25 + 76.5 + 77.75 + 94.25 + 81.5 + 80.5 + 81 + 80.25 + 79.25 + 76.5 + 76.25 + 75.75 + 74.75 + 73.5 + 73 + 72 + 72 + 71.25 + 67.75 + 70.5 + 75.75 + 75.75 + 75.75 + 76.25 + 81 + 80 + 78.75 + 77 + 71.25 + 64.5 + 34 + 33.5 + 33 + 32.5 + 32 + 29.75 + 28.75 + 24.75 + 19.75 + 19 + 18.5 + 18 + 16.25 + 14 + 14 + 13.75 + 13 + 13 + 13 + 13 + 13 + 13.25 + 14.25 + 14.75 + 14.75 + 15 + 15 + 16.25 + 16.75 + 17.25 + 16.5 + 16 + 15 + 13.5 + 13 + 13 + 13.25 + 13.25 + 13.25 + 13.5 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.75 + 13.75 + 13.75 + 14 + 14 + 13 + 13 + 12.75 + 12.75 + 12.5 + 12.5 + 12 + 12 + 12 + 12 + 12 + 12.25 + 13.5 + 14.5 + 15.25 + 15.5 + 16.25 + 16.5 + 17 + 17.25 + 17.75 + 18 + 18.25 + 18.25 + 18.75 + 20 + 13 + 12.25 + 12.75 + 13 + 13.5 + 14.25 + 16.5 + 19.25 + 19 + 18.5 + 19 + 19 + 23 + 24.5 + 27.5 + 30.25 + 33 + 36 + 38.25 + 39.75 + 41.5 + 44.25 + 46.25 + 55.25 + 57 + 57.25 + 57.5 + 57.75 + 57.5 + 57.25 + 56 + 55.25 + 54 + 51.75 + 47.5 + 45.5 + 41.5 + 40.25 + 38.5 + 52 + 56 + 57.5 + 58.5 + 59.25 + 60 + 61.25 + 59.5 + 58.5 + 58.5 + 59.75 + 59.75 + 58.75 + 58.5 + 58.5 + 58.5 + 58.5 + 59.5 + 59.5 + 59.5 + 59 + 58.25 + 56.75 + 58 + 59.5 + 60 + 59.75 + 56 + 54.25 + 53.25 + 52.25 + 50.75 + 50 + 50 + 49.75 + 49 + 47.5 + 45.75 + 43 + 42.5 + 42.75 + 43 + 43.75 + 43.75 + 46.75 + 50 + 54 + 54 + 54 + 54.25 + 53.75 + 53.75 + 54 + 54 + 54.5 + 54.5 + 54.5 + 54.25 + 54 + 51.5 + 51.25 + 49.5 + 48.25 + 47.25 + 46.25 + 45.5 + 45 + 45 + 42.75 + 41.75 + 40.5 + 39.5 + 39.5 + 39 + 38.75 + 36.75 + 35.75 + 35 + 30.75 + 28.75 + 26.5 + 26.75 + 27 + 27 + 27 + 27.5 + 27.5 + 27 + 27.25 + 27.25 + 27.5 + 27.5 + 27.75 + 28 + 28 + 28 + 29.5 + 28 + 28 + 28 + 27.75 + 27.5 + 27.5 + 27.25 + 27.25 + 27 + 27.5 + 27.5 + 27 + 27 + 27 + 26.75 + 26.5 + 28.75 + 30.75 + 35 + 35.75 + 36.75 + 38.75 + 39 + 39.5 + 39.5 + 40.5 + 41.75 + 42.75 + 45 + 45 + 45.5 + 46.25 + 47.25 + 48.25 + 49.5 + 51.25 + 51.5 + 54 + 54.25 + 54.5 + 54.5 + 54.5 + 54 + 54 + 53.75 + 53.75 + 54.25 + 54 + 54 + 54 + 50 + 46.75 + 43.75 + 42.75 + 42.5 + 42.5 + 42.5 + 43 + 45.75 + 47.5 + 49 + 49.75 + 50 + 50 + 50.75 + 52.25 + 53.25 + 54.25 + 56 + 59.75 + 60 + 59.5 + 58 + 56.75 + 58.25 + 59 + 59.5 + 59.5 + 59.5 + 58.5 + 58.5 + 58.5 + 58.5 + 58.75 + 59.75 + 59.75 + 58.5 + 58.5 + 59.5 + 61.25 + 60 + 59.25 + 58.5 + 57.5 + 56 + 52 + 38.5 + 40.25 + 41.5 + 45.5 + 47.5 + 51.75 + 54 + 55.25 + 56 + 57.25 + 57.5 + 57.75 + 57.5 + 57.25 + 57 + 55.25 + 46.25 + 44.25 + 41.5 + 39.75 + 38.25 + 36 + 33 + 30.25 + 27.5 + 24.5 + 23 + 19 + 19 + 18.5 + 19 + 19.25 + 16.5 + 14.25 + 13.5 + 13 + 12.75 + 12.25 + 13 + 20 + 18.75 + 18.25 + 18.25 + 18 + 17.75 + 17.25 + 17 + 16.5 + 16.25 + 15.5 + 15.25 + 14.5 + 13.5 + 12.25 + 12 + 12 + 12 + 12 + 12 + 12.5 + 12.5 + 12.75 + 12.75 + 13 + 13 + 14 + 14 + 13.75 + 13.75 + 13.75 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.25 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 12.75 + 12.5 + 12.25 + 11.75 + 11.5 + 11.5 + 11.25 + 11.25 + 11.5 + 11.75 + 12 + 12 + 12 + 12 + 12 + 12.25 + 12.25 + 12.5 + 12.75 + 13.25 + 13.5 + 13.75 + 13.75 + 14 + 14.25 + 14.5 + 14.5 + 14.5 + 15 + 15 + 15.25 + 15.5 + 15.5 + 15.25 + 15.25 + 15 + 15 + 15 + 15 + 14.75 + 14.5 + 14.5 + 14.25 + 14.25 + 14.25 + 14.25 + 14 + 14 + 14 + 14.25 + 14.75 + 15 + 15 + 15 + 15.25 + 15.75 + 16.5 + 17.75 + 17.75 + 18 + 18.5 + 18.5 + 18 + 17.75 + 17.5 + 17 + 17 + 17 + 17.5 + 17.5 + 17.25 + 17.25 + 17.5 + 17.25 + 16.25 + 16 + 15.75 + 15.75 + 15.75 + 16.25 + 16.5 + 17 + 17.25 + 17.75 + 18 + 18 + 17 + 16.75 + 16.5 + 16.25 + 16 + 15.75 + 15.5 + 15.5 + 15.25 + 14.25 + 15.75 + 15 + 14.25 + 13.5 + 12.25 + 11 + 9.75 + 8.5 + 6.75 + 7 + 6.5 + 6.25 + 6.25 + 7.5 + 8.5 + 9.75 + 11.5 + 13 + 12.5 + 12.25 + 11.5 + 10.25 + 8.75 + 8 + 7 + 8.25 + 9 + 9.25 + 9.25 + 9.75 + 10 + 10.25 + 10.5 + 10.75 + 11.25 + 10.25 + 10.5 + 11 + 11.75 + 12 + 12 + 11.75 + 11.75 + 13.25 + 13.75 + 14.25 + 14.75 + 15.5 + 18.5 + 19 + 19.75 + 22.5 + 28 + 29.75 + 34.75 + 33.25 + 30.75 + 30.5 + 31.25 + 31.25 + 31.25 + 31 + 30 + 28.5 + 27 + 26.75 + 26.5 + 26 + 25.5 + 25 + 25.25 + 25.5 + 26 + 27.25 + 30 + 31.5 + 33 + 33 + 33.25 + 33.5 + 33.5 + 33.75 + 38.75 + 38.75 + 38 + 37.5 + 36.75 + 36.5 + 36.5 + 36.25 + 36.25 + 36.25 + 36.25 + 36.75 + 37.5 + 37.75 + 37.5 + 36.25 + 36 + 35.5 + 35 + 33.75 + 33 + 31.25 + 30.5 + 16.5 + 18.5 + 19.5 + 19.75 + 20 + 20 + 20.25 + 20.25 + 20 + 20 + 19.75 + 19.25 + 19.25 + 17.5 + 17 + 16.75 + 16.75 + 16.75 + 16.5 + 16.75 + 17.25 + 17.5 + 17.75 + 17.75 + 17.75 + 18 + 18.25 + 18.5 + 18.75 + 19.25 + 19.25 + 19.25 + 19.5 + 19.5 + 19.5 + 19.5 + 19.25 + 19.25 + 20.5 + 23.25 + 23.5 + 24.5 + 24.75 + 25.5 + 26.5 + 27 + 27.5 + 28.5 + 28.75 + 29.5 + 30 + 37 + 38 + 40.25 + 42.5 + 43 + 43.75 + 44.75 + 46.25 + 46.75 + 47.25 + 48 + 48.75 + 50.25 + 51 + 51.75 + 51.75 + 51.75 + 51.75 + 51.5 + 51.5 + 51 + 51 + 50.5 + 49.75 + 50.75 + 52.75 + 59 + 58.5 + 58.25 + 58.25 + 58 + 57.75 + 57.5 + 53 + 45.75 + 44.5 + 43.75 + 41.75 + 41 + 40 + 36.75 + 35.75 + 32.25 + 36.5 + 36.5 + 36 + 35 + 34.5 + 34 + 34 + 34.25 + 34.5 + 35.75 + 36 + 37.25 + 37.5 + 38 + 38.75 + 38.75 + 37.75 + 37.25 + 37 + 36.5 + 35.25 + 34 + 33.75 + 32.75 + 31.25 + 29 + 27.25 + 18 + 16.5 + 15.5 + 12 + 11 + 10.5 + 10.25 + 10 + 9.75 + 9.25 + 9.5 + 9.5 + 8.75 + 8.75 + 9 + 9 + 9.25 + 9.25 + 9 + 9 + 9 + 8.25 + 7.75 + 7.5 + 7.5 + 6.75 + 6.5 + 6.5 + 5.5 + 6 + 6 + 6.25 + 6.5 + 6.75 + 6.75 + 6.75 + 6 + 6 + 6.5 + 8 + 8.75 + 9 + 9.75 + 10 + 10.5 + 10.25 + 10.25 + 10.25 + 10.5 + 10.75 + 11 + 11.25 + 11.75 + 12 + 12.75 + 13.25 + 13.5 + 13.25 + 12 + 9.75 + 8.5 + 8.75 + 9 + 9.25 + 10.75 + 12.25 + 12.75 + 12.5 + 10.25 + 9.25 + 9.25 + 9.5 + 9.75 + 8.5 + 7 + 5.5 + 3.75 + 3.75 + 3.5 + 3 + 2.75 + 3.75 + 3.25 + 3.25 + 3.75 + 3.5 + 3.5 + 3.5 + 3.5 + 3.5 + 4 + 4 + 4 + 4.25 + 4.5 + 4.5 + 4.5 + 4.75 + 4.75 + 4.5 + 4.25 + 4 + 4.25 + 4.5 + 4.75 + 4 + 4 + 4 + 4 + 4 + 5 + 6 + 6 + 6 + 5.75 + 5.75 + 5.5 + 6.5 + 8.75 + 9 + 9 + 9 + 9 + 9.25 + 10.5 + 11.75 + 13.75 + 13.75 + 13 + 12.5 + 12.25 + 12.25 + 12.5 + 17 + 20.5 + 21.25 + 22.75 + 20.5 + 20.25 + 19.75 + 19 + 17.75 + 16.5 + 16.5 + 16.5 + 16.25 + 16.25 + 15.75 + 16 + 16 + 16 + 16 + 16 + 16 + 17.25 + 17.5 + 17.75 + 17.25 + 16 + 16.25 + 16.5 + 16.5 + 16.75 + 17 + 17 + 17 + 17 + 16.75 + 16.5 + 16.25 + 16 + 16 + 16 + 16 + 16 + 16.25 + 16.5 + 16.25 + 16.25 + 16.5 + 16.75 + 17 + 17 + 17.25 + 18.25 + 20.5 + 21.75 + 22.25 + 22.25 + 22.5 + 23 + 23.75 + 23.75 + 23.75 + 23.75 + 24.25 + 25 + 25 + 25.25 + 26.75 + 27.25 + 28.25 + 28.5 + 28.75 + 28.75 + 28.5 + 28.25 + 24.75 + 24.5 + 22 + 23.5 + 25.5 + 27 + 28.25 + 28.75 + 29 + 29 + 28.75 + 28.5 + 28 + 28.5 + 29 + 35.5 + 32 + 30 + 27 + 26.25 + 27 + 26.25 + 27.25 + 30.5 + 30.5 + 30 + 29.75 + 29.5 + 28.75 + 28 + 28.75 + 28.5 + 28 + 28.5 + 29.25 + 29 + 29.5 + 29.75 + 29.75 + 30 + 34.75 + 35.5 + 36 + 36.5 + 36.75 + 38 + 38.25 + 38.5 + 39 + 39.5 + 40.25 + 41.25 + 41.75 + 42 + 42.5 + 42.75 + 42.75 + 42 + 40.75 + 38.75 + 39.5 + 40 + 40.25 + 40.5 + 41.5 + 41.75 + 42.25 + 42.25 + 42.75 + 43 + 43 + 42.75 + 42.5 + 42.5 + 42.25 + 42.25 + 42 + 41.75 + 41.25 + 40.25 + 40.5 + 41 + 42 + 42.5 + 42.75 + 43 + 42.75 + 42 + 41.75 + 42 + 42.25 + 42.75 + 43.5 + 44.25 + 44.75 + 45.25 + 44.75 + 44.25 + 44 + 43.25 + 43 + 42.5 + 41.75 + 41.5 + 41.25 + 41 + 40.5 + 40.25 + 39.75 + 39.5 + 39.25 + 39 + 38.25 + 38 + 37.5 + 34.75 + 33 + 31.75 + 29.5 + 31.5 + 31.5 + 30.75 + 33.25 + 33.75 + 33.75 + 33.5 + 33.25 + 33.25 + 33.25 + 33 + 33 + 33 + 32.75 + 32.75 + 33 + 37.25 + 38.25 + 38.5 + 38.5 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.5 + 38.75 + 39 + 39.25 + 39.25 + 39.5 + 39.75 + 39.75 + 39.75 + 40 + 40.25 + 39.75 + 39.75 + 37 + 31.75 + 28.75 + 27.75 + 26.25 + 27 + 27.25 + 28 + 29.5 + 29.25 + 29 + 28.25 + 29.25 + 29.75 + 30 + 30.25 + 30.75 + 30.5 + 30.25 + 31.75 + 32.5 + 32.5 + 32.75 + 33 + 33 + 33 + 33.25 + 33.75 + 35.25 + 35.5 + 36.5 + 38 + 37 + 36.75 + 37 + 37.5 + 38.25 + 38.5 + 35 + 33.75 + 27.75 + 27.75 + 28.5 + 30 + 30.5 + 32 + 32 + 33 + 33.75 + 36.75 + 36.75 + 39 + 41.5 + 41.75 + 40.75 + 40.25 + 40.5 + 40.75 + 41 + 42.5 + 43.5 + 44.25 + 45.25 + 45.75 + 46.75 + 47.25 + 47.25 + 47.5 + 47.5 + 47.5 + 47.5 + 47.25 + 47.25 + 47 + 46.5 + 45.5 + 44.75 + 40.75 + 40.5 + 40.25 + 40.25 + 40.25 + 40 + 39.75 + 39.75 + 39.25 + 38.75 + 38.5 + 38.5 + 37.75 + 37.75 + 38 + 38.25 + 38 + 38 + 37.75 + 37.5 + 37.5 + 37.5 + 39.25 + 39.25 + 39.25 + 39.25 + 39.25 + 39 + 39.25 + 39.75 + 39.75 + 39.75 + 39 + 39.5 + 39.25 + 39 + 39 + 39 + 39 + 38.75 + 38.25 + 37.75 + 37 + 36 + 36.5 + 36.75 + 37 + 37 + 36.75 + 36.75 + 37.5 + 38 + 38.5 + 38.75 + 38.75 + 38.5 + 38 + 38 + 39.75 + 39.25 + 38.25 + 38 + 38.25 + 39 + 39.5 + 39.5 + 39.75 + 40 + 40 + 40.25 + 40.5 + 40.75 + 41.25 + 41.75 + 42 + 42.25 + 42.5 + 42.5 + 42.75 + 42.75 + 42.75 + 42.5 + 42.5 + 42.25 + 41.5 + 40.5 + 38.75 + 38.25 + 38 + 38.5 + 39.25 + 39 + 39 + 39 + 39 + 39 + 39.25 + 39.25 + 39.25 + 39.5 + 39.75 + 39.75 + 41.5 + 41.75 + 42.25 + 44.75 + 47 + 47.5 + 47.75 + 48 + 48 + 48 + 48.25 + 48.25 + 49 + 49.75 + 50 + 50.75 + 51.25 + 52 + 53.25 + 54 + 55 + 56 + 55.5 + 55 + 53.75 + 53.25 + 53 + 52.75 + 52 + 52.25 + 52.25 + 52.5 + 52 + 50.75 + 50 + 49.75 + 49.25 + 48.25 + 44.25 + 41 + 41.5 + 42.25 + 42.75 + 42.75 + 43 + 44.25 + 44.5 + 44.75 + 45.75 + 46 + 46 + 46.75 + 47.25 + 48.75 + 48.75 + 49.25 + 50.75 + 48.5 + 48 + 48.25 + 49 + 49.75 + 50.25 + 50.5 + 50.5 + 50.5 + 50.5 + 50.25 + 50 + 49.25 + 48.5 + 48 + 47.25 + 47 + 47.5 + 49 + 49.25 + 49.5 + 52.75 + 53.5 + 54.25 + 55 + 55.25 + 55.75 + 56 + 55.5 + 55.25 + 54.75 + 53 + 52.5 + 51.75 + 51.25 + 51 + 50.5 + 50 + 49.25 + 48.5 + 48.5 + 48.5 + 48.25 + 48.25 + 48 + 47.25 + 47.25 + 46.75 + 46 + 45.5 + 45 + 45.25 + 45.5 + 45.75 + 45.75 + 46 + 46 + 46 + 46.25 + 46.25 + 46.5 + 47.25 + 48.25 + 48.5 + 49.5 + 51.25 + 52.25 + 52.5 + 52.25 + 52.25 + 52.25 + 52.25 + 52.5 + 53 + 53.5 + 53.75 + 54.5 + 55.25 + 56 + 56 + 57.5 + 58.25 + 58.25 + 58 + 57.75 + 56.75 + 56.25 + 56.25 + 56 + 56 + 56 + 56 + 56 + 55.75 + 55.75 + 55 + 56.75 + 56.75 + 58 + 58.25 + 58.75 + 59 + 58.25 + 56.5 + 56.75 + 56.75 + 56.75 + 57.25 + 57.5 + 57 + 56.5 + 56.5 + 56.5 + 56.5 + 56 + 55.5 + 54 + 53.75 + 53.5 + 53.5 + 53.25 + 54.25 + 55.5 + 56 + 56.25 + 55.25 + 55.25 + 55.5 + 56 + 56.25 + 56.25 + 55.75 + 57.5 + 61 + 64 + 66.25 + 67.75 + 68.25 + 70 + 70.5 + 71 + 71 + 71.25 + 71.5 + 71.5 + 71.75 + 71.5 + 71.25 + 71 + 71 + 71 + 70.75 + 70 + 69.75 + 69.5 + 69.25 + 68.75 + 69 + 69.25 + 69.5 + 70.5 + 71 + 71.5 + 71.75 + 72 + 72.75 + 73 + 73.25 + 76.5 + 78 + 78.75 + 79 + 79 + 78.75 + 78.25 + 76.25 + 76.25 + 76.5 + 76.75 + 77.5 + 78.5 + 76 + 73.5 + 69 + 69.25 + 65.5 + 63.75 + 66.5 + 70.5 + 69.25 + 65.75 + 63 + 60.75 + 59 + 59 + 59 + 60 + 62 + 61.25 + 60.75 + 60.75 + 61 + 61.5 + 62.5 + 63.25 + 62.25 + 61.25 + 60.75 + 60.5 + 60.5 + 60.5 + 60.75 + 61.5 + 61.75 + 61.75 + 61.75 + 61.5 + 59.75 + 59.25 + 58.75 + 58.5 + 58 + 58 + 57.5 + 56.75 + 44 + 42.5 + 41 + 39.5 + 38 + 37.25 + 36.5 + 36 + 36 + 36 + 35.75 + 35.25 + 34.5 + 33.75 + 32.75 + 31.75 + 29.5 + 24.5 + 23.75 + 22.75 + 23 + 23.5 + 24.5 + 24.75 + 25.25 + 25.25 + 24.75 + 25 + 25.5 + 26 + 26.5 + 27 + 27.5 + 28 + 31.25 + 32.25 + 33.75 + 41.5 + 42.75 + 43.5 + 44 + 44.5 + 45.5 + 46.5 + 47.75 + 50 + 50.5 + 51.5 + 52.5 + 53.75 + 55.5 + 56 + 55.5 + 55 + 56.75 + 57.25 + 48.5 + 43.5 + 39.5 + 38.75 + 38.25 + 37.75 + 36.75 + 36 + 34.5 + 32.25 + 30.75 + 29.75 + 28.75 + 28 + 27.5 + 27 + 25.75 + 24.25 + 20 + 18.25 + 16.75 + 15.25 + 14 + 13.25 + 12.5 + 11.25 + 10.25 + 9 + 8.5 + 7.75 + 7 + 6.25 + 6.5 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 7.5 + 7.25 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 6.75 + 6.75 + 6 + 6 + 6 + 5.75 + 5.75 + 5.5 + 5.25 + 5.25 + 5 + 5 + 5 + 4.75 + 4.75 + 6.25 + 7.5 + 8.25 + 8.75 + 7.5 + 7 + 6.75 + 6.5 + 6.25 + 6.5 + 7 + 8.25 + 9 + 9.75 + 11.25 + 13.5 + 16 + 19.25 + 25 + 29.5 + 29 + 28.5 + 27 + 26.75 + 27 + 26.5 + 25.75 + 28.5 + 29.75 + 29.5 + 28.75 + 29.25 + 30.5 + 30.75 + 31.25 + 31.5 + 31.75 + 37.25 + 39 + 40.75 + 41 + 41 + 41 + 41 + 41 + 41 + 42.25 + 50.5 + 52.75 + 52.25 + 51.75 + 51.75 + 51.75 + 51.75 + 51 + 50.75 + 49.75 + 49.5 + 49.25 + 49 + 49.75 + 50 + 50 + 50 + 50 + 50 + 50.25 + 50.75 + 51 + 51.25 + 51.75 + 52 + 52.75 + 54 + 54.5 + 55 + 55.75 + 56.25 + 57 + 57 + 57.5 + 58 + 58.25 + 59 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 60.75 + 61.5 + 61.5 + 62.25 + 62.5 + 62.75 + 62.75 + 63 + 62.5 + 61.75 + 65.5 + 68.5 + 71.75 + 73.25 + 74.75 + 73.75 + 72.25 + 71.75 + 71 + 71 + 70.75 + 71 + 71.75 + 71.25 + 70 + 68.75 + 67 + 64 + 62.5 + 61.25 + 61.25 + 61.75 + 61.75 + 62.25 + 62.75 + 63 + 63.25 + 63 + 62.75 + 61.5 + 59 + 58.75 + 58.25 + 57.5 + 58 + 58 + 58 + 58 + 57.25 + 56.75 + 56 + 55.25 + 55 + 54.75 + 56.75 + 56.75 + 56.75 + 56.5 + 56.5 + 56.5 + 56.75 + 54 + 53.75 + 52.75 + 52.5 + 50 + 50 + 50 + 50 + 49.75 + 49.5 + 49.25 + 49.25 + 49.25 + 49 + 49 + 48.5 + 48.25 + 48.25 + 48 + 47.75 + 47.75 + 47.75 + 48 + 48 + 48.25 + 48.25 + 48.25 + 48.25 + 48 + 48 + 47.75 + 48 + 48.75 + 49 + 49 + 49.25 + 49.75 + 50.5 + 51.25 + 51.75 + 52 + 53.5 + 53.5 + 54 + 53.5 + 49.25 + 48.5 + 48.25 + 46.5 + 46.25 + 46 + 45.25 + 45.75 + 46.5 + 47.75 + 49.5 + 50.25 + 51 + 50.25 + 49 + 48.75 + 48.25 + 48.25 + 48.5 + 48.5 + 48.75 + 49.5 + 49.5 + 49.5 + 49.5 + 49.5 + 49.75 + 50 + 50 + 50 + 50 + 49.75 + 49.75 + 49.75 + 49.75 + 50 + 50 + 50.25 + 50.75 + 51 + 51.5 + 52 + 49.75 + 49 + 48.5 + 48.25 + 48.25 + 48.25 + 48 + 47.75 + 46.75 + 46.25 + 46 + 34.75 + 34 + 33.25 + 32.75 + 33 + 34 + 34.25 + 34.75 + 33.75 + 32.25 + 32.75 + 32.5 + 32.25 + 32.75 + 33.75 + 35 + 36.75 + 39 + 41 + 42.5 + 46.5 + 47.75 + 48.5 + 46.75 + 41.25 + 41.25 + 41 + 40.25 + 41.25 + 44.75 + 45.5 + 46.75 + 47.75 + 48.5 + 49 + 50 + 50.75 + 51.25 + 51.5 + 52 + 52 + 52 + 53 + 54.5 + 56 + 56.75 + 57 + 56.75 + 56.5 + 56.75 + 57.75 + 57.5 + 57.5 + 57.5 + 57.25 + 57.25 + 57.25 + 57 + 56.75 + 55.75 + 55 + 54 + 54.75 + 55 + 54.5 + 51 + 49.75 + 48.75 + 48.5 + 46.75 + 45.5 + 44.75 + 44.25 + 44.25 + 43.5 + 41 + 40.5 + 40.25 + 40 + 39.5 + 38 + 37.5 + 37 + 36.5 + 36.75 + 36.75 + 37 + 37 + 37 + 37 + 36.75 + 36.5 + 36.5 + 36.75 + 36.75 + 36.25 + 37.5 + 37.5 + 38 + 38.5 + 39.25 + 39.75 + 39.5 + 39.25 + 39.25 + 40.25 + 41.5 + 41.75 + 42 + 42 + 41.5 + 40.5 + 40.5 + 40 + 40 + 39.5 + 39 + 38.5 + 37.5 + 36 + 35.75 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 36.25 + 36 + 35.25 + 34.5 + 33.75 + 32.5 + 31.75 + 31.75 + 33 + 32.75 + 31.5 + 30.75 + 30.25 + 30.25 + 30 + 30 + 28.75 + 28.75 + 28.75 + 28.75 + 29 + 30 + 31 + 31.5 + 31.75 + 31 + 30.75 + 30.75 + 30.75 + 31 + 32.75 + 34.75 + 35.25 + 35.75 + 35.25 + 35.25 + 35.25 + 35 + 35.25 + 36 + 35.75 + 35.5 + 35.25 + 35.75 + 36.25 + 36.75 + 37 + 37.5 + 37.75 + 37.75 + 37.5 + 37.25 + 37.25 + 37.25 + 38.25 + 39 + 39.5 + 39.5 + 39.5 + 39.5 + 39.5 + 39.25 + 39.25 + 39.75 + 40 + 39.75 + 39.5 + 39 + 38.75 + 38.25 + 37.75 + 37.5 + 37.75 + 38.25 + 38.5 + 38.5 + 38.75 + 39 + 39.5 + 39.75 + 39.75 + 40.25 + 41 + 41.5 + 41.5 + 41.5 + 41 + 40.75 + 40.5 + 40 + 38.75 + 38.25 + 39.25 + 40.75 + 41.75 + 42 + 43.25 + 43.5 + 44.5 + 44.75 + 46.25 + 46 + 45.75 + 45 + 45.5 + 44.5 + 43.75 + 44 + 44.25 + 45.75 + 48 + 48.25 + 45.25 + 45 + 44.5 + 43.75 + 43.75 + 43.75 + 44 + 43.75 + 43.75 + 43.75 + 44 + 44 + 44 + 44 + 43.75 + 43.5 + 43.5 + 44.25 + 44.25 + 44.25 + 44.25 + 44.25 + 44.25 + 45 + 46.5 + 49 + 48.75 + 49.25 + 49.25 + 49.25 + 49.25 + 49.25 + 49.5 + 49.5 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 51.25 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 52.25 + 52 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 52 + 51.75 + 51.5 + 51.25 + 51.25 + 51.25 + 51.25 + 51 + 51 + 50.75 + 50.5 + 50.25 + 50.25 + 50 + 49.75 + 50 + 50 + 50.25 + 50 + 50 + 50 + 50 + 49.5 + 49 + 48.75 + 48.75 + 48.75 + 48.75 + 48.75 + 50.5 + 50.75 + 50.75 + 52.75 + 53.5 + 54.25 + 54.5 + 54.75 + 55.25 + 55.25 + 55.5 + 55.25 + 55.25 + 55.25 + 55.5 + 56 + 56.5 + 57 + 57.25 + 57.5 + 58 + 58.25 + 58.25 + 58 + 57.75 + 57.5 + 57 + 56.75 + 56.5 + 55.75 + 54.5 + 53.75 + 52.75 + 52.25 + 52 + 52 + 52 + 52 + 51.75 + 51.5 + 51.5 + 51.25 + 51 + 50.75 + 50.25 + 50.25 + 50.5 + 51.5 + 51.5 + 50.75 + 48.5 + 47.75 + 46.5 + 45.5 + 44.25 + 42.75 + 42 + 41 + 40.5 + 40 + 39.75 + 38.5 + 37 + 35.25 + 33 + 32.5 + 31.25 + 30 + 30 + 33 + 33.25 + 33.75 + 34.5 + 35 + 36 + 37 + 37.75 + 38.75 + 39.25 + 39.5 + 39.75 + 39.75 + 40.75 + 42.25 + 42.25 + 42.25 + 42.25 + 41.25 + 40.25 + 38.75 + 38 + 37 + 35.25 + 33.25 + 31.75 + 31.5 + 32 + 33 + 33.5 + 35.75 + 36.25 + 36.5 + 36.75 + 36.75 + 36.25 + 36 + 37.25 + 37.5 + 37.75 + 36.25 + 36 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 35.25 + 34.5 + 34 + 34 + 34.25 + 36.5 + 36.5 + 35.75 + 35.75 + 35.25 + 34.75 + 34 + 33.5 + 31.75 + 29.5 + 31.5 + 33 + 35.25 + 35.5 + 36.75 + 37 + 37 + 36.75 + 36.75 + 36.25 + 36.5 + 37 + 36.5 + 36.25 + 35.5 + 35 + 34.5 + 32.75 + 32.25 + 31.5 + 31.5 + 32 + 32.5 + 33.25 + 35.5 + 35 + 34 + 33.25 + 33.75 + 34 + 34.25 + 34.25 + 34 + 34 + 34 + 34.25 + 34.75 + 35.75 + 36 + 36.25 + 36.5 + 36.5 + 36.5 + 36.5 + 36 + 35.75 + 35.5 + 35.25 + 35.25 + 35 + 35 + 35 + 35.25 + 36 + 36.5 + 37 + 38.25 + 38.5 + 39 + 39 + 39.25 + 39.25 + 39.5 + 39.5 + 39.5 + 39.75 + 39.75 + 39.5 + 38.75 + 38 + 37 + 36 + 34.75 + 34.25 + 32.75 + 31.75 + 31.5 + 30.75 + 30 + 25.25 + 25.75 + 25.5 + 25.5 + 25.5 + 25.5 + 25.75 + 27.5 + 28.75 + 29.25 + 30.25 + 31 + 31.5 + 31.5 + 31.5 + 31.25 + 29.75 + 28.75 + 28 + 27.5 + 26.25 + 25 + 24 + 23 + 22.5 + 22.75 + 22.25 + 20.5 + 20 + 19 + 18.75 + 18.75 + 18.5 + 18.5 + 18.25 + 18.25 + 18.25 + 18 + 19.5 + 19.5 + 20.25 + 23.25 + 23.75 + 23.5 + 21.5 + 19.25 + 17.75 + 17.75 + 17.75 + 17.75 + 17.5 + 17 + 16.5 + 16.25 + 15.75 + 15.25 + 14.5 + 14.5 + 14.5 + 14.25 + 14.25 + 14 + 13.5 + 13 + 12.25 + 12 + 11.75 + 12 + 12.5 + 11.5 + 11.25 + 11 + 10.75 + 9.75 + 9.25 + 9.25 + 9 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 10 + 11.5 + 12.25 + 11.5 + 10.75 + 8.5 + 7.75 + 7.25 + 6.75 + 6 + 5 + 5 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.75 + 5.75 + 6 + 6 + 5.75 + 5.75 + 6.5 + 7.75 + 8.5 + 9 + 9.75 + 10 + 9.75 + 9.75 + 9.5 + 9.5 + 10 + 10.25 + 11.5 + 12 + 12.25 + 13.25 + 13.75 + 15.25 + 15.25 + 14.25 + 15.25 + 17.25 + 23.75 + 24 + 23.5 + 22.75 + 21.75 + 21.5 + 21.5 + 21.75 + 21.75 + 21.25 + 25 + 28 + 31.5 + 34.5 + 36 + 34.75 + 35 + 35.75 + 36.5 + 36.5 + 37.25 + 38 + 36.5 + 35.75 + 36.25 + 37.75 + 38.75 + 39 + 39 + 39.25 + 38.5 + 37 + 35.25 + 35 + 33.75 + 32.75 + 32.25 + 30.75 + 29.5 + 28.25 + 27.5 + 27.5 + 27.25 + 27.25 + 27.75 + 28.5 + 29 + 29.25 + 28.5 + 27.75 + 25.75 + 24.25 + 23.75 + 23.25 + 22.75 + 22.25 + 21.75 + 21 + 20.5 + 20.25 + 20.75 + 21 + 21.5 + 21.75 + 21.75 + 22 + 22.5 + 23.5 + 24 + 26.75 + 27.5 + 28.25 + 29 + 28.75 + 28.75 + 29 + 30 + 29.5 + 29.25 + 28.25 + 28.25 + 29.25 + 29.75 + 30 + 30.25 + 30 + 29.75 + 30.25 + 28.75 + 28.75 + 28.5 + 28.5 + 28.5 + 28.5 + 28 + 28.5 + 29.5 + 31 + 31.5 + 30.5 + 30 + 29.5 + 30.25 + 31.5 + 32.5 + 32.5 + 30.75 + 30.75 + 30.25 + 27.5 + 25 + 25 + 25 + 25.25 + 25.25 + 25 + 24.75 + 24.75 + 24.25 + 24 + 24 + 24.75 + 25 + 25.5 + 25.75 + 25.5 + 25 + 25 + 25 + 25 + 27.25 + 28 + 30 + 30.25 + 29 + 28.5 + 28.25 + 28.25 + 28.25 + 28.25 + 28.25 + 28.5 + 28.75 + 28.75 + 29 + 29.25 + 29.5 + 29.75 + 30 + 30 + 31 + 31.25 + 31.5 + 31.75 + 32 + 32.75 + 33.75 + 35.5 + 36 + 34 + 33.75 + 34 + 34.25 + 34.75 + 34.75 + 35.5 + 35.25 + 36.5 + 36 + 36.5 + 38.75 + 38.5 + 37 + 36.75 + 36 + 35.5 + 34.75 + 35 + 35.75 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36.75 + 38.25 + 39.5 + 39 + 38.5 + 38.75 + 39 + 40 + 40.75 + 40.5 + 39 + 37.5 + 38 + 37.75 + 37.5 + 37.25 + 36.5 + 36.25 + 36 + 35.5 + 35 + 33.5 + 32 + 34.5 + 36.5 + 36.5 + 35.5 + 34.5 + 34.5 + 34.5 + 34.5 + 35.75 + 36.5 + 36.75 + 37 + 36.75 + 36.5 + 35.75 + 35.75 + 35 + 34.5 + 34.25 + 34 + 33.5 + 33.25 + 33.25 + 33 + 33 + 32.75 + 32.5 + 32.25 + 32.25 + 32 + 31.75 + 31.75 + 31.75 + 31.75 + 31.5 + 31.5 + 31.25 + 30.75 + 30.5 + 30.5 + 29.75 + 29.75 + 29.5 + 29.25 + 28.25 + 28 + 28 + 26.75 + 26 + 25.5 + 25.5 + 25.5 + 25.5 + 25.5 + 25.25 + 25 + 25 + 25 + 25 + 24.5 + 24.25 + 24 + 23.5 + 23 + 22.5 + 22.25 + 22 + 21.75 + 22 + 22 + 22 + 22 + 22 + 22.25 + 22.5 + 23.25 + 23.5 + 24.25 + 24.5 + 26.75 + 27.25 + 28 + 30.75 + 32 + 33.25 + 32.75 + 32.25 + 31.75 + 31 + 28.75 + 28.75 + 28.5 + 28.25 + 28 + 28.25 + 28.5 + 29.75 + 30.25 + 30.5 + 31 + 32 + 32.5 + 33.25 + 34 + 37.5 + 37.75 + 39.25 + 40.25 + 40.5 + 41 + 41.25 + 42.5 + 43.25 + 44.5 + 48.5 + 49.25 + 50 + 50 + 50 + 49.75 + 48 + 47.5 + 47.25 + 45.75 + 45.25 + 45.25 + 45.25 + 45 + 44.75 + 44.75 + 44 + 43.75 + 44.5 + 44.5 + 44.75 + 45 + 45.25 + 45.5 + 46 + 46.75 + 49 + 50.5 + 51 + 51.75 + 52.5 + 53 + 53.5 + 54.25 + 54.5 + 55 + 55.5 + 57 + 57 + 57 + 57 + 57 + 57 + 57.25 + 57.25 + 57.5 + 57.5 + 57.75 + 58 + 58.25 + 58.5 + 57.75 + 57.5 + 57 + 56 + 54 + 54 + 57 + 57.75 + 54 + 54 + 55.75 + 56 + 56.25 + 59.5 + 60 + 61 + 63 + 63.25 + 63 + 62.75 + 62 + 60.75 + 60.5 + 61.5 + 61.75 + 62.75 + 63.25 + 63.25 + 63.25 + 62.5 + 62 + 60 + 59.25 + 55.75 + 56 + 56 + 56.25 + 55.5 + 52.75 + 52.75 + 53 + 56 + 64.75 + 66.5 + 67.25 + 67.75 + 68.25 + 69.75 + 70.25 + 72.25 + 75 + 77 + 76.75 + 76 + 70.75 + 69 + 65.5 + 65.25 + 66.75 + 67.5 + 68.5 + 69.75 + 70.75 + 72.75 + 73.5 + 74.75 + 75.25 + 75.5 + 76.75 + 77 + 77.25 + 77 + 77.25 + 77.5 + 77.75 + 78.75 + 78 + 77.75 + 77.75 + 78 + 79 + 79.5 + 80.5 + 81.5 + 81.75 + 81.5 + 81 + 80.5 + 80.75 + 80.75 + 80.5 + 80.25 + 81 + 84 + 85 + 85.25 + 91.5 + 93.25 + 91.75 + 90.75 + 90.25 + 89.25 + 88.5 + 87.5 + 86.5 + 85 + 84 + 84 + 84 + 84.25 + 84.25 + 80 + 77.5 + 77.5 + 77.75 + 77.75 + 78 + 78.25 + 78.75 + 77.25 + 74 + 69.5 + 64.25 + 62 + 61.5 + 61.25 + 60.5 + 61.75 + 62 + 62.25 + 62.75 + 63 + 63.25 + 63.25 + 63 + 63.25 + 64 + 64.75 + 65.25 + 67 + 67 + 67.75 + 68 + 68.75 + 68.5 + 67.5 + 67.25 + 66.75 + 65.75 + 65.75 + 65.75 + 65.25 + 65.25 + 65.25 + 65.25 + 65 + 65 + 65 + 65 + 65 + 65 + 66.5 + 66.75 + 67.25 + 68.25 + 68.25 + 68.75 + 69.25 + 70.5 + 71 + 72.75 + 74 + 74.5 + 76.25 + 76.25 + 76.5 + 76.75 + 76.75 + 78 + 78.75 + 79 + 79.5 + 81.5 + 83 + 83.75 + 85.25 + 86.25 + 86.25 + 86.25 + 86 + 85 + 84.5 + 84.75 + 85 + 85.25 + 85.25 + 85.5 + 85.75 + 85.75 + 84.25 + 84.25 + 84.5 + 84.75 + 85 + 85.25 + 85.75 + 87 + 87.25 + 88 + 88.75 + 90.5 + 93 + 93.75 + 95 + 96.25 + 99 + 99.5 + 99.5 + 99.5 + 99.5 + 105.5 + 106.5 + 103.5 + 101.25 + 101 + 101 + 101.25 + 101.5 + 101.5 + 101.75 + 101.75 + 104.25 + 105 + 107 + 107 + 108 + 109.75 + 110.75 + 109.5 + 109.25 + 109 + 108.5 + 108.75 + 109 + 109 + 109.25 + 109.25 + 109.25 + 108.75 + 108.75 + 108.5 + 108.25 + 108.75 + 108.75 + 108.75 + 108.75 + 108.5 + 108 + 107.75 + 107.75 + 107.75 + 107.75 + 107.75 + 106.75 + 106.5 + 106.25 + 106.25 + 104.75 + 104 + 103.5 + 103.5 + 103.25 + 103 + 102.5 + 101.75 + 101.5 + 101.25 + 100.25 + 99.75 + 99.75 + 99.5 + 99 + 98.5 + 97.25 + 94.5 + 92.5 + 93.25 + 99.75 + 100.25 + 100.5 + 100.75 + 101.5 + 102.25 + 102.25 + 101.75 + 101 + 99.25 + 99 + 99.5 + 99.75 + 100 + 100 + 99.75 + 98.5 + 97 + 97.25 + 97.25 + 96.5 + 96 + 95.75 + 95.5 + 95.5 + 95.75 + 96.5 + 97.75 + 98.75 + 98.75 + 98.5 + 98.5 + 98.5 + 98.75 + 98.75 + 99.5 + 99.75 + 99.5 + 98.25 + 95.25 + 93.75 + 92.5 + 92.25 + 92 + 91.25 + 91 + 91.25 + 91.75 + 92 + 93 + 93 + 93 + 93 + 94.5 + 95.25 + 95.5 + 97 + 97.75 + 98.75 + 100.75 + 101.5 + 102 + 102.5 + 103.5 + 104 + 104.5 + 105.75 + 109.5 + 110.25 + 110.5 + 109.25 + 108.5 + 108.25 + 108 + 107.75 + 108 + 108 + 108 + 108 + 107 + 104.75 + 104 + 98.25 + 95.75 + 88.5 + 88 + 88 + 88.25 + 88.75 + 89.25 + 89.75 + 90.5 + 90.5 + 90.75 + 90.5 + 90.25 + 89.75 + 85.25 + 85.75 + 87.25 + 88.75 + 89 + 89 + 89.25 + 90.5 + 91 + 91.25 + 91.5 + 91.75 + 91.75 + 92 + 92 + 91.5 + 91.25 + 90.75 + 90.5 + 90.25 + 89.5 + 89.25 + 89 + 88.5 + 88.25 + 87.5 + 87 + 87 + 87 + 87 + 87.5 + 87.5 + 87.25 + 87.25 + 86.75 + 85.25 + 85 + 85 + 84.75 + 84.25 + 83.75 + 83 + 83.25 + 83.25 + 83.25 + 83 + 82.75 + 81 + 79 + 78.25 + 77 + 75.5 + 72.75 + 72.5 + 72 + 71.5 + 71.25 + 70.75 + 70.75 + 70.75 + 70.75 + 70.75 + 68.5 + 66 + 62.5 + 57.75 + 56.25 + 56.5 + 57.25 + 58 + 57.5 + 57 + 56.75 + 56 + 55 + 53 + 51.5 + 49.5 + 46.25 + 43.5 + 42.75 + 42.5 + 41.5 + 41 + 40.75 + 40 + 39.5 + 38.75 + 42.25 + 46.75 + 49 + 53 + 53 + 52.5 + 52.75 + 52.75 + 52.75 + 53 + 53.5 + 54.25 + 55 + 56 + 55.75 + 56.75 + 52.75 + 53 + 53.25 + 53.5 + 52.75 + 51.5 + 52 + 53 + 56 + 56.25 + 60 + 62 + 62.5 + 62.25 + 61.5 + 60.75 + 60.5 + 60.5 + 60 + 59.75 + 59.75 + 58.25 + 57.75 + 56.5 + 54.75 + 55.5 + 53.5 + 51.5 + 49.25 + 47 + 44.5 + 42 + 40.5 + 38.75 + 38.5 + 39 + 39.75 + 40.75 + 42 + 42.75 + 43.5 + 43.75 + 43.75 + 44.25 + 44.5 + 45 + 45 + 45 + 45.25 + 45.5 + 46 + 47.25 + 48.5 + 49.5 + 50.75 + 52 + 52 + 52 + 52.75 + 53.5 + 53.5 + 52.25 + 51.75 + 51.5 + 51.75 + 51.25 + 52.25 + 52.25 + 52.75 + 52.5 + 52.25 + 52.25 + 53 + 53.5 + 53 + 49 + 45 + 42.25 + 41.5 + 41.75 + 42.25 + 45.5 + 47.25 + 48 + 48 + 47.75 + 42.75 + 40.5 + 39.5 + 37.75 + 36.25 + 36.5 + 36.75 + 37.25 + 37.75 + 38.25 + 38.75 + 38.5 + 38.5 + 38.5 + 38.75 + 38.25 + 37.75 + 37.5 + 37 + 36.5 + 35.75 + 34.75 + 33 + 32.5 + 32 + 32.25 + 32.25 + 32.75 + 33.5 + 35.75 + 36.25 + 36.5 + 36.75 + 36.75 + 34.5 + 34.5 + 34.5 + 35.5 + 35 + 34 + 33 + 33.25 + 32.5 + 32.25 + 30.25 + 30.25 + 29.5 + 29.5 + 30.5 + 31.75 + 34 + 36 + 41 + 46.75 + 42.75 + 39 + 25 + 24.75 + 23.25 + 23.25 + 22 + 19 + 21.25 + 22.25 + 23.75 + 23.75 + 23 + 22.25 + 21.5 + 20.75 + 14.75 + 14.25 + 13.5 + 13.25 + 13.25 + 12.75 + 12.25 + 11.75 + 11.75 + 8.75 + 8.25 + 8 + 8 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.75 + 6.75 + 7.5 + 8 + 9.5 + 9.5 + 10 + 10.25 + 10.5 + 11 + 11.5 + 11.75 + 12.25 + 13.5 + 13.75 + 13.75 + 14.25 + 14.5 + 14.75 + 14.75 + 14.75 + 14.75 + 14.75 + 14.75 + 14.75 + 15 + 15 + 15 + 14.25 + 11.25 + 12.25 + 11.25 + 14.25 + 15.75 + 15.75 + 15.5 + 15.75 + 15.75 + 15.75 + 14.5 + 14.5 + 17 + 12.75 + 12.5 + 11.5 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 10.25 + 12.25 + 13 + 13.5 + 14 + 13.25 + 15.25 + 16 + 15 + 14 + 15.5 + 16.75 + 17.75 + 17.5 + 17.5 + 18.5 + 18 + 17 + 17 + 17 + 15.25 + 16.75 + 18.25 + 19.5 + 23.75 + 25.75 + 27.75 + 29.75 + 32.75 + 38.75 + 43.75 + 47.75 + 49.25 + 48.5 + 49.5 + 50 + 50.75 + 51 + 52 + 52.25 + 52.25 + 52.5 + 52.75 + 53 + 53 + 52.5 + 53 + 53.25 + 53.25 + 54.25 + 54.75 + 55 + 55 + 55.25 + 56 + 56.75 + 58.25 + 62.25 + 64 + 62.25 + 63 + 63.25 + 63.75 + 64.25 + 68 + 68 + 66 + 65.75 + 65.25 + 65.5 + 65.5 + 65 + 64.75 + 64.75 + 64.5 + 64.75 + 65 + 66.25 + 69 + 69.5 + 69.75 + 70.5 + 72 + 72.5 + 73 + 73.5 + 73.5 + 73 + 71.75 + 70.75 + 70.5 + 70.5 + 70.5 + 70 + 69.75 + 69.25 + 69.25 + 69.5 + 67.75 + 64.5 + 61.5 + 60.75 + 58.25 + 58 + 57.5 + 56.5 + 56.5 + 57 + 58 + 58 + 57.5 + 53 + 53.25 + 53.5 + 52.25 + 50.5 + 50.75 + 51 + 51.5 + 52 + 52.5 + 52.5 + 52 + 51.25 + 51 + 50.75 + 50.5 + 50.5 + 51 + 51.75 + 53 + 53.25 + 53.5 + 53.5 + 54.5 + 54.75 + 55 + 55.5 + 56.25 + 56.75 + 57 + 57.25 + 57.25 + 57.75 + 58 + 58.25 + 58.5 + 58.5 + 57.75 + 57.5 + 53 + 53 + 53 + 52.5 + 51.75 + 52.25 + 52 + 52 + 52 + 52 + 52 + 52 + 52 + 52 + 51.5 + 51.75 + 51.25 + 50.5 + 49.25 + 51.5 + 52.5 + 53 + 53.25 + 53.25 + 53 + 53.25 + 53.5 + 54.5 + 54.75 + 55 + 55.25 + 55.25 + 56.75 + 57 + 57.5 + 57.75 + 58 + 57.75 + 57.25 + 55.75 + 55.25 + 55 + 55.5 + 56.5 + 57.25 + 60.75 + 60.25 + 60 + 60.75 + 61.25 + 61.75 + 59.75 + 58.25 + 57 + 56.25 + 53.25 + 52.5 + 54.25 + 55.75 + 57.5 + 58.75 + 60 + 61.25 + 63 + 64 + 64.25 + 63.75 + 61.75 + 61.5 + 61.75 + 62.75 + 63 + 62.5 + 61.75 + 63 + 63.75 + 64.25 + 64.75 + 64.75 + 64.5 + 64.25 + 64.75 + 65 + 61.5 + 59.75 + 59.5 + 61.5 + 64 + 66 + 67.25 + 67.5 + 66.75 + 65.75 + 67.75 + 68.25 + 68 + 67.25 + 65.75 + 64.5 + 63.5 + 62.75 + 62.25 + 62 + 62 + 62.25 + 63.25 + 63 + 62.75 + 61.75 + 61.5 + 60.75 + 64.75 + 65.75 + 66.5 + 66.75 + 67.25 + 68 + 67.5 + 65.5 + 63.75 + 62.5 + 61.5 + 60.25 + 59.5 + 59.5 + 62.25 + 62.25 + 61.75 + 61 + 58.5 + 58.5 + 58.25 + 58 + 58 + 57.75 + 56.75 + 57 + 57.5 + 58.75 + 58 + 57.5 + 57.25 + 57.5 + 57.75 + 59.5 + 59.75 + 59.5 + 59.5 + 59.75 + 59.75 + 60 + 59.75 + 59 + 57.25 + 55.5 + 53.75 + 52.75 + 51.5 + 50.5 + 50 + 50.75 + 58.25 + 61.75 + 63 + 64.75 + 65.5 + 66 + 66.25 + 66.25 + 66 + 65.5 + 64 + 59.75 + 58.25 + 57.75 + 58.25 + 59 + 60 + 61 + 61.25 + 61.25 + 64.75 + 65 + 66.5 + 71.5 + 72 + 72.25 + 73 + 72.5 + 71.25 + 70.25 + 68.25 + 65.75 + 61.75 + 59 + 58.25 + 58.5 + 58.5 + 57.25 + 56.75 + 56 + 55 + 54.75 + 57 + 57.5 + 58.25 + 59 + 59.5 + 59.75 + 60.25 + 60 + 60.75 + 61 + 61.25 + 61.25 + 60.75 + 59.25 + 56.75 + 56 + 56 + 56 + 56 + 56 + 56 + 56.75 + 57.5 + 58 + 58 + 57.5 + 57 + 57.5 + 55.25 + 53 + 51 + 49.75 + 49 + 51 + 52.5 + 53.5 + 54 + 54 + 54.25 + 53.5 + 56 + 57.5 + 58.25 + 59 + 59.75 + 60.75 + 57.75 + 56.25 + 53 + 49.5 + 45.75 + 44.25 + 43.5 + 43.75 + 45.5 + 46 + 46.25 + 46 + 45.25 + 43.5 + 42 + 41.25 + 38.5 + 36.5 + 36.25 + 36 + 35.75 + 35.75 + 36 + 35.5 + 34 + 33 + 31.5 + 30.25 + 29.25 + 29.5 + 29.75 + 30 + 30 + 30 + 30.5 + 31 + 32.25 + 32.25 + 32.25 + 33 + 32.5 + 31.25 + 30.5 + 29.5 + 33 + 32 + 26.5 + 24.5 + 23.25 + 23.25 + 23.5 + 24.5 + 24.75 + 26.75 + 27 + 27.5 + 27.5 + 27.25 + 24.25 + 21.5 + 20.5 + 20.25 + 20.25 + 19.5 + 18 + 17.25 + 16.75 + 16.75 + 17 + 17.25 + 17.5 + 17.75 + 18.25 + 18.75 + 19.25 + 19.25 + 19.5 + 21 + 21.25 + 21 + 21 + 21.5 + 21.75 + 21.75 + 20.5 + 20 + 19.5 + 18.25 + 17.25 + 17.25 + 16.75 + 16.5 + 16.5 + 16.75 + 19.25 + 19.5 + 19.5 + 19.5 + 18.75 + 18.25 + 17.75 + 17.25 + 15.75 + 15.5 + 15.5 + 15.75 + 16.5 + 16.75 + 18.25 + 19.75 + 20.75 + 21 + 21 + 20.75 + 20.75 + 20.75 + 26 + 26.25 + 26 + 26 + 26 + 26 + 26.5 + 29 + 29.75 + 31.25 + 31.5 + 31.5 + 31.75 + 32.5 + 33.75 + 34.25 + 33.25 + 32.5 + 32 + 31.5 + 31 + 30.75 + 29.75 + 29 + 27.75 + 23 + 21.5 + 20.25 + 19 + 18.5 + 17.5 + 16.25 + 16 + 16.25 + 16.25 + 16 + 15.75 + 15.5 + 15 + 14.5 + 11.25 + 9 + 8.75 + 8.75 + 8.75 + 9.25 + 9.5 + 9.25 + 8.5 + 8.25 + 8.25 + 11.25 + 14.5 + 15.25 + 15.25 + 13.75 + 13.5 + 14 + 14.5 + 15.25 + 15.5 + 15.75 + 15.75 + 16.25 + 16.25 + 17.5 + 20.25 + 20.75 + 20.25 + 20.75 + 20.5 + 18 + 17 + 16.25 + 16 + 15.5 + 15 + 14.5 + 13.75 + 13.5 + 13.75 + 13.75 + 14 + 14.75 + 15.75 + 15.5 + 17 + 20.5 + 20.25 + 22.75 + 23.5 + 23.5 + 24.5 + 24.75 + 24.75 + 24.75 + 24.75 + 24.5 + 24.25 + 24 + 23.25 + 22.75 + 21.75 + 16.75 + 16.75 + 17.5 + 19 + 19.5 + 20 + 21.25 + 22 + 22.25 + 24.25 + 24.5 + 24.75 + 24.75 + 24.5 + 23.25 + 22 + 22.25 + 22.25 + 22 + 21.25 + 21.5 + 21.5 + 22.75 + 23.5 + 24.25 + 25.25 + 26.25 + 26 + 25.75 + 26.5 + 27.25 + 27.5 + 28.25 + 28 + 27.75 + 27.25 + 27 + 27 + 26.75 + 26.75 + 26.5 + 26.25 + 26 + 25.75 + 25.75 + 25.5 + 25.25 + 25 + 25 + 24.5 + 24.5 + 23.75 + 23.25 + 22.75 + 22.75 + 22.5 + 22.25 + 21.25 + 21 + 21 + 21 + 21 + 21 + 21 + 20.75 + 20.75 + 20.25 + 19.5 + 19.5 + 19.5 + 19.25 + 18.5 + 18.25 + 18 + 18 + 18 + 18 + 18.25 + 18.25 + 18.25 + 18.25 + 18.5 + 19.25 + 19.75 + 20 + 19.75 + 19.5 + 19 + 19 + 18.75 + 18.75 + 18.5 + 18.75 + 18 + 16 + 14 + 13.25 + 13 + 12.25 + 11.75 + 11.75 + 12.25 + 14 + 14 + 14.25 + 14.25 + 12.5 + 12.5 + 11.75 + 12 + 12 + 11.5 + 11 + 10 + 9.25 + 9 + 8.75 + 9.75 + 11 + 14.25 + 16.5 + 19.5 + 21 + 22.5 + 23.75 + 24.5 + 27.25 + 29 + 30.75 + 30.5 + 30 + 26.75 + 25.5 + 23.5 + 20.5 + 19.25 + 18.5 + 18.25 + 18.25 + 18 + 18 + 18 + 18 + 18 + 18 + 18.5 + 20.5 + 22.25 + 22.75 + 22.75 + 20.5 + 19.25 + 18.25 + 18.25 + 18 + 18.5 + 18.75 + 18.75 + 19 + 19 + 19 + 19.25 + 19.25 + 19.25 + 19 + 18.75 + 18.75 + 18.75 + 19.5 + 12.25 + 13.75 + 14.75 + 14.75 + 14.5 + 14.75 + 15 + 15.25 + 15.75 + 18.75 + 19.25 + 22 + 22 + 21.5 + 26.5 + 26.25 + 25.25 + 27.25 + 26.75 + 27 + 26 + 22 + 21.25 + 21.5 + 21 + 19.25 + 16.5 + 20.25 + 17.25 + 16.5 + 18 + 17.75 + 16.25 + 11.75 + 12.25 + 12.5 + 12.25 + 12 + 12 + 11.75 + 11.75 + 11.75 + 11.25 + 10.75 + 10.5 + 10 + 9.75 + 9.5 + 9.25 + 9 + 8.75 + 8.5 + 8 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.5 + 6.75 + 7.25 + 7.5 + 7.75 + 8.25 + 8.75 + 9.25 + 9.75 + 10.5 + 10.5 + 10.5 + 9.25 + 9.5 + 9.5 + 8.75 + 8.25 + 7.75 + 7.75 + 7.75 + 8 + 8.5 + 8.75 + 9 + 9.25 + 9.25 + 9.5 + 9.5 + 9.75 + 10 + 10 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.75 + 13 + 13 + 13.25 + 13.25 + 12.75 + 12.75 + 12.5 + 12 + 11.75 + 11.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 11 + 11.25 + 11.5 + 11.5 + 11 + 10.75 + 10 + 9.5 + 8 + 8.25 + 8.25 + 8.25 + 8.75 + 9 + 9 + 9 + 8.75 + 8.75 + 8.75 + 8 + 7.25 + 6.75 + 5.75 + 5.75 + 5.5 + 5.5 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 6 + 6.5 + 7 + 8.75 + 8.75 + 9.75 + 9.75 + 9.5 + 9.5 + 9.5 + 8.5 + 8.75 + 8 + 8 + 8.25 + 8.25 + 8.75 + 9 + 9 + 8.5 + 8.75 + 9.5 + 10.5 + 11.5 + 14.5 + 14.5 + 15.5 + 16.25 + 18.25 + 24.75 + 25.25 + 25.5 + 25.5 + 23.25 + 23 + 23 + 23 + 23 + 21.75 + 20.5 + 20 + 20 + 19.75 + 19.75 + 19.75 + 19.75 + 19.75 + 19.5 + 19 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 19.25 + 20.75 + 21 + 21.75 + 22.5 + 23.75 + 24.75 + 25.25 + 26 + 26.75 + 26.75 + 26.75 + 26.75 + 26.5 + 26.5 + 26 + 26.25 + 26.75 + 28 + 28.25 + 28.25 + 28.5 + 28.75 + 29 + 29.25 + 30.75 + 32.25 + 34 + 34 + 34 + 33.75 + 33.25 + 33 + 32.75 + 32.75 + 32.75 + 33 + 33 + 33 + 33 + 32.75 + 32.5 + 32.5 + 31.75 + 31.5 + 31.25 + 31 + 30.75 + 30 + 29.5 + 29.25 + 29.25 + 29.25 + 28.25 + 28 + 27.75 + 26.25 + 25.75 + 28.25 + 28.5 + 29.25 + 29.5 + 30.25 + 30.75 + 31 + 31.25 + 32 + 35.75 + 36 + 36 + 36 + 36.25 + 36.5 + 36.25 + 36 + 36.25 + 34.5 + 33 + 32.75 + 32.5 + 33.75 + 34 + 34 + 35.75 + 36 + 37.25 + 37.5 + 37.75 + 38 + 38.25 + 43.25 + 45.5 + 45.75 + 45.75 + 46 + 46 + 46 + 46.25 + 46.25 + 46.5 + 46.5 + 46.75 + 49.5 + 50 + 51.5 + 52.25 + 52.25 + 51.75 + 51 + 51 + 51 + 50.75 + 50.75 + 50.5 + 51 + 53.25 + 53.75 + 54.5 + 53.75 + 47.5 + 47 + 45.5 + 44.75 + 43.25 + 42.5 + 40.75 + 37.75 + 33.5 + 31.5 + 28 + 27.5 + 27.25 + 26 + 25.5 + 25 + 23.75 + 23.75 + 24.75 + 24.75 + 25.75 + 26 + 26 + 25.75 + 25.25 + 25 + 24.5 + 24.5 + 24.25 + 24 + 24.5 + 24.5 + 24.5 + 24.25 + 24 + 23.25 + 22.75 + 22.5 + 22.25 + 21.5 + 21.5 + 21.75 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 23 + 22.25 + 22 + 21.5 + 21.5 + 21.5 + 22 + 22.25 + 22.25 + 22 + 21.75 + 21.5 + 21.25 + 20.75 + 21.25 + 21.25 + 21.25 + 18.75 + 19 + 19 + 19 + 19 + 18.25 + 17.25 + 15.75 + 12.75 + 12 + 11.75 + 10.5 + 10.25 + 10.5 + 11.25 + 15.25 + 15.5 + 15.75 + 16 + 16 + 15.25 + 15 + 12.25 + 11.5 + 13.75 + 14.25 + 14.75 + 14 + 13.5 + 13.25 + 12.25 + 12 + 11.75 + 11.5 + 11.5 + 11.5 + 13.5 + 13.5 + 13.5 + 13.75 + 13.75 + 13.75 + 12.25 + 9.75 + 10 + 9.25 + 9.25 + 9 + 9 + 9 + 8.75 + 8.25 + 8.25 + 8 + 8 + 8.75 + 9 + 9.75 + 9.75 + 9.5 + 9.5 + 9.5 + 8.25 + 8.25 + 6 + 5.5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4.25 + 5.5 + 5.5 + 5.75 + 5.75 + 6.75 + 7.25 + 8 + 8.75 + 8.75 + 8.75 + 9 + 9 + 9 + 8.75 + 8.25 + 8.25 + 8.25 + 8 + 9.5 + 10 + 10.75 + 11 + 11.5 + 11.5 + 11.25 + 11 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 11.25 + 11.75 + 12 + 12.5 + 12.75 + 12.75 + 13.25 + 13.25 + 13 + 12.5 + 10.25 + 10.25 + 10 + 10 + 10 + 9.75 + 9.75 + 9.5 + 9.25 + 9 + 9 + 8.75 + 8.75 + 8.5 + 8.5 + 8 + 7.5 + 7.75 + 7.75 + 7.75 + 8.25 + 8.75 + 9.5 + 9.5 + 9.25 + 10.5 + 10.5 + 10.5 + 9.75 + 9.25 + 8.75 + 8.25 + 7.75 + 7.5 + 7.25 + 6.75 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 8 + 8.25 + 8.75 + 9 + 9.25 + 9.5 + 9.75 + 10 + 10.25 + 10.75 + 11 + 11.25 + 11.75 + 12 + 12 + 12.25 + 12.25 + 12.5 + 12.5 + 12.25 + 11.75 + 16.25 + 17.75 + 18 + 16.5 + 17.25 + 20.25 + 16.5 + 19.25 + 21 + 21.5 + 21.25 + 22 + 26 + 27 + 26.75 + 27.25 + 25.25 + 26.25 + 26.5 + 21.5 + 22 + 22 + 19.25 + 18.75 + 15.75 + 15.25 + 15 + 14.75 + 14.5 + 14.75 + 14.75 + 13.75 + 12.25 + 19.5 + 18.75 + 18.75 + 18.75 + 19 + 19.25 + 19.25 + 19.25 + 19 + 19 + 19 + 18.75 + 18.75 + 18.5 + 18 + 18.25 + 18.25 + 19.25 + 20.5 + 22.75 + 22.75 + 22.25 + 20.5 + 18.5 + 18 + 18 + 18 + 18 + 18 + 18 + 18.25 + 18.25 + 18.5 + 19.25 + 20.5 + 23.5 + 25.5 + 26.75 + 30 + 30.5 + 30.75 + 29 + 27.25 + 24.5 + 23.75 + 22.5 + 21 + 19.5 + 16.5 + 14.25 + 11 + 9.75 + 8.75 + 9 + 9.25 + 10 + 11 + 11.5 + 12 + 12 + 11.75 + 12.5 + 12.5 + 14.25 + 14.25 + 14 + 14 + 12.25 + 11.75 + 11.75 + 12.25 + 13 + 13.25 + 14 + 16 + 18 + 18.75 + 18.75 + 18.75 + 18.75 + 19 + 19 + 19.25 + 19.5 + 19.25 + 19.25 + 18.75 + 18.5 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 18.5 + 18.5 + 19.25 + 19.5 + 19.5 + 19.5 + 20.25 + 20.75 + 20.75 + 21 + 21 + 21 + 21 + 21 + 21 + 21.25 + 22.25 + 22.5 + 22.75 + 23 + 23.25 + 24 + 24.5 + 24.75 + 25 + 25.25 + 25.25 + 25.5 + 25.75 + 25.75 + 26.25 + 26.25 + 26.5 + 26.75 + 26.75 + 27 + 27.25 + 27.25 + 28 + 28 + 28.25 + 27.5 + 27.25 + 26.5 + 25.75 + 26 + 26.25 + 25.25 + 24.25 + 23.5 + 22.75 + 21.5 + 21.5 + 21.25 + 22 + 22.25 + 22.25 + 22 + 23.25 + 24.5 + 24.75 + 24.75 + 24.5 + 24.25 + 22.25 + 22 + 21.25 + 20 + 19.5 + 19 + 17.5 + 16.75 + 16.75 + 21.75 + 22.75 + 23.25 + 24 + 24.25 + 24.5 + 24.75 + 24.75 + 24.75 + 24.75 + 24.5 + 23.5 + 23.5 + 22.75 + 20.25 + 20.5 + 17 + 15.5 + 15.75 + 14.75 + 14 + 13.75 + 13.75 + 13.5 + 13.75 + 14.5 + 15 + 15.5 + 16 + 16.25 + 17 + 18 + 20.5 + 20.75 + 20.25 + 20.75 + 20.25 + 17.5 + 16.25 + 15.75 + 15.5 + 15.25 + 15.25 + 15.25 + 14.5 + 14 + 13.5 + 13.75 + 15.25 + 15.25 + 14.5 + 11.25 + 8.25 + 8.25 + 8.5 + 9.25 + 9.5 + 9.25 + 8.75 + 8.75 + 8.75 + 9 + 11.25 + 14.5 + 15 + 15.5 + 15.75 + 16 + 16.25 + 16.25 + 16 + 16.25 + 17.5 + 18.5 + 19 + 20.25 + 21.5 + 23 + 27.75 + 29 + 29.75 + 30.75 + 31 + 31.5 + 32 + 32.5 + 33.25 + 34.25 + 33.75 + 32.5 + 31.75 + 31.5 + 31.5 + 31.25 + 29.75 + 29 + 26.5 + 26 + 26 + 24 + 24.25 + 24 + 22.25 + 23 + 22.75 + 21.75 + 21.5 + 20.75 + 19.75 + 19.5 + 20.75 + 21.5 + 23 + 23.5 + 24.25 + 24.75 + 24 + 21.25 + 20 + 19.5 + 18.75 + 17.75 + 17.5 + 17 + 16.75 + 16.75 + 16.75 + 17.25 + 18 + 19.5 + 20.25 + 20.25 + 20.5 + 21.5 + 24.25 + 27.25 + 27.5 + 27.5 + 27 + 26.75 + 24.75 + 24.5 + 23.5 + 23.25 + 23.25 + 24.5 + 26.5 + 32 + 33 + 29.5 + 30.5 + 31.25 + 32.5 + 33 + 32.25 + 32.25 + 32.25 + 31 + 30.5 + 30 + 30 + 30 + 29.75 + 29.5 + 29.25 + 30.25 + 31.5 + 33 + 34 + 35.5 + 36 + 35.75 + 35.75 + 36 + 36.25 + 36.5 + 38.5 + 41.25 + 42 + 43.5 + 45.25 + 46 + 46.25 + 46 + 45.5 + 43.75 + 43.5 + 44.25 + 45.75 + 49.5 + 53 + 56.25 + 57.75 + 60.75 + 59.75 + 59 + 58.25 + 57.5 + 56 + 53.5 + 54.25 + 54 + 54 + 53.5 + 52.5 + 51 + 49 + 49.75 + 51 + 53 + 55.25 + 57.5 + 57 + 57.5 + 58 + 58 + 57.5 + 56.75 + 56 + 56 + 56 + 56 + 56 + 56 + 56.75 + 59.25 + 60.75 + 61.25 + 61.25 + 61 + 60.75 + 60 + 60.25 + 59.75 + 59.5 + 59 + 58.25 + 57.5 + 57 + 54.75 + 55 + 56 + 56.75 + 57.25 + 58.5 + 58.5 + 58.25 + 59 + 61.75 + 65.75 + 68.25 + 70.25 + 71.25 + 72.5 + 73 + 72.25 + 72 + 71.5 + 66.5 + 65 + 64.75 + 61.25 + 61.25 + 61 + 60 + 59 + 58.25 + 57.75 + 58.25 + 59.75 + 64 + 65.5 + 66 + 66.25 + 66.25 + 66 + 65.5 + 64.75 + 63 + 61.75 + 58.25 + 50.75 + 50 + 50.5 + 51.5 + 52.75 + 53.75 + 55.5 + 57.25 + 59 + 59.75 + 60 + 59.75 + 59.75 + 59.5 + 59.5 + 59.75 + 59.5 + 57.75 + 57.5 + 57.25 + 57.5 + 58 + 58.75 + 57.5 + 57 + 56.75 + 57.75 + 58 + 58 + 58.25 + 58.5 + 58.5 + 61 + 61.75 + 62.25 + 62.25 + 59.5 + 59.5 + 60.25 + 61.5 + 62.5 + 63.75 + 65.5 + 67.5 + 68 + 67.25 + 66.75 + 66.5 + 65.75 + 64.75 + 60.75 + 61.5 + 61.75 + 62.75 + 63 + 63.25 + 62.25 + 62 + 62 + 62.25 + 62.75 + 63.5 + 64.5 + 65.75 + 67.25 + 68 + 68.25 + 67.75 + 65.75 + 66.75 + 67.5 + 67.25 + 66 + 64 + 61.5 + 59.5 + 59.75 + 61.5 + 65 + 64.75 + 64.25 + 64.5 + 64.75 + 64.75 + 64.25 + 63.75 + 63 + 61.75 + 62.5 + 63 + 62.75 + 61.75 + 61.5 + 61.75 + 63.75 + 64.25 + 64 + 63 + 61.25 + 60 + 58.75 + 57.5 + 55.75 + 54.25 + 52.5 + 53.25 + 56.25 + 57 + 58.25 + 59.75 + 61.75 + 61.25 + 60.75 + 60 + 60.25 + 60.75 + 57.25 + 56.5 + 55.5 + 55 + 55.25 + 55.75 + 57.25 + 57.75 + 58 + 57.75 + 57.5 + 57 + 56.75 + 55.25 + 55.25 + 55 + 54.75 + 54.5 + 53.5 + 53.25 + 53 + 53.25 + 53.25 + 53 + 52.5 + 51.5 + 49.25 + 50.5 + 51.25 + 51.75 + 51.5 + 52 + 52 + 52 + 52 + 52 + 52 + 52 + 52 + 52.25 + 51.75 + 52.5 + 53 + 53 + 53 + 57.5 + 57.75 + 58.5 + 58.5 + 58.25 + 58 + 57.75 + 57.25 + 57.25 + 57 + 56.75 + 56.25 + 55.5 + 55 + 54.75 + 54.5 + 53.5 + 53.5 + 53.25 + 53 + 51.75 + 51 + 50.5 + 50.5 + 50.75 + 51 + 51.25 + 52 + 52.5 + 52.5 + 52 + 51.5 + 51 + 50.75 + 50.5 + 52.25 + 53.5 + 53.25 + 53 + 57.5 + 58 + 58 + 57 + 56.5 + 56.5 + 57.5 + 58 + 58.25 + 60.75 + 61.5 + 64.5 + 67.75 + 69.5 + 69.25 + 69.25 + 69.75 + 70 + 70.5 + 70.5 + 70.5 + 70.75 + 71.75 + 73 + 73.5 + 73.5 + 73 + 72.5 + 72 + 70.5 + 69.75 + 69.5 + 69 + 66.25 + 65 + 64.75 + 64.5 + 64.75 + 64.75 + 65 + 65.5 + 65.5 + 65.25 + 65.75 + 66 + 68 + 68 + 64.25 + 63.75 + 63.25 + 63 + 62.25 + 64 + 62.25 + 58.25 + 56.75 + 56 + 55.25 + 55 + 55 + 54.75 + 54.25 + 53.25 + 53.25 + 53 + 52.5 + 53 + 53 + 52.75 + 52.5 + 52.25 + 52.25 + 52 + 51 + 50.75 + 50 + 49.5 + 48.5 + 49.25 + 47.75 + 43.75 + 38.75 + 32.75 + 29.75 + 27.75 + 25.75 + 23.75 + 19.5 + 18.25 + 16.75 + 15.25 + 17 + 17 + 17 + 18 + 18.5 + 17.5 + 17.5 + 17.75 + 16.75 + 15.5 + 14 + 15 + 16 + 15.25 + 13.25 + 14 + 13.5 + 13 + 12.25 + 10.25 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 11.5 + 12.5 + 12.75 + 17 + 14.5 + 14.5 + 15.75 + 15.75 + 15.75 + 15.5 + 15.75 + 15.75 + 14.25 + 11.25 + 12.25 + 11.25 + 14.25 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 15 + 14.25 + 13.75 + 13.5 + 13.25 + 13 + 12.75 + 12.5 + 11.25 + 11 + 10.75 + 10.25 + 9.75 + 9.5 + 9.25 + 8.75 + 8.75 + 7.5 + 7.5 + 6.75 + 6.75 + 7 + 7.25 + 7.25 + 7.5 + 7.75 + 8 + 8.25 + 8.25 + 8.75 + 11.75 + 11.75 + 12.25 + 12.75 + 13.25 + 13.25 + 13.5 + 14.25 + 14.75 + 20.75 + 21.5 + 22.25 + 23 + 23.75 + 23.75 + 22.25 + 21.25 + 19 + 22 + 23.25 + 23.25 + 24.75 + 25 + 39 + 42.75 + 46.75 + 41 + 36 + 34 + 31.75 + 30.5 + 29.5 + 29.5 + 30.25 + 31.25 + 32.75 + 33.25 + 33.25 + 33 + 34 + 35 + 35.5 + 34.5 + 34.5 + 34.5 + 36.75 + 36.75 + 36.5 + 36.25 + 35.75 + 33.5 + 32.75 + 32.25 + 32.25 + 32 + 32.5 + 33 + 34.75 + 35.75 + 36.5 + 37 + 37.5 + 37.75 + 38.25 + 38.75 + 38.5 + 38.5 + 38.5 + 38.75 + 38.25 + 37.75 + 37.25 + 36.75 + 36.5 + 36.25 + 37.75 + 39.5 + 40.5 + 42.75 + 47.75 + 48 + 48 + 47.25 + 45.5 + 42.25 + 41.75 + 41.5 + 42.25 + 45 + 49 + 53 + 53.5 + 53 + 52.25 + 52.25 + 52.5 + 52.75 + 52.25 + 52.25 + 51.25 + 51.75 + 51.5 + 51.75 + 52.25 + 53.5 + 53.5 + 52.75 + 52 + 52 + 52 + 50.75 + 49.5 + 48.5 + 47.25 + 46 + 45.5 + 45.25 + 45 + 45 + 45 + 44.5 + 44.25 + 43.75 + 43.75 + 43.5 + 42.75 + 42 + 40.75 + 39.75 + 39 + 38.5 + 38.75 + 40.5 + 42 + 44.5 + 47 + 49.25 + 51.5 + 53.5 + 55.5 + 54.75 + 56.5 + 57.75 + 58.25 + 59.75 + 59.75 + 60 + 60.5 + 60.5 + 60.75 + 61.5 + 62.25 + 62.5 + 62 + 60 + 56.25 + 56 + 53 + 52 + 51.5 + 52.75 + 53.5 + 53.25 + 53 + 52.75 + 56.75 + 55.75 + 56 + 55 + 54.25 + 53.5 + 53 + 52.75 + 52.75 + 52.75 + 52.5 + 53 + 53 + 49 + 46.75 + 42.25 + 38.75 + 39.5 + 40 + 40.75 + 41 + 41.5 + 42.5 + 42.75 + 43.5 + 46.25 + 49.5 + 51.5 + 53 + 55 + 56 + 56.75 + 57 + 57.5 + 58 + 57.25 + 56.5 + 56.25 + 57.75 + 62.5 + 66 + 68.5 + 70.75 + 70.75 + 70.75 + 70.75 + 70.75 + 71.25 + 71.5 + 72 + 72.5 + 72.75 + 75.5 + 77 + 78.25 + 79 + 81 + 82.75 + 83 + 83.25 + 83.25 + 83.25 + 83 + 83.75 + 84.25 + 84.75 + 85 + 85 + 85.25 + 86.75 + 87.25 + 87.25 + 87.5 + 87.5 + 87 + 87 + 87 + 87 + 87.5 + 88.25 + 88.5 + 89 + 89.25 + 89.5 + 90.25 + 90.5 + 90.75 + 91.25 + 91.5 + 92 + 92 + 91.75 + 91.75 + 91.5 + 91.25 + 91 + 90.5 + 89.25 + 89 + 89 + 88.75 + 87.25 + 85.75 + 85.25 + 89.75 + 90.25 + 90.5 + 90.75 + 90.5 + 90.5 + 89.75 + 89.25 + 88.75 + 88.25 + 88 + 88 + 88.5 + 95.75 + 98.25 + 104 + 104.75 + 107 + 108 + 108 + 108 + 108 + 107.75 + 108 + 108.25 + 108.5 + 109.25 + 110.5 + 110.25 + 109.5 + 105.75 + 104.5 + 104 + 103.5 + 102.5 + 102 + 101.5 + 100.75 + 98.75 + 97.75 + 97 + 95.5 + 95.25 + 94.5 + 93 + 93 + 93 + 93 + 92 + 91.75 + 91.25 + 91 + 91.25 + 92 + 92.25 + 92.5 + 93.75 + 95.25 + 98.25 + 99.5 + 99.75 + 99.5 + 98.75 + 98.75 + 98.5 + 98.5 + 98.5 + 98.75 + 98.75 + 97.75 + 96.5 + 95.75 + 95.5 + 95.5 + 95.75 + 96 + 96.5 + 97.25 + 97.25 + 97 + 98.5 + 99.75 + 100 + 100 + 99.75 + 99.5 + 99 + 99.25 + 101 + 101.75 + 102.25 + 102.25 + 101.5 + 100.75 + 100.5 + 100.25 + 99.75 + 93.25 + 92.5 + 94.5 + 97.25 + 98.5 + 99 + 99.5 + 99.75 + 99.75 + 100.25 + 101.25 + 101.5 + 101.75 + 102.5 + 103 + 103.25 + 103.5 + 103.5 + 104 + 104.75 + 106.25 + 106.25 + 106.5 + 106.75 + 107.75 + 107.75 + 107.75 + 107.75 + 107.75 + 108 + 108.5 + 108.75 + 108.75 + 108.75 + 108.75 + 108.25 + 108.5 + 108.75 + 108.75 + 109.25 + 109.25 + 109.25 + 109 + 108.5 + 108.5 + 108.25 + 108.25 + 107.75 + 107.5 + 107.25 + 107 + 107 + 107 + 107 + 107.25 + 107.5 + 107.75 + 108.5 + 108.75 + 109.25 + 109.5 + 110.75 + 109.75 + 108 + 107 + 107 + 105 + 104.25 + 102.75 + 101.75 + 101.5 + 101.5 + 101.5 + 101.5 + 101.25 + 101 + 101 + 101.25 + 103.5 + 106.5 + 105.5 + 99.5 + 99.5 + 99.5 + 99.5 + 99 + 96.25 + 95 + 93.75 + 93 + 90.5 + 88.75 + 88 + 87.25 + 87 + 85.75 + 85.25 + 85 + 84.75 + 84.5 + 84.25 + 84.25 + 85.75 + 85.75 + 85.5 + 85.25 + 85.25 + 85 + 84.75 + 84.5 + 85 + 86 + 86.25 + 86.25 + 86.25 + 85.25 + 83.75 + 83 + 81.5 + 79.5 + 79 + 78.75 + 78 + 76.75 + 76.75 + 76.25 + 76.25 + 76.25 + 76 + 75.25 + 74.25 + 73.25 + 72.75 + 71.25 + 70.75 + 70.25 + 69.75 + 69.75 + 69.75 + 69.5 + 69.25 + 68.75 + 68.25 + 68.25 + 68 + 68 + 67.5 + 66.75 + 66.5 + 65 + 65 + 65 + 65.25 + 65.25 + 65.25 + 65.5 + 65.75 + 65.75 + 66.75 + 67.25 + 67.5 + 68.5 + 68.75 + 68 + 67.75 + 67 + 66.5 + 65.5 + 64.75 + 64.75 + 64 + 63.25 + 63 + 63.25 + 63.25 + 63 + 62.75 + 62.25 + 62 + 61.5 + 60.5 + 60.25 + 60.75 + 61.5 + 62 + 64.25 + 69.5 + 74 + 77.25 + 78.75 + 78.25 + 78 + 77.75 + 77.75 + 77.5 + 77.5 + 80 + 84.25 + 84.25 + 84 + 84 + 84.75 + 84.5 + 84.25 + 84.25 + 83 + 82.75 + 82.5 + 82.5 + 81.75 + 81.75 + 81 + 80.5 + 80.25 + 80 + 79.75 + 79.75 + 80 + 77.25 + 76 + 74.75 + 73.75 + 72.75 + 71.75 + 71 + 71 + 71.25 + 71.25 + 71.5 + 72.25 + 72.25 + 72.5 + 72.5 + 72.5 + 72.5 + 73.75 + 74 + 74 + 74 + 74.25 + 74.25 + 74 + 74.5 + 74.5 + 74.5 + 74.5 + 74.25 + 74.25 + 74.25 + 74.25 + 74.5 + 74.75 + 75 + 74.25 + 74 + 74 + 73.5 + 73.5 + 73.25 + 73 + 73 + 73 + 73 + 73.25 + 73.5 + 73.5 + 74 + 75 + 76.75 + 78 + 80.5 + 81 + 80.75 + 79.75 + 78.75 + 78.25 + 77.5 + 77.75 + 77.75 + 78 + 78.75 + 77.75 + 77.5 + 77.25 + 77 + 76.75 + 76.5 + 76 + 74.5 + 74 + 73 + 72.75 + 70.75 + 69.75 + 68.5 + 67.5 + 66.75 + 65.25 + 65.5 + 69 + 70.75 + 76 + 76.75 + 76.5 + 76.75 + 76.5 + 74.25 + 73.75 + 71.25 + 70.5 + 69.5 + 69.75 + 68.25 + 67.75 + 67.25 + 66.5 + 64.75 + 56 + 53 + 52.75 + 52.75 + 55.5 + 56.25 + 56 + 56 + 55.75 + 59.25 + 59.75 + 61.5 + 63 + 63 + 62.5 + 62 + 61.5 + 60.5 + 60.75 + 62 + 62.75 + 63 + 63.25 + 63 + 61 + 60 + 59.5 + 56.25 + 56 + 55.75 + 54 + 54 + 57.75 + 57 + 54 + 54 + 56 + 57 + 57.5 + 57.5 + 58 + 58 + 57.75 + 57.75 + 57.5 + 57.5 + 57.25 + 57.25 + 57 + 57 + 57 + 57 + 57 + 57 + 55.5 + 55 + 54.5 + 54.25 + 53.5 + 53 + 52.5 + 51.75 + 51 + 50.5 + 49 + 46.75 + 46 + 45.5 + 45.25 + 45 + 44.75 + 44.5 + 44.5 + 43.75 + 44 + 44.75 + 44.75 + 45 + 45.25 + 45.25 + 45.25 + 45.75 + 47.25 + 47.5 + 48 + 49.75 + 50 + 50 + 50 + 49.25 + 48.5 + 44.5 + 43.25 + 42.5 + 41.25 + 41 + 40.5 + 40.25 + 39.25 + 37.75 + 37.5 + 34 + 33.25 + 32.5 + 32 + 31 + 30.5 + 30.25 + 29.75 + 28.5 + 28.25 + 28 + 28.25 + 28.5 + 28.75 + 28.75 + 31 + 31.75 + 32.25 + 32.75 + 33.25 + 32 + 30.75 + 28 + 27.25 + 26.75 + 24.5 + 24.25 + 23.5 + 23.25 + 22.5 + 22.25 + 22 + 22 + 22 + 22 + 22 + 21.75 + 22 + 22.25 + 22.5 + 23 + 23.5 + 24 + 24.25 + 24.5 + 25 + 25 + 25 + 25 + 25.25 + 25.5 + 25.5 + 25.5 + 25.5 + 25.5 + 26 + 26.75 + 28 + 28 + 28.25 + 29.25 + 29.5 + 29.75 + 29.75 + 30.5 + 30.5 + 30.75 + 31.25 + 31.5 + 31.5 + 31.75 + 31.75 + 31.75 + 31.75 + 32 + 32.25 + 32.25 + 32.5 + 32.75 + 33 + 33 + 33.25 + 33.25 + 33.5 + 34 + 34.25 + 34.5 + 35 + 35.75 + 35.75 + 36.5 + 36.75 + 37 + 36.75 + 36.5 + 35.75 + 34.5 + 34.5 + 34.5 + 34.5 + 35.5 + 36.5 + 36.5 + 34.5 + 32 + 33.5 + 35 + 35.5 + 36 + 36.25 + 36.5 + 37.25 + 37.5 + 37.75 + 38 + 37.5 + 39 + 40.5 + 40.75 + 40 + 39 + 38.75 + 38.5 + 39 + 39.5 + 38.25 + 36.75 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 36 + 35.75 + 35 + 34.75 + 35.5 + 36 + 36.75 + 37 + 38.5 + 38.75 + 36.5 + 36 + 36.5 + 35.25 + 35.5 + 34.75 + 34.75 + 34.25 + 34 + 33.75 + 34 + 36 + 35.5 + 33.75 + 32.75 + 32 + 31.75 + 31.5 + 31.25 + 31 + 30 + 30 + 29.75 + 29.5 + 29.25 + 29 + 28.75 + 28.75 + 28.5 + 28.25 + 28.25 + 28.25 + 28.25 + 28.25 + 28.5 + 29 + 30.25 + 30 + 28 + 27.25 + 25 + 25 + 25 + 25 + 25.5 + 25.75 + 25.5 + 25 + 24.75 + 24 + 24 + 24.25 + 24.75 + 24.75 + 25 + 25.25 + 25.25 + 25 + 25 + 25 + 27.5 + 30.25 + 30.75 + 30.75 + 32.5 + 32.5 + 31.5 + 30.25 + 29.5 + 30 + 30.5 + 31.5 + 31 + 29.5 + 28.5 + 28 + 28.5 + 28.5 + 28.5 + 28.5 + 28.75 + 28.75 + 30.25 + 29.75 + 30 + 30.25 + 30 + 29.75 + 29.25 + 28.25 + 28.25 + 29.25 + 29.5 + 30 + 29 + 28.75 + 28.75 + 29 + 28.25 + 27.5 + 26.75 + 24 + 23.5 + 22.5 + 22 + 21.75 + 21.75 + 21.5 + 21 + 20.75 + 20.25 + 20.5 + 21 + 21.75 + 22.25 + 22.75 + 23.25 + 23.75 + 24.25 + 25.75 + 27.75 + 28.5 + 29.25 + 29 + 28.5 + 27.75 + 27.25 + 27.25 + 27.5 + 27.5 + 28.25 + 29.5 + 30.75 + 32.25 + 32.75 + 33.75 + 35 + 35.25 + 37 + 38.5 + 39.25 + 39 + 39 + 38.75 + 37.75 + 36.25 + 35.75 + 36.5 + 38 + 37.25 + 36.5 + 36.5 + 35.75 + 35 + 34.75 + 36 + 34.5 + 31.5 + 28 + 25 + 21.25 + 21.75 + 21.75 + 21.5 + 21.5 + 21.75 + 22.75 + 23.5 + 24 + 23.75 + 17.25 + 15.25 + 15.25 + 15.25 + 13.75 + 13.25 + 12.25 + 12 + 11.5 + 10.25 + 10 + 9.5 + 9.5 + 9.75 + 9.75 + 10 + 9.75 + 9 + 8.5 + 7.75 + 6.5 + 5.75 + 5.75 + 6 + 6 + 5.75 + 5.75 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.25 + 5 + 5 + 6 + 6.75 + 7.25 + 7.75 + 8.5 + 10.75 + 11.5 + 12.25 + 11.5 + 10 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 9 + 9.25 + 9.25 + 9.75 + 10.75 + 11 + 11.25 + 11.5 + 12.5 + 12 + 11.75 + 12 + 12.25 + 13 + 13.5 + 14 + 14.25 + 14.25 + 14.5 + 14.5 + 14.5 + 15.25 + 15.75 + 16.25 + 16.5 + 17 + 17.5 + 17.75 + 17.75 + 17.75 + 17.75 + 19.25 + 21.5 + 23.5 + 23.75 + 23.25 + 20.25 + 19.5 + 19.5 + 18 + 18.25 + 18.25 + 18.25 + 18.5 + 18.5 + 18.75 + 18.75 + 19 + 20 + 20.5 + 22.25 + 22.75 + 22.5 + 23 + 24 + 25 + 26.25 + 27.5 + 28 + 28.75 + 29.75 + 31.25 + 31.5 + 31.5 + 31.5 + 31 + 30.25 + 29.25 + 28.75 + 27.5 + 25.75 + 25.5 + 25.5 + 25.5 + 25.5 + 25.75 + 25.25 + 30 + 30.75 + 31.5 + 31.75 + 32.75 + 34.25 + 34.75 + 36 + 37 + 38 + 38.75 + 39.5 + 39.75 + 39.75 + 39.5 + 39.5 + 39.5 + 39.25 + 39.25 + 39 + 39 + 38.75 + 38.75 + 38.75 + 38.25 + 37 + 36.5 + 36 + 35.25 + 35 + 35 + 35 + 35.25 + 35.25 + 35.5 + 35.75 + 36 + 36.5 + 36.5 + 36.5 + 36.5 + 36.25 + 36 + 35.75 + 34.75 + 34.25 + 34 + 34 + 34 + 34.25 + 34.25 + 34 + 33.75 + 33.25 + 34 + 35 + 35.5 + 33.25 + 32.5 + 32 + 31.5 + 31.5 + 32.25 + 32.75 + 34.5 + 35 + 35.5 + 36.25 + 36.5 + 37 + 36.5 + 36.25 + 36.75 + 36.75 + 37 + 37 + 36.75 + 35.5 + 35.25 + 33 + 31.5 + 29.5 + 31.75 + 33.5 + 34 + 34.75 + 35.25 + 35.75 + 35.75 + 36.5 + 36.5 + 34.25 + 34 + 34 + 34.5 + 35.25 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 36 + 36.25 + 37.75 + 37.5 + 37.25 + 36 + 36.25 + 36.75 + 36.75 + 36.5 + 36.25 + 35.75 + 33.5 + 33 + 32 + 31.5 + 31.75 + 33.25 + 35.25 + 37 + 38 + 38.75 + 40.25 + 41.25 + 42.25 + 42.25 + 42.25 + 42.25 + 40.75 + 39.75 + 39.75 + 39.5 + 39.25 + 38.75 + 37.75 + 37 + 36 + 35 + 34.5 + 33.75 + 33.25 + 33 + 30 + 30 + 31.25 + 32.5 + 33 + 35.25 + 37 + 38.5 + 39.75 + 40 + 40.5 + 41 + 42 + 42.75 + 44.25 + 45.5 + 46.5 + 47.75 + 48.5 + 50.75 + 51.5 + 51.5 + 50.5 + 50.25 + 50.25 + 50.75 + 51 + 51.25 + 51.5 + 51.5 + 51.75 + 52 + 52 + 52 + 52.5 + 53 + 53.25 + 53.25 + 53.75 + 54.5 + 54.75 + 54.75 + 55 + 55 + 55 + 54.75 + 55 + 55 + 55 + 55 + 55 + 55 + 55 + 55 + 54.75 + 54.75 + 54.5 + 54.5 + 54.5 + 54.5 + 54.5 + 54.5 + 54.5 + 54.5 + 54.5 + 54.75 + 54.75 + 55 + 55.5 + 55.25 + 55 + 54.5 + 54.75 + 55.25 + 55.25 + 55.25 + 55.5 + 55.5 + 55.5 + 55.5 + 55.75 + 55.75 + 55.75 + 56.25 + 56.25 + 56 + 55 + 54.75 + 54.25 + 54.25 + 54 + 52.25 + 52 + 52 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 52 + 52.25 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 51.25 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.75 + 49.5 + 49.5 + 49.25 + 49.25 + 49.25 + 49.25 + 49.25 + 48.75 + 49 + 46.5 + 45 + 44.25 + 44.25 + 44.25 + 44.25 + 44.25 + 44.25 + 43.5 + 43.5 + 43.75 + 44 + 44 + 44 + 44 + 43.75 + 43.75 + 43.75 + 44 + 43.75 + 43.75 + 43.75 + 44.5 + 45 + 45.25 + 48.25 + 48 + 45.75 + 44.25 + 44 + 43.75 + 44.5 + 45.5 + 45 + 45.75 + 46 + 46.25 + 44.75 + 44.5 + 43.5 + 43.25 + 42 + 41.75 + 40.75 + 39.25 + 38.25 + 38.75 + 40 + 40.5 + 40.75 + 41 + 41.5 + 41.5 + 41.5 + 41 + 40.25 + 39.75 + 39.75 + 39.5 + 39 + 38.75 + 38.5 + 38.5 + 38.25 + 37.75 + 37.5 + 37.75 + 38.25 + 38.75 + 39 + 39.5 + 39.75 + 40 + 39.75 + 39.25 + 39.25 + 39.5 + 39.5 + 39.5 + 39.5 + 39.5 + 39 + 38.25 + 37.25 + 37.25 + 37.25 + 37.5 + 37.75 + 37.75 + 37.5 + 37 + 36.75 + 36.25 + 35.75 + 35.25 + 35.5 + 35.75 + 36 + 35.25 + 35 + 35.25 + 35.25 + 35.25 + 35.75 + 35.25 + 34.75 + 32.75 + 31 + 30.75 + 30.75 + 30.75 + 31 + 31.75 + 31.5 + 31 + 30 + 29 + 28.75 + 28.75 + 28.75 + 28.75 + 30 + 30 + 30.25 + 30.25 + 30.75 + 31.5 + 32.75 + 33 + 31.75 + 31.75 + 32.5 + 33.75 + 34.5 + 35.25 + 36 + 36.25 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35.75 + 36 + 37.5 + 38.5 + 39 + 39.5 + 40 + 40 + 40.5 + 40.5 + 41.5 + 42 + 42 + 41.75 + 41.5 + 40.25 + 39.25 + 39.25 + 39.5 + 39.75 + 39.25 + 38.5 + 38 + 37.5 + 37.5 + 36.25 + 36.75 + 36.75 + 36.5 + 36.5 + 36.75 + 37 + 37 + 37 + 37 + 36.75 + 36.75 + 36.5 + 37 + 37.5 + 38 + 39.5 + 40 + 40.25 + 40.5 + 41 + 43.5 + 44.25 + 44.25 + 44.75 + 45.5 + 46.75 + 48.5 + 48.75 + 49.75 + 51 + 54.5 + 55 + 54.75 + 54 + 55 + 55.75 + 56.75 + 57 + 57.25 + 57.25 + 57.25 + 57.5 + 57.5 + 57.5 + 57.75 + 56.75 + 56.5 + 56.75 + 57 + 56.75 + 56 + 54.5 + 53 + 52 + 52 + 52 + 51.5 + 51.25 + 50.75 + 50 + 49 + 48.5 + 47.75 + 46.75 + 45.5 + 44.75 + 41.25 + 40.25 + 41 + 41.25 + 41.25 + 46.75 + 48.5 + 47.75 + 46.5 + 42.5 + 41 + 39 + 36.75 + 35 + 33.75 + 32.75 + 32.25 + 32.5 + 32.75 + 32.25 + 33.75 + 34.75 + 34.25 + 34 + 33 + 32.75 + 33.25 + 34 + 34.75 + 46 + 46.25 + 46.75 + 47.75 + 48 + 48.25 + 48.25 + 48.25 + 48.5 + 49 + 49.75 + 52 + 51.5 + 51 + 50.75 + 50.25 + 50 + 50 + 49.75 + 49.75 + 49.75 + 49.75 + 50 + 50 + 50 + 50 + 49.75 + 49.5 + 49.5 + 49.5 + 49.5 + 49.5 + 48.75 + 48.5 + 48.5 + 48.25 + 48.25 + 48.75 + 49 + 50.25 + 51 + 50.25 + 49.5 + 47.75 + 46.5 + 45.75 + 45.25 + 46 + 46.25 + 46.5 + 48.25 + 48.5 + 49.25 + 53.5 + 54 + 53.5 + 53.5 + 52 + 51.75 + 51.25 + 50.5 + 49.75 + 49.25 + 49 + 49 + 48.75 + 48 + 47.75 + 48 + 48 + 48.25 + 48.25 + 48.25 + 48.25 + 48 + 48 + 47.75 + 47.75 + 47.75 + 48 + 48.25 + 48.25 + 48.5 + 49 + 49 + 49.25 + 49.25 + 49.25 + 49.5 + 49.75 + 50 + 50 + 50 + 50 + 52.5 + 52.75 + 53.75 + 54 + 56.75 + 56.5 + 56.5 + 56.5 + 56.75 + 56.75 + 56.75 + 54.75 + 55 + 55.25 + 56 + 56.75 + 57.25 + 58 + 58 + 58 + 58 + 57.5 + 58.25 + 58.75 + 59 + 61.5 + 62.75 + 63 + 63.25 + 63 + 62.75 + 62.25 + 61.75 + 61.75 + 61.25 + 61.25 + 62.5 + 64 + 67 + 68.75 + 70 + 71.25 + 71.75 + 71 + 70.75 + 71 + 71 + 71.75 + 72.25 + 73.75 + 74.75 + 73.25 + 71.75 + 68.5 + 65.5 + 61.75 + 62.5 + 63 + 62.75 + 62.75 + 62.5 + 62.25 + 61.5 + 61.5 + 60.75 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 60.5 + 59 + 58.25 + 58 + 57.5 + 57 + 56.5 + 55.75 + 55.25 + 54.5 + 54 + 53.25 + 52 + 52 + 51.75 + 51.25 + 51 + 50.75 + 50.25 + 50 + 50 + 50 + 50 + 50 + 49.75 + 49 + 49.25 + 49.5 + 49.75 + 50.75 + 51 + 51.75 + 51.75 + 51.75 + 51.75 + 52.25 + 52.75 + 50.5 + 42.25 + 41 + 41 + 41 + 41 + 41 + 41 + 40.75 + 39 + 37.25 + 31.75 + 31.5 + 31.25 + 30.75 + 30.5 + 29.25 + 28.75 + 29.5 + 29.75 + 28.5 + 25.75 + 26.5 + 27 + 26.75 + 27 + 28.5 + 29 + 29.5 + 25 + 19.25 + 16 + 13.5 + 11.25 + 9.75 + 9 + 8.25 + 7 + 6.5 + 6.25 + 6.5 + 6.75 + 7 + 7.5 + 8.75 + 8.25 + 7.5 + 6.25 + 4.75 + 4.75 + 5 + 5 + 5 + 5.25 + 5.25 + 5.5 + 5.75 + 5.75 + 6 + 6 + 6 + 6.75 + 6.75 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 7.25 + 7.5 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.5 + 7 + 7.75 + 8.75 + 9.5 + 10.25 + 10.25 + 11.25 + 12.5 + 13.25 + 14 + 15.25 + 16.75 + 18.25 + 20 + 24.25 + 25.75 + 27 + 27.5 + 28 + 28.75 + 29.75 + 30.75 + 32.25 + 34.5 + 36 + 36.75 + 37.75 + 38.25 + 38.75 + 39.5 + 43.5 + 48.5 + 57.25 + 56.75 + 55 + 55.5 + 56 + 55.5 + 53.75 + 52.5 + 51.5 + 50.5 + 50 + 47.75 + 46.5 + 45.5 + 44.5 + 44 + 43.5 + 42.75 + 41.5 + 33.75 + 32.25 + 31.25 + 28 + 27.5 + 27 + 26.5 + 26 + 25.5 + 25 + 24.75 + 25.25 + 25.25 + 24.75 + 24.5 + 23.5 + 23 + 22.75 + 23.75 + 24.5 + 29.5 + 31.75 + 32.75 + 33.75 + 34.5 + 35.25 + 35.75 + 36 + 36 + 36 + 36.5 + 37.25 + 38 + 39.5 + 41 + 42.5 + 44 + 56.75 + 57.5 + 58 + 58 + 58.5 + 58.75 + 59.25 + 59.75 + 61.5 + 61.75 + 61.75 + 61.75 + 61.5 + 60.75 + 60.5 + 60.5 + 60.5 + 60.75 + 61.25 + 62.25 + 63.25 + 62.5 + 61.5 + 61 + 60.75 + 60.75 + 61.25 + 62 + 60 + 59 + 59 + 59 + 60.75 + 63 + 65.75 + 69.25 + 70.5 + 66.5 + 63.75 + 65.5 + 69.25 + 69 + 73.5 + 76 + 78.5 + 77.5 + 76.75 + 76.5 + 76.25 + 76.25 + 78.25 + 78.75 + 79 + 79 + 78.75 + 78 + 76.5 + 73.25 + 73 + 72.75 + 72 + 71.75 + 71.5 + 71 + 70.5 + 69.5 + 69.25 + 69 + 68.75 + 69.25 + 69.5 + 69.75 + 70 + 70.75 + 71 + 71 + 71 + 71.25 + 71.5 + 71.75 + 71.5 + 71.5 + 71.25 + 71 + 71 + 70.5 + 70 + 68.25 + 67.75 + 66.25 + 64 + 61 + 57.5 + 55.75 + 56.25 + 56.25 + 56 + 55.5 + 55.25 + 55.25 + 56.25 + 56 + 55.5 + 54.25 + 53.25 + 53.5 + 53.5 + 53.75 + 54 + 55.5 + 56 + 56.5 + 56.5 + 56.5 + 56.5 + 57 + 57.5 + 57.25 + 56.75 + 56.75 + 56.75 + 56.5 + 58.25 + 59 + 58.75 + 58.25 + 58 + 56.75 + 56.75 + 55 + 55.75 + 55.75 + 56 + 56 + 56 + 56 + 56 + 56.25 + 56.25 + 56.75 + 57.75 + 58 + 58.25 + 58.25 + 57.5 + 56 + 56 + 55.25 + 54.5 + 53.75 + 53.5 + 53 + 52.5 + 52.25 + 52.25 + 52.25 + 52.25 + 52.5 + 52.25 + 51.25 + 49.5 + 48.5 + 48.25 + 47.25 + 46.5 + 46.25 + 46 + 46 + 46 + 46 + 45.75 + 45.75 + 45.25 + 45 + 45.5 + 46 + 46.75 + 47.25 + 47.25 + 47.75 + 48 + 48 + 48.25 + 48.25 + 48.5 + 48.5 + 48.5 + 49.5 + 50.25 + 50.5 + 51 + 51.25 + 51.75 + 52.5 + 53 + 54.75 + 55.25 + 55.5 + 56 + 55.75 + 55.25 + 55 + 54.25 + 53.5 + 52.75 + 49.5 + 49.25 + 49 + 47.5 + 47 + 47.25 + 48 + 48.5 + 49.25 + 50 + 50.25 + 50.5 + 50.5 + 50.5 + 50.25 + 50 + 49.75 + 49.5 + 49.25 + 49.25 + 48.5 + 50.75 + 48.75 + 48 + 47.5 + 47.25 + 48 + 48.75 + 48.75 + 47.25 + 46.75 + 46 + 46 + 45.75 + 44.75 + 44.5 + 44.25 + 43 + 42.75 + 42.75 + 42.25 + 41.5 + 41 + 44.25 + 48.25 + 49.25 + 49.75 + 50 + 50.75 + 52 + 52.5 + 52.25 + 52.25 + 52 + 52.75 + 53 + 53.25 + 53.75 + 55 + 55.5 + 56 + 55 + 54 + 53.25 + 52 + 51.25 + 50.75 + 50 + 49.75 + 49 + 48.25 + 48.25 + 48 + 48 + 48 + 47.75 + 47.5 + 47 + 44.75 + 42.25 + 41.75 + 41.5 + 39.75 + 39.75 + 39.5 + 39.25 + 39.25 + 39.25 + 39 + 39 + 39 + 39 + 39 + 39.25 + 38.5 + 38 + 38.25 + 38.75 + 40.5 + 41.5 + 42.25 + 42.5 + 42.5 + 42.75 + 42.5 + 42.5 + 42.25 + 42 + 41.75 + 41.5 + 41.25 + 41 + 40.75 + 40.5 + 40.25 + 40 + 40 + 39.75 + 39.5 + 39.5 + 39 + 38.25 + 38 + 38.25 + 39.25 + 39.75 + 38 + 38 + 38.5 + 38.75 + 38.75 + 38.5 + 38 + 37.5 + 36.75 + 36.75 + 37 + 37 + 36.75 + 36.5 + 36 + 37 + 37.75 + 38.25 + 38.75 + 39 + 39 + 39 + 39 + 39.25 + 39.5 + 39 + 39.75 + 39.75 + 39.75 + 39.25 + 39 + 39.25 + 39.25 + 39.25 + 39.25 + 39.25 + 37.5 + 37.5 + 37.5 + 37.75 + 38 + 38 + 38.25 + 38 + 37.75 + 37.75 + 38.5 + 38.5 + 38.75 + 39.25 + 39.75 + 39.75 + 40 + 40.25 + 40.25 + 40.25 + 40.5 + 40.75 + 44.75 + 45.5 + 46.5 + 47 + 47.25 + 47.25 + 47.5 + 47.75 + 48 + 48.25 + 48.75 + 48.25 + 46.25 + 45.25 + 44.25 + 43.5 + 42.5 + 41.75 + 41.25 + 41 + 40.75 + 41.75 + 41.5 + 39 + 36.75 + 36.75 + 33.75 + 33 + 32 + 31 + 29.75 + 29 + 27.75 + 27.75 + 27.75 + 33.75 + 35 + 38.5 + 38.25 + 37.5 + 37 + 36.75 + 37 + 38 + 36.5 + 35.5 + 35.25 + 33.75 + 33.25 + 33 + 33 + 33 + 32.75 + 32.5 + 32.5 + 31.75 + 30.25 + 30.5 + 30.75 + 30.25 + 30 + 29.75 + 29.25 + 28.25 + 29 + 29.25 + 29.5 + 28 + 27.25 + 27 + 26.25 + 27.75 + 28.75 + 31.75 + 37 + 39.75 + 39.75 + 40.25 + 40 + 39.75 + 39.75 + 39.75 + 39.5 + 39.25 + 39.25 + 39 + 38.75 + 38.5 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.5 + 38.5 + 38.25 + 37.25 + 33 + 32.75 + 32.75 + 33 + 33 + 33 + 33.25 + 33.25 + 33.25 + 33.25 + 33.5 + 33.75 + 33.75 + 33.25 + 30.75 + 31.5 + 31.5 + 29.5 + 31.75 + 33 + 34.75 + 37.5 + 38 + 38.25 + 39 + 39.25 + 39.5 + 39.75 + 40.25 + 40.5 + 41 + 41.25 + 41.5 + 41.75 + 42.5 + 43 + 43.25 + 44 + 44.25 + 44.75 + 45.25 + 44.75 + 44.25 + 43.5 + 42.75 + 42.25 + 42 + 41.75 + 42 + 42.75 + 43 + 42.75 + 42.5 + 42 + 41 + 40.5 + 40.25 + 41.25 + 41.75 + 42 + 42.25 + 42.25 + 42.5 + 42.5 + 42.75 + 43 + 43 + 42.75 + 42.25 + 42.25 + 41.75 + 41.5 + 40.5 + 40.25 + 40 + 39.5 + 38.75 + 40.75 + 42 + 42.75 + 42.75 + 42.5 + 42 + 41.75 + 41.25 + 40.25 + 39.5 + 39 + 38.5 + 38.25 + 38 + 36.75 + 36.5 + 36 + 35.5 + 34.75 + 30 + 29.75 + 29.75 + 29.5 + 29 + 29.25 + 28.5 + 28 + 28.5 + 28.75 + 28 + 28.75 + 29.5 + 29.75 + 30 + 30.5 + 30.5 + 27.25 + 26.25 + 27 + 26.25 + 27 + 30 + 32 + 35.5 + 29 + 28.5 + 28 + 28.5 + 28.75 + 29 + 29 + 28.75 + 28.25 + 27 + 25.5 + 23.5 + 22 + 24.5 + 24.75 + 28.25 + 28.5 + 28.75 + 28.75 + 28.5 + 28.25 + 27.25 + 26.75 + 25.25 + 25 + 25 + 24.25 + 23.75 + 23.75 + 23.75 + 23.75 + 23 + 22.5 + 22.25 + 22.25 + 21.75 + 20.5 + 18.25 + 17.25 + 17 + 17 + 16.75 + 16.5 + 16.25 + 16.25 + 16.5 + 16.25 + 16 + 16 + 16 + 16 + 16 + 16.25 + 16.5 + 16.75 + 17 + 17 + 17 + 17 + 16.75 + 16.5 + 16.5 + 16.25 + 16 + 17.25 + 17.75 + 17.5 + 17.25 + 16 + 16 + 16 + 16 + 16 + 16 + 15.75 + 16.25 + 16.25 + 16.5 + 16.5 + 16.5 + 17.75 + 19 + 19.75 + 20.25 + 20.5 + 22.75 + 21.25 + 20.5 + 17 + 12.5 + 12.25 + 12.25 + 12.5 + 13 + 13.75 + 13.75 + 11.75 + 10.5 + 9.25 + 9 + 9 + 9 + 9 + 8.75 + 6.5 + 5.5 + 5.75 + 5.75 + 6 + 6 + 6 + 5 + 4 + 4 + 4 + 4 + 4 + 4.75 + 4.5 + 4.25 + 4 + 4.25 + 4.5 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 3.5 + 3.5 + 3.5 + 3.5 + 3.5 + 3.75 + 3.25 + 3.25 + 3.75 + 2.75 + 3 + 3.5 + 3.75 + 3.75 + 5.5 + 7 + 8.5 + 9.75 + 9.5 + 9.25 + 9.25 + 10.25 + 12.5 + 12.75 + 12.25 + 10.75 + 9.25 + 9 + 8.75 + 8.5 + 9.75 + 12 + 13.25 + 13.5 + 13.25 + 12.75 + 12 + 11.75 + 11.25 + 11 + 10.75 + 10.5 + 10.25 + 10.25 + 10.25 + 10.5 + 10 + 9.75 + 9 + 8.75 + 8 + 6.5 + 6 + 6 + 6.75 + 6.75 + 6.75 + 6.5 + 6.25 + 6 + 6 + 5.5 + 6.5 + 6.5 + 6.75 + 7.5 + 7.5 + 7.75 + 8.25 + 9 + 9 + 9 + 9.25 + 9.25 + 9 + 9 + 8.75 + 8.75 + 9.5 + 9.5 + 9.25 + 9.75 + 10 + 10.25 + 10.5 + 11 + 12 + 15.5 + 16.5 + 18 + 27.25 + 29 + 31.25 + 32.75 + 33.75 + 34 + 35.25 + 36.5 + 37 + 37.25 + 37.75 + 38.75 + 38.75 + 38 + 37.5 + 37.25 + 36 + 35.75 + 34.5 + 34.25 + 34 + 34 + 34.5 + 35 + 36 + 36.5 + 36.5 + 32.25 + 35.75 + 36.75 + 40 + 41 + 41.75 + 43.75 + 44.5 + 45.75 + 53 + 57.5 + 57.75 + 58 + 58.25 + 58.25 + 58.5 + 59 + 52.75 + 50.75 + 49.75 + 50.5 + 51 + 51 + 51.5 + 51.5 + 51.75 + 51.75 + 51.75 + 51.75 + 51 + 50.25 + 48.75 + 48 + 47.25 + 46.75 + 46.25 + 44.75 + 43.75 + 43 + 42.5 + 40.25 + 38 + 37 + 30 + 29.5 + 28.75 + 28.5 + 27.5 + 27 + 26.5 + 25.5 + 24.75 + 24.5 + 23.5 + 23.25 + 20.5 + 19.25 + 19.25 + 19.25 + 19.25 + 19 + 18.75 + 18.5 + 18.25 + 18 + 17.75 + 17.75 + 17.75 + 17.5 + 17.25 + 16.75 + 16.5 + 16.75 + 16.75 + 16.75 + 17 + 17.5 + 18.75 + 19 + 18.5 + 16.5 + 30.5 + 31.5 + 34 + 35 + 35.5 + 36 + 36.5 + 37.5 + 37.75 + 37.5 + 36.75 + 36.25 + 36.25 + 36.25 + 36.25 + 36.5 + 36.5 + 36.75 + 37.5 + 38 + 38.75 + 38.75 + 33.75 + 33.5 + 33.5 + 33.25 + 33 + 33 + 31.5 + 30 + 27.25 + 26 + 25.5 + 25.25 + 25 + 25.5 + 26 + 26.5 + 26.75 + 27 + 28.5 + 30 + 31 + 31.25 + 31.25 + 31.25 + 30.5 + 30.75 + 33.25 + 34.75 + 29.75 + 28 + 22.5 + 19.75 + 19 + 18.5 + 15.5 + 14.75 + 14.25 + 13.75 + 13.25 + 11.75 + 11.75 + 12 + 12 + 11.75 + 11 + 10.5 + 10.25 + 11.25 + 10.75 + 10.5 + 10.25 + 10 + 9.75 + 9.25 + 9.25 + 9 + 8.25 + 7 + 8 + 8.75 + 10.25 + 11.5 + 12.25 + 12.5 + 13 + 11.5 + 9.75 + 8.5 + 7.5 + 6.25 + 6.25 + 6.5 + 7 + 6.75 + 8.5 + 9.75 + 11 + 12.25 + 13.5 + 14.25 + 15 + 15.75 + 14.25 + 14.75 + 15.75 + 16 + 16.25 + 16.5 + 16.75 + 16.75 + 17 + 17.25 + 18 + 18 + 18 + 17.75 + 17.25 + 17 + 16.5 + 16.25 + 15.75 + 15.75 + 15.75 + 16 + 16.25 + 17.25 + 17.5 + 17.25 + 17.25 + 17.5 + 17.5 + 17 + 17 + 17 + 17.5 + 17.75 + 18 + 18.5 + 18.5 + 18 + 17.75 + 17.75 + 16.5 + 15.75 + 15.25 + 15 + 15 + 15 + 14.75 + 14.25 + 14 + 14 + 14 + 14.25 + 14.25 + 14.25 + 14.25 + 14.5 + 14.5 + 14.75 + 15 + 15 + 15 + 15 + 15.25 + 15.25 + 15.5 + 15.5 + 15.25 + 15 + 15 + 14.5 + 14.5 + 14.5 + 14.75 + 15 + 15 + 15.5 + 16.25 + 16.75 + 17.25 + 17.75 + 18 + 18 + 17.75 + 17.75 + 16 + 15 + 13.75 + 14 + 14 + 16.25 + 18 + 18.5 + 19 + 19.75 + 24.75 + 28.75 + 29.75 + 32 + 32.5 + 33 + 33.5 + 34 + 64.5 + 71.25 + 77 + 78.75 + 80 + 81 + 76.25 + 75.75 + 75.75 + 75.75 + 70.5 + 67.75 + 71.25 + 72 + 72 + 73 + 73.5 + 74.75 + 75.75 + 76.25 + 76.5 + 79.25 + 80.25 + 81 + 80.5 + 81.5 + 94.25 + 77.75 + 76.5 + 75.25 + 74.25 + 73 + 71.5 + 68.75 + 67.25 + 66 + 65.25 + 64.25 + 63 + 60.75 + 60.25 + 60 + 59.75 + 59.5 + 59 + 61.25 + 62 + 60.25 + 57.75 + 57.25 + 57 + 56.5 + 56.25 + 49.5 + 49.75 + 55 + 61.75 + 62.75 + 63.25 + 63.75 + 65 + 65 + 67.5 + 69.25 + 72 + 76.25 + 76.75 + 77.5 + 79 + 82.5 + 82.5 + 84.25 + 85 + 85.25 + 86 + 86.25 + 86.5 + 86.75 + 85.75 + 84.25 + 84 + 83.5 + 83.5 + 83.25 + 83 + 82.5 + 80.75 + 79 + 78.5 + 76 + 69 + 67.25 + 66.5 + 65.5 + 66 + 68.5 + 70.5 + 70.75 + 68.75 + 69.5 + 69.75 + 69.75 + 69.5 + 65.25 + 65.75 + 66.75 + 66.25 + 65 + 65.75 + 66.75 + 66.5 + 66.25 + 66.25 + 66.5 + 66.25 + 66 + 65.75 + 66 + 66 + 66 + 65 + 65.5 + 65.5 + 65 + 64.25 + 63.25 + 63 + 63 + 62.5 + 65.5 + 68 + 71 + 71.5 + 72 + 72.5 + 76.5 + 77.25 + 77.25 + 77.5 + 74 + 75.25 + 70.75 + 65.25 + 58.75 + 48 + 45 + 44.5 + 44 + 43.75 + 39 + 38.25 + 37.75 + 37.75 + 37.5 + 37 + 36.5 + 35.75 + 35.25 + 37.25 + 42.75 + 43 + 43 + 44 + 43.75 + 41 + 40.25 + 40 + 39.75 + 39 + 38.5 + 38 + 37.75 + 37 + 36.25 + 35.75 + 35.5 + 35 + 34.25 + 34 + 34 + 34 + 33.75 + 32.5 + 30.75 + 29 + 27.75 + 28.5 + 29 + 31 + 30.5 + 30.25 + 32.5 + 32.5 + 31.5 + 29.75 + 28 + 24.75 + 22.75 + 22.75 + 24.5 + 23.75 + 23.25 + 23.5 + 23.25 + 21 + 20 + 19.75 + 19.75 + 18.75 + 14.75 + 24.75 + 23 + 23 + 22.5 + 20.75 + 19.25 + 18 + 18.25 + 18.75 + 19.25 + 19.25 + 20 + 20.25 + 20.75 + 21 + 21 + 21 + 21 + 21 + 21 + 21 + 21.25 + 21.5 + 21.5 + 21.75 + 21.75 + 22 + 22.25 + 23 + 22.5 + 20.5 + 20.5 + 20.5 + 20.5 + 20.25 + 20.25 + 19.75 + 19.5 + 20.25 + 21.25 + 23 + 22.5 + 22 + 21.75 + 24.25 + 25.75 + 34.25 + 37 + 37 + 36.5 + 36 + 35.5 + 34.75 + 33.25 + 34.25 + 38.5 + 43.75 + 47 + 52.75 + 53.5 + 55.25 + 56 + 56 + 55.5 + 57.75 + 60.5 + 63.75 + 64.75 + 78.75 + 79.75 + 79 + 78.5 + 81 + 82.25 + 81.5 + 80.5 + 79.25 + 78.75 + 76.25 + 75 + 75.25 + 75.75 + 75.5 + 75.25 + 73.25 + 72 + 72.75 + 75.25 + 76.25 + 76.5 + 78.5 + 79.25 + 80.75 + 82 + 84.5 + 87.25 + 89.25 + 89.75 + 90.25 + 90.75 + 89.75 + 89.25 + 88 + 86.75 + 83.25 + 81.75 + 80.5 + 79.5 + 77.25 + 75 + 71.5 + 72 + 71.5 + 71 + 69.25 + 68 + 66 + 64.75 + 63.25 + 62.25 + 61.75 + 62 + 63.25 + 64 + 65 + 65.25 + 65.75 + 65.75 + 66.25 + 67.25 + 68.5 + 68 + 68 + 67.5 + 64.5 + 62 + 56.5 + 50 + 46.5 + 47.25 + 48.75 + 50 + 52.5 + 54.5 + 54.75 + 53.75 + 51 + 51.75 + 51.5 + 52 + 52.5 + 53.25 + 53.75 + 54.75 + 54.75 + 54.25 + 52.25 + 48.75 + 41.5 + 31.25 + 29 + 27.5 + 23.75 + 18 + 13.5 + 12.75 + 11.75 + 10.75 + 9.5 + 9 + 8.75 + 8.5 + 8 + 7.75 + 7 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6 + 7 + 13.5 + 14.75 + 15.75 + 16.5 + 17.5 + 18.5 + 19 + 20 + 21.75 + 21.75 + 21.25 + 19.75 + 19.25 + 21.5 + 23.5 + 22 + 19.75 + 19.75 + 16.5 + 14.5 + 11.5 + 10.5 + 10 + 10 + 9.75 + 9.75 + 12.5 + 16.25 + 20.5 + 21.5 + 21 + 20.25 + 22.25 + 25 + 26.5 + 27 + 26 + 25 + 23.5 + 23 + 21.75 + 20.25 + 19 + 18 + 17.25 + 17.5 + 17 + 15.25 + 14.5 + 14 + 16.75 + 17 + 14.75 + 12.75 + 12 + 9 + 7.5 + 6.75 + 6.5 + 6 + 5.75 + 4 + 4.25 + 7 + 8.25 + 9 + 10.75 + 11.25 + 11.75 + 11.75 + 11.5 + 11.75 + 12.5 + 12.75 + 13.75 + 14.25 + 14.25 + 13 + 13 + 13.75 + 13.25 + 13 + 13.25 + 13.5 + 13.75 + 14.5 + 15.25 + 15.25 + 16 + 16.5 + 16.5 + 16.5 + 16.25 + 16.25 + 15.75 + 15.25 + 16.25 + 16.5 + 18.5 + 20 + 21 + 22 + 22.25 + 23.25 + 21 + 20.5 + 21 + 27.75 + 29 + 30 + 30.5 + 30.25 + 29.75 + 26.75 + 24.5 + 23.5 + 22.25 + 22.5 + 23 + 22.25 + 21.75 + 21.5 + 21.5 + 20.75 + 18.25 + 17.5 + 16.75 + 15.25 + 15.75 + 16.25 + 16.25 + 16 + 15.75 + 15.25 + 14.25 + 14 + 12.75 + 15.25 + 17.5 + 17.75 + 18 + 13.75 + 11.25 + 10.75 + 11.25 + 10 + 10 + 10 + 10 + 9.75 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 9 + 9 + 9 + 9.75 + 10.5 + 11.5 + 12.25 + 13 + 14 + 16.75 + 17.5 + 18.25 + 18.25 + 18.75 + 19 + 19.25 + 19.75 + 20.25 + 22 + 22.5 + 23.25 + 23.75 + 24.75 + 25.5 + 26 + 26.5 + 26.75 + 29.75 + 31 + 33.75 + 35.25 + 35.25 + 36 + 36.5 + 36 + 35.5 + 35.25 + 34.25 + 34.25 + 34.5 + 34 + 33.75 + 35.25 + 37.5 + 37.5 + 37.25 + 37 + 36 + 35.75 + 35 + 34.75 + 34.75 + 33.75 + 35.5 + 35 + 34.5 + 33 + 31.5 + 29 + 27.25 + 25.5 + 23.25 + 21.5 + 18.25 + 16.5 + 15.75 + 15.5 + 17.75 + 14.5 + 14 + 13.75 + 14.5 + 15.5 + 16.75 + 17.25 + 17.75 + 17.5 + 15 + 12.5 + 13.5 + 16.75 + 18.5 + 15.75 + 14.5 + 13.25 + 11 + 10.5 + 10.5 + 10.5 + 11.75 + 11.75 + 11.75 + 11.25 + 11.25 + 11.5 + 11.75 + 11.75 + 11.25 + 11 + 10 + 8.5 + 7.75 + 7.5 + 7.75 + 7.75 + 8 + 8.25 + 8.5 + 8.75 + 9 + 9.25 + 9.25 + 8.25 + 7 + 7 + 6.75 + 7 + 7 + 7.75 + 8.75 + 9 + 9.25 + 9 + 8.75 + 8 + 7.75 + 7.75 + 7.75 + 7.5 + 7.25 + 7 + 7 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.5 + 6.5 + 6.5 + 6.5 + 6.25 + 6 + 6.75 + 8 + 7.5 + 7.5 + 5.75 + 7.75 + 9 + 12.5 + 13.5 + 16.25 + 18.5 + 19 + 20.25 + 21.25 + 23 + 24.75 + 25.5 + 26 + 26.5 + 27 + 26 + 24 + 22.5 + 21.25 + 20.25 + 18.5 + 22 + 22.5 + 23.25 + 25.25 + 27.5 + 28 + 28.25 + 28.25 + 28.25 + 26.5 + 24 + 20.5 + 18.5 + 16.75 + 16.5 + 14.25 + 13.75 + 15 + 14.5 + 14.25 + 14 + 14 + 13.25 + 12.75 + 12.5 + 12.25 + 12.25 + 12.25 + 12.25 + 12.5 + 12.75 + 13.25 + 12.75 + 12.25 + 12 + 11.75 + 10.75 + 10 + 9.5 + 8.5 + 8.25 + 8.25 + 6 + 6.5 + 7.25 + 7.5 + 8 + 8.75 + 9.5 + 9.5 + 12.75 + 14 + 13.75 + 10.75 + 8.75 + 8.5 + 6.25 + 6.25 + 7 + 8 + 8.25 + 9 + 9.25 + 9.5 + 9.5 + 10.75 + 12 + 13.75 + 13.5 + 12.25 + 12 + 12 + 12.25 + 12.5 + 12.75 + 13.25 + 13.75 + 14.25 + 13.5 + 11.75 + 11.25 + 10.75 + 10.5 + 10.25 + 10 + 9.75 + 9.25 + 9.25 + 9.25 + 9.25 + 8.25 + 7 + 5.75 + 4.25 + 4.75 + 6.75 + 6.75 + 5.75 + 5 + 4.25 + 4.25 + 10.75 + 14 + 18.5 + 33.5 + 42.75 + 43 + 39.5 + 38 + 38.25 + 38.75 + 39.25 + 39 + 40.25 + 36.5 + 33.25 + 29.25 + 25 + 19.5 + 18.5 + 16.5 + 13.25 + 14 + 12.25 + 11.5 + 11 + 13.25 + 14.75 + 15.75 + 16.75 + 18.5 + 19 + 19.25 + 19.25 + 18.75 + 18.25 + 18 + 17.75 + 17.5 + 17.25 + 16.25 + 15.25 + 13.5 + 12.5 + 11 + 11.75 + 12.5 + 13.75 + 15 + 16.25 + 16.25 + 15.75 + 14.5 + 14.5 + 14.5 + 14.25 + 14.75 + 13.5 + 12 + 9.5 + 6.75 + 5 + 5 + 5.75 + 6 + 5.75 + 6 + 6 + 6 + 6.75 + 7 + 7.75 + 8.75 + 10.25 + 12.75 + 14.5 + 16.25 + 18 + 22.5 + 24 + 22 + 21 + 20.25 + 19.25 + 17.75 + 16.75 + 14.5 + 13.25 + 13.25 + 13.25 + 11.25 + 8.25 + 8.25 + 9 + 9.5 + 10.5 + 11.25 + 12.5 + 13.25 + 14 + 14.25 + 13.75 + 16 + 16.5 + 15.75 + 14 + 12.75 + 11.5 + 10.25 + 8.25 + 7 + 6.25 + 5.25 + 4.75 + 4 + 3.5 + 3.5 + 4 + 5.25 + 6.5 + 6.25 + 6 + 5.75 + 5.25 + 3 + 4.25 + 4.5 + 5 + 5.5 + 5.75 + 6.75 + 7 + 4.75 + 2.75 + 3 + 3 + 3 + 3.25 + 3.5 + 3.5 + 3.75 + 4 + 4.25 + 4.75 + 4.75 + 4.75 + 4.5 + 4.25 + 4 + 4 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.75 + 3.75 + 5.25 + 5.75 + 6.5 + 7.25 + 8 + 10 + 11.25 + 11 + 10 + 9.25 + 9 + 8.25 + 7.75 + 9.25 + 10.75 + 12 + 12.75 + 14.75 + 16 + 16.25 + 14 + 12.5 + 14.25 + 13 + 12 + 11.25 + 10.75 + 10 + 10 + 9.75 + 10.25 + 10.75 + 11.5 + 13.25 + 14 + 15.25 + 15.25 + 14.75 + 14.25 + 12.75 + 11.5 + 10 + 11.75 + 12.25 + 13 + 13.5 + 14 + 14.5 + 15.25 + 15.5 + 17.5 + 19.75 + 20.75 + 21.25 + 21.75 + 22.5 + 23.25 + 23.75 + 24 + 24 + 22.75 + 22.25 + 20 + 19 + 19 + 17.5 + 16 + 14.75 + 14.5 + 13.75 + 13.75 + 13.75 + 13.75 + 13.75 + 13.25 + 12.75 + 11.25 + 10.5 + 11 + 11 + 11.25 + 12.25 + 16 + 15.25 + 14.75 + 14.5 + 14.25 + 16.25 + 17.25 + 19.75 + 24.5 + 27 + 28.25 + 29.5 + 29.25 + 28.75 + 28.5 + 28.25 + 27 + 26.25 + 25.5 + 25.25 + 25.25 + 26.5 + 27 + 27.5 + 28 + 28.75 + 28.5 + 27.25 + 23 + 21.75 + 20 + 18.75 + 19 + 19.25 + 19.5 + 19.5 + 19.75 + 21.75 + 22.25 + 22.25 + 22 + 21.75 + 21.5 + 21.25 + 21.25 + 21 + 20.5 + 18.5 + 17.75 + 3.25 + 3.25 + 3.25 + 3.25 + 3.75 + 7.75 + 10.75 + 11 + 11.25 + 11.5 + 11.25 + 11.25 + 11.25 + 11.25 + 11.5 + 11.5 + 11.75 + 12 + 12 + 12 + 12.25 + 12.5 + 13.75 + 13 + 12.5 + 12.5 + 12.25 + 10.25 + 10.25 + 10.25 + 9.75 + 8.75 + 8 + 7.5 + 7.75 + 8 + 8 + 8 + 9 + 10.75 + 11.75 + 12.25 + 12.75 + 13.25 + 13.75 + 13.75 + 14 + 13.75 + 13.5 + 12.5 + 11.75 + 11 + 10.75 + 11.5 + 13.5 + 15.5 + 16.25 + 16.75 + 18 + 17 + 10.25 + 9.5 + 10.75 + 16.25 + 19 + 21 + 22.25 + 22.5 + 21.5 + 19.5 + 19.75 + 21 + 22.75 + 22.5 + 25.25 + 25.75 + 23.5 + 23.5 + 23.5 + 23.75 + 23.75 + 24 + 23.5 + 23 + 23.5 + 21.75 + 22.25 + 23 + 23.25 + 23 + 23 + 22.75 + 23 + 23.5 + 24 + 24.25 + 23 + 24.75 + 22.75 + 21.25 + 20 + 18 + 15.25 + 11.5 + 10.25 + 9.5 + 9.25 + 6 + 6.75 + 6.75 + 9.75 + 11 + 11.5 + 11.75 + 11.5 + 11.5 + 10.75 + 9.75 + 9 + 8.25 + 7.5 + 6.5 + 6 + 5.5 + 4.75 + 5 + 5.5 + 6.75 + 8.25 + 11.75 + 8.5 + 13 + 18 + 18 + 17.5 + 15.5 + 15 + 15.25 + 20.25 + 27 + 26.25 + 25.25 + 25.75 + 29.5 + 33 + 34.25 + 37.25 + 37.5 + 37.25 + 37.5 + 40 + 43 + 53.5 + 56 + 59 + 59.5 + 58.75 + 55.5 + 54.75 + 53.75 + 47 + 46.5 + 46.5 + 46.25 + 46.5 + 46.5 + 46.75 + 47.5 + 48.75 + 49.5 + 50 + 50.25 + 48.75 + 47.25 + 44.5 + 44.5 + 46.25 + 47.25 + 46 + 44 + 43.25 + 42.75 + 42.75 + 42.5 + 43.25 + 44.25 + 48.75 + 50 + 50.75 + 51.25 + 51.25 + 50.75 + 50.25 + 50 + 49.75 + 49 + 48.25 + 46.25 + 45 + 43.75 + 43 + 42.5 + 42.5 + 42.25 + 42 + 42 + 41.75 + 41.75 + 41.75 + 40 + 37.5 + 33 + 31 + 30.5 + 32.25 + 30.75 + 26.5 + 23.75 + 21.5 + 19.25 + 17.25 + 15.5 + 16 + 19 + 19.5 + 18.75 + 15.75 + 13.5 + 12.25 + 12 + 12 + 11.75 + 11.75 + 12.25 + 14.5 + 18.75 + 19.75 + 21.25 + 21.75 + 22 + 22.75 + 22.75 + 23.75 + 23.25 + 21.75 + 22.75 + 25.75 + 26.5 + 27.25 + 26.25 + 23.25 + 25 + 25.75 + 25.5 + 25.25 + 25 + 25.5 + 26.25 + 27.75 + 27.75 + 28.25 + 29.25 + 30 + 31.5 + 30.75 + 29.25 + 27.5 + 26.5 + 26.25 + 26 + 26.5 + 27 + 28 + 28 + 28 + 28 + 27.75 + 28.25 + 29.5 + 30.25 + 30 + 29.75 + 31.75 + 32.75 + 33.5 + 34.25 + 35 + 38 + 42 + 43.75 + 46.5 + 47.25 + 49.25 + 51.25 + 51.5 + 52 + 53.75 + 55.75 + 57.75 + 56.75 + 55.75 + 55.75 + 56 + 56.5 + 56.75 + 57 + 56.5 + 55.5 + 54.75 + 53.75 + 53 + 52.75 + 52.25 + 52.25 + 52.5 + 52.5 + 52.25 + 51.75 + 51.75 + 52.25 + 52 + 51.5 + 50.75 + 50.25 + 50 + 49.75 + 49.75 + 49 + 48.5 + 47.25 + 45 + 44 + 43 + 42 + 41 + 40.5 + 39.25 + 38.75 + 39 + 39.5 + 40.25 + 40.75 + 41.75 + 42.75 + 43 + 43.25 + 43.75 + 44.75 + 45.5 + 46.5 + 46.75 + 48 + 48.75 + 49 + 49.75 + 50.5 + 50.75 + 51.25 + 52.25 + 53.25 + 53.75 + 54 + 54 + 54.25 + 55.75 + 56.75 + 57.5 + 58 + 59.25 + 59.5 + 61 + 61.25 + 60.75 + 58.25 + 58 + 60 + 61.75 + 62 + 60.5 + 60.75 + 59.5 + 59.5 + 59.25 + 59.25 + 58.75 + 57 + 52.25 + 47.25 + 39.25 + 35.75 + 33 + 31.5 + 31 + 29.5 + 29.5 + 28.5 + 28.25 + 27.75 + 24 + 22.25 + 21 + 19.25 + 19 + 20 + 21.5 + 22.5 + 23 + 23 + 23.5 + 23.5 + 23.5 + 24.25 + 25 + 25.75 + 25.25 + 25 + 25 + 23.5 + 23 + 23.25 + 23.5 + 23.75 + 24 + 24 + 25.75 + 25.75 + 26.75 + 28.25 + 30 + 33.75 + 35 + 32 + 31.25 + 29.75 + 27 + 33 + 37.75 + 39.5 + 40.75 + 40.75 + 40.5 + 39.5 + 37.75 + 37.75 + 38.25 + 38.5 + 39.5 + 40.25 + 41 + 41.75 + 42.75 + 45.5 + 52 + 56 + 57.25 + 57.75 + 58.75 + 60.5 + 62.5 + 65.75 + 83.5 + 85 + 84.75 + 86.25 + 86.75 + 92.5 + 95.75 + 96.5 + 96.75 + 97.5 + 97.75 + 97.5 + 96.75 + 97 + 97 + 95 + 93 + 92.5 + 93.75 + 93.75 + 93.75 + 93.5 + 92.75 + 91.25 + 89.75 + 88 + 85.5 + 77.5 + 72.25 + 68.75 + 65.75 + 62.5 + 61.25 + 58.75 + 55.25 + 54.5 + 54.25 + 54 + 53.75 + 53.25 + 53.25 + 53.25 + 54.25 + 54 + 52 + 47.75 + 45.75 + 41.5 + 38.75 + 38 + 38.5 + 39.25 + 39.5 + 39.75 + 40.5 + 42.75 + 44.5 + 47.25 + 49.5 + 51.25 + 56.75 + 61.75 + 66.5 + 66.75 + 67 + 69.75 + 72.5 + 75.25 + 77.75 + 78.75 + 79.75 + 78.75 + 77.25 + 76.75 + 75 + 74.5 + 75 + 75.75 + 78 + 78.75 + 68.5 + 62.75 + 62.25 + 62 + 61.5 + 60.5 + 60.25 + 59.5 + 56.75 + 55 + 54.25 + 57.5 + 64 + 67.75 + 71 + 77 + 85.5 + 89.25 + 90.75 + 90.25 + 90.25 + 91.25 + 90.5 + 90 + 90 + 90 + 90.5 + 91.25 + 92.75 + 87.25 + 81.75 + 79.25 + 78.5 + 77.5 + 76.5 + 76 + 75.75 + 75 + 74 + 74.75 + 75.25 + 75.75 + 76.75 + 77 + 77.25 + 77.5 + 77.75 + 78.25 + 78.25 + 78.25 + 78.25 + 78.5 + 78.75 + 79.25 + 79.75 + 80.25 + 81.25 + 81.75 + 81.75 + 81.75 + 81.75 + 82 + 82.25 + 82.25 + 82.75 + 83.25 + 83.25 + 83.5 + 83.75 + 84 + 84 + 84 + 83.75 + 83.5 + 83.75 + 84 + 83.25 + 82 + 82.5 + 84.75 + 86.25 + 86 + 86 + 85.5 + 84.5 + 83.75 + 83.75 + 83 + 86.25 + 87.5 + 88.25 + 89.25 + 89.5 + 90 + 90.25 + 90.75 + 91.25 + 91.75 + 92 + 92.5 + 92.75 + 92.75 + 93 + 93.25 + 93.25 + 93.5 + 93.5 + 94 + 94.5 + 95.25 + 97 + 101.5 + 102.25 + 102.5 + 103 + 103.5 + 103.75 + 103.5 + 102.5 + 101 + 102.5 + 103 + 103.25 + 103.25 + 104.25 + 103.75 + 102.75 + 102 + 101.25 + 100.5 + 98 + 91.25 + 89.5 + 86.25 + 85.75 + 84.75 + 83 + 83 + 83 + 82.5 + 82 + 81.75 + 82.5 + 82.5 + 82.75 + 83.75 + 85.25 + 86 + 86 + 84.25 + 85 + 85 + 85 + 84.75 + 85 + 85 + 85 + 84.75 + 85 + 85 + 84.75 + 84.5 + 82.75 + 82.25 + 82.5 + 81.75 + 81.75 + 82.25 + 82.75 + 83.5 + 84.5 + 85.75 + 86.25 + 86.5 + 87.25 + 88 + 88.75 + 89 + 89.5 + 92 + 92 + 91.75 + 92 + 92 + 92.5 + 93 + 92.25 + 91.25 + 90.75 + 90.5 + 90 + 89 + 88.25 + 87.5 + 87.25 + 87.25 + 87 + 86.25 + 85 + 83.75 + 83 + 82.5 + 82.25 + 81.75 + 82.5 + 82.75 + 83 + 82 + 82 + 82.75 + 83.75 + 84 + 84.25 + 84.75 + 84 + 83 + 81.25 + 81.25 + 81.5 + 82.25 + 83.5 + 84.5 + 85.25 + 85.5 + 85.25 + 85 + 84.25 + 83 + 82.25 + 82 + 83 + 89.25 + 86.25 + 86 + 87 + 87.5 + 87.25 + 87.5 + 87.75 + 87.25 + 86.5 + 86.75 + 86.75 + 88.25 + 89.25 + 89.25 + 89 + 88.5 + 88 + 89 + 89.75 + 91.5 + 92 + 92.5 + 92.75 + 93.25 + 93 + 90.75 + 90.5 + 90 + 90 + 89.75 + 89.5 + 89.25 + 89.25 + 89.5 + 90 + 90 + 90.5 + 91.75 + 93 + 93 + 92 + 91 + 90.25 + 89.5 + 88.5 + 88.25 + 88.25 + 85.75 + 85.75 + 87.75 + 88.5 + 90.25 + 91 + 91.75 + 92.25 + 92 + 92.75 + 93.5 + 94 + 94.25 + 94.25 + 94.25 + 93.25 + 91.25 + 86 + 86 + 85.25 + 83.5 + 81.5 + 82 + 82 + 82 + 82 + 82.25 + 81.25 + 80.75 + 80.5 + 80.25 + 79.75 + 78.5 + 77.75 + 77.25 + 74.5 + 71.5 + 70.25 + 69.5 + 68.75 + 67.25 + 66.75 + 66 + 65 + 63.25 + 60.75 + 61.25 + 63 + 64 + 64.5 + 66.5 + 67.5 + 68.25 + 69 + 71.75 + 72.25 + 72.5 + 72.5 + 72.5 + 72.5 + 72.75 + 72.75 + 72.5 + 72.5 + 72.5 + 72.5 + 72.25 + 72 + 72.25 + 72.25 + 72.75 + 72.75 + 72.75 + 72.75 + 73 + 72.75 + 72.25 + 71.75 + 71 + 70.75 + 70.25 + 70.25 + 70 + 69.75 + 69.75 + 69.5 + 69 + 68.75 + 68.25 + 68 + 68.25 + 68.5 + 71.25 + 73.75 + 71.75 + 71.5 + 70 + 64.5 + 61.75 + 57.5 + 56.25 + 54.5 + 54 + 54.5 + 55.25 + 55.75 + 56 + 55 + 54.5 + 53.75 + 51.75 + 50 + 47.5 + 44.25 + 44 + 46.5 + 49.5 + 45.75 + 42.75 + 44.25 + 44.25 + 44.25 + 44 + 43.25 + 41.75 + 41 + 39.75 + 38.75 + 37.25 + 36.25 + 35.5 + 35 + 34.75 + 34 + 33.75 + 33 + 33 + 33 + 32.75 + 31.75 + 31.5 + 31 + 28.75 + 27.25 + 27 + 26.25 + 23.75 + 22.75 + 22.75 + 22.5 + 22.5 + 22.5 + 22.25 + 22.25 + 22 + 22 + 22 + 22 + 22 + 21.5 + 20.25 + 19.75 + 19.5 + 18.75 + 18.25 + 18 + 17.75 + 17.25 + 16.75 + 16.5 + 15.75 + 14 + 12.5 + 11.75 + 11 + 10.25 + 10.75 + 10.75 + 10 + 9.75 + 9.25 + 9 + 7.25 + 6 + 5.5 + 6.25 + 6.5 + 6.5 + 6.75 + 6.75 + 6.75 + 7 + 7.75 + 9.5 + 12.75 + 15.75 + 17.5 + 18.75 + 17.25 + 14.75 + 12 + 14 + 14.25 + 13.75 + 14.5 + 15 + 16.75 + 16.75 + 17.25 + 17.5 + 17.25 + 17 + 18.5 + 19.5 + 20 + 20.75 + 22.25 + 22.75 + 21.75 + 21.25 + 21 + 21 + 21 + 21.25 + 21 + 19.75 + 18.5 + 17.75 + 17.25 + 17 + 16.5 + 16.25 + 15.5 + 14 + 13.25 + 13 + 13.5 + 14.75 + 15 + 15 + 15 + 15.5 + 15.5 + 16 + 18.25 + 19.75 + 20.75 + 23 + 23.5 + 24.75 + 24.75 + 24.5 + 25 + 25.25 + 26 + 27.75 + 28.5 + 28 + 27.5 + 26.25 + 25 + 24.25 + 24 + 24 + 24 + 24.25 + 24.25 + 24.25 + 24.25 + 24.75 + 25.25 + 27 + 28 + 28.25 + 29.25 + 30 + 30.75 + 31.25 + 32 + 32.75 + 33 + 33.75 + 35.25 + 35.25 + 35.25 + 35.25 + 35.25 + 35 + 36.75 + 36.75 + 36.75 + 36.75 + 37.5 + 37.75 + 37.75 + 37.75 + 37.75 + 37.25 + 36.75 + 36.25 + 34.25 + 32.25 + 31.75 + 31.5 + 30.75 + 29.5 + 29.25 + 29 + 28.75 + 28.75 + 28.5 + 28.5 + 28.75 + 28.75 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 29 + 28.75 + 28.75 + 28.5 + 28.5 + 28.25 + 28.25 + 28.25 + 28.25 + 28 + 27.5 + 27.5 + 27.75 + 28 + 28 + 28 + 28 + 27.75 + 27.75 + 27.5 + 27.25 + 27.25 + 27 + 27 + 26.75 + 26.5 + 26.5 + 26.5 + 26.5 + 26.75 + 26.75 + 27 + 26.75 + 26.75 + 26.5 + 26.75 + 26.75 + 25.5 + 24.25 + 24 + 26.25 + 35 + 34.75 + 34.75 + 35 + 34.5 + 34 + 34.25 + 34 + 34.5 + 35.5 + 36.25 + 36.75 + 39 + 41 + 44 + 46.75 + 45.75 + 44.25 + 42.5 + 45.25 + 47.5 + 48.75 + 51.5 + 50 + 46.5 + 46 + 43.75 + 45.5 + 45.75 + 45.5 + 45.5 + 45.5 + 45.5 + 45.5 + 45.75 + 46 + 46 + 46.25 + 46.5 + 46.75 + 47 + 47 + 48.25 + 49 + 51 + 53.5 + 55.75 + 57.5 + 58.25 + 57.25 + 56.25 + 55.25 + 54.75 + 54.5 + 53.5 + 51.75 + 50 + 45.5 + 42.25 + 36.25 + 31.5 + 31.5 + 33.75 + 33 + 31.75 + 29 + 28 + 26 + 25 + 24.25 + 24 + 23 + 22.25 + 21.5 + 19 + 19 + 19.5 + 20.5 + 20.75 + 16.75 + 15.25 + 12.75 + 12.5 + 11.75 + 10.5 + 11 + 11.75 + 12.5 + 14 + 13.25 + 12.75 + 13.25 + 13.75 + 15.25 + 16.25 + 25.5 + 28.5 + 24.25 + 24 + 25.75 + 28 + 28.5 + 29.25 + 29 + 27 + 22.5 + 20.5 + 18.5 + 16.5 + 16.75 + 16.75 + 17 + 17.25 + 17.75 + 18 + 21 + 24.75 + 26.25 + 26.5 + 24 + 23.25 + 22.5 + 22 + 22 + 22 + 21.25 + 20.75 + 20.75 + 21 + 21 + 21.25 + 21.5 + 21.5 + 21.25 + 21.25 + 21.25 + 21.25 + 21.75 + 26.25 + 26.5 + 26.75 + 26.75 + 26.25 + 24 + 22.75 + 21.75 + 20.75 + 20 + 23.75 + 31 + 36 + 38.5 + 39 + 36.25 + 33.75 + 31.75 + 29.5 + 27 + 26.25 + 25.5 + 25.5 + 29.5 + 31.75 + 35 + 35.75 + 35.25 + 36.5 + 37.75 + 37.75 + 35.75 + 27.5 + 27.25 + 27 + 27 + 27.5 + 29.25 + 31 + 32 + 33.25 + 35.5 + 37.25 + 38.5 + 39 + 39.5 + 40.25 + 40.5 + 40 + 39.5 + 39.5 + 39.25 + 39.25 + 37.75 + 37.75 + 39.5 + 42 + 42 + 41.5 + 42.25 + 43.25 + 42.5 + 40.75 + 39.75 + 40 + 40.5 + 40 + 41.25 + 45 + 45.75 + 45.75 + 49 + 50 + 50 + 48.5 + 47.25 + 46 + 46 + 45.5 + 45.25 + 45.5 + 45.75 + 46.25 + 46.5 + 47.75 + 48.5 + 49.25 + 56.5 + 62.75 + 63 + 63.25 + 56.75 + 61.5 + 63.5 + 64.5 + 65 + 66.5 + 68.25 + 73.5 + 77.5 + 78 + 78.5 + 78.5 + 77.75 + 76 + 72.75 + 71.5 + 68.5 + 66 + 65.75 + 63.25 + 57.5 + 56.25 + 57 + 57.25 + 58.25 + 58.25 + 58.75 + 59 + 59.25 + 59.75 + 60 + 60.25 + 60.5 + 60.75 + 61 + 61.25 + 61.5 + 61.5 + 61.5 + 61.5 + 61.25 + 61.25 + 61.25 + 61 + 60.75 + 60.75 + 60.25 + 60 + 60 + 60.25 + 60.5 + 60.75 + 59.5 + 67 + 70.25 + 74.25 + 75 + 76.5 + 80 + 83.5 + 85 + 85 + 85 + 85 + 84 + 83.75 + 82.5 + 82.25 + 82.5 + 82.5 + 83 + 83.75 + 83.5 + 82.25 + 79.75 + 79 + 77.5 + 76.5 + 75.25 + 73.5 + 68 + 66.5 + 65.5 + 65.25 + 64.75 + 63.5 + 63.25 + 55.5 + 58.75 + 59.5 + 61 + 62.25 + 61.5 + 59 + 58.75 + 59 + 59.25 + 59 + 60 + 60.5 + 60.25 + 60.5 + 60.75 + 60.75 + 60.75 + 61 + 61.25 + 60.75 + 60.5 + 60.5 + 60.25 + 60.25 + 60.25 + 60.25 + 60.25 + 60.25 + 60.5 + 60.75 + 62.25 + 64.5 + 66 + 69.75 + 70.5 + 72 + 73 + 75.75 + 81 + 82.25 + 81.5 + 80.75 + 80.25 + 80 + 79.75 + 80 + 80 + 80 + 79.75 + 79.5 + 79.5 + 81 + 81.75 + 82 + 83.25 + 84.25 + 87 + 88.5 + 88.25 + 88.25 + 87.75 + 87.5 + 88 + 87.75 + 87.75 + 87.75 + 88.25 + 86.5 + 84.25 + 82.5 + 82 + 81 + 79.25 + 75 + 72.75 + 64.5 + 64.5 + 62.75 + 59.75 + 59.5 + 59 + 58.75 + 58.5 + 58.5 + 58.75 + 59 + 58.75 + 58.5 + 58.25 + 57.5 + 57.25 + 56.5 + 55.75 + 55.25 + 54 + 52 + 51.5 + 50.5 + 49.25 + 48.75 + 48.5 + 48 + 47.75 + 47.5 + 47 + 46.25 + 46 + 45.5 + 45 + 44.5 + 43.75 + 42.75 + 42.75 + 42.25 + 40.75 + 40 + 40 + 40 + 40 + 40 + 40 + 40 + 39.75 + 39.25 + 38.75 + 38.75 + 38.75 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.25 + 38.5 + 38.5 + 38.75 + 39 + 39 + 39.25 + 39.5 + 39.75 + 40 + 40.25 + 40.25 + 40.25 + 40.25 + 40.25 + 40.25 + 40 + 39.75 + 39.5 + 39.25 + 38.5 + 38 + 38.25 + 38.25 + 37.5 + 36.5 + 36.5 + 36.5 + 36.25 + 36.25 + 36.5 + 36.75 + 37 + 37.25 + 37.75 + 37.75 + 37.5 + 37.5 + 37.5 + 36.75 + 34 + 33.75 + 33.5 + 33.25 + 32.25 + 29 + 28.25 + 26.75 + 26.75 + 24.25 + 23.25 + 23 + 22.5 + 21.75 + 20 + 19.75 + 19 + 18 + 15.25 + 14 + 13.75 + 13.25 + 13.25 + 13 + 12.5 + 12.25 + 12.5 + 12.5 + 12.75 + 13.25 + 13.5 + 13.75 + 14.25 + 14.5 + 15.5 + 14.5 + 14 + 13.5 + 12.75 + 12.75 + 12.25 + 12 + 10.75 + 11 + 10.5 + 10.5 + 10.25 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 11.25 + 15 + 15.75 + 16 + 16.25 + 15.5 + 15.5 + 16.25 + 16.25 + 16.25 + 16 + 15.5 + 14.75 + 10.75 + 10.75 + 10.25 + 8 + 8.25 + 8.25 + 8 + 8 + 7.5 + 6.75 + 6 + 6 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 6 + 6 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.5 + 5.5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 5 + 5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 4.75 + 4.5 + 4.5 + 4.5 + 4.25 + 4.25 + 4 + 4 + 4 + 5.25 + 5.25 + 9.25 + 7 + 6.5 + 4 + 4.75 + 5 + 7.25 + 10 + 13 + 14.25 + 15.25 + 16.25 + 17.25 + 16 + 14.25 + 9 + 7.75 + 4.5 + 4.5 + 5 + 5.25 + 5.5 + 6.25 + 6.75 + 7 + 7.5 + 7.5 + 7 + 7.25 + 7.25 + 7.25 + 7 + 7 + 6.5 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6.25 + 5.75 + 5.5 + 5.5 + 5.25 + 4.75 + 4.75 + 4.5 + 4.5 + 4.5 + 4.5 + 5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 6 + 6 + 6 + 6 + 5.75 + 6 + 6 + 6 + 6 + 6 + 6.25 + 7 + 7.75 + 10.25 + 11 + 11.25 + 11.5 + 12 + 12.25 + 10.75 + 10.25 + 10.25 + 9.5 + 9 + 8.5 + 8 + 7.75 + 7.25 + 6.75 + 5 + 4 + 3.75 + 3.5 + 3 + 2.75 + 2.75 + 2.5 + 2.25 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1.75 + 2 + 2.75 + 2.75 + 2.75 + 2.75 + 2.5 + 2.5 + 2.5 + 2.75 + 3 + 2.5 + 2.5 + 1.75 + 2 + 2 + 2.25 + 2.25 + 2.25 + 2.25 + 2.25 + 5 + 5 + 5 + 5.25 + 5.5 + 5.75 + 6.25 + 6.5 + 6.5 + 6.5 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.5 + 6.25 + 5.75 + 5.25 + 5.25 + 5 + 5 + 5 + 4.75 + 4.25 + 3.5 + 3 + 3 + 3 + 3 + 3.5 + 3.5 + 3.75 + 3.75 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 15 + 15.5 + 15.75 + 22.5 + 22.5 + 22.25 + 22 + 21.75 + 22 + 22 + 23 + 23.5 + 23.5 + 23.75 + 24.5 + 25 + 23.75 + 22.5 + 21.75 + 21.25 + 22.25 + 22.5 + 22.75 + 23.5 + 24.25 + 24.75 + 27.75 + 28.25 + 28.5 + 28.25 + 27.25 + 25.5 + 23 + 21.75 + 20.75 + 19.25 + 18.75 + 18.5 + 18.5 + 18.5 + 19.25 + 20 + 20.75 + 22 + 22.75 + 23 + 25.25 + 26.5 + 26.5 + 26.5 + 26.25 + 25.75 + 21.5 + 21.25 + 20.5 + 19.75 + 20 + 15.75 + 14.25 + 16.25 + 17 + 17 + 16.5 + 12.5 + 11 + 10.75 + 11.75 + 12 + 12.5 + 13 + 14 + 15 + 18.5 + 22 + 23.5 + 23.75 + 25 + 27 + 28.75 + 33.25 + 36 + 38.5 + 46.25 + 50.5 + 53.5 + 56.25 + 58.75 + 60.75 + 62.75 + 64.25 + 65.25 + 66 + 66.75 + 67 + 67 + 66.75 + 67 + 67 + 67 + 67 + 67 + 68.25 + 69.25 + 70.25 + 71 + 72.75 + 74 + 74.5 + 75 + 75.5 + 75.5 + 75.25 + 75 + 74 + 72.75 + 71.25 + 71.75 + 72.25 + 73 + 74.25 + 75 + 73.75 + 73.5 + 73.25 + 73 + 72.25 + 71 + 70 + 65.75 + 65.25 + 64.25 + 59.5 + 57.75 + 56.25 + 50.75 + 49.5 + 45.75 + 45.5 + 43.5 + 43.25 + 42.5 + 41.25 + 41 + 41.25 + 42.25 + 45 + 46.25 + 46.75 + 47.5 + 48.5 + 49.25 + 49.5 + 49.5 + 49.25 + 49.25 + 49.25 + 49.25 + 49 + 48.25 + 46 + 45.75 + 45 + 45 + 44.5 + 42.5 + 42 + 43 + 44.5 + 46.25 + 47.5 + 46.75 + 43.75 + 42.75 + 42.25 + 42 + 42 + 41.75 + 41.5 + 42 + 42.5 + 43.25 + 43.25 + 42.5 + 42 + 41 + 39 + 37.75 + 36.75 + 35.75 + 35 + 35 + 35.25 + 35.25 + 35.5 + 35.5 + 36 + 36.5 + 37 + 37.25 + 37.5 + 38.25 + 38.5 + 38.75 + 39.25 + 39 + 38.75 + 38.5 + 38 + 37.25 + 36.25 + 36.25 + 36.25 + 36.25 + 36.25 + 36.25 + 36 + 35 + 35.25 + 35.25 + 35.25 + 35.25 + 35.25 + 35.5 + 35.5 + 35.75 + 35.75 + 35.75 + 35.75 + 35.75 + 36 + 36 + 36 + 36 + 36.25 + 36.25 + 36.25 + 36.5 + 36.25 + 36 + 35.75 + 36.5 + 38 + 38.75 + 40.75 + 41.75 + 42.25 + 42 + 41.75 + 41.5 + 42 + 41.75 + 43 + 42.5 + 55.5 + 50 + 45.5 + 28 + 22 + 19.25 + 14.75 + 14.5 + 12.25 + 11.25 + 15.25 + 16.75 + 17.25 + 18 + 18 + 17.5 + 16.75 + 16.5 + 16.5 + 16.75 + 17.25 + 18 + 18.75 + 20.5 + 19.75 + 24.75 + 28.5 + 28.5 + 28.25 + 27.25 + 25.75 + 25.75 + 27.75 + 29.25 + 31.75 + 30.25 + 31.5 + 33.5 + 35.25 + 36.25 + 37.25 + 39.5 + 41.75 + 42.5 + 43.25 + 44 + 43.5 + 39.25 + 29 + 27.5 + 27.25 + 27 + 27 + 27.25 + 26.5 + 24.75 + 28.5 + 29.25 + 29.75 + 27.75 + 24 + 22.5 + 20.25 + 18.25 + 15.5 + 14 + 12.75 + 12 + 11 + 10.25 + 11.75 + 12.25 + 14.25 + 16 + 16 + 10.5 + 9.75 + 8.25 + 6.75 + 5.5 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4 + 4 + 3.75 + 3 + 3 + 2.5 + 2.5 + 2.25 + 2 + 1.75 + 1.75 + 1.75 + 2 + 3 + 4.75 + 3.75 + 3 + 1.25 + 0.5 + 0.5 + 1.5 + 1.75 + 4.25 + 6 + 6.5 + 8.5 + 10.25 + 11.25 + 9.5 + 8.25 + 8.25 + 8.25 + 9 + 11.75 + 12.25 + 13.25 + 14.75 + 17 + 18 + 19.5 + 20.25 + 17.5 + 17.75 + 17.5 + 17.25 + 17.5 + 17.75 + 18.5 + 19.25 + 21.75 + 25.25 + 25.5 + 27.25 + 28 + 28.5 + 28.75 + 27.5 + 26.75 + 26 + 25.75 + 26.5 + 27 + 27.25 + 27.5 + 27.25 + 26.5 + 26.25 + 26 + 25.75 + 25.5 + 25 + 24.25 + 24.75 + 25.25 + 25.75 + 26 + 26.5 + 26.5 + 28.5 + 29.25 + 31.25 + 32.75 + 40.75 + 43.75 + 45.5 + 46.25 + 48.25 + 48 + 47.75 + 48.25 + 48 + 47.75 + 48 + 47.75 + 46.5 + 44.5 + 43.75 + 43 + 42.5 + 42.5 + 43.25 + 44.75 + 48.25 + 49.25 + 50 + 50.5 + 50.5 + 50.5 + 51.5 + 52.25 + 53 + 54.25 + 55 + 55 + 55.5 + 55.75 + 56.25 + 57.75 + 60.75 + 65.5 + 70.75 + 77.75 + 78 + 77.5 + 76.5 + 75.75 + 76 + 76 + 72 + 73.25 + 74 + 74.25 + 74.25 + 74.25 + 74.5 + 74.75 + 75 + 76 + 80 + 80.75 + 81 + 84.5 + 85.5 + 85.75 + 84 + 82 + 80.75 + 78.5 + 75.25 + 72.25 + 70 + 68 + 66 + 64.25 + 62 + 60.75 + 61.5 + 63.5 + 64 + 63.5 + 61.25 + 62 + 62.5 + 62.25 + 60.75 + 60 + 60 + 59 + 58.5 + 57.25 + 56 + 56.25 + 56.5 + 56.75 + 57.25 + 58.25 + 59 + 60 + 59 + 56.5 + 53.75 + 53.25 + 53 + 51.5 + 50.5 + 50.5 + 59.75 + 65.25 + 69 + 73.25 + 76.5 + 75.75 + 76.75 + 77 + 76.75 + 75 + 68.75 + 66.5 + 66 + 65.5 + 65.5 + 65.5 + 65.5 + 65.75 + 66.5 + 67.75 + 68.5 + 69.25 + 71.25 + 71.25 + 71.25 + 72 + 76 + 76.75 + 78.25 + 79.5 + 79.75 + 79.75 + 78.25 + 78 + 78 + 77.5 + 77 + 76 + 74.5 + 72.75 + 71.75 + 70.75 + 70.25 + 69.5 + 68.5 + 65.25 + 63 + 62.5 + 62.25 + 62 + 61.75 + 61.25 + 60 + 58.5 + 57.5 + 56.75 + 56.25 + 55.25 + 54.75 + 54.5 + 53.25 + 52.5 + 50.75 + 50.25 + 51 + 52.5 + 53.25 + 54.25 + 55.75 + 58 + 59.5 + 61 + 62 + 62.75 + 63.25 + 63.25 + 63.25 + 62.25 + 58.25 + 56.5 + 54.75 + 52.5 + 49.75 + 49.5 + 50.75 + 51.5 + 53 + 54.75 + 58.25 + 61.5 + 65.75 + 66 + 66 + 66.25 + 68 + 68.5 + 67 + 65 + 63.5 + 61.75 + 60.25 + 59.75 + 59.25 + 58.25 + 57.75 + 57 + 56 + 54.75 + 53.5 + 52.25 + 51.25 + 49.75 + 48.5 + 49.25 + 50.75 + 50.75 + 51.75 + 52.25 + 52.75 + 53 + 51.75 + 50.75 + 52.5 + 55.5 + 55.5 + 55 + 54 + 52.75 + 51 + 50 + 48 + 46 + 45 + 42.5 + 42 + 40.75 + 39.5 + 38 + 36.75 + 36.25 + 35 + 33.75 + 33 + 31.5 + 31.5 + 31.5 + 29.75 + 28.25 + 26.75 + 26 + 25.5 + 25 + 24.5 + 24 + 24 + 24 + 24 + 24 + 24 + 22.75 + 21.75 + 21.25 + 21.25 + 21.25 + 21.5 + 21 + 20.75 + 20.5 + 20.25 + 17.25 + 17.25 + 17.25 + 17 + 17 + 17 + 17 + 17 + 17 + 16.75 + 16.75 + 16.25 + 16 + 14.25 + 13.5 + 13 + 12 + 10.5 + 12.75 + 13 + 12.75 + 12.5 + 12.5 + 12.5 + 12.75 + 13.25 + 14.25 + 16 + 17 + 17.5 + 17.5 + 18.5 + 18.5 + 18 + 18 + 18.5 + 19 + 19.25 + 19.25 + 19 + 18.75 + 18.5 + 18.5 + 18.5 + 18.5 + 18.25 + 17.75 + 17.5 + 17 + 17 + 16.75 + 16 + 15.5 + 15 + 14.5 + 11.25 + 10.75 + 11 + 11 + 11.25 + 12 + 13.5 + 16 + 17.25 + 18 + 18.25 + 18.25 + 18.75 + 19.5 + 20.5 + 22.5 + 23.25 + 24 + 24 + 23.75 + 23.5 + 22 + 21.25 + 20.25 + 19.25 + 17.75 + 20 + 19.75 + 19.5 + 19.25 + 19.5 + 19.25 + 19 + 18.5 + 18.5 + 18.5 + 18.25 + 18.25 + 18.75 + 19.5 + 20.25 + 20.25 + 19.5 + 18.25 + 16.5 + 14.5 + 13.25 + 12 + 11.5 + 11.25 + 10.5 + 10 + 9.75 + 9.25 + 9 + 9 + 9 + 9 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.25 + 8.25 + 8.25 + 8.25 + 8.75 + 8.75 + 9 + 9.25 + 9.5 + 9.5 + 9.5 + 9.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8 + 8 + 8.25 + 8.5 + 8.75 + 8.75 + 8.5 + 7.75 + 6.5 + 6.5 + 6.75 + 6.5 + 6.25 + 5 + 4 + 3.75 + 3.75 + 3.5 + 3 + 3.75 + 4.5 + 4.75 + 5.25 + 5.75 + 6 + 6.75 + 4.25 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 4 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3 + 4.25 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 5.25 + 5.5 + 5.75 + 7 + 9 + 8 + 4.5 + 4 + 4 + 4 + 4 + 3.5 + 4 + 3.75 + 3.25 + 2.75 + 2.5 + 2.25 + 2.5 + 3.25 + 3.5 + 3.5 + 3.75 + 3.75 + 3.5 + 2.25 + 2 + 2.75 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.75 + 2.75 + 3 + 3.25 + 4 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4 + 3.75 + 3.75 + 3.5 + 3.5 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.5 + 3.75 + 5.75 + 6 + 6.75 + 7.5 + 8 + 8 + 8 + 7.25 + 6.75 + 6.25 + 5.5 + 5 + 4.5 + 4.5 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.25 + 3.25 + 3 + 2.5 + 2.75 + 2.75 + 3 + 4 + 4.25 + 4.5 + 4.75 + 5 + 5.25 + 5.75 + 6.25 + 6.25 + 6 + 5.75 + 5.75 + 6.25 + 6.25 + 6.5 + 6.5 + 5.75 + 6.25 + 6.75 + 6.25 + 5.5 + 4.5 + 3.75 + 2.75 + 2.5 + 2.75 + 5.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6 + 6 + 6 + 6 + 6 + 6 + 5.75 + 5.75 + 5.5 + 6.25 + 6.5 + 6.75 + 7 + 6.75 + 6.25 + 6 + 5.75 + 5.75 + 5.5 + 5 + 4.5 + 4.5 + 4.25 + 4 + 3.75 + 2.5 + 2 + 2 + 3 + 3 + 3.25 + 3.5 + 3.75 + 4.25 + 5 + 6 + 6 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.25 + 5 + 5 + 5 + 4.75 + 4.25 + 4.25 + 4.25 + 4.5 + 4.75 + 5 + 5 + 5.25 + 6.25 + 6.75 + 7 + 7.5 + 7.75 + 8 + 8.25 + 8.25 + 8.75 + 8 + 6.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.25 + 5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 5.75 + 6.25 + 6.25 + 5.75 + 4.75 + 3 + 2.75 + 2 + 2 + 2 + 2 + 2.25 + 2 + 2 + 2 + 4 + 5.5 + 4.25 + 3.25 + 2.25 + 1.5 + 1.75 + 2 + 2 + 2.5 + 2.5 + 2.75 + 3 + 3 + 3 + 3.25 + 4.25 + 5.75 + 5 + 5 + 6 + 6.75 + 7 + 7 + 7 + 7 + 7.25 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 8 + 8 + 8.25 + 9.5 + 11 + 11.5 + 14.75 + 15.75 + 16.5 + 16.5 + 16.25 + 15.5 + 16 + 18 + 18.25 + 18.5 + 18.75 + 19 + 19.25 + 20.5 + 22.25 + 24 + 23.5 + 22.75 + 21.75 + 21.25 + 19.5 + 17 + 16.75 + 16.5 + 16 + 15.25 + 14.75 + 13.75 + 13 + 13 + 13.5 + 13.75 + 14.25 + 14.5 + 15 + 15.25 + 14.5 + 14.25 + 14 + 13.75 + 13.5 + 13 + 12.25 + 12 + 11.75 + 11.5 + 11.25 + 11.25 + 11 + 11 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 12 + 12 + 12 + 12 + 12 + 12 + 12.25 + 12.25 + 12.25 + 12.5 + 13.5 + 17.5 + 19 + 17.25 + 15 + 14 + 13.25 + 12.5 + 12 + 12.25 + 12.5 + 12 + 11.25 + 11 + 10.25 + 9.75 + 9.25 + 8.75 + 8.25 + 8 + 8 + 8 + 7.75 + 7.75 + 7.5 + 7.5 + 7.5 + 7 + 7 + 7.25 + 7.25 + 7.75 + 7.5 + 7 + 7.25 + 7.25 + 6.75 + 7.5 + 6 + 6.25 + 6.75 + 7 + 6.75 + 6.75 + 7 + 7 + 11.75 + 13.5 + 16.75 + 17.75 + 18.5 + 19 + 21 + 20 + 19.5 + 19.25 + 19 + 18.75 + 18.25 + 18.25 + 18.25 + 22 + 22.5 + 24.25 + 24.75 + 25 + 25.25 + 26 + 25.25 + 24.75 + 24.25 + 23.75 + 26 + 26.75 + 27 + 27 + 25 + 24.75 + 24.5 + 24.25 + 24 + 23.5 + 23 + 22.5 + 21.75 + 21.25 + 19 + 18.5 + 18 + 18.25 + 18.5 + 18.75 + 18.75 + 18.75 + 18.25 + 18.25 + 17.75 + 18.25 + 18.25 + 18.25 + 18.25 + 18.25 + 18.5 + 19 + 19 + 18.5 + 17.75 + 14.5 + 13.75 + 13.75 + 13.25 + 13 + 12.75 + 12.75 + 12.5 + 12 + 11.5 + 10.75 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10.75 + 11.25 + 12.75 + 14.25 + 14.75 + 14.75 + 15 + 15.25 + 15.5 + 18 + 19 + 19.5 + 19.75 + 20 + 20.5 + 21.25 + 21.75 + 21.75 + 22.75 + 23.75 + 24.25 + 24.5 + 25 + 25 + 25 + 25 + 26 + 27.75 + 29.75 + 31.25 + 32.25 + 31 + 32 + 32.5 + 33 + 34 + 37 + 36.75 + 34.75 + 34.75 + 35.5 + 34 + 32.75 + 33.75 + 34.75 + 35.75 + 36.5 + 36.75 + 37 + 36 + 32.75 + 30.25 + 27.5 + 27.5 + 29 + 37 + 37.5 + 35.25 + 31 + 29 + 27 + 27.25 + 28.5 + 31.75 + 34 + 34.5 + 34.75 + 32.75 + 31 + 30 + 29 + 27.75 + 27.75 + 27.75 + 27.75 + 28 + 28 + 28 + 28 + 27.75 + 27.5 + 27.5 + 27.25 + 27.25 + 27.25 + 27.25 + 27 + 26.5 + 26.5 + 26.5 + 26.75 + 26.75 + 27 + 26.75 + 27.75 + 28 + 28.25 + 28.25 + 28.5 + 32.25 + 33 + 33 + 33 + 32.5 + 31.75 + 31.5 + 30.5 + 30.5 + 31 + 31.25 + 31.75 + 31.5 + 31 + 30.5 + 30.25 + 30 + 30 + 30.5 + 31 + 31.25 + 31 + 31 + 31 + 30.75 + 30.5 + 30.5 + 30.25 + 29.75 + 29.5 + 29 + 30.75 + 31 + 31 + 31 + 28.75 + 27.25 + 25.75 + 25 + 25.5 + 26.25 + 26.25 + 27.25 + 27.75 + 27.75 + 28 + 29.75 + 30.5 + 31 + 31.75 + 32 + 32.25 + 33.25 + 35.5 + 36 + 36.75 + 40.25 + 42.25 + 47.25 + 54.5 + 54.75 + 55.75 + 54 + 53.5 + 53.25 + 53.25 + 49.5 + 49.25 + 49 + 49 + 48.75 + 48.5 + 48.25 + 47 + 47.25 + 47.5 + 51.25 + 51.5 + 52.25 + 52.5 + 52.5 + 52.5 + 52.25 + 52.25 + 52.25 + 53 + 54.75 + 57 + 57.75 + 59 + 61.5 + 64.75 + 66.5 + 66.75 + 65.25 + 64.25 + 62.25 + 60 + 59 + 56.75 + 54.75 + 53.5 + 46.25 + 44.5 + 42.75 + 41 + 34.25 + 33 + 36.75 + 37 + 38.25 + 39.5 + 40 + 40.5 + 41 + 41.75 + 43.25 + 45.5 + 46.25 + 45.5 + 45 + 44.5 + 42.75 + 39.25 + 38.5 + 38.25 + 38.25 + 38.25 + 38.25 + 37.75 + 37.5 + 37.25 + 36.5 + 35.25 + 34.5 + 34 + 33.75 + 32.25 + 31.75 + 31.75 + 31.5 + 31 + 26.5 + 26.75 + 26.75 + 27 + 33.75 + 34.5 + 35 + 35.5 + 35.75 + 36.25 + 35.75 + 34.25 + 33.5 + 33.25 + 33.25 + 33.25 + 33 + 32.75 + 31.75 + 31.5 + 31 + 29 + 27.25 + 26 + 25.75 + 26 + 26 + 26 + 25 + 25 + 24.75 + 24.5 + 24.5 + 23.75 + 23.25 + 23 + 23 + 23 + 22.5 + 22.5 + 19.25 + 19 + 19.25 + 19.25 + 19.5 + 19.75 + 19.75 + 20.25 + 20.5 + 20.5 + 20.5 + 20.5 + 20.5 + 20.75 + 20.75 + 20.75 + 22 + 22 + 22.25 + 22.5 + 23.75 + 24 + 23 + 22.75 + 22.75 + 22 + 22.5 + 23 + 24.5 + 26.75 + 26.75 + 27 + 26.75 + 25.5 + 25 + 24.5 + 22.25 + 21.25 + 21 + 21 + 21.25 + 21.25 + 21.25 + 21.25 + 21 + 20.75 + 20.75 + 21 + 21 + 21.25 + 21.75 + 22 + 22 + 21.5 + 20.75 + 20.25 + 20 + 20 + 20.5 + 20.75 + 21 + 21.25 + 21.5 + 22 + 22.25 + 22.5 + 23 + 23.75 + 24 + 23.75 + 23.5 + 23.25 + 23.25 + 23.25 + 23.75 + 24 + 24 + 24 + 23 + 21.5 + 21.5 + 21.75 + 21.5 + 21.5 + 21.5 + 21.75 + 21.75 + 21.75 + 22 + 22 + 21.75 + 21.5 + 21.5 + 21.5 + 21.75 + 22.25 + 22.25 + 22.25 + 22.25 + 23.5 + 24.25 + 24.5 + 25 + 25.25 + 25.75 + 25.75 + 25.5 + 25 + 25 + 25 + 25.25 + 25.25 + 25.75 + 25.75 + 25.75 + 26 + 26.25 + 26 + 26 + 26 + 26.5 + 28.75 + 32.5 + 34.5 + 35.75 + 37 + 39.5 + 39.75 + 40 + 40 + 40.25 + 40.25 + 40.25 + 40.25 + 40 + 39.25 + 38.75 + 39 + 40.5 + 41.25 + 42.75 + 43.5 + 42.25 + 40.75 + 38.5 + 34.75 + 33.75 + 33.5 + 33 + 32.75 + 32.5 + 32.5 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.5 + 32.75 + 32.75 + 32.75 + 32.75 + 32.75 + 35 + 35.25 + 35.5 + 35.75 + 36.25 + 36.75 + 37.25 + 37.25 + 37.25 + 37.5 + 37.75 + 38 + 38.75 + 39 + 40 + 40.5 + 41 + 41 + 40.75 + 40.5 + 40 + 41 + 40.5 + 40.25 + 40.25 + 40.75 + 41.75 + 41.75 + 41.75 + 41.75 + 42 + 42 + 41.75 + 41.75 + 41.75 + 41.5 + 41.25 + 40.5 + 35 + 33.75 + 31 + 28 + 26.75 + 24 + 21.5 + 19.5 + 18.5 + 17.75 + 17.25 + 16.75 + 14.5 + 14 + 13.5 + 12.5 + 12 + 12 + 11.75 + 11.75 + 11.25 + 11 + 10.75 + 10.5 + 10 + 9.75 + 8.75 + 8.25 + 8 + 7.75 + 7 + 6.75 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 8.25 + 8.5 + 8.75 + 9.25 + 9.75 + 10.5 + 10.75 + 10.5 + 10.5 + 10.25 + 10 + 10 + 10 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.5 + 10.5 + 10.5 + 10 + 10.25 + 10.75 + 10.75 + 12 + 12.25 + 12.25 + 12.75 + 13 + 13.5 + 13.75 + 13.75 + 14 + 13.5 + 13 + 12.75 + 12.75 + 12.75 + 12.75 + 12.5 + 12.5 + 12.5 + 12.5 + 12.25 + 12.25 + 11.75 + 11.75 + 11.5 + 11.5 + 11.25 + 11.25 + 11.25 + 8.25 + 8 + 7.75 + 7.25 + 7.25 + 7.25 + 6.75 + 6.5 + 6.25 + 6 + 5.75 + 5.5 + 5.25 + 5 + 5.75 + 5.75 + 6.5 + 7.25 + 6.5 + 6.25 + 5.25 + 4.5 + 3.25 + 3.5 + 4 + 4.75 + 5.5 + 5.75 + 6 + 5.75 + 5 + 4.75 + 4.25 + 4.25 + 4 + 4.5 + 3.75 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.75 + 5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6.5 + 6.75 + 7.25 + 7.5 + 8.5 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.75 + 8.25 + 8 + 7.25 + 7 + 6 + 5.5 + 4.75 + 4 + 1.5 + 1.75 + 2.25 + 2.5 + 2.75 + 3.25 + 3.5 + 4 + 4.5 + 4.5 + 4 + 3.5 + 3.75 + 3.5 + 3.5 + 3.25 + 3 + 2.75 + 1.75 + 1.5 + 1.5 + 1.5 + 1.25 + 1 + 0.75 + 0.75 + 0.5 + 0.75 + 1 + 1 + 0.75 + 0.25 + -2.25 + -3.75 + -4 + 8 + 8.5 + 8.75 + 9.25 + 9.5 + 9.75 + 10 + 10.25 + 11 + 11.75 + 12 + 12.25 + 12.75 + 13.5 + 13.5 + 13.75 + 14 + 15 + 15.5 + 15.5 + 15.25 + 14.75 + 13.75 + 12.25 + 11.5 + 10.75 + 9.25 + 8.75 + 8.25 + 7.75 + 7.75 + 7.5 + 7.25 + 7 + 7 + 7 + 7 + 7 + 7.25 + 7.25 + 7.75 + 8 + 8.75 + 11 + 11.5 + 12 + 11.75 + 10.75 + 7.75 + 5 + 5 + 4.75 + 4.5 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 5.5 + 6.25 + 6.5 + 7 + 7 + 7 + 7 + 8.5 + 8.75 + 9.5 + 11.5 + 13.5 + 13.75 + 15.25 + 20.25 + 15.75 + 14.5 + 13.5 + 13.25 + 14 + 9.25 + 7.75 + 5.25 + 4.75 + 4.5 + 4 + 4 + 3.75 + 4 + 3.5 + 3.5 + 3.25 + 3.25 + 3.75 + 4 + 4.5 + 4.75 + 5 + 5.25 + 4.75 + 4.75 + 4.75 + 5 + 5.25 + 5.75 + 6.25 + 6.75 + 7 + 6.25 + 5.75 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3.25 + 3 + 2.75 + 2.75 + 2.5 + 2 + 2.25 + 2.75 + 3.25 + 3.75 + 4 + 4.25 + 4.5 + 4.5 + 4.5 + 4.5 + 6 + 7.5 + 7.25 + 7 + 7 + 7.5 + 8 + 8 + 8.25 + 7.5 + 7 + 6.75 + 6.75 + 6.5 + 6.5 + 6.25 + 5.75 + 5.75 + 5.75 + 5 + 5 + 5 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4 + 4 + 5.5 + 6.25 + 6.5 + 6.75 + 8.5 + 9.25 + 11 + 13 + 14 + 15 + 16 + 14.5 + 12.5 + 10.5 + 6.5 + 2.75 + 6.25 + 11.5 + 11.25 + 17 + 19.25 + 19.25 + 18.75 + 14.5 + 13 + 15.25 + 19 + 13 + 11.5 + 11.75 + 9.5 + 9.25 + 9.25 + 9 + 8.5 + 8.5 + 8.75 + 12.25 + 16.75 + 17.75 + 18 + 18 + 15.25 + 14 + 13.75 + 14.25 + 14.25 + 14.5 + 14.5 + 14.75 + 15.5 + 16.5 + 17 + 17 + 17.25 + 17.25 + 17.25 + 15.25 + 15 + 13.5 + 12.75 + 11.75 + 11.25 + 10.75 + 7.25 + 7.5 + 7.75 + 8 + 8.5 + 8.75 + 8.75 + 8.25 + 5.75 + 5.25 + 5 + 4.5 + 4 + 4.25 + 5 + 5.25 + 6.5 + 7 + 6.25 + 6 + 5.75 + 5.75 + 6 + 6.25 + 6.75 + 3.75 + 2.5 + 3 + 3.75 + 4.25 + 4.75 + 3.5 + 4.25 + 4.5 + 4.25 + 4.25 + 4.5 + 4.75 + 5 + 5 + 5 + 5.25 + 6.5 + 8 + 10.5 + 13 + 14 + 15 + 16 + 19.75 + 20.25 + 20.75 + 21 + 21 + 20.75 + 20.25 + 20 + 19.5 + 19 + 15.75 + 15.5 + 15.25 + 15.25 + 15 + 15 + 14.75 + 14.75 + 14.5 + 14.75 + 14.75 + 13.75 + 12.75 + 12.25 + 11.25 + 11.25 + 11 + 11 + 10.75 + 10.75 + 10.75 + 10.75 + 11.25 + 11.5 + 11.75 + 12.25 + 12.5 + 13 + 14.25 + 16 + 16.25 + 16.25 + 16.5 + 16.75 + 17 + 17 + 17 + 17 + 17.5 + 17.25 + 17 + 16.75 + 16.5 + 16 + 15.5 + 13.5 + 13 + 12.5 + 11.75 + 10.75 + 10.25 + 9.25 + 8.5 + 8.25 + 8 + 8.25 + 8.25 + 8.5 + 8.75 + 8.5 + 8.25 + 8.25 + 7.5 + 7.5 + 7.25 + 7.25 + 7 + 6.5 + 6 + 6 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 7.75 + 7.75 + 7.75 + 7.5 + 6.5 + 6 + 6 + 6 + 6.25 + 6.75 + 6 + 5.25 + 5.25 + 5.25 + 5 + 5 + 5 + 4.5 + 4.25 + 4.75 + 5 + 5.25 + 6 + 6.25 + 6 + 6.25 + 6.5 + 7.25 + 7.25 + 9.5 + 9.75 + 8.5 + 6 + 5.75 + 5.75 + 5.5 + 5.25 + 5 + 4.75 + 4.75 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 6 + 6 + 6.25 + 6.25 + 6.5 + 7.25 + 8 + 9.5 + 11 + 12.75 + 13.75 + 14.25 + 16.75 + 17 + 17.25 + 17 + 13.25 + 12.5 + 11.5 + 7.25 + 7 + 6.25 + 6.25 + 6 + 5.75 + 6 + 6.5 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 8.25 + 8.25 + 8.5 + 9 + 8.5 + 8.25 + 7 + 7 + 6 + 6.75 + 7.25 + 7.25 + 7.25 + 7.5 + 7.5 + 7.25 + 7 + 6 + 6 + 6 + 5.75 + 5.5 + 5.5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4.5 + 4.5 + 5.5 + 6.25 + 6.75 + 7.25 + 8.25 + 9 + 9.75 + 9.75 + 8.5 + 7.75 + 7.75 + 7 + 7 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 6.75 + 7.25 + 7.25 + 7.25 + 7.5 + 8.25 + 8.5 + 8 + 8 + 7.75 + 7.75 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 6.25 + 6 + 6 + 5.75 + 5.75 + 5.75 + 6.5 + 6.25 + 6 + 6 + 6 + 5.75 + 6 + 6.5 + 8.75 + 9 + 10 + 10.75 + 11.5 + 11.5 + 11 + 8 + 6.25 + 6 + 6 + 6 + 6 + 5.75 + 5.5 + 5 + 3.75 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3.25 + 3.25 + 3.5 + 3.75 + 3.5 + 3.25 + 3.25 + 3 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 3.25 + 3.75 + 4 + 4 + 4 + 4 + 4.25 + 4.25 + 4.25 + 4.75 + 5 + 5 + 5 + 4.75 + 4.25 + 3.5 + 3.5 + 3.25 + 2.75 + 2.5 + 2.5 + 2.5 + 3.5 + 4 + 4.25 + 4.5 + 4.75 + 5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6.25 + 6.25 + 6.75 + 6.75 + 6.75 + 6.5 + 6.25 + 6 + 5.75 + 6 + 5.75 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.25 + 5.5 + 5 + 5 + 5 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 6.5 + 6.75 + 6.75 + 6.75 + 6.25 + 6.25 + 6.25 + 6.25 + 5.75 + 5.5 + 4.75 + 4.75 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.75 + 5.25 + 7 + 7 + 6.75 + 6.75 + 6.25 + 6.25 + 6 + 5.25 + 5 + 5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 6 + 6 + 6.25 + 6.25 + 6.75 + 7.5 + 8 + 8.25 + 8.75 + 8.75 + 8.5 + 8.25 + 8.25 + 8 + 8 + 8 + 8.25 + 8.25 + 8 + 8 + 7.75 + 7.5 + 7 + 6.75 + 6.25 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 6 + 6.25 + 6.75 + 7.5 + 8.5 + 9 + 9.5 + 9.75 + 10 + 11.75 + 14.25 + 15 + 15.5 + 10 + 10 + 10 + 9.75 + 10.75 + 10.25 + 9.5 + 9.25 + 9.25 + 6.75 + 6.75 + 6.75 + 6.5 + 6.5 + 7.5 + 7.75 + 8 + 8.25 + 7.75 + 7 + 7 + 7 + 7.25 + 7.5 + 7.75 + 7.75 + 7.5 + 5.25 + 4.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 6.5 + 4.25 + 4 + 4.25 + 4.25 + 4.25 + 6 + 7.5 + 5.5 + 4.25 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 4 + 4.25 + 4.5 + 4.75 + 4.5 + 4.25 + 4.25 + 4.75 + 5 + 5.25 + 5.25 + 5 + 4.75 + 4.75 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.25 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 5 + 5 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 4.5 + 3.75 + 3.75 + 3.75 + 3.75 + 3.75 + 4 + 4 + 4 + 3.75 + 3.75 + 3.5 + 3.25 + 3.25 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3.25 + 4 + 4 + 4 + 4.25 + 4.5 + 4.75 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.5 + 4.5 + 4.5 + 5 + 5 + 4 + 3.75 + 3.5 + 3.5 + 3.5 + 3.75 + 3.75 + 4 + 4 + 4.25 + 5 + 5.75 + 5.75 + 5.75 + 5.5 + 5 + 4.75 + 4.75 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.25 + 4.25 + 4.25 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.75 + 4.75 + 4.75 + 4.25 + 4.25 + 3.5 + 3.25 + 3 + 3.5 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.75 + 5 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4 + 4.25 + 4.25 + 4.5 + 4.75 + 5.25 + 5.5 + 5.75 + 5.75 + 6.25 + 6.25 + 6.25 + 6.75 + 7 + 8 + 9.5 + 9.25 + 9.5 + 9.5 + 9.75 + 9.75 + 9.75 + 10 + 9.75 + 10 + 11 + 12 + 12 + 12.25 + 12.25 + 12.25 + 12.75 + 12.75 + 13 + 12.75 + 12.75 + 11.75 + 11 + 10.75 + 10.5 + 10.5 + 10.25 + 10.25 + 10.75 + 10.75 + 10.75 + 11 + 10.5 + 10.75 + 11 + 11 + 11.25 + 11.25 + 11.25 + 11.25 + 11 + 10.25 + 10 + 10 + 10 + 10.25 + 10.5 + 10.5 + 10.5 + 10.25 + 10.25 + 10.25 + 10.25 + 10.25 + 10.75 + 11 + 11.75 + 12 + 12.25 + 12.25 + 12.5 + 12.5 + 12.25 + 11.5 + 11.5 + 11.5 + 15 + 16.5 + 19 + 20 + 18.75 + 17.5 + 11.5 + 10 + 10.5 + 11 + 11 + 11 + 11 + 10.5 + 10.25 + 12 + 12.75 + 12.75 + 12.75 + 12.75 + 12.25 + 14.75 + 14.75 + 15 + 15.25 + 16.25 + 16.5 + 16.75 + 17 + 17 + 17.5 + 17.5 + 17 + 16.25 + 15 + 14.75 + 14.5 + 14 + 14 + 14 + 13.75 + 13.5 + 14 + 14.25 + 14.5 + 14.5 + 18 + 19 + 19 + 16.75 + 16.5 + 16.25 + 16.5 + 16.75 + 18 + 18.5 + 19 + 19.5 + 19.25 + 18.5 + 19 + 19.25 + 19.25 + 19.75 + 19.75 + 20.25 + 20.5 + 20.5 + 20.5 + 20.75 + 21.5 + 23.5 + 24.5 + 25.25 + 26 + 26.25 + 27.25 + 28.25 + 30.5 + 31.25 + 32.5 + 32.75 + 33 + 33.25 + 33.5 + 33.75 + 33.75 + 32.75 + 32 + 31.75 + 31.25 + 30.25 + 28.25 + 27.25 + 26 + 26 + 26 + 26 + 26 + 26.25 + 27.25 + 27.75 + 27.75 + 24.75 + 22.5 + 23.75 + 23.75 + 23.75 + 23 + 23.25 + 23.5 + 23.5 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.5 + 23.75 + 23.75 + 23.75 + 24 + 22.75 + 22.5 + 24 + 22 + 22.5 + 22.5 + 22.5 + 22.5 + 22.5 + 22.5 + 23.75 + 24.25 + 25 + 26.25 + 26 + 27.75 + 27.5 + 27.25 + 27 + 26.75 + 26.75 + 27.25 + 27.75 + 27.75 + 27.5 + 27 + 27.25 + 27 + 28 + 28.5 + 29 + 29.5 + 31.5 + 32.5 + 31.5 + 31.5 + 29.25 + 28.5 + 27.25 + 25 + 22.5 + 18.75 + 16.5 + 15.75 + 18 + 18.5 + 16.75 + 15.5 + 15.25 + 14.25 + 14 + 14 + 14 + 13.75 + 13.75 + 13.25 + 13 + 13.5 + 16.5 + 17.5 + 17 + 16.75 + 16.25 + 15.75 + 15.75 + 15.75 + 15.75 + 16 + 16.5 + 16.75 + 17.5 + 17.5 + 17.75 + 18 + 18.75 + 19.5 + 20 + 20.75 + 21.25 + 21.75 + 22 + 21.5 + 20.25 + 17.75 + 14.5 + 13 + 13.5 + 16 + 16.75 + 20.25 + 20.25 + 20 + 20.25 + 20 + 20 + 20 + 19.75 + 19 + 21.5 + 22 + 21 + 20.5 + 20.25 + 20.25 + 20.25 + 20 + 19.75 + 19.75 + 19.5 + 21.75 + 21 + 20 + 21.5 + 19 + 15.75 + 16.5 + 17.5 + 15.75 + 14.75 + 14.5 + 14 + 13.75 + 13.25 + 12.5 + 12.25 + 12 + 12.25 + 12.5 + 13 + 13.5 + 13.75 + 14 + 13 + 12.5 + 12.5 + 12.75 + 14.75 + 16 + 16.25 + 16.75 + 17.75 + 18.25 + 18.25 + 19 + 21.25 + 22.75 + 23.25 + 23 + 22.5 + 22.5 + 24.75 + 25.75 + 23 + 22.75 + 19.5 + 19.25 + 19 + 19 + 19 + 18.5 + 18.5 + 18 + 18 + 17.75 + 17.75 + 17 + 17.5 + 17.75 + 16.5 + 16 + 15.25 + 16.5 + 17 + 17.75 + 18 + 16.75 + 16.5 + 18.25 + 18 + 18 + 18 + 18 + 17 + 16 + 16 + 15.5 + 15 + 14.75 + 14.75 + 14.75 + 16 + 20.25 + 21.25 + 21.75 + 21.75 + 21.5 + 20 + 18.5 + 14 + 14.25 + 14.25 + 14.5 + 14.5 + 14.25 + 13.5 + 12.75 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.75 + 12.5 + 12.5 + 12.25 + 12.25 + 12 + 12 + 12 + 12 + 12.25 + 12.25 + 13.25 + 13.75 + 14 + 14.25 + 15 + 15.5 + 18.25 + 20 + 20.75 + 21.75 + 22.75 + 23 + 22.75 + 22.5 + 22.25 + 21.75 + 20.5 + 18.5 + 17.5 + 16.25 + 15.25 + 14.25 + 14.25 + 14.5 + 15 + 15 + 15.25 + 15.5 + 15.25 + 14.75 + 14.75 + 13.75 + 13.5 + 13.75 + 13.75 + 13.75 + 14 + 17 + 18.5 + 18.75 + 17.75 + 18 + 18.5 + 17.75 + 15.25 + 14.25 + 14 + 13.25 + 13 + 12.75 + 12.75 + 12.5 + 12.5 + 12.75 + 11.5 + 16.25 + 16.25 + 16.25 + 15.5 + 14.75 + 13.75 + 12 + 11.5 + 11.25 + 11.25 + 11 + 10.5 + 10.5 + 10.5 + 10.25 + 10 + 10 + 9.75 + 10.25 + 10.25 + 10.5 + 10.25 + 10 + 9 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.25 + 8 + 5.5 + 5.5 + 5.5 + 5.25 + 5.25 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 5.25 + 5.5 + 5.25 + 4 + 4 + 3.75 + 3.5 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3 + 3.5 + 3.5 + 3.5 + 3.75 + 3.75 + 4.25 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.75 + 4.75 + 5.25 + 5.25 + 5.5 + 5.25 + 5.25 + 4.75 + 4.75 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.5 + 4.75 + 5 + 5 + 5 + 6.25 + 6.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.5 + 5 + 5 + 5 + 5 + 5 + 5 + 4.5 + 5.75 + 5.5 + 5.25 + 5.5 + 5.75 + 5.75 + 5.75 + 5 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.75 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.5 + 4.5 + 6 + 7.5 + 8 + 7.5 + 7.5 + 7.25 + 4.75 + 4.25 + 4.25 + 4.25 + 4 + 4 + 4 + 4.25 + 4.5 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 5 + 6.75 + 6.75 + 6.5 + 6.5 + 6.25 + 6 + 5.75 + 5.75 + 5.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3.75 + 3.5 + 3.5 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3 + 3 + 3 + 3 + 3.25 + 3.25 + 3.5 + 3.5 + 3.75 + 3.25 + 3 + 3.25 + 3 + 3 + 3 + 3.25 + 3.25 + 3.5 + 4 + 4 + 6.25 + 11 + 12 + 13 + 13.5 + 13 + 13 + 12.75 + 12.5 + 12.5 + 12.5 + 12.25 + 12.25 + 12.5 + 13 + 13.5 + 13.75 + 14 + 14.25 + 14.5 + 15.75 + 17.75 + 18 + 18.25 + 19 + 20.25 + 21 + 21.25 + 21.25 + 21 + 20.75 + 20.5 + 20.5 + 20.25 + 20.5 + 21.25 + 22.75 + 23.75 + 24.25 + 24.5 + 24.75 + 25.25 + 25.5 + 25.5 + 25.75 + 26 + 26.25 + 26 + 26.25 + 26.5 + 27.25 + 28.75 + 30.5 + 32.75 + 33 + 33.25 + 33.25 + 33.25 + 33 + 33.25 + 31.5 + 30.5 + 30.5 + 30.25 + 30 + 28.25 + 23 + 22.75 + 22.5 + 19.5 + 16 + 15.25 + 14.5 + 13.5 + 12.5 + 9.75 + 8.5 + 7.25 + 5.75 + 5.75 + 5.75 + 6 + 5.75 + 5.25 + 5.25 + 4.25 + 3.75 + 3.5 + 3.25 + 3.25 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3.25 + 4.5 + 5.25 + 5.5 + 5.75 + 5.75 + 5.5 + 5.5 + 5.25 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4.75 + 4.75 + 5.5 + 9.5 + 10.25 + 10.25 + 10.5 + 10.75 + 10.5 + 10.75 + 11 + 11 + 10.5 + 10.25 + 11.25 + 10.75 + 10.75 + 11 + 11 + 10.75 + 11 + 11.5 + 11.75 + 11.75 + 12 + 12.25 + 12.5 + 14.25 + 14.25 + 14.75 + 15.25 + 13.75 + 12.5 + 11 + 10.5 + 10.25 + 10 + 9.25 + 8.25 + 8 + 8.5 + 9.25 + 10 + 10.5 + 11.25 + 9.5 + 11.5 + 12 + 8.75 + 8 + 8 + 7.75 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 7 + 6.75 + 5.5 + 4 + 4 + 4 + 3 + 4 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5.25 + 6 + 6.5 + 7 + 7.25 + 7.75 + 7.75 + 7.75 + 7.5 + 7.25 + 7.25 + 7.25 + 7 + 7 + 6.75 + 6.75 + 6.75 + 6.75 + 6.5 + 6.5 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6.75 + 7.75 + 9 + 10 + 11 + 12.25 + 13.75 + 16 + 18.25 + 19.75 + 20.75 + 21.75 + 22 + 22 + 22 + 25 + 25.75 + 26.25 + 26.5 + 27.25 + 28.5 + 29 + 29 + 28.75 + 28.25 + 27.25 + 26.75 + 26.5 + 26.75 + 27 + 27.25 + 28 + 28.75 + 29.75 + 30 + 29.75 + 28.5 + 27.25 + 26.5 + 25.25 + 24.25 + 23.5 + 22.5 + 21.75 + 21.75 + 21 + 20.75 + 20 + 19.75 + 19.75 + 20.25 + 20 + 20 + 19.5 + 20.75 + 20.25 + 18.25 + 12.75 + 11.5 + 10.5 + 8.75 + 8.75 + 8.25 + 4 + 4.25 + 4.5 + 4.75 + 4.5 + 3.75 + 4.75 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6 + 4.5 + 4 + 2.25 + 2.5 + 2.5 + 2.75 + 2 + 2 + 2 + 1 + 1 + 1 + 1.25 + 1.75 + 1.75 + 1.75 + 1.75 + 1.25 + 1 + 1.25 + 1 + 1 + 1.75 + 1.25 + 1 + 2 + 2 + 1.25 + 1.75 + 2 + 2.25 + 2.25 + 1.75 + 1.25 + 0.25 + 1.75 + 2.25 + 3 + 4.25 + 5.25 + 5.75 + 6.25 + 6.75 + 7 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 4.75 + 5.5 + 5 + 5 + 4.25 + 3.5 + 3.5 + 3 + 2.75 + 2.25 + 2 + 4.25 + 4.25 + 4.25 + 4.5 + 5 + 6.5 + 7.75 + 9.5 + 10.25 + 10.5 + 9.75 + 9.25 + 6.25 + 5.5 + 4.75 + 4 + 3 + 3.25 + 4 + 4 + 4.25 + 4.25 + 4 + 4 + 4 + 4.25 + 4.25 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.25 + 4.5 + 4.75 + 5.5 + 5.5 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5.25 + 5 + 5.25 + 5.25 + 5.25 + 5 + 4.75 + 4.75 + 5 + 5.5 + 5.75 + 4.75 + 4.75 + 4.5 + 4.25 + 4.5 + 4.5 + 4.75 + 5 + 5.25 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 5.75 + 6 + 6.75 + 8 + 7.75 + 8 + 8 + 8 + 7.75 + 8 + 8 + 7.75 + 6 + 6 + 6 + 8.5 + 8.75 + 9 + 10.75 + 12.25 + 14.25 + 14 + 15.5 + 15.25 + 13.75 + 13.75 + 15.5 + 14 + 14.5 + 14.75 + 14.75 + 14.5 + 14.5 + 14.25 + 13.5 + 12.5 + 11 + 10 + 8.75 + 7 + 5.5 + 3.75 + 3.25 + 3.5 + 3.5 + 6.25 + 6.25 + 6.25 + 6.5 + 6.5 + 6.75 + 8.75 + 9 + 8.5 + 6.5 + 6.75 + 6.25 + 5.5 + 4 + 3.25 + 3 + 3 + 3 + 2 + 1.5 + 2 + 2.5 + 3.25 + 3.25 + 3 + 3.5 + 4 + 4.75 + 5 + 5.5 + 6 + 6 + 6 + 6 + 6 + 6.25 + 6.5 + 6.75 + 6.75 + 7 + 7.25 + 7.5 + 7.5 + 7.75 + 7.75 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 8 + 8 + 8.25 + 8.75 + 9.5 + 10 + 10.25 + 10.5 + 10.75 + 12 + 13.75 + 14.5 + 15.25 + 15.5 + 16 + 15.5 + 14 + 13.75 + 13.75 + 13.5 + 14 + 14 + 14 + 14.25 + 14.25 + 14.25 + 14.25 + 14.5 + 14.5 + 14.75 + 14.5 + 14.25 + 14.25 + 14.5 + 14.5 + 14.25 + 14.25 + 14 + 13 + 11.5 + 8.75 + 8.25 + 8 + 7.75 + 7.5 + 7 + 6.75 + 6.75 + 7 + 7.25 + 7.25 + 8.25 + 10.5 + 13.25 + 13.75 + 14.5 + 16.25 + 18.25 + 19.25 + 20.25 + 23.5 + 32.25 + 34 + 34 + 35 + 35.75 + 35.75 + 36.5 + 36.25 + 35.5 + 35.5 + 34.5 + 32.75 + 26 + 24 + 22.5 + 19.75 + 17 + 15.5 + 14 + 13 + 13.5 + 14.5 + 14.5 + 14.25 + 13.5 + 12.75 + 12.75 + 12.5 + 9.5 + 8.5 + 8 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7.75 + 8.25 + 8 + 8 + 7.75 + 7.25 + 7.5 + 8.25 + 9 + 9.25 + 9.5 + 12 + 12.75 + 12.75 + 12.75 + 12.75 + 12.5 + 12.5 + 12.25 + 12 + 12.5 + 13 + 13.5 + 13.5 + 13.25 + 13.25 + 13 + 12 + 11.75 + 12.5 + 12.75 + 12.5 + 12.5 + 12 + 11.5 + 10.5 + 10.25 + 10.5 + 10.75 + 12.75 + 13 + 13.25 + 15.75 + 16 + 16 + 16.25 + 16.5 + 16.5 + 16.5 + 16.5 + 16.5 + 16.75 + 16.75 + 17 + 16.75 + 16 + 16 + 16.25 + 16.75 + 17 + 17.75 + 18.25 + 18.5 + 20.5 + 20 + 19.25 + 19 + 18.75 + 19 + 18.25 + 18 + 18 + 17.75 + 17.5 + 17.5 + 17.5 + 17.25 + 17 + 16.75 + 16.5 + 15.75 + 15.25 + 14 + 13.25 + 11.25 + 10.75 + 10.5 + 10.25 + 9.75 + 8.75 + 8.5 + 8.5 + 8.75 + 8.25 + 7.5 + 7.25 + 6.75 + 6.75 + 7 + 6.75 + 6.25 + 6.25 + 6 + 6.25 + 7 + 7.25 + 8.25 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 8.75 + 8.75 + 8.75 + 6 + 6.25 + 6.5 + 7.25 + 7.75 + 8 + 8 + 8 + 7.5 + 7.25 + 7 + 7.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 8 + 7.75 + 7 + 6.75 + 6.75 + 7.25 + 7.5 + 7.75 + 7.75 + 8 + 8.25 + 8.5 + 8.5 + 9.25 + 9.5 + 9.75 + 10 + 11 + 11.5 + 12.25 + 13 + 13.5 + 14.5 + 16 + 16.5 + 16.25 + 15.5 + 14.75 + 14.25 + 13.75 + 13 + 12.5 + 11.5 + 10.5 + 9.25 + 9 + 9.5 + 9 + 7.75 + 7.5 + 7.25 + 7.25 + 8.75 + 7.5 + 6.5 + 5.25 + 5 + 5.5 + 5.5 + 4.75 + 4.5 + 4 + 3.25 + 3.25 + 3 + 3 + 2.75 + 2.75 + 2.75 + 2 + 2 + 2.25 + 2.25 + 2.5 + 3 + 2.25 + 2 + 2 + 1.25 + 1.75 + 1.75 + 1.5 + 2 + 2.5 + 2 + 2 + 2 + 2.5 + 2.25 + 2.5 + 3 + 3 + 2.5 + 2.75 + 3.25 + 3.25 + 3.5 + 2.75 + 2 + 2 + 2 + 2.25 + 1.5 + 1.5 + 1.5 + 1.5 + 1.5 + 2 + 2 + 2 + 2 + 2.25 + 2.25 + 2.25 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.5 + 2.25 + 2.25 + 2 + 1.75 + 1.75 + 1.75 + 2 + 2 + 2 + 2 + 2.25 + 2.25 + 3 + 3.75 + 4.25 + 5.25 + 5.5 + 5.5 + 6.25 + 7.25 + 7.75 + 7.5 + 7.75 + 8.25 + 8.25 + 8.5 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8 + 8 + 8.5 + 8.75 + 8.75 + 9 + 8.25 + 8 + 8 + 8 + 8 + 8.25 + 8.75 + 9 + 9 + 9 + 9 + 9 + 9.25 + 10 + 10.25 + 10.25 + 10.5 + 10.75 + 10.75 + 10.75 + 12.5 + 13.25 + 13.75 + 14.5 + 15.75 + 16.5 + 17 + 17.5 + 18.25 + 18.75 + 19.25 + 19.75 + 20.25 + 20.5 + 20.75 + 20.75 + 21 + 21 + 21 + 21 + 20.75 + 20.5 + 20.25 + 19.5 + 19.25 + 18 + 17.75 + 17.75 + 17.75 + 18.25 + 18.5 + 19 + 19 + 19 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19.25 + 19 + 19 + 19 + 19 + 19.25 + 20.25 + 21.5 + 21.75 + 22.5 + 22.75 + 22.5 + 22 + 21 + 20 + 20 + 19.5 + 19.25 + 17.25 + 16.75 + 16.25 + 15.5 + 15 + 14.75 + 15 + 14.5 + 14.25 + 13.75 + 11.75 + 11 + 10.5 + 10 + 9.5 + 8.5 + 7.5 + 6.5 + 5.25 + 5 + 4.75 + 4.5 + 4.5 + 4.25 + 4.25 + 4 + 4.25 + 4.75 + 5.25 + 5.75 + 5.75 + 5.25 + 5.25 + 5 + 5 + 5 + 7 + 7.75 + 8.25 + 8.75 + 9.25 + 9.75 + 10.5 + 10.75 + 11 + 11.25 + 11.25 + 12.75 + 14.25 + 15.25 + 15.5 + 16.25 + 16 + 15 + 15 + 14.5 + 14.25 + 12.75 + 10 + 10 + 10 + 10 + 9.75 + 9.75 + 9.75 + 9.25 + 9.25 + 9.25 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.5 + 9.75 + 9.5 + 9.25 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 8 + 7.75 + 7.5 + 7.25 + 5 + 4.5 + 3.75 + 3.5 + 3.5 + 3.25 + 3.25 + 3.25 + 3.25 + 3.5 + 3.5 + 2.75 + 3.5 + 4.5 + 8.25 + 9 + 9.25 + 12.25 + 13 + 13.25 + 14.25 + 15 + 15.5 + 15 + 15.25 + 15.75 + 15.75 + 15.75 + 15.75 + 15.5 + 15.25 + 13.75 + 13.25 + 12.5 + 12 + 11.75 + 11.75 + 11.75 + 11.75 + 11.5 + 11 + 10.75 + 10.75 + 10.75 + 11 + 11.25 + 11.25 + 11.5 + 11.75 + 11.25 + 11 + 10.25 + 10 + 9.75 + 11 + 11 + 11 + 10.25 + 10 + 9.75 + 8.75 + 7.75 + 7.5 + 7 + 7 + 7 + 7.5 + 7.5 + 7.75 + 7.75 + 7.5 + 7 + 6.25 + 5.5 + 5 + 4.75 + 4.75 + 4.5 + 3.25 + 3.5 + 3.25 + 2.75 + 3 + 3 + 2.75 + 2.25 + 2 + 2 + 2 + 1.75 + 2.25 + 2.5 + 1.25 + 1 + 1 + 1.25 + 1.75 + 1.75 + 1.75 + 1.5 + 1.25 + 1.25 + 1 + 1 + 1 + 1.5 + 2 + 1.5 + 1.75 + 1.75 + 1.75 + 1.75 + 1.75 + 1.5 + 1.5 + 1.5 + 1.25 + 1.5 + 1.75 + 1.75 + 2.25 + 2.75 + 3.25 + 3.5 + 4 + 4.25 + 5.75 + 6.5 + 7 + 6.75 + 6.75 + 7.25 + 7.25 + 7 + 7 + 7 + 7 + 7 + 7 + 6.75 + 7 + 7 + 7 + 7 + 6.75 + 6.75 + 6.5 + 6.25 + 6 + 5.75 + 5.5 + 5.5 + 5.5 + 5.25 + 5 + 5 + 4.75 + 4.5 + 4.25 + 4.25 + 4 + 3.25 + 3 + 2.75 + 2.75 + 2.5 + 2.25 + 2 + 2 + 2 + 1.75 + 1.75 + 1.75 + 1.75 + 1.5 + 1.25 + 1.25 + 1.25 + 1.25 + 1 + 1 + 1.75 + 1.75 + 1.5 + 1.5 + 1.5 + 1.75 + 1.75 + 2 + 2.25 + 2.25 + 2.25 + 2.5 + 2.5 + 2.75 + 3 + 3 + 3 + 3.25 + 3 + 3 + 3 + 3.5 + 4.25 + 4.5 + 4.5 + 5 + 5.25 + 5.25 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.5 + 5.75 + 5.75 + 5.75 + 5.75 + 5.5 + 5 + 6.25 + 6.75 + 7 + 7.25 + 7.5 + 8 + 8 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 9 + 9.25 + 10 + 10 + 10.5 + 11.25 + 12.75 + 12.75 + 13 + 13.25 + 13.25 + 13.25 + 13.5 + 13.5 + 13.75 + 13.75 + 13.75 + 14 + 14.25 + 14.5 + 14.25 + 13.5 + 13.75 + 15 + 15.25 + 16.25 + 16.25 + 16.5 + 16.5 + 16.5 + 16.5 + 16.75 + 17 + 16.75 + 16.75 + 16.75 + 16.75 + 17 + 16.25 + 16 + 16.25 + 16.5 + 15.75 + 15 + 15 + 15.5 + 15.75 + 16 + 15.75 + 16 + 15.5 + 14.25 + 14.25 + 13.5 + 14.25 + 14 + 14 + 14 + 14.25 + 15 + 14.5 + 13.25 + 13.5 + 13 + 13 + 13 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 14.75 + 14.5 + 14.25 + 14.25 + 16 + 16.75 + 18.25 + 18.5 + 18.75 + 19.25 + 19.25 + 19.5 + 20 + 21 + 21.25 + 21.5 + 21.25 + 21.25 + 21.25 + 21.25 + 22 + 22.5 + 26.25 + 27.5 + 28.25 + 29.5 + 29.25 + 28.75 + 28.25 + 27.5 + 27.75 + 28.25 + 28.5 + 28.75 + 29 + 29 + 28.5 + 27.75 + 27.25 + 27.75 + 28 + 27.75 + 27.25 + 27.25 + 27 + 27 + 26.5 + 26 + 25.75 + 25 + 24.5 + 24.25 + 24 + 24 + 24 + 24.5 + 24.5 + 24.5 + 23.75 + 23.25 + 22.5 + 21.5 + 19.25 + 18.25 + 17 + 16 + 14.25 + 13 + 12.75 + 12.25 + 11.75 + 11.25 + 11.25 + 11 + 11 + 11 + 11 + 11 + 11 + 10.5 + 10.5 + 10.25 + 10 + 10 + 10 + 10.25 + 10.5 + 10.75 + 11 + 11.5 + 11.5 + 11.75 + 11.75 + 11.75 + 12 + 12.25 + 12.5 + 12.75 + 12.75 + 12.5 + 12.5 + 12.75 + 13 + 13.75 + 14.25 + 21 + 21.75 + 23.5 + 24.5 + 25 + 25 + 25.5 + 26.25 + 26.25 + 26.25 + 25.5 + 26.75 + 27.25 + 27.75 + 26.5 + 26 + 26.25 + 26.5 + 27 + 27.75 + 29 + 29 + 29 + 29 + 29.5 + 30 + 30.5 + 31.75 + 33.75 + 33.25 + 32 + 32 + 32 + 32.25 + 32.5 + 33.5 + 34.25 + 34.5 + 33 + 32.25 + 32.25 + 32 + 30.25 + 27.75 + 30.25 + 32.25 + 32.25 + 31 + 30.5 + 30 + 29.5 + 29.25 + 29.25 + 29.75 + 30.25 + 30.25 + 30.25 + 30.25 + 30.25 + 30.25 + 30 + 30 + 30 + 29.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.75 + 28.5 + 28.5 + 28.25 + 28 + 28 + 28 + 28 + 28.75 + 28.75 + 29 + 29 + 29.5 + 28.75 + 28 + 28.75 + 29.25 + 29.75 + 29.75 + 29.5 + 29 + 29.25 + 30 + 30.5 + 31.25 + 30.75 + 29 + 28.25 + 27 + 26 + 26 + 26 + 25.75 + 25.75 + 28.75 + 32.25 + 31.5 + 30.25 + 29.75 + 29.75 + 30 + 31 + 36.25 + 31.5 + 26.25 + 25.5 + 25 + 22.25 + 19.75 + 18.5 + 17 + 15.75 + 15.25 + 14 + 13.5 + 14.75 + 14.25 + 14 + 13.5 + 13.75 + 14.25 + 14.5 + 15.25 + 15.5 + 16 + 16 + 16.25 + 17.25 + 16.5 + 16.5 + 15.75 + 14.75 + 14.75 + 14.5 + 14.25 + 14 + 13.75 + 13.25 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13 + 13.25 + 13.75 + 13.25 + 13.25 + 13.25 + 13.25 + 13.5 + 13.25 + 13.75 + 14 + 14.75 + 14.75 + 14.75 + 14.75 + 15 + 15 + 15 + 15.25 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.25 + 15 + 15 + 15.25 + 15.75 + 16 + 16.5 + 17.5 + 17.75 + 19.75 + 19 + 19 + 19.25 + 19.25 + 18.75 + 17.75 + 16.5 + 16.25 + 16 + 16 + 16.25 + 16.75 + 15.75 + 15.5 + 15.5 + 15.5 + 15.5 + 18.5 + 17.5 + 15.5 + 15 + 17.25 + 19.75 + 20.5 + 20.5 + 21 + 21.5 + 20.5 + 19.25 + 21.25 + 22.25 + 24.25 + 27.75 + 32 + 32 + 32.25 + 33 + 33.75 + 36.5 + 37.5 + 37.5 + 37.25 + 37.5 + 38.5 + 38.75 + 39 + 39 + 39.25 + 31.25 + 28.25 + 28 + 28.25 + 27.5 + 27.75 + 28.25 + 28.75 + 31 + 32.25 + 31.75 + 31.75 + 31.75 + 31.75 + 31.5 + 22 + 21.75 + 21.25 + 21.75 + 22.5 + 24 + 24.25 + 24.5 + 24.75 + 25 + 25.75 + 24.5 + 23.25 + 22.75 + 23 + 23.25 + 23.5 + 23.75 + 25.5 + 25.25 + 25 + 24.5 + 24.5 + 24.25 + 24.25 + 24 + 24 + 24 + 24 + 24 + 23.5 + 23.25 + 23.75 + 23.5 + 23.25 + 19.5 + 19 + 19 + 18.75 + 17.5 + 17.5 + 17.75 + 17.5 + 17.25 + 17 + 17.25 + 17.5 + 17.5 + 17.75 + 18 + 18.5 + 18 + 17.75 + 17.5 + 17.25 + 17 + 17 + 17 + 16.25 + 17.25 + 17.75 + 19.25 + 18.5 + 18 + 18 + 18 + 15.75 + 15.75 + 16 + 16 + 16 + 16 + 16.25 + 16.5 + 16.75 + 16.25 + 15.25 + 15.25 + 15.75 + 15.75 + 16 + 16 + 17.25 + 18.25 + 18.25 + 18.25 + 17.75 + 16.5 + 12.75 + 12.75 + 13.25 + 13.75 + 13.5 + 12.75 + 11.75 + 11.25 + 11 + 11 + 11.25 + 11.75 + 12 + 12 + 12.75 + 13 + 12.75 + 13.5 + 14 + 14.5 + 14.75 + 14.5 + 13.5 + 13.5 + 14.25 + 14.25 + 14.5 + 15 + 15.5 + 15.75 + 16.75 + 16.5 + 16.25 + 17 + 18 + 20 + 21.5 + 23 + 25 + 29.5 + 29.75 + 31.5 + 35.25 + 35.75 + 35.75 + 36 + 36 + 36.25 + 36.25 + 36.5 + 36.5 + 36.5 + 36.25 + 36.25 + 36.25 + 36.25 + 36.25 + 35.5 + 35 + 34.5 + 33.5 + 32.25 + 29.75 + 27.5 + 27.25 + 27 + 26.75 + 26.5 + 26.5 + 26.5 + 26.5 + 26.75 + 26.75 + 26.25 + 26 + 25.75 + 25.5 + 25 + 24.75 + 24.75 + 24 + 23.5 + 23.25 + 23.25 + 23.25 + 22.25 + 22 + 21.75 + 21.75 + 21.75 + 21.5 + 21.5 + 21.75 + 21.75 + 21.75 + 21.75 + 21.75 + 22 + 22 + 22.25 + 22.75 + 22.75 + 22.5 + 22.25 + 22.25 + 22.75 + 22.75 + 23 + 22.5 + 22.25 + 21.5 + 21 + 21 + 21.5 + 20.25 + 17 + 16.25 + 15 + 15 + 14.25 + 13.5 + 12.75 + 14 + 11 + 11.5 + 11.75 + 12.25 + 12.75 + 12.25 + 10.25 + 10 + 10.25 + 10.5 + 10.25 + 11.25 + 11.25 + 11.25 + 14 + 15.5 + 21.75 + 29 + 29.5 + 34 + 31.75 + 28.75 + 28 + 25.5 + 24.75 + 24.5 + 24.5 + 24.5 + 24.25 + 24.25 + 24.25 + 24.25 + 24.25 + 24.5 + 24.5 + 24.75 + 25 + 25 + 25.5 + 26.25 + 26.75 + 25.5 + 23.5 + 21.75 + 19.25 + 17.25 + 15.25 + 14.25 + 14.5 + 14.5 + 14.5 + 14.5 + 14.5 + 14 + 12.25 + 11.25 + 11.75 + 11.75 + 11.75 + 11.75 + 11.75 + 12 + 12 + 12 + 12.25 + 12 + 12.25 + 12 + 12.25 + 12.25 + 12.25 + 12 + 12 + 12 + 12 + 12 + 12.5 + 13.25 + 13.5 + 13.5 + 13.75 + 13.75 + 13.5 + 12.75 + 12.25 + 11.5 + 11.5 + 12 + 12 + 12 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16.25 + 16.25 + 16.25 + 16 + 16.25 + 16.25 + 16.25 + 16.25 + 15 + 14.5 + 13.75 + 14.5 + 14.5 + 12.75 + 12.5 + 12.75 + 13.25 + 14 + 14.75 + 13.5 + 13.5 + 14 + 15 + 15 + 14.5 + 14.25 + 14.75 + 13.5 + 12.25 + 11.75 + 11.25 + 10.75 + 10.5 + 10.5 + 11.75 + 11.5 + 11.75 + 11.75 + 12.5 + 13.25 + 14 + 15.5 + 16.25 + 16.25 + 15.75 + 15.5 + 14.5 + 14.25 + 15 + 19.5 + 18 + 17.25 + 17.5 + 18 + 19.75 + 16.75 + 11.25 + 11.25 + 11.75 + 10.5 + 10.5 + 11.75 + 12.5 + 12.25 + 12.75 + 14.5 + 16 + 14.75 + 14.25 + 14.75 + 15.25 + 15.25 + 15.25 + 15.5 + 17 + 18.25 + 19.5 + 20 + 19.75 + 26.25 + 26.25 + 26.5 + 27.75 + 29.75 + 31.75 + 31 + 28.5 + 28.25 + 28 + 27.25 + 27.25 + 27 + 25.5 + 24.25 + 24 + 24 + 24 + 22 + 21.5 + 21.75 + 22 + 22.25 + 24 + 24.25 + 26.75 + 27.5 + 26.25 + 24.75 + 26.5 + 25.25 + 24.75 + 23.75 + 21 + 20.5 + 20 + 19.5 + 19.5 + 19.5 + 19.75 + 21.25 + 22.75 + 21.75 + 18 + 18.75 + 19 + 19.25 + 20 + 19 + 18.75 + 18.75 + 19.75 + 20.75 + 20 + 19.5 + 19 + 18.75 + 19 + 19.75 + 20 + 20.5 + 20.75 + 20.5 + 20.75 + 20.75 + 21.5 + 22 + 23.75 + 24.25 + 25 + 25.25 + 26.25 + 26 + 25.75 + 25.5 + 25.75 + 26.5 + 26.25 + 25.75 + 25.75 + 25.75 + 26 + 26.25 + 26.5 + 27 + 27.75 + 28.25 + 28 + 28.25 + 28.5 + 28.25 + 28.25 + 28 + 27.5 + 27.25 + 27.25 + 26.75 + 26.25 + 25.5 + 24.75 + 23.25 + 22.5 + 22.25 + 22.25 + 22.25 + 22.25 + 22 + 22 + 21.75 + 21.75 + 21.75 + 21.75 + 21.75 + 21.75 + 21.25 + 17.75 + 17 + 17.75 + 17.25 + 17 + 17 + 17.25 + 18 + 18 + 21.25 + 21.5 + 21.5 + 21.5 + 22 + 22.25 + 22 + 21.5 + 21.75 + 21.75 + 21.75 + 23 + 23.25 + 24.25 + 25 + 25 + 25 + 26.25 + 27 + 27.25 + 28.25 + 28.75 + 29 + 29.25 + 29.25 + 29 + 28 + 26.5 + 25.5 + 23.75 + 23.75 + 23.75 + 22.75 + 22 + 22 + 22.75 + 23 + 26.25 + 28 + 30 + 33 + 33.25 + 32.75 + 32.5 + 32.25 + 31.75 + 31.25 + 30.25 + 32 + 23.25 + 21 + 21.5 + 23.75 + 23.25 + 21 + 21.5 + 22.25 + 23.25 + 23.25 + 24.25 + 24.25 + 23.25 + 23 + 22.75 + 21.75 + 21.25 + 21 + 21 + 21 + 21 + 21 + 21 + 27 + 29.25 + 30.5 + 32.75 + 35.5 + 37.25 + 40.25 + 42.5 + 42.5 + 42.25 + 40.75 + 39.5 + 37.75 + 35.5 + 34.25 + 34 + 33.75 + 33.25 + 32.5 + 31.25 + 25.75 + 26.25 + 26.5 + 26.75 + 27 + 27 + 27.5 + 27.5 + 27.5 + 27.5 + 27.5 + 26.25 + 25.75 + 25 + 24.25 + 23.75 + 23.5 + 22.25 + 22 + 21.75 + 21.5 + 20 + 21 + 24.25 + 24 + 23.5 + 23.25 + 23 + 22.75 + 22.25 + 21.75 + 21 + 21.5 + 21.75 + 21.75 + 21.75 + 21.75 + 21.75 + 22.5 + 21.25 + 20.75 + 20.5 + 20.25 + 20.5 + 20.75 + 20.75 + 22 + 22.75 + 24 + 24.75 + 25 + 25.75 + 27 + 27 + 27.5 + 28.25 + 28.75 + 29 + 29.5 + 30.25 + 31.75 + 31.75 + 32.25 + 32.75 + 32.5 + 32.25 + 32.5 + 32.5 + 32 + 32.75 + 33 + 34 + 34.25 + 34.75 + 35 + 35 + 34.75 + 34.5 + 34.25 + 34 + 34 + 34 + 34 + 32 + 29.75 + 24.75 + 22.25 + 20 + 19 + 18.5 + 17.25 + 15 + 13.5 + 13.75 + 15 + 16.5 + 17.5 + 20 + 23.75 + 23.5 + 23 + 23 + 22.5 + 21.75 + 22.25 + 22.5 + 22.75 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.25 + 23.5 + 23.75 + 24.75 + 26 + 26.75 + 26.75 + 26.5 + 26 + 25.75 + 25.25 + 25.25 + 25.5 + 25.75 + 25.75 + 26 + 26 + 26 + 26 + 26 + 26.25 + 26.25 + 26.5 + 26.75 + 26.25 + 25.75 + 25.25 + 24.25 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24 + 24.5 + 25.25 + 25.75 + 25.5 + 23.25 + 20.5 + 19.75 + 19 + 19.75 + 20 + 19.25 + 19.5 + 19.25 + 19 + 19.5 + 20 + 18.75 + 19.75 + 19.25 + 18.75 + 18.75 + 19.5 + 20.5 + 23 + 23.75 + 23.5 + 20.5 + 19 + 18.25 + 19 + 19 + 19 + 19 + 18.75 + 19 + 19 + 19 + 18.75 + 17.5 + 16.5 + 16 + 16.25 + 17.25 + 17.5 + 17 + 17.25 + 17.25 + 17 + 17 + 17 + 17.75 + 18 + 18 + 18.25 + 18.25 + 18.5 + 18.5 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 18.75 + 19 + 19 + 19.25 + 19.25 + 21.25 + 22 + 22.25 + 21.5 + 21.5 + 22.75 + 22.25 + 21.75 + 19.5 + 19 + 19 + 18.75 + 18.5 + 17.75 + 17 + 16.25 + 16 + 15.75 + 15.25 + 14.5 + 13.75 + 11 + 10.75 + 10.75 + 10.5 + 10.25 + 10.25 + 10 + 10 + 10 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 10 + 10 + 10.25 + 10.5 + 10.75 + 11 + 11.5 + 11.75 + 11.75 + 11.75 + 11.75 + 11.5 + 11.5 + 10.75 + 10.25 + 9.5 + 9.25 + 9 + 9 + 9 + 9 + 9 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8.25 + 8.75 + 9.25 + 9.5 + 9.75 + 9.75 + 9.5 + 9 + 8.5 + 7.5 + 6.75 + 6.25 + 6 + 5.75 + 5.5 + 5.25 + 5 + 4.75 + 4.5 + 4.5 + 4.25 + 4 + 3.5 + 3.5 + 3.5 + 3.75 + 3.75 + 4.5 + 5 + 5.5 + 6 + 6 + 6 + 6 + 6 + 5.75 + 5 + 4.75 + 4.75 + 4.75 + 5.75 + 6.5 + 6.75 + 6.5 + 6.25 + 6.25 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6.25 + 6.75 + 6.75 + 7 + 7 + 6.75 + 6.25 + 6.25 + 8 + 8 + 8.25 + 8.25 + 8 + 7 + 6.25 + 5.25 + 4.75 + 4.5 + 3.5 + 4 + 4.5 + 5.25 + 5.5 + 5.5 + 5.75 + 5.75 + 6.25 + 7 + 8 + 8.75 + 9.5 + 9.5 + 9.25 + 9.25 + 9 + 8.75 + 8.75 + 8 + 7.75 + 7.5 + 7.25 + 7 + 6 + 6 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.75 + 6.75 + 7 + 7.25 + 7.25 + 7.25 + 7.75 + 8 + 8.5 + 8.5 + 8.5 + 8.75 + 9 + 9.25 + 10 + 10 + 10 + 9 + 9 + 8 + 8 + 8.75 + 9 + 9 + 8.25 + 8.5 + 8.75 + 8 + 8 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.75 + 6.75 + 7.75 + 8.5 + 8.5 + 8.75 + 8.5 + 8.25 + 8 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7.25 + 6 + 7.25 + 7.25 + 7.25 + 7 + 7.25 + 7.75 + 8 + 8.25 + 8.75 + 8.75 + 9 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.25 + 8 + 8 + 7 + 7.25 + 7.5 + 8 + 8.25 + 8.25 + 8 + 8 + 8 + 8 + 8.25 + 8.25 + 8.25 + 8 + 8 + 8 + 7.75 + 7.5 + 7.5 + 7 + 7.25 + 7.25 + 7.25 + 7.5 + 7.75 + 7.75 + 7.75 + 7.5 + 7.25 + 7 + 6.75 + 6.25 + 6.25 + 6 + 6 + 6 + 6 + 5.75 + 5.75 + 5.5 + 5.25 + 5 + 5.25 + 5.25 + 5.5 + 6.25 + 6.25 + 6.75 + 7.75 + 8 + 8.25 + 9 + 9.5 + 9.5 + 9.75 + 10 + 10.5 + 10.75 + 11 + 11 + 11 + 11 + 11.25 + 11.75 + 12 + 12 + 8.75 + 8.5 + 8.5 + 8.25 + 8.25 + 8 + 7.5 + 7.5 + 7.75 + 7.75 + 8 + 8.5 + 8.5 + 8.5 + 8 + 9 + 7 + 6.75 + 7 + 7 + 7.25 + 7.25 + 7.25 + 7.5 + 7.75 + 8 + 8.5 + 9 + 10.25 + 11.75 + 12 + 12 + 12.25 + 12.5 + 12.5 + 12.5 + 12 + 12 + 11.5 + 11.25 + 11.25 + 10.75 + 10.75 + 10.75 + 10.25 + 10.5 + 10.75 + 10.75 + 10.75 + 10.5 + 10.5 + 10.25 + 10 + 9.75 + 9.5 + 9.5 + 9.75 + 9.5 + 9.25 + 9 + 8.75 + 8 + 7.75 + 7.5 + 6.75 + 6.5 + 6 + 5.75 + 6 + 6.25 + 6.25 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 9.25 + 9 + 8.75 + 8.75 + 8.75 + 10.75 + 10.25 + 10.25 + 10.5 + 10.75 + 11.5 + 11.5 + 11.5 + 11.5 + 11.5 + 11.25 + 11 + 11 + 10 + 7.5 + 5.5 + 5.5 + 5.5 + 5.75 + 6 + 6.25 + 6.75 + 6.75 + 7 + 7.75 + 8.25 + 8.5 + 8.75 + 9 + 10 + 10.25 + 11.5 + 12.25 + 12 + 12 + 12 + 11.5 + 11.25 + 10.75 + 10.75 + 10.75 + 10.75 + 10.5 + 10.5 + 10.75 + 11.25 + 11.5 + 10.75 + 10.5 + 10.5 + 11 + 11.75 + 11.75 + 11.5 + 11 + 10.75 + 10.75 + 10 + 8.25 + 8.25 + 8.5 + 8.75 + 9.25 + 9.75 + 10 + 10 + 10 + 10 + 10.75 + 12 + 12.25 + 12.5 + 15 + 16.25 + 17 + 17 + 17.25 + 16.75 + 13.75 + 13.25 + 13 + 12.75 + 11 + 11 + 10.75 + 10.75 + 11.25 + 10.5 + 10.5 + 10.25 + 10 + 10 + 10 + 10 + 9.5 + 9 + 9.25 + 9.5 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 11.5 + 11.5 + 12.5 + 13 + 12 + 11.75 + 13.5 + 13.75 + 13.75 + 13.75 + 14 + 15.75 + 16.5 + 17 + 18.5 + 18.75 + 21 + 22.75 + 22.5 + 25 + 26.75 + 26.5 + 26 + 24.25 + 23.5 + 22.75 + 21.25 + 18.5 + 18.25 + 17.25 + 17 + 18 + 18.25 + 18.25 + 17.5 + 16.5 + 12 + 11 + 9.75 + 7.75 + 6.75 + 6.5 + 7 + 9 + 9.75 + 16.5 + 16.25 + 16 + 20 + 25 + 20.25 + 15 + 17 + 18.25 + 17.25 + 15.75 + 14.5 + 13.25 + 12.5 + 11.75 + 10.75 + 10.5 + 10.5 + 10.5 + 10.5 + 10.25 + 10.25 + 10 + 9.75 + 9.75 + 9.5 + 9.25 + 9 + 8.75 + 8.5 + 8.25 + 8.75 + 9 + 9.25 + 9.75 + 10 + 10 + 10 + 9.75 + 9.5 + 9 + 8.75 + 8.25 + 7.5 + 7 + 6.25 + 6.5 + 6.75 + 7 + 7.25 + 7.5 + 7.75 + 8 + 8.25 + 8.5 + 9.25 + 9.5 + 9.75 + 9.75 + 9.75 + 9.5 + 9.75 + 9.5 + 9.5 + 9.5 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 9.5 + 9.5 + 8.75 + 8.5 + 7.75 + 8.25 + 9 + 9.5 + 5.25 + 5 + 5 + 4.75 + 4.25 + 4.25 + 7 + 7.75 + 10.25 + 10.25 + 10.25 + 10.5 + 10.75 + 11.5 + 11.5 + 12 + 12 + 12.25 + 12.5 + 12.5 + 12.75 + 12.75 + 12.5 + 12.25 + 12 + 12 + 11.75 + 11.5 + 11.25 + 11 + 10.5 + 10 + 9.75 + 9.5 + 9.5 + 9.5 + 9.5 + 8.5 + 11.5 + 10.5 + 9.5 + 12.75 + 18.5 + 19.75 + 19.75 + 19.75 + 19.75 + 19.5 + 17.5 + 17 + 15.25 + 14.25 + 12.75 + 12.75 + 12.5 + 12.5 + 11 + 11.5 + 12 + 10.5 + 8.75 + 8.75 + 9.5 + 9 + 8.75 + 8.75 + 8.75 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 7.75 + 7.75 + 7.75 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.5 + 8.25 + 8.25 + 7.75 + 6.25 + 6.25 + 5.75 + 6 + 6.5 + 7 + 7.5 + 7.5 + 8 + 8 + 8.25 + 8.5 + 8.75 + 8.75 + 9 + 9 + 9 + 8.25 + 8.25 + 8.25 + 8.5 + 8.75 + 9 + 8.75 + 8.75 + 8.5 + 8.5 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8 + 7.25 + 7.5 + 7.25 + 8 + 8.5 + 9.5 + 8.25 + 8 + 8 + 9.25 + 9.5 + 9.5 + 9.75 + 11.75 + 9 + 8.75 + 8.75 + 9 + 8.75 + 8 + 8 + 8.75 + 9 + 9.5 + 10 + 9.75 + 10.25 + 11 + 10.5 + 11.5 + 11.75 + 11.5 + 11.5 + 11.5 + 11.75 + 11.75 + 12 + 11.75 + 11.75 + 11.5 + 11.25 + 11.25 + 11.25 + 11.25 + 11 + 10.75 + 10 + 10 + 10 + 10 + 10 + 9.25 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.75 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10.25 + 10.5 + 10.75 + 9.75 + 9.5 + 9 + 9 + 8.75 + 8.5 + 8.25 + 8.25 + 8 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7.75 + 8 + 9 + 11 + 11.75 + 11.5 + 11.25 + 10.5 + 9.75 + 9 + 8.5 + 8.5 + 8.25 + 8.25 + 9.5 + 9.75 + 10.25 + 10 + 9.75 + 9.25 + 9 + 9.25 + 10 + 10.75 + 11 + 12.25 + 15 + 15 + 14.75 + 14.75 + 14 + 14 + 14 + 14 + 14.5 + 14.5 + 14.25 + 13.5 + 13 + 13 + 13 + 13 + 13.25 + 13.5 + 13.25 + 12.75 + 12 + 12.5 + 12.25 + 12 + 12 + 11.75 + 10 + 8 + 6.75 + 6.5 + 6 + 6 + 5.5 + 5.75 + 6.25 + 6.5 + 6.5 + 6.5 + 6.25 + 6.5 + 6.5 + 6.5 + 6.75 + 6.75 + 7 + 7.5 + 8 + 8.75 + 7 + 7 + 7.25 + 7.75 + 6.75 + 6.75 + 7.25 + 7.5 + 7.25 + 7 + 8.25 + 8.5 + 9 + 9 + 9 + 10.5 + 11.5 + 12 + 13.25 + 14.25 + 15 + 15 + 16 + 16.25 + 17 + 17 + 18 + 18.25 + 18.75 + 19 + 19.25 + 20.25 + 22.25 + 24.5 + 65.75 + 71.5 + 87.25 + 92.75 + 96.75 + 109.75 + 111.5 + 120.75 + 128.25 + 130.75 + 132.75 + 134 + 134.75 + 135.5 + 138.25 + 150.75 + 152 + 153.5 + 155.25 + 157.5 + 159 + 161.5 + 163.25 + 164.5 + 165.5 + 165.25 + 165.5 + 166.25 + 167.5 + 171.25 + 174 + 175 + 175 + 175.25 + 175.5 + 176.75 + 178 + 178.75 + 181.5 + 185.5 + 188 + 190.25 + 191.75 + 191 + 187.75 + 188 + 188 + 188.25 + 188.25 + 188.25 + 188.5 + 188.75 + 188.75 + 188.5 + 187.5 + 187.25 + 187 + 187 + 182 + 177.5 + 175.5 + 173.75 + 171 + 169.75 + 169.25 + 169.75 + 170 + 170.25 + 170.25 + 169 + 168.25 + 169.25 + 170.25 + 171.5 + 173 + 173 + 173 + 175.25 + 173.75 + 173.25 + 170.5 + 156.75 + 156.5 + 156.25 + 156.75 + 157.25 + 158 + 158.5 + 160.5 + 159.5 + 158.5 + 157 + 155.75 + 156.75 + 154.75 + 151.5 + 150.75 + 150.5 + 150.5 + 150 + 150 + 149.75 + 147 + 142.75 + 141 + 138.75 + 138 + 139.75 + 140 + 139.5 + 139.25 + 136.25 + 136.5 + 138.75 + 136.25 + 133.25 + 131.5 + 132.75 + 129.25 + 124 + 125.5 + 120.75 + 107.75 + 104 + 104.75 + 107 + 105.75 + 103.75 + 101.25 + 100.5 + 99.75 + 97.25 + 95 + 93.5 + 91.75 + 92.25 + 90.5 + 89.5 + 87.75 + 85 + 82.5 + 77.25 + 76.75 + 75.25 + 75 + 75 + 76 + 76.5 + 76 + 74.5 + 74.25 + 72.75 + 71 + 69.75 + 69 + 68.25 + 68 + 68.25 + 68.25 + 68.25 + 67.75 + 67 + 66.5 + 65.5 + 63.75 + 62.75 + 59.5 + 58.5 + 50.5 + 46 + 41.75 + 40.25 + 39 + 38.25 + 37 + 37.5 + 36 + 34.25 + 34.25 + 34.5 + 34.75 + 34.75 + 35 + 34.75 + 34.75 + 34.75 + 34.5 + 34.5 + 34.25 + 34 + 34 + 33.75 + 33.75 + 33.75 + 33.75 + 33.75 + 33.5 + 33.5 + 33.5 + 33.25 + 32.5 + 29 + 24.75 + 24.5 + 22.5 + 21.25 + 21 + 21.25 + 20.75 + 20.75 + 20.75 + 19.75 + 16 + 16.25 + 17 + 17 + 17 + 16.75 + 16.5 + 16.25 + 16 + 16 + 16 + 16 + 16 + 15.75 + 15.25 + 15 + 15 + 14.75 + 15 + 14 + 15 + 15.5 + 16 + 16 + 16 + 16 + 17.25 + 18.75 + 18.75 + 14 + 13.25 + 13 + 12.5 + 12.5 + 12 + 12 + 12 + 12.5 + 12.75 + 14 + 18.25 + 19 + 22.75 + 25.25 + 27.75 + 28.75 + 31 + 31.75 + 32.25 + 32.25 + 31.75 + 31.5 + 31.25 + 31 + 31 + 31 + 31 + 30.75 + 30.75 + 30.5 + 30.25 + 29.25 + 29.5 + 30 + 30 + 29.25 + 27.5 + 27 + 27 + 26.75 + 24.5 + 23.75 + 23.5 + 23.5 + 23.5 + 23.5 + 22.25 + 21.75 + 21.25 + 21 + 20.75 + 20.25 + 19.75 + 19 + 19 + 18.75 + 18.25 + 17.5 + 17.5 + 16.25 + 15.25 + 12.5 + 10.75 + 10 + 8.75 + 8.5 + 8.5 + 8.5 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 8 + 8 + 7.75 + 7.25 + 8 + 8.75 + 8.5 + 8.5 + 8.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7.5 + 7.75 + 8.5 + 8.75 + 9.75 + 10.25 + 13.5 + 14.25 + 14.5 + 15 + 15 + 15.5 + 16.25 + 16.75 + 17.25 + 17.75 + 18.25 + 19 + 19.25 + 18 + 18.25 + 18 + 18 + 20.25 + 20.5 + 21.5 + 21 + 20.5 + 18.75 + 18.5 + 18.25 + 18 + 17.75 + 17.75 + 17.25 + 17 + 17 + 16.75 + 16.75 + 16.75 + 16.5 + 16.25 + 15.75 + 15.75 + 15.5 + 15.25 + 14.75 + 14.25 + 13 + 13 + 13.5 + 13.75 + 11 + 11.75 + 11 + 9.75 + 10 + 10 + 10 + 10 + 10.25 + 10.75 + 10.5 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10.25 + 10.25 + 10.25 + 10.5 + 10.75 + 11 + 11.25 + 11.75 + 11.75 + 11.5 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 9.5 + 9.5 + 9.25 + 9 + 8.75 + 7.75 + 8.5 + 9.5 + 10.75 + 11 + 11.25 + 12 + 12 + 12 + 12 + 12 + 11.5 + 11 + 11 + 11.25 + 13 + 13.25 + 13.25 + 13.5 + 13.75 + 15.5 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 15.5 + 15.5 + 15.5 + 15.5 + 15.5 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 16.25 + 16.25 + 16.25 + 14 + 14 + 14.5 + 14.75 + 15 + 15 + 16 + 16 + 16.5 + 16.75 + 17.25 + 18.25 + 16.5 + 16 + 15.5 + 15.25 + 15.25 + 15.5 + 16.25 + 16.5 + 15.5 + 15.5 + 15.5 + 15.25 + 15.25 + 15.25 + 14.5 + 14.25 + 14.25 + 14 + 14 + 14 + 14 + 14 + 13.75 + 13.75 + 13.75 + 13.5 + 13.5 + 13.25 + 14 + 14.5 + 15.75 + 16 + 14.75 + 12.5 + 12.75 + 16.25 + 16.25 + 16.5 + 16.5 + 16.5 + 16.5 + 16.75 + 17 + 17 + 19.75 + 18.25 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18.25 + 18.75 + 19.25 + 19.5 + 19.75 + 20.75 + 20.75 + 20.75 + 20.75 + 20.75 + 20.5 + 20.5 + 20.5 + 20.5 + 20.75 + 20.5 + 19.25 + 18.5 + 17.75 + 17.5 + 17 + 17 + 17 + 17 + 17 + 17 + 15.25 + 14.75 + 14.75 + 14.75 + 15 + 15 + 15.75 + 15.75 + 15.75 + 15.75 + 15.75 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16 + 16.25 + 16.75 + 16.75 + 17 + 17 + 15.5 + 15.25 + 15 + 14.5 + 14 + 13.5 + 13.5 + 13.5 + 13.5 + 13.5 + 14 + 14.25 + 14.25 + 14.25 + 14 + 14 + 14 + 13.75 + 13.75 + 13.25 + 13 + 11.25 + 11.5 + 11.5 + 11.75 + 11.75 + 11.75 + 11.75 + 11.5 + 11 + 11 + 10.5 + 10.5 + 10.25 + 10 + 10 + 10 + 9.75 + 6.5 + 6 + 5 + 4.75 + 3.75 + 3.5 + 4 + 4.25 + 4.75 + 5 + 6.25 + 6.5 + 7.75 + 7.75 + 7.5 + 7.5 + 7 + 7.25 + 7.75 + 6.75 + 9 + 9.5 + 11.75 + 12.25 + 11.75 + 11 + 11 + 11 + 10 + 10.75 + 11 + 11 + 11 + 10.75 + 10.5 + 10.5 + 10.25 + 10 + 10 + 9.75 + 9.75 + 9.25 + 8.25 + 6.75 + 6.5 + 6.75 + 7.25 + 7.25 + 7.25 + 8 + 8.5 + 9.5 + 10 + 10.25 + 10.25 + 10.25 + 10.5 + 10.5 + 11 + 11.25 + 11.25 + 11.5 + 11.75 + 11.75 + 12 + 12 + 12 + 12 + 12 + 11.75 + 11.75 + 11 + 10.25 + 9.75 + 9.25 + 9 + 9 + 8.75 + 7.75 + 7.25 + 7 + 7 + 8.5 + 8.75 + 8.25 + 9 + 9.5 + 8.75 + 8 + 8.75 + 9.75 + 10.25 + 10.75 + 9.75 + 9.25 + 10 + 11 + 10.75 + 10.5 + 11 + 11 + 11.5 + 11.75 + 11.75 + 12 + 11 + 10.25 + 10.25 + 10.5 + 11.25 + 11.5 + 11.75 + 11.75 + 11.5 + 11 + 13.25 + 13.75 + 13 + 14.5 + 14.75 + 16.25 + 17 + 17 + 16.75 + 16.75 + 16.25 + 16.75 + 16.75 + 16.25 + 15.75 + 14 + 13.75 + 13.5 + 15 + 12 + 12.75 + 13.75 + 27 + 27 + 27 + 26.75 + 26.5 + 26.25 + 25.75 + 24.25 + 22.5 + 22 + 21.75 + 21.75 + 21.75 + 21.5 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 21.25 + 22.75 + 23 + 23 + 23.25 + 23.5 + 25.5 + 25.75 + 25.75 + 25.5 + 25.5 + 23.5 + 21.5 + 23.5 + 31.5 + 31.5 + 31.75 + 31.75 + 31.5 + 31.25 + 31.5 + 31.75 + 31.25 + 31.25 + 30.25 + 29.25 + 28.75 + 27.75 + 28 + 27.5 + 26.5 + 26.25 + 26.25 + 26 + 26 + 26 + 26.5 + 26.75 + 26.75 + 27 + 27 + 26.75 + 26.75 + 27 + 26.5 + 26.5 + 26.5 + 26.5 + 26.5 + 26.75 + 27 + 27 + 27 + 27 + 27 + 27 + 27.25 + 27.25 + 27.5 + 28 + 29 + 29 + 28.25 + 28 + 28 + 28.25 + 28 + 27.75 + 27.5 + 27.5 + 29 + 29.75 + 31.75 + 33.5 + 35 + 34.75 + 34.5 + 34 + 32.75 + 32.5 + 32.25 + 32.25 + 32.25 + 32.25 + 32.25 + 32 + 32 + 32 + 32.25 + 32.5 + 43.5 + 44.5 + 42.75 + 41.75 + 42 + 42 + 41.75 + 41.75 + 41.75 + 42.25 + 43.75 + 44 + 44 + 44.5 + 45 + 46 + 46.25 + 47 + 48.5 + 48.75 + 49 + 49.25 + 49.5 + 49.5 + 49.5 + 49.5 + 49.75 + 49.75 + 49.75 + 49.75 + 50.25 + 50.5 + 52 + 52.75 + 52.5 + 52.25 + 52.25 + 52.25 + 52.25 + 52.25 + 52.25 + 51.5 + 51.75 + 51.75 + 51.75 + 51.75 + 51.75 + 52 + 52 + 52 + 52.25 + 54.5 + 54.75 + 55.5 + 55.75 + 55 + 55.25 + 56 + 57 + 57.25 + 58.25 + 58.75 + 58.5 + 58 + 57.5 + 59 + 60.25 + 61 + 62 + 62.25 + 62.75 + 64 + 66 + 67.25 + 67.75 + 68 + 68 + 68.25 + 70.75 + 72.25 + 73.25 + 74 + 73.75 + 73.75 + 73.75 + 74 + 74.25 + 74.75 + 75 + 74.75 + 74 + 73.5 + 73.5 + 74 + 74 + 74 + 74 + 73.75 + 73.75 + 73.5 + 73 + 73.25 + 74.75 + 75 + 75.25 + 75.75 + 75.75 + 78.25 + 81 + 81.5 + 81.75 + 81.25 + 81 + 81 + 79.75 + 79.75 + 78.75 + 78.5 + 78 + 79 + 80.75 + 81.25 + 80.5 + 80 + 80.75 + 81 + 80.75 + 80 + 81 + 81.25 + 81 + 78.5 + 76.75 + 76 + 76.5 + 77.25 + 77.75 + 77 + 77 + 74 + 73 + 76 + 76 + 76 + 71.75 + 70.25 + 69.75 + 68.75 + 62.25 + 61.5 + 62 + 63.5 + 67.25 + 70.75 + 70.5 + 70.5 + 70.25 + 70 + 71.5 + 71.75 + 72 + 72 + 72.5 + 72.5 + 72.75 + 74.25 + 74 + 70.75 + 71 + 71.5 + 71.25 + 71 + 71 + 72.25 + 72.75 + 73 + 73.25 + 73.75 + 74.25 + 76.25 + 76.75 + 77 + 77.5 + 77.75 + 78 + 77 + 75.5 + 73.25 + 72 + 71 + 70.5 + 70.25 + 70.75 + 70.25 + 71.25 + 72.25 + 72.5 + 73.25 + 74.75 + 75.5 + 75.75 + 74.25 + 72.75 + 68.75 + 68.5 + 67.5 + 68.75 + 68 + 67 + 67 + 67.5 + 67 + 66.25 + 65.5 + 65.25 + 64 + 63.75 + 62.5 + 61.5 + 61 + 61.25 + 61.75 + 62.5 + 63.5 + 64.75 + 64.75 + 60.75 + 53 + 52 + 51.75 + 52 + 50.25 + 50 + 47 + 46.25 + 45.25 + 43 + 29 + 28.25 + 27.5 + 28 + 29 + 29.25 + 29.5 + 29.75 + 30.5 + 30.75 + 31.75 + 32.25 + 33.25 + 33.5 + 34.5 + 36 + 36.5 + 39 + 43 + 44.5 + 44.5 + 45.75 + 46 + 46.5 + 47 + 48.5 + 50.75 + 51 + 48.75 + 46 + 45.75 + 41.25 + 40.5 + 40.25 + 40.25 + 37.5 + 36.25 + 34.5 + 33.5 + 33.25 + 31.75 + 31.25 + 30.5 + 30 + 29.75 + 29.25 + 28 + 27 + 26 + 24 + 22.25 + 22.25 + 19.5 + 19.25 + 19 + 18.75 + 18.5 + 18.5 + 18.25 + 18.25 + 18 + 17.75 + 17.5 + 17 + 16.75 + 16.75 + 16.5 + 16.5 + 16.5 + 16.5 + 16.25 + 19.25 + 17.75 + 14.75 + 14.25 + 12.5 + 11.75 + 11.25 + 11.75 + 10.5 + 10.75 + 13.25 + 14 + 16 + 17.75 + 18 + 18.5 + 19.25 + 19.75 + 20 + 20.25 + 20.25 + 19.75 + 19.5 + 18.5 + 17.75 + 17.5 + 15.75 + 15.75 + 15.5 + 15.25 + 14.75 + 13.75 + 13 + 13.5 + 13.75 + 14 + 14 + 14 + 13.5 + 13.25 + 12.75 + 12.5 + 12 + 13.5 + 14.25 + 14 + 13 + 13 + 13 + 13.75 + 12.5 + 12.5 + 12.75 + 13 + 10 + 7.75 + 6.5 + 4.5 + 3.75 + 5.75 + 8.5 + 11.75 + 13 + 13 + 13 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.5 + 12.5 + 12.25 + 12 + 12.5 + 12 + 11.75 + 11.75 + 11.75 + 14.75 + 16 + 16.75 + 16.5 + 16.5 + 16.25 + 16.5 + 16.75 + 16.75 + 17 + 17.25 + 17.5 + 16.25 + 14.5 + 13.75 + 13.25 + 12.5 + 11.75 + 11.5 + 11 + 11.5 + 11.5 + 11.5 + 11.75 + 11.5 + 11.5 + 10.75 + 9.25 + 9 + 9 + 9.5 + 11.5 + 12 + 14.5 + 16.5 + 14.75 + 11.25 + 11 + 11.5 + 12.25 + 12.25 + 13.5 + 13.75 + 15.25 + 16.75 + 16.75 + 16.5 + 18.25 + 17.75 + 17 + 16 + 16 + 16 + 16.25 + 16.5 + 17.25 + 17.25 + 16.75 + 16 + 14.75 + 14.5 + 14.25 + 14 + 14 + 14.5 + 16 + 17.25 + 17 + 17 + 17.25 + 17.25 + 15.75 + 15.5 + 13 + 9.25 + 13.5 + 13.5 + 13.75 + 13.75 + 13.5 + 13.5 + 14.75 + 16.75 + 13.5 + 11.75 + 10.5 + 8 + 8 + 8.5 + 8.75 + 9 + 9 + 9 + 9.5 + 9.25 + 10.25 + 12 + 13.25 + 12.5 + 12 + 11.5 + 11.5 + 11.5 + 11.75 + 11.75 + 11.5 + 12 + 11.75 + 11.75 + 12 + 12 + 10.25 + 10.25 + 9.5 + 10 + 11 + 11 + 11 + 11 + 10.5 + 9 + 9.25 + 9.5 + 7.75 + 8.5 + 8.75 + 9 + 9 + 9 + 9.25 + 9 + 9 + 8.75 + 8.75 + 9 + 8.75 + 8 + 7.75 + 7.75 + 7.5 + 8.75 + 8.75 + 10 + 10 + 10.5 + 10 + 9.5 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9.25 + 9.75 + 11 + 11 + 11 + 11 + 11.75 + 14.25 + 14.25 + 14 + 14.5 + 14.75 + 14.25 + 14 + 13.75 + 13 + 12.5 + 12.75 + 12.75 + 12.75 + 12.75 + 12.75 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12.5 + 12 + 12 + 10.5 + 9.5 + 6.75 + 3.5 + 1.75 + 0 + 0 + 0 + 0 + 0 + 0.25 + 1 + 1.25 + 2.5 + 3.5 + 4 + 4 + 4 + 4 + 4 + 3.75 + 3 + 2.75 + 2.75 + 2.5 + 2.75 + 3 + 3.5 + 4 + 4.5 + 5 + 5.75 + 5.75 + 5.75 + 5.75 + 6 + 7 + 7.75 + 8 + 8.75 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8.25 + 7.75 + 7.75 + 7 + 7 + 7 + 6.75 + 6.5 + 6.5 + 6.5 + 6.5 + 6.5 + 6.25 + 6.25 + 6.25 + 6.5 + 7 + 7 + 8.5 + 9 + 9.25 + 9.25 + 9.25 + 9 + 9.25 + 9.5 + 10.25 + 10.5 + 10.75 + 10.75 + 10.75 + 11 + 12 + 12 + 12 + 12 + 12 + 11.75 + 11 + 11 + 11 + 11.25 + 11.5 + 11.75 + 12.25 + 12.5 + 12.25 + 12.25 + 12 + 11.5 + 11.5 + 11.25 + 11 + 10.5 + 10 + 9.5 + 8.75 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8 + 7.75 + 7.75 + 7.75 + 7.75 + 7.75 + 8 + 8.25 + 8.25 + 8.5 + 8.5 + 8.5 + 8.5 + 8.5 + 8.75 + 8.75 + 8.75 + 9 + 9 + 9 + 9.25 + 9.25 + 9 + 9 + 8.75 + 8.75 + 9 + 9.25 + 9.5 + 9.5 + 9.75 + 9.75 + 9.75 + 9.75 + 9.75 + 10 + 10 + 10.25 + 10.25 + 10.5 + 10.5 + 10.5 + 10.75 + 10.75 + 10.75 + 11 + 11 + 11 + 11.25 + 11.5 + 11.75 + 11.75 + 11.75 + 11.5 + 11.25 + 11 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10 + 10.25 + 10.75 + 10.75 + 10.75 + 10.75 + 11 + 11.25 + 11.5 + 11.75 + 11.75 + 11.25 + 11 + 10.5 + 10.5 + 10.25 + 11.25 + 11.5 + 12 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 12.25 + 11.75 + 11.75 + 11.5 + 11 + 11.25 + 11.5 + 11.75 + 12 + 14 + 14.75 + 15.75 + 14.5 + 11.75 + 8.5 + 7 + 6.75 + 5.5 + 4.5 + 4 + 4.25 + 4.5 + 4.75 + 4.25 + 3.75 + 3.5 + 3.5 + 3.25 + 2.25 + 1.25 + 1.25 + 1.25 + 1.25 + 1.25 + 1.25 + 0.25 + 2.75 + 3 + 2.75 + 2.75 + 2.5 + 2.5 + 2.5 + 2.5 + 1.5 + 1.5 + 1.5 + 1.75 + 2 + 3.5 + 3.5 + 3.5 + 3.25 + 3 + 3.25 + 3.25 + 3.75 + 3.75 + 4 + 4.25 + 4.75 + 4.75 + 4 + 4.25 + 4 + 3.75 + 3.5 + 5 + 6 + 6.25 + 6.5 + 7 + 7.75 + 7.5 + 7.5 + 7.25 + 7 + 7 + 7 + 6.75 + 6.5 + 6.5 + 6.25 + 6 + 5.75 + 5.5 + 5.25 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4.75 + 4.5 + 4.25 + 3.75 + 3.5 + 3 + 2.75 + 2.5 + 1 + 0.75 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + -0.25 + 0 + 0 + 0 + 0 + 0 + 0 + -0.25 + -0.75 + -1 + -1.25 + -1.5 + -1.75 + -1.75 + -1.75 + -1.75 + -1.5 + -0.5 + -0.25 + 0.25 + 0.25 + 0.5 + 0.75 + 0.75 + 0.75 + 0.75 + 0.75 + 1 + 1 + 0.75 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 1 + 2 + 2 + 2 + 2 + 2 + 1.5 + 1.5 + 1.75 + 1.75 + 2 + 2 + 2 + 1.75 + 1.75 + 1.5 + 1.75 + 1.75 + 2 + 2 + 2.25 + 3.75 + 3 + 2.75 + 2.5 + 2.25 + 1.75 + 1.5 + 1.25 + 1 + 1 + 1 + 1 + 1.5 + 2 + 2 + 1.5 + 1.5 + 1 + 1.25 + 1.5 + 0.75 + 0.75 + 1.75 + 2 + 2.5 + 3.25 + 3.5 + 3.25 + 2.75 + 2.25 + 2.25 + 3.25 + 3.25 + 6.75 + 9.25 + 10.75 + 11.5 + 11 + 9.5 + 8.75 + 6 + 4.5 + 3 + 2.5 + 2.5 + 2.75 + 2.75 + 2.75 + 1.5 + 0.75 + 1.5 + 2.75 + 3 + 2.75 + 0 + 0 + 0 + 0 + 0 + 0 + 0.25 + 0.5 + 0.25 + 0 + 0 + -0.5 + -1.5 + -1.75 + -1.25 + -0.75 + -0.5 + -0.25 + 0 + -0.25 + -0.5 + -0.75 + -0.75 + -0.75 + -0.75 + -0.5 + -0.75 + -0.75 + -0.75 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0.25 + 1.75 + 1.25 + 1 + 1.75 + 1.75 + 2 + 1.5 + 3.25 + 3.5 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.75 + 2.5 + 2.25 + 2 + 1.75 + 1.5 + 1.5 + 1.25 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1.25 + 2 + 2.25 + 2.5 + 2.75 + 3 + 3 + 3.5 + 3.5 + 3.5 + 3 + 3 + 2.75 + 2.5 + 2.5 + 2 + 2 + 2 + 2 + 2 + 2.5 + 2.5 + 4.25 + 6.5 + 1.5 + 1 + 0.75 + 0.25 + 0 + 1.25 + 2.25 + 2.25 + 2.25 + 2.5 + 4 + 4.75 + 5 + 5 + 5 + 5 + 4.75 + 4.75 + 4.5 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.25 + 4.5 + 4.75 + 4.75 + 5.25 + 5.5 + 6 + 6.25 + 6.5 + 6.25 + 6.25 + 6.25 + 6 + 4.75 + 4 + 4.5 + 4.25 + 4.25 + 5 + 6.75 + 8 + 8 + 8 + 7.75 + 7.5 + 7.5 + 7.5 + 7.75 + 8 + 8.25 + 9.5 + 10 + 9.75 + 9.5 + 9.75 + 9.75 + 9.75 + 9.5 + 8.25 + 8 + 7.5 + 7.25 + 6 + 6 + 6.5 + 6.75 + 7 + 7 + 7.25 + 7.5 + 6 + 7.75 + 7.25 + 7.25 + 7.25 + 7.25 + 7.25 + 7 + 7 + 7 + 7.25 + 7.75 + 7.75 + 8.5 + 9 + 9.25 + 9.25 + 9.75 + 9.75 + 10.25 + 10.5 + 10.5 + 10.5 + 10.5 + 9.75 + 9.75 + 9.5 + 9.5 + 9.5 + 9.25 + 9 + 8.75 + 8.75 + 8.25 + 8.25 + 8 + 7 + 6.75 + 6.75 + 6.75 + 6.75 + 7.5 + 8.5 + 9.25 + 9.5 + 9.25 + 9.25 + 8.5 + 8.25 + 8.25 + 8.25 + 8.25 + 8.25 + 9 + 9.5 + 10 + 10.75 + 11 + 9.75 + 9 + 9.25 + 9.25 + 10 + 10.25 + 10.25 + 11 + 11.5 + 12.5 + 12.25 + 12.75 + 17.25 + 17.25 + 17 + 16.75 + 16.5 + 18.25 + 19.75 + 21.75 + 21 + 20.75 + 20.75 + 20.5 + 20.25 + 19.25 + 18.5 + 19 + 19.5 + 19.75 + 20 + 20.5 + 20.5 + 20.5 + 19.75 + 19.5 + 18.75 + 18.75 + 18.5 + 18.5 + 18.25 + 18.25 + 18.25 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 17.75 + 18 + 18 + 18.25 + 18.5 + 18.75 + 18.75 + 19 + 19 + 19 + 19 + 19 + 19 + 22.75 + 23 + 23.25 + 23.75 + 24 + 26.25 + 27.5 + 24.75 + 23.25 + 23.25 + 24.75 + 24.25 + 20.75 + 21.25 + 21 + 20.75 + 20.75 + 21 + 21.25 + 21.5 + 21.5 + 22 + 24.75 + 25 + 25 + 24 + 25.5 + 25.5 + 26.25 + 26.5 + 26.5 + 26.75 + 27 + 28 + 28 + 27.75 + 28 + 28 + 28 + 27.75 + 28 + 27.75 + 28 + 29.75 + 30.75 + 32.5 + 34.5 + 34.75 + 34 + 34 + 33.5 + 33.25 + 33 + 32.5 + 32.25 + 31.75 + 31.25 + 31.25 + 30.75 + 30.75 + 30.5 + 30.25 + 29.75 + 29 + 28.25 + 28 + 28 + 28 + 27.75 + 27.25 + 27 + 26.75 + 26.75 + 26.25 + 26 + 26 + 26 + 26 + 26 + 25.75 + 25.75 + 26.25 + 26.25 + 26.25 + 26 + 26.25 + 26.75 + 27 + 27.25 + 27.5 + 27.75 + 28 + 28 + 28 + 28 + 28.25 + 28.25 + 28 + 28 + 28.75 + 29 + 29.75 + 29.5 + 29.5 + 29.5 + 29.75 + 30 + 31.5 + 32.25 + 32.5 + 33 + 33.25 + 33.5 + 33.75 + 34 + 33.75 + 33.5 + 33.5 + 33 + 33 + 33.5 + 34.25 + 34.25 + 34 + 33.75 + 33.25 + 32.5 + 33.5 + 33.75 + 33.75 + 34 + 34 + 33.75 + 33.75 + 33.5 + 33 + 33 + 33 + 33.5 + 33.5 + 33.75 + 34 + 34.5 + 35 + 37 + 37.75 + 38.25 + 38.75 + 38.5 + 38.5 + 38.25 + 38.25 + 38 + 38 + 38 + 38.25 + 38.25 + 38.5 + 38.75 + 39.25 + 40.25 + 40.25 + 40.5 + 40.5 + 40.5 + 40.75 + 41 + 41 + 41.25 + 41.25 + 41.75 + 42.5 + 42.25 + 45.5 + 46 + 46.5 + 47.75 + 48 + 48.5 + 48.25 + 48 + 48 + 48.25 + 48.25 + 48.75 + 49 + 49.25 + 49 + 48.75 + 48.25 + 47.75 + 47.75 + 47.5 + 47.5 + 47.5 + 47.5 + 47.25 + 47 + 46.75 + 46.5 + 46.25 + 46.25 + 46 + 45.5 + 45 + 44.75 + 44 + 43.75 + 43.75 + 43.25 + 42 + 44 + 44.25 + 44.25 + 44.25 + 43.75 + 43.5 + 43 + 42.25 + 42 + 40.5 + 40 + 39.75 + 39.5 + 39.75 + 40 + 40 + 40 + 40 + 39.25 + 40 + 40.25 + 40 + 38.75 + 38 + 38 + 38 + 38.75 + 38.75 + 38.75 + 38.5 + 38.5 + 38.5 + 39 + 39.5 + 39.5 + 39.5 + 39.25 + 39 + 39 + 38.75 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 38 + 37.75 + 38 + 38 + 37.75 + 37.75 + 37.5 + 37.25 + 35.75 + 35.5 + 35.75 + 35.25 + 34.5 + 33.75 + 33.25 + 32.75 + 33 + 33.25 + 33.25 + 33 + 33 + 32.25 + 32.25 + 34.25 + 35 + 34.75 + 34.75 + 34.5 + 34.75 + 34.75 + 34.75 + 35 + 35 + 35 + 35.25 + 35.75 + 36.25 + 35.75 + 35.75 + 35.75 + 35.75 + 36 + 36 + 36 + 36.25 + 36.75 + 37.5 + 37.75 + 37.5 + 37.5 + 36.75 + 36.75 + 36.5 + 36.25 + 35.75 + 35.75 + 35.75 + 35.5 + 35.5 + 35.5 + 35.75 + 35.75 + 35.5 + 36 + 36 + 36 + 36.25 + 36.25 + 36.25 + 36.75 + 37 + 37.25 + 37.5 + 38 + 38.25 + 38.75 + 39.75 + 40.75 + 42 + 41.75 + 41.5 + 41.25 + 40.25 + 40 + 40 + 40.5 + 40.75 + 41 + 41.25 + 41.75 + 42 + 42 + 42 + 42 + 42 + 42 + 41.75 + 41.75 + 41.75 + 41.25 + 40.25 + 40 + 40.5 + 41.5 + 42.5 + 43.25 + 44 + 44 + 43.75 + 44 + 44 + 44.25 + 44.25 + 44.25 + 44 + 44 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 43.5 + 43.5 + 43.5 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 43.75 + 43.25 + 43 + 43 + 43.25 + 43.75 + 43.5 + 43.5 + 43.25 + 43 + 43 + 42.75 + 42.75 + 42.75 + 42.5 + 42.25 + 42.25 + 42.25 + 42 + 42.25 + 42 + 42 + 42 + 42 + 42 + 42.25 + 42 + 43.25 + 42.75 + 42 + 41.5 + 41 + 40 + 39.25 + 38.25 + 37.5 + 36.75 + 36 + 36.5 + 37 + 37 + 37 + 37 + 37 + 37.25 + 37.25 + 37.25 + 37.25 + 37.25 + 37 + 37.25 + 37.5 + 37.75 + 38.25 + 38.75 + 38.25 + 37.75 + 37 + 36.5 + 36 + 35.75 + 35.25 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35 + 35.5 + 35.75 + 35.75 + 35.75 + 36 + 36.25 + 36.5 + 37 + 37 + 37.25 + 37.25 + 37.5 + 37.5 + 37.75 + 37.75 + 38.25 + 40.25 + 40 + 39.75 + 39.75 + 39.25 + 38.5 + 37.5 + 38 + 38 + 38 + 38 + 38 + 37.75 + 37.25 + 36.75 + 36.5 + 36.75 + 37 + 37.75 + 37.5 + 37 + 37 + 37 + 37.25 + 38.25 + 39 + 39 + 39.25 + 39.75 + 38.75 + 38.25 + 37.25 + 36.5 + 35 + 35.25 + 35.75 + 36 + 35.5 + 35.25 + 35 + 35 + 33.5 + 33 + 33 + 33 + 32.75 + 32.5 + 32.25 + 32.5 + 32.5 + 32.75 + 33 + 32.75 + 32.5 + 33.25 + 34.25 + 35.25 + 35.75 + 36 + 36.25 + 36.75 + 37.5 + 38.25 + 39.75 + 39.75 + 39.75 + 39.25 + 38 + 37.75 + 37.75 + 37.5 + 37.5 + 36.5 + 36 + 35.75 + 36 + 36 + 35.75 + 35.5 + 35.25 + 35.25 + 35.25 + 35.5 + 35.5 + 35.5 + 35.75 + 35.75 + 36 + 36 + 36 + 36 + 35 + 34.5 + 33.75 + 33.5 + 32.75 + 32.25 + 32 + 32 + 31.75 + 31.5 + 31.25 + 31.25 + 31.5 + 32.5 + 33 + 33 + 35 + 35 + 34.75 + 34.5 + 34 + 34.75 + 34.75 + 34.75 + 34.5 + 33.75 + 32.25 + 31.75 + 31.25 + 31.5 + 32.25 + 33 + 33.5 + 34 + 34.25 + 34.25 + 34 + 33.75 + 33.25 + 33.25 + 32.75 + 32 + 30.5 + 30 + 29.75 + 29 + 29 + 27 + 26.75 + 26.5 + 25.75 + 25.25 + 25 + 25.25 + 25.5 + 26 + 27.25 + 27.75 + 28 + 29.25 + 30 + 30.5 + 30.75 + 30.75 + 30.5 + 30.75 + 31 + 30.75 + 30.25 + 29.75 + 29.75 + 28 + 27.5 + 27 + 21.5 + 20.25 + 20 + 22.75 + 18.75 + 18.25 + 17.75 + 17.75 + 18 + 19.25 + 20.25 + 20.5 + 20 + 20 + 20 + 19.75 + 19.75 + 19.75 + 18.75 + 18.5 + 18.25 + 18 + 18 + 17.75 + 17.75 + 17.75 + 17.75 + 17.5 + 17.5 + 17.5 + 17.25 + 17 + 17 + 17.25 + 17.75 + 17.5 + 17.25 + 17 + 17 + 17 + 17 + 17 + 17 + 17 + 17 + 17 + 17.25 + 17.25 + 17.25 + 17.25 + 17 + 17.25 + 17.5 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 18 + 17.75 + 17.5 + 17.5 + 17.5 + 17.25 + 16 + 15.75 + 15 + 14.5 + 14.25 + 14.25 + 14 + 14 + 13.5 + 13.25 + 12.5 + 10.75 + 10.5 + 10.5 + 10 + 10 + 9.75 + 9.5 + 9.5 + 9.5 + 9.25 + 9.25 + 9.25 + 9 + 9 + 8.75 + 8.5 + 8 + 7.75 + 7.5 + 7.5 + 7.5 + 7.75 + 8.25 + 8.75 + 8.75 + 8.75 + 8.25 + 8.25 + 8 + 8 + 8 + 8 + 8 + 7.75 + 7.75 + 7.5 + 6.5 + 6.25 + 6 + 6 + 5.75 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 6 + 5.75 + 5 + 4.5 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4.5 + 4.75 + 6 + 6 + 6 + 6 + 5.75 + 4.75 + 4 + 4 + 4.25 + 4.5 + 4.75 + 4.75 + 4.75 + 4.75 + 4 + 3.75 + 3.5 + 3.5 + 3.25 + 3.5 + 3.5 + 3.25 + 3 + 2.75 + 1.75 + 1.5 + 1.5 + 0.75 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0.75 + 0.5 + + + \ No newline at end of file diff --git a/tests/test_forced_stop.sh b/tests/test_forced_stop.sh new file mode 100755 index 0000000..8b0ecaa --- /dev/null +++ b/tests/test_forced_stop.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +cd "$(dirname "$0")/.." + +# Create a test GPX file with a simple route +cat > test_route.gpx << EOF + + + + Test Route + + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + + + +EOF + +# Run the bicycle planner with a 1-night forced stop +echo "Testing with 1-night forced stop at 59.5,18.5" +go run main.go --input="test_route.gpx" --days=5 --elevFactor=4 --forestRadius=5 --resupplyRadius=5000 --multiStop="59.5,18.5:1" + +# The number of segments is now shown in the output +echo "Check the output above for the number of segments created" + +# Clean up +rm test_route.gpx diff --git a/tests/test_multi_night_stop.sh b/tests/test_multi_night_stop.sh new file mode 100755 index 0000000..3799efb --- /dev/null +++ b/tests/test_multi_night_stop.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +cd "$(dirname "$0")/.." + +# Create a test GPX file with a simple route +cat > test_route.gpx << EOF + + + + Test Route + + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + + + +EOF + +# Run the bicycle planner with a 2-night forced stop +echo "Testing with 2-night forced stop at 59.5,18.5" +go run main.go --input="test_route.gpx" --days=6 --elevFactor=4 --forestRadius=5 --resupplyRadius=5000 --multiStop="59.5,18.5:2" + +# The number of segments is now shown in the output +echo "Check the output above for the number of segments created" + +# Clean up +rm test_route.gpx diff --git a/tests/test_town_avoidance.sh b/tests/test_town_avoidance.sh new file mode 100755 index 0000000..a022371 --- /dev/null +++ b/tests/test_town_avoidance.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +cd "$(dirname "$0")/.." + +# Create a test GPX file with a simple route +cat > test_route.gpx << EOF + + + + Test Route + + 10 + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + + + +EOF + +# Run the bicycle planner with debug output to see town avoidance in action +echo "Testing town avoidance feature with performance improvements" +echo "Running first time (no cache)..." +time go run main.go --input="test_route.gpx" --days=5 --elevFactor=4 --forestRadius=5 --resupplyRadius=5000 + +echo "" +echo "Running second time (with cache)..." +time go run main.go --input="test_route.gpx" --days=5 --elevFactor=4 --forestRadius=5 --resupplyRadius=5000 + +# Clean up +rm test_route.gpx diff --git a/tests/test_uneven_effort.sh b/tests/test_uneven_effort.sh new file mode 100755 index 0000000..169833b --- /dev/null +++ b/tests/test_uneven_effort.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Test script for uneven effort distribution +echo "Testing uneven effort distribution..." +cd "$(dirname "$0")/.." +go run main.go -input tests/gpx/test_uneven_effort.gpx -days 12 -elevFactor 4.0 diff --git a/tests/test_uneven_effort_with_stops.sh b/tests/test_uneven_effort_with_stops.sh new file mode 100755 index 0000000..058469b --- /dev/null +++ b/tests/test_uneven_effort_with_stops.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Test script for uneven effort distribution with forced stops +echo "Testing uneven effort distribution with forced stops..." +cd "$(dirname "$0")/.." + +# Run the bicycle planner with the test GPX file and forced stops +go run main.go -input tests/gpx/test_uneven_effort.gpx -days 12 -elevFactor 4.0 -multiStop="60.5,19.5:1;62.5,21.5:2;64.5,23.5:1" diff --git a/tests/test_very_long_route_with_forced_stops.sh b/tests/test_very_long_route_with_forced_stops.sh new file mode 100755 index 0000000..5a73350 --- /dev/null +++ b/tests/test_very_long_route_with_forced_stops.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# Test script for the issue with uneven effort distribution +echo "Testing issue with uneven effort distribution..." +cd "$(dirname "$0")/.." + +# Run the bicycle planner with the specified parameters and debug logging +# Filter the output to only show the relevant parts +go run main.go -input tests/gpx/very_long_route.gpx -days 12 -forestRadius 5 -resupplyRadius 5000 -multiStop "59.126854,11.380377:1;59.92199,10.744629:2" diff --git a/tests/test_very_long_route_with_forced_stops_and_more_days.sh b/tests/test_very_long_route_with_forced_stops_and_more_days.sh new file mode 100755 index 0000000..780fbeb --- /dev/null +++ b/tests/test_very_long_route_with_forced_stops_and_more_days.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# Test script for the issue with uneven effort distribution +echo "Testing issue with uneven effort distribution..." +cd "$(dirname "$0")/.." + +# Run the bicycle planner with the specified parameters and debug logging +# Filter the output to only show the relevant parts +go run main.go -input tests/gpx/very_long_route.gpx -days 14 -forestRadius 5 -resupplyRadius 5000 -multiStop "59.126854,11.380377:1;59.92199,10.744629:2"