summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md13
-rw-r--r--__init__.py29
-rw-r--r--auth.py50
-rw-r--r--collections.json1
-rw-r--r--collections_noimgs.json1
-rw-r--r--content/profile_pictures/placeholder0
-rw-r--r--datatypes.py13
-rw-r--r--db.py506
-rw-r--r--main.py170
-rw-r--r--static/css/editor.css325
-rw-r--r--static/css/leaflet.css661
-rw-r--r--static/css/navbar.css54
-rw-r--r--static/css/simplemde.css328
-rw-r--r--static/fonts/HWYGOTH.ttfbin0 -> 53012 bytes
-rw-r--r--static/img/favicon.icobin0 -> 4286 bytes
-rw-r--r--static/img/marker-icon-black.pngbin0 -> 3183 bytes
-rw-r--r--static/img/marker-icon-blue.pngbin0 -> 4033 bytes
-rw-r--r--static/img/marker-icon-green.pngbin0 -> 4203 bytes
-rw-r--r--static/img/marker-icon-grey.pngbin0 -> 3534 bytes
-rw-r--r--static/img/marker-icon-orange.pngbin0 -> 4167 bytes
-rw-r--r--static/img/marker-icon-red.pngbin0 -> 4230 bytes
-rw-r--r--static/img/marker-icon-yellow.pngbin0 -> 4159 bytes
-rw-r--r--static/img/marker-shadow.pngbin0 -> 608 bytes
-rw-r--r--static/img/marker_background.pngbin0 -> 741 bytes
-rw-r--r--static/img/no-datetime.pngbin0 -> 1570 bytes
-rw-r--r--static/img/no-location.pngbin0 -> 1553 bytes
-rw-r--r--static/img/picker.pngbin0 -> 2168 bytes
-rw-r--r--static/img/response.json46160
-rw-r--r--static/img/video.pngbin0 -> 2484 bytes
-rw-r--r--static/img/yes-datetime.pngbin0 -> 1261 bytes
-rw-r--r--static/img/yes-location.pngbin0 -> 1372 bytes
-rw-r--r--static/js/codemirror/tablist.js44
-rw-r--r--static/js/editor.js805
-rw-r--r--static/js/leaflet.js6
-rw-r--r--static/js/simplemde.js2028
-rw-r--r--static/js/utils.js18
-rw-r--r--templates/editor.html151
-rw-r--r--templates/home.html31
-rw-r--r--templates/login.html41
-rw-r--r--templates/signup.html48
-rw-r--r--users.json1
42 files changed, 51485 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aaade80
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/__pycache__/** \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dd47276
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# Dependencies
+
+Python libraries used:
+- flask
+- flask-login
+- pillow
+- exif
+
+JavaScript libraries used:
+- Leaflet
+
+General:
+- ffmpeg \ No newline at end of file
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..3b5f51d
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,29 @@
+from flask import Flask
+from flask_login import LoginManager
+from . import db
+
+def create_app():
+ app = Flask(__name__)
+
+ app.config['SECRET_KEY'] = 'secret-key-goes-here'
+
+ # authorization-related routes
+ from .auth import auth as auth_blueprint
+ # main routes
+ from .main import main as main_blueprint
+
+ app.register_blueprint(main_blueprint)
+ app.register_blueprint(auth_blueprint)
+
+ login_manager = LoginManager()
+ login_manager.login_view = 'auth.login'
+ login_manager.init_app(app)
+
+ @login_manager.user_loader
+ def load_user(user_id):
+ # must return None in case no such user exists
+ return db.get_user(user_id)
+
+ db.startup()
+
+ return app
diff --git a/auth.py b/auth.py
new file mode 100644
index 0000000..43adabc
--- /dev/null
+++ b/auth.py
@@ -0,0 +1,50 @@
+# external libraries
+from flask import Blueprint, render_template, redirect, url_for, flash, request
+from flask_login import login_user, login_required, logout_user
+from werkzeug.security import generate_password_hash, check_password_hash
+
+# internal code
+from . import db
+
+auth = Blueprint('auth', __name__)
+
+@auth.route('/login', methods=["GET", "POST"])
+def login():
+ if request.method == "GET":
+ return render_template("login.html")
+ elif request.method == "POST":
+ email = request.form.get('email')
+ password = request.form.get('password')
+ remember = True if request.form.get('remember') else False
+
+ user = db.get_user(email)
+ if not user or not check_password_hash(user.password, password):
+ flash('Please check your login details and try again.')
+ return redirect(url_for('auth.login'))
+
+ login_user(user, remember=remember)
+ return redirect(url_for('main.home'))
+
+
+@auth.route('/signup', methods=["GET", "POST"])
+def signup():
+ if request.method == "GET":
+ return render_template("signup.html")
+ elif request.method == "POST":
+ # code to validate and add user to database goes here
+ email = request.form.get('email')
+ name = request.form.get('name')
+ password = request.form.get('password')
+
+ if db.get_user(email):
+ flash('Email address already exists')
+ return redirect(url_for('auth.signup'))
+
+ db.add_user(email=email, name=name, password=generate_password_hash(password, method='pbkdf2:sha256'))
+ return redirect(url_for('auth.login'))
+
+@auth.route('/logout', methods=["GET"])
+@login_required
+def logout():
+ logout_user()
+ return redirect(url_for("main.home"))
diff --git a/collections.json b/collections.json
new file mode 100644
index 0000000..9337d55
--- /dev/null
+++ b/collections.json
@@ -0,0 +1 @@
+{"last_modified": "PLACEHOLDER", "collections": {"1742863099": {"id": "1742863099", "title": "El Salvador", "subtitle": "March 2025 trip to El Salvador", "info": "Additional information", "owner": "john@gmail.com", "editors": ["fred@gmail.com", "mike@gmail.com"], "viewers" : [], "public": false, "last_edited": 1743619816.1493742, "media": [{"id": "P1040368.JPG", "mediapath": "content/1742863099/media/P1040368.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040368.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040368.png", "name": "P1040368.JPG", "info": "", "timestamp": "2025-03-16T05:41:49", "latitude": 42.36388162502043, "longitude": -71.01141929626466, "attached_notes": []}, {"id": "P1040375.JPG", "mediapath": "content/1742863099/media/P1040375.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040375.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040375.png", "name": "P1040375.JPG", "info": "", "timestamp": "2025-03-16T06:12:39", "latitude": 42.316944688648604, "longitude": -71.02489471435548, "attached_notes": []}, {"id": "P1040379.JPG", "mediapath": "content/1742863099/media/P1040379.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040379.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040379.png", "name": "P1040379.JPG", "info": "", "timestamp": "2025-03-16T11:02:16", "latitude": 39.870699197063104, "longitude": -75.24621963500978, "attached_notes": []}, {"id": "P1040382.JPG", "mediapath": "content/1742863099/media/P1040382.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040382.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040382.png", "name": "P1040382.JPG", "info": "", "timestamp": "2025-03-16T15:27:51", "latitude": 25.696428639780407, "longitude": -80.08209228515626, "attached_notes": []}, {"id": "P1040384.JPG", "mediapath": "content/1742863099/media/P1040384.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040384.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040384.png", "name": "P1040384.JPG", "info": "", "timestamp": "2025-03-16T15:32:01", "latitude": 25.56019106590662, "longitude": -80.08758544921876, "attached_notes": []}, {"id": "P1040385.JPG", "mediapath": "content/1742863099/media/P1040385.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040385.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040385.png", "name": "P1040385.JPG", "info": "", "timestamp": "2025-03-16T15:33:58", "latitude": 25.473413631643098, "longitude": -80.12054443359376, "attached_notes": []}, {"id": "P1040386.JPG", "mediapath": "content/1742863099/media/P1040386.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040386.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040386.png", "name": "P1040386.JPG", "info": "", "timestamp": "2025-03-16T15:35:36", "latitude": 25.374162705062023, "longitude": -80.12878417968751, "attached_notes": []}, {"id": "P1040389.JPG", "mediapath": "content/1742863099/media/P1040389.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040389.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040389.png", "name": "P1040389.JPG", "info": "", "timestamp": "2025-03-16T20:45:33", "latitude": 13.834404674344144, "longitude": -89.26497817039491, "attached_notes": []}, {"id": "P1040391.JPG", "mediapath": "content/1742863099/media/P1040391.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040391.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040391.png", "name": "P1040391.JPG", "info": "", "timestamp": "2025-03-17T07:53:49", "latitude": 13.734091299238154, "longitude": -89.2790973186493, "attached_notes": []}, {"id": "P1040392.JPG", "mediapath": "content/1742863099/media/P1040392.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040392.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040392.png", "name": "P1040392.JPG", "info": "", "timestamp": "2025-03-17T08:00:06", "latitude": 13.734476617293236, "longitude": -89.28010046482088, "attached_notes": []}, {"id": "P1040393.JPG", "mediapath": "content/1742863099/media/P1040393.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040393.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040393.png", "name": "P1040393.JPG", "info": "", "timestamp": "2025-03-17T08:00:15", "latitude": 13.737158113014797, "longitude": -89.28603887557983, "attached_notes": []}, {"id": "P1040395.JPG", "mediapath": "content/1742863099/media/P1040395.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040395.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040395.png", "name": "P1040395.JPG", "info": "", "timestamp": "2025-03-17T08:01:58", "latitude": 13.734651349933612, "longitude": -89.28008973598482, "attached_notes": []}, {"id": "P1040396.JPG", "mediapath": "content/1742863099/media/P1040396.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040396.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040396.png", "name": "P1040396.JPG", "info": "", "timestamp": "2025-03-17T08:02:56", "latitude": 13.736019158455344, "longitude": -89.28001999855042, "attached_notes": []}, {"id": "P1040397.JPG", "mediapath": "content/1742863099/media/P1040397.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040397.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040397.png", "name": "P1040397.JPG", "info": "", "timestamp": "2025-03-17T08:08:59", "latitude": 13.735300574741295, "longitude": -89.28008437156677, "attached_notes": []}, {"id": "P1040403.JPG", "mediapath": "content/1742863099/media/P1040403.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040403.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040403.png", "name": "P1040403.JPG", "info": "", "timestamp": "2025-03-17T08:15:40", "latitude": 13.735008678080051, "longitude": -89.28000926971437, "attached_notes": []}, {"id": "P1040404.JPG", "mediapath": "content/1742863099/media/P1040404.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040404.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040404.png", "name": "P1040404.JPG", "info": "", "timestamp": "2025-03-17T08:16:01", "latitude": 13.734049634950724, "longitude": -89.27955865859987, "attached_notes": []}, {"id": "P1040405.JPG", "mediapath": "content/1742863099/media/P1040405.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040405.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040405.png", "name": "P1040405.JPG", "info": "", "timestamp": "2025-03-17T08:18:37", "latitude": 13.733736886845156, "longitude": -89.28009510040283, "attached_notes": []}, {"id": "P1040406.JPG", "mediapath": "content/1742863099/media/P1040406.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040406.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040406.png", "name": "P1040406.JPG", "info": "", "timestamp": "2025-03-17T08:21:42", "latitude": 13.733497113014977, "longitude": -89.2790973186493, "attached_notes": []}, {"id": "P1040407.JPG", "mediapath": "content/1742863099/media/P1040407.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040407.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040407.png", "name": "P1040407.JPG", "info": "", "timestamp": "2025-03-17T09:02:48", "latitude": 13.68971504680421, "longitude": -89.20123279094697, "attached_notes": []}, {"id": "P1040408.JPG", "mediapath": "content/1742863099/media/P1040408.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040408.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040408.png", "name": "P1040408.JPG", "info": "", "timestamp": "2025-03-17T09:06:47", "latitude": 13.691691855263032, "longitude": -89.21246051788331, "attached_notes": []}, {"id": "P1040409.JPG", "mediapath": "content/1742863099/media/P1040409.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040409.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040409.png", "name": "P1040409.JPG", "info": "", "timestamp": "2025-03-17T09:25:08", "latitude": 13.698539357254786, "longitude": -89.19107794761658, "attached_notes": []}, {"id": "P1040411.JPG", "mediapath": "content/1742863099/media/P1040411.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040411.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040411.png", "name": "P1040411.JPG", "info": "", "timestamp": "2025-03-17T09:28:11", "latitude": 13.699305719950829, "longitude": -89.19014990329744, "attached_notes": []}, {"id": "P1040413.JPG", "mediapath": "content/1742863099/media/P1040413.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040413.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040413.png", "name": "P1040413.JPG", "info": "", "timestamp": "2025-03-17T09:35:45", "latitude": 13.698018047006995, "longitude": -89.19133543968202, "attached_notes": []}, {"id": "P1040417.JPG", "mediapath": "content/1742863099/media/P1040417.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040417.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040417.png", "name": "P1040417.JPG", "info": "", "timestamp": "2025-03-17T10:20:56", "latitude": 13.696573968148924, "longitude": -89.1937816143036, "attached_notes": []}, {"id": "P1040418.JPG", "mediapath": "content/1742863099/media/P1040418.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040418.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040418.png", "name": "P1040418.JPG", "info": "", "timestamp": "2025-03-17T10:29:33", "latitude": 13.695930008286542, "longitude": -89.19408738613129, "attached_notes": []}, {"id": "P1040419.JPG", "mediapath": "content/1742863099/media/P1040419.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040419.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040419.png", "name": "P1040419.JPG", "info": "", "timestamp": "2025-03-17T10:31:04", "latitude": 13.69627418423265, "longitude": -89.1953667998314, "attached_notes": []}, {"id": "P1040421.JPG", "mediapath": "content/1742863099/media/P1040421.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040421.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040421.png", "name": "P1040421.JPG", "info": "", "timestamp": "2025-03-17T10:42:32", "latitude": 13.694979204164188, "longitude": -89.19729530811311, "attached_notes": []}, {"id": "P1040422.JPG", "mediapath": "content/1742863099/media/P1040422.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040422.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040422.png", "name": "P1040422.JPG", "info": "", "timestamp": "2025-03-17T10:43:09", "latitude": 13.694968776073535, "longitude": -89.19844329357149, "attached_notes": []}, {"id": "P1040423.JPG", "mediapath": "content/1742863099/media/P1040423.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040423.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040423.png", "name": "P1040423.JPG", "info": "", "timestamp": "2025-03-17T10:47:52", "latitude": 13.697960089353753, "longitude": -89.20018136501314, "attached_notes": []}, {"id": "P1040424.JPG", "mediapath": "content/1742863099/media/P1040424.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040424.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040424.png", "name": "P1040424.JPG", "info": "", "timestamp": "2025-03-17T10:48:21", "latitude": 13.69780349566066, "longitude": -89.2001920938492, "attached_notes": []}, {"id": "P1040425.JPG", "mediapath": "content/1742863099/media/P1040425.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040425.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040425.png", "name": "P1040425.JPG", "info": "", "timestamp": "2025-03-17T10:49:02", "latitude": 13.695937819240573, "longitude": -89.19959664344789, "attached_notes": []}, {"id": "P1040426.JPG", "mediapath": "content/1742863099/media/P1040426.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040426.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040426.png", "name": "P1040426.JPG", "info": "", "timestamp": "2025-03-17T10:49:30", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040427.JPG", "mediapath": "content/1742863099/media/P1040427.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040427.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040427.png", "name": "P1040427.JPG", "info": "", "timestamp": "2025-03-17T10:50:32", "latitude": 13.69654279271527, "longitude": -89.1999936103821, "attached_notes": []}, {"id": "P1040428.JPG", "mediapath": "content/1742863099/media/P1040428.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040428.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040428.png", "name": "P1040428.JPG", "info": "", "timestamp": "2025-03-17T10:56:35", "latitude": 13.697298450238382, "longitude": -89.20026719570161, "attached_notes": []}, {"id": "P1040429.JPG", "mediapath": "content/1742863099/media/P1040429.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040429.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040429.png", "name": "P1040429.JPG", "info": "", "timestamp": "2025-03-17T11:01:16", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040430.JPG", "mediapath": "content/1742863099/media/P1040430.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040430.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040430.png", "name": "P1040430.JPG", "info": "", "timestamp": "2025-03-17T11:03:54", "latitude": 13.700915226364877, "longitude": -89.19921040534975, "attached_notes": []}, {"id": "P1040431.JPG", "mediapath": "content/1742863099/media/P1040431.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040431.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040431.png", "name": "P1040431.JPG", "info": "", "timestamp": "2025-03-17T11:08:06", "latitude": 13.700589282093166, "longitude": -89.20115903019907, "attached_notes": []}, {"id": "P1040433.JPG", "mediapath": "content/1742863099/media/P1040433.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040433.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040433.png", "name": "P1040433.JPG", "info": "", "timestamp": "2025-03-17T11:34:57", "latitude": 13.700973496505684, "longitude": -89.20113757252695, "attached_notes": []}, {"id": "P1040436.JPG", "mediapath": "content/1742863099/media/P1040436.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040436.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040436.png", "name": "P1040436.JPG", "info": "", "timestamp": "2025-03-17T13:17:15", "latitude": 13.70195213365922, "longitude": -89.24094155430795, "attached_notes": []}, {"id": "P1040437.JPG", "mediapath": "content/1742863099/media/P1040437.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040437.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040437.png", "name": "P1040437.JPG", "info": "", "timestamp": "2025-03-17T13:44:41", "latitude": 13.700979114481754, "longitude": -89.24251198768617, "attached_notes": []}, {"id": "P1040438.JPG", "mediapath": "content/1742863099/media/P1040438.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040438.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040438.png", "name": "P1040438.JPG", "info": "", "timestamp": "2025-03-17T13:51:49", "latitude": 13.700801985207727, "longitude": -89.24184679985048, "attached_notes": []}, {"id": "P1040439.JPG", "mediapath": "content/1742863099/media/P1040439.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040439.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040439.png", "name": "P1040439.JPG", "info": "", "timestamp": "2025-03-17T13:55:14", "latitude": 13.701927274796184, "longitude": -89.24298405647279, "attached_notes": []}, {"id": "P1040440.JPG", "mediapath": "content/1742863099/media/P1040440.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040440.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040440.png", "name": "P1040440.JPG", "info": "", "timestamp": "2025-03-17T13:55:25", "latitude": 13.700133557059756, "longitude": -89.24189507961273, "attached_notes": []}, {"id": "P1040441.JPG", "mediapath": "content/1742863099/media/P1040441.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040441.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040441.png", "name": "P1040441.JPG", "info": "", "timestamp": "2025-03-17T14:12:05", "latitude": 13.697721653747973, "longitude": -89.2381936311722, "attached_notes": []}, {"id": "P1040442.JPG", "mediapath": "content/1742863099/media/P1040442.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040442.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040442.png", "name": "P1040442.JPG", "info": "", "timestamp": "2025-03-17T14:22:49", "latitude": 13.700541500738732, "longitude": -89.23755526542665, "attached_notes": []}, {"id": "P1040443.JPG", "mediapath": "content/1742863099/media/P1040443.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040443.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040443.png", "name": "P1040443.JPG", "info": "", "timestamp": "2025-03-17T14:24:44", "latitude": 13.701083308109997, "longitude": -89.23888564109802, "attached_notes": []}, {"id": "P1040444.JPG", "mediapath": "content/1742863099/media/P1040444.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040444.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040444.png", "name": "P1040444.JPG", "info": "", "timestamp": "2025-03-17T14:51:56", "latitude": 13.709537256037018, "longitude": -89.22610759735109, "attached_notes": []}, {"id": "P1040448.JPG", "mediapath": "content/1742863099/media/P1040448.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040448.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040448.png", "name": "P1040448.JPG", "info": "", "timestamp": "2025-03-17T17:37:57", "latitude": 13.834904966589047, "longitude": -89.27000999450685, "attached_notes": []}, {"id": "P1040450.JPG", "mediapath": "content/1742863099/media/P1040450.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040450.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040450.png", "name": "P1040450.JPG", "info": "", "timestamp": "2025-03-17T17:43:19", "latitude": 13.83268514537351, "longitude": -89.27088975906373, "attached_notes": []}, {"id": "P1040451.JPG", "mediapath": "content/1742863099/media/P1040451.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040451.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040451.png", "name": "P1040451.JPG", "info": "", "timestamp": "2025-03-17T18:39:26", "latitude": 13.834345747295593, "longitude": -89.2707395553589, "attached_notes": []}, {"id": "P1040453.JPG", "mediapath": "content/1742863099/media/P1040453.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040453.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040453.png", "name": "P1040453.JPG", "info": "", "timestamp": "2025-03-17T18:51:04", "latitude": 13.834113012651569, "longitude": -89.26506400108337, "attached_notes": []}, {"id": "P1040454.JPG", "mediapath": "content/1742863099/media/P1040454.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040454.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040454.png", "name": "P1040454.JPG", "info": "", "timestamp": "2025-03-18T07:18:15", "latitude": 13.826420073643272, "longitude": -89.27893638610841, "attached_notes": []}, {"id": "P1040459.JPG", "mediapath": "content/1742863099/media/P1040459.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040459.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040459.png", "name": "P1040459.JPG", "info": "", "timestamp": "2025-03-18T08:20:25", "latitude": 13.979912307356098, "longitude": -89.16375160217287, "attached_notes": []}, {"id": "P1040461.JPG", "mediapath": "content/1742863099/media/P1040461.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040461.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040461.png", "name": "P1040461.JPG", "info": "", "timestamp": "2025-03-18T08:21:24", "latitude": 13.981245282782094, "longitude": -89.16464209556581, "attached_notes": []}, {"id": "P1040463.JPG", "mediapath": "content/1742863099/media/P1040463.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040463.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040463.png", "name": "P1040463.JPG", "info": "", "timestamp": "2025-03-18T08:21:53", "latitude": 13.981120316663896, "longitude": -89.16615486145021, "attached_notes": []}, {"id": "P1040464.JPG", "mediapath": "content/1742863099/media/P1040464.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040464.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040464.png", "name": "P1040464.JPG", "info": "", "timestamp": "2025-03-18T08:22:41", "latitude": 13.979860237846843, "longitude": -89.16321516036987, "attached_notes": []}, {"id": "P1040465.JPG", "mediapath": "content/1742863099/media/P1040465.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040465.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040465.png", "name": "P1040465.JPG", "info": "", "timestamp": "2025-03-18T08:30:52", "latitude": 13.98051631280263, "longitude": -89.16532874107362, "attached_notes": []}, {"id": "P1040469.JPG", "mediapath": "content/1742863099/media/P1040469.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040469.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040469.png", "name": "P1040469.JPG", "info": "", "timestamp": "2025-03-18T08:45:07", "latitude": 13.980839495403481, "longitude": -89.16360139846803, "attached_notes": []}, {"id": "P1040470.JPG", "mediapath": "content/1742863099/media/P1040470.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040470.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040470.png", "name": "P1040470.JPG", "info": "", "timestamp": "2025-03-18T08:49:25", "latitude": 13.979985204649267, "longitude": -89.16496396064758, "attached_notes": []}, {"id": "P1040475.JPG", "mediapath": "content/1742863099/media/P1040475.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040475.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040475.png", "name": "P1040475.JPG", "info": "", "timestamp": "2025-03-18T10:05:17", "latitude": 13.936649805315254, "longitude": -89.02582839131357, "attached_notes": []}, {"id": "P1040476.JPG", "mediapath": "content/1742863099/media/P1040476.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040476.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040476.png", "name": "P1040476.JPG", "info": "", "timestamp": "2025-03-18T10:05:34", "latitude": 13.936837279598349, "longitude": -89.02564600110055, "attached_notes": []}, {"id": "P1040477.JPG", "mediapath": "content/1742863099/media/P1040477.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040477.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040477.png", "name": "P1040477.JPG", "info": "", "timestamp": "2025-03-18T10:07:36", "latitude": 13.936366146730073, "longitude": -89.0253858268261, "attached_notes": []}, {"id": "P1040478.JPG", "mediapath": "content/1742863099/media/P1040478.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040478.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040478.png", "name": "P1040478.JPG", "info": "", "timestamp": "2025-03-18T10:07:49", "latitude": 13.936341301613638, "longitude": -89.02527183294298, "attached_notes": []}, {"id": "P1040479.JPG", "mediapath": "content/1742863099/media/P1040479.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040479.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040479.png", "name": "P1040479.JPG", "info": "", "timestamp": "2025-03-18T10:07:57", "latitude": 13.93659909423304, "longitude": -89.0256929397583, "attached_notes": []}, {"id": "P1040480.JPG", "mediapath": "content/1742863099/media/P1040480.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040480.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040480.png", "name": "P1040480.JPG", "info": "", "timestamp": "2025-03-18T10:08:55", "latitude": 13.936301173638034, "longitude": -89.0259236097336, "attached_notes": []}, {"id": "P1040481.JPG", "mediapath": "content/1742863099/media/P1040481.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040481.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040481.png", "name": "P1040481.JPG", "info": "", "timestamp": "2025-03-18T10:09:06", "latitude": 13.93639598492058, "longitude": -89.02589544653893, "attached_notes": []}, {"id": "P1040482.JPG", "mediapath": "content/1742863099/media/P1040482.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040482.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040482.png", "name": "P1040482.JPG", "info": "", "timestamp": "2025-03-18T10:10:17", "latitude": 13.935730933710294, "longitude": -89.02591556310655, "attached_notes": []}, {"id": "P1040483.JPG", "mediapath": "content/1742863099/media/P1040483.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040483.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040483.png", "name": "P1040483.JPG", "info": "", "timestamp": "2025-03-18T10:10:22", "latitude": 13.935617567741588, "longitude": -89.02606979012491, "attached_notes": []}, {"id": "P1040484.JPG", "mediapath": "content/1742863099/media/P1040484.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040484.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040484.png", "name": "P1040484.JPG", "info": "", "timestamp": "2025-03-18T10:10:31", "latitude": 13.93573867535387, "longitude": -89.02598395943643, "attached_notes": []}, {"id": "P1040485.JPG", "mediapath": "content/1742863099/media/P1040485.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040485.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040485.png", "name": "P1040485.JPG", "info": "", "timestamp": "2025-03-18T10:11:31", "latitude": 13.935409420496198, "longitude": -89.0263929963112, "attached_notes": []}, {"id": "P1040486.JPG", "mediapath": "content/1742863099/media/P1040486.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040486.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040486.png", "name": "P1040486.JPG", "info": "", "timestamp": "2025-03-18T10:11:47", "latitude": 13.935213994980847, "longitude": -89.02616769075395, "attached_notes": []}, {"id": "P1040487.JPG", "mediapath": "content/1742863099/media/P1040487.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040487.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040487.png", "name": "P1040487.JPG", "info": "", "timestamp": "2025-03-18T10:12:59", "latitude": 13.935064266081195, "longitude": -89.02610063552858, "attached_notes": []}, {"id": "P1040488.JPG", "mediapath": "content/1742863099/media/P1040488.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040488.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040488.png", "name": "P1040488.JPG", "info": "", "timestamp": "2025-03-18T10:13:46", "latitude": 13.935108533765984, "longitude": -89.0261033177376, "attached_notes": []}, {"id": "P1040490.JPG", "mediapath": "content/1742863099/media/P1040490.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040490.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040490.png", "name": "P1040490.JPG", "info": "", "timestamp": "2025-03-18T10:21:21", "latitude": 13.934328269262757, "longitude": -89.0248990058899, "attached_notes": []}, {"id": "P1040491.JPG", "mediapath": "content/1742863099/media/P1040491.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040491.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040491.png", "name": "P1040491.JPG", "info": "", "timestamp": "2025-03-18T10:22:14", "latitude": 13.93383351063139, "longitude": -89.02615427970888, "attached_notes": []}, {"id": "P1040492.JPG", "mediapath": "content/1742863099/media/P1040492.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040492.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040492.png", "name": "P1040492.JPG", "info": "", "timestamp": "2025-03-18T10:23:12", "latitude": 13.933789010470315, "longitude": -89.02563393115999, "attached_notes": []}, {"id": "P1040495.JPG", "mediapath": "content/1742863099/media/P1040495.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040495.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040495.png", "name": "P1040495.JPG", "info": "", "timestamp": "2025-03-18T10:26:31", "latitude": 13.9335677218696, "longitude": -89.02552127838136, "attached_notes": []}, {"id": "P1040496.JPG", "mediapath": "content/1742863099/media/P1040496.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040496.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040496.png", "name": "P1040496.JPG", "info": "", "timestamp": "2025-03-18T10:29:23", "latitude": 13.934255176472304, "longitude": -89.02581095695497, "attached_notes": []}, {"id": "P1040498.JPG", "mediapath": "content/1742863099/media/P1040498.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040498.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040498.png", "name": "P1040498.JPG", "info": "", "timestamp": "2025-03-18T10:56:37", "latitude": 13.936903648927546, "longitude": -89.02580156922342, "attached_notes": []}, {"id": "P1040499.JPG", "mediapath": "content/1742863099/media/P1040499.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040499.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040499.png", "name": "P1040499.JPG", "info": "", "timestamp": "2025-03-18T11:01:38", "latitude": 13.936882817238892, "longitude": -89.02586460113527, "attached_notes": []}, {"id": "P1040500.JPG", "mediapath": "content/1742863099/media/P1040500.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040500.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040500.png", "name": "P1040500.JPG", "info": "", "timestamp": "2025-03-18T11:36:13", "latitude": 13.936650349782107, "longitude": -89.02700722217561, "attached_notes": []}, {"id": "P1040501.JPG", "mediapath": "content/1742863099/media/P1040501.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040501.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040501.png", "name": "P1040501.JPG", "info": "", "timestamp": "2025-03-18T11:46:32", "latitude": 13.936890205266668, "longitude": -89.01392877101898, "attached_notes": []}, {"id": "P1040502.JPG", "mediapath": "content/1742863099/media/P1040502.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040502.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040502.png", "name": "P1040502.JPG", "info": "", "timestamp": "2025-03-18T11:50:05", "latitude": 13.937701946301418, "longitude": -89.01354521512987, "attached_notes": []}, {"id": "P1040504.JPG", "mediapath": "content/1742863099/media/P1040504.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040504.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040504.png", "name": "P1040504.JPG", "info": "", "timestamp": "2025-03-18T11:53:47", "latitude": 13.937270383276564, "longitude": -89.01325285434723, "attached_notes": []}, {"id": "P1040505.JPG", "mediapath": "content/1742863099/media/P1040505.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040505.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040505.png", "name": "P1040505.JPG", "info": "", "timestamp": "2025-03-18T11:56:07", "latitude": 13.937303210894434, "longitude": -89.01307046413423, "attached_notes": []}, {"id": "P1040507.JPG", "mediapath": "content/1742863099/media/P1040507.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040507.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040507.png", "name": "P1040507.JPG", "info": "", "timestamp": "2025-03-18T11:56:21", "latitude": 13.937266780093935, "longitude": -89.01307582855225, "attached_notes": []}, {"id": "P1040509.JPG", "mediapath": "content/1742863099/media/P1040509.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040509.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040509.png", "name": "P1040509.JPG", "info": "", "timestamp": "2025-03-18T12:01:09", "latitude": 13.937339641689194, "longitude": -89.01303961873056, "attached_notes": []}, {"id": "P1040512.JPG", "mediapath": "content/1742863099/media/P1040512.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040512.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040512.png", "name": "P1040512.JPG", "info": "", "timestamp": "2025-03-18T12:01:26", "latitude": 13.937331835090792, "longitude": -89.01311874389648, "attached_notes": []}, {"id": "P1040514.JPG", "mediapath": "content/1742863099/media/P1040514.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040514.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040514.png", "name": "P1040514.JPG", "info": "", "timestamp": "2025-03-18T12:06:08", "latitude": 13.937390384572288, "longitude": -89.01313215494157, "attached_notes": []}, {"id": "P1040515.JPG", "mediapath": "content/1742863099/media/P1040515.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040515.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040515.png", "name": "P1040515.JPG", "info": "", "timestamp": "2025-03-18T12:07:56", "latitude": 13.937431343610035, "longitude": -89.013209939003, "attached_notes": []}, {"id": "P1040516.JPG", "mediapath": "content/1742863099/media/P1040516.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040516.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040516.png", "name": "P1040516.JPG", "info": "", "timestamp": "2025-03-18T12:08:02", "latitude": 13.937326976914594, "longitude": -89.01307582855225, "attached_notes": []}, {"id": "P1040519.JPG", "mediapath": "content/1742863099/media/P1040519.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040519.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040519.png", "name": "P1040519.JPG", "info": "", "timestamp": "2025-03-18T12:49:49", "latitude": 13.888376586934298, "longitude": -88.9589421451092, "attached_notes": []}, {"id": "P1040520.JPG", "mediapath": "content/1742863099/media/P1040520.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040520.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040520.png", "name": "P1040520.JPG", "info": "", "timestamp": "2025-03-18T12:50:56", "latitude": 13.88806309606228, "longitude": -88.95905345678331, "attached_notes": []}, {"id": "P1040522.JPG", "mediapath": "content/1742863099/media/P1040522.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040522.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040522.png", "name": "P1040522.JPG", "info": "", "timestamp": "2025-03-18T12:55:31", "latitude": 13.8883365695405, "longitude": -88.9590507745743, "attached_notes": []}, {"id": "P1040523.JPG", "mediapath": "content/1742863099/media/P1040523.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040523.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040523.png", "name": "P1040523.JPG", "info": "", "timestamp": "2025-03-18T12:58:11", "latitude": 13.889044994573622, "longitude": -88.9590695500374, "attached_notes": []}, {"id": "P1040524.JPG", "mediapath": "content/1742863099/media/P1040524.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040524.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040524.png", "name": "P1040524.JPG", "info": "", "timestamp": "2025-03-18T12:59:29", "latitude": 13.888638339773108, "longitude": -88.95912185311319, "attached_notes": []}, {"id": "P1040525.JPG", "mediapath": "content/1742863099/media/P1040525.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040525.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040525.png", "name": "P1040525.JPG", "info": "", "timestamp": "2025-03-18T13:00:27", "latitude": 13.888850268099802, "longitude": -88.95914331078531, "attached_notes": []}, {"id": "P1040527.JPG", "mediapath": "content/1742863099/media/P1040527.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040527.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040527.png", "name": "P1040527.JPG", "info": "", "timestamp": "2025-03-18T13:02:26", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040528.JPG", "mediapath": "content/1742863099/media/P1040528.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040528.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040528.png", "name": "P1040528.JPG", "info": "", "timestamp": "2025-03-18T13:06:47", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040529.JPG", "mediapath": "content/1742863099/media/P1040529.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040529.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040529.png", "name": "P1040529.JPG", "info": "", "timestamp": "2025-03-18T13:07:32", "latitude": 13.890089410636374, "longitude": -88.95839631557466, "attached_notes": []}, {"id": "P1040531.JPG", "mediapath": "content/1742863099/media/P1040531.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040531.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040531.png", "name": "P1040531.JPG", "info": "", "timestamp": "2025-03-18T13:09:10", "latitude": 13.890432201898003, "longitude": -88.95847141742706, "attached_notes": []}, {"id": "P1040533.JPG", "mediapath": "content/1742863099/media/P1040533.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040533.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040533.png", "name": "P1040533.JPG", "info": "", "timestamp": "2025-03-18T13:12:12", "latitude": 13.890518224573114, "longitude": -88.95879328250885, "attached_notes": []}, {"id": "P1040534.JPG", "mediapath": "content/1742863099/media/P1040534.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040534.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040534.png", "name": "P1040534.JPG", "info": "", "timestamp": "2025-03-18T13:12:31", "latitude": 13.890398499133603, "longitude": -88.95892202854158, "attached_notes": []}, {"id": "P1040535.JPG", "mediapath": "content/1742863099/media/P1040535.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040535.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040535.png", "name": "P1040535.JPG", "info": "", "timestamp": "2025-03-18T13:12:40", "latitude": 13.890299595462977, "longitude": -88.95864844322205, "attached_notes": []}, {"id": "P1040536.JPG", "mediapath": "content/1742863099/media/P1040536.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040536.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040536.png", "name": "P1040536.JPG", "info": "", "timestamp": "2025-03-18T13:13:32", "latitude": 13.889839548316953, "longitude": -88.95901858806612, "attached_notes": []}, {"id": "P1040538.JPG", "mediapath": "content/1742863099/media/P1040538.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040538.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040538.png", "name": "P1040538.JPG", "info": "", "timestamp": "2025-03-18T13:21:40", "latitude": 13.888306265225712, "longitude": -88.95898103713989, "attached_notes": []}, {"id": "P1040541.JPG", "mediapath": "content/1742863099/media/P1040541.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040541.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040541.png", "name": "P1040541.JPG", "info": "", "timestamp": "2025-03-18T13:49:47", "latitude": 13.878164562451218, "longitude": -88.96806836128235, "attached_notes": []}, {"id": "P1040542.JPG", "mediapath": "content/1742863099/media/P1040542.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040542.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040542.png", "name": "P1040542.JPG", "info": "", "timestamp": "2025-03-18T13:56:05", "latitude": 13.876207199716955, "longitude": -88.96648049354555, "attached_notes": []}, {"id": "P1040543.JPG", "mediapath": "content/1742863099/media/P1040543.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040543.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040543.png", "name": "P1040543.JPG", "info": "", "timestamp": "2025-03-18T13:58:02", "latitude": 13.876228022811713, "longitude": -88.96601915359497, "attached_notes": []}, {"id": "P1040544.JPG", "mediapath": "content/1742863099/media/P1040544.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040544.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040544.png", "name": "P1040544.JPG", "info": "", "timestamp": "2025-03-18T14:07:32", "latitude": 13.878082361606841, "longitude": -88.96554708480836, "attached_notes": []}, {"id": "P1040545.JPG", "mediapath": "content/1742863099/media/P1040545.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040545.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040545.png", "name": "P1040545.JPG", "info": "", "timestamp": "2025-03-18T14:08:48", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040546.JPG", "mediapath": "content/1742863099/media/P1040546.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040546.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040546.png", "name": "P1040546.JPG", "info": "", "timestamp": "2025-03-18T14:10:59", "latitude": 13.878144830380378, "longitude": -88.96464586257935, "attached_notes": []}, {"id": "P1040547.JPG", "mediapath": "content/1742863099/media/P1040547.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040547.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040547.png", "name": "P1040547.JPG", "info": "", "timestamp": "2025-03-18T14:11:30", "latitude": 13.87766590268651, "longitude": -88.96417379379274, "attached_notes": []}, {"id": "P1040548.JPG", "mediapath": "content/1742863099/media/P1040548.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040548.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040548.png", "name": "P1040548.JPG", "info": "", "timestamp": "2025-03-18T14:17:08", "latitude": 13.875562773714707, "longitude": -88.96342277526857, "attached_notes": []}, {"id": "P1040549.JPG", "mediapath": "content/1742863099/media/P1040549.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040549.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040549.png", "name": "P1040549.JPG", "info": "", "timestamp": "2025-03-18T14:17:36", "latitude": 13.875546267230394, "longitude": -88.96337449550629, "attached_notes": []}, {"id": "P1040551.JPG", "mediapath": "content/1742863099/media/P1040551.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040551.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040551.png", "name": "P1040551.JPG", "info": "", "timestamp": "2025-03-18T14:25:34", "latitude": 13.876418715854069, "longitude": -88.963680267334, "attached_notes": []}, {"id": "P1040552.JPG", "mediapath": "content/1742863099/media/P1040552.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040552.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040552.png", "name": "P1040552.JPG", "info": "", "timestamp": "2025-03-18T14:25:39", "latitude": 13.876439538929818, "longitude": -88.96345496177675, "attached_notes": []}, {"id": "P1040553.JPG", "mediapath": "content/1742863099/media/P1040553.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040553.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040553.png", "name": "P1040553.JPG", "info": "", "timestamp": "2025-03-18T14:30:33", "latitude": 13.87726228924906, "longitude": -88.96338522434235, "attached_notes": []}, {"id": "P1040554.JPG", "mediapath": "content/1742863099/media/P1040554.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040554.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040554.png", "name": "P1040554.JPG", "info": "", "timestamp": "2025-03-18T14:31:04", "latitude": 13.87735599273441, "longitude": -88.96329939365388, "attached_notes": []}, {"id": "P1040555.JPG", "mediapath": "content/1742863099/media/P1040555.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040555.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040555.png", "name": "P1040555.JPG", "info": "", "timestamp": "2025-03-18T15:04:51", "latitude": 13.911159030094895, "longitude": -88.99088859558107, "attached_notes": []}, {"id": "P1040556.JPG", "mediapath": "content/1742863099/media/P1040556.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040556.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040556.png", "name": "P1040556.JPG", "info": "", "timestamp": "2025-03-18T15:05:02", "latitude": 13.894425015976923, "longitude": -89.00153160095215, "attached_notes": []}, {"id": "P1040559.JPG", "mediapath": "content/1742863099/media/P1040559.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040559.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040559.png", "name": "P1040559.JPG", "info": "", "timestamp": "2025-03-18T16:57:13", "latitude": 13.803524274924573, "longitude": -89.17759180068971, "attached_notes": []}, {"id": "P1040562.JPG", "mediapath": "content/1742863099/media/P1040562.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040562.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040562.png", "name": "P1040562.JPG", "info": "", "timestamp": "2025-03-19T14:49:27", "latitude": 13.719176373912749, "longitude": -89.73828345537187, "attached_notes": []}, {"id": "P1040563.JPG", "mediapath": "content/1742863099/media/P1040563.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040563.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040563.png", "name": "P1040563.JPG", "info": "", "timestamp": "2025-03-19T14:51:29", "latitude": 13.718737401832275, "longitude": -89.73901703953744, "attached_notes": []}, {"id": "P1040564.JPG", "mediapath": "content/1742863099/media/P1040564.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040564.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040564.png", "name": "P1040564.JPG", "info": "", "timestamp": "2025-03-19T14:51:51", "latitude": 13.718447640963321, "longitude": -89.7391551733017, "attached_notes": []}, {"id": "P1040565.JPG", "mediapath": "content/1742863099/media/P1040565.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040565.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040565.png", "name": "P1040565.JPG", "info": "", "timestamp": "2025-03-19T14:54:37", "latitude": 13.718921454217858, "longitude": -89.73986327648163, "attached_notes": []}, {"id": "P1040566.JPG", "mediapath": "content/1742863099/media/P1040566.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040566.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040566.png", "name": "P1040566.JPG", "info": "", "timestamp": "2025-03-19T14:54:46", "latitude": 13.718937082071077, "longitude": -89.73981499671937, "attached_notes": []}, {"id": "P1040567.JPG", "mediapath": "content/1742863099/media/P1040567.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040567.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040567.png", "name": "P1040567.JPG", "info": "", "timestamp": "2025-03-19T14:55:57", "latitude": 13.719890247406477, "longitude": -89.73970770835876, "attached_notes": []}, {"id": "P1040568.JPG", "mediapath": "content/1742863099/media/P1040568.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040568.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040568.png", "name": "P1040568.JPG", "info": "", "timestamp": "2025-03-19T14:57:18", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040569.JPG", "mediapath": "content/1742863099/media/P1040569.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040569.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040569.png", "name": "P1040569.JPG", "info": "", "timestamp": "2025-03-19T14:57:36", "latitude": 13.719280762834835, "longitude": -89.74012076854707, "attached_notes": []}, {"id": "P1040570.JPG", "mediapath": "content/1742863099/media/P1040570.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040570.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040570.png", "name": "P1040570.JPG", "info": "", "timestamp": "2025-03-19T14:59:28", "latitude": 13.718733788153665, "longitude": -89.74068939685823, "attached_notes": []}, {"id": "P1040571.JPG", "mediapath": "content/1742863099/media/P1040571.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040571.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040571.png", "name": "P1040571.JPG", "info": "", "timestamp": "2025-03-19T15:00:45", "latitude": 13.718348300469742, "longitude": -89.74071085453035, "attached_notes": []}, {"id": "P1040573.JPG", "mediapath": "content/1742863099/media/P1040573.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040573.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040573.png", "name": "P1040573.JPG", "info": "", "timestamp": "2025-03-19T15:01:33", "latitude": 13.718074426378294, "longitude": -89.74061965942384, "attached_notes": []}, {"id": "P1040574.JPG", "mediapath": "content/1742863099/media/P1040574.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040574.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040574.png", "name": "P1040574.JPG", "info": "", "timestamp": "2025-03-19T15:01:56", "latitude": 13.718045775207932, "longitude": -89.74058210849762, "attached_notes": []}, {"id": "P1040576.JPG", "mediapath": "content/1742863099/media/P1040576.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040576.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040576.png", "name": "P1040576.JPG", "info": "", "timestamp": "2025-03-19T15:03:13", "latitude": 13.717868658804491, "longitude": -89.74069207906724, "attached_notes": []}, {"id": "P1040577.JPG", "mediapath": "content/1742863099/media/P1040577.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040577.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040577.png", "name": "P1040577.JPG", "info": "", "timestamp": "2025-03-19T15:07:44", "latitude": 13.718519848580229, "longitude": -89.74190443754198, "attached_notes": []}, {"id": "P1040581.JPG", "mediapath": "content/1742863099/media/P1040581.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040581.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040581.png", "name": "P1040581.JPG", "info": "", "timestamp": "2025-03-19T15:12:31", "latitude": 13.719051658065402, "longitude": -89.74228799343109, "attached_notes": []}, {"id": "P1040583.JPG", "mediapath": "content/1742863099/media/P1040583.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040583.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040583.png", "name": "P1040583.JPG", "info": "", "timestamp": "2025-03-19T15:12:40", "latitude": 13.719291284900953, "longitude": -89.7423952817917, "attached_notes": []}, {"id": "P1040584.JPG", "mediapath": "content/1742863099/media/P1040584.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040584.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040584.png", "name": "P1040584.JPG", "info": "", "timestamp": "2025-03-19T15:13:27", "latitude": 13.71860626405808, "longitude": -89.742448925972, "attached_notes": []}, {"id": "P1040585.JPG", "mediapath": "content/1742863099/media/P1040585.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040585.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040585.png", "name": "P1040585.JPG", "info": "", "timestamp": "2025-03-19T15:14:52", "latitude": 13.719202755416747, "longitude": -89.74150478839876, "attached_notes": []}, {"id": "P1040586.JPG", "mediapath": "content/1742863099/media/P1040586.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040586.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040586.png", "name": "P1040586.JPG", "info": "", "timestamp": "2025-03-19T15:20:17", "latitude": 13.719504893365913, "longitude": -89.73967552185059, "attached_notes": []}, {"id": "P1040588.JPG", "mediapath": "content/1742863099/media/P1040588.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040588.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040588.png", "name": "P1040588.JPG", "info": "", "timestamp": "2025-03-19T15:24:51", "latitude": 13.718822709910755, "longitude": -89.73839342594147, "attached_notes": []}, {"id": "P1040590.JPG", "mediapath": "content/1742863099/media/P1040590.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040590.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040590.png", "name": "P1040590.JPG", "info": "", "timestamp": "2025-03-19T15:25:04", "latitude": 13.718702896284373, "longitude": -89.73845779895782, "attached_notes": []}, {"id": "P1040595.JPG", "mediapath": "content/1742863099/media/P1040595.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040595.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040595.png", "name": "P1040595.JPG", "info": "", "timestamp": "2025-03-19T15:38:50", "latitude": 13.710976530353566, "longitude": -89.73029851913454, "attached_notes": []}, {"id": "P1040602.JPG", "mediapath": "content/1742863099/media/P1040602.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040602.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040602.png", "name": "P1040602.JPG", "info": "", "timestamp": "2025-03-19T16:00:49", "latitude": 13.762732736063299, "longitude": -89.54762935638429, "attached_notes": []}, {"id": "P1040603.JPG", "mediapath": "content/1742863099/media/P1040603.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040603.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040603.png", "name": "P1040603.JPG", "info": "", "timestamp": "2025-03-19T16:01:09", "latitude": 13.759567925010426, "longitude": -89.54269409179689, "attached_notes": []}, {"id": "P1040605.JPG", "mediapath": "content/1742863099/media/P1040605.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040605.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040605.png", "name": "P1040605.JPG", "info": "", "timestamp": "2025-03-19T16:02:33", "latitude": 13.75510649861011, "longitude": -89.52956199645996, "attached_notes": []}, {"id": "P1040606.JPG", "mediapath": "content/1742863099/media/P1040606.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040606.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040606.png", "name": "P1040606.JPG", "info": "", "timestamp": "2025-03-19T16:05:54", "latitude": 13.74934030190714, "longitude": -89.49870586395265, "attached_notes": []}, {"id": "P1040608.JPG", "mediapath": "content/1742863099/media/P1040608.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040608.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040608.png", "name": "P1040608.JPG", "info": "", "timestamp": "2025-03-19T16:10:46", "latitude": null, "longitude": null, "attached_notes": []}, {"id": "P1040609.JPG", "mediapath": "content/1742863099/media/P1040609.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040609.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040609.png", "name": "P1040609.JPG", "info": "", "timestamp": "2025-03-19T16:10:58", "latitude": 13.745688018791526, "longitude": -89.50086772441865, "attached_notes": []}, {"id": "P1040610.JPG", "mediapath": "content/1742863099/media/P1040610.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040610.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040610.png", "name": "P1040610.JPG", "info": "", "timestamp": "2025-03-19T16:11:59", "latitude": 13.74547431824526, "longitude": -89.50084894895555, "attached_notes": []}, {"id": "P1040611.JPG", "mediapath": "content/1742863099/media/P1040611.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040611.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040611.png", "name": "P1040611.JPG", "info": "", "timestamp": "2025-03-19T16:12:23", "latitude": 13.745500571967192, "longitude": -89.50059950351717, "attached_notes": []}, {"id": "P1040613.JPG", "mediapath": "content/1742863099/media/P1040613.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040613.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040613.png", "name": "P1040613.JPG", "info": "", "timestamp": "2025-03-20T07:29:33", "latitude": 13.819508639319155, "longitude": -89.29481506347658, "attached_notes": []}, {"id": "P1040615.JPG", "mediapath": "content/1742863099/media/P1040615.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040615.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040615.png", "name": "P1040615.JPG", "info": "", "timestamp": "2025-03-20T08:57:24", "latitude": 13.994731391831348, "longitude": -89.55630362033844, "attached_notes": []}, {"id": "P1040616.JPG", "mediapath": "content/1742863099/media/P1040616.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040616.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040616.png", "name": "P1040616.JPG", "info": "", "timestamp": "2025-03-20T08:57:42", "latitude": 13.994825110880194, "longitude": -89.55623656511308, "attached_notes": []}, {"id": "P1040618.JPG", "mediapath": "content/1742863099/media/P1040618.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040618.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040618.png", "name": "P1040618.JPG", "info": "", "timestamp": "2025-03-20T09:00:14", "latitude": 13.994898160315259, "longitude": -89.5560421049595, "attached_notes": []}, {"id": "P1040619.JPG", "mediapath": "content/1742863099/media/P1040619.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040619.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040619.png", "name": "P1040619.JPG", "info": "", "timestamp": "2025-03-20T09:04:15", "latitude": 13.995158488092816, "longitude": -89.55653965473176, "attached_notes": []}, {"id": "P1040620.JPG", "mediapath": "content/1742863099/media/P1040620.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040620.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040620.png", "name": "P1040620.JPG", "info": "", "timestamp": "2025-03-20T09:05:29", "latitude": 13.995188426070845, "longitude": -89.55669924616817, "attached_notes": []}, {"id": "P1040621.JPG", "mediapath": "content/1742863099/media/P1040621.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040621.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040621.png", "name": "P1040621.JPG", "info": "", "timestamp": "2025-03-20T09:06:38", "latitude": 13.994982767184267, "longitude": -89.55643370747568, "attached_notes": []}, {"id": "P1040622.JPG", "mediapath": "content/1742863099/media/P1040622.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040622.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040622.png", "name": "P1040622.JPG", "info": "", "timestamp": "2025-03-20T09:06:53", "latitude": 13.995086691414196, "longitude": -89.5567971467972, "attached_notes": []}, {"id": "P1040625.JPG", "mediapath": "content/1742863099/media/P1040625.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040625.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040625.png", "name": "P1040625.JPG", "info": "", "timestamp": "2025-03-20T09:16:12", "latitude": 13.995356239885362, "longitude": -89.5585459470749, "attached_notes": []}, {"id": "P1040626.JPG", "mediapath": "content/1742863099/media/P1040626.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040626.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040626.png", "name": "P1040626.JPG", "info": "", "timestamp": "2025-03-20T09:23:15", "latitude": 13.995970599443174, "longitude": -89.56076949834825, "attached_notes": []}, {"id": "P1040627.JPG", "mediapath": "content/1742863099/media/P1040627.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040627.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040627.png", "name": "P1040627.JPG", "info": "", "timestamp": "2025-03-20T09:30:21", "latitude": 13.992281283976531, "longitude": -89.56424832344057, "attached_notes": []}, {"id": "P1040628.JPG", "mediapath": "content/1742863099/media/P1040628.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040628.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040628.png", "name": "P1040628.JPG", "info": "", "timestamp": "2025-03-20T09:45:55", "latitude": 13.989916805382073, "longitude": -89.56313252449036, "attached_notes": []}, {"id": "P1040630.JPG", "mediapath": "content/1742863099/media/P1040630.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040630.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040630.png", "name": "P1040630.JPG", "info": "", "timestamp": "2025-03-20T09:52:47", "latitude": 13.993185846323202, "longitude": -89.56072926521303, "attached_notes": []}, {"id": "P1040631.JPG", "mediapath": "content/1742863099/media/P1040631.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040631.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040631.png", "name": "P1040631.JPG", "info": "", "timestamp": "2025-03-20T09:59:55", "latitude": 13.993154627496173, "longitude": -89.56140518188478, "attached_notes": []}, {"id": "P1040633.JPG", "mediapath": "content/1742863099/media/P1040633.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040633.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040633.png", "name": "P1040633.JPG", "info": "", "timestamp": "2025-03-20T10:09:10", "latitude": 13.9867467169605, "longitude": -89.56011772155763, "attached_notes": []}, {"id": "P1040634.JPG", "mediapath": "content/1742863099/media/P1040634.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040634.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040634.png", "name": "P1040634.JPG", "info": "", "timestamp": "2025-03-20T10:15:04", "latitude": 13.988401615254126, "longitude": -89.55738186836244, "attached_notes": []}, {"id": "P1040636.JPG", "mediapath": "content/1742863099/media/P1040636.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040636.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040636.png", "name": "P1040636.JPG", "info": "", "timestamp": "2025-03-20T10:19:07", "latitude": 13.988193867953145, "longitude": -89.55667376518251, "attached_notes": []}, {"id": "P1040637.JPG", "mediapath": "content/1742863099/media/P1040637.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040637.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040637.png", "name": "P1040637.JPG", "info": "", "timestamp": "2025-03-20T10:29:27", "latitude": 13.993868696328146, "longitude": -89.55569073557857, "attached_notes": []}, {"id": "P1040638.JPG", "mediapath": "content/1742863099/media/P1040638.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040638.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040638.png", "name": "P1040638.JPG", "info": "", "timestamp": "2025-03-20T10:30:43", "latitude": 13.994291736714644, "longitude": -89.55567866563798, "attached_notes": []}, {"id": "P1040639.JPG", "mediapath": "content/1742863099/media/P1040639.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040639.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040639.png", "name": "P1040639.JPG", "info": "", "timestamp": "2025-03-20T10:35:44", "latitude": 13.99501507367796, "longitude": -89.55599516630174, "attached_notes": []}, {"id": "P1040641.JPG", "mediapath": "content/1742863099/media/P1040641.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040641.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040641.png", "name": "P1040641.JPG", "info": "", "timestamp": "2025-03-20T11:46:29", "latitude": 13.979948833092834, "longitude": -89.67480897903442, "attached_notes": []}, {"id": "P1040642.JPG", "mediapath": "content/1742863099/media/P1040642.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040642.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040642.png", "name": "P1040642.JPG", "info": "", "timestamp": "2025-03-20T11:56:47", "latitude": 13.979706172845976, "longitude": -89.674276560545, "attached_notes": []}, {"id": "P1040645.JPG", "mediapath": "content/1742863099/media/P1040645.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040645.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040645.png", "name": "P1040645.JPG", "info": "", "timestamp": "2025-03-20T11:58:29", "latitude": 13.97954757595919, "longitude": -89.67461585998537, "attached_notes": []}, {"id": "P1040646.JPG", "mediapath": "content/1742863099/media/P1040646.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040646.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040646.png", "name": "P1040646.JPG", "info": "", "timestamp": "2025-03-20T11:58:55", "latitude": 13.97949810984727, "longitude": -89.67438519001009, "attached_notes": []}, {"id": "P1040647.JPG", "mediapath": "content/1742863099/media/P1040647.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040647.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040647.png", "name": "P1040647.JPG", "info": "", "timestamp": "2025-03-20T11:59:23", "latitude": 13.979259203346249, "longitude": -89.67432081699373, "attached_notes": []}, {"id": "P1040648.JPG", "mediapath": "content/1742863099/media/P1040648.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040648.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040648.png", "name": "P1040648.JPG", "info": "", "timestamp": "2025-03-20T12:00:46", "latitude": 13.979284776032724, "longitude": -89.67462658882143, "attached_notes": []}, {"id": "P1040649.JPG", "mediapath": "content/1742863099/media/P1040649.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040649.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040649.png", "name": "P1040649.JPG", "info": "", "timestamp": "2025-03-20T13:08:23", "latitude": 13.982487094502977, "longitude": -89.67862844467163, "attached_notes": []}, {"id": "P1040650.JPG", "mediapath": "content/1742863099/media/P1040650.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040650.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040650.png", "name": "P1040650.JPG", "info": "", "timestamp": "2025-03-20T13:08:59", "latitude": 13.983341723706376, "longitude": -89.67605352401735, "attached_notes": []}, {"id": "P1040651.JPG", "mediapath": "content/1742863099/media/P1040651.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040651.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040651.png", "name": "P1040651.JPG", "info": "", "timestamp": "2025-03-20T13:10:01", "latitude": 13.982300346802091, "longitude": -89.67382192611696, "attached_notes": []}, {"id": "P1040653.JPG", "mediapath": "content/1742863099/media/P1040653.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040653.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040653.png", "name": "P1040653.JPG", "info": "", "timestamp": "2025-03-20T15:03:03", "latitude": 13.832915171500526, "longitude": -89.25814390182497, "attached_notes": []}, {"id": "P1040654.JPG", "mediapath": "content/1742863099/media/P1040654.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040654.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040654.png", "name": "P1040654.JPG", "info": "", "timestamp": "2025-03-21T08:40:11", "latitude": 13.659842832609447, "longitude": -88.7140417098999, "attached_notes": []}, {"id": "P1040655.JPG", "mediapath": "content/1742863099/media/P1040655.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040655.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040655.png", "name": "P1040655.JPG", "info": "", "timestamp": "2025-03-21T08:48:33", "latitude": 13.65653374094601, "longitude": -88.70756149291994, "attached_notes": []}, {"id": "P1040657.JPG", "mediapath": "content/1742863099/media/P1040657.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040657.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040657.png", "name": "P1040657.JPG", "info": "", "timestamp": "2025-03-21T09:50:00", "latitude": 13.610180902382629, "longitude": -88.57203483581543, "attached_notes": []}, {"id": "P1040658.JPG", "mediapath": "content/1742863099/media/P1040658.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040658.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040658.png", "name": "P1040658.JPG", "info": "", "timestamp": "2025-03-21T09:52:45", "latitude": 13.60951335495433, "longitude": -88.57319355010988, "attached_notes": []}, {"id": "P1040661.JPG", "mediapath": "content/1742863099/media/P1040661.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040661.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040661.png", "name": "P1040661.JPG", "info": "", "timestamp": "2025-03-21T11:46:20", "latitude": 13.476979466363272, "longitude": -88.33316802978517, "attached_notes": []}, {"id": "P1040662.JPG", "mediapath": "content/1742863099/media/P1040662.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040662.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040662.png", "name": "P1040662.JPG", "info": "", "timestamp": "2025-03-21T11:48:27", "latitude": 13.476152915302993, "longitude": -88.33132266998292, "attached_notes": []}, {"id": "P1040663.JPG", "mediapath": "content/1742863099/media/P1040663.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040663.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040663.png", "name": "P1040663.JPG", "info": "", "timestamp": "2025-03-21T11:48:44", "latitude": 13.476257004579475, "longitude": -88.33185911178589, "attached_notes": []}, {"id": "P1040664.JPG", "mediapath": "content/1742863099/media/P1040664.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040664.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040664.png", "name": "P1040664.JPG", "info": "", "timestamp": "2025-03-21T11:56:24", "latitude": 13.477111149521274, "longitude": -88.31600189208986, "attached_notes": []}, {"id": "P1040665.JPG", "mediapath": "content/1742863099/media/P1040665.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040665.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040665.png", "name": "P1040665.JPG", "info": "", "timestamp": "2025-03-21T11:56:38", "latitude": 13.486962767286704, "longitude": -88.31634521484376, "attached_notes": []}, {"id": "P1040666.JPG", "mediapath": "content/1742863099/media/P1040666.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040666.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040666.png", "name": "P1040666.JPG", "info": "", "timestamp": "2025-03-21T11:56:54", "latitude": 13.476659595560006, "longitude": -88.31956386566164, "attached_notes": []}, {"id": "P1040667.JPG", "mediapath": "content/1742863099/media/P1040667.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040667.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040667.png", "name": "P1040667.JPG", "info": "", "timestamp": "2025-03-21T11:57:53", "latitude": 13.475911108360052, "longitude": -88.32921981811525, "attached_notes": []}, {"id": "P1040668.JPG", "mediapath": "content/1742863099/media/P1040668.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040668.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040668.png", "name": "P1040668.JPG", "info": "", "timestamp": "2025-03-21T11:57:59", "latitude": 13.475473585322797, "longitude": -88.32905888557436, "attached_notes": []}, {"id": "P1040669.JPG", "mediapath": "content/1742863099/media/P1040669.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040669.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040669.png", "name": "P1040669.JPG", "info": "", "timestamp": "2025-03-21T12:16:52", "latitude": 13.481546272071029, "longitude": -88.33329677581787, "attached_notes": []}, {"id": "P1040670.JPG", "mediapath": "content/1742863099/media/P1040670.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040670.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040670.png", "name": "P1040670.JPG", "info": "", "timestamp": "2025-03-21T12:20:00", "latitude": 13.482390955449807, "longitude": -88.33344697952272, "attached_notes": []}, {"id": "P1040672.JPG", "mediapath": "content/1742863099/media/P1040672.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040672.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040672.png", "name": "P1040672.JPG", "info": "", "timestamp": "2025-03-21T12:23:55", "latitude": 13.480700291638005, "longitude": -88.33288908004762, "attached_notes": []}, {"id": "P1040675.JPG", "mediapath": "content/1742863099/media/P1040675.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040675.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040675.png", "name": "P1040675.JPG", "info": "", "timestamp": "2025-03-21T12:29:44", "latitude": 13.483164842579473, "longitude": -88.33424091339113, "attached_notes": []}, {"id": "P1040676.JPG", "mediapath": "content/1742863099/media/P1040676.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040676.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040676.png", "name": "P1040676.JPG", "info": "", "timestamp": "2025-03-21T12:35:58", "latitude": 13.486854624404922, "longitude": -88.33505630493164, "attached_notes": []}, {"id": "P1040677.JPG", "mediapath": "content/1742863099/media/P1040677.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040677.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040677.png", "name": "P1040677.JPG", "info": "", "timestamp": "2025-03-22T08:24:38", "latitude": 13.339323286668538, "longitude": -87.8422111272812, "attached_notes": []}, {"id": "P1040681.JPG", "mediapath": "content/1742863099/media/P1040681.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040681.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040681.png", "name": "P1040681.JPG", "info": "", "timestamp": "2025-03-22T08:45:23", "latitude": 13.340904647910612, "longitude": -87.8429299592972, "attached_notes": []}, {"id": "P1040683.JPG", "mediapath": "content/1742863099/media/P1040683.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040683.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040683.png", "name": "P1040683.JPG", "info": "", "timestamp": "2025-03-22T08:46:07", "latitude": 13.340732917302265, "longitude": -87.84261345863342, "attached_notes": []}, {"id": "P1040684.JPG", "mediapath": "content/1742863099/media/P1040684.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040684.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040684.png", "name": "P1040684.JPG", "info": "", "timestamp": "2025-03-22T08:52:41", "latitude": 13.3395165721658, "longitude": -87.84176051616669, "attached_notes": []}, {"id": "P1040685.JPG", "mediapath": "content/1742863099/media/P1040685.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040685.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040685.png", "name": "P1040685.JPG", "info": "", "timestamp": "2025-03-22T08:55:14", "latitude": 13.338654588997182, "longitude": -87.84336146431635, "attached_notes": []}, {"id": "P1040686.JPG", "mediapath": "content/1742863099/media/P1040686.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040686.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040686.png", "name": "P1040686.JPG", "info": "", "timestamp": "2025-03-22T09:00:16", "latitude": 13.335811946242623, "longitude": -87.84160494804382, "attached_notes": []}, {"id": "P1040687.JPG", "mediapath": "content/1742863099/media/P1040687.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040687.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040687.png", "name": "P1040687.JPG", "info": "", "timestamp": "2025-03-22T09:07:35", "latitude": 13.335407526827018, "longitude": -87.84009218215944, "attached_notes": []}, {"id": "P1040689.JPG", "mediapath": "content/1742863099/media/P1040689.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040689.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040689.png", "name": "P1040689.JPG", "info": "", "timestamp": "2025-03-22T09:40:25", "latitude": 13.292148603703497, "longitude": -87.83438444137575, "attached_notes": []}, {"id": "P1040690.JPG", "mediapath": "content/1742863099/media/P1040690.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040690.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040690.png", "name": "P1040690.JPG", "info": "", "timestamp": "2025-03-22T09:40:38", "latitude": 13.3178344625358, "longitude": -87.7635955810547, "attached_notes": []}, {"id": "P1040691.JPG", "mediapath": "content/1742863099/media/P1040691.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040691.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040691.png", "name": "P1040691.JPG", "info": "", "timestamp": "2025-03-22T09:41:22", "latitude": 13.289093171855294, "longitude": -87.7529525756836, "attached_notes": []}, {"id": "P1040692.JPG", "mediapath": "content/1742863099/media/P1040692.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040692.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040692.png", "name": "P1040692.JPG", "info": "", "timestamp": "2025-03-22T09:43:46", "latitude": 13.396653699817678, "longitude": -87.76805877685548, "attached_notes": []}, {"id": "P1040694.JPG", "mediapath": "content/1742863099/media/P1040694.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040694.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040694.png", "name": "P1040694.JPG", "info": "", "timestamp": "2025-03-22T09:48:09", "latitude": 13.293151094533176, "longitude": -87.83379435539247, "attached_notes": []}, {"id": "P1040695.JPG", "mediapath": "content/1742863099/media/P1040695.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040695.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040695.png", "name": "P1040695.JPG", "info": "", "timestamp": "2025-03-22T09:49:04", "latitude": 13.333474384179842, "longitude": -87.81835556030275, "attached_notes": []}, {"id": "P1040698.JPG", "mediapath": "content/1742863099/media/P1040698.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040698.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040698.png", "name": "P1040698.JPG", "info": "", "timestamp": "2025-03-22T09:59:29", "latitude": 13.293320081257445, "longitude": -87.83479213714601, "attached_notes": []}, {"id": "P1040700.JPG", "mediapath": "content/1742863099/media/P1040700.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040700.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040700.png", "name": "P1040700.JPG", "info": "", "timestamp": "2025-03-22T10:05:16", "latitude": 13.295752869802074, "longitude": -87.82205700874329, "attached_notes": []}, {"id": "P1040701.JPG", "mediapath": "content/1742863099/media/P1040701.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040701.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040701.png", "name": "P1040701.JPG", "info": "", "timestamp": "2025-03-22T10:05:25", "latitude": 13.295721537454062, "longitude": -87.82159566879274, "attached_notes": []}, {"id": "P1040702.JPG", "mediapath": "content/1742863099/media/P1040702.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040702.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040702.png", "name": "P1040702.JPG", "info": "", "timestamp": "2025-03-22T11:03:23", "latitude": 13.170646135071827, "longitude": -88.0671961605549, "attached_notes": []}, {"id": "P1040704.JPG", "mediapath": "content/1742863099/media/P1040704.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040704.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040704.png", "name": "P1040704.JPG", "info": "", "timestamp": "2025-03-22T11:05:06", "latitude": 13.170729730893605, "longitude": -88.06702315807344, "attached_notes": []}, {"id": "P1040705.JPG", "mediapath": "content/1742863099/media/P1040705.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040705.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040705.png", "name": "P1040705.JPG", "info": "", "timestamp": "2025-03-22T11:05:58", "latitude": 13.170635327870889, "longitude": -88.06451797485353, "attached_notes": []}, {"id": "P1040706.JPG", "mediapath": "content/1742863099/media/P1040706.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040706.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040706.png", "name": "P1040706.JPG", "info": "", "timestamp": "2025-03-22T11:06:34", "latitude": 13.170848770039376, "longitude": -88.06687831878664, "attached_notes": []}, {"id": "P1040707.JPG", "mediapath": "content/1742863099/media/P1040707.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040707.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040707.png", "name": "P1040707.JPG", "info": "", "timestamp": "2025-03-22T11:06:49", "latitude": 13.170717021156916, "longitude": -88.06713581085206, "attached_notes": []}, {"id": "P1040708.JPG", "mediapath": "content/1742863099/media/P1040708.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040708.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040708.png", "name": "P1040708.JPG", "info": "", "timestamp": "2025-03-22T11:13:59", "latitude": 13.1704975820525, "longitude": -88.06682467460634, "attached_notes": []}, {"id": "P1040709.JPG", "mediapath": "content/1742863099/media/P1040709.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040709.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040709.png", "name": "P1040709.JPG", "info": "", "timestamp": "2025-03-22T11:14:03", "latitude": 13.170445334617696, "longitude": -88.0667495727539, "attached_notes": []}, {"id": "P1040716.JPG", "mediapath": "content/1742863099/media/P1040716.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040716.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040716.png", "name": "P1040716.JPG", "info": "", "timestamp": "2025-03-22T12:22:28", "latitude": 13.351106413243688, "longitude": -88.24832439422609, "attached_notes": []}, {"id": "P1040717.JPG", "mediapath": "content/1742863099/media/P1040717.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040717.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040717.png", "name": "P1040717.JPG", "info": "", "timestamp": "2025-03-22T12:27:38", "latitude": 13.35116906359182, "longitude": -88.2465434074402, "attached_notes": []}, {"id": "P1040718.JPG", "mediapath": "content/1742863099/media/P1040718.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040718.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040718.png", "name": "P1040718.JPG", "info": "", "timestamp": "2025-03-22T12:27:51", "latitude": 13.35119036449894, "longitude": -88.24501991271973, "attached_notes": []}, {"id": "P1040719.JPG", "mediapath": "content/1742863099/media/P1040719.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040719.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040719.png", "name": "P1040719.JPG", "info": "", "timestamp": "2025-03-22T14:04:33", "latitude": 13.503598269683675, "longitude": -88.87142568826677, "attached_notes": []}, {"id": "P1040721.JPG", "mediapath": "content/1742863099/media/P1040721.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040721.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040721.png", "name": "P1040721.JPG", "info": "", "timestamp": "2025-03-22T15:34:29", "latitude": 13.459836836326321, "longitude": -89.06221389770509, "attached_notes": []}, {"id": "P1040722.JPG", "mediapath": "content/1742863099/media/P1040722.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040722.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040722.png", "name": "P1040722.JPG", "info": "", "timestamp": "2025-03-23T09:25:04", "latitude": 13.71627983533926, "longitude": -89.27420496940614, "attached_notes": []}, {"id": "P1040723.JPG", "mediapath": "content/1742863099/media/P1040723.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040723.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040723.png", "name": "P1040723.JPG", "info": "", "timestamp": "2025-03-23T10:21:03", "latitude": 13.7167698436492, "longitude": -89.2745053768158, "attached_notes": []}, {"id": "P1040725.JPG", "mediapath": "content/1742863099/media/P1040725.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040725.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040725.png", "name": "P1040725.JPG", "info": "", "timestamp": "2025-03-23T11:46:30", "latitude": 13.686690163061801, "longitude": -89.25426006317139, "attached_notes": []}, {"id": "P1040726.JPG", "mediapath": "content/1742863099/media/P1040726.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040726.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040726.png", "name": "P1040726.JPG", "info": "", "timestamp": "2025-03-23T11:47:49", "latitude": 13.686383375869058, "longitude": -89.25320863723755, "attached_notes": []}, {"id": "P1040727.JPG", "mediapath": "content/1742863099/media/P1040727.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040727.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040727.png", "name": "P1040727.JPG", "info": "", "timestamp": "2025-03-23T11:48:10", "latitude": 13.686175795510264, "longitude": -89.25288140773775, "attached_notes": []}, {"id": "P1040729.JPG", "mediapath": "content/1742863099/media/P1040729.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040729.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040729.png", "name": "P1040729.JPG", "info": "", "timestamp": "2025-03-23T12:13:06", "latitude": 13.69046899563966, "longitude": -89.25408840179445, "attached_notes": []}, {"id": "P1040730.JPG", "mediapath": "content/1742863099/media/P1040730.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040730.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040730.png", "name": "P1040730.JPG", "info": "", "timestamp": "2025-03-23T12:19:26", "latitude": 13.693964872392003, "longitude": -89.25533294677734, "attached_notes": []}, {"id": "P1040731.JPG", "mediapath": "content/1742863099/media/P1040731.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040731.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040731.png", "name": "P1040731.JPG", "info": "", "timestamp": "2025-03-23T12:21:50", "latitude": 13.69373837008747, "longitude": -89.25311207771303, "attached_notes": []}, {"id": "P1040732.JPG", "mediapath": "content/1742863099/media/P1040732.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040732.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040732.png", "name": "P1040732.JPG", "info": "", "timestamp": "2025-03-23T12:25:04", "latitude": 13.694882421071094, "longitude": -89.25423860549927, "attached_notes": []}, {"id": "P1040734.JPG", "mediapath": "content/1742863099/media/P1040734.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040734.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040734.png", "name": "P1040734.JPG", "info": "", "timestamp": "2025-03-23T12:31:35", "latitude": 13.69232269502081, "longitude": -89.25453901290894, "attached_notes": []}, {"id": "P1040736.JPG", "mediapath": "content/1742863099/media/P1040736.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040736.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040736.png", "name": "P1040736.JPG", "info": "", "timestamp": "2025-03-23T12:37:01", "latitude": 13.686827032287068, "longitude": -89.2512345314026, "attached_notes": []}, {"id": "P1040738.JPG", "mediapath": "content/1742863099/media/P1040738.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040738.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040738.png", "name": "P1040738.JPG", "info": "", "timestamp": "2025-03-23T14:52:51", "latitude": 13.704401751402072, "longitude": -89.24087315797807, "attached_notes": []}, {"id": "P1040739.JPG", "mediapath": "content/1742863099/media/P1040739.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040739.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040739.png", "name": "P1040739.JPG", "info": "", "timestamp": "2025-03-23T14:53:05", "latitude": 13.705257042951647, "longitude": -89.24177169799806, "attached_notes": []}, {"id": "P1040740.JPG", "mediapath": "content/1742863099/media/P1040740.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040740.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040740.png", "name": "P1040740.JPG", "info": "", "timestamp": "2025-03-23T14:53:28", "latitude": 13.706398134972671, "longitude": -89.24280166625978, "attached_notes": []}, {"id": "P1040743.JPG", "mediapath": "content/1742863099/media/P1040743.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040743.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040743.png", "name": "P1040743.JPG", "info": "", "timestamp": "2025-03-23T14:55:05", "latitude": 13.70445427293251, "longitude": -89.24089998006822, "attached_notes": []}, {"id": "P1040744.JPG", "mediapath": "content/1742863099/media/P1040744.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040744.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040744.png", "name": "P1040744.JPG", "info": "", "timestamp": "2025-03-23T15:36:38", "latitude": 13.704417390771928, "longitude": -89.2408061027527, "attached_notes": []}, {"id": "P1040746.JPG", "mediapath": "content/1742863099/media/P1040746.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040746.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040746.png", "name": "P1040746.JPG", "info": "", "timestamp": "2025-03-24T11:42:36", "latitude": 13.445144144350097, "longitude": -89.0547037124634, "attached_notes": []}, {"id": "P1040747.JPG", "mediapath": "content/1742863099/media/P1040747.JPG", "thumbbig": "content/1742863099/thumbs/ui/P1040747.JPG", "thumbsmall": "content/1742863099/thumbs/map/P1040747.png", "name": "P1040747.JPG", "info": "", "timestamp": "2025-03-24T23:19:49", "latitude": 35.21025878232678, "longitude": -80.94898223876955, "attached_notes": []}], "notes": []}}} \ No newline at end of file
diff --git a/collections_noimgs.json b/collections_noimgs.json
new file mode 100644
index 0000000..035fade
--- /dev/null
+++ b/collections_noimgs.json
@@ -0,0 +1 @@
+{"last_modified": "PLACEHOLDER", "collections": {"1742863099": {"id" : "1742863099", "title": "El Salvador", "subtitle": "March 2025 trip to El Salvador", "info": "Additional information", "owner": "john@gmail.com", "editors": ["fred@gmail.com", "mike@gmail.com"], "public": false, "photos": []}}} \ No newline at end of file
diff --git a/content/profile_pictures/placeholder b/content/profile_pictures/placeholder
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/content/profile_pictures/placeholder
diff --git a/datatypes.py b/datatypes.py
new file mode 100644
index 0000000..9eac1e7
--- /dev/null
+++ b/datatypes.py
@@ -0,0 +1,13 @@
+from flask_login import UserMixin
+from . import db
+
+class User(UserMixin):
+ email = ""
+ password = ""
+ name = ""
+ id = ""
+ def __init__(self, email, password, name):
+ self.email = email
+ self.password = password
+ self.name = name
+ self.id = email
diff --git a/db.py b/db.py
new file mode 100644
index 0000000..18b2d2f
--- /dev/null
+++ b/db.py
@@ -0,0 +1,506 @@
+# external libraries
+from PIL import Image
+import exif
+
+# core libraries
+import os.path
+from os import mkdir
+import json
+from datetime import datetime
+from time import time, time_ns
+import subprocess
+
+# internal code
+from .datatypes import User
+
+collections = { "last_queried" : {}, "collections" : {} }
+users = {}
+
+THUMBNAIL_SIZE_MAP = (60, 45)
+THUMBNAIL_SIZE_GRD = (120, 120)
+
+# run upon server startup
+def startup():
+ if not os.path.exists("users.json"):
+ initialize_users()
+ load_users()
+
+
+#
+# Collections-related functions
+#
+
+
+# save collections DB to disk
+def save_collections(specific_collection_id=None):
+ if specific_collection_id:
+ with open(f"content/{specific_collection_id}/collection.json", "w") as f:
+ json.dump(collections["collections"][specific_collection_id], f)
+ return
+
+ for collection_id, collection in collections["collections"].items():
+ with open(f"content/{collection_id}/collection.json", "w") as f:
+ json.dump(collection, f)
+
+# load collection from disk
+# collection_id | str | collection to load
+# RETURNS True if collection was loaded, False otherwise
+def load_collection(collection_id):
+ global collections
+ if os.path.exists(f"content/{collection_id}/collection.json"):
+ with open(f"content/{collection_id}/collection.json", "r") as f:
+ collections["collections"][collection_id] = json.load(f)
+ collections["last_queried"][collection_id] = time()
+ return True
+ else:
+ return False
+
+
+def unload_idle_collections():
+ to_remove = []
+ for collection_id, age in collections["last_queried"].items():
+ if (time() - age) > 300: # 5 minutes of no contact
+ to_remove.append(collection_id)
+ for collection_id in to_remove:
+ del collections["last_queried"][collection_id]
+ del collections["collections"][collection_id]
+
+# create an empty collection with placeholder information
+# owner_id | str
+def create_collection(owner_id):
+ global collections
+ collection_id = str(time_ns())
+ if collection_id in collections["collections"]:
+ collection_id += "_"
+ collections["collections"][collection_id] = \
+ { "id" : collection_id,
+ "title" : "Title",
+ "subtitle" : "Subtitle",
+ "info" : "Additional information",
+ "default_view" : [ 0, 0, 15], # lat, long, zoom
+ "last_edited" : time(),
+ "owner" : owner_id,
+ "editors" : [],
+ "viewers" : [],
+ "public" : False,
+ "media" : [],
+ "notes" : [],
+ "routes" : []
+ }
+ mkdir("content/"+collection_id)
+ mkdir("content/"+collection_id+"/thumbs")
+ mkdir("content/"+collection_id+"/thumbs/map")
+ mkdir("content/"+collection_id+"/thumbs/ui")
+ mkdir("content/"+collection_id+"/media")
+ unload_idle_collections()
+ save_collections(collection_id)
+
+# find collection by collection id
+# collection_id | int | the collection id which identifies the desired collection
+# RETURNS: None if no such collection, otherwise returns the collection
+def get_collection(collection_id):
+ if collection_id not in collections["collections"]:
+ if not load_collection(collection_id):
+ return None
+
+ collections["last_queried"][collection_id] = time()
+ unload_idle_collections()
+
+ return collections["collections"][collection_id]
+
+# get collections as a list rather than a dictionary
+# RETURNS: collections as a list
+def get_collection_list():
+ return [ coll for coll_id, coll in collections['collections'].items() ]
+
+
+# set collection to either public or private
+# collection_id | str
+# public | bool
+# RETURNS False if no such collection, otherwise True
+def set_collection_public(collection_id, public):
+ collection = get_collection(collection_id)
+ if not collection:
+ return False
+ collection["public"] = public
+ collection["last_edited"] = time()
+ return True
+
+# set collection info fields (title, subtitle, info)
+# collection_id | str
+# edits_dict | dict
+# RETURNS False if collection not found, otherwise True
+def set_collection_info(collection_id, edits_dict):
+ collection = get_collection(collection_id)
+ if not collection:
+ return False
+
+ for key, value in edits_dict.items():
+ if key in ["title", "subtitle", "info"]:
+ collection[key] = value
+ collection["last_edited"] = time()
+
+ return True
+
+# whether the given user can edit the given collection
+# collection_id | str
+# user_email | str
+# RETURNS: True/False
+def validate_user(collection_id, user_email):
+ collection = get_collection(collection_id)
+ if not collection or user_email not in users:
+ return False
+ if (user_email not in collection["editors"]) and (user_email != collection["owner"]):
+ return False
+ return True
+
+# set the user permissions for a given collection
+# collection_id | str
+# user_email | str
+# perm | str | invalid permission removes permissions from user
+# RETURNS False if invalid command, otherwise True in case of successful change
+def set_user_permissions(collection_id, user_email, perm):
+ collection = get_collection(collection_id)
+ if not collection:
+ return False
+
+ collection["last_edited"] = time()
+
+ # reset user perms
+ while user_email in collection["viewers"]:
+ collection["viewers"].remove(user_email)
+ while user_email in collection["editors"]:
+ collection["editors"].remove(user_email)
+
+ # set user perms to specified value
+ if perm == "viewer":
+ collection["viewers"].append(user_email)
+ elif perm == "editor":
+ collection["editors"].append(user_email)
+
+ return True
+
+
+#
+# User-related functions
+#
+
+# if no user DB exists, create an empty one
+def initialize_users():
+ global users
+ users = {}
+ save_users()
+
+# save users DB to disk
+# *filename | str | filename to save to
+def save_users(filename="users.json"):
+ users_j = {}
+ # convert User objects to JSON
+ for user_email, user in users.items():
+ users_j[user_email] = {"email" : user.email,
+ "password" : user.password,
+ "name" : user.name}
+
+ # save JSON-ified user DB
+ with open(filename, "w") as f:
+ json.dump(users_j, f)
+
+# load collections DB from disk
+# *filename | str | filename to load from
+def load_users(filename="users.json"):
+ global users
+ users = {} # clear user DB
+
+ # load from file
+ with open(filename, "r") as f:
+ users_j = json.load(f)
+
+ # convert from pure JSON to User objects
+ for user_email, user_info in users_j.items():
+ users[user_email] = User(email=user_info["email"],
+ password=user_info["password"],
+ name=user_info["name"])
+
+# returns User class by id (email)
+# user_id | str | user email by which the user is identified
+# RETURNS: User object if user exists, otherwise None
+def get_user(user_id):
+ if user_id not in users:
+ return None
+ return users[user_id]
+
+# add a new user
+# email | str | user's email
+# password | str | user's password (hashed)
+# name | str | user's real/username
+# RETURNS: False if user already exists, True if user has been newly added
+def add_user(email, password, name):
+ global users
+ if email in users:
+ return False
+ users[email] = User(email=email, password=password, name=name)
+ save_users()
+ return True
+
+# returns User class by id (email)
+# user_id | str | user email by which the user is identified
+# RETURNS: True if user was deleted, False if not found
+def delete_user(user_id):
+ global users
+ if user_id not in users:
+ return False
+ del users[user_id]
+ save_users()
+ return True
+
+
+#
+# Media-related functions
+#
+
+# adds media to specified collection. info is taken from exif unless file_info is specified
+# collection_id | str | collection photo should be added to
+# file | file | file uploaded via flask
+# *file_info | json | dictionary describing information about the file, optional
+def add_media(collection_id, file, file_info=None):
+ filename = file.filename
+
+ # find valid filename
+ filename_components = file.filename.split(".")
+ extension = filename_components[-1].lower()
+ i = 1
+ while os.path.exists("content/"+collection_id+"/media/"+filename):
+ filename = ".".join(filename_components[:-1]) + " (" + str(i) + ")." + extension
+ i += 1
+
+ # save file
+ file.save(os.path.join("content/"+collection_id+"/media/", filename))
+ print(filename)
+ filename_thumb = ".".join(filename.split(".")[:-1])+".png"
+
+ # generate thumbnails
+
+ if extension in ["mov", "mp4", "webm"]: # generate thumbnail image
+ is_video = True
+ video_path = os.path.join("content/"+collection_id+"/media/", filename)
+ temp_img_path = os.path.join("content/"+collection_id+"/media/", filename+".jpg")
+ subprocess.call(['ffmpeg', '-i', video_path, '-ss', '00:00:00.000', '-vframes', '1', temp_img_path])
+ photo_temp = Image.open(os.path.join("content/"+collection_id+"/media/", filename+".jpg"))
+ photo = photo_temp.copy()
+ photo_temp.close()
+ os.remove(temp_img_path)
+ else:
+ is_video = False
+ photo = Image.open(os.path.join("content/"+collection_id+"/media/", filename_thumb))
+
+
+ photo.thumbnail(THUMBNAIL_SIZE_GRD)
+
+ if is_video:
+ photo_resize = Image.new("RGBA", THUMBNAIL_SIZE_GRD, (255, 255, 255, 0))
+ old_w, old_h = photo.size
+ if old_w == THUMBNAIL_SIZE_GRD[0]:
+ photo_resize.paste(photo, (0, int((THUMBNAIL_SIZE_GRD[1] - old_h)/2), old_w, int((THUMBNAIL_SIZE_GRD[1] + old_h)/2)))
+ else:
+ photo_resize.paste(photo, (int((THUMBNAIL_SIZE_GRD[0] - old_w)/2), 0, int((THUMBNAIL_SIZE_GRD[0] + old_w)/2), old_h))
+ video_icon = Image.open("static/img/video.png")
+ video_icon = video_icon.convert("RGBA")
+ video_icon = video_icon.resize(THUMBNAIL_SIZE_GRD)
+ photo_resize.paste(video_icon, (0, 0, THUMBNAIL_SIZE_GRD[0], THUMBNAIL_SIZE_GRD[1]), video_icon )
+ photo = photo_resize
+
+ photo.save(os.path.join("content/"+collection_id+"/thumbs/ui/", filename_thumb), quality=90)
+ photo.thumbnail(THUMBNAIL_SIZE_MAP)
+
+ old_w, old_h = photo.size
+ photo_resize = Image.new("RGBA", THUMBNAIL_SIZE_MAP, (255, 255, 255, 0))
+ if old_w == THUMBNAIL_SIZE_MAP[0]:
+ photo_resize.paste(photo, (0, int((THUMBNAIL_SIZE_MAP[1] - old_h)/2), old_w, int((THUMBNAIL_SIZE_MAP[1] + old_h)/2)))
+ else:
+ photo_resize.paste(photo, (int((THUMBNAIL_SIZE_MAP[0] - old_w)/2), 0, int((THUMBNAIL_SIZE_MAP[0] + old_w)/2), old_h))
+
+
+ photo_resize.save(os.path.join("content/"+collection_id+"/thumbs/map/", filename_thumb), quality=90)
+
+ photo.close()
+ photo_resize.close()
+
+
+
+ # create data structure
+ media = {
+ "id" : filename, # does not change
+ "mediapath" : os.path.join("content/"+collection_id+"/media/", filename),
+ "thumbbig" : os.path.join("content/"+collection_id+"/thumbs/ui/", filename_thumb),
+ "thumbsmall" : os.path.join("content/"+collection_id+"/thumbs/map/", filename_thumb),
+ "name" : filename,
+ "info" : "",
+ "timestamp" : "",
+ "latitude" : None,
+ "longitude" : None,
+ "attached_notes" : [],
+ "is_video" : is_video
+ }
+
+ # attempt to add info via EXIF
+ with open(os.path.join("content/"+collection_id+"/media/", filename), "rb") as f:
+ try:
+ img_exif = exif.Image(f)
+ if img_exif.has_exif:
+ attribs = img_exif.list_all()
+ if 'datetime_original' in attribs:
+ timestamp = img_exif.datetime_original.split(" ")
+ timestamp[0] = timestamp[0].replace(":", "-")
+ timestamp = "T".join(timestamp)
+ media["timestamp"] = timestamp
+ if 'gps_latitude' in attribs:
+ lat = sum([ val / (60**i) for i, val in enumerate(img_exif.gps_latitude) ])
+ long = sum([ val / (60**i) for i, val in enumerate(img_exif.gps_longitude) ])
+ media["latitude"] = lat
+ media["longitude"] = long
+ except Exception as e:
+ print(e)
+
+ # manually add file info, if provided
+ if file_info != None:
+ for key, value in file_info.items():
+ media[key] = value
+
+ # add data struct to collection
+ collection = get_collection(collection_id)
+ collections["last_queried"][collection_id] = time()
+ collection["media"].append(media)
+ collection["last_edited"] = time()
+
+ save_collections()
+
+# performs add_media for every file in files
+# collection_id | str
+# files | [file]
+def add_media_bulk(collection_id, files):
+ for file in files:
+ add_media(collection_id, file)
+
+# edit media JSON by collection id + media_id
+# collection_id | str
+# media_id | str
+# attr_dict | dict
+# RETURNS: status
+def edit_media(collection_id, media_id, attr_dict):
+ collection = get_collection(collection_id)
+
+ # verify media exists
+ if not collection:
+ return {"status" : f"No such collection '{collection_id}'."}
+
+ for index, media in enumerate(collection["media"]):
+ if media["id"] == media_id:
+ # update media
+ for key, value in attr_dict.items():
+ if key in collection["media"][index]:
+ collection["media"][index][key] = value
+ collection["last_edited"] = time()
+ collections["last_queried"][collection_id] = time()
+ save_collections()
+ return {"status" : "OK"}
+
+ return {"status" : f"No such media '{media_id}'"}
+
+
+# delte media by collection id + media_id
+# collection_id | str
+# media_id | str
+# RETURNS: status
+def delete_media(collection_id, media_id):
+ collection = get_collection(collection_id)
+
+ # verify media exists
+ if not collection:
+ return {"status" : f"No such collection '{collection_id}'."}
+
+ attached_notes = []
+ for index, media in enumerate(collection["media"]):
+ if media["id"] == media_id:
+ # clean up files
+ files = ["mediapath", "thumbbig", "thumbsmall"]
+ for file in files:
+ if os.path.exists(media[file]):
+ os.remove(media[file]) # remove media + thumbnails
+ attached_notes = media["attached_notes"]
+ collection["media"].pop(index)
+ break
+ else:
+ return {"status" : f"No such media '{media_id}'"}
+
+
+
+ for attached_note in attached_notes: # remove references to media from any notes
+ for index, note in enumerate(collection['notes']):
+ if note["id"] == attached_note:
+ if media_id in note["attached_media"]:
+ note["attached_media"].pop(note["attached_media"].index(media_id))
+
+
+
+ collection["last_edited"] = time()
+ save_collections()
+
+ return {"status" : "OK"}
+
+
+def add_note(collection_id, note_info=None):
+ collection = get_collection(collection_id)
+
+ # verify media exists
+ if not collection:
+ return {"status" : f"No such collection '{collection_id}'."}
+
+ note = { "id" : str(time_ns()),
+ "title" : "",
+ "subtitle" : "",
+ "datetime_start" : "",
+ "datetime_end" : "",
+ "content" : "",
+ "attached_media" : []
+ }
+
+ collection["notes"].append(note)
+ collection["last_edited"] = time()
+ save_collections()
+
+ return {"status" : "OK"}
+
+def edit_note(collection_id, note_id, attr_dict):
+ collection = get_collection(collection_id)
+
+ # verify media exists
+ if not collection:
+ return {"status" : f"No such collection '{collection_id}'."}
+
+ for index, note in enumerate(collection["notes"]):
+ if note["id"] == note_id:
+ # update media
+ for key, value in attr_dict.items():
+ if key in collection["notes"][index]:
+ collection["notes"][index][key] = value
+ collection["last_edited"] = time()
+ collections["last_queried"][collection_id] = time()
+ save_collections()
+ return {"status" : "OK"}
+
+ return {"status" : f"No such media '{note_id}'"}
+
+def delete_note(collection_id, note_id):
+ collection = get_collection(collection_id)
+
+ if not collection:
+ return False
+
+ for index, note in enumerate(collection["notes"]):
+ if note["id"] == note_id:
+ collection["notes"].pop(index)
+ collection["last_edited"] = time()
+ collections["last_queried"][collection_id] = time()
+ return True
+
+ return False \ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..ae620f4
--- /dev/null
+++ b/main.py
@@ -0,0 +1,170 @@
+## hosts photocosm web server via flask
+
+# external libraries
+from flask import Blueprint, Flask, request, redirect, render_template, jsonify, flash, url_for, send_from_directory
+from flask_login import current_user, login_required
+
+# core libraries
+import os.path
+
+# internal code
+from . import db
+
+main = Blueprint('main', __name__)
+
+# main page
+# GET = get main page
+@main.route("/", methods=['GET'])
+def home():
+ return render_template("home.html", collections=db.get_collection_list())
+
+# editor page
+@main.route("/editor", methods=['GET'])
+def editor():
+ collection_id = request.args.get("collection")
+ if request.method == "GET":
+ collection = db.get_collection(collection_id)
+ if not collection:
+ flash("No such collection exists!")
+ return redirect(url_for('main.home'))
+ if not current_user.is_authenticated:
+ flash("You must be logged in to edit collections!")
+ return redirect(url_for('auth.login'))
+ if not db.validate_user(collection_id, current_user.email):
+ flash("You do not have permission to edit this collection!")
+ return redirect(url_for('main.home'))
+ return render_template("editor.html", collection_id=collection_id)
+
+# get latest collection data (in editor)
+@main.route("/editorgetlatestinfo", methods=["POST"])
+@login_required
+def editor_request_update():
+ content = request.get_json()
+ if not content or ("collection" not in content) or ("last_updated" not in content):
+ return jsonify({"status" : "ERROR: Invalid request."})
+
+ collection_id = content["collection"]
+ client_last_update = content["last_updated"]
+ collection = db.get_collection(collection_id)
+
+ if not collection:
+ return jsonify({"status" : "ERROR: No such collection."})
+ if not current_user.is_authenticated:
+ return jsonify({"status" : "ERROR: You must be logged in to edit collections."})
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"status" : "ERROR: You do not have permission to edit this collection."})
+
+ if collection["last_edited"] > client_last_update:
+ data = {"status" : "OK", "update" : True, "collection" : collection}
+ return jsonify(data)
+
+ return jsonify({"status" : "OK", "update" : False})
+
+# upload media to collection from editor
+@main.route("/editormediaupload", methods=['POST'])
+@login_required
+def file_upload():
+ collection_id = request.form.get('collection_id')
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"STATUS" : "PERMISSION DENIED"})
+
+ files = request.files.getlist("files")
+ db.add_media_bulk(collection_id ,files)
+
+ return jsonify({"STATUS" : "OK"})
+
+@main.route("/editoreditmedia", methods=['POST'])
+@login_required
+def edit_media():
+ content = request.get_json()
+ if not content or ("collection" not in content):
+ return jsonify({"status" : "ERROR: Invalid request."})
+
+ collection_id = content["collection"]
+ collection = db.get_collection(collection_id)
+
+ if not collection:
+ return jsonify({"status" : "ERROR: No such collection."})
+ if not current_user.is_authenticated:
+ return jsonify({"status" : "ERROR: You must be logged in to edit collections."})
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"status" : "ERROR: You do not have permission to edit this collection."})
+
+ for edit in content["edits"]:
+ db.edit_media(collection_id, edit["media_id"], edit["changes"])
+
+ return jsonify({"status" : "OK", "update" : False})
+
+@main.route("/editorshare", methods=['POST'])
+@login_required
+def share():
+ content = request.get_json()
+ if not content or ("collection" not in content):
+ return jsonify({"status" : "ERROR: Invalid request."})
+
+ collection_id = content["collection"]
+ collection = db.get_collection(collection_id)
+
+ if not collection:
+ return jsonify({"status" : "ERROR: No such collection."})
+ if not current_user.is_authenticated:
+ return jsonify({"status" : "ERROR: You must be logged in to edit collections."})
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"status" : "ERROR: You do not have permission to edit this collection."})
+
+ if "user_email" in content:
+ db.set_user_permissions(collection_id, content["user_email"], content["perm"])
+ if "public" in content:
+ db.set_collection_public(collection_id, content["public"])
+
+ return jsonify({"status" : "OK", "update" : False})
+
+@main.route("/editorcollectioninfo", methods=['POST'])
+@login_required
+def edit_collection_info():
+ content = request.get_json()
+ if not content or ("collection" not in content) or ("edits" not in content):
+ return jsonify({"status" : "ERROR: Invalid request."})
+
+ collection_id = content["collection"]
+ collection = db.get_collection(collection_id)
+
+ if not collection:
+ return jsonify({"status" : "ERROR: No such collection."})
+ if not current_user.is_authenticated:
+ return jsonify({"status" : "ERROR: You must be logged in to edit collections."})
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"status" : "ERROR: You do not have permission to edit this collection."})
+
+ db.set_collection_info(collection_id, content["edits"])
+
+ return jsonify({"status" : "OK", "update" : False})
+
+@main.route("/editordeletemedia", methods=['POST'])
+@login_required
+def delete_media():
+ content = request.get_json()
+ print(content)
+ if not content or ("collection" not in content):
+ return jsonify({"status" : "ERROR: Invalid request."})
+
+ collection_id = content["collection"]
+ collection = db.get_collection(collection_id)
+
+ if not collection:
+ return jsonify({"status" : "ERROR: No such collection."})
+ if not current_user.is_authenticated:
+ return jsonify({"status" : "ERROR: You must be logged in to edit collections."})
+ if not db.validate_user(collection_id, current_user.email):
+ return jsonify({"status" : "ERROR: You do not have permission to edit this collection."})
+
+ for media_id in content["to_be_removed"]:
+ print(db.delete_media(collection_id, media_id))
+
+ return jsonify({"status" : "OK", "update" : False})
+
+# access media content
+@main.route('/content/<path:path>')
+def send_content(path):
+ # Using request args for path will expose you to directory traversal attacks
+ return send_from_directory('content', path) \ No newline at end of file
diff --git a/static/css/editor.css b/static/css/editor.css
new file mode 100644
index 0000000..add8792
--- /dev/null
+++ b/static/css/editor.css
@@ -0,0 +1,325 @@
+
+@font-face {
+ font-family: "HWYGOTH";
+ src: url("/static/fonts/HWYGOTH.ttf");
+}
+* {
+ font-family:HWYGOTH;
+}
+#map { height: 100%; }
+* {
+box-sizing: border-box;
+}
+html{
+ padding:0;
+ margin: 0;
+ height:100%;
+}
+
+body{
+ padding:0;
+ margin: 0;
+ height: 100vh;
+ max-height:100vh;
+ margin:0px;
+ display:flex;
+ flex-direction: column;
+}
+.page-container {
+ display: flex;
+ height:100%;
+ flex-grow:0;
+}
+.page-container > div{
+ padding: 8px;
+ }
+.left-column {
+ /* flex:0.75 1 auto; */
+ flex-basis:50%;
+ display: flex;
+ flex-direction: column;
+ gap: 5px;
+ max-height:100%;
+ min-height:0;
+}
+.tab-section {
+ flex: 1 1 50%;
+ display: flex;
+ flex-direction: column;
+ min-height:0;
+}
+.media-preview {
+ display: none;
+ flex: 0 0 50%;
+ overflow:hidden;
+ justify-content: center;
+ align-items: center;
+ min-height: 0;
+}
+.right-column {
+ /* flex:0.25 1 auto; */
+ flex-grow:0;
+ flex-basis:50%;
+ display: flex;
+ flex-direction: column;
+ gap: 5px;
+}
+.right-column > div{
+ border: 3px double lightgray;
+ padding: 0px;
+}
+.map-frame {
+ /* flex:0.2 1 auto; */
+ flex-grow:1.0;
+}
+.content-info {
+ flex-basis:40%;
+}
+
+.leaflet-popup-content {
+ color: black;
+}
+.leaflet-control-layers-overlays > label > span > span {
+ color: black;
+}
+
+
+.tab-header {
+overflow: hidden;
+border: 1px solid #ccc;
+background-color: #f1f1f1;
+}
+
+.tab-header button {
+background-color: inherit;
+float: left;
+border: none;
+outline: none;
+padding: 14px 16px;
+transition: 0.3s;
+margin:0;
+}
+
+.tab-header button:hover {
+background-color: #ddd;
+cursor: pointer;
+}
+
+.tab-header button.active {
+background-color: #ccc;
+}
+
+.tab-content {
+ display: none;
+ margin:0;
+ height: 0;
+ flex-grow: 1;
+ min-height: 0;
+ border: 1px solid #ccc;
+ border-top: none;
+}
+
+.media-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
+ gap: 15px;
+ padding: 20px;
+ height: 100%;
+}
+
+.media {
+ position: relative;
+ border-radius: 5px;
+ aspect-ratio: 1;
+ transition: transform 0.2s, box-shadow 0.2s;
+ user-select: none;
+}
+
+.media > img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ display: block;
+}
+
+.media p {
+ margin-top:0;
+ margin-bottom:0;
+ text-align:center;
+ overflow:hidden;
+ text-overflow:ellipsis;
+}
+
+.media::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border: 4px solid transparent;
+ transition: border-color 0.2s;
+}
+
+.media.selected::after {
+ border-color: #4285f4;
+}
+
+.media:hover {
+ transform: scale(1.03);
+ cursor: pointer;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
+}
+
+.media-timestamp {
+ color: grey;
+ font-size: 10pt;
+}
+
+.leaflet-container.crosshair-cursor-enabled {
+ cursor:crosshair;
+}
+
+.no-hover{
+ pointer-events: none;
+}
+
+.content-info-edit {
+ display: grid;
+ grid-template-columns: max-content 1fr;
+ gap: 8px 12px;
+ align-items: center;
+}
+
+.content-info-edit-label {
+ margin-left: 10px;
+}
+
+.content-info-edit-field {
+ margin-right: 10px;
+}
+
+.delete-button {
+ color:brown;
+ text-align: right;
+ margin-right: 10px;
+ margin-top: 5px;
+ text-decoration: underline;
+}
+
+.delete-button:hover {
+ cursor: pointer;
+}
+
+#preview-img {
+ border-radius: 5px;
+ cursor: pointer;
+ transition: 0.3s;
+}
+
+#preview-img:hover {opacity: 0.7;}
+
+/* The Modal (background) */
+.modal {
+ display: none; /* Hidden by default */
+ position: fixed; /* Stay in place */
+ z-index: 10000; /* Sit on top */
+ padding-top: 3%;
+ left: 0;
+ top: 0;
+ width: 100%; /* Full width */
+ height: 100%; /* Full height */
+ overflow: auto; /* Enable scroll if needed */
+ background-color: rgb(0,0,0); /* Fallback color */
+ background-color: rgba(0,0,0,0.9); /* Black w/ opacity */
+}
+
+/* Modal Content (image) */
+.modal-content {
+ margin: auto;
+ display: block;
+ width: auto;
+ height: auto;
+ max-width: 95%;
+ max-height: 95%;
+}
+
+/* Add Animation */
+.modal-content, #caption {
+ -webkit-animation-name: zoom;
+ -webkit-animation-duration: 0.6s;
+ animation-name: zoom;
+ animation-duration: 0.6s;
+}
+
+@-webkit-keyframes zoom {
+ from {-webkit-transform:scale(0)}
+ to {-webkit-transform:scale(1)}
+}
+
+@keyframes zoom {
+ from {transform:scale(0)}
+ to {transform:scale(1)}
+}
+
+/* 100% Image Width on Smaller Screens */
+@media only screen and (max-width: 700px){
+ .modal-content {
+ width: 100%;
+ }
+}
+
+.share-box {
+ display: flex;
+ flex-direction:column;
+ width:30%;
+ min-width: 500px;
+ height: 70%;
+ background-color: white;
+ margin:auto;
+ border: 3px double lightgray;
+}
+
+.user-share-section {
+ display: grid;
+ grid-template-columns: 65% 15% 10%;
+ grid-auto-rows: min-content;
+ row-gap: 10px;
+ column-gap: 5%;
+ padding: 15px;
+ flex: 1;
+ margin:10px;
+ border: 3px double lightgray;
+ width:auto;
+ overflow-y:auto;
+ overflow-x:hidden;
+}
+
+.user-unshare-button {
+ cursor: pointer;
+ color: red;
+ text-decoration: underline;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.collection-box {
+ display: flex;
+ flex-direction:column;
+ width:30%;
+ min-width: 500px;
+ height: 20%;
+ background-color: white;
+ margin:auto;
+ border: 3px double lightgray;
+}
+
+.tab-filters {
+ padding-top:10px;
+ padding-bottom:10px;
+ border-bottom: 1px solid #ccc;
+ display: flex;
+ flex-direction: row;
+ padding-left:15px;
+ padding-right:15px;
+} \ No newline at end of file
diff --git a/static/css/leaflet.css b/static/css/leaflet.css
new file mode 100644
index 0000000..2961b76
--- /dev/null
+++ b/static/css/leaflet.css
@@ -0,0 +1,661 @@
+/* required styles */
+
+.leaflet-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-container,
+.leaflet-pane > svg,
+.leaflet-pane > canvas,
+.leaflet-zoom-box,
+.leaflet-image-layer,
+.leaflet-layer {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+.leaflet-container {
+ overflow: hidden;
+ }
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -webkit-user-drag: none;
+ }
+/* Prevents IE11 from highlighting tiles in blue */
+.leaflet-tile::selection {
+ background: transparent;
+}
+/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
+.leaflet-safari .leaflet-tile {
+ image-rendering: -webkit-optimize-contrast;
+ }
+/* hack that prevents hw layers "stretching" when loading new tiles */
+.leaflet-safari .leaflet-tile-container {
+ width: 1600px;
+ height: 1600px;
+ -webkit-transform-origin: 0 0;
+ }
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ display: block;
+ }
+/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
+/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
+.leaflet-container .leaflet-overlay-pane svg {
+ max-width: none !important;
+ max-height: none !important;
+ }
+.leaflet-container .leaflet-marker-pane img,
+.leaflet-container .leaflet-shadow-pane img,
+.leaflet-container .leaflet-tile-pane img,
+.leaflet-container img.leaflet-image-layer,
+.leaflet-container .leaflet-tile {
+ max-width: none !important;
+ max-height: none !important;
+ width: auto;
+ padding: 0;
+ }
+
+.leaflet-container img.leaflet-tile {
+ /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
+ mix-blend-mode: plus-lighter;
+}
+
+.leaflet-container.leaflet-touch-zoom {
+ -ms-touch-action: pan-x pan-y;
+ touch-action: pan-x pan-y;
+ }
+.leaflet-container.leaflet-touch-drag {
+ -ms-touch-action: pinch-zoom;
+ /* Fallback for FF which doesn't support pinch-zoom */
+ touch-action: none;
+ touch-action: pinch-zoom;
+}
+.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+.leaflet-container {
+ -webkit-tap-highlight-color: transparent;
+}
+.leaflet-container a {
+ -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
+}
+.leaflet-tile {
+ filter: inherit;
+ visibility: hidden;
+ }
+.leaflet-tile-loaded {
+ visibility: inherit;
+ }
+.leaflet-zoom-box {
+ width: 0;
+ height: 0;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ z-index: 800;
+ }
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
+.leaflet-overlay-pane svg {
+ -moz-user-select: none;
+ }
+
+.leaflet-pane { z-index: 400; }
+
+.leaflet-tile-pane { z-index: 200; }
+.leaflet-overlay-pane { z-index: 400; }
+.leaflet-shadow-pane { z-index: 500; }
+.leaflet-marker-pane { z-index: 600; }
+.leaflet-tooltip-pane { z-index: 650; }
+.leaflet-popup-pane { z-index: 700; }
+
+.leaflet-map-pane canvas { z-index: 100; }
+.leaflet-map-pane svg { z-index: 200; }
+
+.leaflet-vml-shape {
+ width: 1px;
+ height: 1px;
+ }
+.lvml {
+ behavior: url(#default#VML);
+ display: inline-block;
+ position: absolute;
+ }
+
+
+/* control positioning */
+
+.leaflet-control {
+ position: relative;
+ z-index: 800;
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+.leaflet-top,
+.leaflet-bottom {
+ position: absolute;
+ z-index: 1000;
+ pointer-events: none;
+ }
+.leaflet-top {
+ top: 0;
+ }
+.leaflet-right {
+ right: 0;
+ }
+.leaflet-bottom {
+ bottom: 0;
+ }
+.leaflet-left {
+ left: 0;
+ }
+.leaflet-control {
+ float: left;
+ clear: both;
+ }
+.leaflet-right .leaflet-control {
+ float: right;
+ }
+.leaflet-top .leaflet-control {
+ margin-top: 10px;
+ }
+.leaflet-bottom .leaflet-control {
+ margin-bottom: 10px;
+ }
+.leaflet-left .leaflet-control {
+ margin-left: 10px;
+ }
+.leaflet-right .leaflet-control {
+ margin-right: 10px;
+ }
+
+
+/* zoom and fade animations */
+
+.leaflet-fade-anim .leaflet-popup {
+ opacity: 0;
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+ opacity: 1;
+ }
+.leaflet-zoom-animated {
+ -webkit-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+ }
+svg.leaflet-zoom-animated {
+ will-change: transform;
+}
+
+.leaflet-zoom-anim .leaflet-zoom-animated {
+ -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
+ -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
+ transition: transform 0.25s cubic-bezier(0,0,0.25,1);
+ }
+.leaflet-zoom-anim .leaflet-tile,
+.leaflet-pan-anim .leaflet-tile {
+ -webkit-transition: none;
+ -moz-transition: none;
+ transition: none;
+ }
+
+.leaflet-zoom-anim .leaflet-zoom-hide {
+ visibility: hidden;
+ }
+
+
+/* cursors */
+
+.leaflet-interactive {
+ cursor: pointer;
+ }
+.leaflet-grab {
+ cursor: -webkit-grab;
+ cursor: -moz-grab;
+ cursor: grab;
+ }
+.leaflet-crosshair,
+.leaflet-crosshair .leaflet-interactive {
+ cursor: crosshair;
+ }
+.leaflet-popup-pane,
+.leaflet-control {
+ cursor: auto;
+ }
+.leaflet-dragging .leaflet-grab,
+.leaflet-dragging .leaflet-grab .leaflet-interactive,
+.leaflet-dragging .leaflet-marker-draggable {
+ cursor: move;
+ cursor: -webkit-grabbing;
+ cursor: -moz-grabbing;
+ cursor: grabbing;
+ }
+
+/* marker & overlays interactivity */
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-image-layer,
+.leaflet-pane > svg path,
+.leaflet-tile-container {
+ pointer-events: none;
+ }
+
+.leaflet-marker-icon.leaflet-interactive,
+.leaflet-image-layer.leaflet-interactive,
+.leaflet-pane > svg path.leaflet-interactive,
+svg.leaflet-image-layer.leaflet-interactive path {
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+
+/* visual tweaks */
+
+.leaflet-container {
+ background: #ddd;
+ outline-offset: 1px;
+ }
+.leaflet-container a {
+ color: #0078A8;
+ }
+.leaflet-zoom-box {
+ border: 2px dotted #38f;
+ background: rgba(255,255,255,0.5);
+ }
+
+
+/* general typography */
+.leaflet-container {
+ font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-size: 0.75rem;
+ line-height: 1.5;
+ }
+
+
+/* general toolbar styles */
+
+.leaflet-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ }
+.leaflet-bar a {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 26px;
+ height: 26px;
+ line-height: 26px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+ }
+.leaflet-bar a,
+.leaflet-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.leaflet-bar a:hover,
+.leaflet-bar a:focus {
+ background-color: #f4f4f4;
+ }
+.leaflet-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.leaflet-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+ }
+.leaflet-bar a.leaflet-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
+
+.leaflet-touch .leaflet-bar a {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ }
+.leaflet-touch .leaflet-bar a:first-child {
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ }
+.leaflet-touch .leaflet-bar a:last-child {
+ border-bottom-left-radius: 2px;
+ border-bottom-right-radius: 2px;
+ }
+
+/* zoom control */
+
+.leaflet-control-zoom-in,
+.leaflet-control-zoom-out {
+ font: bold 18px 'Lucida Console', Monaco, monospace;
+ text-indent: 1px;
+ }
+
+.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
+ font-size: 22px;
+ }
+
+
+/* layers control */
+
+.leaflet-control-layers {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+ background: #fff;
+ border-radius: 5px;
+ }
+.leaflet-control-layers-toggle {
+ background-image: url(images/layers.png);
+ width: 36px;
+ height: 36px;
+ }
+.leaflet-retina .leaflet-control-layers-toggle {
+ background-image: url(images/layers-2x.png);
+ background-size: 26px 26px;
+ }
+.leaflet-touch .leaflet-control-layers-toggle {
+ width: 44px;
+ height: 44px;
+ }
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+ display: none;
+ }
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.leaflet-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ color: #333;
+ background: #fff;
+ }
+.leaflet-control-layers-scrollbar {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-right: 5px;
+ }
+.leaflet-control-layers-selector {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.leaflet-control-layers label {
+ display: block;
+ font-size: 13px;
+ font-size: 1.08333em;
+ }
+.leaflet-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
+/* Default icon URLs */
+.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
+ background-image: url(images/marker-icon.png);
+ }
+
+
+/* attribution and scale controls */
+
+.leaflet-container .leaflet-control-attribution {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.8);
+ margin: 0;
+ }
+.leaflet-control-attribution,
+.leaflet-control-scale-line {
+ padding: 0 5px;
+ color: #333;
+ line-height: 1.4;
+ }
+.leaflet-control-attribution a {
+ text-decoration: none;
+ }
+.leaflet-control-attribution a:hover,
+.leaflet-control-attribution a:focus {
+ text-decoration: underline;
+ }
+.leaflet-attribution-flag {
+ display: inline !important;
+ vertical-align: baseline !important;
+ width: 1em;
+ height: 0.6669em;
+ }
+.leaflet-left .leaflet-control-scale {
+ margin-left: 5px;
+ }
+.leaflet-bottom .leaflet-control-scale {
+ margin-bottom: 5px;
+ }
+.leaflet-control-scale-line {
+ border: 2px solid #777;
+ border-top: none;
+ line-height: 1.1;
+ padding: 2px 5px 1px;
+ white-space: nowrap;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background: rgba(255, 255, 255, 0.8);
+ text-shadow: 1px 1px #fff;
+ }
+.leaflet-control-scale-line:not(:first-child) {
+ border-top: 2px solid #777;
+ border-bottom: none;
+ margin-top: -2px;
+ }
+.leaflet-control-scale-line:not(:first-child):not(:last-child) {
+ border-bottom: 2px solid #777;
+ }
+
+.leaflet-touch .leaflet-control-attribution,
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ box-shadow: none;
+ }
+.leaflet-touch .leaflet-control-layers,
+.leaflet-touch .leaflet-bar {
+ border: 2px solid rgba(0,0,0,0.2);
+ background-clip: padding-box;
+ }
+
+
+/* popup */
+
+.leaflet-popup {
+ position: absolute;
+ text-align: center;
+ margin-bottom: 20px;
+ }
+.leaflet-popup-content-wrapper {
+ padding: 1px;
+ text-align: left;
+ border-radius: 12px;
+ }
+.leaflet-popup-content {
+ margin: 13px 24px 13px 20px;
+ line-height: 1.3;
+ font-size: 13px;
+ font-size: 1.08333em;
+ min-height: 1px;
+ }
+.leaflet-popup-content p {
+ margin: 17px 0;
+ margin: 1.3em 0;
+ }
+.leaflet-popup-tip-container {
+ width: 40px;
+ height: 20px;
+ position: absolute;
+ left: 50%;
+ margin-top: -1px;
+ margin-left: -20px;
+ overflow: hidden;
+ pointer-events: none;
+ }
+.leaflet-popup-tip {
+ width: 17px;
+ height: 17px;
+ padding: 1px;
+
+ margin: -10px auto 0;
+ pointer-events: auto;
+
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+.leaflet-popup-content-wrapper,
+.leaflet-popup-tip {
+ background: white;
+ color: #333;
+ box-shadow: 0 3px 14px rgba(0,0,0,0.4);
+ }
+.leaflet-container a.leaflet-popup-close-button {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: none;
+ text-align: center;
+ width: 24px;
+ height: 24px;
+ font: 16px/24px Tahoma, Verdana, sans-serif;
+ color: #757575;
+ text-decoration: none;
+ background: transparent;
+ }
+.leaflet-container a.leaflet-popup-close-button:hover,
+.leaflet-container a.leaflet-popup-close-button:focus {
+ color: #585858;
+ }
+.leaflet-popup-scrolled {
+ overflow: auto;
+ }
+
+.leaflet-oldie .leaflet-popup-content-wrapper {
+ -ms-zoom: 1;
+ }
+.leaflet-oldie .leaflet-popup-tip {
+ width: 24px;
+ margin: 0 auto;
+
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+ }
+
+.leaflet-oldie .leaflet-control-zoom,
+.leaflet-oldie .leaflet-control-layers,
+.leaflet-oldie .leaflet-popup-content-wrapper,
+.leaflet-oldie .leaflet-popup-tip {
+ border: 1px solid #999;
+ }
+
+
+/* div icon */
+
+.leaflet-div-icon {
+ background: #fff;
+ border: 1px solid #666;
+ }
+
+
+/* Tooltip */
+/* Base styles for the element that has a tooltip */
+.leaflet-tooltip {
+ position: absolute;
+ padding: 6px;
+ background-color: #fff;
+ border: 1px solid #fff;
+ border-radius: 3px;
+ color: #222;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ pointer-events: none;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.4);
+ }
+.leaflet-tooltip.leaflet-interactive {
+ cursor: pointer;
+ pointer-events: auto;
+ }
+.leaflet-tooltip-top:before,
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+ position: absolute;
+ pointer-events: none;
+ border: 6px solid transparent;
+ background: transparent;
+ content: "";
+ }
+
+/* Directions */
+
+.leaflet-tooltip-bottom {
+ margin-top: 6px;
+}
+.leaflet-tooltip-top {
+ margin-top: -6px;
+}
+.leaflet-tooltip-bottom:before,
+.leaflet-tooltip-top:before {
+ left: 50%;
+ margin-left: -6px;
+ }
+.leaflet-tooltip-top:before {
+ bottom: 0;
+ margin-bottom: -12px;
+ border-top-color: #fff;
+ }
+.leaflet-tooltip-bottom:before {
+ top: 0;
+ margin-top: -12px;
+ margin-left: -6px;
+ border-bottom-color: #fff;
+ }
+.leaflet-tooltip-left {
+ margin-left: -6px;
+}
+.leaflet-tooltip-right {
+ margin-left: 6px;
+}
+.leaflet-tooltip-left:before,
+.leaflet-tooltip-right:before {
+ top: 50%;
+ margin-top: -6px;
+ }
+.leaflet-tooltip-left:before {
+ right: 0;
+ margin-right: -12px;
+ border-left-color: #fff;
+ }
+.leaflet-tooltip-right:before {
+ left: 0;
+ margin-left: -12px;
+ border-right-color: #fff;
+ }
+
+/* Printing */
+
+@media print {
+ /* Prevent printers from removing background-images of controls. */
+ .leaflet-control {
+ -webkit-print-color-adjust: exact;
+ print-color-adjust: exact;
+ }
+ }
diff --git a/static/css/navbar.css b/static/css/navbar.css
new file mode 100644
index 0000000..9109333
--- /dev/null
+++ b/static/css/navbar.css
@@ -0,0 +1,54 @@
+
+@font-face {
+ font-family: "HWYGOTH";
+ src: url("/static/fonts/HWYGOTH.ttf");
+}
+
+/* Add a black background color to the top navigation */
+.topnav {
+background-color: #163314;
+overflow: hidden;
+flex-shrink: 0;
+display: flex;
+}
+
+/* Style the links inside the navigation bar */
+.topnav a {
+ float: left;
+ color: #f2f2f2;
+ text-align: center;
+ padding: 14px 16px;
+ text-decoration: none;
+ font-size: 17px;
+ font-family:HWYGOTH;
+ cursor: pointer;
+}
+
+/* Change the color of links on hover */
+.topnav a:hover {
+ background-color: #ddd;
+ color: black;
+}
+
+/* Add a color to the active/current link */
+.topnav a.active {
+ background-color: #2a572a;
+ color: white;
+}
+/* Create a right-aligned (split) link inside the navigation bar */
+.topnav a.split {
+ float: right;
+ background-color: #163314;
+ color: white;
+}
+.topnav a.split:hover {
+ background-color: #ddd;
+ color: black;
+}
+
+.topnav a.collection-title {
+ background-color: #2a572a;
+ color: white;
+ cursor: pointer;
+ flex: 1;
+} \ No newline at end of file
diff --git a/static/css/simplemde.css b/static/css/simplemde.css
new file mode 100644
index 0000000..fb0e4c7
--- /dev/null
+++ b/static/css/simplemde.css
@@ -0,0 +1,328 @@
+.CodeMirror {
+ height: auto;
+ min-height: 300px;
+ border: 1px solid #ddd;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ padding: 10px;
+ font: inherit;
+ z-index: 1;
+}
+
+.CodeMirror-scroll {
+ min-height: 300px
+}
+
+.CodeMirror-fullscreen {
+ background: #fff;
+ position: fixed !important;
+ top: 50px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: auto;
+ z-index: 9;
+}
+
+.CodeMirror-sided {
+ width: 50% !important;
+}
+
+.editor-toolbar {
+ position: relative;
+ opacity: .6;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ padding: 0 10px;
+ border-top: 1px solid #bbb;
+ border-left: 1px solid #bbb;
+ border-right: 1px solid #bbb;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.editor-toolbar:after,
+.editor-toolbar:before {
+ display: block;
+ content: ' ';
+ height: 1px;
+}
+
+.editor-toolbar:before {
+ margin-bottom: 8px
+}
+
+.editor-toolbar:after {
+ margin-top: 8px
+}
+
+.editor-toolbar:hover,
+.editor-wrapper input.title:focus,
+.editor-wrapper input.title:hover {
+ opacity: .8
+}
+
+.editor-toolbar.fullscreen {
+ width: 100%;
+ height: 50px;
+ overflow-x: auto;
+ overflow-y: hidden;
+ white-space: nowrap;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ box-sizing: border-box;
+ background: #fff;
+ border: 0;
+ position: fixed;
+ top: 0;
+ left: 0;
+ opacity: 1;
+ z-index: 9;
+}
+
+.editor-toolbar.fullscreen::before {
+ width: 20px;
+ height: 50px;
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(255, 255, 255, 0)));
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
+ background: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%);
+ position: fixed;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.editor-toolbar.fullscreen::after {
+ width: 20px;
+ height: 50px;
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 1)));
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
+ background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%);
+ position: fixed;
+ top: 0;
+ right: 0;
+ margin: 0;
+ padding: 0;
+}
+
+.editor-toolbar a {
+ display: inline-block;
+ text-align: center;
+ text-decoration: none!important;
+ color: #2c3e50!important;
+ width: 30px;
+ height: 30px;
+ margin: 0;
+ border: 1px solid transparent;
+ border-radius: 3px;
+ cursor: pointer;
+}
+
+.editor-toolbar a.active,
+.editor-toolbar a:hover {
+ background: #fcfcfc;
+ border-color: #95a5a6;
+}
+
+.editor-toolbar a:before {
+ line-height: 30px
+}
+
+.editor-toolbar i.separator {
+ display: inline-block;
+ width: 0;
+ border-left: 1px solid #d9d9d9;
+ border-right: 1px solid #fff;
+ color: transparent;
+ text-indent: -10px;
+ margin: 0 6px;
+}
+
+.editor-toolbar a.fa-header-x:after {
+ font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
+ font-size: 65%;
+ vertical-align: text-bottom;
+ position: relative;
+ top: 2px;
+}
+
+.editor-toolbar a.fa-header-1:after {
+ content: "1";
+}
+
+.editor-toolbar a.fa-header-2:after {
+ content: "2";
+}
+
+.editor-toolbar a.fa-header-3:after {
+ content: "3";
+}
+
+.editor-toolbar a.fa-header-bigger:after {
+ content: "â–²";
+}
+
+.editor-toolbar a.fa-header-smaller:after {
+ content: "â–¼";
+}
+
+.editor-toolbar.disabled-for-preview a:not(.no-disable) {
+ pointer-events: none;
+ background: #fff;
+ border-color: transparent;
+ text-shadow: inherit;
+}
+
+@media only screen and (max-width: 700px) {
+ .editor-toolbar a.no-mobile {
+ display: none;
+ }
+}
+
+.editor-statusbar {
+ padding: 8px 10px;
+ font-size: 12px;
+ color: #959694;
+ text-align: right;
+}
+
+.editor-statusbar span {
+ display: inline-block;
+ min-width: 4em;
+ margin-left: 1em;
+}
+
+.editor-statusbar .lines:before {
+ content: 'lines: '
+}
+
+.editor-statusbar .words:before {
+ content: 'words: '
+}
+
+.editor-statusbar .characters:before {
+ content: 'characters: '
+}
+
+.editor-preview {
+ padding: 10px;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background: #fafafa;
+ z-index: 7;
+ overflow: auto;
+ display: none;
+ box-sizing: border-box;
+}
+
+.editor-preview-side {
+ padding: 10px;
+ position: fixed;
+ bottom: 0;
+ width: 50%;
+ top: 50px;
+ right: 0;
+ background: #fafafa;
+ z-index: 9;
+ overflow: auto;
+ display: none;
+ box-sizing: border-box;
+ border: 1px solid #ddd;
+}
+
+.editor-preview-active-side {
+ display: block
+}
+
+.editor-preview-active {
+ display: block
+}
+
+.editor-preview>p,
+.editor-preview-side>p {
+ margin-top: 0
+}
+
+.editor-preview pre,
+.editor-preview-side pre {
+ background: #eee;
+ margin-bottom: 10px;
+}
+
+.editor-preview table td,
+.editor-preview table th,
+.editor-preview-side table td,
+.editor-preview-side table th {
+ border: 1px solid #ddd;
+ padding: 5px;
+}
+
+.CodeMirror .CodeMirror-code .cm-tag {
+ color: #63a35c;
+}
+
+.CodeMirror .CodeMirror-code .cm-attribute {
+ color: #795da3;
+}
+
+.CodeMirror .CodeMirror-code .cm-string {
+ color: #183691;
+}
+
+.CodeMirror .CodeMirror-selected {
+ background: #d9d9d9;
+}
+
+.CodeMirror .CodeMirror-code .cm-header-1 {
+ font-size: 200%;
+ line-height: 200%;
+}
+
+.CodeMirror .CodeMirror-code .cm-header-2 {
+ font-size: 160%;
+ line-height: 160%;
+}
+
+.CodeMirror .CodeMirror-code .cm-header-3 {
+ font-size: 125%;
+ line-height: 125%;
+}
+
+.CodeMirror .CodeMirror-code .cm-header-4 {
+ font-size: 110%;
+ line-height: 110%;
+}
+
+.CodeMirror .CodeMirror-code .cm-comment {
+ background: rgba(0, 0, 0, .05);
+ border-radius: 2px;
+}
+
+.CodeMirror .CodeMirror-code .cm-link {
+ color: #7f8c8d;
+}
+
+.CodeMirror .CodeMirror-code .cm-url {
+ color: #aab2b3;
+}
+
+.CodeMirror .CodeMirror-code .cm-strikethrough {
+ text-decoration: line-through;
+}
+
+.CodeMirror .CodeMirror-placeholder {
+ opacity: .5;
+} \ No newline at end of file
diff --git a/static/fonts/HWYGOTH.ttf b/static/fonts/HWYGOTH.ttf
new file mode 100644
index 0000000..20ac3e2
--- /dev/null
+++ b/static/fonts/HWYGOTH.ttf
Binary files differ
diff --git a/static/img/favicon.ico b/static/img/favicon.ico
new file mode 100644
index 0000000..7f391c2
--- /dev/null
+++ b/static/img/favicon.ico
Binary files differ
diff --git a/static/img/marker-icon-black.png b/static/img/marker-icon-black.png
new file mode 100644
index 0000000..23c94cf
--- /dev/null
+++ b/static/img/marker-icon-black.png
Binary files differ
diff --git a/static/img/marker-icon-blue.png b/static/img/marker-icon-blue.png
new file mode 100644
index 0000000..0015b64
--- /dev/null
+++ b/static/img/marker-icon-blue.png
Binary files differ
diff --git a/static/img/marker-icon-green.png b/static/img/marker-icon-green.png
new file mode 100644
index 0000000..c359abb
--- /dev/null
+++ b/static/img/marker-icon-green.png
Binary files differ
diff --git a/static/img/marker-icon-grey.png b/static/img/marker-icon-grey.png
new file mode 100644
index 0000000..43b3eb4
--- /dev/null
+++ b/static/img/marker-icon-grey.png
Binary files differ
diff --git a/static/img/marker-icon-orange.png b/static/img/marker-icon-orange.png
new file mode 100644
index 0000000..c3c8632
--- /dev/null
+++ b/static/img/marker-icon-orange.png
Binary files differ
diff --git a/static/img/marker-icon-red.png b/static/img/marker-icon-red.png
new file mode 100644
index 0000000..1c26e9f
--- /dev/null
+++ b/static/img/marker-icon-red.png
Binary files differ
diff --git a/static/img/marker-icon-yellow.png b/static/img/marker-icon-yellow.png
new file mode 100644
index 0000000..8b677d9
--- /dev/null
+++ b/static/img/marker-icon-yellow.png
Binary files differ
diff --git a/static/img/marker-shadow.png b/static/img/marker-shadow.png
new file mode 100644
index 0000000..84c5808
--- /dev/null
+++ b/static/img/marker-shadow.png
Binary files differ
diff --git a/static/img/marker_background.png b/static/img/marker_background.png
new file mode 100644
index 0000000..2c1f436
--- /dev/null
+++ b/static/img/marker_background.png
Binary files differ
diff --git a/static/img/no-datetime.png b/static/img/no-datetime.png
new file mode 100644
index 0000000..89d92c7
--- /dev/null
+++ b/static/img/no-datetime.png
Binary files differ
diff --git a/static/img/no-location.png b/static/img/no-location.png
new file mode 100644
index 0000000..c3108f2
--- /dev/null
+++ b/static/img/no-location.png
Binary files differ
diff --git a/static/img/picker.png b/static/img/picker.png
new file mode 100644
index 0000000..30679e2
--- /dev/null
+++ b/static/img/picker.png
Binary files differ
diff --git a/static/img/response.json b/static/img/response.json
new file mode 100644
index 0000000..ca66456
--- /dev/null
+++ b/static/img/response.json
@@ -0,0 +1,46160 @@
+{
+ "code": "Ok",
+ "trips": [
+ {
+ "geometry": "kdraGf`upLa@KVuAbCjAB@ANG`@CNCNCPADAHAHAD?J?F?J?L@P@D@FBBFDHHFLXf@Td@Vf@HLFJFJLPFHd@r@LPRZd@p@BDJNLRFFBFDHFLBDfAfCb@dAQPEDONSRKJMNKLGDABc@b@OPGHo@v@KFOJMFA?OFQ@MDOHMHKIALCFEFCBGDCBEBIBA@?DCF?AA@GBC?E@A?A?C@C@KDKAA@EHDZA?A@KHMAAA?@I}@aB\\`B]H|@A?@@PBHGBC?C??E[DI@AJ@JEBABA@?@?DAB?FC@A?@BG?E@AHCDCBCFEBCDGBG@MJHLINILEPANG@?LGNKJGn@w@FINQb@c@@CFEJMLOJKRSNODEPQDLb@|@?D@F@D@FFPBFBJHT@B@DBDFGBHHRXr@LRHLl@zAHPFL`@~@BFGDMJO]kBfBAAWm@[XGMFLZYVl@@@jBgBN\\LKBHBHDHBHDJP`@r@~A@D@B@@JTBB@BB@B@B@D@B?D@l@?F?D?DAJDDBPFXJJDRHLDRFVDPDPBTDTBF?F@F@b@?V?TAN?B?jCKBAB?B?B?BADAVIAW?W?OA}@?E?K?M?IB?B?D?D?B?B?V?Z?~BCRAtAAPHDD@D@B@PDz@@f@?DBfAB~@@FJA?@B?xA@?G?FyAAC??AK@DND?dDAD@H?JvB?D@J?J?jCDbA?F?JDv@\\dFHhAFdA@F@HBZ@\\Fz@H|@FC@A~@]@?v@[@FFCPfAHr@@DBTDTDXDZ@D@HVpBXpB@P@DBL@L^zCN`AALTFPFLFJF???A?A?A@?BA@A@ABA@A?A@CDBJKDCDAJGDADBKFGBCBEBCBCBA@A@?@?@@@?@@?BCBCBA?ADABC@ABA@A?A???AA?A?A?EBEDEBGDEFEDGHEHEHEJCJCHCHAHAH?@AF?HAJ?F?F?H@H?F@F?@?@@@@???@A?CCO?A?C?C?E?C?C?AAA??AAA??@A@AB?F?D@F?D?F@F@NBFBLBJ@L@L?HAH?HAJAJAHA@AFCFCHCDABDFJPNTLXNVHRFRDPDPHZFZJf@Fb@Jf@RfAP~@FXKDQFUJC@ESGYMs@Km@EOE[Mo@Ii@GWEUEOEOEMGOEKIQKOKKIMGKW^V_@FJHLJJJNHPDJFNDLDNDNDTFVHh@Ln@DZDNJl@Lr@FXDRBATKPGJEFb@Lr@Jp@Nz@Nv@Lt@H`@DXDPHd@FANIJEAI[cBz@]X~AJA@HvBzLBABAhAc@BADAJIJE`Aa@z@]BALGHC`Aa@BNrBhLBPBN~AbJBPbAa@DAJEDCFCRGBL?@VtA?D@A@?A?A@?EWuA?ACMPIDABCFAJG|@]HEx@YDCLGLE~@]v@[DARIQ}@o@wDAEEWGYWyAm@kDAGEUk@cDO{@CKESNGvAi@LEj@UPIXKHCp@YZKJEJENGDABADAD?B?B?GKGQEIEMEQEYEUGWKu@Io@OeAIm@?W?OBM@C@EFKHGjCgAPGLGRILILM^U\\MlAe@|@]TIRKLEZKjAg@HEJCt@Yd@Sh@SPGLG~@_@HCl@WLEJEpBs@RIREFGNOV]HK\\e@j@q@LOV]Za@dAsABCJOHIDGTYDIBIBIJBBQP_ADQEPQ~@CPKCCHCHEHUXEFIHKNCBeArA[`@W\\MNk@p@]d@IJW\\ONGFSDSHqBr@KDMDm@VIBBP`AxFBLJGBNPhAFZJp@BJBN@FDNBLBTBJF^BLBJDPLz@Nx@BNOPIJQTMRABGTDFBDpAbBJLFHtAjBHJDFxAlBHJDFvAnBFFFFJL~@nA@@HJMTqDfGOVEKEEADg@x@MPe@z@EJGJLPJLBBh@t@BDbDdEJLFHLPINqAvBABKRQTKRi@z@CDk@`Ac@r@CFAHAJIbAu@xIKhAAPH@z@L\\HNF~@f@vCbBB@ER?@o@hCCFERWAEFKRNNZl@Rp@Np@RlAJn@BZSLIHQXGTG`@Ij@Kf@[v@QPQPa@X?CMk@?EAIC@E?CACAB@B@D?BA@H?DLj@?BPl@Pp@]jBMFBP[LMFiAb@uAh@sAf@iAb@IDKDgA`@CKi@}CBQQgAmAh@VxAf@lCBREBKDOFE@k@Ta@Ny@\\KDIDaDnAwAj@EBMJ}@_AGGMOUYm@q@sAuA[_@]W[_@GEEEGEEAEAEAA?W?E?@S?S?UEwI?GAU?S?IEqE?W?Q?S@w@?Y?M?I?SAiC?i@?_@?I?C?Y?SICEBK??W?VQ?K@CAC?GA@XI?G?sA@u@BGBEBEFCDCDABAFCHAJ?JLr@P|@F\\F\\DXH`@KDIDAB?F@j@@x@@z@?xCEvAYpL?FAZ]tJCp@GzA?FAPAPu@pP?D?B?V?HAL?FAFCLCNEPGLGLININAB?D?B@DGPAFABCLCLAL?LQtGAJF?l@Fn@BTB@Ov@JEj@F?B?H?CTRBD@NBL@pAPx@JxATPBZDl@FjAN~@LNBx@HF@F?@L?@?Dm@fKCTJ@F?P@R@`CAn@CF?H?HA?H?B?D@FXzAJd@\\rBJh@bAvFZfBp@vD?@BLBNd@lCFXBPFb@H`@dArGZjBBJlALD@XBHb@f@tCv@bEFZ^nBX|Ad@bCLv@@DIBC@@BAB?DKPOZWh@ADIPGLCFA@A?A?EJcA}@GGe@c@s@o@SQe@c@GGSQsEeEKKmBrEgAlCAPUGsBg@i@MsA]YIUGWEOAOCO@{ALuBV{BViCRG@o@Dc@Cs@IOAALG~@OvB?JAJGz@LBOtBANMAEAgAMEA?JGx@CZ?X?N@PDVBNGRCJE\\GECAMEENCHCJGRET?HALKjBW~DCh@InAIlAMpBARARa@vGCj@AFAJMAALObCYlEPAVAJcBH@j@Fk@GK~A?FCXI@WDCb@S~C?FMlBIrAAHC\\APAZQfCCf@G`AAr@Cp@?RABAx@C`@AT?FAD?LEl@Lb@HXBF^pAFVBFBLBHb@dBHZNv@Pl@BLRt@Vz@FVH\\h@vBBJd@hBT~@HZDNPp@Nv@@FBLFf@DRAJ?LJvAB`@F^Jh@Lb@Pd@L`@Rn@HPHHb@rADN\\dATr@Pd@JJHBHB@?J?HCHEHKB[z@TNiAOhA{@UCZIJIDIBK?A??C?G@@LCNMBODc@Eb@CNOLMBAA?F?BICICKKQe@Us@]eAMNa@d@m@f@Q?O?]KyAs@oAi@GEGCc@Sa@QGEIC_@Qa@QIEGEa@Qa@QIEGCgB{@gBy@KG@EKGgAc@gAc@ICkAk@GAw@]e@SMECXGz@KAEl@Dm@J@]lEWvCAHAPATADi@pHGl@G`AAZGf@ADADADCLuBgA{Ay@UKECi@W[OOIg@YOI]QiDiBAAOIg@WQK_@S}A{@CAKIMG?Q?QAMAOCMCKCMYqCAKCOIy@UuBE]Gk@Is@?CMaAAMEa@CQe@cEGk@Ca@E[E_@KiAMoAAMO{AEm@Ec@Cc@AO?EAQCYAOEq@MuBGaAImAEm@Eu@?AAMC_@OuBEg@Ek@?AIgAGs@CQAYA[A]Aa@?]?[@[@Y@]@G@O@WBa@BYDY@QViBBS@M@K?M?K?M?KAKEmACeAEw@Cu@Ce@Cu@ASA_@Eu@PA?KAGAe@@d@@F?JQ@Dt@@^?DAD?DADCBABC@A@A@C@E@C?CAC?CACAWa@KQU_@GK_BaCEGMQWa@GGIKQSGIGIWc@wBeDU[KQKOKMMOKMKMMOKKy@w@eAcAw@s@SUe@e@SSACUSKKqBoBOQEC[YEE]UaAy@gA{@qAiAUQBI@I?E@G@E?C@G?G@G?E@I?E@E?I?E?I@K?M?MAM?_@Aa@MeCA]A]A]?_@?]?]@[@[@c@B_@B]D_@Da@D_@F[DUSMeB{@GEMEwBgACCKEOIw@a@KEKGECECEECAAC@Kf@gD@MIGGKYa@GEGEI?i@H]DA?A?A?AAA?AAAA?AEGCEAAACACAAAA?AAAAAAAAAAAAA?AAA?CAA?A?C?C?A?C?A?C?A?A@A?A?C?ABMMCiB_@oJ}AOIMCCBI@IAiAUQCUACAm@Gk@Gw@Mi@GMCG[E]c@}CMeAM_AAIEa@WkBAOe@eDAMAMSuAK{@Ky@CWMy@c@kDCUK_AYmBMq@G_@K{@AECQAIAKAIAEAG[gCM{@AEQeAO_AUwASAyDbAm@Po@NIBE?E?CAoAm@_@SOI{@c@GE_@Q_Ae@wAw@MGFW@GRy@F[j@kCBOBG@INq@H[Pq@d@sBFW@MFQVy@@GT}@@OLo@@ERw@DQp@aCMKe@YTu@GOFNUt@d@Xa@nAOt@[rACHIDAP?RMCEB@VA^CZIx@GPALGVe@rBQp@IZOp@AHCFCNk@jCGZSx@AFGVIZAFi@rBEXGd@AFCPO`AE\\ObAObAMdAG\\AJCJOlACJAJCVa@|CCLEVCVEXWfBMx@QpAIl@[`CAJMr@Q~@Mf@Mj@ITMb@ABCJJJXTBCHHB?VN@BTL?BUO?BTNJCXT`@\\f@\\B@EHQTPUDIBBFBMPk@t@MNEHQRc@l@[`@GJ[`@[`@QTEFOREFEDIJGHEFSVEFk@r@k@v@y@dAm@x@IHY`@KLCBE@EBKBg@LGBG?E?YGGAACKMSd@_@v@MXKVa@x@eA~Bi@hAq@|Au@fAD`@AB@@?@BBAD@BB@BAFA@GAF?B?B?BC@C@IBE?E?CC?C?C?B?BBB?RSDUDOFMDSJKWMYUk@[q@GMEG@I?GCYCQGQIOSe@Q_@IQIQQa@MUEM[ZIHy@z@_AbAEBg@l@c@j@GHEDW\\QRIHq@n@yArA{ArAGDMLOJe@ToB`AUNKMg@i@IGy@}@OSi@i@cAiAG?MOCCAAA?C?A@A@ADS`@o@jBEPM\\GRg@zAGRO^_@lAOb@CFEJKVAFCDKZAd@?L@RI@GDFEHANvBFn@RnBj@hAP^|A~C@DDJDHfDpGDLGHQRsA~Aq@t@HRFLzAtCxApCn@nAf@`At@~AHNR?D?J?Bj@?H?F?FErACnAAJ?RI`C?PPA`FKdEKN?l@Aj@AD?D?F?BA^A\\ALA|BA`@Ab@CB??L?^dAC?J?b@?c@?KeAB?_@?MC?c@Ba@@}B@M@]@_@@C@G?E?E?k@@m@@O?eEJaFJQ@Cj@IlDAV?LIjEAXCnAGfBAVGzAALAV?NK?]@e@@SHQNMVG^EVCXCJGNSASAQ?e@BUDQFOJ]Va@j@q@jCGVAb@?~ACRGNCDUlA?rAAPQFE?MFMNOHQ@QBIFGHGLE@GBx@pG?`@DN@LG?SCSAM?G@E?IBIBMFKFSNIJEDC@g@RE@C@G?G?C?C@E@C@GDGFQTCDMLmBt@sAf@QNONKLOVSLYJ[PE@C?C@EAM?a@LC@C@a@LgA`@OFc@POJKNKVSz@KV]TsBp@sBv@oBr@sBt@{@Xm@PIB@\\Db@HhAPvA@J@FLhAThBVlBNtAVvBh@dER|Ax@~GD\\PvAD`@Bf@Dj@@Ze@|ASd@Qb@u@vBe@tAg@rAu@nBs@dBmAhCc@fAO`@Mb@eBhGK^K`@}@vECHCHGDGDG@GAW@FFj@r@Cb@WlA_@jBe@|B]jB_@fBUbA[~AEVUbASt@Qr@QNK@YBQ?GbAMdAOp@Wz@a@bAa@v@m@`Ao@|@q@j@c@VQFWJ_A\\WJ@MBOO{@Gc@Ak@Ea@I]YyAIk@Eo@Cw@B}@y@EYDUCGCFBTBXEx@DC|@Bv@Dn@Hj@XxAH\\D`@@j@Fb@Nz@CNALULo@^w@x@EJa@t@m@|Am@zAKXGP_A`CaAdCeAnCcAzC{@fCYv@[|@[t@aAdCSb@s@jB_A|BELUKQEQCO@OFMFIHIJILWr@MLKHQJMFSHKGKEMCKE_@I]EUASAM@Q?Q@QBODOBODODOFQHOHMJ]V_Ar@GF_Ap@aAt@{AlAk@d@c@XIFGDYP_@Ry@^c@N]LUFmAXg@Lq@NKBiBb@kBd@gAVYFQBMBE?G@G?GAOCCAIAMGA?MGIZKb@YfAGRCVCPCRA`@?`@BlAFzA?\\?`@CZEZI\\IX_@r@o@hAm@bAU`@I@C?EAA?G?KAIn@ADGb@A@ObA]tBObAAJAJANAX?VDvB@fA?d@Ap@Cr@?B?XCnAC|@?\\EnAC~@?L?TAFCbAARC`@ANIz@E\\ALUEaAQMCMCCLAN}@tEa@bBaAzCcBlGCLGPaDhMqBdIc@|AUj@U^g@|@i@v@MEG?C?B?F?LDh@w@BJLn@DhAb@lAXnAANCHKFKFMDKDMJIHIJ?HDP?H?PEFRt@B\\R@RLd@~ADJ\\]TWPSRTRPL?DDLDh@Jb@JB@p@Nf@F`@Jx@NhCl@LBh@Ll@Nx@Lj@Hn@@N@b@Bh@Fz@Rb@Th@Xd@NJDZL~@Rj@NB@F@PBVFn@\\^TTLV`@T`@NVNVtA|BlApBRZJP~@`Br@jALTj@dAv@tAtAdC\\j@Zd@FLb@t@Zp@^v@rAfDDLZz@Tt@BNPx@HX`@bBH^^nAJVJPJRLPJLLLRLHFFBNHLFVJd@Rx@Zz@\\NFi@rCMt@g@rCOv@Mt@g@zCcA`Fu@`EOv@_@hCSzACTWtB]tCWbCk@`FE^CL?DCLQ`BGp@AHCd@El@CZGn@zBXI`CJ?J?d@?z@BF?j@Fd@DLBr@Lf@H`BZz@PjATNDfA\\x@\\RHn@VDB\\LVJHDt@ZPFj@TRHp@VD@p@TB@F@b@NND~@RFBPDTDNBv@RVDTRf@Jx@P`ARr@N^?r@NTFXDZDZ?Z?tKm@PA\\Cd@CF?PAPA\\CJ?H?^?jA@|D?tB@b@?bB@~AAlAAzB@J?x@?P?b@@@?@?t@BN@T@d@DtAPH@bBRf@Dn@FJ@VJTDd@D^B\\FZFXHXNXRZTTVVXf@l@@BJJTTVVXPVL`@LtAn@HB@@HBfDxA\\NtAl@n@Xh@Vf@TnB|@JDbDzAjB|@jAj@`@NZJlAZl@PNDNBTDTDjAJRJl@\\XNDBHFDBDB`Ab@ZLPHRFPDRF^Hz@PnAXt@PhAVhAV~A^b@L~@Rj@LRF`ARhBb@hDv@bB^F@hB`@HBJ@D@T@H@J?r@DJ?jAF`AFBVN~C@\\?^?^O|PAZ|BDFXFZJ^L`@Rh@HRN\\JVLXLZlApC~@xBHTHZBX@XBVh@bD?HBPLFdChAbBv@NF|@`@JFd@RD@D?B?F?F?RADADA~@c@DCLIJE\\OHCNCFAB?B?F@@?FBJDZp@l@pAJXHVHTVx@BFLZDT@DFXFZFZBZB\\D\\@\\Bb@Bf@@j@@h@@v@@f@?j@?p@A~@Ap@?n@CnAAf@?`@?^@\\@X@P@PDb@D`@D\\D^Jj@DVBR@VBR@T?Z?V@nCGl@Gf@KfAGp@CVAD?D?D?DAD?FAFAFAHAFADCFAFGZAH?D?F@FBH@JTb@DFHJHFHDJFVHr@P\\LZRJFNJLJJRDJFPJZHTFVFTNt@TdAz@xEBp@?ZAXATCXCRETK`@YjAGRETCRCNAR?N?P?ZHjDBb@BTBXDZFVHXHTJTJPJPNPNPNLTPPJPHPFPFTDZDxB\\v@JrAPRDRFRHNHPJLJLJLLJLJNx@lADHP^NZFNTd@Rd@BJHTHTDHL\\L\\HXJZL`@Rz@Lv@Hr@Hp@?JBj@B`A@p@?\\@`B?hA@p@@n@?L@T@j@DhABdA@R@^?N@^Al@EnAEpAAf@?f@?d@?J?^@r@DvA@`@?D?V@`@A`@A^Ad@Ev@Al@GfBMrCEt@Cp@Cn@Aj@An@ItFCfB?p@Ah@@T@V@RBR@PBPDVDVDZ@FBRBXB\\BZBj@@bA@t@@x@?n@d@?vBE\\?b@C^A^C^C\\?Z@V@TBZD`@HXHD@\\J^L`@NPHPH^RNFh@XrAr@`D~ArJ`FBBBB@BBB@B?D@D@D@RD?D@F?D?D@F@D?F@FBD?DBD@D@FBHBFDf@h@DDBFDDFHBD@DBB@BBFBFHVBFBFBHRv@Fd@BJBNBJBLBJ\\fAJ^HXJ^Rl@vAfEH\\`@nAPn@Nf@FPDLDJ@BFPFHFLJNNVNRPT?@NTNRJVNVNTXb@pBvCv@hAFHLNRVRRTVVT^\\hAbAx@t@FF|@|@~@~@DDfGbGRPRRRPPNTPVPVPTLRLTJTLTJTJXJVJ^Jx@RLDnAXz@PZFZD\\FfALRBR@T@T@T?TAVCZCVCVEZIXITIVKVKx@_@PGPEPEPEPCDAVCpAIrAIfAIRAR?R?J?D?P?R@R@bADl@DR@jBJp@@?XAbC?\\BnH@|B?X@V?V@X?H@L@T?RBT@TBR@PBTDTBTNbAF\\FZDXFTFXFZFRJ^J\\HTJVHVNXP\\PZT\\TXTVXV|ArAr@l@x@r@RRZ^|@nAb@p@v@pAr@fA`@l@v@nAh@z@T^`@p@Xb@p@jADFLRhBvCrAvBzAbCRXhBjDzCrF|CtF^p@R^dAfBZj@Zf@Xb@V^PRNTx@fAz@hAbBzB`@j@TZBBZ`@nA|ABDTXl@p@LNLPLPLRLRHNJR@@DJFNHNFRHRHRBJDJJ\\FTVv@Nb@HRDLFNFPn@zAJVLTLVJVLVJVNXP^x@xAn@fApFnJlBbDNZNXLVLZN\\Pf@Pb@Nf@Nd@L`@JZFVFRDPDPFTDTDVDVDXDZBXB\\D^B^@\\@Z@Z@\\?\\?ZAzB?lAA`@?pC?Z@X?\\@`@B^Bt@@ZB`@B`@h@vHD^BZB\\j@jFlAdLJx@@LP|ALrAFh@BXZfD@LFj@Fh@Fd@Fb@H`@H^H\\`@`BH\\FVHZF\\F\\F`@Fh@PrAFl@BLBJ@LBHBJDJBJDJ^~@Rf@FNFLFJDJh@lAhAfCj@nAvAbD~@zBfAbCb@dAzAbDZr@LXHRl@pAr@|AXn@`@z@h@hAZp@z@nB`AtBhAcAFGHEFEHEDCDCFCFCHCFAHC\\IDAZGHCHCFCHCFEFCHEHGFGFEHIFIHKFIFIR[@C^i@^o@BGJOHODMFMDKL_@`@qANe@LYJUNUPSPMLINENELAJA@?AcABMCL@bAA?K@M@ODODMHMe@COCSUsJCu@Aw@Cm@Aw@Ci@Ak@Cg@Eg@Gk@c@eDWkBGi@Eg@E_@A[AU?S?Q?S@UFyC@k@@]?U@W?[@_@?c@@{@DmD@c@RiS@s@?W@S?O?QAQ?OAQ?MAKAMAMCOAQk@mEg@_EOeAC]Ee@Ec@GkAc@aHO}BIDKDqDdB{@`@kBz@g@TOFMDOFKDAGAGAECGGIGIGI_CeCSWMOMWGMCMAMAQCg@IoBA_@?_@AWCUCSCQCMEMGMIOQWQOc@c@WSWYSY[c@]i@SUSUOKMGQEOEOGKGOKMKKMOSMQKSs@mBCOAO@Q@QTaCNuAD]f@wEDa@Fe@Fa@F]F]H_@V}ABMHc@H[DYFYFYDYD]B[D_@B[?U?YASCSKy@E]E]CWO{BQsBGs@Ei@AGEe@E_@Ia@GYGYIUi@aBYy@e@{ASk@IUACM[MWIOKKIIIEMEKCQEOGMGMEMK}@k@EEMIMMMKIIKMECSW]c@uCuDOOQMQIWIuAc@RoAb@qC^mCZkBPoAL{AHmB?qA?y@G{@Kw@g@}AI[eAqC[y@k@uAAE_A{BGQMYUm@Ia@AEIqA@}BBuGHiDk@C{@MwBg@o@SFw@HeBB_@FuAHmCBgAFe@L_AXkATq@\\w@x@sAz@sABC^aAHUb@aAPc@^g@Zi@OeAMu@IQEMWY_@]{AiA]a@Oc@EOKo@Gy@?C@e@Dk@Hc@Hi@Hm@@Q@KC_@E_@iBsCEGEGEEGGEEGEWSu@k@GGIG[[?I?G?GAGAEAGAGCGCECGEKGKGIGIIKMOg@i@EGEGEECGCGCGCGCIAIAIAKAG?K@I?K@OBQ@M@MNaABQBSBUBS@M@M?M@M?K?MAOEmAAO?M?O@K?M?K@I@I@MBQBOBOBQBQH]F]H_@x@{DDOBQPeABULo@BODQNs@d@aC~@mEDYDUDUD]Hy@Dw@?K@_@@SBWDUH[L]Ra@^o@RYNUJSJODKJWPs@He@BS@EB]Dk@?ID}@Bu@@M@O@I@MBOR{ADSBSHk@BOBM@OBQDc@BYFs@BMJaA@M@K@M@M@M?MFaB@a@@M?M?M?K?K?M?IAI?KAIS{CAMAO?MAM?OAO?K?M?K?I@M?I?K?I?I?KAI?IWmDAK?K?K?I@K?K@I@I@K@I@IBKBKDKlA_EtAoENg@x@eCl@oBHYHWDOBMDKBMBM@K@K@K@MBo@BUBk@Bi@?AJ}B@M@QHeCBk@@g@FwB@[@O?Q@g@@a@?I?KAG?IAGI{@?IAIAK?IAM?MAM?M@O?K@K@IPs@@I@I@I@I?I?I?I?MG}@AYAWEuAAUAQCSAQCSGk@CSCUC[A[Ca@Cc@SwDCg@G_AAI?M@G@G@GBIFSBEFMCCEEECEECCEEGGCCUWOQIM{AeBMQIKGIEGAAEIEGEICGACEICGEKCKEKCOCOCMCOCM?EAEAG?EAE?EAG?E?GAG?KAG?KASAo@AKEkAC}@Cg@Cc@GgA?EAI?ICQAMAGAOCOCMEUAKCKEOAGI[IYGSGWCICKESa@gBQu@G[IYKg@CMEMCMGMEKEKEIGKIKk@{@c@k@S]Qc@GOGMQ[ACCCEKIMKQJOHMFGDGBCBCBEDEHG`@]HIHGFIHIFKDIFKDIDMFMBKBKBKDW~BmGHUHSJYJWJULYR_@JQLSJQLQLOLQNQJMJKHGJKJGt@g@JGHEHENGTINGNENGPEPENC~@SNCNELGLGNGLINININKLKNMLKJKJIJOJKHMFKFMDKDKDMBOBMDM@MBM@M@M?K?M?O?KAOAQAQCQCQIq@CSCQASCQAQ?SAQ?S?S?S@S?S@S@S@S@O@QBQBQBSBSBUPaABSBS@QBS@U@Q?U?S?S?SAUASASCUCUCQAOCOEQCOESESGOEQEOo@qBGOEOCOCSCQCQASAUAQAQ?S?O@k@?U?U@U@U@U@QBS@UDSBWDUBSDWFUR_AF[FYF[F[F[D[F[D[DYBYDYBYD]@[B]B[?[@Y@Y?W?]@c@AcD@{G@Q?Q@S@S@QBQ@SBQBQDODODOFOFMFOHMFKHMHKFId@k@HKHKLOJMHOHOLUzAeCLUNSJQNSLQLQZ_@FGFIFGFGFGb@_@HGHI`@a@HGHGHGJGJCJELEJCLAHAJ?J?J@HBJDd@PHBJBHBJ@H@F@L?Ee@KyAG_AAUTE^ED?HAHAB?rBM|AMh@E?H?FBd@@B@DDLBFDH@B?@BBBDDD@BvDhFwDiFACEECECC?AACEICGEMAEACCe@?G?ITAAM?M@O?OHwA@M?O@QAa@CmBj@In@Kr@KdASbDw@LEJEFODMDc@BMBMBMBKDKv@qBDKBMBKDMDU@KBK@GNkA?IAuA?k@?U?W?Q@W?WBa@D{@@a@JcB@S?Q@Q?O?M?O?MAKAIAGAIAGCIEICGEGGGU[e@m@qA_BMQ]_@KQcAuAP[DKDKDIDIf@aAHQJS]]?Gr@{A_CaCJk@CACC}@_AEEGGIGGECEEEEGCCCEyByBsBsBACCC?EAC?EAE?CFgCBk@@u@@G@I@G@EFQBGDMCCKGIIKICCEEGIIIGGEEEGIKGEIMGGASCICIGMCMAIAGCK?I@G@GBKM?GAK?C?E?O?UAM@q@?KAG?S?S?OAOCQCOCMEGAIEGCGCOGMGMICAMIOKGECCMKGICCECACIKIKIKIMGMIOIQIQISAEGMCISg@EGEISe@CIOYO_@CIQ]CGiAwBQ]Q]Yi@IQIMq@sAEIQYiAwBe@_Aw@{ASc@S_@MU[m@KQaAeBEIAAGKEIGGGGSUGIWWIKmBiBGGIEOKMI_B}@GEIEKIMIm@c@IGIIMKOMSSQSUUSUSU}AmBaAkACCMOKMMMMMOOOMcAaAg@e@{AsAi@i@?A[YaA}@GIKIo@m@_@]IISS[YEECCAAAE?EAE?GAE?MC@CAC?E?C?EACAC?CAIAYEg@ICA_@EEe@AQGm@Ec@C]CYEe@Q{BEk@AMAUAMAGGy@Ew@Gu@I}@QkBGc@Ga@YsC?GEWGm@QmBQmBe@uFGq@WqCW_DCYCYCWCYA]GgACYG}AM{BAUAQAQAQE[CWK{@E]C_@C[Iy@ASCSC[Gs@IaAOiBIoAC]AUAW?U?U@UBUBSBSb@{BJs@Hm@@W@a@?a@Ck@Gi@Qu@GWK]Oc@GUIYESESGWCUCW?GAOEe@[}F?IMmB~@cATY`C{CRUJMPWNWNYHYHSr@aCPk@DQDOv@oCBMZcABKV}@FSFQHSN_@BGf@kA~@{BJS@AFMLSNULQNQNORQVSVQTORMLGRIRIz@]FAp@UHCJAL?J?J@HBJFLHVTHDHDFBF?H@d@APAHALCJCJCHCZIJCJCASAECUC[Ku@]kCCYCKFA@ADCxBgB~@y@lB}AJKHIHOLQSUOOAA@@NNRTMPINIHKJmB|A_Ax@yBfBEBA@G@E_@]mCCUG]CQFCFEBE@C@E@GAIAIAGAAACCAAAC?CAE@E@GD?EGSGUIWk@mBGQGSIOGOMSMUy@qAFKHMxCkFIOGOIOKOMUWa@IBK@OAQAOCOGMEMKOMKOgCqDYc@}@mAW_@Ya@[e@W_@S[Q[OWMUS_@IMKIINMRk@z@UZEJEHEHMKEFABAHADCD_@`@STABEDGHEJCLALCNA`@ALCLCLELGNMRMGKEICI?G?AWAWAWCUCMAGEUIWJG@ADGl@_ABC@C@E@E?E@E?EAE?CAEAEAC?Ak@gAj@fA?@@B@D@D?B@D?DAD?DADADABCBm@~@EFA@KFHVDT@FBLBT@V@V@V?TARARCRCTETERA@GRGNIPKPILMNON_@`@IH[XQRQRQRMPKNMPMTKTKTMXkAzCKVKZIXGXGXEZEXE\\CXCXATK@E?E@UBQBODMHYNmC`B[PsBpAe@Xc@VYLYNOFGBYLIDg@P{CbAYJ_@NODKFCMGUEa@Aa@HsAPcAyBg@sB_Bi@a@U]EUEUA_@D_@LONONWDQF]s@k@ICG?GAK?K?G?I?AjAA`@Q?I?u@L]VU\\Sp@Ov@AL@MNw@Rq@T]\\Wt@MH??U@OE?iHeDCCCCAE@Ef@iCf@aCFUQKQIDMl@cCFg@@a@Cq@Ac@@YVsAXaBBIDIDG?ADCHCPEJCJEHEFGf@e@BGBA@CHKCMG_@Wg@C[?ALaAF_@H[J[R_@\\o@TYr@g@d@[^_@RYXq@No@FUGSCIGUK]IYAECMCSC_@A[A[?Y@Y@YDUDWZyABKBIv@qDBMGEq@[MGSIOKCAKGMIUQe@a@e@_@OOQOuB_CUWuB}BCCC?I?AWGuAKeAGc@CQAKIg@Oo@Ia@k@cB_@y@IQMUw@mAk@o@QQQO]Y]W]SYSGEJGNHOIKFSMN[BEVg@Rg@Ve@BERc@N[FIDKp@yANc@Pa@J]FKDKZs@N[Te@DIlAcCZ{@`@mA`@kAJYDOTk@FM^m@|@qALO`BaCPYLQBEBGR_@DGNWJUFKBGRa@N[DIRa@@EHSHUHUFWFSDYDWDS?CBYH_AFcAFy@Fs@\\qE@MD}@Bk@Bk@?k@Cs@Ci@Iq@Ie@CWGi@?MAK?U@O?G?GDa@Hk@X}@Ti@b@_Ab@s@l@{@PUDEnAqARSNMh@i@@ATUHIBCh@k@v@u@~@u@\\WLIDJDDJLV`@^h@n@~@^l@Vf@JVJLHJl@h@Z`@n@~@BKPg@n@{Bl@qBFSDQFBtAz@~@l@DDGPHFHBD?B?B?@ABC@A@C?C?E@A?C@A@C@?DAB?@?BABA@A@A@E?E?E?E?C@E@C@ABAC@A@ABAD?B?D?D?DADA@A@C@C@A?C?E@A?ABA@?BA@?D?BABA@CBA@C?C?E?ICIGFQEE_Am@uA{@GCFQl@yBDM]W{B{AGCECyA_AYSWSCCGCKWS]IOCEMC@q@?IE[?EAKAKIa@CSI_@I_@EK[k@AAcAcBiA}AW_@KOQY]m@S[Wc@KSYe@_@eA_@oAGWACI_@CYCWCm@Aw@@_A?A?I@OB_@F_APaBF[@MBK@GFSP[\\i@Xi@j@sAPg@L]L_@Tw@XeABIDMNc@Rs@Lc@FOHSXs@GG?AA?AAA?kBw@]Om@WCJp@Xq@YBKKGDU@GDEFGFG\\QTKTId@Od@IPEDADC@ANQSUu@u@WYqBuBS[KUCEOUHOEMDLINeAkAOGUKOQqAqAw@{@OQKKGGII[_@q@u@EEGI_@a@m@o@KKNWd@cAh@gA`@{@`@{@Vk@HW\\kAV_Af@gBv@qCJa@ZcAHYTw@Rw@Tw@b@{Ap@aC@GBG_Ai@aB_AMKeBaAe@YGCMKUMc@WBKPk@@CBA@CD?`Ad@FBX_ADOf@}AFULUPW^MLGrAzET~@L^HVTp@Rl@FQBIFSHS\\UHGJAJ?N?f@ZJBLBPJDBzAx@PJRJdAj@TLlAp@nAr@HDFQFOh@qBb@yABQPHQIDOJk@F]Ji@BKJg@Jq@n@cEF_@Da@B[D_@@Uh@TTH`Bd@h@RLHd@~@@@JPTX`@f@NNYv@CF]bAQh@Pi@\\cABGXw@NYn@sBNg@DQZR\\PZPzBjAFSZcA^oA?CBIHUFWFWVaA\\qAV_ADODKwBeAa@U[YWUk@q@a@e@]g@Yi@Ui@Kc@Oy@Km@SqAM_AKu@Gu@OoACUHSJWJc@DS@GNg@Ps@DU@E@O^WX[l@k@FIR[f@_Ap@kAh@_A^q@JSHWTmAXeCv@VhA`@p@Rf@PbBj@|Ad@jBp@HDVHb@NPFTNXTLJZZJJp@l@~@x@r@x@^l@?@zAzBbA|AT\\|@rAh@v@BFPVT\\PVb@t@^i@R[f@w@T]PQl@o@\\[nAgAVUbAy@XYLSDHRVh@r@VXNF^Lf@NF@~@XdA^VL~Ar@RHf@F^F@?f@BNAb@AF?XBXBVHFBTH^LXBTAVIVOV]Vg@HKJOn@f@jAv@j@b@\\Tj@`@`Ax@|@l@BB|@p@NPFRDd@@TVEl@G\\E\\GXGb@IVITIRKRKROTSPQTURUd@m@`@k@\\g@LQJQrBqCt@kAxB_DvAoBFIJOLSLSR[P]L[LYVm@Z}@r@gBR_@pAgC`CwEd@aAFIDGFGFEHCHEHAJCJAJAJAH@R@vBd@lAVVFHBXFtCn@dB^D@ND`@HHBdATpG~AtA\\lAXtA^rAVRDNBb@JRBTDh@L@?zEbA~AZj@NhATv@N\\HD_@mAWsAYC?uA[QEiAUqDw@a@KgAU]Gy@QOESCICKCA?q@O{Aa@uD_AqD{@qA[GAWGFW?EAEAGCEW]EGEEIGcBy@aCmAEECECIGOCMCOCQ?S?QAOAQCOAOESEQEQMa@OY_@i@IKYe@MQY_@c@o@Wc@MQm@kAEIm@iAUa@KSMWo@sAWq@Mg@Ko@CQEi@Gc@Gq@AEK_AGWKc@c@oAACMYQa@q@iAIMg@w@q@}@c@i@CCGGGIcAmAMOCC]c@SWi@w@_@m@?AKQ{@{AGIOWEIYg@OW]s@??Q]kB}Ck@kAg@_A]u@u@oBWo@ISUq@CCMYq@mASY]c@CCWYEGmAuAGIYYa@_@q@_@e@UwAo@a@QgB}@u@_@SKQIKGMIw@m@q@i@QOYUSQGCECIAGCECGCAAECmAcAKI]YIGGGEGEECIUe@AAGMUi@Wk@MWMUOUOSOQQQQOSOQMaBeAi@_@IG}ByASMQOQQQQOQUYU[KOCEEIOUk@eACE[YSSGGECICE?IAI?E?C?WDQBK@YBMAOAWEc@Kk@OKCeAUICICOGWIQKINs@z@i@t@]h@EHs@hASZMf@Qr@Mn@uAoA_@Yc@_@UQTPb@^^XtAnALo@Ps@Lg@R[r@iADI\\i@h@u@r@{@HOo@e@DO^aBlCwKJc@BITaALi@ZeA@EDOFG?UAaDFAt@AP?X?IWGWEWEWG]C[E[C]AQAS?y@@IAa@?WC}C?O?MAK?MAKAKAICK?yA@K?I@I?K?K?MAUCw@@E@E@E@E@E?E?E?E?G?EAEAEAEAEACAECCAEECACCACCEAO_@EEGGEECCCECGAGIYEICIEGEEGICGEIEIEKGKGKGKEIEGEGGIEGEGIIGGIEIGGGIGGEGCECCCICGEICGCECICGCGAGAGAICIAIAIASASASCSAUAY?SAO?O@_@?M@O?I?K?O?Y?S?Q?QAM?MA?N?D?HKREHIDAA@@HEDIJS?I?E?OK?KAMA[AUC[Cc@I_@I_@Ki@OSIQISGUMi@WSKUMUQMIQOSSOMa@a@s@s@UU]c@GKGIGICEEGOWMU{@{AYm@O[GOWm@KYIWIWCWCK?EEQMi@G]I_@AGG_@G?E?E?E?]@K?CmCAmB?EAsBAeC?QAcACeF?Q?OA_AAkBAw@?w@AeA?UAaBAO?MAkFA{CgDBaDDcDBeDDcA@G?I?aAHK?Y?a@@yA@E?S?O@E?uC@aDDyCDI?S?cEDcCBeA@S?yBBO@a@?O?Q@OBA?KBO@ODMDQFMFOFMHOJMHMLKJMLKLKNILKPINwAdCqBnDKHKJMLMRc@v@CFMROOQSCEEGCEAGAGCGGc@AI?KAM?MAsAAM?KAOAGEW?k@e@c@aCyBEGCGCGEMCGEEkDeDQOIJKJa@^kAfAG?IBGBs@j@EIC@CAGBIBCFBGHCBXC@EDEDAFMl@a@lBAB]fASOOMOE{CsBr@cCs@bCzCrBNDNLRNOf@VP|@n@RLDF@?DHBJ@J@H?JA`C?T?RANANCXARCNCNCLELM\\EHITMPKRGPPLRLv@h@DDJFNL@@JJJJLLJN`@h@LRV\\HJZ`@`@d@FHDFLNKTsA`Dk@pACDCFQ`@MZCBMZaAzBw@fBCFIRGPINK\\KXeDhJUP]|@e@xAOb@Sh@Sh@Yx@KX[|@a@jAu@vB[x@EJ@Vk@|Ag@rAq@lBADCFCFGLMXo@`BGNIP}@`C}@|BENELEHAHCFI`@ET]bBCNCRERDLDH@@BNDNDRTrA@JZbBBP@DHZHTFRNb@HLDFJPJPLRPRRTVXTVZNPJRFJBNDNFCRDFLDMEEGQGGh@CL?DAFCLQrAMBy@N_Dp@G@I@DnA@LOEYGOIk@e@OOGIEJo@~AIPKIe@nA[z@EHGBMMCJIIw@s@yAcB}CrHMV\\\\b@`@LJDBJHTN`@PVL@@rAh@LF\\LZNp@TPFD@\\JLD`AX@?j@J^F`@HD@RDKTKbDMjFA^A\\?TAHAF?BADCFFHJ@@mAL??S?R?d@?f@@X?LNCH?D@D?hA_@H??D@FBn@@R@RFp@@LHj@LCFC@?ZGxAtBb@j@x@dAh@t@BDVZd@p@FHbC`DvAjBLPPVLPSFm@Vl@WRGMQQWMQJQ@I@I?E?w@?g@GCe@q@g@o@mA_BCMCUKBCWC[a@eEUoBAMQyA?C@C?CBCNKBCNMTSTWCUG]DYI@{C`@i@FKBOBC@KB_@J{@X[Lk@POBaA\\_@JOBE@ODMB[HKBC?E@SBgAh@aBt@g@TuAl@QJqB|@cAb@c@POBKDEBOD]NKBE?GAGCECAAIOCSg@aEQcAAGAKAILEk@}DLCMBa@{Ca@sCACOC?EKm@Ga@Ia@Mg@Mo@Os@ScACKIWK]Y}@Ia@FC[mAZlAGBe@mBS{@CO?MAO@MH_@b@gC@CDWDO`@_CRiA@IZcBHBBSH_@DUBOGGo@q@c@Ym@OOC]C_A?YAO?CN[fCAFS~@I^CLQp@CFKKF]\\qARo@@E\\qC@?AO?CJAH?FBRB?{ACGC?E@CB?FH??QIGC?AC@BB?HF?PI??GBCDAB?DGAAAAACAAWe@EIACAEGSW?C?A?C?eDn@E@i@HE@QDOBIBEQA??AAUMDLEESAAACAIk@RC@E?C@E?I@E?C?E@C@E?GBGBE@CBE@a@P_A`@A@C@A@C@i@iAWi@ISEKIMIOWk@KSUe@KUKTGPa@v@ADE@C?EACAECGCKG]S]SIEc@YKGKGa@UGCIC]O?GD@FDB@CAGEEA?FI?e@?k@E_@Ay@CWACBGBCB??CDBE??BCFCBCMAIEWI_BcAECMECFe@vAsAhEG?iAGACRw@Sv@@BEFG?IAcCKs@GG?Q`@KHIIGECCC@e@NcAXEg@Eq@IaBCy@`@J",
+ "legs": [
+ {
+ "steps": [
+ {
+ "geometry": "kdraGf`upLa@K",
+ "maneuver": {
+ "bearing_after": 14,
+ "bearing_before": 0,
+ "location": [
+ -71.055561,
+ 42.368861
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 14
+ ],
+ "location": [
+ -71.055561,
+ 42.368861
+ ]
+ }
+ ],
+ "weight": 22.4,
+ "duration": 22.4,
+ "distance": 19.2
+ },
+ {
+ "geometry": "meraGz_upLVuA",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 12,
+ "location": [
+ -71.055504,
+ 42.369029
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.055504,
+ 42.369029
+ ]
+ }
+ ],
+ "weight": 13.5,
+ "duration": 13.5,
+ "distance": 38
+ },
+ {
+ "geometry": "udraGd}tpLbCjAB@",
+ "maneuver": {
+ "bearing_after": 202,
+ "bearing_before": 111,
+ "location": [
+ -71.055074,
+ 42.368906
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.055074,
+ 42.368906
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.055446,
+ 42.368251
+ ]
+ }
+ ],
+ "weight": 22.9,
+ "duration": 22.9,
+ "distance": 82.2
+ },
+ {
+ "geometry": "m`raGr_upLANG`@CNCNCPADAHAHAD?J?F?J?L@P@D@FBBFDHH",
+ "maneuver": {
+ "bearing_after": 285,
+ "bearing_before": 206,
+ "location": [
+ -71.055464,
+ 42.368225
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.055464,
+ 42.368225
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.05651,
+ 42.368354
+ ]
+ }
+ ],
+ "weight": 29.1,
+ "duration": 29.1,
+ "distance": 104.3
+ },
+ {
+ "geometry": "o`raGxfupLFLXf@Td@Vf@HLFJFJLPFHd@r@LPRZd@p@BDJNLR",
+ "maneuver": {
+ "bearing_after": 236,
+ "bearing_before": 212,
+ "location": [
+ -71.056607,
+ 42.368239
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Commercial Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.056607,
+ 42.368239
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.057398,
+ 42.367754
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.058088,
+ 42.367243
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.058446,
+ 42.366971
+ ]
+ }
+ ],
+ "weight": 71.6,
+ "duration": 71.6,
+ "distance": 218.8
+ },
+ {
+ "geometry": "cxqaG|rupLFFBFDHFLBDfAfCb@dA",
+ "maneuver": {
+ "bearing_after": 230,
+ "bearing_before": 223,
+ "location": [
+ -71.058545,
+ 42.366896
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Causeway Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.058545,
+ 42.366896
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.059463,
+ 42.366389
+ ]
+ }
+ ],
+ "weight": 35.1,
+ "duration": 35.1,
+ "distance": 128.8
+ },
+ {
+ "geometry": "ysqaGxzupLQPEDONSRKJMNKLGDABc@b@OPGHo@v@KFOJMFA?OFQ@MDOHMH",
+ "maneuver": {
+ "bearing_after": 323,
+ "bearing_before": 234,
+ "location": [
+ -71.059808,
+ 42.366213
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lovejoy Wharf",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.059808,
+ 42.366213
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.060168,
+ 42.366569
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 300,
+ 345
+ ],
+ "location": [
+ -71.061112,
+ 42.367512
+ ]
+ }
+ ],
+ "weight": 56.300000000,
+ "duration": 56.300000000,
+ "distance": 226.4
+ },
+ {
+ "geometry": "k~qaG`dvpLKI",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 327,
+ "location": [
+ -71.061294,
+ 42.367897
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.061294,
+ 42.367897
+ ]
+ }
+ ],
+ "weight": 13.4,
+ "duration": 13.4,
+ "distance": 7.7
+ },
+ {
+ "geometry": "w~qaGvcvpLALCFEFCBGDCBEBIB",
+ "maneuver": {
+ "bearing_after": 286,
+ "bearing_before": 32,
+ "location": [
+ -71.061243,
+ 42.367955
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Paul Revere Landing Park",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.061243,
+ 42.367955
+ ]
+ }
+ ],
+ "weight": 11.9,
+ "duration": 11.9,
+ "distance": 35.1
+ },
+ {
+ "geometry": "c`raGjevpLA@?DCF",
+ "maneuver": {
+ "bearing_after": 286,
+ "bearing_before": 343,
+ "location": [
+ -71.061503,
+ 42.368184
+ ],
+ "modifier": "left",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 165,
+ 285
+ ],
+ "location": [
+ -71.061503,
+ 42.368184
+ ]
+ }
+ ],
+ "weight": 7.8,
+ "duration": 7.8,
+ "distance": 7
+ },
+ {
+ "geometry": "i`raGzevpL?AA@GBC?E@A?A?",
+ "maneuver": {
+ "bearing_after": 345,
+ "bearing_before": 292,
+ "location": [
+ -71.061576,
+ 42.368207
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 113,
+ 327,
+ 341,
+ 346
+ ],
+ "location": [
+ -71.061576,
+ 42.368207
+ ]
+ }
+ ],
+ "weight": 10.2,
+ "duration": 10.2,
+ "distance": 14.1
+ },
+ {
+ "geometry": "aaraG`fvpLC@C@KDKAA@EHDZ",
+ "maneuver": {
+ "bearing_after": 341,
+ "bearing_before": 343,
+ "location": [
+ -71.061612,
+ 42.368327
+ ],
+ "modifier": "left",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 180,
+ 195,
+ 345
+ ],
+ "location": [
+ -71.061612,
+ 42.368327
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.06166,
+ 42.368495
+ ]
+ }
+ ],
+ "weight": 41,
+ "duration": 41,
+ "distance": 36.7
+ },
+ {
+ "geometry": "cbraGpgvpLA?A@KHMAAA?@",
+ "maneuver": {
+ "bearing_after": 329,
+ "bearing_before": 257,
+ "location": [
+ -71.061848,
+ 42.368503
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 285,
+ 315,
+ 330
+ ],
+ "location": [
+ -71.061848,
+ 42.368503
+ ]
+ }
+ ],
+ "weight": 16.9,
+ "duration": 16.9,
+ "distance": 19
+ },
+ {
+ "geometry": "ccraGzgvpLI}@aB\\",
+ "maneuver": {
+ "bearing_after": 77,
+ "bearing_before": 0,
+ "location": [
+ -71.061896,
+ 42.36866
+ ],
+ "modifier": "right",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 78,
+ 180,
+ 190,
+ 198
+ ],
+ "location": [
+ -71.061896,
+ 42.36866
+ ]
+ }
+ ],
+ "weight": 72.9,
+ "duration": 72.9,
+ "distance": 81
+ },
+ {
+ "geometry": "ofraGzfvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 347,
+ "location": [
+ -71.061735,
+ 42.369195
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 167
+ ],
+ "location": [
+ -71.061735,
+ 42.369195
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Commercial Street, Lovejoy Wharf",
+ "weight": 425,
+ "duration": 425,
+ "distance": 1018.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "ofraGzfvpL`B]H|@",
+ "maneuver": {
+ "bearing_after": 167,
+ "bearing_before": 0,
+ "location": [
+ -71.061735,
+ 42.369195
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 167
+ ],
+ "location": [
+ -71.061735,
+ 42.369195
+ ]
+ }
+ ],
+ "weight": 76.5,
+ "duration": 76.5,
+ "distance": 81
+ },
+ {
+ "geometry": "ccraGzgvpLA?@@PBHGBC?C??",
+ "maneuver": {
+ "bearing_after": 196,
+ "bearing_before": 257,
+ "location": [
+ -71.061896,
+ 42.36866
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 78,
+ 180,
+ 190,
+ 198
+ ],
+ "location": [
+ -71.061896,
+ 42.36866
+ ]
+ }
+ ],
+ "weight": 21,
+ "duration": 21,
+ "distance": 24.3
+ },
+ {
+ "geometry": "cbraGpgvpLE[DI",
+ "maneuver": {
+ "bearing_after": 77,
+ "bearing_before": 135,
+ "location": [
+ -71.061848,
+ 42.368503
+ ],
+ "modifier": "left",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 285,
+ 315,
+ 330
+ ],
+ "location": [
+ -71.061848,
+ 42.368503
+ ]
+ }
+ ],
+ "weight": 17.9,
+ "duration": 17.9,
+ "distance": 17
+ },
+ {
+ "geometry": "cbraGjfvpL@AJ@JEBABA",
+ "maneuver": {
+ "bearing_after": 175,
+ "bearing_before": 104,
+ "location": [
+ -71.06166,
+ 42.368495
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.06166,
+ 42.368495
+ ]
+ }
+ ],
+ "weight": 17.7,
+ "duration": 17.7,
+ "distance": 19.7
+ },
+ {
+ "geometry": "aaraG`fvpL@?@?DAB?FC@A?@",
+ "maneuver": {
+ "bearing_after": 163,
+ "bearing_before": 161,
+ "location": [
+ -71.061612,
+ 42.368327
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 180,
+ 195,
+ 345
+ ],
+ "location": [
+ -71.061612,
+ 42.368327
+ ]
+ }
+ ],
+ "weight": 13.1,
+ "duration": 13.1,
+ "distance": 14.1
+ },
+ {
+ "geometry": "i`raGzevpLBG?E@A",
+ "maneuver": {
+ "bearing_after": 112,
+ "bearing_before": 165,
+ "location": [
+ -71.061576,
+ 42.368207
+ ],
+ "modifier": "left",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 113,
+ 327,
+ 341,
+ 346
+ ],
+ "location": [
+ -71.061576,
+ 42.368207
+ ]
+ }
+ ],
+ "weight": 8,
+ "duration": 8,
+ "distance": 7
+ },
+ {
+ "geometry": "c`raGjevpLHCDCBCFEBCDGBG@M",
+ "maneuver": {
+ "bearing_after": 163,
+ "bearing_before": 106,
+ "location": [
+ -71.061503,
+ 42.368184
+ ],
+ "modifier": "right",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Paul Revere Landing Park",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 285
+ ],
+ "location": [
+ -71.061503,
+ 42.368184
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 300
+ ],
+ "location": [
+ -71.061314,
+ 42.367971
+ ]
+ }
+ ],
+ "weight": 14.7,
+ "duration": 14.7,
+ "distance": 35.1
+ },
+ {
+ "geometry": "w~qaGvcvpLJH",
+ "maneuver": {
+ "bearing_after": 212,
+ "bearing_before": 106,
+ "location": [
+ -71.061243,
+ 42.367955
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.061243,
+ 42.367955
+ ]
+ }
+ ],
+ "weight": 6.2,
+ "duration": 6.2,
+ "distance": 7.7
+ },
+ {
+ "geometry": "k~qaG`dvpLLINILEPANG@?LGNKJG",
+ "maneuver": {
+ "bearing_after": 147,
+ "bearing_before": 212,
+ "location": [
+ -71.061294,
+ 42.367897
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.061294,
+ 42.367897
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 300,
+ 345
+ ],
+ "location": [
+ -71.061112,
+ 42.367512
+ ]
+ }
+ ],
+ "weight": 17.5,
+ "duration": 17.5,
+ "distance": 73.1
+ },
+ {
+ "geometry": "qzqaG`bvpLn@w@FINQb@c@@CFEJMLOJKRSNODEPQ",
+ "maneuver": {
+ "bearing_after": 139,
+ "bearing_before": 147,
+ "location": [
+ -71.060966,
+ 42.367292
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lovejoy Wharf",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 330
+ ],
+ "location": [
+ -71.060966,
+ 42.367292
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.060168,
+ 42.366569
+ ]
+ }
+ ],
+ "weight": 40.8,
+ "duration": 40.8,
+ "distance": 153.2
+ },
+ {
+ "geometry": "ysqaGxzupLDLb@|@",
+ "maneuver": {
+ "bearing_after": 233,
+ "bearing_before": 143,
+ "location": [
+ -71.059808,
+ 42.366213
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Causeway Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.059808,
+ 42.366213
+ ]
+ }
+ ],
+ "weight": 9.5,
+ "duration": 9.5,
+ "distance": 39.4
+ },
+ {
+ "geometry": "orqaGd}upL?D@F@D@FFPBFBJHT@B@DBD",
+ "maneuver": {
+ "bearing_after": 243,
+ "bearing_before": 233,
+ "location": [
+ -71.060194,
+ 42.366004
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Causeway Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 225,
+ 240
+ ],
+ "location": [
+ -71.060194,
+ 42.366004
+ ]
+ }
+ ],
+ "weight": 20.8,
+ "duration": 20.8,
+ "distance": 48.5
+ },
+ {
+ "geometry": "gqqaGl`vpLFG",
+ "maneuver": {
+ "bearing_after": 143,
+ "bearing_before": 239,
+ "location": [
+ -71.060713,
+ 42.365801
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Legends Way",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.060713,
+ 42.365801
+ ]
+ }
+ ],
+ "weight": 5.6,
+ "duration": 5.6,
+ "distance": 5.6
+ },
+ {
+ "geometry": "_qqaGd`vpLBHHRXr@LRHLl@zAHPFL`@~@BF",
+ "maneuver": {
+ "bearing_after": 234,
+ "bearing_before": 143,
+ "location": [
+ -71.060674,
+ 42.36576
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Connect Historic Boston Bicycle Trail",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.060674,
+ 42.36576
+ ]
+ }
+ ],
+ "weight": 42.5,
+ "duration": 42.5,
+ "distance": 157.7
+ },
+ {
+ "geometry": "ykqaG|ivpLGDMJO]kBfB",
+ "maneuver": {
+ "bearing_after": 327,
+ "bearing_before": 233,
+ "location": [
+ -71.062227,
+ 42.364932
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.062227,
+ 42.364932
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.062262,
+ 42.364973
+ ]
+ }
+ ],
+ "weight": 36.8,
+ "duration": 36.8,
+ "distance": 103.8
+ },
+ {
+ "geometry": "kpqaGxlvpLAA",
+ "maneuver": {
+ "bearing_after": 57,
+ "bearing_before": 323,
+ "location": [
+ -71.062691,
+ 42.365662
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.062691,
+ 42.365662
+ ]
+ }
+ ],
+ "weight": 1.3,
+ "duration": 1.3,
+ "distance": 1.5
+ },
+ {
+ "geometry": "mpqaGvlvpLWm@",
+ "maneuver": {
+ "bearing_after": 53,
+ "bearing_before": 57,
+ "location": [
+ -71.062676,
+ 42.365669
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 240
+ ],
+ "location": [
+ -71.062676,
+ 42.365669
+ ]
+ }
+ ],
+ "weight": 14,
+ "duration": 14,
+ "distance": 23.2
+ },
+ {
+ "geometry": "eqqaGhkvpL[X",
+ "maneuver": {
+ "bearing_after": 323,
+ "bearing_before": 53,
+ "location": [
+ -71.062447,
+ 42.36579
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.062447,
+ 42.36579
+ ]
+ }
+ ],
+ "weight": 8.6,
+ "duration": 8.6,
+ "distance": 18.8
+ },
+ {
+ "geometry": "arqaGblvpLGM",
+ "maneuver": {
+ "bearing_after": 53,
+ "bearing_before": 323,
+ "location": [
+ -71.06258,
+ 42.365928
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.06258,
+ 42.365928
+ ]
+ }
+ ],
+ "weight": 1.8,
+ "duration": 1.8,
+ "distance": 7.5
+ },
+ {
+ "geometry": "irqaGtkvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 54,
+ "location": [
+ -71.062507,
+ 42.365968
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 234
+ ],
+ "location": [
+ -71.062507,
+ 42.365968
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Lovejoy Wharf, Connect Historic Boston Bicycle Trail",
+ "weight": 374.3,
+ "duration": 374.3,
+ "distance": 838.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "irqaGtkvpLFL",
+ "maneuver": {
+ "bearing_after": 234,
+ "bearing_before": 0,
+ "location": [
+ -71.062507,
+ 42.365968
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 234
+ ],
+ "location": [
+ -71.062507,
+ 42.365968
+ ]
+ }
+ ],
+ "weight": 10,
+ "duration": 10,
+ "distance": 7.5
+ },
+ {
+ "geometry": "arqaGblvpLZY",
+ "maneuver": {
+ "bearing_after": 143,
+ "bearing_before": 233,
+ "location": [
+ -71.06258,
+ 42.365928
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.06258,
+ 42.365928
+ ]
+ }
+ ],
+ "weight": 8.7,
+ "duration": 8.7,
+ "distance": 18.8
+ },
+ {
+ "geometry": "eqqaGhkvpLVl@",
+ "maneuver": {
+ "bearing_after": 233,
+ "bearing_before": 143,
+ "location": [
+ -71.062447,
+ 42.36579
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.062447,
+ 42.36579
+ ]
+ }
+ ],
+ "weight": 5.6,
+ "duration": 5.6,
+ "distance": 23.2
+ },
+ {
+ "geometry": "mpqaGvlvpL@@",
+ "maneuver": {
+ "bearing_after": 237,
+ "bearing_before": 233,
+ "location": [
+ -71.062676,
+ 42.365669
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240
+ ],
+ "location": [
+ -71.062676,
+ 42.365669
+ ]
+ }
+ ],
+ "weight": 10.3,
+ "duration": 10.3,
+ "distance": 1.5
+ },
+ {
+ "geometry": "kpqaGxlvpLjBgBN\\LK",
+ "maneuver": {
+ "bearing_after": 143,
+ "bearing_before": 237,
+ "location": [
+ -71.062691,
+ 42.365662
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.062691,
+ 42.365662
+ ]
+ }
+ ],
+ "weight": 39,
+ "duration": 39,
+ "distance": 98.4
+ },
+ {
+ "geometry": "alqaGbjvpLBHBHDHBHDJP`@r@~A@D@B@@JT",
+ "maneuver": {
+ "bearing_after": 236,
+ "bearing_before": 147,
+ "location": [
+ -71.062262,
+ 42.364973
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Causeway Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.062262,
+ 42.364973
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.062407,
+ 42.364903
+ ]
+ }
+ ],
+ "weight": 26.5,
+ "duration": 26.5,
+ "distance": 108.4
+ },
+ {
+ "geometry": "qhqaGzpvpLBB@BB@B@B@D@B?D@l@?F?D?DAJDDBPFXJJDRHLDRFVDPDPBTDTBF?F@F@b@?V?TAN?B?jCKBAB?B?B?BADAVI",
+ "maneuver": {
+ "bearing_after": 209,
+ "bearing_before": 233,
+ "location": [
+ -71.063337,
+ 42.364411
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Staniford Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 180,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.063337,
+ 42.364411
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.063412,
+ 42.364316
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180
+ ],
+ "location": [
+ -71.063432,
+ 42.364006
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 30,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.063419,
+ 42.363913
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.063863,
+ 42.362222
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.06377,
+ 42.361288
+ ]
+ }
+ ],
+ "weight": 95.3,
+ "duration": 95.3,
+ "distance": 368.1
+ },
+ {
+ "geometry": "itpaGfsvpLAW?W?OA}@?E?K?M?I",
+ "maneuver": {
+ "bearing_after": 85,
+ "bearing_before": 163,
+ "location": [
+ -71.063724,
+ 42.361171
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cambridge Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.063724,
+ 42.361171
+ ]
+ }
+ ],
+ "weight": 40.2,
+ "duration": 40.2,
+ "distance": 69.6
+ },
+ {
+ "geometry": "mtpaG~mvpLB?B?D?D?B?B?V?Z?~BCRAtAA",
+ "maneuver": {
+ "bearing_after": 180,
+ "bearing_before": 88,
+ "location": [
+ -71.062879,
+ 42.361191
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bowdoin Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.062879,
+ 42.361191
+ ]
+ }
+ ],
+ "weight": 43,
+ "duration": 43,
+ "distance": 175.1
+ },
+ {
+ "geometry": "sjpaGvmvpLPHDD@D@B@PDz@@f@?DBfAB~@@F",
+ "maneuver": {
+ "bearing_after": 220,
+ "bearing_before": 178,
+ "location": [
+ -71.062842,
+ 42.359615
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Derne Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 180,
+ 225
+ ],
+ "location": [
+ -71.062842,
+ 42.359615
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.06306,
+ 42.359466
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.063556,
+ 42.359428
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.06395,
+ 42.359408
+ ]
+ }
+ ],
+ "weight": 41,
+ "duration": 41,
+ "distance": 130.8
+ },
+ {
+ "geometry": "cipaG|vvpLJA?@B?xA@",
+ "maneuver": {
+ "bearing_after": 168,
+ "bearing_before": 262,
+ "location": [
+ -71.064314,
+ 42.359376
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.064314,
+ 42.359376
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.064299,
+ 42.35932
+ ]
+ }
+ ],
+ "weight": 64.3,
+ "duration": 64.3,
+ "distance": 59.4
+ },
+ {
+ "geometry": "yepaG~vvpL?G",
+ "maneuver": {
+ "bearing_after": 78,
+ "bearing_before": 180,
+ "location": [
+ -71.064318,
+ 42.358845
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.064318,
+ 42.358845
+ ]
+ }
+ ],
+ "weight": 3.1,
+ "duration": 3.1,
+ "distance": 3.4
+ },
+ {
+ "geometry": "yepaGvvvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 79,
+ "location": [
+ -71.064277,
+ 42.358851
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 259
+ ],
+ "location": [
+ -71.064277,
+ 42.358851
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Staniford Street, Bowdoin Street",
+ "weight": 387,
+ "duration": 387,
+ "distance": 1064.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "yepaGvvvpL?F",
+ "maneuver": {
+ "bearing_after": 259,
+ "bearing_before": 0,
+ "location": [
+ -71.064277,
+ 42.358851
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 259
+ ],
+ "location": [
+ -71.064277,
+ 42.358851
+ ]
+ }
+ ],
+ "weight": 8.5,
+ "duration": 8.5,
+ "distance": 3.4
+ },
+ {
+ "geometry": "yepaG~vvpLyAAC??AK@",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 258,
+ "location": [
+ -71.064318,
+ 42.358845
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.064318,
+ 42.358845
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.064299,
+ 42.35932
+ ]
+ }
+ ],
+ "weight": 64.8,
+ "duration": 64.8,
+ "distance": 59.4
+ },
+ {
+ "geometry": "cipaG|vvpLDN",
+ "maneuver": {
+ "bearing_after": 244,
+ "bearing_before": 348,
+ "location": [
+ -71.064314,
+ 42.359376
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Derne Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.064314,
+ 42.359376
+ ]
+ }
+ ],
+ "weight": 5.9,
+ "duration": 5.9,
+ "distance": 6.4
+ },
+ {
+ "geometry": "}hpaGlwvpLD?dDAD@H?",
+ "maneuver": {
+ "bearing_after": 180,
+ "bearing_before": 244,
+ "location": [
+ -71.064385,
+ 42.359352
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hancock Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.064385,
+ 42.359352
+ ]
+ }
+ ],
+ "weight": 28.1,
+ "duration": 28.1,
+ "distance": 104.2
+ },
+ {
+ "geometry": "acpaGlwvpLJvB?D@J?J?jCDbA?F?JDv@\\dFHhAFdA@F@HBZ@\\Fz@H|@",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 185,
+ "location": [
+ -71.064393,
+ 42.358414
+ ],
+ "modifier": "right",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Mount Vernon Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 255
+ ],
+ "location": [
+ -71.064393,
+ 42.358414
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.065077,
+ 42.358344
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.066284,
+ 42.358307
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.068522,
+ 42.358023
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.068806,
+ 42.357986
+ ]
+ }
+ ],
+ "weight": 109.700000000,
+ "duration": 109.700000000,
+ "distance": 418.2
+ },
+ {
+ "geometry": "{_paGzvwpLFC@A~@]",
+ "maneuver": {
+ "bearing_after": 163,
+ "bearing_before": 258,
+ "location": [
+ -71.069415,
+ 42.357904
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069415,
+ 42.357904
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069399,
+ 42.357862
+ ]
+ }
+ ],
+ "weight": 39.699999999,
+ "duration": 39.699999999,
+ "distance": 44
+ },
+ {
+ "geometry": "q}oaGvuwpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 160,
+ "location": [
+ -71.069242,
+ 42.357529
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 340
+ ],
+ "location": [
+ -71.069242,
+ 42.357529
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Hancock Street, Mount Vernon Street",
+ "weight": 256.7,
+ "duration": 256.7,
+ "distance": 635.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "q}oaGvuwpL@?v@[",
+ "maneuver": {
+ "bearing_after": 162,
+ "bearing_before": 0,
+ "location": [
+ -71.069242,
+ 42.357529
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 162
+ ],
+ "location": [
+ -71.069242,
+ 42.357529
+ ]
+ }
+ ],
+ "weight": 35,
+ "duration": 35,
+ "distance": 34
+ },
+ {
+ "geometry": "w{oaGztwpL@F",
+ "maneuver": {
+ "bearing_after": 251,
+ "bearing_before": 158,
+ "location": [
+ -71.069099,
+ 42.357242
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069099,
+ 42.357242
+ ]
+ }
+ ],
+ "weight": 11.5,
+ "duration": 11.5,
+ "distance": 3.6
+ },
+ {
+ "geometry": "u{oaGbuwpLFC",
+ "maneuver": {
+ "bearing_after": 161,
+ "bearing_before": 251,
+ "location": [
+ -71.069141,
+ 42.357232
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "West Cedar Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069141,
+ 42.357232
+ ]
+ }
+ ],
+ "weight": 5.5,
+ "duration": 5.5,
+ "distance": 5.3
+ },
+ {
+ "geometry": "m{oaG~twpLPfAHr@@DBTDTDXDZ@D@HVpBXpB@P@DBL@L^zCN`AAL",
+ "maneuver": {
+ "bearing_after": 251,
+ "bearing_before": 161,
+ "location": [
+ -71.069122,
+ 42.357186
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chestnut Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069122,
+ 42.357186
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069875,
+ 42.357018
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.070293,
+ 42.35692
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.071669,
+ 42.356624
+ ]
+ }
+ ],
+ "weight": 100.1,
+ "duration": 100.1,
+ "distance": 325.9
+ },
+ {
+ "geometry": "kvoaGvlxpLTFPFLFJF",
+ "maneuver": {
+ "bearing_after": 199,
+ "bearing_before": 254,
+ "location": [
+ -71.072921,
+ 42.356381
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "David G. Mugar Way",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 195
+ ],
+ "location": [
+ -71.072921,
+ 42.356381
+ ]
+ }
+ ],
+ "weight": 38.4,
+ "duration": 38.4,
+ "distance": 39.2
+ },
+ {
+ "geometry": "itoaGvmxpL???A?A?A@?BA@A@ABA@A?A@CDBJKDCDAJGDADB",
+ "maneuver": {
+ "bearing_after": 144,
+ "bearing_before": 199,
+ "location": [
+ -71.073083,
+ 42.356051
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 150,
+ 210
+ ],
+ "location": [
+ -71.073083,
+ 42.356051
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.072973,
+ 42.355957
+ ]
+ }
+ ],
+ "weight": 24.6,
+ "duration": 24.6,
+ "distance": 47.6
+ },
+ {
+ "geometry": "aroaGllxpLKFGBCBEBCBCBA@A@?@?@@@?@@?BCBCBA?ADABC@ABA@A?A???AA?A?A?EBEDEBGDEFEDGHEHEHEJCJCHCHAHAH?@AF?HAJ?F?F?H@H?F@F?@?@@@@???@A?CCO?A?C?C?E?C?C?AAA??AAA??@A@AB?F?D@F?D?F@F@N",
+ "maneuver": {
+ "bearing_after": 331,
+ "bearing_before": 174,
+ "location": [
+ -71.072866,
+ 42.355693
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.072866,
+ 42.355693
+ ]
+ }
+ ],
+ "weight": 196.2,
+ "duration": 196.2,
+ "distance": 218
+ },
+ {
+ "geometry": "auoaGbtxpLBFBLBJ@L@L?HAH?HAJAJAHA@AFCFCHCDAB",
+ "maneuver": {
+ "bearing_after": 241,
+ "bearing_before": 260,
+ "location": [
+ -71.074096,
+ 42.356172
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dr. Paul Dudley White Path",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 240
+ ],
+ "location": [
+ -71.074096,
+ 42.356172
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 285
+ ],
+ "location": [
+ -71.074464,
+ 42.356093
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.074621,
+ 42.356109
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 300
+ ],
+ "location": [
+ -71.074729,
+ 42.356132
+ ]
+ }
+ ],
+ "weight": 24.1,
+ "duration": 24.1,
+ "distance": 72.7
+ },
+ {
+ "geometry": "kuoaGfyxpLDFJPNTLXNVHRFRDPDPHZFZJf@Fb@Jf@RfAP~@FX",
+ "maneuver": {
+ "bearing_after": 226,
+ "bearing_before": 306,
+ "location": [
+ -71.074916,
+ 42.35622
+ ],
+ "modifier": "left",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dr. Paul Dudley White Path",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.074916,
+ 42.35622
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 225
+ ],
+ "location": [
+ -71.075052,
+ 42.356127
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 240
+ ],
+ "location": [
+ -71.075614,
+ 42.355808
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.076272,
+ 42.355603
+ ]
+ }
+ ],
+ "weight": 61,
+ "duration": 61,
+ "distance": 236.8
+ },
+ {
+ "geometry": "mooaGbiypLKDQFUJC@",
+ "maneuver": {
+ "bearing_after": 337,
+ "bearing_before": 248,
+ "location": [
+ -71.077458,
+ 42.355274
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077458,
+ 42.355274
+ ]
+ }
+ ],
+ "weight": 15.5,
+ "duration": 15.5,
+ "distance": 32.4
+ },
+ {
+ "geometry": "eqoaG~iypLESGYMs@Km@EOE[Mo@Ii@GWEUEOEOEMGOEKIQKOKKIMGK",
+ "maneuver": {
+ "bearing_after": 66,
+ "bearing_before": 338,
+ "location": [
+ -71.077595,
+ 42.355547
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077595,
+ 42.355547
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 270
+ ],
+ "location": [
+ -71.075381,
+ 42.356327
+ ]
+ }
+ ],
+ "weight": 61.5,
+ "duration": 61.5,
+ "distance": 219.5
+ },
+ {
+ "geometry": "svoaGh{xpLW^",
+ "maneuver": {
+ "bearing_after": 312,
+ "bearing_before": 45,
+ "location": [
+ -71.075248,
+ 42.356423
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.075248,
+ 42.356423
+ ]
+ }
+ ],
+ "weight": 4.5,
+ "duration": 4.5,
+ "distance": 18.6
+ },
+ {
+ "geometry": "kwoaGh|xpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 313,
+ "location": [
+ -71.075414,
+ 42.356537
+ ],
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 133
+ ],
+ "location": [
+ -71.075414,
+ 42.356537
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Chestnut Street, Dr. Paul Dudley White Path",
+ "weight": 577.9,
+ "duration": 577.9,
+ "distance": 1253.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "kwoaGh|xpLV_@",
+ "maneuver": {
+ "bearing_after": 133,
+ "bearing_before": 0,
+ "location": [
+ -71.075414,
+ 42.356537
+ ],
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 133
+ ],
+ "location": [
+ -71.075414,
+ 42.356537
+ ]
+ }
+ ],
+ "weight": 9,
+ "duration": 9,
+ "distance": 18.6
+ },
+ {
+ "geometry": "svoaGh{xpLFJHLJJJNHPDJFNDLDNDNDTFVHh@Ln@DZDNJl@Lr@FXDR",
+ "maneuver": {
+ "bearing_after": 225,
+ "bearing_before": 132,
+ "location": [
+ -71.075248,
+ 42.356423
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.075248,
+ 42.356423
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 270
+ ],
+ "location": [
+ -71.075381,
+ 42.356327
+ ]
+ }
+ ],
+ "weight": 60.4,
+ "duration": 60.4,
+ "distance": 219.5
+ },
+ {
+ "geometry": "eqoaG~iypLBATKPGJE",
+ "maneuver": {
+ "bearing_after": 158,
+ "bearing_before": 246,
+ "location": [
+ -71.077595,
+ 42.355547
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077595,
+ 42.355547
+ ]
+ }
+ ],
+ "weight": 16,
+ "duration": 16,
+ "distance": 32.4
+ },
+ {
+ "geometry": "mooaGbiypLFb@Lr@Jp@Nz@Nv@Lt@H`@DXDPHd@",
+ "maneuver": {
+ "bearing_after": 250,
+ "bearing_before": 157,
+ "location": [
+ -71.077458,
+ 42.355274
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dr. Paul Dudley White Path",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077458,
+ 42.355274
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 210,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.079171,
+ 42.354824
+ ]
+ }
+ ],
+ "weight": 53.3,
+ "duration": 53.3,
+ "distance": 186.1
+ },
+ {
+ "geometry": "}koaGjvypLFANIJE",
+ "maneuver": {
+ "bearing_after": 157,
+ "bearing_before": 248,
+ "location": [
+ -71.079584,
+ 42.354707
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.079584,
+ 42.354707
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.079565,
+ 42.354671
+ ]
+ }
+ ],
+ "weight": 13.5,
+ "duration": 13.5,
+ "distance": 21.5
+ },
+ {
+ "geometry": "yjoaGxuypLAI",
+ "maneuver": {
+ "bearing_after": 68,
+ "bearing_before": 158,
+ "location": [
+ -71.079493,
+ 42.354526
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.079493,
+ 42.354526
+ ]
+ }
+ ],
+ "weight": 1.1,
+ "duration": 1.1,
+ "distance": 4.4
+ },
+ {
+ "geometry": "{joaGnuypL[cBz@]X~AJA",
+ "maneuver": {
+ "bearing_after": 68,
+ "bearing_before": 68,
+ "location": [
+ -71.079443,
+ 42.35454
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255
+ ],
+ "location": [
+ -71.079443,
+ 42.35454
+ ]
+ }
+ ],
+ "weight": 125.3,
+ "duration": 125.3,
+ "distance": 127.5
+ },
+ {
+ "geometry": "uhoaGjtypL@HvBzL",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 167,
+ "location": [
+ -71.079255,
+ 42.354194
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Back Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.079255,
+ 42.354194
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.079311,
+ 42.354179
+ ]
+ }
+ ],
+ "weight": 56.900000000,
+ "duration": 56.900000000,
+ "distance": 199.2
+ },
+ {
+ "geometry": "{doaGpbzpLBABAhAc@BADAJIJE`Aa@z@]BALGHC`Aa@",
+ "maneuver": {
+ "bearing_after": 154,
+ "bearing_before": 248,
+ "location": [
+ -71.081529,
+ 42.353584
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Exeter Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.081529,
+ 42.353584
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.081263,
+ 42.35306
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ false,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.080864,
+ 42.352282
+ ]
+ }
+ ],
+ "weight": 52.4,
+ "duration": 52.4,
+ "distance": 200.1
+ },
+ {
+ "geometry": "kznaGd}ypLBNrBhLBP",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 158,
+ "location": [
+ -71.080673,
+ 42.351899
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Public Alley 426",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.080673,
+ 42.351899
+ ]
+ }
+ ],
+ "weight": 48.3,
+ "duration": 48.3,
+ "distance": 201.1
+ },
+ {
+ "geometry": "ovnaGpkzpLBN~AbJBP",
+ "maneuver": {
+ "bearing_after": 247,
+ "bearing_before": 250,
+ "location": [
+ -71.082968,
+ 42.35128
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Public Alley 427",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.082968,
+ 42.35128
+ ]
+ }
+ ],
+ "weight": 49.5,
+ "duration": 49.5,
+ "distance": 170.7
+ },
+ {
+ "geometry": "gsnaGvwzpLbAa@DAJEDCFCRG",
+ "maneuver": {
+ "bearing_after": 158,
+ "bearing_before": 250,
+ "location": [
+ -71.084917,
+ 42.350758
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Gloucester Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084917,
+ 42.350758
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084708,
+ 42.350333
+ ]
+ }
+ ],
+ "weight": 40.3,
+ "duration": 40.3,
+ "distance": 70.5
+ },
+ {
+ "geometry": "oonaG|uzpLBL?@VtA?D",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 160,
+ "location": [
+ -71.084625,
+ 42.350161
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084625,
+ 42.350161
+ ]
+ }
+ ],
+ "weight": 42.7,
+ "duration": 42.7,
+ "distance": 47.3
+ },
+ {
+ "geometry": "snnaGhyzpL@A@?",
+ "maneuver": {
+ "bearing_after": 239,
+ "bearing_before": 250,
+ "location": [
+ -71.085165,
+ 42.350015
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 255
+ ],
+ "location": [
+ -71.085165,
+ 42.350015
+ ]
+ }
+ ],
+ "weight": 1.8,
+ "duration": 1.8,
+ "distance": 2.1
+ },
+ {
+ "geometry": "onnaGfyzpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 185,
+ "location": [
+ -71.085166,
+ 42.349997
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 5
+ ],
+ "location": [
+ -71.085166,
+ 42.349997
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Dr. Paul Dudley White Path, Back Street",
+ "weight": 570.5,
+ "duration": 570.5,
+ "distance": 1500.9
+ },
+ {
+ "steps": [
+ {
+ "geometry": "onnaGfyzpLA?A@?EWuA?ACM",
+ "maneuver": {
+ "bearing_after": 5,
+ "bearing_before": 0,
+ "location": [
+ -71.085166,
+ 42.349997
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 5
+ ],
+ "location": [
+ -71.085166,
+ 42.349997
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 255
+ ],
+ "location": [
+ -71.085165,
+ 42.350015
+ ]
+ }
+ ],
+ "weight": 48.599999999,
+ "duration": 48.599999999,
+ "distance": 49.4
+ },
+ {
+ "geometry": "oonaG|uzpLPIDABCFAJG|@]HEx@YDCLGLE~@]v@[DARI",
+ "maneuver": {
+ "bearing_after": 158,
+ "bearing_before": 68,
+ "location": [
+ -71.084625,
+ 42.350161
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Gloucester Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084625,
+ 42.350161
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084537,
+ 42.349982
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.084133,
+ 42.349167
+ ]
+ }
+ ],
+ "weight": 97.199999999,
+ "duration": 97.199999999,
+ "distance": 211.4
+ },
+ {
+ "geometry": "idnaGlpzpLQ}@o@wDAEEWGYWyAm@kDAGEUk@cDO{@CKES",
+ "maneuver": {
+ "bearing_after": 68,
+ "bearing_before": 158,
+ "location": [
+ -71.083749,
+ 42.348373
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boylston Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.083749,
+ 42.348373
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.081789,
+ 42.348896
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.080775,
+ 42.349171
+ ]
+ }
+ ],
+ "weight": 112.800000000,
+ "duration": 112.800000000,
+ "distance": 372.4
+ },
+ {
+ "geometry": "oknaGzuypLNGvAi@LEj@UPIXKHCp@YZKJEJENGDABADAD?B?B?",
+ "maneuver": {
+ "bearing_after": 158,
+ "bearing_before": 68,
+ "location": [
+ -71.079501,
+ 42.349515
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Exeter Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.079501,
+ 42.349515
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.079106,
+ 42.348705
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 165,
+ 210,
+ 345
+ ],
+ "location": [
+ -71.07873,
+ 42.347934
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.078691,
+ 42.347854
+ ]
+ }
+ ],
+ "weight": 84.5,
+ "duration": 84.5,
+ "distance": 213.5
+ },
+ {
+ "geometry": "c`naGrpypLGKGQEIEMEQEYEUGWKu@Io@OeAIm@",
+ "maneuver": {
+ "bearing_after": 52,
+ "bearing_before": 170,
+ "location": [
+ -71.078658,
+ 42.347701
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 9",
+ "driving_side": "right",
+ "name": "Stuart Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.078658,
+ 42.347701
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.077937,
+ 42.347965
+ ]
+ }
+ ],
+ "weight": 38.8,
+ "duration": 38.8,
+ "distance": 160.2
+ },
+ {
+ "geometry": "icnaGheypL?W?OBM@C@EFKHGjCgAPGLGRILILM^U\\MlAe@|@]TIRKLEZKjAg@HEJCt@Yd@Sh@SPGLG~@_@HCl@WLEJEpBs@RI",
+ "maneuver": {
+ "bearing_after": 101,
+ "bearing_before": 73,
+ "location": [
+ -71.076852,
+ 42.348209
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dartmouth Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 75,
+ 105,
+ 255
+ ],
+ "location": [
+ -71.076852,
+ 42.348209
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 165,
+ 330,
+ 345
+ ],
+ "location": [
+ -71.075714,
+ 42.346819
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.075246,
+ 42.345864
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.075095,
+ 42.34555
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074872,
+ 42.345115
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.074717,
+ 42.344788
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074475,
+ 42.344301
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074108,
+ 42.343558
+ ]
+ }
+ ],
+ "weight": 165.9,
+ "duration": 165.9,
+ "distance": 664.3
+ },
+ {
+ "geometry": "uamaG`rxpLREFGNOV]HK\\e@j@q@LOV]Za@dAsABCJOHIDGTYDIBIBI",
+ "maneuver": {
+ "bearing_after": 163,
+ "bearing_before": 160,
+ "location": [
+ -71.073773,
+ 42.342828
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "West Dedham Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.073773,
+ 42.342828
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.07347,
+ 42.342489
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.073407,
+ 42.342441
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.072046,
+ 42.341306
+ ]
+ }
+ ],
+ "weight": 65.3,
+ "duration": 65.3,
+ "distance": 264.1
+ },
+ {
+ "geometry": "qvlaG~dxpLJB",
+ "maneuver": {
+ "bearing_after": 188,
+ "bearing_before": 133,
+ "location": [
+ -71.071681,
+ 42.341053
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.071681,
+ 42.341053
+ ]
+ }
+ ],
+ "weight": 7.9,
+ "duration": 7.9,
+ "distance": 6.9
+ },
+ {
+ "geometry": "evlaGbexpLBQP_ADQ",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 188,
+ "location": [
+ -71.071695,
+ 42.340992
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 150,
+ 300
+ ],
+ "location": [
+ -71.071695,
+ 42.340992
+ ]
+ }
+ ],
+ "weight": 39.8,
+ "duration": 39.8,
+ "distance": 44.1
+ },
+ {
+ "geometry": "iulaG~axpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 116,
+ "location": [
+ -71.071196,
+ 42.34085
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 296
+ ],
+ "location": [
+ -71.071196,
+ 42.34085
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Boylston Street, Dartmouth Street",
+ "weight": 660.8,
+ "duration": 660.8,
+ "distance": 1986.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "iulaG~axpLEPQ~@CP",
+ "maneuver": {
+ "bearing_after": 296,
+ "bearing_before": 0,
+ "location": [
+ -71.071196,
+ 42.34085
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 296
+ ],
+ "location": [
+ -71.071196,
+ 42.34085
+ ]
+ }
+ ],
+ "weight": 43,
+ "duration": 43,
+ "distance": 44.1
+ },
+ {
+ "geometry": "evlaGbexpLKC",
+ "maneuver": {
+ "bearing_after": 8,
+ "bearing_before": 291,
+ "location": [
+ -71.071695,
+ 42.340992
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 150,
+ 300
+ ],
+ "location": [
+ -71.071695,
+ 42.340992
+ ]
+ }
+ ],
+ "weight": 9.4,
+ "duration": 9.4,
+ "distance": 6.9
+ },
+ {
+ "geometry": "qvlaG~dxpLCHCHEHUXEFIHKNCBeArA[`@W\\MNk@p@]d@IJW\\ONGFSD",
+ "maneuver": {
+ "bearing_after": 313,
+ "bearing_before": 8,
+ "location": [
+ -71.071681,
+ 42.341053
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "West Dedham Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.071681,
+ 42.341053
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.072046,
+ 42.341306
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.073407,
+ 42.342441
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.07347,
+ 42.342489
+ ]
+ }
+ ],
+ "weight": 65.399999999,
+ "duration": 65.399999999,
+ "distance": 264.1
+ },
+ {
+ "geometry": "uamaG`rxpLSHqBr@KDMDm@VIB",
+ "maneuver": {
+ "bearing_after": 340,
+ "bearing_before": 343,
+ "location": [
+ -71.073773,
+ 42.342828
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dartmouth Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.073773,
+ 42.342828
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074108,
+ 42.343558
+ ]
+ }
+ ],
+ "weight": 38.6,
+ "duration": 38.6,
+ "distance": 127
+ },
+ {
+ "geometry": "mhmaGfuxpLBP`AxFBL",
+ "maneuver": {
+ "bearing_after": 250,
+ "bearing_before": 340,
+ "location": [
+ -71.074284,
+ 42.343906
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074284,
+ 42.343906
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.074368,
+ 42.343885
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.075623,
+ 42.343556
+ ]
+ }
+ ],
+ "weight": 38.8,
+ "duration": 38.8,
+ "distance": 122.6
+ },
+ {
+ "geometry": "cfmaG`~xpLJG",
+ "maneuver": {
+ "bearing_after": 156,
+ "bearing_before": 250,
+ "location": [
+ -71.075687,
+ 42.34354
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "West Canton Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.075687,
+ 42.34354
+ ]
+ }
+ ],
+ "weight": 6.5,
+ "duration": 6.5,
+ "distance": 7.5
+ },
+ {
+ "geometry": "wemaGx}xpLBNPhAFZJp@BJBN@FDNBLBTBJF^BLBJDPLz@Nx@BN",
+ "maneuver": {
+ "bearing_after": 250,
+ "bearing_before": 156,
+ "location": [
+ -71.07565,
+ 42.343478
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.07565,
+ 42.343478
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.075729,
+ 42.343458
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.076099,
+ 42.343366
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.076489,
+ 42.343267
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.076554,
+ 42.34325
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.076625,
+ 42.343229
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.076932,
+ 42.343146
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.077217,
+ 42.343065
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077282,
+ 42.343046
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.077367,
+ 42.343024
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.077673,
+ 42.342946
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.077961,
+ 42.342868
+ ]
+ }
+ ],
+ "weight": 52.199999999,
+ "duration": 52.199999999,
+ "distance": 208.9
+ },
+ {
+ "geometry": "yamaGvlypLOPIJQTMRABGT",
+ "maneuver": {
+ "bearing_after": 316,
+ "bearing_before": 251,
+ "location": [
+ -71.078038,
+ 42.34285
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "West Newton Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.078038,
+ 42.34285
+ ]
+ }
+ ],
+ "weight": 19.6,
+ "duration": 19.6,
+ "distance": 56.4
+ },
+ {
+ "geometry": "}cmaGxoypLDFBDpAbBJLFHtAjBHJDFxAlBHJDFvAnBFFFFJL~@nA@@HJ",
+ "maneuver": {
+ "bearing_after": 222,
+ "bearing_before": 295,
+ "location": [
+ -71.078533,
+ 42.343193
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Columbus Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.078533,
+ 42.343193
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.079172,
+ 42.342674
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.07982,
+ 42.342148
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.080468,
+ 42.341622
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.081106,
+ 42.341109
+ ]
+ }
+ ],
+ "weight": 96.9,
+ "duration": 96.9,
+ "distance": 385.8
+ },
+ {
+ "geometry": "}slaGpczpLMTqDfGOV",
+ "maneuver": {
+ "bearing_after": 310,
+ "bearing_before": 222,
+ "location": [
+ -71.081689,
+ 42.34063
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Massachusetts Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.081689,
+ 42.34063
+ ]
+ }
+ ],
+ "weight": 65,
+ "duration": 65,
+ "distance": 171.9
+ },
+ {
+ "geometry": "mzlaGfmzpLEKEE",
+ "maneuver": {
+ "bearing_after": 46,
+ "bearing_before": 310,
+ "location": [
+ -71.083235,
+ 42.341668
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.083235,
+ 42.341668
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 9.2
+ },
+ {
+ "geometry": "yzlaGtlzpLADg@x@",
+ "maneuver": {
+ "bearing_after": 312,
+ "bearing_before": 46,
+ "location": [
+ -71.083154,
+ 42.341725
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.083154,
+ 42.341725
+ ]
+ }
+ ],
+ "weight": 31.6,
+ "duration": 31.6,
+ "distance": 35
+ },
+ {
+ "geometry": "c|laGtnzpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 313,
+ "location": [
+ -71.083465,
+ 42.34194
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 133
+ ],
+ "location": [
+ -71.083465,
+ 42.34194
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "West Dedham Street, Columbus Avenue",
+ "weight": 478.2,
+ "duration": 478.2,
+ "distance": 1439.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "c|laGtnzpLMPe@z@EJGJ",
+ "maneuver": {
+ "bearing_after": 313,
+ "bearing_before": 0,
+ "location": [
+ -71.083465,
+ 42.34194
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 313
+ ],
+ "location": [
+ -71.083465,
+ 42.34194
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.08392,
+ 42.342233
+ ]
+ }
+ ],
+ "weight": 58.7,
+ "duration": 58.7,
+ "distance": 56.3
+ },
+ {
+ "geometry": "e~laGzqzpLLPJLBBh@t@BDbDdEJLFHLP",
+ "maneuver": {
+ "bearing_after": 220,
+ "bearing_before": 309,
+ "location": [
+ -71.083981,
+ 42.342272
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Saint Botolph Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.083981,
+ 42.342272
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.084072,
+ 42.342197
+ ]
+ }
+ ],
+ "weight": 55.800000000,
+ "duration": 55.800000000,
+ "distance": 206.1
+ },
+ {
+ "geometry": "sulaGj|zpLINqAvBABKRQTKRi@z@CDk@`Ac@r@CFAHAJIbAu@xIKhAAP",
+ "maneuver": {
+ "bearing_after": 312,
+ "bearing_before": 222,
+ "location": [
+ -71.085662,
+ 42.340898
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Gainsborough Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.085662,
+ 42.340898
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.086459,
+ 42.341432
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.086569,
+ 42.341517
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.087331,
+ 42.342027
+ ]
+ }
+ ],
+ "weight": 136.7,
+ "duration": 136.7,
+ "distance": 441.6
+ },
+ {
+ "geometry": "o`maGdy{pLH@z@L\\HNF~@f@vCbBB@",
+ "maneuver": {
+ "bearing_after": 188,
+ "bearing_before": 281,
+ "location": [
+ -71.090265,
+ 42.342641
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hemenway Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.090265,
+ 42.342641
+ ]
+ }
+ ],
+ "weight": 52.6,
+ "duration": 52.6,
+ "distance": 202.4
+ },
+ {
+ "geometry": "_vlaGt~{pLER?@o@hCCFERWAEFKR",
+ "maneuver": {
+ "bearing_after": 293,
+ "bearing_before": 205,
+ "location": [
+ -71.091154,
+ 42.340955
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.091154,
+ 42.340955
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.091247,
+ 42.340987
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.09199,
+ 42.341246
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.092122,
+ 42.341427
+ ]
+ }
+ ],
+ "weight": 36.7,
+ "duration": 36.7,
+ "distance": 114.4
+ },
+ {
+ "geometry": "iylaGje|pLNNZl@Rp@Np@RlAJn@BZ",
+ "maneuver": {
+ "bearing_after": 219,
+ "bearing_before": 310,
+ "location": [
+ -71.092218,
+ 42.341489
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lost Emerald Necklace",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.092218,
+ 42.341489
+ ]
+ }
+ ],
+ "weight": 38.5,
+ "duration": 38.5,
+ "distance": 148.1
+ },
+ {
+ "geometry": "uulaGfo|pLSLIH",
+ "maneuver": {
+ "bearing_after": 331,
+ "bearing_before": 254,
+ "location": [
+ -71.093802,
+ 42.340905
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.093802,
+ 42.340905
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.09387,
+ 42.341005
+ ]
+ }
+ ],
+ "weight": 5.6,
+ "duration": 5.6,
+ "distance": 19.7
+ },
+ {
+ "geometry": "svlaG~o|pLQX",
+ "maneuver": {
+ "bearing_after": 310,
+ "bearing_before": 326,
+ "location": [
+ -71.093917,
+ 42.34106
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 150,
+ 315
+ ],
+ "location": [
+ -71.093917,
+ 42.34106
+ ]
+ }
+ ],
+ "weight": 13.5,
+ "duration": 13.5,
+ "distance": 14.9
+ },
+ {
+ "geometry": "ewlaGxp|pLGTG`@",
+ "maneuver": {
+ "bearing_after": 298,
+ "bearing_before": 310,
+ "location": [
+ -71.094051,
+ 42.34115
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 135,
+ 300
+ ],
+ "location": [
+ -71.094051,
+ 42.34115
+ ]
+ }
+ ],
+ "weight": 6.8,
+ "duration": 6.8,
+ "distance": 24.6
+ },
+ {
+ "geometry": "uwlaGpr|pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 287,
+ "location": [
+ -71.094327,
+ 42.341231
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 107
+ ],
+ "location": [
+ -71.094327,
+ 42.341231
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Saint Botolph Street, Gainsborough Street",
+ "weight": 404.9,
+ "duration": 404.9,
+ "distance": 1228.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "uwlaGpr|pLIj@Kf@[v@",
+ "maneuver": {
+ "bearing_after": 287,
+ "bearing_before": 0,
+ "location": [
+ -71.094327,
+ 42.341231
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 287
+ ],
+ "location": [
+ -71.094327,
+ 42.341231
+ ]
+ }
+ ],
+ "weight": 18,
+ "duration": 18,
+ "distance": 64.3
+ },
+ {
+ "geometry": "gylaG|v|pLQPQPa@X",
+ "maneuver": {
+ "bearing_after": 322,
+ "bearing_before": 302,
+ "location": [
+ -71.095027,
+ 42.341477
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 285,
+ 330
+ ],
+ "location": [
+ -71.095027,
+ 42.341477
+ ]
+ }
+ ],
+ "weight": 16.3,
+ "duration": 16.3,
+ "distance": 46.5
+ },
+ {
+ "geometry": "m{laGzx|pL?CMk@",
+ "maneuver": {
+ "bearing_after": 67,
+ "bearing_before": 329,
+ "location": [
+ -71.095339,
+ 42.341825
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.095339,
+ 42.341825
+ ]
+ }
+ ],
+ "weight": 7.4,
+ "duration": 7.4,
+ "distance": 21.1
+ },
+ {
+ "geometry": "{{laGjw|pL?EAI",
+ "maneuver": {
+ "bearing_after": 74,
+ "bearing_before": 67,
+ "location": [
+ -71.095101,
+ 42.341896
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 255
+ ],
+ "location": [
+ -71.095101,
+ 42.341896
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.095065,
+ 42.341903
+ ]
+ }
+ ],
+ "weight": 10.5,
+ "duration": 10.5,
+ "distance": 6.9
+ },
+ {
+ "geometry": "}{laGzv|pLC@E?CACA",
+ "maneuver": {
+ "bearing_after": 7,
+ "bearing_before": 71,
+ "location": [
+ -71.095021,
+ 42.341913
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 255
+ ],
+ "location": [
+ -71.095021,
+ 42.341913
+ ]
+ }
+ ],
+ "weight": 9,
+ "duration": 9,
+ "distance": 10.3
+ },
+ {
+ "geometry": "o|laGxv|pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 26,
+ "location": [
+ -71.095003,
+ 42.342001
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 206
+ ],
+ "location": [
+ -71.095003,
+ 42.342001
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "",
+ "weight": 61.2,
+ "duration": 61.2,
+ "distance": 149.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "o|laGxv|pLB@B@D?BA",
+ "maneuver": {
+ "bearing_after": 206,
+ "bearing_before": 0,
+ "location": [
+ -71.095003,
+ 42.342001
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 206
+ ],
+ "location": [
+ -71.095003,
+ 42.342001
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 10.3
+ },
+ {
+ "geometry": "}{laGzv|pL@H?D",
+ "maneuver": {
+ "bearing_after": 251,
+ "bearing_before": 187,
+ "location": [
+ -71.095021,
+ 42.341913
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 255
+ ],
+ "location": [
+ -71.095021,
+ 42.341913
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.095065,
+ 42.341903
+ ]
+ }
+ ],
+ "weight": 6.199999999,
+ "duration": 6.199999999,
+ "distance": 6.9
+ },
+ {
+ "geometry": "{{laGjw|pLLj@?BPl@Pp@",
+ "maneuver": {
+ "bearing_after": 247,
+ "bearing_before": 254,
+ "location": [
+ -71.095101,
+ 42.341896
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255
+ ],
+ "location": [
+ -71.095101,
+ 42.341896
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.095339,
+ 42.341825
+ ]
+ }
+ ],
+ "weight": 19.3,
+ "duration": 19.3,
+ "distance": 65.7
+ },
+ {
+ "geometry": "izlaGz{|pL]jB",
+ "maneuver": {
+ "bearing_after": 289,
+ "bearing_before": 241,
+ "location": [
+ -71.095824,
+ 42.341648
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 105,
+ 240,
+ 285
+ ],
+ "location": [
+ -71.095824,
+ 42.341648
+ ]
+ }
+ ],
+ "weight": 14.2,
+ "duration": 14.2,
+ "distance": 47.7
+ },
+ {
+ "geometry": "g{laGf_}pLMF",
+ "maneuver": {
+ "bearing_after": 336,
+ "bearing_before": 289,
+ "location": [
+ -71.096364,
+ 42.341802
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 105,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.096364,
+ 42.341802
+ ]
+ }
+ ],
+ "weight": 9.1,
+ "duration": 9.1,
+ "distance": 7.8
+ },
+ {
+ "geometry": "u{laGn_}pLBP",
+ "maneuver": {
+ "bearing_after": 251,
+ "bearing_before": 336,
+ "location": [
+ -71.096402,
+ 42.341866
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Park Drive",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.096402,
+ 42.341866
+ ]
+ }
+ ],
+ "weight": 7.8,
+ "duration": 7.8,
+ "distance": 7.7
+ },
+ {
+ "geometry": "q{laG``}pL[LMFiAb@uAh@sAf@iAb@IDKDgA`@",
+ "maneuver": {
+ "bearing_after": 338,
+ "bearing_before": 251,
+ "location": [
+ -71.096491,
+ 42.341845
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Jersey Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.096491,
+ 42.341845
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.096562,
+ 42.34199
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.096988,
+ 42.342863
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.097396,
+ 42.343698
+ ]
+ }
+ ],
+ "weight": 68.199999999,
+ "duration": 68.199999999,
+ "distance": 268.2
+ },
+ {
+ "geometry": "wimaG~f}pLCKi@}CBQQgA",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 338,
+ "location": [
+ -71.0976,
+ 42.344115
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Private Alley 937",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.0976,
+ 42.344115
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.097542,
+ 42.344135
+ ]
+ }
+ ],
+ "weight": 36.4,
+ "duration": 36.4,
+ "distance": 114.1
+ },
+ {
+ "geometry": "skmaGz~|pLmAh@",
+ "maneuver": {
+ "bearing_after": 337,
+ "bearing_before": 70,
+ "location": [
+ -71.0963,
+ 42.344416
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.0963,
+ 42.344416
+ ]
+ }
+ ],
+ "weight": 19.5,
+ "duration": 19.5,
+ "distance": 47.4
+ },
+ {
+ "geometry": "anmaGd`}pLVxA",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 337,
+ "location": [
+ -71.096512,
+ 42.344813
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.096512,
+ 42.344813
+ ]
+ }
+ ],
+ "weight": 35.5,
+ "duration": 35.5,
+ "distance": 39.3
+ },
+ {
+ "geometry": "immaG~b}pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 250,
+ "location": [
+ -71.096959,
+ 42.344689
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 70
+ ],
+ "location": [
+ -71.096959,
+ 42.344689
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Jersey Street, Private Alley 937",
+ "weight": 227.4,
+ "duration": 227.4,
+ "distance": 615
+ },
+ {
+ "steps": [
+ {
+ "geometry": "immaG~b}pLf@lCBR",
+ "maneuver": {
+ "bearing_after": 249,
+ "bearing_before": 0,
+ "location": [
+ -71.096959,
+ 42.344689
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 249
+ ],
+ "location": [
+ -71.096959,
+ 42.344689
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.097674,
+ 42.34449
+ ]
+ }
+ ],
+ "weight": 68.3,
+ "duration": 68.3,
+ "distance": 71.5
+ },
+ {
+ "geometry": "}kmaG`h}pLEBKDOFE@k@Ta@Ny@\\KDIDaDnAwAj@EBMJ",
+ "maneuver": {
+ "bearing_after": 340,
+ "bearing_before": 253,
+ "location": [
+ -71.097773,
+ 42.344468
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Jersey Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.097773,
+ 42.344468
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.097817,
+ 42.344558
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.098241,
+ 42.345414
+ ]
+ }
+ ],
+ "weight": 69.5,
+ "duration": 69.5,
+ "distance": 278.9
+ },
+ {
+ "geometry": "qzmaGpo}pL}@_AGGMOUYm@q@sAuA[_@]W[_@GEEEGEEAEAEAA?W?E?",
+ "maneuver": {
+ "bearing_after": 37,
+ "bearing_before": 327,
+ "location": [
+ -71.098972,
+ 42.346814
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Brookline Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.098972,
+ 42.346814
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.098525,
+ 42.347228
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.097437,
+ 42.348277
+ ]
+ }
+ ],
+ "weight": 69.6,
+ "duration": 69.6,
+ "distance": 269.1
+ },
+ {
+ "geometry": "{fnaGfd}pL@S?S?UEwI?GAU?S?IEqE?W?Q?S@w@?Y?M?I?SAiC?i@?_@?I?C?Y?S",
+ "maneuver": {
+ "bearing_after": 94,
+ "bearing_before": 358,
+ "location": [
+ -71.097164,
+ 42.348782
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 2",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 180,
+ 255,
+ 285
+ ],
+ "location": [
+ -71.097164,
+ 42.348782
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.094975,
+ 42.348806
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.092843,
+ 42.348833
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.091578,
+ 42.348843
+ ]
+ }
+ ],
+ "weight": 140.1,
+ "duration": 140.1,
+ "distance": 469.1
+ },
+ {
+ "geometry": "ggnaGv`|pLICEBK?",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 90,
+ "location": [
+ -71.091476,
+ 42.348843
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.091476,
+ 42.348843
+ ]
+ }
+ ],
+ "weight": 18.9,
+ "duration": 18.9,
+ "distance": 15.4
+ },
+ {
+ "geometry": "chnaGv`|pL?W",
+ "maneuver": {
+ "bearing_after": 90,
+ "bearing_before": 351,
+ "location": [
+ -71.091479,
+ 42.348977
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165
+ ],
+ "location": [
+ -71.091479,
+ 42.348977
+ ]
+ }
+ ],
+ "weight": 8.9,
+ "duration": 8.9,
+ "distance": 10
+ },
+ {
+ "geometry": "chnaG~_|pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 90,
+ "location": [
+ -71.091358,
+ 42.348977
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 270
+ ],
+ "location": [
+ -71.091358,
+ 42.348977
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Brookline Avenue, Commonwealth Avenue",
+ "weight": 375.3,
+ "duration": 375.3,
+ "distance": 1114
+ },
+ {
+ "steps": [
+ {
+ "geometry": "chnaG~_|pL?V",
+ "maneuver": {
+ "bearing_after": 270,
+ "bearing_before": 0,
+ "location": [
+ -71.091358,
+ 42.348977
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 270
+ ],
+ "location": [
+ -71.091358,
+ 42.348977
+ ]
+ }
+ ],
+ "weight": 13,
+ "duration": 13,
+ "distance": 10
+ },
+ {
+ "geometry": "chnaGv`|pLQ?K@CAC?GA",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 270,
+ "location": [
+ -71.091479,
+ 42.348977
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165
+ ],
+ "location": [
+ -71.091479,
+ 42.348977
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.091483,
+ 42.349072
+ ]
+ }
+ ],
+ "weight": 33.2,
+ "duration": 33.2,
+ "distance": 25.6
+ },
+ {
+ "geometry": "qinaGt`|pL@X",
+ "maneuver": {
+ "bearing_after": 268,
+ "bearing_before": 7,
+ "location": [
+ -71.091468,
+ 42.349206
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 2",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.091468,
+ 42.349206
+ ]
+ }
+ ],
+ "weight": 6.7,
+ "duration": 6.7,
+ "distance": 10.5
+ },
+ {
+ "geometry": "oinaGna|pLI?G?sA@u@BGBEBEFCDCDABAFCHAJ?J",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 268,
+ "location": [
+ -71.091595,
+ 42.349204
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Charlesgate East",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.091595,
+ 42.349204
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.091613,
+ 42.349709
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 285
+ ],
+ "location": [
+ -71.091794,
+ 42.350129
+ ]
+ }
+ ],
+ "weight": 33.7,
+ "duration": 33.7,
+ "distance": 125.8
+ },
+ {
+ "geometry": "qonaG~c|pLLr@P|@F\\F\\DXH`@",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 285,
+ "location": [
+ -71.091996,
+ 42.350172
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 105,
+ 255
+ ],
+ "location": [
+ -71.091996,
+ 42.350172
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.092873,
+ 42.349929
+ ]
+ }
+ ],
+ "weight": 30.7,
+ "duration": 30.7,
+ "distance": 102.9
+ },
+ {
+ "geometry": "qmnaGhk|pLKDIDAB?F@j@@x@@z@?xCEvAYpL?FAZ]tJCp@GzA?FAPAPu@pP?D?B?V",
+ "maneuver": {
+ "bearing_after": 337,
+ "bearing_before": 248,
+ "location": [
+ -71.093166,
+ 42.349849
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bay State Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.093166,
+ 42.349849
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.095309,
+ 42.349969
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 150,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.097658,
+ 42.350114
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.100365,
+ 42.350326
+ ]
+ }
+ ],
+ "weight": 211.3,
+ "duration": 211.3,
+ "distance": 859
+ },
+ {
+ "geometry": "irnaGnk~pL?HAL?FAFCLCNEPGLGLININAB?D?B@DGPAFABCLCLAL?LQtG",
+ "maneuver": {
+ "bearing_after": 271,
+ "bearing_before": 271,
+ "location": [
+ -71.103436,
+ 42.350613
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bay State Road",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.103436,
+ 42.350613
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.10356,
+ 42.350617
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.104103,
+ 42.350828
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.104276,
+ 42.350878
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.104409,
+ 42.350933
+ ]
+ }
+ ],
+ "weight": 55.9,
+ "duration": 55.9,
+ "distance": 231.7
+ },
+ {
+ "geometry": "gunaGb|~pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 275,
+ "location": [
+ -71.106096,
+ 42.351083
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bay State Road",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 95
+ ],
+ "location": [
+ -71.106096,
+ 42.351083
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Beacon Street, Bay State Road",
+ "weight": 384.5,
+ "duration": 384.5,
+ "distance": 1365.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gunaGb|~pLAJ",
+ "maneuver": {
+ "bearing_after": 275,
+ "bearing_before": 0,
+ "location": [
+ -71.106096,
+ 42.351083
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bay State Road",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 275
+ ],
+ "location": [
+ -71.106096,
+ 42.351083
+ ]
+ }
+ ],
+ "weight": 9.2,
+ "duration": 9.2,
+ "distance": 4.9
+ },
+ {
+ "geometry": "iunaGn|~pLF?l@Fn@BTB",
+ "maneuver": {
+ "bearing_after": 185,
+ "bearing_before": 274,
+ "location": [
+ -71.106155,
+ 42.351087
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.106155,
+ 42.351087
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.106161,
+ 42.351048
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.106197,
+ 42.350819
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 195
+ ],
+ "location": [
+ -71.106215,
+ 42.350578
+ ]
+ }
+ ],
+ "weight": 29.9,
+ "duration": 29.9,
+ "distance": 69.3
+ },
+ {
+ "geometry": "mqnaG~|~pL@Ov@J",
+ "maneuver": {
+ "bearing_after": 120,
+ "bearing_before": 189,
+ "location": [
+ -71.106244,
+ 42.350467
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Marsh Plaza",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.106244,
+ 42.350467
+ ]
+ }
+ ],
+ "weight": 38.4,
+ "duration": 38.4,
+ "distance": 37.9
+ },
+ {
+ "geometry": "sonaGz|~pLEj@",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 188,
+ "location": [
+ -71.106221,
+ 42.350183
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 10,
+ 99,
+ 279,
+ 279
+ ],
+ "location": [
+ -71.106221,
+ 42.350183
+ ]
+ }
+ ],
+ "weight": 26.6,
+ "duration": 26.6,
+ "distance": 18.3
+ },
+ {
+ "geometry": "yonaGf~~pLF?B?H?",
+ "maneuver": {
+ "bearing_after": 178,
+ "bearing_before": 278,
+ "location": [
+ -71.10644,
+ 42.350209
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.10644,
+ 42.350209
+ ]
+ }
+ ],
+ "weight": 15.7,
+ "duration": 15.7,
+ "distance": 11.7
+ },
+ {
+ "geometry": "conaGf~~pLCT",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 180,
+ "location": [
+ -71.10644,
+ 42.350104
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.10644,
+ 42.350104
+ ]
+ }
+ ],
+ "weight": 10.6,
+ "duration": 10.6,
+ "distance": 9.1
+ },
+ {
+ "geometry": "gonaG|~~pLRBD@NBL@pAPx@JxATPBZDl@FjAN~@LNBx@HF@F?",
+ "maneuver": {
+ "bearing_after": 188,
+ "bearing_before": 278,
+ "location": [
+ -71.106549,
+ 42.350118
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Saint Mary's Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.106549,
+ 42.350118
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.106595,
+ 42.349911
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.106886,
+ 42.348597
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.107042,
+ 42.34785
+ ]
+ }
+ ],
+ "weight": 86.800000000,
+ "duration": 86.800000000,
+ "distance": 341.9
+ },
+ {
+ "geometry": "g|maG|b_qL@L?@?Dm@fKCT",
+ "maneuver": {
+ "bearing_after": 258,
+ "bearing_before": 185,
+ "location": [
+ -71.107188,
+ 42.347077
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Ivy Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.107188,
+ 42.347077
+ ]
+ }
+ ],
+ "weight": 53.1,
+ "duration": 53.1,
+ "distance": 182.3
+ },
+ {
+ "geometry": "w}maGpp_qLJ@F?P@R@`CAn@CF?H?HA",
+ "maneuver": {
+ "bearing_after": 184,
+ "bearing_before": 278,
+ "location": [
+ -71.109371,
+ 42.347316
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Carlton Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.109371,
+ 42.347316
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.109385,
+ 42.346381
+ ]
+ }
+ ],
+ "weight": 38.8,
+ "duration": 38.8,
+ "distance": 145.9
+ },
+ {
+ "geometry": "oumaGnp_qL?H?B?D@FXzAJd@\\rBJh@bAvFZfBp@vD?@BLBNd@lCFXBPFb@H`@dArGZjBBJ",
+ "maneuver": {
+ "bearing_after": 262,
+ "bearing_before": 175,
+ "location": [
+ -71.109358,
+ 42.346004
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.109358,
+ 42.346004
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.10943,
+ 42.345998
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.11015,
+ 42.345802
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.110727,
+ 42.345646
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.110941,
+ 42.345587
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.11218,
+ 42.345245
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.11362,
+ 42.344863
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.113704,
+ 42.344842
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.11378,
+ 42.344822
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.114494,
+ 42.344628
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.11462,
+ 42.344594
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.114711,
+ 42.344571
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.114885,
+ 42.344526
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.115059,
+ 42.344481
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.116442,
+ 42.344126
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.116975,
+ 42.34399
+ ]
+ }
+ ],
+ "weight": 165.399999999,
+ "duration": 165.399999999,
+ "distance": 672.8
+ },
+ {
+ "geometry": "yhmaGn`aqLlALD@XB",
+ "maneuver": {
+ "bearing_after": 187,
+ "bearing_before": 250,
+ "location": [
+ -71.117044,
+ 42.343972
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Saint Paul Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.117044,
+ 42.343972
+ ]
+ }
+ ],
+ "weight": 36,
+ "duration": 36,
+ "distance": 62.2
+ },
+ {
+ "geometry": "kemaGbaaqLHb@f@tCv@bEFZ^nBX|Ad@bCLv@@D",
+ "maneuver": {
+ "bearing_after": 248,
+ "bearing_before": 187,
+ "location": [
+ -71.117142,
+ 42.343417
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.117142,
+ 42.343417
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.11807,
+ 42.343165
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.119191,
+ 42.342852
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 300
+ ],
+ "location": [
+ -71.119751,
+ 42.342694
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.120223,
+ 42.342562
+ ]
+ }
+ ],
+ "weight": 112.999999999,
+ "duration": 112.999999999,
+ "distance": 356.4
+ },
+ {
+ "geometry": "i~laGlzaqLIBC@",
+ "maneuver": {
+ "bearing_after": 340,
+ "bearing_before": 248,
+ "location": [
+ -71.121191,
+ 42.342293
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.121191,
+ 42.342293
+ ]
+ }
+ ],
+ "weight": 10.4,
+ "duration": 10.4,
+ "distance": 7.4
+ },
+ {
+ "geometry": "w~laGrzaqL@BAB?D",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 340,
+ "location": [
+ -71.121221,
+ 42.342356
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 285
+ ],
+ "location": [
+ -71.121221,
+ 42.342356
+ ]
+ }
+ ],
+ "weight": 5.3,
+ "duration": 5.3,
+ "distance": 5.5
+ },
+ {
+ "geometry": "w~laG`{aqLKPOZWh@",
+ "maneuver": {
+ "bearing_after": 309,
+ "bearing_before": 278,
+ "location": [
+ -71.121285,
+ 42.342364
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.121285,
+ 42.342364
+ ]
+ }
+ ],
+ "weight": 41.9,
+ "duration": 41.9,
+ "distance": 46.6
+ },
+ {
+ "geometry": "k`maGx}aqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 306,
+ "location": [
+ -71.121734,
+ 42.342619
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 126
+ ],
+ "location": [
+ -71.121734,
+ 42.342619
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Saint Mary's Street, Beacon Street",
+ "weight": 681.1,
+ "duration": 681.1,
+ "distance": 1972.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "k`maGx}aqLADIPGLCFA@A?A?EJ",
+ "maneuver": {
+ "bearing_after": 306,
+ "bearing_before": 0,
+ "location": [
+ -71.121734,
+ 42.342619
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 306
+ ],
+ "location": [
+ -71.121734,
+ 42.342619
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.12197,
+ 42.342767
+ ]
+ }
+ ],
+ "weight": 33.5,
+ "duration": 33.5,
+ "distance": 32.5
+ },
+ {
+ "geometry": "oamaGt_bqLcA}@GGe@c@s@o@SQe@c@GGSQsEeEKK",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 305,
+ "location": [
+ -71.122034,
+ 42.342801
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Green Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.122034,
+ 42.342801
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.121503,
+ 42.343372
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.12117,
+ 42.34373
+ ]
+ }
+ ],
+ "weight": 85.2,
+ "duration": 85.2,
+ "distance": 321.2
+ },
+ {
+ "geometry": "kpmaGxqaqLmBrEgAlCAP",
+ "maneuver": {
+ "bearing_after": 305,
+ "bearing_before": 33,
+ "location": [
+ -71.119813,
+ 42.345177
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dwight Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.119813,
+ 42.345177
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.120871,
+ 42.345734
+ ]
+ }
+ ],
+ "weight": 49.5,
+ "duration": 49.5,
+ "distance": 184.8
+ },
+ {
+ "geometry": "cvmaGl}aqLUGsBg@i@MsA]YIUGWEOAOCO@{ALuBV{BViCRG@o@Dc@Cs@IOA",
+ "maneuver": {
+ "bearing_after": 14,
+ "bearing_before": 279,
+ "location": [
+ -71.12167,
+ 42.346099
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Babcock Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.12167,
+ 42.346099
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 195
+ ],
+ "location": [
+ -71.121205,
+ 42.347423
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.12108,
+ 42.347856
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.12114,
+ 42.34848
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.12126,
+ 42.34907
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.12138,
+ 42.34969
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.12148,
+ 42.35038
+ ]
+ }
+ ],
+ "weight": 145.5,
+ "duration": 145.5,
+ "distance": 573.2
+ },
+ {
+ "geometry": "{unaG~{aqLALG~@OvB?JAJGz@LBOtBAN",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 7,
+ "location": [
+ -71.121439,
+ 42.351178
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.121439,
+ 42.351178
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.121512,
+ 42.351188
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.121828,
+ 42.351229
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.122429,
+ 42.351306
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.122485,
+ 42.351314
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.122545,
+ 42.351321
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.123461,
+ 42.351366
+ ]
+ }
+ ],
+ "weight": 47.6,
+ "duration": 47.6,
+ "distance": 181.6
+ },
+ {
+ "geometry": "cwnaGbibqLMAEAgAMEA",
+ "maneuver": {
+ "bearing_after": 7,
+ "bearing_before": 278,
+ "location": [
+ -71.123542,
+ 42.351376
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Naples Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.123542,
+ 42.351376
+ ]
+ }
+ ],
+ "weight": 21.8,
+ "duration": 21.8,
+ "distance": 54.9
+ },
+ {
+ "geometry": "eznaGnhbqL?JGx@CZ?X?L",
+ "maneuver": {
+ "bearing_after": 277,
+ "bearing_before": 8,
+ "location": [
+ -71.123442,
+ 42.351865
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.123442,
+ 42.351865
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.123504,
+ 42.351871
+ ]
+ }
+ ],
+ "weight": 51.7,
+ "duration": 51.7,
+ "distance": 57.4
+ },
+ {
+ "geometry": "qznaGxlbqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 269,
+ "location": [
+ -71.124132,
+ 42.351932
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 89
+ ],
+ "location": [
+ -71.124132,
+ 42.351932
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Green Street, Babcock Street",
+ "weight": 434.8,
+ "duration": 434.8,
+ "distance": 1405.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "qznaGzlbqL@PDVBN",
+ "maneuver": {
+ "bearing_after": 262,
+ "bearing_before": 0,
+ "location": [
+ -71.124132,
+ 42.351932
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 262
+ ],
+ "location": [
+ -71.124132,
+ 42.351932
+ ]
+ }
+ ],
+ "weight": 24.6,
+ "duration": 24.6,
+ "distance": 25.8
+ },
+ {
+ "geometry": "eznaGtnbqLGRCJE\\",
+ "maneuver": {
+ "bearing_after": 299,
+ "bearing_before": 247,
+ "location": [
+ -71.12443,
+ 42.351867
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.12443,
+ 42.351867
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.124525,
+ 42.351907
+ ]
+ }
+ ],
+ "weight": 30.1,
+ "duration": 30.1,
+ "distance": 28.1
+ },
+ {
+ "geometry": "wznaGrpbqLGECAME",
+ "maneuver": {
+ "bearing_after": 22,
+ "bearing_before": 286,
+ "location": [
+ -71.124744,
+ 42.351963
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 30",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.124744,
+ 42.351963
+ ]
+ }
+ ],
+ "weight": 14.6,
+ "duration": 14.6,
+ "distance": 14.9
+ },
+ {
+ "geometry": "q{naGdpbqLENCHCJGRET",
+ "maneuver": {
+ "bearing_after": 295,
+ "bearing_before": 37,
+ "location": [
+ -71.124673,
+ 42.352086
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 4,
+ "in": 2,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 90,
+ 225,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.124673,
+ 42.352086
+ ]
+ }
+ ],
+ "weight": 9,
+ "duration": 9,
+ "distance": 36.4
+ },
+ {
+ "geometry": "m|naGtrbqL?HALKjBW~DCh@InAIlAMpBARARa@vGCj@AFAJ",
+ "maneuver": {
+ "bearing_after": 275,
+ "bearing_before": 295,
+ "location": [
+ -71.125071,
+ 42.352228
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Brighton Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 120,
+ 270
+ ],
+ "location": [
+ -71.125071,
+ 42.352228
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.125186,
+ 42.352239
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.1269,
+ 42.352442
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.127692,
+ 42.352535
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.128359,
+ 42.352618
+ ]
+ }
+ ],
+ "weight": 125.399999999,
+ "duration": 125.399999999,
+ "distance": 426.2
+ },
+ {
+ "geometry": "g`oaGrrcqLMA",
+ "maneuver": {
+ "bearing_after": 8,
+ "bearing_before": 278,
+ "location": [
+ -71.13018,
+ 42.352836
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Linden Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.13018,
+ 42.352836
+ ]
+ }
+ ],
+ "weight": 10.2,
+ "duration": 10.2,
+ "distance": 8.3
+ },
+ {
+ "geometry": "u`oaGprcqLALObC",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 8,
+ "location": [
+ -71.130165,
+ 42.35291
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.130165,
+ 42.35291
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.130239,
+ 42.352919
+ ]
+ }
+ ],
+ "weight": 54.9,
+ "duration": 54.9,
+ "distance": 61
+ },
+ {
+ "geometry": "gaoaGbwcqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 279,
+ "location": [
+ -71.130896,
+ 42.352999
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 99
+ ],
+ "location": [
+ -71.130896,
+ 42.352999
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Commonwealth Avenue, Brighton Avenue",
+ "weight": 268.8,
+ "duration": 268.8,
+ "distance": 600.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gaoaGbwcqLYlE",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 0,
+ "location": [
+ -71.130896,
+ 42.352999
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 279
+ ],
+ "location": [
+ -71.130896,
+ 42.352999
+ ]
+ }
+ ],
+ "weight": 88.9,
+ "duration": 88.9,
+ "distance": 86.2
+ },
+ {
+ "geometry": "aboaGp}cqLPAVA",
+ "maneuver": {
+ "bearing_after": 174,
+ "bearing_before": 278,
+ "location": [
+ -71.131929,
+ 42.353125
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.131929,
+ 42.353125
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.131919,
+ 42.35304
+ ]
+ }
+ ],
+ "weight": 26.7,
+ "duration": 26.7,
+ "distance": 22.8
+ },
+ {
+ "geometry": "w`oaGl}cqLJcB",
+ "maneuver": {
+ "bearing_after": 98,
+ "bearing_before": 175,
+ "location": [
+ -71.131908,
+ 42.35292
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Brighton Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.131908,
+ 42.35292
+ ]
+ }
+ ],
+ "weight": 14.2,
+ "duration": 14.2,
+ "distance": 41.8
+ },
+ {
+ "geometry": "k`oaGhzcqLH@j@F",
+ "maneuver": {
+ "bearing_after": 187,
+ "bearing_before": 98,
+ "location": [
+ -71.131406,
+ 42.352864
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.131406,
+ 42.352864
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.131417,
+ 42.352808
+ ]
+ }
+ ],
+ "weight": 7.5,
+ "duration": 7.5,
+ "distance": 31.4
+ },
+ {
+ "geometry": "u~naGrzcqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 189,
+ "location": [
+ -71.131464,
+ 42.352585
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 9
+ ],
+ "location": [
+ -71.131464,
+ 42.352585
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Brighton Avenue",
+ "weight": 137.3,
+ "duration": 137.3,
+ "distance": 182.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "u~naGrzcqLk@G",
+ "maneuver": {
+ "bearing_after": 9,
+ "bearing_before": 0,
+ "location": [
+ -71.131464,
+ 42.352585
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 9
+ ],
+ "location": [
+ -71.131464,
+ 42.352585
+ ]
+ }
+ ],
+ "weight": 14.2,
+ "duration": 14.2,
+ "distance": 25.1
+ },
+ {
+ "geometry": "a`oaGjzcqLK~A?FCX",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 8,
+ "location": [
+ -71.131417,
+ 42.352808
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.131417,
+ 42.352808
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.131903,
+ 42.352868
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.131941,
+ 42.352873
+ ]
+ }
+ ],
+ "weight": 51.3,
+ "duration": 51.3,
+ "distance": 54.1
+ },
+ {
+ "geometry": "q`oaGl~cqLI@WD",
+ "maneuver": {
+ "bearing_after": 347,
+ "bearing_before": 277,
+ "location": [
+ -71.132065,
+ 42.352885
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Harvard Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.132065,
+ 42.352885
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.132081,
+ 42.35294
+ ]
+ }
+ ],
+ "weight": 10.1,
+ "duration": 10.1,
+ "distance": 19.8
+ },
+ {
+ "geometry": "saoaGt~cqLCb@S~C?FMlBIrAAHC\\APAZQfCCf@G`AAr@Cp@?RABAx@C`@AT?FAD?LEl@",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 350,
+ "location": [
+ -71.132106,
+ 42.353061
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Brighton Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.132106,
+ 42.353061
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.13439,
+ 42.353337
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.136656,
+ 42.353552
+ ]
+ }
+ ],
+ "weight": 143.399999999,
+ "duration": 143.399999999,
+ "distance": 433
+ },
+ {
+ "geometry": "ceoaGd_eqLLb@HXBF^pAFVBFBLBHb@dBHZNv@Pl@BLRt@Vz@FVH\\h@vBBJd@hBT~@HZDNPp@Nv@@FBLFf@DR",
+ "maneuver": {
+ "bearing_after": 241,
+ "bearing_before": 277,
+ "location": [
+ -71.137307,
+ 42.353617
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cambridge Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 105,
+ 240,
+ 270
+ ],
+ "location": [
+ -71.137307,
+ 42.353617
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 105,
+ 240,
+ 285
+ ],
+ "location": [
+ -71.137488,
+ 42.353548
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240
+ ],
+ "location": [
+ -71.138345,
+ 42.353218
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240
+ ],
+ "location": [
+ -71.138997,
+ 42.352992
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240
+ ],
+ "location": [
+ -71.139576,
+ 42.352798
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.140269,
+ 42.352543
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.141607,
+ 42.352072
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.14299,
+ 42.351636
+ ]
+ }
+ ],
+ "weight": 128.6,
+ "duration": 128.6,
+ "distance": 526.2
+ },
+ {
+ "geometry": "qxnaGhcfqLAJ?LJvAB`@F^Jh@Lb@Pd@L`@Rn@HPHHb@rADN\\dATr@Pd@",
+ "maneuver": {
+ "bearing_after": 274,
+ "bearing_before": 251,
+ "location": [
+ -71.143089,
+ 42.351613
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cambridge Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 240,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.143089,
+ 42.351613
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.144984,
+ 42.351106
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 75,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.145122,
+ 42.351012
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.145621,
+ 42.3508
+ ]
+ }
+ ],
+ "weight": 77.1,
+ "duration": 77.1,
+ "distance": 307.6
+ },
+ {
+ "geometry": "iqnaGbxfqLJJHBHB@?J?HCHEHK",
+ "maneuver": {
+ "bearing_after": 203,
+ "bearing_before": 239,
+ "location": [
+ -71.146417,
+ 42.350454
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 240
+ ],
+ "location": [
+ -71.146417,
+ 42.350454
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.14652,
+ 42.350287
+ ]
+ }
+ ],
+ "weight": 47.1,
+ "duration": 47.1,
+ "distance": 47.5
+ },
+ {
+ "geometry": "}nnaG`xfqLB[",
+ "maneuver": {
+ "bearing_after": 99,
+ "bearing_before": 158,
+ "location": [
+ -71.146412,
+ 42.350067
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Warren Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.146412,
+ 42.350067
+ ]
+ }
+ ],
+ "weight": 7.6,
+ "duration": 7.6,
+ "distance": 12.2
+ },
+ {
+ "geometry": "ynnaGdwfqLz@T",
+ "maneuver": {
+ "bearing_after": 195,
+ "bearing_before": 99,
+ "location": [
+ -71.146266,
+ 42.350046
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.146266,
+ 42.350046
+ ]
+ }
+ ],
+ "weight": 16.4,
+ "duration": 16.4,
+ "distance": 34.1
+ },
+ {
+ "geometry": "}lnaGzwfqLNiA",
+ "maneuver": {
+ "bearing_after": 106,
+ "bearing_before": 195,
+ "location": [
+ -71.14638,
+ 42.349751
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.14638,
+ 42.349751
+ ]
+ }
+ ],
+ "weight": 7.6,
+ "duration": 7.6,
+ "distance": 32
+ },
+ {
+ "geometry": "mlnaGpufqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 107,
+ "location": [
+ -71.146009,
+ 42.349667
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 287
+ ],
+ "location": [
+ -71.146009,
+ 42.349667
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Brighton Avenue, Cambridge Street",
+ "weight": 503.4,
+ "duration": 503.4,
+ "distance": 1491.5
+ },
+ {
+ "steps": [
+ {
+ "geometry": "mlnaGpufqLOhA",
+ "maneuver": {
+ "bearing_after": 287,
+ "bearing_before": 0,
+ "location": [
+ -71.146009,
+ 42.349667
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 287
+ ],
+ "location": [
+ -71.146009,
+ 42.349667
+ ]
+ }
+ ],
+ "weight": 11.7,
+ "duration": 11.7,
+ "distance": 32
+ },
+ {
+ "geometry": "}lnaGzwfqL{@U",
+ "maneuver": {
+ "bearing_after": 15,
+ "bearing_before": 286,
+ "location": [
+ -71.14638,
+ 42.349751
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.14638,
+ 42.349751
+ ]
+ }
+ ],
+ "weight": 17.5,
+ "duration": 17.5,
+ "distance": 34.1
+ },
+ {
+ "geometry": "ynnaGdwfqLCZ",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 15,
+ "location": [
+ -71.146266,
+ 42.350046
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Warren Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.146266,
+ 42.350046
+ ]
+ }
+ ],
+ "weight": 4.7,
+ "duration": 4.7,
+ "distance": 12.2
+ },
+ {
+ "geometry": "}nnaG`xfqLIJIDIBK?A?",
+ "maneuver": {
+ "bearing_after": 338,
+ "bearing_before": 279,
+ "location": [
+ -71.146412,
+ 42.350067
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.146412,
+ 42.350067
+ ]
+ }
+ ],
+ "weight": 10.7,
+ "duration": 10.7,
+ "distance": 26.8
+ },
+ {
+ "geometry": "ipnaGvxfqL?C?G",
+ "maneuver": {
+ "bearing_after": 81,
+ "bearing_before": 352,
+ "location": [
+ -71.14652,
+ 42.350287
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.14652,
+ 42.350287
+ ]
+ }
+ ],
+ "weight": 9.5,
+ "duration": 9.5,
+ "distance": 5.3
+ },
+ {
+ "geometry": "ipnaGjxfqL@@LCNMBODc@",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 81,
+ "location": [
+ -71.146456,
+ 42.350293
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.146456,
+ 42.350293
+ ]
+ }
+ ],
+ "weight": 37.8,
+ "duration": 37.8,
+ "distance": 41.9
+ },
+ {
+ "geometry": "_onaGfvfqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 101,
+ "location": [
+ -71.146124,
+ 42.350083
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 281
+ ],
+ "location": [
+ -71.146124,
+ 42.350083
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Warren Street",
+ "weight": 91.9,
+ "duration": 91.9,
+ "distance": 152.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "_onaGfvfqLEb@CNOLMBAA",
+ "maneuver": {
+ "bearing_after": 281,
+ "bearing_before": 0,
+ "location": [
+ -71.146124,
+ 42.350083
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 281
+ ],
+ "location": [
+ -71.146124,
+ 42.350083
+ ]
+ }
+ ],
+ "weight": 47.1,
+ "duration": 47.1,
+ "distance": 41.9
+ },
+ {
+ "geometry": "ipnaGjxfqL?F?B",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 357,
+ "location": [
+ -71.146456,
+ 42.350293
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.146456,
+ 42.350293
+ ]
+ }
+ ],
+ "weight": 12.6,
+ "duration": 12.6,
+ "distance": 5.3
+ },
+ {
+ "geometry": "ipnaGvxfqLICICKK",
+ "maneuver": {
+ "bearing_after": 23,
+ "bearing_before": 261,
+ "location": [
+ -71.14652,
+ 42.350287
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.14652,
+ 42.350287
+ ]
+ }
+ ],
+ "weight": 5.5,
+ "duration": 5.5,
+ "distance": 20.7
+ },
+ {
+ "geometry": "iqnaGbxfqLQe@Us@]eA",
+ "maneuver": {
+ "bearing_after": 59,
+ "bearing_before": 23,
+ "location": [
+ -71.146417,
+ 42.350454
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cambridge Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 240
+ ],
+ "location": [
+ -71.146417,
+ 42.350454
+ ]
+ }
+ ],
+ "weight": 30.4,
+ "duration": 30.4,
+ "distance": 76
+ },
+ {
+ "geometry": "osnaGbsfqLMNa@d@m@f@Q?O?]KyAs@oAi@GEGCc@Sa@QGEIC_@Qa@QIEGEa@Qa@QIEGCgB{@gBy@KG",
+ "maneuver": {
+ "bearing_after": 319,
+ "bearing_before": 59,
+ "location": [
+ -71.145621,
+ 42.3508
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dustin Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.145621,
+ 42.3508
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.145531,
+ 42.352483
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.145294,
+ 42.352911
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.145055,
+ 42.35334
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.144817,
+ 42.353773
+ ]
+ }
+ ],
+ "weight": 123.800000000,
+ "duration": 123.800000000,
+ "distance": 500.3
+ },
+ {
+ "geometry": "emoaG`jfqL@E",
+ "maneuver": {
+ "bearing_after": 106,
+ "bearing_before": 22,
+ "location": [
+ -71.144174,
+ 42.354909
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "North Beacon Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.144174,
+ 42.354909
+ ]
+ }
+ ],
+ "weight": 8.6,
+ "duration": 8.6,
+ "distance": 3.2
+ },
+ {
+ "geometry": "cmoaGzifqLKGgAc@gAc@",
+ "maneuver": {
+ "bearing_after": 19,
+ "bearing_before": 106,
+ "location": [
+ -71.144137,
+ 42.3549
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hichborn Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.144137,
+ 42.3549
+ ]
+ }
+ ],
+ "weight": 22.2,
+ "duration": 22.2,
+ "distance": 92.8
+ },
+ {
+ "geometry": "_roaGjgfqLICkAk@GAw@]e@SME",
+ "maneuver": {
+ "bearing_after": 22,
+ "bearing_before": 19,
+ "location": [
+ -71.143741,
+ 42.355682
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "New Balance Way",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 150,
+ 195,
+ 330
+ ],
+ "location": [
+ -71.143741,
+ 42.355682
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.143716,
+ 42.355725
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 210
+ ],
+ "location": [
+ -71.143498,
+ 42.356108
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.143238,
+ 42.35662
+ ]
+ }
+ ],
+ "weight": 38.099999999,
+ "duration": 38.099999999,
+ "distance": 120
+ },
+ {
+ "geometry": "ixoaG`dfqLCXGz@",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 15,
+ "location": [
+ -71.143212,
+ 42.356687
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Guest Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.143212,
+ 42.356687
+ ]
+ }
+ ],
+ "weight": 12.2,
+ "duration": 12.2,
+ "distance": 35.7
+ },
+ {
+ "geometry": "uxoaGvffqLKA",
+ "maneuver": {
+ "bearing_after": 4,
+ "bearing_before": 279,
+ "location": [
+ -71.143637,
+ 42.356748
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.143637,
+ 42.356748
+ ]
+ }
+ ],
+ "weight": 13.5,
+ "duration": 13.5,
+ "distance": 6.8
+ },
+ {
+ "geometry": "ayoaGtffqLEl@",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 4,
+ "location": [
+ -71.14363,
+ 42.356809
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.14363,
+ 42.356809
+ ]
+ }
+ ],
+ "weight": 17.6,
+ "duration": 17.6,
+ "distance": 19.5
+ },
+ {
+ "geometry": "gyoaGbhfqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 281,
+ "location": [
+ -71.143863,
+ 42.356842
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 101
+ ],
+ "location": [
+ -71.143863,
+ 42.356842
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Dustin Street, New Balance Way",
+ "weight": 331.6,
+ "duration": 331.6,
+ "distance": 922.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gyoaGbhfqLDm@",
+ "maneuver": {
+ "bearing_after": 101,
+ "bearing_before": 0,
+ "location": [
+ -71.143863,
+ 42.356842
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 101
+ ],
+ "location": [
+ -71.143863,
+ 42.356842
+ ]
+ }
+ ],
+ "weight": 21.3,
+ "duration": 21.3,
+ "distance": 19.5
+ },
+ {
+ "geometry": "ayoaGtffqLJ@",
+ "maneuver": {
+ "bearing_after": 184,
+ "bearing_before": 99,
+ "location": [
+ -71.14363,
+ 42.356809
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.14363,
+ 42.356809
+ ]
+ }
+ ],
+ "weight": 11,
+ "duration": 11,
+ "distance": 6.8
+ },
+ {
+ "geometry": "uxoaGvffqL]lEWvCAHAPATADi@pHGl@G`AAZGf@ADADADCL",
+ "maneuver": {
+ "bearing_after": 281,
+ "bearing_before": 184,
+ "location": [
+ -71.143637,
+ 42.356748
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Guest Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.143637,
+ 42.356748
+ ]
+ },
+ {
+ "out": 1,
+ "classes": [
+ "tunnel"
+ ],
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285
+ ],
+ "location": [
+ -71.147935,
+ 42.357364
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285
+ ],
+ "location": [
+ -71.148136,
+ 42.357403
+ ]
+ }
+ ],
+ "weight": 100.6,
+ "duration": 100.6,
+ "distance": 392.3
+ },
+ {
+ "geometry": "a}oaGzcgqLuBgA{Ay@UKECi@W[O",
+ "maneuver": {
+ "bearing_after": 23,
+ "bearing_before": 292,
+ "location": [
+ -71.148301,
+ 42.357451
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Market Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.148301,
+ 42.357451
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 9,
+ 22,
+ 205
+ ],
+ "location": [
+ -71.147648,
+ 42.358496
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.14745,
+ 42.358851
+ ]
+ }
+ ],
+ "weight": 64,
+ "duration": 64,
+ "distance": 187.5
+ },
+ {
+ "geometry": "ufpaG`~fqLOIg@YOI]QiDiBAAOIg@WQK_@S}A{@CAKIMG",
+ "maneuver": {
+ "bearing_after": 23,
+ "bearing_before": 23,
+ "location": [
+ -71.147365,
+ 42.358989
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Leo M Birmingham Parkway",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 225
+ ],
+ "location": [
+ -71.147365,
+ 42.358989
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210
+ ],
+ "location": [
+ -71.147139,
+ 42.35935
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.146458,
+ 42.36044
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210
+ ],
+ "location": [
+ -71.146176,
+ 42.360887
+ ]
+ }
+ ],
+ "weight": 95.700000000,
+ "duration": 95.700000000,
+ "distance": 309.4
+ },
+ {
+ "geometry": "mvpaGbtfqL?Q?QAMAOCMCKCMYqCAKCOIy@UuBE]Gk@Is@?CMaAAMEa@CQe@cEGk@Ca@E[E_@KiAMoAAMO{AEm@Ec@Cc@AO?EAQCYAOEq@MuBGaAImAEm@Eu@?AAMC_@OuBEg@Ek@?AIgAGs@CQAYA[A]Aa@?]?[@[@Y@]@G@O@WBa@BYDY@QViBBS@M@K?M?K?M?KAKEmACeAEw@Cu@Ce@Cu@ASA_@Eu@",
+ "maneuver": {
+ "bearing_after": 90,
+ "bearing_before": 25,
+ "location": [
+ -71.145775,
+ 42.361512
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Western Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.145775,
+ 42.361512
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 270
+ ],
+ "location": [
+ -71.145248,
+ 42.361589
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.144518,
+ 42.36172
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.143496,
+ 42.361912
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.142873,
+ 42.362029
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.140676,
+ 42.362441
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.139681,
+ 42.362613
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.138625,
+ 42.362773
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.137376,
+ 42.362915
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.135331,
+ 42.363175
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.133601,
+ 42.363386
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.132221,
+ 42.363264
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.131235,
+ 42.363085
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.131046,
+ 42.363095
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 90,
+ 225,
+ 270
+ ],
+ "location": [
+ -71.129761,
+ 42.363201
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.129199,
+ 42.363246
+ ]
+ }
+ ],
+ "weight": 357.400000000,
+ "duration": 357.400000000,
+ "distance": 1428.8
+ },
+ {
+ "geometry": "qaqaGxicqLPA",
+ "maneuver": {
+ "bearing_after": 172,
+ "bearing_before": 81,
+ "location": [
+ -71.128768,
+ 42.363286
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Travis Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.128768,
+ 42.363286
+ ]
+ }
+ ],
+ "weight": 10.8,
+ "duration": 10.8,
+ "distance": 9.9
+ },
+ {
+ "geometry": "_aqaGvicqL?KAGAe@",
+ "maneuver": {
+ "bearing_after": 82,
+ "bearing_before": 172,
+ "location": [
+ -71.128755,
+ 42.363197
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.128755,
+ 42.363197
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.12866,
+ 42.363205
+ ]
+ }
+ ],
+ "weight": 21,
+ "duration": 21,
+ "distance": 23.4
+ },
+ {
+ "geometry": "caqaG|gcqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 83,
+ "location": [
+ -71.128473,
+ 42.363221
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 263
+ ],
+ "location": [
+ -71.128473,
+ 42.363221
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Guest Street, Western Avenue",
+ "weight": 681.8,
+ "duration": 681.8,
+ "distance": 2377.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "caqaG|gcqL@d@@F?J",
+ "maneuver": {
+ "bearing_after": 263,
+ "bearing_before": 0,
+ "location": [
+ -71.128473,
+ 42.363221
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 263
+ ],
+ "location": [
+ -71.128473,
+ 42.363221
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.12866,
+ 42.363205
+ ]
+ }
+ ],
+ "weight": 25.3,
+ "duration": 25.3,
+ "distance": 23.4
+ },
+ {
+ "geometry": "_aqaGvicqLQ@",
+ "maneuver": {
+ "bearing_after": 352,
+ "bearing_before": 262,
+ "location": [
+ -71.128755,
+ 42.363197
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Travis Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.128755,
+ 42.363197
+ ]
+ }
+ ],
+ "weight": 11,
+ "duration": 11,
+ "distance": 9.9
+ },
+ {
+ "geometry": "qaqaGxicqLDt@@^",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 352,
+ "location": [
+ -71.128768,
+ 42.363286
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Western Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.128768,
+ 42.363286
+ ]
+ }
+ ],
+ "weight": 9.6,
+ "duration": 9.6,
+ "distance": 35.8
+ },
+ {
+ "geometry": "iaqaGnlcqL?DAD?DADCBABC@A@A@C@E@C?CAC?CACA",
+ "maneuver": {
+ "bearing_after": 307,
+ "bearing_before": 262,
+ "location": [
+ -71.129199,
+ 42.363246
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.129199,
+ 42.363246
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 120,
+ 255
+ ],
+ "location": [
+ -71.129383,
+ 42.363331
+ ]
+ }
+ ],
+ "weight": 12,
+ "duration": 12,
+ "distance": 36.9
+ },
+ {
+ "geometry": "ybqaGrmcqLWa@KQU_@GK_BaCEGMQWa@GGIKQSGIGIWc@wBeDU[KQKOKMMOKMKMMOKKy@w@eAcAw@s@SUe@e@SSACUSKKqBoBOQEC[YEE]UaAy@",
+ "maneuver": {
+ "bearing_after": 45,
+ "bearing_before": 354,
+ "location": [
+ -71.129377,
+ 42.363487
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "North Harvard Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 225
+ ],
+ "location": [
+ -71.129377,
+ 42.363487
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.129208,
+ 42.36361
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.128212,
+ 42.364333
+ ]
+ }
+ ],
+ "weight": 192.4,
+ "duration": 192.4,
+ "distance": 793.1
+ },
+ {
+ "geometry": "ydraG`gbqLgA{@qAiAUQ",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 32,
+ "location": [
+ -71.12321,
+ 42.368934
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "John F. Kennedy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210
+ ],
+ "location": [
+ -71.12321,
+ 42.368934
+ ]
+ }
+ ],
+ "weight": 32.6,
+ "duration": 32.6,
+ "distance": 115.1
+ },
+ {
+ "geometry": "ijraGhbbqLBI@I?E@G@E?C@G?G@G?E@I?E@E?I?E?I@K?M?MAM?_@Aa@MeCA]A]A]?_@?]?]@[@[@c@B_@B]D_@Da@D_@F[DU",
+ "maneuver": {
+ "bearing_after": 106,
+ "bearing_before": 32,
+ "location": [
+ -71.122454,
+ 42.369806
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 3; MA 2",
+ "driving_side": "right",
+ "name": "Memorial Drive",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.122454,
+ 42.369806
+ ]
+ }
+ ],
+ "weight": 93.5,
+ "duration": 93.5,
+ "distance": 360
+ },
+ {
+ "geometry": "_iraGlgaqLSMeB{@GEMEwBgACCKEOIw@a@KEKGECECEECAAC",
+ "maneuver": {
+ "bearing_after": 22,
+ "bearing_before": 105,
+ "location": [
+ -71.118145,
+ 42.369596
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Plympton Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.118145,
+ 42.369596
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.117753,
+ 42.370254
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.117057,
+ 42.371419
+ ]
+ }
+ ],
+ "weight": 61.6,
+ "duration": 61.6,
+ "distance": 244.7
+ },
+ {
+ "geometry": "ouraGv_aqL@Kf@gD@M",
+ "maneuver": {
+ "bearing_after": 108,
+ "bearing_before": 29,
+ "location": [
+ -71.11692,
+ 42.371602
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.11692,
+ 42.371602
+ ]
+ }
+ ],
+ "weight": 24.7,
+ "duration": 24.7,
+ "distance": 84
+ },
+ {
+ "geometry": "ctraGty`qLIGGKYa@GEGEI?i@H]DA?A?A?AAA?AAAA?AEGCEAAACACAAAA?AAAAAAAAAAAAA?AAA?CAA?A?C?C?A?C?A?C?A?A@A?A?C?ABM",
+ "maneuver": {
+ "bearing_after": 40,
+ "bearing_before": 106,
+ "location": [
+ -71.115947,
+ 42.371376
+ ],
+ "modifier": "left",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.115947,
+ 42.371376
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.115684,
+ 42.371601
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 195,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.115594,
+ 42.372206
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 111,
+ 280,
+ 290
+ ],
+ "location": [
+ -71.115219,
+ 42.372329
+ ]
+ }
+ ],
+ "weight": 46.599999999,
+ "duration": 46.599999999,
+ "distance": 149
+ },
+ {
+ "geometry": "}yraGtt`qLMCiB_@oJ}AOI",
+ "maneuver": {
+ "bearing_after": 12,
+ "bearing_before": 109,
+ "location": [
+ -71.115147,
+ 42.372309
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Quincy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.115147,
+ 42.372309
+ ]
+ }
+ ],
+ "weight": 70.6,
+ "duration": 70.6,
+ "distance": 285.8
+ },
+ {
+ "geometry": "uisaGhp`qLMCCBI@IAiAUQCUACAm@Gk@Gw@Mi@GMC",
+ "maneuver": {
+ "bearing_after": 14,
+ "bearing_before": 19,
+ "location": [
+ -71.114454,
+ 42.374829
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Quincy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 30,
+ 120,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.114454,
+ 42.374829
+ ]
+ },
+ {
+ "out": 0,
+ "in": 5,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 105,
+ 135,
+ 180,
+ 195,
+ 255,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.114324,
+ 42.375481
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 210
+ ],
+ "location": [
+ -71.114258,
+ 42.375843
+ ]
+ }
+ ],
+ "weight": 53.599999999,
+ "duration": 53.599999999,
+ "distance": 203
+ },
+ {
+ "geometry": "{tsaG`n`qLG[E]c@}CMeAM_AAIEa@WkBAOe@eDAMAMSuAK{@Ky@CWMy@c@kDCUK_AYmB",
+ "maneuver": {
+ "bearing_after": 73,
+ "bearing_before": 8,
+ "location": [
+ -71.114091,
+ 42.376624
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Kirkland Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.114091,
+ 42.376624
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.112657,
+ 42.376944
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.112337,
+ 42.377008
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.111583,
+ 42.377166
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.111496,
+ 42.377184
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.110596,
+ 42.37738
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.109388,
+ 42.377634
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.109102,
+ 42.377696
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.108128,
+ 42.377904
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255
+ ],
+ "location": [
+ -71.10781,
+ 42.377963
+ ]
+ }
+ ],
+ "weight": 140.5,
+ "duration": 140.5,
+ "distance": 585.6
+ },
+ {
+ "geometry": "a~saGjc_qLMq@G_@K{@AECQAIAKAIAEAG[gCM{@AEQeAO_AUwA",
+ "maneuver": {
+ "bearing_after": 70,
+ "bearing_before": 71,
+ "location": [
+ -71.107264,
+ 42.378094
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.107264,
+ 42.378094
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.106378,
+ 42.378298
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.10522,
+ 42.378554
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.10519,
+ 42.378561
+ ]
+ }
+ ],
+ "weight": 92.2,
+ "duration": 92.2,
+ "distance": 275.5
+ },
+ {
+ "geometry": "wbtaGno~pLSAyDbAm@Po@NIBE?E?CAoAm@_@SOI{@c@GE_@Q_Ae@wAw@MG",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 70,
+ "location": [
+ -71.104076,
+ 42.378843
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dane Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.104076,
+ 42.378843
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.104497,
+ 42.380096
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 165,
+ 285
+ ],
+ "location": [
+ -71.104604,
+ 42.380418
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.104003,
+ 42.381454
+ ]
+ }
+ ],
+ "weight": 109.1,
+ "duration": 109.1,
+ "distance": 426.1
+ },
+ {
+ "geometry": "gytaGfk~pLFW@GRy@F[j@kCBOBG@INq@H[Pq@d@sBFW@MFQVy@@GT}@@OLo@@ERw@DQp@aC",
+ "maneuver": {
+ "bearing_after": 112,
+ "bearing_before": 23,
+ "location": [
+ -71.103399,
+ 42.382436
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Somerville Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.103399,
+ 42.382436
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.102034,
+ 42.382008
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.1013,
+ 42.381756
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.100527,
+ 42.381515
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.100442,
+ 42.381482
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.099804,
+ 42.381244
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285,
+ 330
+ ],
+ "location": [
+ -71.099483,
+ 42.38116
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.099166,
+ 42.381051
+ ]
+ }
+ ],
+ "weight": 117.8,
+ "duration": 117.8,
+ "distance": 449.9
+ },
+ {
+ "geometry": "yntaGdl}pLMKe@Y",
+ "maneuver": {
+ "bearing_after": 29,
+ "bearing_before": 116,
+ "location": [
+ -71.098427,
+ 42.380769
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Market Way",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.098427,
+ 42.380769
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.098369,
+ 42.380842
+ ]
+ }
+ ],
+ "weight": 15.9,
+ "duration": 15.9,
+ "distance": 32.3
+ },
+ {
+ "geometry": "mptaG~j}pLTu@GO",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 26,
+ "location": [
+ -71.098241,
+ 42.381025
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.098241,
+ 42.381025
+ ]
+ }
+ ],
+ "weight": 7.9,
+ "duration": 7.9,
+ "distance": 33.3
+ },
+ {
+ "geometry": "_ptaGxh}pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 53,
+ "location": [
+ -71.097894,
+ 42.380957
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 233
+ ],
+ "location": [
+ -71.097894,
+ 42.380957
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "North Harvard Street, Kirkland Street",
+ "weight": 1116.9,
+ "duration": 1116.9,
+ "distance": 4143.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "_ptaGxh}pLFNUt@",
+ "maneuver": {
+ "bearing_after": 233,
+ "bearing_before": 0,
+ "location": [
+ -71.097894,
+ 42.380957
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 233
+ ],
+ "location": [
+ -71.097894,
+ 42.380957
+ ]
+ }
+ ],
+ "weight": 16.4,
+ "duration": 16.4,
+ "distance": 33.3
+ },
+ {
+ "geometry": "mptaG~j}pLd@X",
+ "maneuver": {
+ "bearing_after": 206,
+ "bearing_before": 298,
+ "location": [
+ -71.098241,
+ 42.381025
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Market Way",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.098241,
+ 42.381025
+ ]
+ }
+ ],
+ "weight": 12.6,
+ "duration": 12.6,
+ "distance": 22.9
+ },
+ {
+ "geometry": "gotaGxk}pLa@nAOt@[rACHID",
+ "maneuver": {
+ "bearing_after": 298,
+ "bearing_before": 206,
+ "location": [
+ -71.098369,
+ 42.380842
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.098369,
+ 42.380842
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.099039,
+ 42.381094
+ ]
+ }
+ ],
+ "weight": 101.9,
+ "duration": 101.9,
+ "distance": 110.7
+ },
+ {
+ "geometry": "crtaGbs}pLAP?R",
+ "maneuver": {
+ "bearing_after": 274,
+ "bearing_before": 320,
+ "location": [
+ -71.099541,
+ 42.381303
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 270
+ ],
+ "location": [
+ -71.099541,
+ 42.381303
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 90,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.09963,
+ 42.381308
+ ]
+ }
+ ],
+ "weight": 18.799999999,
+ "duration": 18.799999999,
+ "distance": 15.5
+ },
+ {
+ "geometry": "ertaGht}pLMCEB",
+ "maneuver": {
+ "bearing_after": 11,
+ "bearing_before": 274,
+ "location": [
+ -71.099728,
+ 42.381314
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 165
+ ],
+ "location": [
+ -71.099728,
+ 42.381314
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 195,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.09971,
+ 42.381379
+ ]
+ }
+ ],
+ "weight": 16.4,
+ "duration": 16.4,
+ "distance": 11
+ },
+ {
+ "geometry": "yrtaGht}pL@VA^CZIx@",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 331,
+ "location": [
+ -71.09973,
+ 42.381408
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.09973,
+ 42.381408
+ ]
+ }
+ ],
+ "weight": 14.5,
+ "duration": 14.5,
+ "distance": 59.8
+ },
+ {
+ "geometry": "gstaGvx}pLGPALGVe@rBQp@IZOp@AHCFCNk@jCGZSx@AFGVIZAFi@rBEXGd@AFCPO`AE\\ObAObAMdAG\\AJCJOlACJAJCVa@|CCLEVCVEXWfBMx@QpAIl@[`CAJMr@Q~@Mf@Mj@ITMb@ABCJ",
+ "maneuver": {
+ "bearing_after": 296,
+ "bearing_before": 281,
+ "location": [
+ -71.100442,
+ 42.381482
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Somerville Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.100442,
+ 42.381482
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.100527,
+ 42.381515
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.1013,
+ 42.381756
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.102034,
+ 42.382008
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.103399,
+ 42.382436
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.104164,
+ 42.382709
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.105091,
+ 42.382923
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.105429,
+ 42.382998
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.106334,
+ 42.383202
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.1069,
+ 42.383327
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.108004,
+ 42.383565
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.108766,
+ 42.383741
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.109056,
+ 42.383805
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.10947,
+ 42.3839
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.109704,
+ 42.383953
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 300
+ ],
+ "location": [
+ -71.110986,
+ 42.384259
+ ]
+ }
+ ],
+ "weight": 274.299999999,
+ "duration": 274.299999999,
+ "distance": 996.2
+ },
+ {
+ "geometry": "mfuaGr_`qLJJXT",
+ "maneuver": {
+ "bearing_after": 213,
+ "bearing_before": 302,
+ "location": [
+ -71.111775,
+ 42.384554
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sacramento Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.111775,
+ 42.384554
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.111837,
+ 42.384487
+ ]
+ }
+ ],
+ "weight": 12.100000000,
+ "duration": 12.100000000,
+ "distance": 26.1
+ },
+ {
+ "geometry": "geuaGt``qLBCHHB?",
+ "maneuver": {
+ "bearing_after": 137,
+ "bearing_before": 213,
+ "location": [
+ -71.111954,
+ 42.38436
+ ],
+ "modifier": "left",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135
+ ],
+ "location": [
+ -71.111954,
+ 42.38436
+ ]
+ }
+ ],
+ "weight": 16.9,
+ "duration": 16.9,
+ "distance": 11.5
+ },
+ {
+ "geometry": "uduaGz``qLVN@BTL?BUO?BTNJCXT`@\\f@\\B@",
+ "maneuver": {
+ "bearing_after": 206,
+ "bearing_before": 196,
+ "location": [
+ -71.111975,
+ 42.384271
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "classes": [
+ "tunnel"
+ ],
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 30,
+ 210
+ ],
+ "location": [
+ -71.111975,
+ 42.384271
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 180,
+ 210
+ ],
+ "location": [
+ -71.112061,
+ 42.384145
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 30,
+ 210
+ ],
+ "location": [
+ -71.112165,
+ 42.383974
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.112278,
+ 42.383842
+ ]
+ }
+ ],
+ "weight": 39.8,
+ "duration": 39.8,
+ "distance": 136
+ },
+ {
+ "geometry": "q_uaGtd`qLEHQT",
+ "maneuver": {
+ "bearing_after": 315,
+ "bearing_before": 208,
+ "location": [
+ -71.112592,
+ 42.383449
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.112592,
+ 42.383449
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.112635,
+ 42.383482
+ ]
+ }
+ ],
+ "weight": 16.9,
+ "duration": 16.9,
+ "distance": 18.7
+ },
+ {
+ "geometry": "i`uaGte`qL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 318,
+ "location": [
+ -71.112746,
+ 42.383573
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 138
+ ],
+ "location": [
+ -71.112746,
+ 42.383573
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Somerville Avenue, Sacramento Street",
+ "weight": 540.6,
+ "duration": 540.6,
+ "distance": 1441.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "i`uaGte`qLPUDI",
+ "maneuver": {
+ "bearing_after": 138,
+ "bearing_before": 0,
+ "location": [
+ -71.112746,
+ 42.383573
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 138
+ ],
+ "location": [
+ -71.112746,
+ 42.383573
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.112635,
+ 42.383482
+ ]
+ }
+ ],
+ "weight": 19.6,
+ "duration": 19.6,
+ "distance": 18.7
+ },
+ {
+ "geometry": "q_uaGtd`qLBBFB",
+ "maneuver": {
+ "bearing_after": 208,
+ "bearing_before": 135,
+ "location": [
+ -71.112592,
+ 42.383449
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sacramento Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.112592,
+ 42.383449
+ ]
+ }
+ ],
+ "weight": 7.9,
+ "duration": 7.9,
+ "distance": 7.2
+ },
+ {
+ "geometry": "e_uaG|d`qLMPk@t@MNEHQRc@l@[`@GJ[`@[`@QTEFOREFEDIJGHEFSVEFk@r@k@v@y@dAm@x@IHY`@KLCBE@EBKBg@LGBG?E?YGGAACKM",
+ "maneuver": {
+ "bearing_after": 316,
+ "bearing_before": 208,
+ "location": [
+ -71.112634,
+ 42.383392
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.112634,
+ 42.383392
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.113073,
+ 42.383746
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.113623,
+ 42.384191
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.114126,
+ 42.384597
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.114309,
+ 42.384744
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.114607,
+ 42.384988
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.115192,
+ 42.385461
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.116046,
+ 42.386156
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 165,
+ 285
+ ],
+ "location": [
+ -71.116284,
+ 42.386637
+ ]
+ }
+ ],
+ "weight": 133.5,
+ "duration": 133.5,
+ "distance": 507.1
+ },
+ {
+ "geometry": "euuaGzz`qLSd@_@v@MXKVa@x@eA~Bi@hAq@|Au@fA",
+ "maneuver": {
+ "bearing_after": 306,
+ "bearing_before": 39,
+ "location": [
+ -71.116143,
+ 42.386907
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Somerville Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.116143,
+ 42.386907
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.116742,
+ 42.38724
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.117153,
+ 42.387469
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 315
+ ],
+ "location": [
+ -71.11779,
+ 42.387817
+ ]
+ }
+ ],
+ "weight": 76.9,
+ "duration": 76.9,
+ "distance": 297.6
+ },
+ {
+ "geometry": "m_vaGtlaqLD`@AB@@?@BBAD@BB@BAFA",
+ "maneuver": {
+ "bearing_after": 255,
+ "bearing_before": 313,
+ "location": [
+ -71.118992,
+ 42.388549
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.118992,
+ 42.388549
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.119159,
+ 42.388518
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.119178,
+ 42.388532
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.119223,
+ 42.388504
+ ]
+ }
+ ],
+ "weight": 47.500000000,
+ "duration": 47.500000000,
+ "distance": 34
+ },
+ {
+ "geometry": "s~uaGjnaqL@G",
+ "maneuver": {
+ "bearing_after": 102,
+ "bearing_before": 182,
+ "location": [
+ -71.119263,
+ 42.38842
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.119263,
+ 42.38842
+ ]
+ }
+ ],
+ "weight": 3.4,
+ "duration": 3.4,
+ "distance": 3.7
+ },
+ {
+ "geometry": "q~uaGbnaqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 104,
+ "location": [
+ -71.119219,
+ 42.388412
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 284
+ ],
+ "location": [
+ -71.119219,
+ 42.388412
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Beacon Street, Somerville Avenue",
+ "weight": 288.8,
+ "duration": 288.8,
+ "distance": 868.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "q~uaGbnaqLAF?B?B?B",
+ "maneuver": {
+ "bearing_after": 284,
+ "bearing_before": 0,
+ "location": [
+ -71.119219,
+ 42.388412
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 284
+ ],
+ "location": [
+ -71.119219,
+ 42.388412
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.119263,
+ 42.38842
+ ]
+ }
+ ],
+ "weight": 13.2,
+ "duration": 13.2,
+ "distance": 8.6
+ },
+ {
+ "geometry": "s~uaGvnaqLC@C@IBE?E?",
+ "maneuver": {
+ "bearing_after": 341,
+ "bearing_before": 262,
+ "location": [
+ -71.119321,
+ 42.388415
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.119321,
+ 42.388415
+ ]
+ }
+ ],
+ "weight": 20.2,
+ "duration": 20.2,
+ "distance": 18
+ },
+ {
+ "geometry": "q_vaG~naqLCC?C?C",
+ "maneuver": {
+ "bearing_after": 84,
+ "bearing_before": 355,
+ "location": [
+ -71.119358,
+ 42.388572
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.119358,
+ 42.388572
+ ]
+ }
+ ],
+ "weight": 4.7,
+ "duration": 4.7,
+ "distance": 5.2
+ },
+ {
+ "geometry": "u_vaGrnaqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 90,
+ "location": [
+ -71.119303,
+ 42.38859
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 270
+ ],
+ "location": [
+ -71.119303,
+ 42.38859
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "",
+ "weight": 38.1,
+ "duration": 38.1,
+ "distance": 31.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "u_vaGrnaqL?B?BBB?R",
+ "maneuver": {
+ "bearing_after": 270,
+ "bearing_before": 0,
+ "location": [
+ -71.119303,
+ 42.38859
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 270
+ ],
+ "location": [
+ -71.119303,
+ 42.38859
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.119358,
+ 42.388572
+ ]
+ }
+ ],
+ "weight": 15.7,
+ "duration": 15.7,
+ "distance": 13.8
+ },
+ {
+ "geometry": "q_vaGroaqLSDUDOFMDSJ",
+ "maneuver": {
+ "bearing_after": 348,
+ "bearing_before": 270,
+ "location": [
+ -71.119462,
+ 42.388572
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 2A",
+ "driving_side": "right",
+ "name": "Massachusetts Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.119462,
+ 42.388572
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 300,
+ 345
+ ],
+ "location": [
+ -71.119486,
+ 42.388665
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.119521,
+ 42.388777
+ ]
+ }
+ ],
+ "weight": 15.6,
+ "duration": 15.6,
+ "distance": 52.8
+ },
+ {
+ "geometry": "mbvaGxpaqLKWMYUk@[q@GMEG@I?GCYCQGQIOSe@Q_@IQIQQa@MUEM",
+ "maneuver": {
+ "bearing_after": 53,
+ "bearing_before": 337,
+ "location": [
+ -71.119645,
+ 42.389026
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.119645,
+ 42.389026
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.119532,
+ 42.389087
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.119398,
+ 42.389158
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.118929,
+ 42.389412
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.118769,
+ 42.389472
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.118731,
+ 42.389469
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.118507,
+ 42.389509
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.118337,
+ 42.389598
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.118147,
+ 42.389699
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.117985,
+ 42.389789
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.117809,
+ 42.389885
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.117643,
+ 42.389977
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.117526,
+ 42.390045
+ ]
+ }
+ ],
+ "weight": 61.3,
+ "duration": 61.3,
+ "distance": 218.2
+ },
+ {
+ "geometry": "_ivaGbcaqL[ZIHy@z@_AbAEBg@l@c@j@GHEDW\\QRIHq@n@yArA{ArAGDMLOJe@ToB`AUN",
+ "maneuver": {
+ "bearing_after": 322,
+ "bearing_before": 52,
+ "location": [
+ -71.117458,
+ 42.390084
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Elm Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 150,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.117458,
+ 42.390084
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 330
+ ],
+ "location": [
+ -71.117651,
+ 42.39027
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.117952,
+ 42.390561
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 330
+ ],
+ "location": [
+ -71.118286,
+ 42.390879
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.118314,
+ 42.390908
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.118806,
+ 42.391328
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.118991,
+ 42.391475
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.119093,
+ 42.39157
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.11938,
+ 42.391868
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.1198,
+ 42.392323
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.120219,
+ 42.392779
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.120249,
+ 42.392815
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.120487,
+ 42.393159
+ ]
+ }
+ ],
+ "weight": 125.7,
+ "duration": 125.7,
+ "distance": 505.7
+ },
+ {
+ "geometry": "m`waGrxaqLKMg@i@IGy@}@OSi@i@cAiA",
+ "maneuver": {
+ "bearing_after": 36,
+ "bearing_before": 330,
+ "location": [
+ -71.120899,
+ 42.393826
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cutter Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.120899,
+ 42.393826
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.120623,
+ 42.394091
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.119955,
+ 42.394716
+ ]
+ }
+ ],
+ "weight": 43.800000000,
+ "duration": 43.800000000,
+ "distance": 174.2
+ },
+ {
+ "geometry": "chwaGlpaqLG?MOCCAAA?C?A@A@ADS`@",
+ "maneuver": {
+ "bearing_after": 30,
+ "bearing_before": 36,
+ "location": [
+ -71.119594,
+ 42.39506
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 45,
+ 225
+ ],
+ "location": [
+ -71.119594,
+ 42.39506
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.119488,
+ 42.395189
+ ]
+ }
+ ],
+ "weight": 31.1,
+ "duration": 31.1,
+ "distance": 45.5
+ },
+ {
+ "geometry": "_jwaGbqaqLo@jBEPM\\GRg@zAGRO^_@lAOb@CFEJKVAFCDKZ",
+ "maneuver": {
+ "bearing_after": 299,
+ "bearing_before": 306,
+ "location": [
+ -71.119703,
+ 42.395363
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Highland Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.119703,
+ 42.395363
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.120475,
+ 42.395697
+ ]
+ }
+ ],
+ "weight": 81.5,
+ "duration": 81.5,
+ "distance": 248.8
+ },
+ {
+ "geometry": "cqwaGjabqLAd@?L@R",
+ "maneuver": {
+ "bearing_after": 271,
+ "bearing_before": 300,
+ "location": [
+ -71.122301,
+ 42.396503
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dover Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.122301,
+ 42.396503
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 150,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.122561,
+ 42.396511
+ ]
+ }
+ ],
+ "weight": 12.600000000,
+ "duration": 12.600000000,
+ "distance": 29.3
+ },
+ {
+ "geometry": "cqwaGrcbqLI@GD",
+ "maneuver": {
+ "bearing_after": 345,
+ "bearing_before": 262,
+ "location": [
+ -71.122656,
+ 42.396504
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.122656,
+ 42.396504
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.122671,
+ 42.396549
+ ]
+ }
+ ],
+ "weight": 9.5,
+ "duration": 9.5,
+ "distance": 10.4
+ },
+ {
+ "geometry": "uqwaGzcbqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 329,
+ "location": [
+ -71.122704,
+ 42.396589
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 149
+ ],
+ "location": [
+ -71.122704,
+ 42.396589
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Elm Street, Highland Avenue",
+ "weight": 396.8,
+ "duration": 396.8,
+ "distance": 1298.5
+ },
+ {
+ "steps": [
+ {
+ "geometry": "uqwaGzcbqLFEHA",
+ "maneuver": {
+ "bearing_after": 149,
+ "bearing_before": 0,
+ "location": [
+ -71.122704,
+ 42.396589
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 149
+ ],
+ "location": [
+ -71.122704,
+ 42.396589
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.122671,
+ 42.396549
+ ]
+ }
+ ],
+ "weight": 13.8,
+ "duration": 13.8,
+ "distance": 10.4
+ },
+ {
+ "geometry": "cqwaGrcbqLNvBFn@RnBj@hAP^|A~C@DDJDHfDpGDL",
+ "maneuver": {
+ "bearing_after": 257,
+ "bearing_before": 165,
+ "location": [
+ -71.122656,
+ 42.396504
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dover Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.122656,
+ 42.396504
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.123258,
+ 42.396415
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.125476,
+ 42.395459
+ ]
+ }
+ ],
+ "weight": 108.1,
+ "duration": 108.1,
+ "distance": 424.6
+ },
+ {
+ "geometry": "_ewaGp~bqLGHQRsA~Aq@t@",
+ "maneuver": {
+ "bearing_after": 319,
+ "bearing_before": 230,
+ "location": [
+ -71.126965,
+ 42.394557
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 2A",
+ "driving_side": "right",
+ "name": "Massachusetts Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.126965,
+ 42.394557
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.127119,
+ 42.394692
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.127598,
+ 42.395112
+ ]
+ }
+ ],
+ "weight": 39.3,
+ "duration": 39.3,
+ "distance": 116.2
+ },
+ {
+ "geometry": "_jwaGddcqLHRFLzAtCxApCn@nAf@`At@~AHN",
+ "maneuver": {
+ "bearing_after": 236,
+ "bearing_before": 320,
+ "location": [
+ -71.127866,
+ 42.395362
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Rice Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.127866,
+ 42.395362
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.127971,
+ 42.395311
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.129521,
+ 42.394363
+ ]
+ }
+ ],
+ "weight": 79.7,
+ "duration": 79.7,
+ "distance": 311.6
+ },
+ {
+ "geometry": "__waGpvcqLR?D?J?",
+ "maneuver": {
+ "bearing_after": 178,
+ "bearing_before": 232,
+ "location": [
+ -71.13081,
+ 42.393601
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cedar Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 180
+ ],
+ "location": [
+ -71.13081,
+ 42.393601
+ ]
+ }
+ ],
+ "weight": 8.6,
+ "duration": 8.6,
+ "distance": 21.4
+ },
+ {
+ "geometry": "y}vaGpvcqLBj@?H?F?FErACnAAJ?RI`C?P",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 181,
+ "location": [
+ -71.130812,
+ 42.393408
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Rindge Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.130812,
+ 42.393408
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.131028,
+ 42.393388
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.132044,
+ 42.393446
+ ]
+ }
+ ],
+ "weight": 52.3,
+ "duration": 52.3,
+ "distance": 170.7
+ },
+ {
+ "geometry": "k~vaGncdqLPA`FKdEKN?l@Aj@AD?D?F?BA^A\\ALA|BA`@Ab@CB?",
+ "maneuver": {
+ "bearing_after": 178,
+ "bearing_before": 274,
+ "location": [
+ -71.132876,
+ 42.3935
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sherman Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132876,
+ 42.3935
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180
+ ],
+ "location": [
+ -71.132752,
+ 42.391206
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.132694,
+ 42.390262
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.132676,
+ 42.389632
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.132653,
+ 42.389279
+ ]
+ }
+ ],
+ "weight": 117.2,
+ "duration": 117.2,
+ "distance": 471.3
+ },
+ {
+ "geometry": "{cvaG`bdqL?L?^",
+ "maneuver": {
+ "bearing_after": 267,
+ "bearing_before": 177,
+ "location": [
+ -71.132652,
+ 42.389261
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132652,
+ 42.389261
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132716,
+ 42.389259
+ ]
+ }
+ ],
+ "weight": 13.200000000,
+ "duration": 13.200000000,
+ "distance": 18.9
+ },
+ {
+ "geometry": "{cvaGncdqLdAC",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 268,
+ "location": [
+ -71.132881,
+ 42.389256
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132881,
+ 42.389256
+ ]
+ }
+ ],
+ "weight": 13.3,
+ "duration": 13.3,
+ "distance": 38
+ },
+ {
+ "geometry": "uavaGjcdqL?J?b@",
+ "maneuver": {
+ "bearing_after": 267,
+ "bearing_before": 177,
+ "location": [
+ -71.132861,
+ 42.388914
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132861,
+ 42.388914
+ ]
+ }
+ ],
+ "weight": 17.6,
+ "duration": 17.6,
+ "distance": 19.5
+ },
+ {
+ "geometry": "uavaGzddqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 268,
+ "location": [
+ -71.133098,
+ 42.388907
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 88
+ ],
+ "location": [
+ -71.133098,
+ 42.388907
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Dover Street, Sherman Street",
+ "weight": 463.1,
+ "duration": 463.1,
+ "distance": 1602.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "uavaGzddqL?c@?K",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 0,
+ "location": [
+ -71.133098,
+ 42.388907
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 88
+ ],
+ "location": [
+ -71.133098,
+ 42.388907
+ ]
+ }
+ ],
+ "weight": 25.9,
+ "duration": 25.9,
+ "distance": 19.5
+ },
+ {
+ "geometry": "uavaGjcdqLeAB",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 87,
+ "location": [
+ -71.132861,
+ 42.388914
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132861,
+ 42.388914
+ ]
+ }
+ ],
+ "weight": 13.4,
+ "duration": 13.4,
+ "distance": 38
+ },
+ {
+ "geometry": "{cvaGncdqL?_@?M",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 357,
+ "location": [
+ -71.132881,
+ 42.389256
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132881,
+ 42.389256
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132716,
+ 42.389259
+ ]
+ }
+ ],
+ "weight": 12.899999999,
+ "duration": 12.899999999,
+ "distance": 18.9
+ },
+ {
+ "geometry": "{cvaG`bdqLC?c@Ba@@}B@M@]@_@@C@G?E?E?k@@m@@O?eEJaFJQ@",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 87,
+ "location": [
+ -71.132652,
+ 42.389261
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sherman Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132652,
+ 42.389261
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.132653,
+ 42.389279
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.132676,
+ 42.389632
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.132694,
+ 42.390262
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180
+ ],
+ "location": [
+ -71.132752,
+ 42.391206
+ ]
+ }
+ ],
+ "weight": 122.100000000,
+ "duration": 122.100000000,
+ "distance": 471.3
+ },
+ {
+ "geometry": "k~vaGncdqLCj@IlDAV?LIjEAXCnAGfBAVGzAALAV?N",
+ "maneuver": {
+ "bearing_after": 275,
+ "bearing_before": 358,
+ "location": [
+ -71.132876,
+ 42.3935
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Rindge Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.132876,
+ 42.3935
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.133103,
+ 42.393518
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.134161,
+ 42.393579
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.135183,
+ 42.393631
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.136229,
+ 42.393701
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.136809,
+ 42.393752
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.136998,
+ 42.393767
+ ]
+ }
+ ],
+ "weight": 89,
+ "duration": 89,
+ "distance": 347.9
+ },
+ {
+ "geometry": "a`waGv}dqLK?]@e@@SHQNMVG^EVCXCJGN",
+ "maneuver": {
+ "bearing_after": 358,
+ "bearing_before": 275,
+ "location": [
+ -71.137083,
+ 42.393774
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.137083,
+ 42.393774
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.137084,
+ 42.393828
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 135,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.137103,
+ 42.394171
+ ]
+ }
+ ],
+ "weight": 33.1,
+ "duration": 33.1,
+ "distance": 129.2
+ },
+ {
+ "geometry": "cewaGzbeqLSASAQ?e@BUDQFOJ]Va@j@",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 302,
+ "location": [
+ -71.137898,
+ 42.394584
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.137898,
+ 42.394584
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 180
+ ],
+ "location": [
+ -71.137889,
+ 42.394678
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.137927,
+ 42.395166
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.138148,
+ 42.395486
+ ]
+ }
+ ],
+ "weight": 32.099999999,
+ "duration": 32.099999999,
+ "distance": 132
+ },
+ {
+ "geometry": "{kwaGxeeqLq@jCGVAb@?~ACRGNCDUlA?rAAP",
+ "maneuver": {
+ "bearing_after": 293,
+ "bearing_before": 316,
+ "location": [
+ -71.138371,
+ 42.395662
+ ],
+ "modifier": "slight left",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman\/Linear Park Connector",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.138371,
+ 42.395662
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.139366,
+ 42.395963
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.140062,
+ 42.396038
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 105,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.140453,
+ 42.396148
+ ]
+ }
+ ],
+ "weight": 56.8,
+ "duration": 56.8,
+ "distance": 225.2
+ },
+ {
+ "geometry": "_owaG~ueqLQFE?MFMNOHQ@QBIFGHGLE@GBx@pG?`@DN@L",
+ "maneuver": {
+ "bearing_after": 341,
+ "bearing_before": 275,
+ "location": [
+ -71.140958,
+ 42.396157
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman\/Linear Park Connector",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 150,
+ 345
+ ],
+ "location": [
+ -71.140958,
+ 42.396157
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 300
+ ],
+ "location": [
+ -71.141373,
+ 42.396839
+ ]
+ }
+ ],
+ "weight": 63.3,
+ "duration": 63.3,
+ "distance": 234.7
+ },
+ {
+ "geometry": "mqwaGfcfqLG?SCSAM?G@E?IBIBMFKFSNIJEDC@g@RE@C@G?G?C?C@E@C@GDGFQTCDMLmBt@sAf@",
+ "maneuver": {
+ "bearing_after": 4,
+ "bearing_before": 253,
+ "location": [
+ -71.143078,
+ 42.396551
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman Bikeway",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.143078,
+ 42.396551
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 165,
+ 315
+ ],
+ "location": [
+ -71.143719,
+ 42.397974
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.144055,
+ 42.398588
+ ]
+ }
+ ],
+ "weight": 71.5,
+ "duration": 71.5,
+ "distance": 297.2
+ },
+ {
+ "geometry": "y`xaGrjfqLQNONKLOVSLYJ[PE@C?C@EAM?",
+ "maneuver": {
+ "bearing_after": 323,
+ "bearing_before": 338,
+ "location": [
+ -71.144261,
+ 42.399014
+ ],
+ "modifier": "slight left",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman Bikeway",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 330,
+ 345
+ ],
+ "location": [
+ -71.144261,
+ 42.399014
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 135,
+ 330
+ ],
+ "location": [
+ -71.144614,
+ 42.39932
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.144744,
+ 42.39955
+ ]
+ }
+ ],
+ "weight": 26.5,
+ "duration": 26.5,
+ "distance": 108.2
+ },
+ {
+ "geometry": "cfxaGfnfqLa@LC@C@a@LgA`@OFc@POJKNKVSz@KV",
+ "maneuver": {
+ "bearing_after": 341,
+ "bearing_before": 4,
+ "location": [
+ -71.144835,
+ 42.399855
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.144835,
+ 42.399855
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.144915,
+ 42.400045
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 315,
+ 345
+ ],
+ "location": [
+ -71.144926,
+ 42.400069
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.145001,
+ 42.40024
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.145169,
+ 42.400597
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 150,
+ 315
+ ],
+ "location": [
+ -71.145357,
+ 42.400943
+ ]
+ }
+ ],
+ "weight": 46.8,
+ "duration": 46.8,
+ "distance": 188.6
+ },
+ {
+ "geometry": "snxaGjufqL]TsBp@sBv@oBr@sBt@{@Xm@PIB",
+ "maneuver": {
+ "bearing_after": 331,
+ "bearing_before": 300,
+ "location": [
+ -71.145981,
+ 42.401219
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Margaret Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 330
+ ],
+ "location": [
+ -71.145981,
+ 42.401219
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.146086,
+ 42.401369
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.146339,
+ 42.401952
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.146621,
+ 42.40253
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.146876,
+ 42.403092
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.147147,
+ 42.403672
+ ]
+ }
+ ],
+ "weight": 92.4,
+ "duration": 92.4,
+ "distance": 356.7
+ },
+ {
+ "geometry": "qayaGd~fqL@\\Db@HhAPvA@J@FLhAThBVlBNtAVvBh@dER|Ax@~GD\\PvAD`@",
+ "maneuver": {
+ "bearing_after": 260,
+ "bearing_before": 341,
+ "location": [
+ -71.147394,
+ 42.404252
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lake Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.147394,
+ 42.404252
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.147543,
+ 42.404235
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.148531,
+ 42.404074
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.148632,
+ 42.404054
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.149532,
+ 42.403869
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.150507,
+ 42.403668
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.1521,
+ 42.403343
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.152565,
+ 42.403242
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.154158,
+ 42.402924
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.154598,
+ 42.402833
+ ]
+ }
+ ],
+ "weight": 150.9,
+ "duration": 150.9,
+ "distance": 628.8
+ },
+ {
+ "geometry": "oxxaGhlhqLBf@Dj@@Z",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 253,
+ "location": [
+ -71.154774,
+ 42.402795
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lake Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 74,
+ 248,
+ 262
+ ],
+ "location": [
+ -71.154774,
+ 42.402795
+ ]
+ }
+ ],
+ "weight": 11.7,
+ "duration": 11.7,
+ "distance": 46.2
+ },
+ {
+ "geometry": "cxxaGxohqLe@|ASd@Qb@u@vBe@tAg@rAu@nBs@dBmAhCc@fAO`@Mb@eBhGK^K`@}@vECHCHGDGDG@GAW@",
+ "maneuver": {
+ "bearing_after": 296,
+ "bearing_before": 261,
+ "location": [
+ -71.15533,
+ 42.40274
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.15533,
+ 42.40274
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.156165,
+ 42.403117
+ ]
+ }
+ ],
+ "weight": 201.5,
+ "duration": 201.5,
+ "distance": 757.8
+ },
+ {
+ "geometry": "inyaGv_jqLFFj@r@",
+ "maneuver": {
+ "bearing_after": 219,
+ "bearing_before": 357,
+ "location": [
+ -71.162997,
+ 42.406288
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "ref": "MA 60",
+ "driving_side": "right",
+ "name": "Pleasant Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 180,
+ 225
+ ],
+ "location": [
+ -71.162997,
+ 42.406288
+ ]
+ }
+ ],
+ "weight": 36.1,
+ "duration": 36.1,
+ "distance": 38.1
+ },
+ {
+ "geometry": "ulyaGrajqLCb@WlA_@jBe@|B]jB_@fBUbA[~AEVUbASt@Qr@",
+ "maneuver": {
+ "bearing_after": 279,
+ "bearing_before": 220,
+ "location": [
+ -71.163298,
+ 42.406028
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Concord Turnpike West Service Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.163298,
+ 42.406028
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.163478,
+ 42.406052
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.163865,
+ 42.406166
+ ]
+ }
+ ],
+ "weight": 99.8,
+ "duration": 99.8,
+ "distance": 410.2
+ },
+ {
+ "geometry": "iuyaGl~jqLQNK@YBQ?",
+ "maneuver": {
+ "bearing_after": 347,
+ "bearing_before": 295,
+ "location": [
+ -71.167914,
+ 42.407411
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Spring Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 300,
+ 345
+ ],
+ "location": [
+ -71.167914,
+ 42.407411
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 225
+ ],
+ "location": [
+ -71.168021,
+ 42.40769
+ ]
+ }
+ ],
+ "weight": 17.6,
+ "duration": 17.6,
+ "distance": 43.2
+ },
+ {
+ "geometry": "swyaGb_kqLGbAMdAOp@Wz@a@bAa@v@m@`Ao@|@q@j@c@VQFWJ_A\\WJ",
+ "maneuver": {
+ "bearing_after": 278,
+ "bearing_before": 1,
+ "location": [
+ -71.168016,
+ 42.407783
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Spring Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.168016,
+ 42.407783
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.168963,
+ 42.40797
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.170902,
+ 42.40942
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.170958,
+ 42.409536
+ ]
+ }
+ ],
+ "weight": 98.3,
+ "duration": 98.3,
+ "distance": 378.2
+ },
+ {
+ "geometry": "kezaGxrkqL@MBO",
+ "maneuver": {
+ "bearing_after": 99,
+ "bearing_before": 340,
+ "location": [
+ -71.171169,
+ 42.409976
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.171169,
+ 42.409976
+ ]
+ }
+ ],
+ "weight": 4.9,
+ "duration": 4.9,
+ "distance": 13.1
+ },
+ {
+ "geometry": "eezaGzqkqLO{@Gc@Ak@Ea@I]",
+ "maneuver": {
+ "bearing_after": 70,
+ "bearing_before": 105,
+ "location": [
+ -71.171016,
+ 42.40995
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.171016,
+ 42.40995
+ ]
+ }
+ ],
+ "weight": 24.3,
+ "duration": 24.3,
+ "distance": 87.7
+ },
+ {
+ "geometry": "ofzaGnkkqLYyAIk@Eo@Cw@B}@",
+ "maneuver": {
+ "bearing_after": 68,
+ "bearing_before": 64,
+ "location": [
+ -71.169996,
+ 42.410158
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Ring Path",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.169996,
+ 42.410158
+ ]
+ }
+ ],
+ "weight": 43.2,
+ "duration": 43.2,
+ "distance": 126.9
+ },
+ {
+ "geometry": "ygzaGbbkqLy@EYDUCGC",
+ "maneuver": {
+ "bearing_after": 4,
+ "bearing_before": 92,
+ "location": [
+ -71.168503,
+ 42.410373
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 270
+ ],
+ "location": [
+ -71.168503,
+ 42.410373
+ ]
+ }
+ ],
+ "weight": 17.7,
+ "duration": 17.7,
+ "distance": 63.8
+ },
+ {
+ "geometry": "kkzaGzakqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 19,
+ "location": [
+ -71.168458,
+ 42.410941
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 199
+ ],
+ "location": [
+ -71.168458,
+ 42.410941
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Sherman Street, Lake Street",
+ "weight": 1391.8,
+ "duration": 1391.8,
+ "distance": 5161.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "kkzaGzakqLFBTBXEx@D",
+ "maneuver": {
+ "bearing_after": 199,
+ "bearing_before": 0,
+ "location": [
+ -71.168458,
+ 42.410941
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 199
+ ],
+ "location": [
+ -71.168458,
+ 42.410941
+ ]
+ }
+ ],
+ "weight": 21.8,
+ "duration": 21.8,
+ "distance": 63.8
+ },
+ {
+ "geometry": "ygzaGbbkqLC|@Bv@Dn@Hj@XxAH\\D`@@j@Fb@Nz@CNAL",
+ "maneuver": {
+ "bearing_after": 272,
+ "bearing_before": 184,
+ "location": [
+ -71.168503,
+ 42.410373
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Ring Path",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 270
+ ],
+ "location": [
+ -71.168503,
+ 42.410373
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.169996,
+ 42.410158
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.171016,
+ 42.40995
+ ]
+ }
+ ],
+ "weight": 65.2,
+ "duration": 65.2,
+ "distance": 227.6
+ },
+ {
+ "geometry": "kezaGxrkqLULo@^w@x@EJa@t@m@|Am@zAKX",
+ "maneuver": {
+ "bearing_after": 334,
+ "bearing_before": 279,
+ "location": [
+ -71.171169,
+ 42.409976
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Spring Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.171169,
+ 42.409976
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 150,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.17124,
+ 42.410088
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.171745,
+ 42.41064
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.172494,
+ 42.411044
+ ]
+ }
+ ],
+ "weight": 53.599999999,
+ "duration": 53.599999999,
+ "distance": 222.4
+ },
+ {
+ "geometry": "ymzaGv~kqLGP_A`CaAdCeAnCcAzC{@fCYv@[|@[t@aAdCSb@s@jB_A|BEL",
+ "maneuver": {
+ "bearing_after": 302,
+ "bearing_before": 302,
+ "location": [
+ -71.173076,
+ 42.41133
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Eastern Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.173076,
+ 42.41133
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.173815,
+ 42.411694
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.174489,
+ 42.412023
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.176673,
+ 42.413008
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.17753,
+ 42.413415
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.178195,
+ 42.413752
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.178384,
+ 42.413846
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.178917,
+ 42.414112
+ ]
+ }
+ ],
+ "weight": 157.299999999,
+ "duration": 157.299999999,
+ "distance": 641.7
+ },
+ {
+ "geometry": "ka{aGrgmqLUKQEQCO@OFMFIHIJILWr@",
+ "maneuver": {
+ "bearing_after": 23,
+ "bearing_before": 303,
+ "location": [
+ -71.179624,
+ 42.414464
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Park Circle",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 24,
+ 29,
+ 124,
+ 217
+ ],
+ "location": [
+ -71.179624,
+ 42.414464
+ ]
+ }
+ ],
+ "weight": 25.9,
+ "duration": 25.9,
+ "distance": 107.1
+ },
+ {
+ "geometry": "if{aGfjmqLMLKHQJMFSH",
+ "maneuver": {
+ "bearing_after": 323,
+ "bearing_before": 302,
+ "location": [
+ -71.180037,
+ 42.415246
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Park Circle",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 285,
+ 330
+ ],
+ "location": [
+ -71.180037,
+ 42.415246
+ ]
+ }
+ ],
+ "weight": 12.6,
+ "duration": 12.6,
+ "distance": 49
+ },
+ {
+ "geometry": "wh{aG|kmqLKGKEMCKE_@I]EUASAM@Q?Q@QBODOBODODOFQHOHMJ]V_Ar@GF_Ap@aAt@{AlAk@d@c@XIFGDYP_@Ry@^c@N]LUFmAXg@Lq@NKBiBb@kBd@gAVYFQBMBE?G@G?GAOCCAIAMGA?MG",
+ "maneuver": {
+ "bearing_after": 15,
+ "bearing_before": 337,
+ "location": [
+ -71.180309,
+ 42.415636
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Park Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 165,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.180309,
+ 42.415636
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.180094,
+ 42.416408
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.180816,
+ 42.417856
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.181382,
+ 42.418546
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.182129,
+ 42.419462
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.183002,
+ 42.421422
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.183571,
+ 42.423293
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.18354,
+ 42.423391
+ ]
+ }
+ ],
+ "weight": 237.9,
+ "duration": 237.9,
+ "distance": 949.2
+ },
+ {
+ "geometry": "mz|aGp_nqLIZKb@YfAGRCVCPCRA`@?`@BlAFzA?\\?`@CZEZI\\IX_@r@o@hAm@bAU`@",
+ "maneuver": {
+ "bearing_after": 293,
+ "bearing_before": 21,
+ "location": [
+ -71.183452,
+ 42.42359
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Paul Revere Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.183452,
+ 42.42359
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.186871,
+ 42.424185
+ ]
+ }
+ ],
+ "weight": 96.4,
+ "duration": 96.4,
+ "distance": 396.6
+ },
+ {
+ "geometry": "ya}aGlznqLI@C?EAA?G?KA",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 312,
+ "location": [
+ -71.187754,
+ 42.424774
+ ],
+ "modifier": "right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Paul Revere Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.187754,
+ 42.424774
+ ]
+ }
+ ],
+ "weight": 12.3,
+ "duration": 12.3,
+ "distance": 23
+ },
+ {
+ "geometry": "cc}aGjznqLIn@ADGb@A@ObA]tBObAAJAJANAX?VDvB@fA?d@Ap@Cr@?B?XCnAC|@?\\EnAC~@?L?TAFCbAARC`@ANIz@E\\AL",
+ "maneuver": {
+ "bearing_after": 285,
+ "bearing_before": 5,
+ "location": [
+ -71.187738,
+ 42.42498
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Massachusetts Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.187738,
+ 42.42498
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 150,
+ 285
+ ],
+ "location": [
+ -71.188008,
+ 42.425037
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 255,
+ 285
+ ],
+ "location": [
+ -71.188193,
+ 42.425084
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.189587,
+ 42.425423
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.190879,
+ 42.425403
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.192585,
+ 42.425474
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.19338,
+ 42.42552
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.194135,
+ 42.425576
+ ]
+ }
+ ],
+ "weight": 144.799999999,
+ "duration": 144.799999999,
+ "distance": 586.1
+ },
+ {
+ "geometry": "og}aGbfpqLUEaAQMCMC",
+ "maneuver": {
+ "bearing_after": 11,
+ "bearing_before": 284,
+ "location": [
+ -71.194736,
+ 42.425679
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bow Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.194736,
+ 42.425679
+ ]
+ }
+ ],
+ "weight": 23.1,
+ "duration": 23.1,
+ "distance": 65.7
+ },
+ {
+ "geometry": "ck}aGbepqLCLAN}@tEa@bBaAzCcBlGCLGPaDhMqBdIc@|AUj@U^g@|@i@v@",
+ "maneuver": {
+ "bearing_after": 285,
+ "bearing_before": 9,
+ "location": [
+ -71.194582,
+ 42.426259
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman Bikeway",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.194582,
+ 42.426259
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.198495,
+ 42.427624
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.200884,
+ 42.428467
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.203665,
+ 42.42964
+ ]
+ }
+ ],
+ "weight": 211.1,
+ "duration": 211.1,
+ "distance": 872.1
+ },
+ {
+ "geometry": "qa~aGt_rqLMEG?C?",
+ "maneuver": {
+ "bearing_after": 11,
+ "bearing_before": 313,
+ "location": [
+ -71.20395,
+ 42.429845
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "White trail",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.20395,
+ 42.429845
+ ]
+ }
+ ],
+ "weight": 4.2,
+ "duration": 4.2,
+ "distance": 15.1
+ },
+ {
+ "geometry": "kb~aGn_rqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 7,
+ "location": [
+ -71.203921,
+ 42.429978
+ ],
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "White trail",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 187
+ ],
+ "location": [
+ -71.203921,
+ 42.429978
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Park Avenue, Minuteman Bikeway",
+ "weight": 1066.2,
+ "duration": 1066.2,
+ "distance": 4219.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "kb~aGn_rqLB?F?LD",
+ "maneuver": {
+ "bearing_after": 187,
+ "bearing_before": 0,
+ "location": [
+ -71.203921,
+ 42.429978
+ ],
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "White trail",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 187
+ ],
+ "location": [
+ -71.203921,
+ 42.429978
+ ]
+ }
+ ],
+ "weight": 7.7,
+ "duration": 7.7,
+ "distance": 15.1
+ },
+ {
+ "geometry": "qa~aGt_rqLh@w@",
+ "maneuver": {
+ "bearing_after": 133,
+ "bearing_before": 191,
+ "location": [
+ -71.20395,
+ 42.429845
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Minuteman Bikeway",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.20395,
+ 42.429845
+ ]
+ }
+ ],
+ "weight": 14.4,
+ "duration": 14.4,
+ "distance": 32.7
+ },
+ {
+ "geometry": "g`~aG|}qqLBJLn@DhAb@lAXnA",
+ "maneuver": {
+ "bearing_after": 246,
+ "bearing_before": 133,
+ "location": [
+ -71.203665,
+ 42.42964
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.203665,
+ 42.42964
+ ]
+ }
+ ],
+ "weight": 118.9,
+ "duration": 118.9,
+ "distance": 131.3
+ },
+ {
+ "geometry": "q}}aG`grqLANCHKFKFMDKDMJIHIJ?HDP?H?PEFRt@B\\",
+ "maneuver": {
+ "bearing_after": 286,
+ "bearing_before": 246,
+ "location": [
+ -71.205128,
+ 42.429207
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.205128,
+ 42.429207
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 240
+ ],
+ "location": [
+ -71.205888,
+ 42.429657
+ ]
+ }
+ ],
+ "weight": 45.7,
+ "duration": 45.7,
+ "distance": 130.6
+ },
+ {
+ "geometry": "s_~aGlnrqLR@RLd@~ADJ",
+ "maneuver": {
+ "bearing_after": 184,
+ "bearing_before": 262,
+ "location": [
+ -71.206306,
+ 42.429543
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Adams School Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.206306,
+ 42.429543
+ ]
+ }
+ ],
+ "weight": 27.5,
+ "duration": 27.5,
+ "distance": 74.6
+ },
+ {
+ "geometry": "_}}aGhrrqL\\]TWPS",
+ "maneuver": {
+ "bearing_after": 143,
+ "bearing_before": 240,
+ "location": [
+ -71.206933,
+ 42.429124
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 4; MA 225",
+ "driving_side": "right",
+ "name": "Massachusetts Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.206933,
+ 42.429124
+ ]
+ }
+ ],
+ "weight": 16.9,
+ "duration": 16.9,
+ "distance": 49.5
+ },
+ {
+ "geometry": "yz}aG~orqLRTRPL?DDLDh@Jb@JB@p@Nf@F`@Jx@NhCl@LBh@Ll@Nx@Lj@Hn@@N@b@Bh@Fz@Rb@Th@Xd@NJDZL~@Rj@NB@F@PBVFn@\\^TTL",
+ "maneuver": {
+ "bearing_after": 215,
+ "bearing_before": 139,
+ "location": [
+ -71.206564,
+ 42.428773
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 4; MA 225",
+ "driving_side": "right",
+ "name": "Pleasant Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.206564,
+ 42.428773
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.206763,
+ 42.428501
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.206883,
+ 42.428192
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 225
+ ],
+ "location": [
+ -71.207025,
+ 42.427735
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.208233,
+ 42.423782
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.208427,
+ 42.42326
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.208508,
+ 42.423038
+ ]
+ }
+ ],
+ "weight": 181.2,
+ "duration": 181.2,
+ "distance": 754.6
+ },
+ {
+ "geometry": "cr|aGv~rqLV`@T`@NVNVtA|BlApBRZJP~@`Br@jALTj@dAv@tAtAdC\\j@Zd@FLb@t@Zp@^v@rAfDDLZz@Tt@BNPx@HX`@bBH^^nAJVJPJRLPJLLLRLHFFBNHLFVJd@Rx@Zz@\\NF",
+ "maneuver": {
+ "bearing_after": 225,
+ "bearing_before": 205,
+ "location": [
+ -71.208917,
+ 42.422263
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Pleasant Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 225
+ ],
+ "location": [
+ -71.208917,
+ 42.422263
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.209376,
+ 42.421949
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.212691,
+ 42.419739
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.213364,
+ 42.419305
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.217124,
+ 42.417474
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.218145,
+ 42.41695
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.218497,
+ 42.416422
+ ]
+ }
+ ],
+ "weight": 276.8,
+ "duration": 276.8,
+ "distance": 1135.5
+ },
+ {
+ "geometry": "gh{aGh}tqLi@rCMt@g@rCOv@Mt@g@zCcA`Fu@`EOv@_@hCSzACTWtB]tCWbCk@`FE^CL?DCLQ`BGp@AHCd@El@CZGn@",
+ "maneuver": {
+ "bearing_after": 289,
+ "bearing_before": 199,
+ "location": [
+ -71.218928,
+ 42.415564
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Concord Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.218928,
+ 42.415564
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.219938,
+ 42.415838
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.221228,
+ 42.416188
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.224114,
+ 42.416999
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.226991,
+ 42.417626
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.230085,
+ 42.418203
+ ]
+ }
+ ],
+ "weight": 252.5,
+ "duration": 252.5,
+ "distance": 1016.7
+ },
+ {
+ "geometry": "iy{aGzfwqLzBXI`C",
+ "maneuver": {
+ "bearing_after": 188,
+ "bearing_before": 279,
+ "location": [
+ -71.2307,
+ 42.418287
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.2307,
+ 42.418287
+ ]
+ }
+ ],
+ "weight": 39.7,
+ "duration": 39.7,
+ "distance": 123.5
+ },
+ {
+ "geometry": "wu{aGvkwqLJ?J?d@?z@BF?j@Fd@DLBr@Lf@H`BZz@PjATNDfA\\x@\\RHn@VDB\\LVJHDt@ZPF",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 275,
+ "location": [
+ -71.231484,
+ 42.417724
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Waltham Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.231484,
+ 42.417724
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.232231,
+ 42.414517
+ ]
+ }
+ ],
+ "weight": 125.4,
+ "duration": 125.4,
+ "distance": 521.4
+ },
+ {
+ "geometry": "kyzaGttwqLj@TRHp@VD@p@TB@F@b@NND~@RFBPDTDNBv@RVD",
+ "maneuver": {
+ "bearing_after": 199,
+ "bearing_before": 199,
+ "location": [
+ -71.232914,
+ 42.413183
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lexington Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195
+ ],
+ "location": [
+ -71.232914,
+ 42.413183
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.233021,
+ 42.412964
+ ]
+ }
+ ],
+ "weight": 63.6,
+ "duration": 63.6,
+ "distance": 256.5
+ },
+ {
+ "geometry": "qkzaG`zwqLTRf@Jx@P`ARr@N^?r@NTFXDZDZ?Z?tKm@PA\\Cd@CF?PAPA\\CJ?H?^?jA@|D?tB@b@?bB@~AAlAAzB@J?x@?P?b@@@?@?t@BN@T@d@DtAPH@bBRf@Dn@FJ@",
+ "maneuver": {
+ "bearing_after": 195,
+ "bearing_before": 192,
+ "location": [
+ -71.23377,
+ 42.410966
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lexington Street",
+ "intersections": [
+ {
+ "out": 4,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 13,
+ 98,
+ 139,
+ 190,
+ 196,
+ 293
+ ],
+ "location": [
+ -71.23377,
+ 42.410966
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 30,
+ 195
+ ],
+ "location": [
+ -71.234202,
+ 42.409616
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.234377,
+ 42.408696
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.234119,
+ 42.406427
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.234099,
+ 42.406241
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.234072,
+ 42.40427
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.234073,
+ 42.402126
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.234249,
+ 42.399793
+ ]
+ }
+ ],
+ "weight": 333.9,
+ "duration": 333.9,
+ "distance": 1367.7
+ },
+ {
+ "geometry": "c_xaGf~wqLVJTDd@D^B\\FZFXHXNXRZTTVVXf@l@@BJJTTVVXPVL`@LtAn@HB@@HBfDxA\\NtAl@n@Xh@Vf@TnB|@JDbDzAjB|@jAj@`@NZJlAZl@PNDNBTDTDjAJ",
+ "maneuver": {
+ "bearing_after": 194,
+ "bearing_before": 185,
+ "location": [
+ -71.23444,
+ 42.398744
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lexington Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 150,
+ 180,
+ 195
+ ],
+ "location": [
+ -71.23444,
+ 42.398744
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 210
+ ],
+ "location": [
+ -71.235558,
+ 42.396837
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 30,
+ 195
+ ],
+ "location": [
+ -71.236017,
+ 42.39619
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.23684,
+ 42.394659
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.237739,
+ 42.393017
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 240
+ ],
+ "location": [
+ -71.238536,
+ 42.391599
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 345
+ ],
+ "location": [
+ -71.238844,
+ 42.391045
+ ]
+ }
+ ],
+ "weight": 268.3,
+ "duration": 268.3,
+ "distance": 1108.3
+ },
+ {
+ "geometry": "qevaGr|xqLRJl@\\XNDBHFDBDB`Ab@ZLPHRFPDRF^Hz@PnAXt@PhAVhAV~A^b@L~@Rj@LRF`ARhBb@hDv@bB^F@hB`@HBJ@D@T@H@J?r@DJ?jAF`AF",
+ "maneuver": {
+ "bearing_after": 205,
+ "bearing_before": 185,
+ "location": [
+ -71.239295,
+ 42.389534
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bacon Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.239295,
+ 42.389534
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210
+ ],
+ "location": [
+ -71.239514,
+ 42.3892
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.239588,
+ 42.389068
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.240148,
+ 42.387916
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.240459,
+ 42.386954
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.240583,
+ 42.386581
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.241103,
+ 42.385007
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.241137,
+ 42.384907
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.24142,
+ 42.384049
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.242071,
+ 42.382017
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.242128,
+ 42.381511
+ ]
+ }
+ ],
+ "weight": 247.799999999,
+ "duration": 247.799999999,
+ "distance": 1010.4
+ },
+ {
+ "geometry": "sntaGxnyqLBVN~C@\\?^?^O|PAZ",
+ "maneuver": {
+ "bearing_after": 261,
+ "bearing_before": 184,
+ "location": [
+ -71.242207,
+ 42.380737
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Guinan Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.242207,
+ 42.380737
+ ]
+ }
+ ],
+ "weight": 95.6,
+ "duration": 95.6,
+ "distance": 363.4
+ },
+ {
+ "geometry": "ontaGhjzqL|BD",
+ "maneuver": {
+ "bearing_after": 181,
+ "bearing_before": 271,
+ "location": [
+ -71.246607,
+ 42.380715
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hammond Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.246607,
+ 42.380715
+ ]
+ }
+ ],
+ "weight": 18.7,
+ "duration": 18.7,
+ "distance": 69.6
+ },
+ {
+ "geometry": "qjtaGnjzqLFXFZJ^L`@Rh@HRN\\JVLXLZlApC~@xBHTHZBX@XBVh@bD?HBP",
+ "maneuver": {
+ "bearing_after": 243,
+ "bearing_before": 181,
+ "location": [
+ -71.246638,
+ 42.380089
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Elson Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.246638,
+ 42.380089
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.247237,
+ 42.379877
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 240
+ ],
+ "location": [
+ -71.24755,
+ 42.379732
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.248817,
+ 42.379062
+ ]
+ }
+ ],
+ "weight": 102,
+ "duration": 102,
+ "distance": 413.7
+ },
+ {
+ "geometry": "w_taGze{qLLFdChAbBv@NF|@`@JFd@RD@D?B?F?F?",
+ "maneuver": {
+ "bearing_after": 203,
+ "bearing_before": 255,
+ "location": [
+ -71.251022,
+ 42.37836
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Prospect Hill Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 210
+ ],
+ "location": [
+ -71.251022,
+ 42.37836
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.251064,
+ 42.37829
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.251708,
+ 42.377116
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.251753,
+ 42.377036
+ ]
+ }
+ ],
+ "weight": 60.699999999,
+ "duration": 60.699999999,
+ "distance": 243.4
+ },
+ {
+ "geometry": "_ssaGll{qLRADADA~@c@DCLIJE\\OHCNCFAB?B?F@@?FBJD",
+ "maneuver": {
+ "bearing_after": 175,
+ "bearing_before": 180,
+ "location": [
+ -71.252071,
+ 42.37632
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.252071,
+ 42.37632
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.252061,
+ 42.376219
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.251864,
+ 42.375843
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.251761,
+ 42.375682
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.251682,
+ 42.375529
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.251657,
+ 42.375479
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 195,
+ 240
+ ],
+ "location": [
+ -71.251639,
+ 42.375284
+ ]
+ }
+ ],
+ "weight": 33.2,
+ "duration": 33.2,
+ "distance": 135.8
+ },
+ {
+ "geometry": "yksaG`j{qLZp@l@pAJXHVHTVx@BFLZDT@DFXFZFZBZB\\D\\@\\Bb@Bf@@j@@h@@v@@f@?j@?p@A~@Ap@?n@CnAAf@?`@?^@\\@X@P@PDb@D`@D\\D^Jj@DVBR@VBR@T?Z?V@nC",
+ "maneuver": {
+ "bearing_after": 230,
+ "bearing_before": 201,
+ "location": [
+ -71.251694,
+ 42.375167
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Weston Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 225
+ ],
+ "location": [
+ -71.251694,
+ 42.375167
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 180,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.253182,
+ 42.374431
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.25402,
+ 42.374225
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.255127,
+ 42.374128
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.256395,
+ 42.374119
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.257294,
+ 42.374149
+ ]
+ }
+ ],
+ "weight": 188,
+ "duration": 188,
+ "distance": 775.2
+ },
+ {
+ "geometry": "ocsaGhb}qLGl@Gf@KfAGp@CVAD?D?D?DAD?FAFAFAHAFADCFAF",
+ "maneuver": {
+ "bearing_after": 282,
+ "bearing_before": 268,
+ "location": [
+ -71.260693,
+ 42.373843
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 285
+ ],
+ "location": [
+ -71.260693,
+ 42.373843
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.261117,
+ 42.373916
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.262,
+ 42.374056
+ ]
+ }
+ ],
+ "weight": 33.300000000,
+ "duration": 33.300000000,
+ "distance": 138.3
+ },
+ {
+ "geometry": "kesaGnl}qLGZAH?D?F@FBH@J",
+ "maneuver": {
+ "bearing_after": 288,
+ "bearing_before": 293,
+ "location": [
+ -71.262319,
+ 42.37414
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.262319,
+ 42.37414
+ ]
+ }
+ ],
+ "weight": 9.4,
+ "duration": 9.4,
+ "distance": 35.1
+ },
+ {
+ "geometry": "mesaG`o}qLTb@DFHJHFHDJFVHr@P\\LZRJFNJLJ",
+ "maneuver": {
+ "bearing_after": 230,
+ "bearing_before": 264,
+ "location": [
+ -71.262728,
+ 42.374149
+ ],
+ "modifier": "slight left",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tavern Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 225
+ ],
+ "location": [
+ -71.262728,
+ 42.374149
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 180,
+ 210
+ ],
+ "location": [
+ -71.263255,
+ 42.373415
+ ]
+ }
+ ],
+ "weight": 57,
+ "duration": 57,
+ "distance": 157.4
+ },
+ {
+ "geometry": "w}raGlt}qLJRDJFPJZHTFVFTNt@TdAz@xE",
+ "maneuver": {
+ "bearing_after": 232,
+ "bearing_before": 212,
+ "location": [
+ -71.263592,
+ 42.372918
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Weston Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 45,
+ 150,
+ 225
+ ],
+ "location": [
+ -71.263592,
+ 42.372918
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.263747,
+ 42.372829
+ ]
+ }
+ ],
+ "weight": 72.300000000,
+ "duration": 72.300000000,
+ "distance": 221.3
+ },
+ {
+ "geometry": "uxraGtc~qLBp@?ZAXATCXCRETK`@YjAGRETCRCNAR?N?P?Z",
+ "maneuver": {
+ "bearing_after": 265,
+ "bearing_before": 248,
+ "location": [
+ -71.266034,
+ 42.372105
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Weston Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 240,
+ 270,
+ 330
+ ],
+ "location": [
+ -71.266034,
+ 42.372105
+ ]
+ }
+ ],
+ "weight": 47.6,
+ "duration": 47.6,
+ "distance": 199
+ },
+ {
+ "geometry": "a{raGdr~qLHjDBb@BTBXDZFVHXHTJTJPJPNPNPNLTPPJPHPFPFTDZDxB\\",
+ "maneuver": {
+ "exit": 1,
+ "bearing_after": 262,
+ "bearing_before": 267,
+ "location": [
+ -71.26835,
+ 42.372485
+ ],
+ "modifier": "straight",
+ "type": "rotary"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Weston Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.26835,
+ 42.372485
+ ]
+ }
+ ],
+ "rotary_name": "Weston Street",
+ "weight": 89.2,
+ "duration": 89.2,
+ "distance": 371.5
+ },
+ {
+ "geometry": "knraGvc_rLv@J",
+ "maneuver": {
+ "exit": 1,
+ "bearing_after": 188,
+ "bearing_before": 191,
+ "location": [
+ -71.271161,
+ 42.370456
+ ],
+ "modifier": "straight",
+ "type": "exit rotary"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Weston Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 180,
+ 195
+ ],
+ "location": [
+ -71.271161,
+ 42.370456
+ ]
+ }
+ ],
+ "weight": 7.5,
+ "duration": 7.5,
+ "distance": 31.1
+ },
+ {
+ "geometry": "slraGbd_rLrAPRDRFRHNHPJLJLJLLJLJNx@lADHP^NZFNTd@Rd@BJHTHTDHL\\L\\HXJZL`@Rz@Lv@Hr@Hp@?JBj@B`A@p@?\\@`B?hA@p@@n@?L@T@j@DhABdA@R@^?N@^Al@EnAEpAAf@?f@?d@?J?^@r@DvA@`@?D?V@`@A`@A^Ad@Ev@Al@GfBMrCEt@Cp@Cn@Aj@An@ItFCfB?p@Ah@@T@V@RBR@PBPDVDVDZ@FBRBXB\\BZBj@@bA@t@@x@?n@",
+ "maneuver": {
+ "bearing_after": 188,
+ "bearing_before": 188,
+ "location": [
+ -71.271219,
+ 42.370179
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "ref": "US 20",
+ "driving_side": "right",
+ "name": "Boston Post Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195
+ ],
+ "location": [
+ -71.271219,
+ 42.370179
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 60,
+ 225
+ ],
+ "location": [
+ -71.272267,
+ 42.368674
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.275849,
+ 42.367438
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.279849,
+ 42.367341
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.28243,
+ 42.367325
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.282776,
+ 42.36735
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.283808,
+ 42.367434
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.288309,
+ 42.367638
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.290357,
+ 42.367369
+ ]
+ }
+ ],
+ "weight": 433.2,
+ "duration": 433.2,
+ "distance": 1771.5
+ },
+ {
+ "geometry": "_{qaG`_crLd@?vBE\\?b@C^A^C^C\\?Z@V@TBZD`@HXHD@\\J^L`@NPHPH^RNFh@XrAr@`D~ArJ`FBBBB@BBB@B?D@D@D@R",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 267,
+ "location": [
+ -71.290894,
+ 42.367358
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Wellesley Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.290894,
+ 42.367358
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.290885,
+ 42.367173
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 15,
+ 180
+ ],
+ "location": [
+ -71.290857,
+ 42.366571
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.29142,
+ 42.363872
+ ]
+ }
+ ],
+ "weight": 204,
+ "duration": 204,
+ "distance": 826.4
+ },
+ {
+ "geometry": "{opaGtpcrLD?D@F?D?D@F@D?F@FBD?DBD@D@FBHBFD",
+ "maneuver": {
+ "bearing_after": 184,
+ "bearing_before": 258,
+ "location": [
+ -71.293714,
+ 42.360457
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Wellesley Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.293714,
+ 42.360457
+ ]
+ }
+ ],
+ "weight": 15.3,
+ "duration": 15.3,
+ "distance": 63.3
+ },
+ {
+ "geometry": "klpaGvqcrLf@h@DDBFDDFHBD@DBB@BBFBFHVBFBFBHRv@Fd@BJBNBJBLBJ\\fAJ^HXJ^Rl@vAfEH\\`@nAPn@Nf@FPDLDJ@BFPFHFLJNNVNRPT?@NTNRJVNVNTXb@pBvCv@hAFHLNRVRRTVVT^\\hAbAx@t@FF|@|@~@~@DDfGbGRPRRRPPNTPVPVPTLRLTJTLTJTJXJVJ^Jx@RLDnAXz@PZFZD\\FfALRBR@T@T@T?TAVCZCVCVEZIXITIVKVKx@_@PGPEPEPEPCDAVCpAIrAIfAIRAR?R?J?D?P?R@R@bADl@DR@jBJp@@",
+ "maneuver": {
+ "bearing_after": 217,
+ "bearing_before": 195,
+ "location": [
+ -71.293875,
+ 42.359903
+ ],
+ "modifier": "right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Wellesley Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 210,
+ 225
+ ],
+ "location": [
+ -71.293875,
+ 42.359903
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 240
+ ],
+ "location": [
+ -71.294295,
+ 42.359545
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.294953,
+ 42.35927
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.295275,
+ 42.359192
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.303247,
+ 42.353951
+ ]
+ }
+ ],
+ "weight": 565.5,
+ "duration": 565.5,
+ "distance": 2330.1
+ },
+ {
+ "geometry": "qbmaGh{erL?XAbC?\\BnH@|B?X@V?V@X?H@L@T?RBT@TBR@PBTDTBTNbAF\\FZDXFTFXFZFRJ^J\\HTJVHVNXP\\PZT\\TXTVXV|ArAr@l@x@r@RRZ^|@nAb@p@v@pAr@fA`@l@v@nAh@z@T^`@p@Xb@p@jADFLRhBvCrAvBzAbCRXhBjDzCrF|CtF^p@R^dAfBZj@Zf@Xb@V^PRNTx@fAz@hAbBzB`@j@TZBBZ`@nA|ABDTXl@p@LNLPLPLRLRHNJR",
+ "maneuver": {
+ "bearing_after": 270,
+ "bearing_before": 181,
+ "location": [
+ -71.305652,
+ 42.342969
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 30",
+ "driving_side": "right",
+ "name": "South Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.305652,
+ 42.342969
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.310086,
+ 42.342829
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 285
+ ],
+ "location": [
+ -71.311971,
+ 42.342264
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.312339,
+ 42.342072
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 345
+ ],
+ "location": [
+ -71.314063,
+ 42.340409
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 90,
+ 225
+ ],
+ "location": [
+ -71.319796,
+ 42.33631
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.320793,
+ 42.33568
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.322009,
+ 42.334902
+ ]
+ }
+ ],
+ "weight": 592.300000000,
+ "duration": 592.300000000,
+ "distance": 2467.1
+ },
+ {
+ "geometry": "yqjaGnjjrL@@DJFNHNFRHRHRBJDJJ\\FTVv@Nb@HRDLFNFPn@zAJVLTLVJVLVJVNXP^x@xAn@fApFnJlBbDNZNXLVLZN\\Pf@Pb@Nf@Nd@L`@JZFVFRDPDPFTDTDVDVDXDZBXB\\D^B^@\\@Z@Z@\\?\\?ZAzB?lAA`@?pC?Z@X?\\@`@B^Bt@@ZB`@B`@h@vHD^BZB\\j@jFlAdLJx@@LP|ALrAFh@BXZfD@LFj@Fh@Fd@Fb@H`@H^H\\`@`BH\\FVHZF\\F\\F`@Fh@PrAFl@BLBJ@LBH",
+ "maneuver": {
+ "bearing_after": 233,
+ "bearing_before": 229,
+ "location": [
+ -71.328556,
+ 42.330049
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "ref": "MA 30",
+ "driving_side": "right",
+ "name": "Commonwealth Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 240
+ ],
+ "location": [
+ -71.328556,
+ 42.330049
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.32947,
+ 42.329625
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.330028,
+ 42.329384
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.331728,
+ 42.328472
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.340184,
+ 42.324877
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.344528,
+ 42.324567
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.349522,
+ 42.323657
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.349862,
+ 42.323599
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.352951,
+ 42.322833
+ ]
+ }
+ ],
+ "weight": 569.8,
+ "duration": 569.8,
+ "distance": 2365.6
+ },
+ {
+ "geometry": "mbiaGxlorLBJDJBJDJ^~@Rf@FNFLFJDJh@lAhAfCj@nAvAbD~@zBfAbCb@dAzAbDZr@LXHRl@pAr@|AXn@`@z@h@hAZp@z@nB`AtB",
+ "maneuver": {
+ "bearing_after": 237,
+ "bearing_before": 251,
+ "location": [
+ -71.354533,
+ 42.322467
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "ref": "MA 30",
+ "driving_side": "right",
+ "name": "Commonwealth Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 255
+ ],
+ "location": [
+ -71.354533,
+ 42.322467
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.355442,
+ 42.322026
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.360303,
+ 42.319404
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.36079,
+ 42.319135
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.362834,
+ 42.318003
+ ]
+ }
+ ],
+ "weight": 241.1,
+ "duration": 241.1,
+ "distance": 963
+ },
+ {
+ "geometry": "qbhaGzgqrLhAcAFGHEFEHEDCDCFCFCHCFAHC\\IDAZGHCHCFCHCFEFCHEHG",
+ "maneuver": {
+ "bearing_after": 144,
+ "bearing_before": 232,
+ "location": [
+ -71.363981,
+ 42.317371
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 27",
+ "driving_side": "right",
+ "name": "Main Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.363981,
+ 42.317371
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.363327,
+ 42.316386
+ ]
+ }
+ ],
+ "weight": 44.6,
+ "duration": 44.6,
+ "distance": 186
+ },
+ {
+ "geometry": "aygaGfbqrLFGFEHIFIHKFIFIR[@C^i@^o@BGJOHODMFMDKL_@`@qANe@LYJUNUPSPMLINENELAJA@?",
+ "maneuver": {
+ "bearing_after": 146,
+ "bearing_before": 150,
+ "location": [
+ -71.363083,
+ 42.315854
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "ref": "MA 27",
+ "driving_side": "right",
+ "name": "North Main Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 330
+ ],
+ "location": [
+ -71.363083,
+ 42.315854
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.362592,
+ 42.315437
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.361803,
+ 42.314918
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.361742,
+ 42.314887
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.361168,
+ 42.314645
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.360459,
+ 42.314184
+ ]
+ }
+ ],
+ "weight": 87.4,
+ "duration": 87.4,
+ "distance": 331.1
+ },
+ {
+ "geometry": "ilgaG`qprLAcABM",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 174,
+ "location": [
+ -71.360332,
+ 42.313811
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.360332,
+ 42.313811
+ ]
+ }
+ ],
+ "weight": 8.2,
+ "duration": 8.2,
+ "distance": 34.5
+ },
+ {
+ "geometry": "glgaGnnprL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 108,
+ "location": [
+ -71.359917,
+ 42.313798
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 288
+ ],
+ "location": [
+ -71.359917,
+ 42.313798
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Wellesley Street, Commonwealth Road",
+ "weight": 5596.2,
+ "duration": 5596.2,
+ "distance": 22221.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "glgaGnnprLCL@bA",
+ "maneuver": {
+ "bearing_after": 288,
+ "bearing_before": 0,
+ "location": [
+ -71.359917,
+ 42.313798
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 288
+ ],
+ "location": [
+ -71.359917,
+ 42.313798
+ ]
+ }
+ ],
+ "weight": 12,
+ "duration": 12,
+ "distance": 34.5
+ },
+ {
+ "geometry": "ilgaG`qprLA?K@M@ODODMH",
+ "maneuver": {
+ "bearing_after": 354,
+ "bearing_before": 268,
+ "location": [
+ -71.360332,
+ 42.313811
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 27",
+ "driving_side": "right",
+ "name": "North Main Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.360332,
+ 42.313811
+ ]
+ }
+ ],
+ "weight": 13.4,
+ "duration": 13.4,
+ "distance": 43.1
+ },
+ {
+ "geometry": "sngaGzqprLMe@COCSUsJCu@Aw@Cm@Aw@Ci@Ak@Cg@Eg@Gk@c@eDWkBGi@Eg@E_@A[AU?S?Q?S@UFyC@k@@]?U@W?[@_@?c@@{@DmD@c@RiS@s@?W@S?O?QAQ?OAQ?MAKAMAMCOAQk@mEg@_EOeAC]Ee@Ec@GkAc@aHO}B",
+ "maneuver": {
+ "bearing_after": 63,
+ "bearing_before": 345,
+ "location": [
+ -71.360459,
+ 42.314184
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Pine Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.360459,
+ 42.314184
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 270
+ ],
+ "location": [
+ -71.35674,
+ 42.314488
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.355291,
+ 42.314756
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.352756,
+ 42.314953
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.350507,
+ 42.314869
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.350328,
+ 42.314863
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.346043,
+ 42.314771
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.344695,
+ 42.31504
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.343739,
+ 42.315243
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.343242,
+ 42.315344
+ ]
+ }
+ ],
+ "weight": 413.299999999,
+ "duration": 413.299999999,
+ "distance": 1676.1
+ },
+ {
+ "geometry": "cxgaGptlrLIDKDqDdB{@`@kBz@g@TOFMDOFKD",
+ "maneuver": {
+ "bearing_after": 336,
+ "bearing_before": 80,
+ "location": [
+ -71.340407,
+ 42.315699
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Oak Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.340407,
+ 42.315699
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.34098,
+ 42.316703
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 345
+ ],
+ "location": [
+ -71.341149,
+ 42.317001
+ ]
+ }
+ ],
+ "weight": 71,
+ "duration": 71,
+ "distance": 280.2
+ },
+ {
+ "geometry": "ufhaGr|lrLAGAGAECGGIGIGI_CeCSWMOMWGMCMAMAQCg@IoBA_@?_@AWCUCSCQCMEMGMIOQWQOc@c@WSWYSY[c@]i@SUSUOKMGQEOEOGKGOKMKKMOSMQKSs@mBCOAO@Q@QTaCNuAD]f@wEDa@Fe@Fa@F]F]H_@V}ABMHc@H[DYFYFYDYD]B[D_@B[?U?YASCSKy@E]E]CWO{BQsBGs@Ei@AGEe@E_@Ia@GYGYIUi@aBYy@e@{ASk@IUACM[MWIOKKIIIEMEKCQEOGMGMEMK}@k@EEMIMMMKIIKMECSW]c@uCuDOOQMQIWIuAc@",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 338,
+ "location": [
+ -71.341697,
+ 42.318032
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Winter Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.341697,
+ 42.318032
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.340412,
+ 42.319083
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 255
+ ],
+ "location": [
+ -71.335544,
+ 42.321807
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.334133,
+ 42.321569
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.331593,
+ 42.321006
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.331524,
+ 42.320988
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.329848,
+ 42.32065
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.329063,
+ 42.320796
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.328315,
+ 42.320904
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.327742,
+ 42.320987
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.326713,
+ 42.321176
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.32585,
+ 42.321516
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 210
+ ],
+ "location": [
+ -71.324301,
+ 42.322301
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.321989,
+ 42.324934
+ ]
+ }
+ ],
+ "weight": 506.499999999,
+ "duration": 506.499999999,
+ "distance": 2090
+ },
+ {
+ "geometry": "otiaGh`irLRoAb@qC^mCZkBPoAL{AHmB?qA?y@G{@Kw@g@}AI[eAqC[y@k@uAAE_A{BGQMYUm@Ia@AEIqA@}BBuGHiD",
+ "maneuver": {
+ "bearing_after": 108,
+ "bearing_before": 16,
+ "location": [
+ -71.321809,
+ 42.32536
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Radcliffe Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.321809,
+ 42.32536
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.319968,
+ 42.32492
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.317612,
+ 42.324568
+ ]
+ }
+ ],
+ "weight": 255.9,
+ "duration": 255.9,
+ "distance": 1031.1
+ },
+ {
+ "geometry": "yyiaGbwfrLk@C{@MwBg@o@S",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 92,
+ "location": [
+ -71.310098,
+ 42.326209
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Wellesley Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.310098,
+ 42.326209
+ ]
+ }
+ ],
+ "weight": 41,
+ "duration": 41,
+ "distance": 155.1
+ },
+ {
+ "geometry": "ibjaGttfrLFw@HeBB_@FuAHmCBgAFe@L_AXkATq@\\w@x@sAz@sABC^aAHUb@aAPc@^g@Zi@",
+ "maneuver": {
+ "bearing_after": 101,
+ "bearing_before": 16,
+ "location": [
+ -71.30971,
+ 42.327571
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Woodchester Drive",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.30971,
+ 42.327571
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.30637,
+ 42.32711
+ ]
+ }
+ ],
+ "weight": 141.600000000,
+ "duration": 141.600000000,
+ "distance": 574.8
+ },
+ {
+ "geometry": "cuiaGrnerLOeAMu@IQEMWY_@]{AiA]a@Oc@EOKo@Gy@?C@e@Dk@Hc@Hi@Hm@@Q@KC_@E_@",
+ "maneuver": {
+ "bearing_after": 71,
+ "bearing_before": 130,
+ "location": [
+ -71.303618,
+ 42.325459
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Ledgewood Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 315
+ ],
+ "location": [
+ -71.303618,
+ 42.325459
+ ]
+ }
+ ],
+ "weight": 94,
+ "duration": 94,
+ "distance": 388.6
+ },
+ {
+ "geometry": "m|iaGdvdrLiBsCEGEGEEGGEEGEWSu@k@GGIG[[",
+ "maneuver": {
+ "bearing_after": 45,
+ "bearing_before": 73,
+ "location": [
+ -71.299707,
+ 42.326634
+ ],
+ "modifier": "slight left",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Shady Hill Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.299707,
+ 42.326634
+ ]
+ }
+ ],
+ "weight": 48.1,
+ "duration": 48.1,
+ "distance": 194.5
+ },
+ {
+ "geometry": "{djaGzldrL?I?G?GAGAEAGAGCGCECGEKGKGIGIIKMOg@i@EGEGEECGCGCGCGCIAIAIAKAG?K@I?K@OBQ@M@MNaABQBSBUBS@M@M?M@M?K?MAOEmAAO?M?O@K?M?K@I@I@MBQBOBOBQBQH]F]H_@x@{DDOBQPeABULo@BODQNs@d@aC~@mEDYDUDUD]Hy@Dw@?K@_@@SBWDUH[L]Ra@^o@RYNUJSJODKJWPs@He@BS@EB]Dk@?ID}@Bu@@M@O@I@MBOR{ADSBSHk@BOBM@OBQDc@BYFs@BMJaA@M@K@M@M@M?MFaB@a@@M?M?M?K?K?M?IAI?KAIS{CAMAO?MAM?OAO?K?M?K?I@M?I?K?I?I?KAI?IWmDAK?K?K?I@K?K@I@I@K@I@IBKBKDKlA_EtAoENg@x@eCl@oBHYHWDOBMDKBMBM@K@K@K@MBo@BUBk@Bi@?AJ}B@M@QHeCBk@@g@FwB@[@O?Q@g@@a@?I?KAG?IAGI{@?IAIAK?IAM?MAM?M@O?K@K@IPs@@I@I@I@I?I?I?I?MG}@AYAWEuAAUAQCSAQCSGk@CSCUC[A[Ca@Cc@SwDCg@G_AAI",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 35,
+ "location": [
+ -71.298223,
+ 42.32798
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Glen Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.298223,
+ 42.32798
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 105,
+ 300
+ ],
+ "location": [
+ -71.29206,
+ 42.327956
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.291706,
+ 42.327872
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.291362,
+ 42.327782
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.288121,
+ 42.326941
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.284752,
+ 42.325828
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.282892,
+ 42.32545
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.281329,
+ 42.325241
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.277367,
+ 42.325491
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.276021,
+ 42.324991
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.274109,
+ 42.324191
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285,
+ 330
+ ],
+ "location": [
+ -71.272696,
+ 42.3237
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.272462,
+ 42.323675
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.271211,
+ 42.32355
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.270453,
+ 42.323492
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.270028,
+ 42.32346
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.269286,
+ 42.323407
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.269121,
+ 42.323399
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.268746,
+ 42.323382
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.2686,
+ 42.323387
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.266857,
+ 42.323327
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.265598,
+ 42.323444
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.26488,
+ 42.323565
+ ]
+ }
+ ],
+ "weight": 743.9,
+ "duration": 743.9,
+ "distance": 3101.5
+ },
+ {
+ "geometry": "yjiaGfo}qL?M@G@G@GBIFSBEFM",
+ "maneuver": {
+ "bearing_after": 92,
+ "bearing_before": 80,
+ "location": [
+ -71.262761,
+ 42.323805
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Glen Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 90,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.262761,
+ 42.323805
+ ]
+ }
+ ],
+ "weight": 17.9,
+ "duration": 17.9,
+ "distance": 40.9
+ },
+ {
+ "geometry": "{iiaGnl}qLCCEEECEECCEEGGCCUWOQIM{AeBMQIKGIEGAAEIEGEICGACEICGEKCKEKCOCOCMCOCM?EAEAG?EAE?EAG?E?GAG?KAG?KASAo@AKEkAC}@Cg@Cc@GgA?EAI?ICQAMAGAOCOCMEUAKCKEOAGI[IYGSGWCICKESa@gBQu@G[IYKg@CMEMCMGMEKEKEIGKIKk@{@c@k@S]",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 122,
+ "location": [
+ -71.262316,
+ 42.323664
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 16",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.262316,
+ 42.323664
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.262222,
+ 42.323765
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.261986,
+ 42.323986
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.261316,
+ 42.324575
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270
+ ],
+ "location": [
+ -71.258943,
+ 42.325247
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.257755,
+ 42.325364
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.256382,
+ 42.325767
+ ]
+ }
+ ],
+ "weight": 198.600000000,
+ "duration": 198.600000000,
+ "distance": 827.4
+ },
+ {
+ "geometry": "w~iaGbw{qLQc@GOGMQ[ACCCEKIMKQ",
+ "maneuver": {
+ "bearing_after": 53,
+ "bearing_before": 43,
+ "location": [
+ -71.253784,
+ 42.327002
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "ref": "MA 16",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 225
+ ],
+ "location": [
+ -71.253784,
+ 42.327002
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 180,
+ 225
+ ],
+ "location": [
+ -71.253144,
+ 42.327366
+ ]
+ }
+ ],
+ "weight": 22.9,
+ "duration": 22.9,
+ "distance": 77.6
+ },
+ {
+ "geometry": "majaGpr{qLJOHMFGDGBCBCBEDEHG`@]HIHGFIHIFKDIFKDIDMFMBKBKBKDW~BmGHUHSJYJWJULYR_@JQLSJQLQLOLQNQJMJKHGJKJGt@g@JGHEHENGTINGNENGPEPENC~@SNCNELGLGNGLINININKLKNMLKJKJIJOJKHMFKFMDKDKDMBOBMDM@MBM@M@M?K?M?O?KAOAQAQCQCQIq@CSCQASCQAQ?SAQ?S?S?S@S?S@S@S@S@O@QBQBQBSBSBUPaABSBS@QBS@U@Q?U?S?S?SAUASASCUCUCQAOCOEQCOESESGOEQEOo@qBGOEOCOCSCQCQASAUAQAQ?S?O@k@?U?U@U@U@U@QBS@UDSBWDUBSDWFUR_AF[FYF[F[F[D[F[D[DYBYDYBYD]@[B]B[?[@Y@Y?W?]@c@AcD@{G@Q?Q@S@S@QBQ@SBQBQDODODOFOFMFOHMFKHMHKFId@k@HKHKLOJMHOHOLUzAeCLUNSJQNSLQLQZ_@FGFIFGFGFGb@_@HGHI`@a@HGHGHGJGJCJELEJCLAHAJ?J?J@HBJDd@PHBJBHBJ@H@F@L?",
+ "maneuver": {
+ "bearing_after": 136,
+ "bearing_before": 46,
+ "location": [
+ -71.253047,
+ 42.327434
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Quinobequin Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.253047,
+ 42.327434
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.252799,
+ 42.327231
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 285,
+ 300
+ ],
+ "location": [
+ -71.251675,
+ 42.326448
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 315
+ ],
+ "location": [
+ -71.248665,
+ 42.324712
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.248227,
+ 42.324077
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.244933,
+ 42.321834
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.243676,
+ 42.32182
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.243413,
+ 42.321774
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.239722,
+ 42.322136
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 285
+ ],
+ "location": [
+ -71.236976,
+ 42.32204
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 285
+ ],
+ "location": [
+ -71.234588,
+ 42.321477
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.233596,
+ 42.321434
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.232778,
+ 42.321439
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.228983,
+ 42.320287
+ ]
+ }
+ ],
+ "weight": 687.499999999,
+ "duration": 687.499999999,
+ "distance": 2816.1
+ },
+ {
+ "geometry": "iahaGbovqLEe@KyAG_AAU",
+ "maneuver": {
+ "bearing_after": 78,
+ "bearing_before": 185,
+ "location": [
+ -71.226904,
+ 42.317169
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boylston Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180
+ ],
+ "location": [
+ -71.226904,
+ 42.317169
+ ]
+ }
+ ],
+ "weight": 26,
+ "duration": 26,
+ "distance": 90.2
+ },
+ {
+ "geometry": "ebhaGlhvqLTE^ED?HAHAB?rBM|AMh@E",
+ "maneuver": {
+ "bearing_after": 171,
+ "bearing_before": 80,
+ "location": [
+ -71.225826,
+ 42.317308
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chestnut Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.225826,
+ 42.317308
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.225759,
+ 42.316957
+ ]
+ }
+ ],
+ "weight": 49.2,
+ "duration": 49.2,
+ "distance": 187.4
+ },
+ {
+ "geometry": "uwgaGzfvqL?H?FBd@@B@DDLBFDH@B?@BBBDDD",
+ "maneuver": {
+ "bearing_after": 262,
+ "bearing_before": 174,
+ "location": [
+ -71.225581,
+ 42.315631
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.225581,
+ 42.315631
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.22615,
+ 42.315458
+ ]
+ }
+ ],
+ "weight": 15.6,
+ "duration": 15.6,
+ "distance": 56.3
+ },
+ {
+ "geometry": "mvgaGrjvqL@B",
+ "maneuver": {
+ "bearing_after": 223,
+ "bearing_before": 222,
+ "location": [
+ -71.226182,
+ 42.315433
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225
+ ],
+ "location": [
+ -71.226182,
+ 42.315433
+ ]
+ }
+ ],
+ "weight": 2.1,
+ "duration": 2.1,
+ "distance": 2.3
+ },
+ {
+ "geometry": "kvgaGvjvqLvDhF",
+ "maneuver": {
+ "bearing_after": 222,
+ "bearing_before": 223,
+ "location": [
+ -71.226202,
+ 42.315418
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Echo Bridge",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225
+ ],
+ "location": [
+ -71.226202,
+ 42.315418
+ ]
+ }
+ ],
+ "weight": 38.6,
+ "duration": 38.6,
+ "distance": 139.6
+ },
+ {
+ "geometry": "spgaG`rvqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 223,
+ "location": [
+ -71.227365,
+ 42.314504
+ ],
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Echo Bridge",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 43
+ ],
+ "location": [
+ -71.227365,
+ 42.314504
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Glen Road, Quinobequin Road",
+ "weight": 3399.1,
+ "duration": 3399.1,
+ "distance": 13807.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "spgaG`rvqLwDiF",
+ "maneuver": {
+ "bearing_after": 43,
+ "bearing_before": 0,
+ "location": [
+ -71.227365,
+ 42.314504
+ ],
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Echo Bridge",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 43
+ ],
+ "location": [
+ -71.227365,
+ 42.314504
+ ]
+ }
+ ],
+ "weight": 38.6,
+ "duration": 38.6,
+ "distance": 139.6
+ },
+ {
+ "geometry": "kvgaGvjvqLAC",
+ "maneuver": {
+ "bearing_after": 43,
+ "bearing_before": 42,
+ "location": [
+ -71.226202,
+ 42.315418
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 225
+ ],
+ "location": [
+ -71.226202,
+ 42.315418
+ ]
+ }
+ ],
+ "weight": 2.1,
+ "duration": 2.1,
+ "distance": 2.3
+ },
+ {
+ "geometry": "mvgaGrjvqLEECECC?AACEICGEMAEACCe@?G?I",
+ "maneuver": {
+ "bearing_after": 42,
+ "bearing_before": 43,
+ "location": [
+ -71.226182,
+ 42.315433
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 225
+ ],
+ "location": [
+ -71.226182,
+ 42.315433
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.22615,
+ 42.315458
+ ]
+ }
+ ],
+ "weight": 19.900000000,
+ "duration": 19.900000000,
+ "distance": 56.3
+ },
+ {
+ "geometry": "uwgaGzfvqLTA",
+ "maneuver": {
+ "bearing_after": 174,
+ "bearing_before": 82,
+ "location": [
+ -71.225581,
+ 42.315631
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chestnut Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.225581,
+ 42.315631
+ ]
+ }
+ ],
+ "weight": 10.9,
+ "duration": 10.9,
+ "distance": 11.9
+ },
+ {
+ "geometry": "_wgaGxfvqLAM?M@O?OHwA@M?O@QAa@CmB",
+ "maneuver": {
+ "bearing_after": 85,
+ "bearing_before": 174,
+ "location": [
+ -71.225567,
+ 42.315524
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Summer Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165
+ ],
+ "location": [
+ -71.225567,
+ 42.315524
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.224422,
+ 42.315457
+ ]
+ }
+ ],
+ "weight": 37.3,
+ "duration": 37.3,
+ "distance": 140.9
+ },
+ {
+ "geometry": "wvgaGd|uqLj@In@Kr@KdASbDw@LEJEFODMDc@BMBMBMBKDKv@qBDKBMBKDMDU@KBK@GNkA",
+ "maneuver": {
+ "bearing_after": 170,
+ "bearing_before": 85,
+ "location": [
+ -71.223865,
+ 42.315479
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "High Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.223865,
+ 42.315479
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.223818,
+ 42.315259
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.223697,
+ 42.314763
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.221664,
+ 42.312842
+ ]
+ }
+ ],
+ "weight": 102.699999999,
+ "duration": 102.699999999,
+ "distance": 426.1
+ },
+ {
+ "geometry": "oegaG~juqL?IAuA?k@?U?W?Q@W?WBa@D{@@a@JcB@S?Q@Q?O?M?O?MAKAIAGAIAGCIEICGEGGGU[e@m@qA_BMQ]_@KQcAuA",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 105,
+ "location": [
+ -71.22112,
+ 42.312719
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Elliot Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270,
+ 285
+ ],
+ "location": [
+ -71.22112,
+ 42.312719
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.219685,
+ 42.3127
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 255
+ ],
+ "location": [
+ -71.217943,
+ 42.312616
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.217679,
+ 42.312766
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.217538,
+ 42.312882
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.217314,
+ 42.313069
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.216742,
+ 42.313553
+ ]
+ }
+ ],
+ "weight": 122.200000000,
+ "duration": 122.200000000,
+ "distance": 490.9
+ },
+ {
+ "geometry": "cngaGjktqLP[DKDKDIDIf@aAHQJS",
+ "maneuver": {
+ "bearing_after": 127,
+ "bearing_before": 42,
+ "location": [
+ -71.216058,
+ 42.314103
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbia Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.216058,
+ 42.314103
+ ]
+ }
+ ],
+ "weight": 31.2,
+ "duration": 31.2,
+ "distance": 93.2
+ },
+ {
+ "geometry": "{jgaGzetqL]]?Gr@{A",
+ "maneuver": {
+ "bearing_after": 35,
+ "bearing_before": 127,
+ "location": [
+ -71.215178,
+ 42.313577
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chandler Place",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.215178,
+ 42.313577
+ ]
+ }
+ ],
+ "weight": 29,
+ "duration": 29,
+ "distance": 71.6
+ },
+ {
+ "geometry": "ejgaGxatqL_CaC",
+ "maneuver": {
+ "bearing_after": 36,
+ "bearing_before": 126,
+ "location": [
+ -71.21453,
+ 42.313473
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Upper Falls Greenway",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.21453,
+ 42.313473
+ ]
+ }
+ ],
+ "weight": 34.7,
+ "duration": 34.7,
+ "distance": 88.6
+ },
+ {
+ "geometry": "engaGv}sqLJk@",
+ "maneuver": {
+ "bearing_after": 109,
+ "bearing_before": 36,
+ "location": [
+ -71.213883,
+ 42.31411
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 210
+ ],
+ "location": [
+ -71.213883,
+ 42.31411
+ ]
+ }
+ ],
+ "weight": 10.7,
+ "duration": 10.7,
+ "distance": 19.3
+ },
+ {
+ "geometry": "ymgaGj|sqLCACC}@_AEEGGIGGECEEEEGCCCEyByBsBsBACCC?EAC?EAE?CFgCBk@@u@@G@I@G@EFQBGDM",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 109,
+ "location": [
+ -71.213663,
+ 42.314051
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.213663,
+ 42.314051
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.210977,
+ 42.315875
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.210764,
+ 42.315863
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.210244,
+ 42.315771
+ ]
+ }
+ ],
+ "weight": 103.700000000,
+ "duration": 103.700000000,
+ "distance": 397.7
+ },
+ {
+ "geometry": "gxgaGhfsqLCCKGIIKICCEEGIIIGGEEEGIKGEIMGG",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 122,
+ "location": [
+ -71.210133,
+ 42.315718
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Needham Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.210133,
+ 42.315718
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.209616,
+ 42.316235
+ ]
+ }
+ ],
+ "weight": 21.2,
+ "duration": 21.2,
+ "distance": 85.5
+ },
+ {
+ "geometry": "a|gaGlbsqLASCICIGMCMAIAGCK?I@G@GBK",
+ "maneuver": {
+ "bearing_after": 74,
+ "bearing_before": 40,
+ "location": [
+ -71.209506,
+ 42.316329
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Needham Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 75,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.209506,
+ 42.316329
+ ]
+ }
+ ],
+ "weight": 45.2,
+ "duration": 45.2,
+ "distance": 59.9
+ },
+ {
+ "geometry": "w|gaGd~rqLM?GAK?C?E?O?UAM@q@?KAG?S?S?OAOCQCOCMEGAIEGCGCOGMGMICAMIOKGECCMKGICCECACIKIKIKIMGMIOIQIQISAEGMCISg@",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 106,
+ "location": [
+ -71.208829,
+ 42.316444
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Winchester Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.208829,
+ 42.316444
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.208821,
+ 42.316551
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 210
+ ],
+ "location": [
+ -71.208818,
+ 42.316922
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.208326,
+ 42.318492
+ ]
+ }
+ ],
+ "weight": 88.3,
+ "duration": 88.3,
+ "distance": 367.7
+ },
+ {
+ "geometry": "mnhaGpsrqLEGEISe@CIOYO_@CIQ]CGiAwBQ]Q]Yi@IQIMq@sAEIQYiAwBe@_Aw@{ASc@S_@MU[m@KQaAeBEIAAGKEIGGGGSUGIWWIKmBiBGGIEOKMI_B}@GEIEKIMIm@c@IGIIMKOMSSQSUUSUSU}AmBaAkACCMOKMMMMMOOOMcAaAg@e@{AsAi@i@?A[YaA}@GIKIo@m@_@]IISS[YEECCAA",
+ "maneuver": {
+ "bearing_after": 53,
+ "bearing_before": 54,
+ "location": [
+ -71.207134,
+ 42.319272
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Centre Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.207134,
+ 42.319272
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.206667,
+ 42.319528
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.205069,
+ 42.320474
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.204528,
+ 42.320802
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.203799,
+ 42.321255
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.203022,
+ 42.321727
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.202842,
+ 42.321834
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.202342,
+ 42.322141
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.201485,
+ 42.32272
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.20138,
+ 42.322819
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 210
+ ],
+ "location": [
+ -71.200545,
+ 42.32367
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.200071,
+ 42.324386
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.199704,
+ 42.324852
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210
+ ],
+ "location": [
+ -71.199262,
+ 42.325299
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.197872,
+ 42.326516
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.197134,
+ 42.327288
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.196706,
+ 42.327745
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.196001,
+ 42.328473
+ ]
+ }
+ ],
+ "weight": 362.2,
+ "duration": 362.2,
+ "distance": 1498.3
+ },
+ {
+ "geometry": "_mjaGdipqLAE?EAE?GAE?M",
+ "maneuver": {
+ "bearing_after": 77,
+ "bearing_before": 37,
+ "location": [
+ -71.195226,
+ 42.329278
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Centre Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 225
+ ],
+ "location": [
+ -71.195226,
+ 42.329278
+ ]
+ }
+ ],
+ "weight": 9.7,
+ "duration": 9.7,
+ "distance": 18.8
+ },
+ {
+ "geometry": "emjaGvgpqLC@CAC?E?C?EACAC?CAIAYEg@ICA_@E",
+ "maneuver": {
+ "bearing_after": 7,
+ "bearing_before": 77,
+ "location": [
+ -71.195004,
+ 42.329311
+ ],
+ "modifier": "left",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Centre Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.195004,
+ 42.329311
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 30,
+ 195
+ ],
+ "location": [
+ -71.19496,
+ 42.329556
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 210
+ ],
+ "location": [
+ -71.194925,
+ 42.329687
+ ]
+ }
+ ],
+ "weight": 25.299999999,
+ "duration": 25.299999999,
+ "distance": 85.7
+ },
+ {
+ "geometry": "}qjaGvfpqLEe@AQGm@Ec@C]CYEe@Q{BEk@AMAUAMAGGy@Ew@Gu@I}@QkBGc@Ga@YsC?GEWGm@QmBQmBe@uFGq@WqCW_DCYCYCWCYA]GgACYG}AM{BAUAQAQAQE[CWK{@E]C_@C[Iy@ASCSC[Gs@IaAOiBIoAC]AUAW?U?U@UBUBSBSb@{BJs@Hm@@W@a@?a@Ck@Gi@Qu@GWK]Oc@GUIYESESGWCUCW?GAOEe@[}F?IMmB",
+ "maneuver": {
+ "bearing_after": 77,
+ "bearing_before": 7,
+ "location": [
+ -71.194842,
+ 42.330072
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.194842,
+ 42.330072
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.194325,
+ 42.330151
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.192838,
+ 42.330366
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 255,
+ 300,
+ 330
+ ],
+ "location": [
+ -71.192259,
+ 42.330448
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.190859,
+ 42.330664
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.190683,
+ 42.3307
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.189614,
+ 42.330896
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.188279,
+ 42.331122
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.187045,
+ 42.331314
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.186801,
+ 42.331352
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.18607,
+ 42.331466
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.184252,
+ 42.331721
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.18412,
+ 42.331735
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 75,
+ 105,
+ 255
+ ],
+ "location": [
+ -71.181639,
+ 42.332074
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.181246,
+ 42.332133
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.181149,
+ 42.332147
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 255
+ ],
+ "location": [
+ -71.180749,
+ 42.332207
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.17989,
+ 42.332336
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.176198,
+ 42.332195
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 255
+ ],
+ "location": [
+ -71.173376,
+ 42.332789
+ ]
+ }
+ ],
+ "weight": 475.000000000,
+ "duration": 475.000000000,
+ "distance": 1866.6
+ },
+ {
+ "geometry": "kckaGz|kqL~@cATY`C{CRUJMPWNWNYHYHSr@aCPk@DQDOv@oCBMZcABKV}@FSFQHSN_@BGf@kA~@{BJS@AFMLSNULQNQNORQVSVQTORMLGRIRIz@]FAp@UHCJAL?J?J@HBJFLHVTHDHDFBF?H@d@APAHALCJCJCHCZIJCJC",
+ "maneuver": {
+ "bearing_after": 140,
+ "bearing_before": 80,
+ "location": [
+ -71.172783,
+ 42.332858
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hammond Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.172783,
+ 42.332858
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.172313,
+ 42.33243
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.171106,
+ 42.331452
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.169875,
+ 42.330922
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.169707,
+ 42.330857
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.168522,
+ 42.330401
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.167762,
+ 42.330068
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.165336,
+ 42.32788
+ ]
+ }
+ ],
+ "weight": 266,
+ "duration": 266,
+ "distance": 1071.6
+ },
+ {
+ "geometry": "ixiaGfnjqLASAECUC[Ku@]kCCYCK",
+ "maneuver": {
+ "bearing_after": 74,
+ "bearing_before": 164,
+ "location": [
+ -71.165315,
+ 42.325965
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Middlesex Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.165315,
+ 42.325965
+ ]
+ }
+ ],
+ "weight": 35.5,
+ "duration": 35.5,
+ "distance": 130.9
+ },
+ {
+ "geometry": "gziaGrdjqLFA@ADCxBgB~@y@lB}AJKHIHOLQ",
+ "maneuver": {
+ "bearing_after": 161,
+ "bearing_before": 73,
+ "location": [
+ -71.163783,
+ 42.326275
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dunster Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.163783,
+ 42.326275
+ ]
+ }
+ ],
+ "weight": 66.6,
+ "duration": 66.6,
+ "distance": 238.9
+ },
+ {
+ "geometry": "aoiaGrziqLSUOOAA",
+ "maneuver": {
+ "bearing_after": 39,
+ "bearing_before": 132,
+ "location": [
+ -71.162181,
+ 42.324491
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.162181,
+ 42.324491
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.16207,
+ 42.324591
+ ]
+ }
+ ],
+ "weight": 6.5,
+ "duration": 6.5,
+ "distance": 26.9
+ },
+ {
+ "geometry": "gpiaGjyiqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 32,
+ "location": [
+ -71.16198,
+ 42.324682
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 212
+ ],
+ "location": [
+ -71.16198,
+ 42.324682
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Centre Street, Beacon Street",
+ "weight": 1944.5,
+ "duration": 1944.5,
+ "distance": 7389.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gpiaGjyiqL@@NNRT",
+ "maneuver": {
+ "bearing_after": 212,
+ "bearing_before": 0,
+ "location": [
+ -71.16198,
+ 42.324682
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 212
+ ],
+ "location": [
+ -71.16198,
+ 42.324682
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.16207,
+ 42.324591
+ ]
+ }
+ ],
+ "weight": 11.1,
+ "duration": 11.1,
+ "distance": 26.9
+ },
+ {
+ "geometry": "aoiaGrziqLMPINIHKJmB|A_Ax@yBfBEBA@G@",
+ "maneuver": {
+ "bearing_after": 312,
+ "bearing_before": 219,
+ "location": [
+ -71.162181,
+ 42.324491
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dunster Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.162181,
+ 42.324491
+ ]
+ }
+ ],
+ "weight": 61.8,
+ "duration": 61.8,
+ "distance": 238.9
+ },
+ {
+ "geometry": "gziaGrdjqLE_@]mCCUG]CQ",
+ "maneuver": {
+ "bearing_after": 73,
+ "bearing_before": 341,
+ "location": [
+ -71.163783,
+ 42.326275
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Middlesex Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.163783,
+ 42.326275
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.162796,
+ 42.326482
+ ]
+ }
+ ],
+ "weight": 28.9,
+ "duration": 28.9,
+ "distance": 105
+ },
+ {
+ "geometry": "{{iaG~|iqLFCFEBE@C@E@GAIAIAGAAACCAAAC?CAE@E@GD",
+ "maneuver": {
+ "bearing_after": 156,
+ "bearing_before": 71,
+ "location": [
+ -71.16256,
+ 42.326538
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.16256,
+ 42.326538
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.162535,
+ 42.326495
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.162214,
+ 42.326586
+ ]
+ }
+ ],
+ "weight": 18.2,
+ "duration": 18.2,
+ "distance": 56
+ },
+ {
+ "geometry": "m|iaG~ziqL?EGSGUIWk@mBGQGSIOGOMSMUy@qA",
+ "maneuver": {
+ "bearing_after": 67,
+ "bearing_before": 336,
+ "location": [
+ -71.162238,
+ 42.326627
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Middlesex Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255
+ ],
+ "location": [
+ -71.162238,
+ 42.326627
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.161137,
+ 42.327062
+ ]
+ }
+ ],
+ "weight": 49.2,
+ "duration": 49.2,
+ "distance": 189
+ },
+ {
+ "geometry": "kbjaGfoiqLFKHMxCkF",
+ "maneuver": {
+ "bearing_after": 130,
+ "bearing_before": 45,
+ "location": [
+ -71.160364,
+ 42.327582
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Circuit Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.160364,
+ 42.327582
+ ]
+ }
+ ],
+ "weight": 41.8,
+ "duration": 41.8,
+ "distance": 144.8
+ },
+ {
+ "geometry": "_}iaG`giqLIOGOIOKOMUWa@",
+ "maneuver": {
+ "bearing_after": 47,
+ "bearing_before": 130,
+ "location": [
+ -71.159046,
+ 42.32672
+ ],
+ "modifier": "left",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Circuit Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.159046,
+ 42.32672
+ ]
+ }
+ ],
+ "weight": 18.8,
+ "duration": 18.8,
+ "distance": 65.7
+ },
+ {
+ "geometry": "m_jaGhciqLIBK@OAQAOCOGMEMKOMKOgCqDYc@}@mAW_@Ya@[e@W_@S[Q[OWMUS_@IMKI",
+ "maneuver": {
+ "bearing_after": 348,
+ "bearing_before": 45,
+ "location": [
+ -71.158453,
+ 42.327114
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Spooner Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 135,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.158453,
+ 42.327114
+ ]
+ }
+ ],
+ "weight": 110.4,
+ "duration": 110.4,
+ "distance": 429
+ },
+ {
+ "geometry": "qqjaGdohqLINMRk@z@UZEJEHEH",
+ "maneuver": {
+ "bearing_after": 313,
+ "bearing_before": 36,
+ "location": [
+ -71.155225,
+ 42.330007
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Reservoir Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.155225,
+ 42.330007
+ ]
+ }
+ ],
+ "weight": 25.4,
+ "duration": 25.4,
+ "distance": 88.6
+ },
+ {
+ "geometry": "}tjaG`thqLMK",
+ "maneuver": {
+ "bearing_after": 30,
+ "bearing_before": 302,
+ "location": [
+ -71.15601,
+ 42.33055
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Middlesex Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.15601,
+ 42.33055
+ ]
+ }
+ ],
+ "weight": 9,
+ "duration": 9,
+ "distance": 9.5
+ },
+ {
+ "geometry": "kujaGtshqLEFAB",
+ "maneuver": {
+ "bearing_after": 309,
+ "bearing_before": 30,
+ "location": [
+ -71.155951,
+ 42.330623
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.155951,
+ 42.330623
+ ]
+ }
+ ],
+ "weight": 5.5,
+ "duration": 5.5,
+ "distance": 5.8
+ },
+ {
+ "geometry": "sujaG`thqLAHADCD_@`@STABEDGHEJCLALCNA`@ALCLCLELGNMR",
+ "maneuver": {
+ "bearing_after": 293,
+ "bearing_before": 309,
+ "location": [
+ -71.156005,
+ 42.330657
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.156005,
+ 42.330657
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.156123,
+ 42.330698
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 135,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.156418,
+ 42.330973
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 135,
+ 315
+ ],
+ "location": [
+ -71.156445,
+ 42.330997
+ ]
+ }
+ ],
+ "weight": 39.800000000,
+ "duration": 39.800000000,
+ "distance": 142.8
+ },
+ {
+ "geometry": "wyjaGx|hqLMGKEICI?G?",
+ "maneuver": {
+ "bearing_after": 25,
+ "bearing_before": 307,
+ "location": [
+ -71.157412,
+ 42.331316
+ ],
+ "modifier": "right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Reservoir Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.157412,
+ 42.331316
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 32.1
+ },
+ {
+ "geometry": "m{jaGf|hqLAWAWAWCUCMAGEUIW",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 7,
+ "location": [
+ -71.157319,
+ 42.331592
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.157319,
+ 42.331592
+ ]
+ }
+ ],
+ "weight": 19.9,
+ "duration": 19.9,
+ "distance": 69.2
+ },
+ {
+ "geometry": "m|jaGdwhqLJG@ADGl@_ABC@C@E@E?E@E?EAE?CAEAEAC?Ak@gA",
+ "maneuver": {
+ "bearing_after": 146,
+ "bearing_before": 66,
+ "location": [
+ -71.156514,
+ 42.331745
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.156514,
+ 42.331745
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.156455,
+ 42.331679
+ ]
+ }
+ ],
+ "weight": 28.6,
+ "duration": 28.6,
+ "distance": 118
+ },
+ {
+ "geometry": "s{jaGhphqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 51,
+ "location": [
+ -71.155413,
+ 42.33162
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 231
+ ],
+ "location": [
+ -71.155413,
+ 42.33162
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Middlesex Road, Spooner Road",
+ "weight": 479.6,
+ "duration": 479.6,
+ "distance": 1721.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "s{jaGhphqLj@fA?@@B@D@D?B@D?DAD?DADADABCBm@~@EFA@KF",
+ "maneuver": {
+ "bearing_after": 231,
+ "bearing_before": 0,
+ "location": [
+ -71.155413,
+ 42.33162
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 231
+ ],
+ "location": [
+ -71.155413,
+ 42.33162
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.156455,
+ 42.331679
+ ]
+ }
+ ],
+ "weight": 35.2,
+ "duration": 35.2,
+ "distance": 118
+ },
+ {
+ "geometry": "m|jaGdwhqLHVDT@FBLBT@V@V@V?TARARCRCTETERA@GRGNIPKPILMNON_@`@IH[XQRQRQRMPKNMPMTKTKTMXkAzCKVKZIXGXGXEZEXE\\CXCXAT",
+ "maneuver": {
+ "bearing_after": 246,
+ "bearing_before": 326,
+ "location": [
+ -71.156514,
+ 42.331745
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.156514,
+ 42.331745
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.157319,
+ 42.331592
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 285
+ ],
+ "location": [
+ -71.157633,
+ 42.331611
+ ]
+ }
+ ],
+ "weight": 138.8,
+ "duration": 138.8,
+ "distance": 568.3
+ },
+ {
+ "geometry": "gjkaG~ziqLK@E?E@UBQBODMHYNmC`B[PsBpAe@X",
+ "maneuver": {
+ "bearing_after": 352,
+ "bearing_before": 281,
+ "location": [
+ -71.162237,
+ 42.333956
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chestnut Hill Driveway",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.162237,
+ 42.333956
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.162456,
+ 42.334559
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.163446,
+ 42.335992
+ ]
+ }
+ ],
+ "weight": 65.5,
+ "duration": 65.5,
+ "distance": 272.5
+ },
+ {
+ "geometry": "cxkaGjcjqLc@VYLYNOFGBYLIDg@P{CbAYJ_@NODKF",
+ "maneuver": {
+ "bearing_after": 331,
+ "bearing_before": 331,
+ "location": [
+ -71.163576,
+ 42.336182
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Saint Thomas More Road",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.163576,
+ 42.336182
+ ]
+ }
+ ],
+ "weight": 65.2,
+ "duration": 65.2,
+ "distance": 255
+ },
+ {
+ "geometry": "qelaG`jjqLCMGUEa@Aa@HsAPcA",
+ "maneuver": {
+ "bearing_after": 66,
+ "bearing_before": 338,
+ "location": [
+ -71.164649,
+ 42.338332
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 330
+ ],
+ "location": [
+ -71.164649,
+ 42.338332
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.164582,
+ 42.338353
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.164126,
+ 42.338429
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.163711,
+ 42.338383
+ ]
+ }
+ ],
+ "weight": 36,
+ "duration": 36,
+ "distance": 109.7
+ },
+ {
+ "geometry": "ielaG`bjqLyBg@sB_Bi@a@U]EUEUA_@D_@LONONWDQF]",
+ "maneuver": {
+ "bearing_after": 12,
+ "bearing_before": 109,
+ "location": [
+ -71.163367,
+ 42.338289
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.163367,
+ 42.338289
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 225,
+ 270
+ ],
+ "location": [
+ -71.162369,
+ 42.339799
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.161554,
+ 42.33961
+ ]
+ }
+ ],
+ "weight": 77.1,
+ "duration": 77.1,
+ "distance": 292.2
+ },
+ {
+ "geometry": "cmlaGduiqLs@k@ICG?GAK?K?G?I?",
+ "maneuver": {
+ "bearing_after": 30,
+ "bearing_before": 109,
+ "location": [
+ -71.16131,
+ 42.339537
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.16131,
+ 42.339537
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.161063,
+ 42.339933
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.161061,
+ 42.33999
+ ]
+ }
+ ],
+ "weight": 25.4,
+ "duration": 25.4,
+ "distance": 72.3
+ },
+ {
+ "geometry": "{plaGrsiqLAjAA`@",
+ "maneuver": {
+ "bearing_after": 271,
+ "bearing_before": 0,
+ "location": [
+ -71.161057,
+ 42.34014
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "ref": "MA 30",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.161057,
+ 42.34014
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.161435,
+ 42.340152
+ ]
+ }
+ ],
+ "weight": 15,
+ "duration": 15,
+ "distance": 45.7
+ },
+ {
+ "geometry": "_qlaG`wiqLQ?I?u@L]VU\\Sp@Ov@AL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 271,
+ "location": [
+ -71.161611,
+ 42.340158
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.161611,
+ 42.340158
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.16161,
+ 42.340253
+ ]
+ }
+ ],
+ "weight": 32.8,
+ "duration": 32.8,
+ "distance": 136.9
+ },
+ {
+ "geometry": "kvlaG||iqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 277,
+ "location": [
+ -71.162549,
+ 42.341017
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 97
+ ],
+ "location": [
+ -71.162549,
+ 42.341017
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Beacon Street, Chestnut Hill Driveway",
+ "weight": 491,
+ "duration": 491,
+ "distance": 1870.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "kvlaG||iqL@MNw@Rq@T]\\Wt@MH?",
+ "maneuver": {
+ "bearing_after": 97,
+ "bearing_before": 0,
+ "location": [
+ -71.162549,
+ 42.341017
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 97
+ ],
+ "location": [
+ -71.162549,
+ 42.341017
+ ]
+ }
+ ],
+ "weight": 37,
+ "duration": 37,
+ "distance": 126.4
+ },
+ {
+ "geometry": "qqlaG`wiqL?U@O",
+ "maneuver": {
+ "bearing_after": 94,
+ "bearing_before": 174,
+ "location": [
+ -71.16161,
+ 42.340253
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.16161,
+ 42.340253
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.161498,
+ 42.340246
+ ]
+ }
+ ],
+ "weight": 19.200000000,
+ "duration": 19.200000000,
+ "distance": 15.4
+ },
+ {
+ "geometry": "oqlaGzuiqLE?iHeDCCCCAE@Ef@iCf@aCFU",
+ "maneuver": {
+ "bearing_after": 21,
+ "bearing_before": 92,
+ "location": [
+ -71.161424,
+ 42.340242
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Greycliff Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.161424,
+ 42.340242
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.159798,
+ 42.341596
+ ]
+ }
+ ],
+ "weight": 85.8,
+ "duration": 85.8,
+ "distance": 322.4
+ },
+ {
+ "geometry": "oxlaG~fiqLQKQI",
+ "maneuver": {
+ "bearing_after": 22,
+ "bearing_before": 112,
+ "location": [
+ -71.159035,
+ 42.341357
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Foster Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.159035,
+ 42.341357
+ ]
+ }
+ ],
+ "weight": 9.7,
+ "duration": 9.7,
+ "distance": 21.7
+ },
+ {
+ "geometry": "sylaGhfiqLDMl@cCFg@@a@Cq@Ac@@YVsAXaBBIDIDG?ADCHCPEJCJEHEFGf@e@BGBA@CHK",
+ "maneuver": {
+ "bearing_after": 115,
+ "bearing_before": 22,
+ "location": [
+ -71.158932,
+ 42.341537
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Kirkwood Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.158932,
+ 42.341537
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.156167,
+ 42.340838
+ ]
+ }
+ ],
+ "weight": 82.7,
+ "duration": 82.7,
+ "distance": 327.4
+ },
+ {
+ "geometry": "oqlaGbrhqLCMG_@Wg@",
+ "maneuver": {
+ "bearing_after": 71,
+ "bearing_before": 133,
+ "location": [
+ -71.155697,
+ 42.340243
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "South Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.155697,
+ 42.340243
+ ]
+ }
+ ],
+ "weight": 12.4,
+ "duration": 12.4,
+ "distance": 41.5
+ },
+ {
+ "geometry": "srlaGlohqLC[?ALaAF_@H[J[R_@\\o@TYr@g@d@[^_@RYXq@No@FUGSCIGUK]IYAECMCSC_@A[A[?Y@Y@YDUDWZyABKBIv@qDBM",
+ "maneuver": {
+ "bearing_after": 80,
+ "bearing_before": 49,
+ "location": [
+ -71.155268,
+ 42.340422
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Strathmore Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 75,
+ 180,
+ 195,
+ 225
+ ],
+ "location": [
+ -71.155268,
+ 42.340422
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 150,
+ 315,
+ 345
+ ],
+ "location": [
+ -71.153822,
+ 42.339864
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.152587,
+ 42.338896
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 195,
+ 240
+ ],
+ "location": [
+ -71.152332,
+ 42.338996
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 195,
+ 240
+ ],
+ "location": [
+ -71.152176,
+ 42.339063
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.15028,
+ 42.338957
+ ]
+ }
+ ],
+ "weight": 154.3,
+ "duration": 154.3,
+ "distance": 585
+ },
+ {
+ "geometry": "oglaG|igqLGEq@[MGSIOKCAKGMIUQe@a@e@_@OOQOuB_CUWuB}BCCC?I?",
+ "maneuver": {
+ "bearing_after": 21,
+ "bearing_before": 112,
+ "location": [
+ -71.149267,
+ 42.338639
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sutherland Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.149267,
+ 42.338639
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.148848,
+ 42.339331
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210
+ ],
+ "location": [
+ -71.148591,
+ 42.339628
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.148354,
+ 42.339897
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.147625,
+ 42.340583
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.147507,
+ 42.340688
+ ]
+ }
+ ],
+ "weight": 92.899999999,
+ "duration": 92.899999999,
+ "distance": 365.4
+ },
+ {
+ "geometry": "qxlaGzzfqLAWGuAKeAGc@CQAKIg@Oo@Ia@k@cB_@y@IQMUw@mAk@o@QQQO]Y]W]SYSGE",
+ "maneuver": {
+ "bearing_after": 82,
+ "bearing_before": 358,
+ "location": [
+ -71.146856,
+ 42.341367
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.146856,
+ 42.341367
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.146311,
+ 42.341419
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.145775,
+ 42.341517
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240
+ ],
+ "location": [
+ -71.14502,
+ 42.341734
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.14403,
+ 42.342226
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.143305,
+ 42.342821
+ ]
+ }
+ ],
+ "weight": 131.600000000,
+ "duration": 131.600000000,
+ "distance": 436.2
+ },
+ {
+ "geometry": "afmaGdafqLJG",
+ "maneuver": {
+ "bearing_after": 150,
+ "bearing_before": 28,
+ "location": [
+ -71.14275,
+ 42.343528
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.14275,
+ 42.343528
+ ]
+ }
+ ],
+ "weight": 8.5,
+ "duration": 8.5,
+ "distance": 7.6
+ },
+ {
+ "geometry": "uemaG|`fqLNH",
+ "maneuver": {
+ "bearing_after": 206,
+ "bearing_before": 150,
+ "location": [
+ -71.142705,
+ 42.343468
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.142705,
+ 42.343468
+ ]
+ }
+ ],
+ "weight": 9.2,
+ "duration": 9.2,
+ "distance": 10.2
+ },
+ {
+ "geometry": "eemaGfafqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 208,
+ "location": [
+ -71.142763,
+ 42.343387
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 28
+ ],
+ "location": [
+ -71.142763,
+ 42.343387
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Strathmore Road, Commonwealth Avenue",
+ "weight": 643.3,
+ "duration": 643.3,
+ "distance": 2259.2
+ },
+ {
+ "steps": [
+ {
+ "geometry": "eemaGfafqLOI",
+ "maneuver": {
+ "bearing_after": 28,
+ "bearing_before": 0,
+ "location": [
+ -71.142763,
+ 42.343387
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 28
+ ],
+ "location": [
+ -71.142763,
+ 42.343387
+ ]
+ }
+ ],
+ "weight": 12.5,
+ "duration": 12.5,
+ "distance": 10.2
+ },
+ {
+ "geometry": "uemaG|`fqLKF",
+ "maneuver": {
+ "bearing_after": 330,
+ "bearing_before": 26,
+ "location": [
+ -71.142705,
+ 42.343468
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.142705,
+ 42.343468
+ ]
+ }
+ ],
+ "weight": 8.6,
+ "duration": 8.6,
+ "distance": 7.6
+ },
+ {
+ "geometry": "afmaGdafqLSM",
+ "maneuver": {
+ "bearing_after": 28,
+ "bearing_before": 330,
+ "location": [
+ -71.14275,
+ 42.343528
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Commonwealth Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.14275,
+ 42.343528
+ ]
+ }
+ ],
+ "weight": 8.4,
+ "duration": 8.4,
+ "distance": 12.8
+ },
+ {
+ "geometry": "ufmaGv`fqLN[BEVg@Rg@Ve@BERc@N[FIDKp@yANc@Pa@J]FKDKZs@N[Te@DIlAcCZ{@`@mA`@kAJYDOTk@FM^m@|@qALO`BaCPYLQBEBGR_@DGNWJUFKBGRa@N[DIRa@@EHSHUHUFWFSDYDWDS?CBYH_AFcAFy@Fs@\\qE@MD}@Bk@Bk@?k@Cs@Ci@Iq@Ie@CWGi@?MAK?U@O?G?GDa@Hk@X}@Ti@b@_Ab@s@l@{@PUDEnAqARSNMh@i@@ATUHIBCh@k@v@u@~@u@\\WLI",
+ "maneuver": {
+ "bearing_after": 127,
+ "bearing_before": 28,
+ "location": [
+ -71.142675,
+ 42.343629
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.142675,
+ 42.343629
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.141918,
+ 42.343189
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.141518,
+ 42.342952
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.140448,
+ 42.342404
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.1398,
+ 42.34204
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.13879,
+ 42.34148
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.13802,
+ 42.34114
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.13781,
+ 42.34105
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.136884,
+ 42.340426
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.135539,
+ 42.339463
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.135162,
+ 42.339239
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.131469,
+ 42.338364
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.13065,
+ 42.33828
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.128948,
+ 42.338486
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.126889,
+ 42.337482
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.12595,
+ 42.33654
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 195,
+ 330
+ ],
+ "location": [
+ -71.125658,
+ 42.336257
+ ]
+ }
+ ],
+ "weight": 440.3,
+ "duration": 440.3,
+ "distance": 1812.6
+ },
+ {
+ "geometry": "oskaG|qbqLDJDDJLV`@^h@n@~@^l@Vf@JVJLHJl@h@Z`@n@~@",
+ "maneuver": {
+ "bearing_after": 229,
+ "bearing_before": 147,
+ "location": [
+ -71.124946,
+ 42.335444
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Greenough Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.124946,
+ 42.335444
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.12581,
+ 42.3348
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.12636,
+ 42.33446
+ ]
+ }
+ ],
+ "weight": 75.6,
+ "duration": 75.6,
+ "distance": 265.5
+ },
+ {
+ "geometry": "{hkaG|_cqLBKPg@n@{Bl@qBFSDQ",
+ "maneuver": {
+ "bearing_after": 119,
+ "bearing_before": 225,
+ "location": [
+ -71.127191,
+ 42.333743
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Gorham Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.127191,
+ 42.333743
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.125638,
+ 42.333123
+ ]
+ }
+ ],
+ "weight": 41.1,
+ "duration": 41.1,
+ "distance": 153.8
+ },
+ {
+ "geometry": "ydkaGtubqLFBtAz@~@l@DD",
+ "maneuver": {
+ "bearing_after": 205,
+ "bearing_before": 116,
+ "location": [
+ -71.125547,
+ 42.333088
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dana Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.125547,
+ 42.333088
+ ]
+ }
+ ],
+ "weight": 28.9,
+ "duration": 28.9,
+ "distance": 103.1
+ },
+ {
+ "geometry": "u_kaGhybqLGP",
+ "maneuver": {
+ "bearing_after": 298,
+ "bearing_before": 209,
+ "location": [
+ -71.126126,
+ 42.332265
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Davis Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.126126,
+ 42.332265
+ ]
+ }
+ ],
+ "weight": 10.7,
+ "duration": 10.7,
+ "distance": 9.1
+ },
+ {
+ "geometry": "}_kaGzybqLHFHBD?B?B?@ABC@A@C?C?E@A?C@A@C@?DAB?@?BABA@A@A@E?E?E?E?C@E@C@ABA",
+ "maneuver": {
+ "bearing_after": 208,
+ "bearing_before": 298,
+ "location": [
+ -71.126223,
+ 42.332305
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.126223,
+ 42.332305
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.126255,
+ 42.332261
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 165,
+ 195
+ ],
+ "location": [
+ -71.126282,
+ 42.332207
+ ]
+ }
+ ],
+ "weight": 65.8,
+ "duration": 65.8,
+ "distance": 72
+ },
+ {
+ "geometry": "e}jaGpwbqL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 154,
+ "location": [
+ -71.125847,
+ 42.331874
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 334
+ ],
+ "location": [
+ -71.125847,
+ 42.331874
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Washington Street, Greenough Street",
+ "weight": 691.9,
+ "duration": 691.9,
+ "distance": 2446.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "e}jaGpwbqLC@A@ABAD?B?D?D?DADA@A@C@C@A?C?E@A?ABA@?BA@?D?BABA@CBA@C?C?E?ICIG",
+ "maneuver": {
+ "bearing_after": 334,
+ "bearing_before": 0,
+ "location": [
+ -71.125847,
+ 42.331874
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 334
+ ],
+ "location": [
+ -71.125847,
+ 42.331874
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 165,
+ 195
+ ],
+ "location": [
+ -71.126282,
+ 42.332207
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.126255,
+ 42.332261
+ ]
+ }
+ ],
+ "weight": 69.6,
+ "duration": 69.6,
+ "distance": 72
+ },
+ {
+ "geometry": "}_kaGzybqLFQ",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 28,
+ "location": [
+ -71.126223,
+ 42.332305
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Davis Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.126223,
+ 42.332305
+ ]
+ }
+ ],
+ "weight": 16.4,
+ "duration": 16.4,
+ "distance": 9.1
+ },
+ {
+ "geometry": "u_kaGhybqLEE_Am@uA{@GC",
+ "maneuver": {
+ "bearing_after": 29,
+ "bearing_before": 118,
+ "location": [
+ -71.126126,
+ 42.332265
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dana Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.126126,
+ 42.332265
+ ]
+ }
+ ],
+ "weight": 29.2,
+ "duration": 29.2,
+ "distance": 103.1
+ },
+ {
+ "geometry": "ydkaGtubqLFQl@yBDM",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 25,
+ "location": [
+ -71.125547,
+ 42.333088
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Gorham Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.125547,
+ 42.333088
+ ]
+ }
+ ],
+ "weight": 24.8,
+ "duration": 24.8,
+ "distance": 71.4
+ },
+ {
+ "geometry": "}bkaGzpbqL]W{B{AGCECyA_AYSWSCCGC",
+ "maneuver": {
+ "bearing_after": 29,
+ "bearing_before": 115,
+ "location": [
+ -71.12478,
+ 42.33279
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cypress Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.12478,
+ 42.33279
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.12466,
+ 42.33294
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.124181,
+ 42.333596
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.12384,
+ 42.33408
+ ]
+ }
+ ],
+ "weight": 48.999999999,
+ "duration": 48.999999999,
+ "distance": 203.2
+ },
+ {
+ "geometry": "}lkaGnibqLKWS]IOCEMC",
+ "maneuver": {
+ "bearing_after": 50,
+ "bearing_before": 26,
+ "location": [
+ -71.123595,
+ 42.334394
+ ],
+ "modifier": "slight right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cypress Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 30,
+ 45,
+ 210
+ ],
+ "location": [
+ -71.123595,
+ 42.334394
+ ]
+ }
+ ],
+ "weight": 15.4,
+ "duration": 15.4,
+ "distance": 47.8
+ },
+ {
+ "geometry": "ynkaG~fbqL@q@?IE[?EAKAKIa@CSI_@I_@EK[k@AAcAcBiA}AW_@KO",
+ "maneuver": {
+ "bearing_after": 91,
+ "bearing_before": 14,
+ "location": [
+ -71.123198,
+ 42.334689
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "School Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 120,
+ 195,
+ 255,
+ 300
+ ],
+ "location": [
+ -71.123198,
+ 42.334689
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.122608,
+ 42.334732
+ ]
+ }
+ ],
+ "weight": 67.4,
+ "duration": 67.4,
+ "distance": 273
+ },
+ {
+ "geometry": "yvkaGfvaqLQY]m@S[Wc@KSYe@",
+ "maneuver": {
+ "bearing_after": 46,
+ "bearing_before": 43,
+ "location": [
+ -71.12052,
+ 42.33597
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Aspinwall Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.12052,
+ 42.33597
+ ]
+ }
+ ],
+ "weight": 25.8,
+ "duration": 25.8,
+ "distance": 107.7
+ },
+ {
+ "geometry": "{zkaGdpaqL_@eA_@oAGWACI_@CYCWCm@Aw@@_A?A?I@OB_@F_APaBF[@MBK@GFSP[\\i@Xi@j@sAPg@L]L_@Tw@XeABIDMNc@Rs@Lc@FOHSXs@",
+ "maneuver": {
+ "bearing_after": 57,
+ "bearing_before": 47,
+ "location": [
+ -71.11955,
+ 42.33662
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Aspinwall Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 60,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.11955,
+ 42.33662
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 240
+ ],
+ "location": [
+ -71.118798,
+ 42.336935
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.118663,
+ 42.336986
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 285
+ ],
+ "location": [
+ -71.1185,
+ 42.33704
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.11736,
+ 42.3371
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.116103,
+ 42.336889
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 315
+ ],
+ "location": [
+ -71.11534,
+ 42.33645
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.113726,
+ 42.335735
+ ]
+ }
+ ],
+ "weight": 164.9,
+ "duration": 164.9,
+ "distance": 643.2
+ },
+ {
+ "geometry": "grkaGvd`qLGG?AA?AAA?kBw@]Om@W",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 123,
+ "location": [
+ -71.112597,
+ 42.335238
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Netherlands Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.112597,
+ 42.335238
+ ]
+ }
+ ],
+ "weight": 37.1,
+ "duration": 37.1,
+ "distance": 118.9
+ },
+ {
+ "geometry": "mxkaGja`qLCJ",
+ "maneuver": {
+ "bearing_after": 289,
+ "bearing_before": 21,
+ "location": [
+ -71.112058,
+ 42.336229
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.112058,
+ 42.336229
+ ]
+ }
+ ],
+ "weight": 13.2,
+ "duration": 13.2,
+ "distance": 5.3
+ },
+ {
+ "geometry": "qxkaGva`qLp@X",
+ "maneuver": {
+ "bearing_after": 199,
+ "bearing_before": 289,
+ "location": [
+ -71.112118,
+ 42.336246
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.112118,
+ 42.336246
+ ]
+ }
+ ],
+ "weight": 26.4,
+ "duration": 26.4,
+ "distance": 29.3
+ },
+ {
+ "geometry": "_wkaGpb`qL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 201,
+ "location": [
+ -71.112246,
+ 42.336
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 21
+ ],
+ "location": [
+ -71.112246,
+ 42.336
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "School Street, Aspinwall Avenue",
+ "weight": 539.2,
+ "duration": 539.2,
+ "distance": 1684
+ },
+ {
+ "steps": [
+ {
+ "geometry": "_wkaGpb`qLq@Y",
+ "maneuver": {
+ "bearing_after": 21,
+ "bearing_before": 0,
+ "location": [
+ -71.112246,
+ 42.336
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 21
+ ],
+ "location": [
+ -71.112246,
+ 42.336
+ ]
+ }
+ ],
+ "weight": 30.7,
+ "duration": 30.7,
+ "distance": 29.3
+ },
+ {
+ "geometry": "qxkaGva`qLBK",
+ "maneuver": {
+ "bearing_after": 109,
+ "bearing_before": 19,
+ "location": [
+ -71.112118,
+ 42.336246
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.112118,
+ 42.336246
+ ]
+ }
+ ],
+ "weight": 13,
+ "duration": 13,
+ "distance": 5.3
+ },
+ {
+ "geometry": "mxkaGja`qLKG",
+ "maneuver": {
+ "bearing_after": 21,
+ "bearing_before": 109,
+ "location": [
+ -71.112058,
+ 42.336229
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Netherlands Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.112058,
+ 42.336229
+ ]
+ }
+ ],
+ "weight": 6,
+ "duration": 6,
+ "distance": 7.6
+ },
+ {
+ "geometry": "yxkaGba`qLDU@GDEFGFG\\QTKTId@Od@IPEDADC@ANQ",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 21,
+ "location": [
+ -71.112024,
+ 42.336293
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Parkway Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.112024,
+ 42.336293
+ ]
+ }
+ ],
+ "weight": 46.7,
+ "duration": 46.7,
+ "distance": 146.9
+ },
+ {
+ "geometry": "uqkaGl|_qLSUu@u@WYqBuBS[KUCEOU",
+ "maneuver": {
+ "bearing_after": 36,
+ "bearing_before": 139,
+ "location": [
+ -71.111266,
+ 42.335152
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Brookline Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.111266,
+ 42.335152
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 165,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.11003,
+ 42.336308
+ ]
+ }
+ ],
+ "weight": 51.7,
+ "duration": 51.7,
+ "distance": 191.5
+ },
+ {
+ "geometry": "}ykaGbs_qLHO",
+ "maneuver": {
+ "bearing_after": 129,
+ "bearing_before": 45,
+ "location": [
+ -71.109779,
+ 42.33647
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Fenwood Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.109779,
+ 42.33647
+ ]
+ }
+ ],
+ "weight": 6.5,
+ "duration": 6.5,
+ "distance": 8.2
+ },
+ {
+ "geometry": "sykaGrr_qLEM",
+ "maneuver": {
+ "bearing_after": 63,
+ "bearing_before": 129,
+ "location": [
+ -71.109703,
+ 42.336422
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.109703,
+ 42.336422
+ ]
+ }
+ ],
+ "weight": 6,
+ "duration": 6,
+ "distance": 6.7
+ },
+ {
+ "geometry": "yykaGdr_qL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 64,
+ "location": [
+ -71.10963,
+ 42.336448
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 244
+ ],
+ "location": [
+ -71.10963,
+ 42.336448
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Parkway Road, Brookline Avenue",
+ "weight": 160.6,
+ "duration": 160.6,
+ "distance": 395.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "yykaGdr_qLDL",
+ "maneuver": {
+ "bearing_after": 244,
+ "bearing_before": 0,
+ "location": [
+ -71.10963,
+ 42.336448
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 244
+ ],
+ "location": [
+ -71.10963,
+ 42.336448
+ ]
+ }
+ ],
+ "weight": 8.3,
+ "duration": 8.3,
+ "distance": 6.7
+ },
+ {
+ "geometry": "sykaGrr_qLIN",
+ "maneuver": {
+ "bearing_after": 309,
+ "bearing_before": 243,
+ "location": [
+ -71.109703,
+ 42.336422
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Fenwood Road",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.109703,
+ 42.336422
+ ]
+ }
+ ],
+ "weight": 6.1,
+ "duration": 6.1,
+ "distance": 8.2
+ },
+ {
+ "geometry": "}ykaGbs_qLeAkAOGUKOQqAqAw@{@OQKKGGII[_@q@u@EEGI_@a@m@o@KK",
+ "maneuver": {
+ "bearing_after": 37,
+ "bearing_before": 309,
+ "location": [
+ -71.109779,
+ 42.33647
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Brookline Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.109779,
+ 42.33647
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.109295,
+ 42.337005
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.10831,
+ 42.337956
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.1081,
+ 42.338146
+ ]
+ }
+ ],
+ "weight": 92.3,
+ "duration": 92.3,
+ "distance": 341.6
+ },
+ {
+ "geometry": "gilaGnc_qLNWd@cAh@gA`@{@`@{@Vk@HW\\kAV_Af@gBv@qCJa@ZcAHYTw@Rw@Tw@b@{Ap@aC@GBG",
+ "maneuver": {
+ "bearing_after": 127,
+ "bearing_before": 36,
+ "location": [
+ -71.107283,
+ 42.338917
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Longwood Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.107283,
+ 42.338917
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.106161,
+ 42.338267
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.105141,
+ 42.337783
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.103398,
+ 42.337115
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.103058,
+ 42.33698
+ ]
+ }
+ ],
+ "weight": 159.1,
+ "duration": 159.1,
+ "distance": 610.9
+ },
+ {
+ "geometry": "}wkaGr{}pL_Ai@aB_AMKeBaAe@YGCMKUMc@W",
+ "maneuver": {
+ "bearing_after": 25,
+ "bearing_before": 116,
+ "location": [
+ -71.100903,
+ 42.336152
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Palace Road",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.100903,
+ 42.336152
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.099851,
+ 42.337731
+ ]
+ }
+ ],
+ "weight": 63.2,
+ "duration": 63.2,
+ "distance": 245.2
+ },
+ {
+ "geometry": "idlaGjs}pLBKPk@@C",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 25,
+ "location": [
+ -71.09958,
+ 42.338129
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.09958,
+ 42.338129
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.099516,
+ 42.338105
+ ]
+ }
+ ],
+ "weight": 6.6,
+ "duration": 6.6,
+ "distance": 28.1
+ },
+ {
+ "geometry": "qclaGnq}pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 140,
+ "location": [
+ -71.099284,
+ 42.338007
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 320
+ ],
+ "location": [
+ -71.099284,
+ 42.338007
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Brookline Avenue, Longwood Avenue",
+ "weight": 335.6,
+ "duration": 335.6,
+ "distance": 1240.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "qclaGnq}pLBA@CD?`Ad@FB",
+ "maneuver": {
+ "bearing_after": 141,
+ "bearing_before": 0,
+ "location": [
+ -71.099284,
+ 42.338007
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 141
+ ],
+ "location": [
+ -71.099284,
+ 42.338007
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.099435,
+ 42.337621
+ ]
+ }
+ ],
+ "weight": 20.3,
+ "duration": 20.3,
+ "distance": 52.2
+ },
+ {
+ "geometry": "{`laGrr}pLX_ADOf@}AFULUPW^MLG",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 203,
+ "location": [
+ -71.099461,
+ 42.337578
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Evans Way",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.099461,
+ 42.337578
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.099055,
+ 42.337418
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.098593,
+ 42.337219
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 165,
+ 315,
+ 345
+ ],
+ "location": [
+ -71.098251,
+ 42.337016
+ ]
+ }
+ ],
+ "weight": 40.5,
+ "duration": 40.5,
+ "distance": 145.1
+ },
+ {
+ "geometry": "}{kaGjj}pLrAzET~@L^HVTp@Rl@",
+ "maneuver": {
+ "bearing_after": 241,
+ "bearing_before": 160,
+ "location": [
+ -71.098143,
+ 42.336789
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 9",
+ "driving_side": "right",
+ "name": "Huntington Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.098143,
+ 42.336789
+ ]
+ }
+ ],
+ "weight": 83.1,
+ "duration": 83.1,
+ "distance": 203.5
+ },
+ {
+ "geometry": "qvkaG~w}pLFQBIFSHS",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 239,
+ "location": [
+ -71.100322,
+ 42.335929
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Longwood Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.100322,
+ 42.335929
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.10008,
+ 42.33583
+ ]
+ }
+ ],
+ "weight": 8.2,
+ "duration": 8.2,
+ "distance": 32.9
+ },
+ {
+ "geometry": "sukaGzu}pL\\UHGJAJ?N?f@ZJBLBPJDBzAx@PJRJdAj@TLlAp@nAr@HD",
+ "maneuver": {
+ "bearing_after": 150,
+ "bearing_before": 122,
+ "location": [
+ -71.099976,
+ 42.335781
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Saint Alphonsus Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 150,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.099976,
+ 42.335781
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 210
+ ],
+ "location": [
+ -71.09982,
+ 42.335382
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 45,
+ 210
+ ],
+ "location": [
+ -71.100003,
+ 42.335047
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.100058,
+ 42.33496
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.100427,
+ 42.334375
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.100486,
+ 42.334283
+ ]
+ }
+ ],
+ "weight": 92.2,
+ "duration": 92.2,
+ "distance": 342
+ },
+ {
+ "geometry": "cdkaGf~}pLFQFOh@qBb@yABQ",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 203,
+ "location": [
+ -71.10132,
+ 42.332976
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.10132,
+ 42.332976
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.100583,
+ 42.332689
+ ]
+ }
+ ],
+ "weight": 34.4,
+ "duration": 34.4,
+ "distance": 118.7
+ },
+ {
+ "geometry": "aakaGfv}pLPH",
+ "maneuver": {
+ "bearing_after": 202,
+ "bearing_before": 116,
+ "location": [
+ -71.100041,
+ 42.332486
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Carmel Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.100041,
+ 42.332486
+ ]
+ }
+ ],
+ "weight": 2.5,
+ "duration": 2.5,
+ "distance": 10.3
+ },
+ {
+ "geometry": "o`kaGpv}pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 204,
+ "location": [
+ -71.100092,
+ 42.332401
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Carmel Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 24
+ ],
+ "location": [
+ -71.100092,
+ 42.332401
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Huntington Avenue, Saint Alphonsus Street",
+ "weight": 281.2,
+ "duration": 281.2,
+ "distance": 904.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "o`kaGpv}pLQI",
+ "maneuver": {
+ "bearing_after": 24,
+ "bearing_before": 0,
+ "location": [
+ -71.100092,
+ 42.332401
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Carmel Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 24
+ ],
+ "location": [
+ -71.100092,
+ 42.332401
+ ]
+ }
+ ],
+ "weight": 15.4,
+ "duration": 15.4,
+ "distance": 10.3
+ },
+ {
+ "geometry": "aakaGfv}pLDOJk@F]Ji@BKJg@Jq@n@cEF_@Da@B[D_@@U",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 22,
+ "location": [
+ -71.100041,
+ 42.332486
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.100041,
+ 42.332486
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.099319,
+ 42.332276
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.097892,
+ 42.331915
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.097729,
+ 42.331881
+ ]
+ }
+ ],
+ "weight": 67.4,
+ "duration": 67.4,
+ "distance": 251.1
+ },
+ {
+ "geometry": "u|jaGdd}pLh@TTH`Bd@h@RLHd@~@@@JPTX`@f@NN",
+ "maneuver": {
+ "bearing_after": 201,
+ "bearing_before": 101,
+ "location": [
+ -71.09715,
+ 42.331785
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Parker Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.09715,
+ 42.331785
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.097501,
+ 42.330979
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.097652,
+ 42.330702
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.097971,
+ 42.330507
+ ]
+ }
+ ],
+ "weight": 58,
+ "duration": 58,
+ "distance": 224.8
+ },
+ {
+ "geometry": "_rjaGnl}pLYv@CF]bAQh@",
+ "maneuver": {
+ "bearing_after": 300,
+ "bearing_before": 219,
+ "location": [
+ -71.098479,
+ 42.330081
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Alleghany Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.098479,
+ 42.330081
+ ]
+ }
+ ],
+ "weight": 20.1,
+ "duration": 20.1,
+ "distance": 83.7
+ },
+ {
+ "geometry": "mtjaG|q}pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 301,
+ "location": [
+ -71.099348,
+ 42.33047
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Alleghany Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 121
+ ],
+ "location": [
+ -71.099348,
+ 42.33047
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Tremont Street, Parker Street",
+ "weight": 160.9,
+ "duration": 160.9,
+ "distance": 569.9
+ },
+ {
+ "steps": [
+ {
+ "geometry": "mtjaG|q}pLPi@\\cABGXw@NYn@sBNg@DQ",
+ "maneuver": {
+ "bearing_after": 121,
+ "bearing_before": 0,
+ "location": [
+ -71.099348,
+ 42.33047
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Alleghany Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 121
+ ],
+ "location": [
+ -71.099348,
+ 42.33047
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.098479,
+ 42.330081
+ ]
+ }
+ ],
+ "weight": 47.400000000,
+ "duration": 47.400000000,
+ "distance": 179.3
+ },
+ {
+ "geometry": "iojaGff}pLZR\\PZPzBjA",
+ "maneuver": {
+ "bearing_after": 209,
+ "bearing_before": 118,
+ "location": [
+ -71.097481,
+ 42.329646
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Terrace Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.097481,
+ 42.329646
+ ]
+ }
+ ],
+ "weight": 38.4,
+ "duration": 38.4,
+ "distance": 128.7
+ },
+ {
+ "geometry": "whjaGjj}pLFSZcA^oA?CBIHU",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 203,
+ "location": [
+ -71.098138,
+ 42.328596
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "New Cedar Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.098138,
+ 42.328596
+ ]
+ }
+ ],
+ "weight": 22.9,
+ "duration": 22.9,
+ "distance": 95
+ },
+ {
+ "geometry": "efjaG~c}pLFWFWVaA\\qAV_ADODK",
+ "maneuver": {
+ "bearing_after": 115,
+ "bearing_before": 116,
+ "location": [
+ -71.097121,
+ 42.328194
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cedar Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.097121,
+ 42.328194
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.096998,
+ 42.32815
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.096139,
+ 42.32784
+ ]
+ }
+ ],
+ "weight": 43,
+ "duration": 43,
+ "distance": 133.1
+ },
+ {
+ "geometry": "{bjaG~z|pLwBeAa@U[YWUk@q@a@e@]g@Yi@Ui@Kc@Oy@Km@SqAM_AKu@Gu@OoACU",
+ "maneuver": {
+ "bearing_after": 22,
+ "bearing_before": 116,
+ "location": [
+ -71.095675,
+ 42.327662
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Centre Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 165,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.095675,
+ 42.327662
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 150,
+ 210
+ ],
+ "location": [
+ -71.094982,
+ 42.328687
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.094537,
+ 42.329076
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.093921,
+ 42.329467
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.09322,
+ 42.329665
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.091954,
+ 42.329942
+ ]
+ }
+ ],
+ "weight": 114.800000000,
+ "duration": 114.800000000,
+ "distance": 465.9
+ },
+ {
+ "geometry": "wqjaGn`|pLHSJWJc@DS@G",
+ "maneuver": {
+ "bearing_after": 120,
+ "bearing_before": 75,
+ "location": [
+ -71.091441,
+ 42.330037
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dudley Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.091441,
+ 42.330037
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.091219,
+ 42.329933
+ ]
+ }
+ ],
+ "weight": 14,
+ "duration": 14,
+ "distance": 50.1
+ },
+ {
+ "geometry": "mpjaGb}{pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 117,
+ "location": [
+ -71.090904,
+ 42.329829
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dudley Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 297
+ ],
+ "location": [
+ -71.090904,
+ 42.329829
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Alleghany Street, Centre Street",
+ "weight": 280.5,
+ "duration": 280.5,
+ "distance": 1052
+ },
+ {
+ "steps": [
+ {
+ "geometry": "mpjaGb}{pLNg@Ps@DU@E@O",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 0,
+ "location": [
+ -71.090904,
+ 42.329829
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Dudley Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 116
+ ],
+ "location": [
+ -71.090904,
+ 42.329829
+ ]
+ }
+ ],
+ "weight": 15.9,
+ "duration": 15.9,
+ "distance": 61.7
+ },
+ {
+ "geometry": "aojaGzx{pL^WX[l@k@FIR[f@_Ap@kAh@_A^q@JSHWTmAXeC",
+ "maneuver": {
+ "bearing_after": 149,
+ "bearing_before": 104,
+ "location": [
+ -71.090221,
+ 42.329605
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Bartlett Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 150,
+ 285
+ ],
+ "location": [
+ -71.090221,
+ 42.329605
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.089741,
+ 42.329085
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.089227,
+ 42.328749
+ ]
+ }
+ ],
+ "weight": 87.5,
+ "duration": 87.5,
+ "distance": 344.2
+ },
+ {
+ "geometry": "scjaGvd{pLv@VhA`@p@Rf@PbBj@|Ad@jBp@HDVHb@NPFTNXTLJZZJJp@l@~@x@r@x@^l@?@zAzBbA|AT\\|@rAh@v@BFPVT\\PVb@t@",
+ "maneuver": {
+ "bearing_after": 196,
+ "bearing_before": 104,
+ "location": [
+ -71.086996,
+ 42.327782
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.086996,
+ 42.327782
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.087286,
+ 42.327133
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.087695,
+ 42.326184
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.08789,
+ 42.32571
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.088138,
+ 42.325173
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.088788,
+ 42.324218
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 225,
+ 285
+ ],
+ "location": [
+ -71.0896,
+ 42.323394
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.091941,
+ 42.321692
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225
+ ],
+ "location": [
+ -71.092089,
+ 42.321576
+ ]
+ }
+ ],
+ "weight": 221.399999999,
+ "duration": 221.399999999,
+ "distance": 869.7
+ },
+ {
+ "geometry": "e{haG~f|pL^i@R[f@w@T]PQl@o@\\[nAgAVUbAy@XYLS",
+ "maneuver": {
+ "bearing_after": 133,
+ "bearing_before": 226,
+ "location": [
+ -71.092476,
+ 42.321307
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Elmore Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.092476,
+ 42.321307
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.091373,
+ 42.320423
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 330
+ ],
+ "location": [
+ -71.090868,
+ 42.319865
+ ]
+ }
+ ],
+ "weight": 76.2,
+ "duration": 76.2,
+ "distance": 298.4
+ },
+ {
+ "geometry": "anhaG~x{pLDHRVh@r@VXNF^Lf@NF@~@XdA^VL~Ar@",
+ "maneuver": {
+ "bearing_after": 222,
+ "bearing_before": 127,
+ "location": [
+ -71.090238,
+ 42.319213
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Walnut Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.090238,
+ 42.319213
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.091004,
+ 42.318268
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.091287,
+ 42.317601
+ ]
+ }
+ ],
+ "weight": 68.4,
+ "duration": 68.4,
+ "distance": 275.8
+ },
+ {
+ "geometry": "g`haGra|pLRHf@F^F@?f@BNAb@AF?XBXBVHFBTH^LXBTAVIVOV]Vg@HKJO",
+ "maneuver": {
+ "bearing_after": 191,
+ "bearing_before": 201,
+ "location": [
+ -71.091622,
+ 42.316996
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Crawford Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.091622,
+ 42.316996
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180
+ ],
+ "location": [
+ -71.091768,
+ 42.316329
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.091837,
+ 42.315648
+ ]
+ }
+ ],
+ "weight": 75.5,
+ "duration": 75.5,
+ "distance": 299.9
+ },
+ {
+ "geometry": "upgaG``|pLn@f@jAv@j@b@\\Tj@`@`Ax@|@l@BB|@p@NPFRDd@@T",
+ "maneuver": {
+ "bearing_after": 210,
+ "bearing_before": 132,
+ "location": [
+ -71.091368,
+ 42.31451
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Harold Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 150,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.091368,
+ 42.31451
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.091565,
+ 42.314271
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.092028,
+ 42.313668
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.092595,
+ 42.312966
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 255
+ ],
+ "location": [
+ -71.093189,
+ 42.312246
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.093483,
+ 42.312183
+ ]
+ }
+ ],
+ "weight": 90.899999999,
+ "duration": 90.899999999,
+ "distance": 327
+ },
+ {
+ "geometry": "abgaG|m|pLVEl@G\\E\\GXGb@IVITIRKRKROTSPQTURUd@m@`@k@\\g@LQJQrBqCt@kAxB_DvAoBFIJOLSLSR[P]L[LYVm@Z}@r@gBR_@pAgC`CwE",
+ "maneuver": {
+ "bearing_after": 171,
+ "bearing_before": 255,
+ "location": [
+ -71.093585,
+ 42.312166
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Seaver Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.093585,
+ 42.312166
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 330
+ ],
+ "location": [
+ -71.092959,
+ 42.310565
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.092196,
+ 42.309911
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.089119,
+ 42.307563
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.0874,
+ 42.30664
+ ]
+ }
+ ],
+ "weight": 269.5,
+ "duration": 269.5,
+ "distance": 1026.6
+ },
+ {
+ "geometry": "gxeaGf{zpLd@aAFIDGFGFEHCHEHAJCJAJAJAH@R@vBd@lAVVFHBXFtCn@dB^D@ND`@HHBdATpG~AtA\\lAXtA^rAVRDNBb@JRBTDh@L@?zEbA~AZj@NhATv@N\\H",
+ "maneuver": {
+ "bearing_after": 127,
+ "bearing_before": 127,
+ "location": [
+ -71.085475,
+ 42.305484
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 120,
+ 135,
+ 315
+ ],
+ "location": [
+ -71.085475,
+ 42.305484
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 15,
+ 195
+ ],
+ "location": [
+ -71.084895,
+ 42.304595
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 105,
+ 195,
+ 240
+ ],
+ "location": [
+ -71.085269,
+ 42.303436
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.085749,
+ 42.301943
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.085933,
+ 42.30137
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.08656,
+ 42.299565
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195
+ ],
+ "location": [
+ -71.086847,
+ 42.298748
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.087002,
+ 42.298226
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.087021,
+ 42.29815
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 330
+ ],
+ "location": [
+ -71.08754,
+ 42.296437
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.087865,
+ 42.295373
+ ]
+ }
+ ],
+ "weight": 358.300000000,
+ "duration": 358.300000000,
+ "distance": 1220.2
+ },
+ {
+ "geometry": "kvcaG~j{pLD_@mAWsAYC?uA[",
+ "maneuver": {
+ "bearing_after": 102,
+ "bearing_before": 192,
+ "location": [
+ -71.087997,
+ 42.294939
+ ],
+ "modifier": "uturn",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Blue Hill Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.087997,
+ 42.294939
+ ]
+ },
+ {
+ "out": 0,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 120,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.087839,
+ 42.294911
+ ]
+ }
+ ],
+ "weight": 46.1,
+ "duration": 46.1,
+ "distance": 157.1
+ },
+ {
+ "geometry": "a~caGpg{pL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 13,
+ "location": [
+ -71.087449,
+ 42.296172
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Blue Hill Avenue",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 193
+ ],
+ "location": [
+ -71.087449,
+ 42.296172
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Seaver Street, Blue Hill Avenue",
+ "weight": 1309.7,
+ "duration": 1309.7,
+ "distance": 4880.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "a~caGpg{pLQEiAUqDw@a@KgAU]Gy@QOESCICKCA?q@O{Aa@uD_AqD{@qA[GAWG",
+ "maneuver": {
+ "bearing_after": 13,
+ "bearing_before": 0,
+ "location": [
+ -71.087449,
+ 42.296172
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Blue Hill Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 13
+ ],
+ "location": [
+ -71.087449,
+ 42.296172
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.087306,
+ 42.296631
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.086974,
+ 42.297691
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 195,
+ 255,
+ 285
+ ],
+ "location": [
+ -71.086819,
+ 42.298199
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.086677,
+ 42.298666
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.086393,
+ 42.299502
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 195
+ ],
+ "location": [
+ -71.086072,
+ 42.30041
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.085768,
+ 42.301302
+ ]
+ }
+ ],
+ "weight": 200.299999999,
+ "duration": 200.299999999,
+ "distance": 652
+ },
+ {
+ "geometry": "uaeaGz{zpLFW",
+ "maneuver": {
+ "bearing_after": 118,
+ "bearing_before": 12,
+ "location": [
+ -71.085576,
+ 42.301874
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Glenway Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.085576,
+ 42.301874
+ ]
+ }
+ ],
+ "weight": 5.1,
+ "duration": 5.1,
+ "distance": 10.8
+ },
+ {
+ "geometry": "maeaGb{zpL?EAEAGCEW]EGEEIGcBy@aCmA",
+ "maneuver": {
+ "bearing_after": 67,
+ "bearing_before": 118,
+ "location": [
+ -71.085461,
+ 42.301828
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Old Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.085461,
+ 42.301828
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 225
+ ],
+ "location": [
+ -71.08507,
+ 42.302097
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 315
+ ],
+ "location": [
+ -71.084776,
+ 42.302603
+ ]
+ }
+ ],
+ "weight": 45.7,
+ "duration": 45.7,
+ "distance": 185.5
+ },
+ {
+ "geometry": "ijeaGltzpLEECECIGOCMCOCQ?S?QAOAQCOAOESEQEQMa@OY_@i@IKYe@MQY_@c@o@Wc@MQm@kAEIm@iAUa@KSMWo@sAWq@Mg@Ko@CQEi@Gc@Gq@AEK_AGWKc@c@oAACMYQa@q@iAIMg@w@q@}@c@i@CCGGGIcAmAMOCC]c@SWi@w@_@m@?AKQ{@{AGIOWEIYg@OW]s@??Q]kB}Ck@kAg@_A]u@u@oBWo@ISUq@CCMYq@mASY]c@CCWYEGmAuAGIYYa@_@q@_@e@UwAo@a@QgB}@u@_@SKQIKGMIw@m@q@i@QOYUSQGCECIAGCECGCAAECmAcAKI]YIGGGEGEECIUe@AAGMUi@Wk@MWMUOUOSOQQQQOSOQMaBeAi@_@IG}ByASMQOQQQQOQUYU[KOCEEIOUk@eACE[Y",
+ "maneuver": {
+ "bearing_after": 52,
+ "bearing_before": 22,
+ "location": [
+ -71.084389,
+ 42.303253
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbia Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 210
+ ],
+ "location": [
+ -71.084389,
+ 42.303253
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 195,
+ 240
+ ],
+ "location": [
+ -71.084201,
+ 42.303358
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 255,
+ 270
+ ],
+ "location": [
+ -71.083959,
+ 42.303419
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 135,
+ 255
+ ],
+ "location": [
+ -71.083444,
+ 42.303472
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.08286,
+ 42.303706
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.082309,
+ 42.304121
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.081211,
+ 42.304878
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.080454,
+ 42.305354
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 225,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.078258,
+ 42.306041
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.07652,
+ 42.306994
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.07594,
+ 42.307478
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.075096,
+ 42.308197
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.073078,
+ 42.309528
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.072292,
+ 42.31007
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 240,
+ 285
+ ],
+ "location": [
+ -71.070018,
+ 42.311275
+ ]
+ },
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 75,
+ 180,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.068362,
+ 42.312682
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 75,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.067233,
+ 42.314621
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.066374,
+ 42.315694
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 135,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.066315,
+ 42.315805
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 225
+ ],
+ "location": [
+ -71.065512,
+ 42.316733
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.065028,
+ 42.317
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.063454,
+ 42.318567
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.062414,
+ 42.319813
+ ]
+ }
+ ],
+ "weight": 896,
+ "duration": 896,
+ "distance": 2767.1
+ },
+ {
+ "geometry": "avhaGhevpLSSGGECICE?IAI?E?C?WDQBK@YBMAOAWEc@Kk@OKCeAUICICOGWIQK",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 32,
+ "location": [
+ -71.061486,
+ 42.320492
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 150,
+ 210,
+ 255,
+ 315
+ ],
+ "location": [
+ -71.061486,
+ 42.320492
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165
+ ],
+ "location": [
+ -71.061345,
+ 42.321099
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.061171,
+ 42.32202
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.061042,
+ 42.322415
+ ]
+ }
+ ],
+ "weight": 67.9,
+ "duration": 67.9,
+ "distance": 262.2
+ },
+ {
+ "geometry": "gdiaGlavpLINs@z@i@t@]h@EHs@hASZMf@Qr@Mn@",
+ "maneuver": {
+ "bearing_after": 316,
+ "bearing_before": 19,
+ "location": [
+ -71.06087,
+ 42.322758
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Enterprise Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.06087,
+ 42.322758
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.062285,
+ 42.323816
+ ]
+ }
+ ],
+ "weight": 61.099999999,
+ "duration": 61.099999999,
+ "distance": 229.6
+ },
+ {
+ "geometry": "iliaGtnvpLuAoA_@Yc@_@UQ",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 291,
+ "location": [
+ -71.062992,
+ 42.324051
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lucy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 300
+ ],
+ "location": [
+ -71.062992,
+ 42.324051
+ ]
+ }
+ ],
+ "weight": 28.3,
+ "duration": 28.3,
+ "distance": 117.4
+ },
+ {
+ "geometry": "yqiaGxivpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 31,
+ "location": [
+ -71.06221,
+ 42.324934
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lucy Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 211
+ ],
+ "location": [
+ -71.06221,
+ 42.324934
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Blue Hill Avenue, Columbia Road",
+ "weight": 1304.4,
+ "duration": 1304.4,
+ "distance": 4224.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "yqiaGxivpLTPb@^^XtAnA",
+ "maneuver": {
+ "bearing_after": 211,
+ "bearing_before": 0,
+ "location": [
+ -71.06221,
+ 42.324934
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Lucy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 211
+ ],
+ "location": [
+ -71.06221,
+ 42.324934
+ ]
+ }
+ ],
+ "weight": 39.2,
+ "duration": 39.2,
+ "distance": 117.4
+ },
+ {
+ "geometry": "iliaGtnvpLLo@Ps@Lg@",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 213,
+ "location": [
+ -71.062992,
+ 42.324051
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Enterprise Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 300
+ ],
+ "location": [
+ -71.062992,
+ 42.324051
+ ]
+ }
+ ],
+ "weight": 15.5,
+ "duration": 15.5,
+ "distance": 63.9
+ },
+ {
+ "geometry": "{jiaGhjvpLR[",
+ "maneuver": {
+ "bearing_after": 133,
+ "bearing_before": 113,
+ "location": [
+ -71.062285,
+ 42.323816
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Enterprise Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.062285,
+ 42.323816
+ ]
+ }
+ ],
+ "weight": 14.1,
+ "duration": 14.1,
+ "distance": 15.6
+ },
+ {
+ "geometry": "gjiaGlivpLr@iADI\\i@h@u@r@{@HO",
+ "maneuver": {
+ "bearing_after": 132,
+ "bearing_before": 133,
+ "location": [
+ -71.06215,
+ 42.323717
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Enterprise Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 315
+ ],
+ "location": [
+ -71.06215,
+ 42.323717
+ ]
+ }
+ ],
+ "weight": 48.1,
+ "duration": 48.1,
+ "distance": 150.1
+ },
+ {
+ "geometry": "gdiaGlavpLo@e@",
+ "maneuver": {
+ "bearing_after": 28,
+ "bearing_before": 136,
+ "location": [
+ -71.06087,
+ 42.322758
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.06087,
+ 42.322758
+ ]
+ }
+ ],
+ "weight": 11.3,
+ "duration": 11.3,
+ "distance": 31.2
+ },
+ {
+ "geometry": "weiaGf`vpLDO^aBlCwKJc@BITaALi@ZeA@EDOFG?UAaD",
+ "maneuver": {
+ "bearing_after": 113,
+ "bearing_before": 28,
+ "location": [
+ -71.060684,
+ 42.323003
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Mount Vernon Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.060684,
+ 42.323003
+ ]
+ },
+ {
+ "out": 1,
+ "in": 4,
+ "entry": [
+ true,
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 255,
+ 300
+ ],
+ "location": [
+ -71.056798,
+ 42.32162
+ ]
+ }
+ ],
+ "weight": 108.699999999,
+ "duration": 108.699999999,
+ "distance": 431.7
+ },
+ {
+ "geometry": "e}haGfbupLFAt@AP?X?",
+ "maneuver": {
+ "bearing_after": 174,
+ "bearing_before": 88,
+ "location": [
+ -71.055878,
+ 42.32163
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Buttonwood Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.055878,
+ 42.32163
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.055862,
+ 42.32123
+ ]
+ }
+ ],
+ "weight": 27,
+ "duration": 27,
+ "distance": 58.5
+ },
+ {
+ "geometry": "{yhaGbbupLIWGWEWEWG]C[E[C]AQAS?y@@IAa@?WC}C?O?MAK?MAKAKAICK?yA",
+ "maneuver": {
+ "bearing_after": 66,
+ "bearing_before": 178,
+ "location": [
+ -71.05586,
+ 42.321104
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbia Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.05586,
+ 42.321104
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 255,
+ 285
+ ],
+ "location": [
+ -71.052679,
+ 42.321461
+ ]
+ }
+ ],
+ "weight": 92.7,
+ "duration": 92.7,
+ "distance": 305.2
+ },
+ {
+ "geometry": "c|haGlktpL@K?I@I?K?K?MAUCw@",
+ "maneuver": {
+ "bearing_after": 90,
+ "bearing_before": 88,
+ "location": [
+ -71.052229,
+ 42.321462
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbia Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.052229,
+ 42.321462
+ ]
+ }
+ ],
+ "weight": 15.5,
+ "duration": 15.5,
+ "distance": 61.5
+ },
+ {
+ "geometry": "e|haGxftpL@E@E@E@E@E?E?E?E?G?EAEAEAEAEACAECCAEECACCACCEA",
+ "maneuver": {
+ "exit": 1,
+ "bearing_after": 122,
+ "bearing_before": 82,
+ "location": [
+ -71.051488,
+ 42.321468
+ ],
+ "modifier": "slight right",
+ "type": "rotary"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "William J. Day Boulevard",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ false
+ ],
+ "bearings": [
+ 120,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.051488,
+ 42.321468
+ ]
+ }
+ ],
+ "rotary_name": "Kosciuszko Circle",
+ "weight": 14.4,
+ "duration": 14.4,
+ "distance": 60.6
+ },
+ {
+ "geometry": "c}haG~btpLO_@EEGGEECCCECGAGIYEICIEGEEGICGEIEIEKGKGKGKEIEGEGGIEGEGIIGGIEIGGGIGGEGCECCCICGEICGCECICGCGAGAGAICIAIAIASASASCSAUAY?SAO?O@_@?M@O?I?K?O?Y?S?Q?QAM?MA",
+ "maneuver": {
+ "exit": 1,
+ "bearing_after": 54,
+ "bearing_before": 21,
+ "location": [
+ -71.050879,
+ 42.321615
+ ],
+ "modifier": "slight right",
+ "type": "exit rotary"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "William J. Day Boulevard",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 195
+ ],
+ "location": [
+ -71.050879,
+ 42.321615
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 90,
+ 225
+ ],
+ "location": [
+ -71.05057,
+ 42.321835
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 210,
+ 225,
+ 240
+ ],
+ "location": [
+ -71.050138,
+ 42.322074
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 210,
+ 240
+ ],
+ "location": [
+ -71.04994,
+ 42.322184
+ ]
+ }
+ ],
+ "weight": 145.2,
+ "duration": 145.2,
+ "distance": 491.7
+ },
+ {
+ "geometry": "euiaGlvspL?N?D",
+ "maneuver": {
+ "bearing_after": 271,
+ "bearing_before": 0,
+ "location": [
+ -71.048872,
+ 42.325465
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.048872,
+ 42.325465
+ ]
+ }
+ ],
+ "weight": 2.2,
+ "duration": 2.2,
+ "distance": 9
+ },
+ {
+ "geometry": "euiaGbwspL?HKREHIDAA",
+ "maneuver": {
+ "bearing_after": 277,
+ "bearing_before": 274,
+ "location": [
+ -71.048981,
+ 42.325469
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.048981,
+ 42.325469
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.049029,
+ 42.325474
+ ]
+ }
+ ],
+ "weight": 24.8,
+ "duration": 24.8,
+ "distance": 27.1
+ },
+ {
+ "geometry": "cviaGnxspL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 7,
+ "location": [
+ -71.049204,
+ 42.325624
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 187
+ ],
+ "location": [
+ -71.049204,
+ 42.325624
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Mount Vernon Street, William J. Day Boulevard",
+ "weight": 558.7,
+ "duration": 558.7,
+ "distance": 1823.5
+ },
+ {
+ "steps": [
+ {
+ "geometry": "cviaGnxspL@@HEDIJS?I",
+ "maneuver": {
+ "bearing_after": 187,
+ "bearing_before": 0,
+ "location": [
+ -71.049204,
+ 42.325624
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 187
+ ],
+ "location": [
+ -71.049204,
+ 42.325624
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.049029,
+ 42.325474
+ ]
+ }
+ ],
+ "weight": 25.200000000,
+ "duration": 25.200000000,
+ "distance": 27.1
+ },
+ {
+ "geometry": "euiaGbwspL?E?O",
+ "maneuver": {
+ "bearing_after": 94,
+ "bearing_before": 97,
+ "location": [
+ -71.048981,
+ 42.325469
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.048981,
+ 42.325469
+ ]
+ }
+ ],
+ "weight": 10.2,
+ "duration": 10.2,
+ "distance": 9
+ },
+ {
+ "geometry": "euiaGlvspLK?KAMA[AUC[Cc@I_@I_@Ki@OSIQISGUMi@WSKUMUQMIQOSSOMa@a@s@s@UU]c@GKGIGICEEGOWMU{@{AYm@O[GOWm@KYIWIW",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 91,
+ "location": [
+ -71.048872,
+ 42.325465
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "William J. Day Boulevard",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.048872,
+ 42.325465
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.046986,
+ 42.328724
+ ]
+ }
+ ],
+ "weight": 146.2,
+ "duration": 146.2,
+ "distance": 608.8
+ },
+ {
+ "geometry": "upjaGj~rpLCWCK?EEQMi@G]I_@AGG_@",
+ "maneuver": {
+ "bearing_after": 73,
+ "bearing_before": 57,
+ "location": [
+ -71.045023,
+ 42.32987
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "William J. Day Boulevard",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 240
+ ],
+ "location": [
+ -71.045023,
+ 42.32987
+ ]
+ }
+ ],
+ "weight": 46.2,
+ "duration": 46.2,
+ "distance": 90.2
+ },
+ {
+ "geometry": "mrjaG~wrpLG?E?E?E?]@K?",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 70,
+ "location": [
+ -71.043997,
+ 42.330151
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.043997,
+ 42.330151
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.043999,
+ 42.330186
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.044002,
+ 42.330224
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.044003,
+ 42.330247
+ ]
+ }
+ ],
+ "weight": 13.4,
+ "duration": 13.4,
+ "distance": 37.9
+ },
+ {
+ "geometry": "qtjaG`xrpLCmCAmB?EAsBAeC?QAcACeF?Q",
+ "maneuver": {
+ "bearing_after": 87,
+ "bearing_before": 357,
+ "location": [
+ -71.044013,
+ 42.330492
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbia Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.044013,
+ 42.330492
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.042746,
+ 42.330515
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.042137,
+ 42.330525
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.041376,
+ 42.330542
+ ]
+ }
+ ],
+ "weight": 83.2,
+ "duration": 83.2,
+ "distance": 347.2
+ },
+ {
+ "geometry": "aujaGv}qpL?OA_AAkBAw@?w@AeA?UAaBAO?MAkFA{C",
+ "maneuver": {
+ "bearing_after": 87,
+ "bearing_before": 87,
+ "location": [
+ -71.039802,
+ 42.330572
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Marine Road",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.039802,
+ 42.330572
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.037271,
+ 42.330625
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.036024,
+ 42.330636
+ ]
+ }
+ ],
+ "weight": 98.5,
+ "duration": 98.5,
+ "distance": 376.5
+ },
+ {
+ "geometry": "qujaGfaqpLgDBaDDcDBeDDcA@G?I?aAHK?Y?a@@yA@E?S?O@E?uC@aDD",
+ "maneuver": {
+ "bearing_after": 358,
+ "bearing_before": 88,
+ "location": [
+ -71.035236,
+ 42.33065
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "L Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035236,
+ 42.33065
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035261,
+ 42.33149
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035286,
+ 42.332299
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035305,
+ 42.33312
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035338,
+ 42.333951
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 180,
+ 255
+ ],
+ "location": [
+ -71.035353,
+ 42.334375
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.0354,
+ 42.334765
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035423,
+ 42.335645
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035443,
+ 42.336506
+ ]
+ }
+ ],
+ "weight": 203.200000000,
+ "duration": 203.200000000,
+ "distance": 741.5
+ },
+ {
+ "geometry": "g_laGtbqpLyCDI?S?cEDcCBeA@S?yBBO@a@?O?Q@OBA?KBO@ODMDQFMFOFMHOJMHMLKJMLKLKNILKPINwAdCqBnD",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 358,
+ "location": [
+ -71.035465,
+ 42.337322
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Summer Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035465,
+ 42.337322
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.035497,
+ 42.338144
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.03553,
+ 42.339219
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.03555,
+ 42.339882
+ ]
+ }
+ ],
+ "weight": 194,
+ "duration": 194,
+ "distance": 790.5
+ },
+ {
+ "geometry": "agmaGhsqpLKHKJMLMRc@v@CFMR",
+ "maneuver": {
+ "bearing_after": 327,
+ "bearing_before": 310,
+ "location": [
+ -71.038129,
+ 42.34369
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Summer Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 300,
+ 330
+ ],
+ "location": [
+ -71.038129,
+ 42.34369
+ ]
+ }
+ ],
+ "weight": 43,
+ "duration": 43,
+ "distance": 83.1
+ },
+ {
+ "geometry": "kjmaGtwqpLOOQSCEEGCEAGAGCGGc@AI?KAM?MAsAAM?KAOAGEW?k@",
+ "maneuver": {
+ "bearing_after": 37,
+ "bearing_before": 310,
+ "location": [
+ -71.038829,
+ 42.344223
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Drydock Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 240,
+ 315
+ ],
+ "location": [
+ -71.038829,
+ 42.344223
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 270
+ ],
+ "location": [
+ -71.03758,
+ 42.344573
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 255,
+ 270
+ ],
+ "location": [
+ -71.03721,
+ 42.344626
+ ]
+ }
+ ],
+ "weight": 42.9,
+ "duration": 42.9,
+ "distance": 166.2
+ },
+ {
+ "geometry": "}lmaGdlqpLe@c@aCyBEGCGCGEMCGEEkDeDQO",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 87,
+ "location": [
+ -71.036985,
+ 42.344631
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Harbor Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.036985,
+ 42.344631
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.036812,
+ 42.34482
+ ]
+ }
+ ],
+ "weight": 70.1,
+ "duration": 70.1,
+ "distance": 269.9
+ },
+ {
+ "geometry": "aymaG|_qpLIJKJa@^kAfAG?IBGBs@j@",
+ "maneuver": {
+ "bearing_after": 322,
+ "bearing_before": 35,
+ "location": [
+ -71.035028,
+ 42.346565
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Northern Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 135,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.035028,
+ 42.346565
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 150,
+ 240,
+ 300,
+ 330
+ ],
+ "location": [
+ -71.035666,
+ 42.347227
+ ]
+ }
+ ],
+ "weight": 36.8,
+ "duration": 36.8,
+ "distance": 139.6
+ },
+ {
+ "geometry": "s_naGpeqpLEIC@CA",
+ "maneuver": {
+ "bearing_after": 46,
+ "bearing_before": 326,
+ "location": [
+ -71.03593,
+ 42.347616
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 150,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.03593,
+ 42.347616
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 150,
+ 225
+ ],
+ "location": [
+ -71.035884,
+ 42.347647
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 9.7
+ },
+ {
+ "geometry": "a`naGfeqpLGBIBCF",
+ "maneuver": {
+ "bearing_after": 337,
+ "bearing_before": 9,
+ "location": [
+ -71.035875,
+ 42.347685
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Boston HarborWalk",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 195,
+ 345
+ ],
+ "location": [
+ -71.035875,
+ 42.347685
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.0359,
+ 42.347731
+ ]
+ }
+ ],
+ "weight": 13.8,
+ "duration": 13.8,
+ "distance": 15
+ },
+ {
+ "geometry": "w`naGveqpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 296,
+ "location": [
+ -71.035964,
+ 42.347795
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Boston HarborWalk",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 116
+ ],
+ "location": [
+ -71.035964,
+ 42.347795
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "L Street, Summer Street",
+ "weight": 1037.9,
+ "duration": 1037.9,
+ "distance": 3712.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "w`naGveqpLBGHC",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 0,
+ "location": [
+ -71.035964,
+ 42.347795
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Boston HarborWalk",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 116
+ ],
+ "location": [
+ -71.035964,
+ 42.347795
+ ]
+ }
+ ],
+ "weight": 15.9,
+ "duration": 15.9,
+ "distance": 9.5
+ },
+ {
+ "geometry": "i`naGjeqpLBXC@EDEDAF",
+ "maneuver": {
+ "bearing_after": 258,
+ "bearing_before": 142,
+ "location": [
+ -71.0359,
+ 42.347731
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.0359,
+ 42.347731
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.036031,
+ 42.347714
+ ]
+ }
+ ],
+ "weight": 9.8,
+ "duration": 9.8,
+ "distance": 25.1
+ },
+ {
+ "geometry": "w`naGzfqpLMl@a@lBAB]fA",
+ "maneuver": {
+ "bearing_after": 291,
+ "bearing_before": 298,
+ "location": [
+ -71.036143,
+ 42.347804
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Northern Avenue",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 119,
+ 280,
+ 291
+ ],
+ "location": [
+ -71.036143,
+ 42.347804
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 135,
+ 300
+ ],
+ "location": [
+ -71.036916,
+ 42.348036
+ ]
+ }
+ ],
+ "weight": 29.6,
+ "duration": 29.6,
+ "distance": 105
+ },
+ {
+ "geometry": "gcnaGbnqpLSOOMOE{CsBr@cC",
+ "maneuver": {
+ "bearing_after": 30,
+ "bearing_before": 298,
+ "location": [
+ -71.037299,
+ 42.348196
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston Harborwalk",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.037299,
+ 42.348196
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.037218,
+ 42.348295
+ ]
+ }
+ ],
+ "weight": 53,
+ "duration": 53,
+ "distance": 193.1
+ },
+ {
+ "geometry": "chnaGfeqpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 118,
+ "location": [
+ -71.03588,
+ 42.34898
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston Harborwalk",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 298
+ ],
+ "location": [
+ -71.03588,
+ 42.34898
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Northern Avenue, Boston Harborwalk",
+ "weight": 108.3,
+ "duration": 108.3,
+ "distance": 332.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "chnaGfeqpLs@bCzCrBNDNLRN",
+ "maneuver": {
+ "bearing_after": 298,
+ "bearing_before": 0,
+ "location": [
+ -71.03588,
+ 42.34898
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston Harborwalk",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 298
+ ],
+ "location": [
+ -71.03588,
+ 42.34898
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.037218,
+ 42.348295
+ ]
+ }
+ ],
+ "weight": 57,
+ "duration": 57,
+ "distance": 193.1
+ },
+ {
+ "geometry": "gcnaGbnqpLOf@",
+ "maneuver": {
+ "bearing_after": 298,
+ "bearing_before": 210,
+ "location": [
+ -71.037299,
+ 42.348196
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Northern Avenue",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.037299,
+ 42.348196
+ ]
+ }
+ ],
+ "weight": 12.8,
+ "duration": 12.8,
+ "distance": 19
+ },
+ {
+ "geometry": "wcnaGjoqpLVP|@n@RLDF@?DHBJ@J@H?JA`C?T?RANANCXARCNCNCLELM\\EHIT",
+ "maneuver": {
+ "bearing_after": 209,
+ "bearing_before": 298,
+ "location": [
+ -71.0375,
+ 42.348279
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Congress Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.0375,
+ 42.348279
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.037827,
+ 42.347849
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.038865,
+ 42.347645
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.039373,
+ 42.347685
+ ]
+ }
+ ],
+ "weight": 63.1,
+ "duration": 63.1,
+ "distance": 258.5
+ },
+ {
+ "geometry": "sanaGn_rpLMPKRGP",
+ "maneuver": {
+ "bearing_after": 309,
+ "bearing_before": 302,
+ "location": [
+ -71.040076,
+ 42.347939
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Congress Street",
+ "intersections": [
+ {
+ "out": 4,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 285,
+ 315
+ ],
+ "location": [
+ -71.040076,
+ 42.347939
+ ]
+ }
+ ],
+ "weight": 17.8,
+ "duration": 17.8,
+ "distance": 30.4
+ },
+ {
+ "geometry": "ubnaGfarpLPLRLv@h@DDJFNL@@JJJJLLJN`@h@LRV\\HJZ`@`@d@FHDFLN",
+ "maneuver": {
+ "bearing_after": 208,
+ "bearing_before": 309,
+ "location": [
+ -71.040358,
+ 42.348114
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "D Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.040358,
+ 42.348114
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.040426,
+ 42.348024
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.041437,
+ 42.34697
+ ]
+ }
+ ],
+ "weight": 84.399999999,
+ "duration": 84.399999999,
+ "distance": 248
+ },
+ {
+ "geometry": "uwmaGrlrpLKTsA`Dk@pACDCFQ`@MZCBMZaAzBw@fBCFIRGPINK\\KXeDhJ",
+ "maneuver": {
+ "bearing_after": 305,
+ "bearing_before": 219,
+ "location": [
+ -71.042175,
+ 42.346349
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Summer Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.042175,
+ 42.346349
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.043745,
+ 42.347177
+ ]
+ }
+ ],
+ "weight": 129.7,
+ "duration": 129.7,
+ "distance": 539
+ },
+ {
+ "geometry": "shnaGlnspLUP]|@e@xAOb@Sh@Sh@Yx@KX[|@a@jAu@vB[x@EJ@V",
+ "maneuver": {
+ "bearing_after": 329,
+ "bearing_before": 300,
+ "location": [
+ -71.047591,
+ 42.349063
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 300,
+ 330
+ ],
+ "location": [
+ -71.047591,
+ 42.349063
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.04799,
+ 42.349316
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.049327,
+ 42.349924
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.050747,
+ 42.350563
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.051036,
+ 42.350696
+ ]
+ }
+ ],
+ "weight": 86.000000000,
+ "duration": 86.000000000,
+ "distance": 354.7
+ },
+ {
+ "geometry": "_snaGbetpLk@|Ag@rAq@lBADCFCFGLMXo@`BGNIP}@`C}@|BENELEHAHCFI`@ET]bBCNCRER",
+ "maneuver": {
+ "bearing_after": 302,
+ "bearing_before": 262,
+ "location": [
+ -71.051222,
+ 42.350715
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Summer Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 120,
+ 300
+ ],
+ "location": [
+ -71.051222,
+ 42.350715
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.052842,
+ 42.351482
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.055374,
+ 42.352668
+ ]
+ }
+ ],
+ "weight": 176.2,
+ "duration": 176.2,
+ "distance": 483.3
+ },
+ {
+ "geometry": "w`oaGrdupLDLDH@@BNDNDRTrA@JZbBBP@DHZHTFRNb@HLDFJPJPLRPRRTVXTVZNPJRFJBNDNF",
+ "maneuver": {
+ "bearing_after": 236,
+ "bearing_before": 289,
+ "location": [
+ -71.056257,
+ 42.352917
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "John F. Fitzgerald Surface Road",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 135,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.056257,
+ 42.352917
+ ]
+ },
+ {
+ "out": 4,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 120,
+ 195,
+ 240,
+ 270
+ ],
+ "location": [
+ -71.057995,
+ 42.352378
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 225,
+ 330
+ ],
+ "location": [
+ -71.05828,
+ 42.352258
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.059357,
+ 42.351101
+ ]
+ }
+ ],
+ "weight": 90.3,
+ "duration": 90.3,
+ "distance": 351.6
+ },
+ {
+ "geometry": "{tnaGfxupLCR",
+ "maneuver": {
+ "bearing_after": 285,
+ "bearing_before": 199,
+ "location": [
+ -71.059399,
+ 42.35102
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.059399,
+ 42.35102
+ ]
+ }
+ ],
+ "weight": 13.4,
+ "duration": 13.4,
+ "distance": 8.2
+ },
+ {
+ "geometry": "_unaGzxupLDFLD",
+ "maneuver": {
+ "bearing_after": 209,
+ "bearing_before": 285,
+ "location": [
+ -71.059495,
+ 42.351041
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210
+ ],
+ "location": [
+ -71.059495,
+ 42.351041
+ ]
+ }
+ ],
+ "weight": 11.7,
+ "duration": 11.7,
+ "distance": 12.8
+ },
+ {
+ "geometry": "ktnaGhyupL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 199,
+ "location": [
+ -71.059567,
+ 42.350941
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 19
+ ],
+ "location": [
+ -71.059567,
+ 42.350941
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Summer Street, John F. Fitzgerald Surface Road",
+ "weight": 742.4,
+ "duration": 742.4,
+ "distance": 2498.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "ktnaGhyupLMEEGQG",
+ "maneuver": {
+ "bearing_after": 19,
+ "bearing_before": 0,
+ "location": [
+ -71.059567,
+ 42.350941
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 19
+ ],
+ "location": [
+ -71.059567,
+ 42.350941
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210
+ ],
+ "location": [
+ -71.059495,
+ 42.351041
+ ]
+ }
+ ],
+ "weight": 28.900000000,
+ "duration": 28.900000000,
+ "distance": 22.6
+ },
+ {
+ "geometry": "qunaGrxupLGh@CL?DAFCLQrA",
+ "maneuver": {
+ "bearing_after": 286,
+ "bearing_before": 15,
+ "location": [
+ -71.059461,
+ 42.351125
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beach Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.059461,
+ 42.351125
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 285
+ ],
+ "location": [
+ -71.059665,
+ 42.351171
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.059811,
+ 42.351201
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.05988,
+ 42.351216
+ ]
+ }
+ ],
+ "weight": 23.4,
+ "duration": 23.4,
+ "distance": 71.6
+ },
+ {
+ "geometry": "uvnaGz}upLMBy@N_Dp@G@I@",
+ "maneuver": {
+ "bearing_after": 345,
+ "bearing_before": 285,
+ "location": [
+ -71.060295,
+ 42.351308
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Oxford Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 105,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.060295,
+ 42.351308
+ ]
+ }
+ ],
+ "weight": 42.5,
+ "duration": 42.5,
+ "distance": 142.9
+ },
+ {
+ "geometry": "o~naGd`vpLDnA@L",
+ "maneuver": {
+ "bearing_after": 262,
+ "bearing_before": 351,
+ "location": [
+ -71.060668,
+ 42.352564
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Essex Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.060668,
+ 42.352564
+ ]
+ }
+ ],
+ "weight": 42,
+ "duration": 42,
+ "distance": 39.5
+ },
+ {
+ "geometry": "g~naGbcvpLOEYGOIk@e@OOGI",
+ "maneuver": {
+ "bearing_after": 16,
+ "bearing_before": 264,
+ "location": [
+ -71.061144,
+ 42.352524
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Chauncy Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.061144,
+ 42.352524
+ ]
+ }
+ ],
+ "weight": 31.1,
+ "duration": 31.1,
+ "distance": 79.8
+ },
+ {
+ "geometry": "eboaGj`vpLEJo@~AIP",
+ "maneuver": {
+ "bearing_after": 300,
+ "bearing_before": 37,
+ "location": [
+ -71.0607,
+ 42.353153
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Avenue De Lafayette",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.0607,
+ 42.353153
+ ]
+ }
+ ],
+ "weight": 19.4,
+ "duration": 19.4,
+ "distance": 63.1
+ },
+ {
+ "geometry": "edoaGhdvpLKI",
+ "maneuver": {
+ "bearing_after": 35,
+ "bearing_before": 303,
+ "location": [
+ -71.061334,
+ 42.353471
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.061334,
+ 42.353471
+ ]
+ }
+ ],
+ "weight": 10.6,
+ "duration": 10.6,
+ "distance": 7.5
+ },
+ {
+ "geometry": "qdoaG~cvpLe@nA",
+ "maneuver": {
+ "bearing_after": 302,
+ "bearing_before": 35,
+ "location": [
+ -71.061281,
+ 42.353526
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.061281,
+ 42.353526
+ ]
+ }
+ ],
+ "weight": 34.9,
+ "duration": 34.9,
+ "distance": 38.8
+ },
+ {
+ "geometry": "weoaGnfvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 303,
+ "location": [
+ -71.061676,
+ 42.353717
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 123
+ ],
+ "location": [
+ -71.061676,
+ 42.353717
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Oxford Street, Essex Street",
+ "weight": 232.8,
+ "duration": 232.8,
+ "distance": 465.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "weoaGnfvpL[z@EH",
+ "maneuver": {
+ "bearing_after": 303,
+ "bearing_before": 0,
+ "location": [
+ -71.061676,
+ 42.353717
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 303
+ ],
+ "location": [
+ -71.061676,
+ 42.353717
+ ]
+ }
+ ],
+ "weight": 34,
+ "duration": 34,
+ "distance": 34.9
+ },
+ {
+ "geometry": "yfoaGthvpLGBMM",
+ "maneuver": {
+ "bearing_after": 11,
+ "bearing_before": 302,
+ "location": [
+ -71.062032,
+ 42.353888
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.062032,
+ 42.353888
+ ]
+ }
+ ],
+ "weight": 21.1,
+ "duration": 21.1,
+ "distance": 14.1
+ },
+ {
+ "geometry": "ogoaGjhvpLCJ",
+ "maneuver": {
+ "bearing_after": 302,
+ "bearing_before": 32,
+ "location": [
+ -71.061982,
+ 42.353997
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.061982,
+ 42.353997
+ ]
+ }
+ ],
+ "weight": 9.5,
+ "duration": 9.5,
+ "distance": 5.5
+ },
+ {
+ "geometry": "sgoaGvhvpLIIw@s@yAcB",
+ "maneuver": {
+ "bearing_after": 35,
+ "bearing_before": 302,
+ "location": [
+ -71.062038,
+ 42.354024
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.062038,
+ 42.354024
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.061732,
+ 42.354348
+ ]
+ }
+ ],
+ "weight": 35.4,
+ "duration": 35.4,
+ "distance": 109
+ },
+ {
+ "geometry": "oloaGtcvpL}CrHMV",
+ "maneuver": {
+ "bearing_after": 303,
+ "bearing_before": 37,
+ "location": [
+ -71.061232,
+ 42.354801
+ ],
+ "modifier": "left",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Temple Place",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.061232,
+ 42.354801
+ ]
+ }
+ ],
+ "weight": 50.8,
+ "duration": 50.8,
+ "distance": 166.5
+ },
+ {
+ "geometry": "{qoaG`nvpLZ\\",
+ "maneuver": {
+ "bearing_after": 213,
+ "bearing_before": 307,
+ "location": [
+ -71.062887,
+ 42.355662
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 210
+ ],
+ "location": [
+ -71.062887,
+ 42.355662
+ ]
+ }
+ ],
+ "weight": 4.8,
+ "duration": 4.8,
+ "distance": 20.1
+ },
+ {
+ "geometry": "_qoaG~nvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 218,
+ "location": [
+ -71.063037,
+ 42.355519
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 38
+ ],
+ "location": [
+ -71.063037,
+ 42.355519
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Washington Street, Temple Place",
+ "weight": 155.6,
+ "duration": 155.6,
+ "distance": 350.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "}poaG~nvpLb@`@LJDBJHTN`@P",
+ "maneuver": {
+ "bearing_after": 214,
+ "bearing_before": 0,
+ "location": [
+ -71.063037,
+ 42.355519
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 214
+ ],
+ "location": [
+ -71.063037,
+ 42.355519
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.063339,
+ 42.355174
+ ]
+ }
+ ],
+ "weight": 21.3,
+ "duration": 21.3,
+ "distance": 80
+ },
+ {
+ "geometry": "amoaG|qvpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 203,
+ "location": [
+ -71.063514,
+ 42.354894
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 23
+ ],
+ "location": [
+ -71.063514,
+ 42.354894
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Tremont Street",
+ "weight": 21.3,
+ "duration": 21.3,
+ "distance": 80
+ },
+ {
+ "steps": [
+ {
+ "geometry": "amoaG|qvpLVL@@rAh@LF\\LZNp@TPFD@\\JLD`AX@?j@J^F`@HD@RD",
+ "maneuver": {
+ "bearing_after": 203,
+ "bearing_before": 0,
+ "location": [
+ -71.063514,
+ 42.354894
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Tremont Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 203
+ ],
+ "location": [
+ -71.063514,
+ 42.354894
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195
+ ],
+ "location": [
+ -71.064238,
+ 42.353385
+ ]
+ }
+ ],
+ "weight": 80.9,
+ "duration": 80.9,
+ "distance": 293.6
+ },
+ {
+ "geometry": "i}naGnxvpLKTKbDMjFA^A\\?TAHAF?BADCF",
+ "maneuver": {
+ "bearing_after": 303,
+ "bearing_before": 191,
+ "location": [
+ -71.064556,
+ 42.352372
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 4,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.064556,
+ 42.352372
+ ]
+ }
+ ],
+ "weight": 58.7,
+ "duration": 58.7,
+ "distance": 227.1
+ },
+ {
+ "geometry": "}~naGliwpLFH",
+ "maneuver": {
+ "bearing_after": 226,
+ "bearing_before": 291,
+ "location": [
+ -71.06727,
+ 42.352625
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 105,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.06727,
+ 42.352625
+ ]
+ }
+ ],
+ "weight": 6.5,
+ "duration": 6.5,
+ "distance": 5.3
+ },
+ {
+ "geometry": "u~naGviwpLJ@",
+ "maneuver": {
+ "bearing_after": 185,
+ "bearing_before": 226,
+ "location": [
+ -71.067317,
+ 42.352593
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.067317,
+ 42.352593
+ ]
+ }
+ ],
+ "weight": 15.9,
+ "duration": 15.9,
+ "distance": 7.4
+ },
+ {
+ "geometry": "i~naGxiwpL@mA",
+ "maneuver": {
+ "bearing_after": 90,
+ "bearing_before": 185,
+ "location": [
+ -71.067326,
+ 42.352527
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boylston Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.067326,
+ 42.352527
+ ]
+ }
+ ],
+ "weight": 11.7,
+ "duration": 11.7,
+ "distance": 31.7
+ },
+ {
+ "geometry": "g~naGjgwpLL?",
+ "maneuver": {
+ "bearing_after": 178,
+ "bearing_before": 90,
+ "location": [
+ -71.066941,
+ 42.352524
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Carver Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.066941,
+ 42.352524
+ ]
+ }
+ ],
+ "weight": 9.7,
+ "duration": 9.7,
+ "distance": 8.4
+ },
+ {
+ "geometry": "y}naGjgwpL?S",
+ "maneuver": {
+ "bearing_after": 92,
+ "bearing_before": 178,
+ "location": [
+ -71.06694,
+ 42.352448
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.06694,
+ 42.352448
+ ]
+ }
+ ],
+ "weight": 7.5,
+ "duration": 7.5,
+ "distance": 8.3
+ },
+ {
+ "geometry": "y}naGvfwpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 92,
+ "location": [
+ -71.066839,
+ 42.352445
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 272
+ ],
+ "location": [
+ -71.066839,
+ 42.352445
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Tremont Street, Boylston Street",
+ "weight": 190.9,
+ "duration": 190.9,
+ "distance": 581.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "y}naGvfwpL?R?d@?f@@X?L",
+ "maneuver": {
+ "bearing_after": 272,
+ "bearing_before": 0,
+ "location": [
+ -71.066839,
+ 42.352445
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 272
+ ],
+ "location": [
+ -71.066839,
+ 42.352445
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.06694,
+ 42.352448
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 210,
+ 270
+ ],
+ "location": [
+ -71.067129,
+ 42.352449
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.067332,
+ 42.352454
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.067458,
+ 42.352442
+ ]
+ }
+ ],
+ "weight": 61.4,
+ "duration": 61.4,
+ "distance": 57.4
+ },
+ {
+ "geometry": "w}naG`kwpLNCH?D@D?hA_@H?",
+ "maneuver": {
+ "bearing_after": 165,
+ "bearing_before": 262,
+ "location": [
+ -71.067534,
+ 42.352436
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.067534,
+ 42.352436
+ ]
+ }
+ ],
+ "weight": 21.8,
+ "duration": 21.8,
+ "distance": 70.3
+ },
+ {
+ "geometry": "}ynaG~iwpL?D@FBn@@R@RFp@@LHj@",
+ "maneuver": {
+ "bearing_after": 270,
+ "bearing_before": 172,
+ "location": [
+ -71.067359,
+ 42.351825
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Park Plaza",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 270
+ ],
+ "location": [
+ -71.067359,
+ 42.351825
+ ]
+ }
+ ],
+ "weight": 29.7,
+ "duration": 29.7,
+ "distance": 88.3
+ },
+ {
+ "geometry": "_ynaGppwpLLCFC@?ZG",
+ "maneuver": {
+ "bearing_after": 165,
+ "bearing_before": 255,
+ "location": [
+ -71.068411,
+ 42.351682
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbus Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.068411,
+ 42.351682
+ ]
+ }
+ ],
+ "weight": 8.8,
+ "duration": 8.8,
+ "distance": 29.8
+ },
+ {
+ "geometry": "kwnaG`pwpLxAtBb@j@x@dAh@t@BDVZd@p@FHbC`DvAjBLPPVLP",
+ "maneuver": {
+ "bearing_after": 223,
+ "bearing_before": 165,
+ "location": [
+ -71.068325,
+ 42.351421
+ ],
+ "modifier": "right",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Columbus Avenue",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.068325,
+ 42.351421
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 105,
+ 225
+ ],
+ "location": [
+ -71.068917,
+ 42.350967
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 225
+ ],
+ "location": [
+ -71.069492,
+ 42.350504
+ ]
+ },
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 75,
+ 165,
+ 225,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069926,
+ 42.350148
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.071581,
+ 42.348824
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071792,
+ 42.348659
+ ]
+ }
+ ],
+ "weight": 133.9,
+ "duration": 133.9,
+ "distance": 430
+ },
+ {
+ "geometry": "uenaGffxpLSFm@V",
+ "maneuver": {
+ "bearing_after": 341,
+ "bearing_before": 220,
+ "location": [
+ -71.071879,
+ 42.348587
+ ],
+ "modifier": "sharp right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071879,
+ 42.348587
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071923,
+ 42.348691
+ ]
+ }
+ ],
+ "weight": 34.8,
+ "duration": 34.8,
+ "distance": 38.7
+ },
+ {
+ "geometry": "wgnaGfgxpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 339,
+ "location": [
+ -71.072038,
+ 42.348915
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 159
+ ],
+ "location": [
+ -71.072038,
+ 42.348915
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Columbus Avenue, Columbus Avenue",
+ "weight": 290.4,
+ "duration": 290.4,
+ "distance": 714.6
+ },
+ {
+ "steps": [
+ {
+ "geometry": "wgnaGfgxpLl@WRG",
+ "maneuver": {
+ "bearing_after": 159,
+ "bearing_before": 0,
+ "location": [
+ -71.072038,
+ 42.348915
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 159
+ ],
+ "location": [
+ -71.072038,
+ 42.348915
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071923,
+ 42.348691
+ ]
+ }
+ ],
+ "weight": 49.9,
+ "duration": 49.9,
+ "distance": 38.7
+ },
+ {
+ "geometry": "uenaGffxpLMQQWMQ",
+ "maneuver": {
+ "bearing_after": 40,
+ "bearing_before": 161,
+ "location": [
+ -71.071879,
+ 42.348587
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "ref": "MA 28",
+ "driving_side": "right",
+ "name": "Columbus Avenue",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071879,
+ 42.348587
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.071792,
+ 42.348659
+ ]
+ }
+ ],
+ "weight": 17.299999999,
+ "duration": 17.299999999,
+ "distance": 36
+ },
+ {
+ "geometry": "cgnaGjdxpLJQ@I@I?E?w@?g@",
+ "maneuver": {
+ "bearing_after": 135,
+ "bearing_before": 42,
+ "location": [
+ -71.071581,
+ 42.348824
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Isabella Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.071581,
+ 42.348824
+ ]
+ }
+ ],
+ "weight": 19.3,
+ "duration": 19.3,
+ "distance": 61.4
+ },
+ {
+ "geometry": "sfnaG~_xpLGCe@q@g@o@mA_BCMCU",
+ "maneuver": {
+ "bearing_after": 33,
+ "bearing_before": 90,
+ "location": [
+ -71.070877,
+ 42.348744
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 90,
+ 270
+ ],
+ "location": [
+ -71.070877,
+ 42.348744
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 225,
+ 315
+ ],
+ "location": [
+ -71.070614,
+ 42.348973
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.069816,
+ 42.349581
+ ]
+ }
+ ],
+ "weight": 41.3,
+ "duration": 41.3,
+ "distance": 137.3
+ },
+ {
+ "geometry": "_lnaGtxwpLKB",
+ "maneuver": {
+ "bearing_after": 344,
+ "bearing_before": 74,
+ "location": [
+ -71.069713,
+ 42.349602
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Arlington Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.069713,
+ 42.349602
+ ]
+ }
+ ],
+ "weight": 9.9,
+ "duration": 9.9,
+ "distance": 6.1
+ },
+ {
+ "geometry": "klnaGxxwpLCWC[a@eEUoBAM",
+ "maneuver": {
+ "bearing_after": 75,
+ "bearing_before": 344,
+ "location": [
+ -71.069732,
+ 42.349655
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Piedmont Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 345
+ ],
+ "location": [
+ -71.069732,
+ 42.349655
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.068478,
+ 42.349874
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.067924,
+ 42.34998
+ ]
+ }
+ ],
+ "weight": 38.199999999,
+ "duration": 38.199999999,
+ "distance": 159.3
+ },
+ {
+ "geometry": "mnnaG`mwpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 76,
+ "location": [
+ -71.067854,
+ 42.349993
+ ],
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Piedmont Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 256
+ ],
+ "location": [
+ -71.067854,
+ 42.349993
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Isabella Street, Piedmont Street",
+ "weight": 175.9,
+ "duration": 175.9,
+ "distance": 438.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "mnnaG`mwpLQyA?C@C?CBCNKBCNMTSTW",
+ "maneuver": {
+ "bearing_after": 76,
+ "bearing_before": 0,
+ "location": [
+ -71.067854,
+ 42.349993
+ ],
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Piedmont Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 76
+ ],
+ "location": [
+ -71.067854,
+ 42.349993
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 255
+ ],
+ "location": [
+ -71.067397,
+ 42.350078
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.067172,
+ 42.349871
+ ]
+ }
+ ],
+ "weight": 29.6,
+ "duration": 29.6,
+ "distance": 100.7
+ },
+ {
+ "geometry": "ilnaGlgwpLCUG]DY",
+ "maneuver": {
+ "bearing_after": 71,
+ "bearing_before": 143,
+ "location": [
+ -71.066948,
+ 42.349646
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Melrose Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 330
+ ],
+ "location": [
+ -71.066948,
+ 42.349646
+ ]
+ }
+ ],
+ "weight": 21.8,
+ "duration": 21.8,
+ "distance": 33.8
+ },
+ {
+ "geometry": "olnaG~dwpLI@{C`@i@FKBOBC@KB_@J{@X[Lk@POBaA\\_@JOBE@ODMB[HKBC?E@SBgAh@aBt@",
+ "maneuver": {
+ "bearing_after": 350,
+ "bearing_before": 105,
+ "location": [
+ -71.066557,
+ 42.349682
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Charles Street South",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 285,
+ 345
+ ],
+ "location": [
+ -71.066557,
+ 42.349682
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.066852,
+ 42.350936
+ ]
+ },
+ {
+ "out": 5,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 120,
+ 165,
+ 210,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.066914,
+ 42.351102
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 300,
+ 345
+ ],
+ "location": [
+ -71.067198,
+ 42.351761
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 90,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.067487,
+ 42.352519
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 210,
+ 345
+ ],
+ "location": [
+ -71.067575,
+ 42.352787
+ ]
+ }
+ ],
+ "weight": 133.1,
+ "duration": 133.1,
+ "distance": 475.3
+ },
+ {
+ "geometry": "efoaGpnwpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 338,
+ "location": [
+ -71.068086,
+ 42.353792
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "ref": "MA 2; MA 28",
+ "driving_side": "right",
+ "name": "Charles Street",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 158
+ ],
+ "location": [
+ -71.068086,
+ 42.353792
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Charles Street South, Charles Street South",
+ "weight": 184.5,
+ "duration": 184.5,
+ "distance": 609.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "efoaGpnwpLg@TuAl@QJqB|@cAb@c@POBKDEBOD]NKBE?GAGCECAAIO",
+ "maneuver": {
+ "bearing_after": 338,
+ "bearing_before": 0,
+ "location": [
+ -71.068086,
+ 42.353792
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "ref": "MA 2; MA 28",
+ "driving_side": "right",
+ "name": "Charles Street",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 338
+ ],
+ "location": [
+ -71.068086,
+ 42.353792
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 165,
+ 315,
+ 345
+ ],
+ "location": [
+ -71.069072,
+ 42.355598
+ ]
+ }
+ ],
+ "weight": 90.5,
+ "duration": 90.5,
+ "distance": 296
+ },
+ {
+ "geometry": "suoaG`uwpLCSg@aEQcAAGAKAI",
+ "maneuver": {
+ "bearing_after": 73,
+ "bearing_before": 46,
+ "location": [
+ -71.069133,
+ 42.356255
+ ],
+ "modifier": "straight",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.069133,
+ 42.356255
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.067615,
+ 42.356593
+ ]
+ }
+ ],
+ "weight": 36.6,
+ "duration": 36.6,
+ "distance": 134.4
+ },
+ {
+ "geometry": "wwoaGhkwpLLE",
+ "maneuver": {
+ "bearing_after": 163,
+ "bearing_before": 73,
+ "location": [
+ -71.06757,
+ 42.356603
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.06757,
+ 42.356603
+ ]
+ }
+ ],
+ "weight": 16.4,
+ "duration": 16.4,
+ "distance": 8.5
+ },
+ {
+ "geometry": "iwoaGbkwpLk@}D",
+ "maneuver": {
+ "bearing_after": 71,
+ "bearing_before": 163,
+ "location": [
+ -71.067542,
+ 42.356529
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.067542,
+ 42.356529
+ ]
+ }
+ ],
+ "weight": 78.3,
+ "duration": 78.3,
+ "distance": 82
+ },
+ {
+ "geometry": "uxoaGdewpLLC",
+ "maneuver": {
+ "bearing_after": 164,
+ "bearing_before": 71,
+ "location": [
+ -71.066592,
+ 42.356749
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.066592,
+ 42.356749
+ ]
+ }
+ ],
+ "weight": 1.8,
+ "duration": 1.8,
+ "distance": 7.7
+ },
+ {
+ "geometry": "gxoaG`ewpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 165,
+ "location": [
+ -71.066568,
+ 42.356682
+ ],
+ "modifier": "straight",
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 345
+ ],
+ "location": [
+ -71.066568,
+ 42.356682
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Charles Street, Charles Street",
+ "weight": 223.6,
+ "duration": 223.6,
+ "distance": 528.7
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gxoaG`ewpLMB",
+ "maneuver": {
+ "bearing_after": 345,
+ "bearing_before": 0,
+ "location": [
+ -71.066568,
+ 42.356682
+ ],
+ "modifier": "straight",
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 345
+ ],
+ "location": [
+ -71.066568,
+ 42.356682
+ ]
+ }
+ ],
+ "weight": 5.9,
+ "duration": 5.9,
+ "distance": 7.7
+ },
+ {
+ "geometry": "uxoaGdewpLa@{Ca@sC",
+ "maneuver": {
+ "bearing_after": 73,
+ "bearing_before": 344,
+ "location": [
+ -71.066592,
+ 42.356749
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.066592,
+ 42.356749
+ ]
+ }
+ ],
+ "weight": 121.3,
+ "duration": 121.3,
+ "distance": 131.1
+ },
+ {
+ "geometry": "yzoaGt{vpLACOC",
+ "maneuver": {
+ "bearing_after": 15,
+ "bearing_before": 73,
+ "location": [
+ -71.065066,
+ 42.357086
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 75,
+ 150,
+ 255,
+ 330
+ ],
+ "location": [
+ -71.065066,
+ 42.357086
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 10.6
+ },
+ {
+ "geometry": "k{oaGl{vpL?EKm@Ga@Ia@Mg@Mo@Os@ScACKIWK]Y}@",
+ "maneuver": {
+ "bearing_after": 70,
+ "bearing_before": 12,
+ "location": [
+ -71.065032,
+ 42.357176
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 195,
+ 255
+ ],
+ "location": [
+ -71.065032,
+ 42.357176
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.063212,
+ 42.357715
+ ]
+ }
+ ],
+ "weight": 49.1,
+ "duration": 49.1,
+ "distance": 205.2
+ },
+ {
+ "geometry": "}_paGdmvpLIa@",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 60,
+ "location": [
+ -71.062749,
+ 42.357905
+ ],
+ "modifier": "straight",
+ "type": "continue"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 60,
+ 240
+ ],
+ "location": [
+ -71.062749,
+ 42.357905
+ ]
+ }
+ ],
+ "weight": 8.3,
+ "duration": 8.3,
+ "distance": 15.3
+ },
+ {
+ "geometry": "g`paGblvpLFC",
+ "maneuver": {
+ "bearing_after": 158,
+ "bearing_before": 64,
+ "location": [
+ -71.06258,
+ 42.357962
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.06258,
+ 42.357962
+ ]
+ }
+ ],
+ "weight": 13.8,
+ "duration": 13.8,
+ "distance": 5.1
+ },
+ {
+ "geometry": "_`paG~kvpL[mA",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 158,
+ "location": [
+ -71.062558,
+ 42.357919
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.062558,
+ 42.357919
+ ]
+ }
+ ],
+ "weight": 31.7,
+ "duration": 31.7,
+ "distance": 35.3
+ },
+ {
+ "geometry": "{`paGpivpL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 64,
+ "location": [
+ -71.062171,
+ 42.358056
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 244
+ ],
+ "location": [
+ -71.062171,
+ 42.358056
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Beacon Street",
+ "weight": 241.3,
+ "duration": 241.3,
+ "distance": 410.3
+ },
+ {
+ "steps": [
+ {
+ "geometry": "{`paGpivpLZlA",
+ "maneuver": {
+ "bearing_after": 244,
+ "bearing_before": 0,
+ "location": [
+ -71.062171,
+ 42.358056
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 244
+ ],
+ "location": [
+ -71.062171,
+ 42.358056
+ ]
+ }
+ ],
+ "weight": 36.3,
+ "duration": 36.3,
+ "distance": 35.3
+ },
+ {
+ "geometry": "_`paG~kvpLGB",
+ "maneuver": {
+ "bearing_after": 338,
+ "bearing_before": 244,
+ "location": [
+ -71.062558,
+ 42.357919
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.062558,
+ 42.357919
+ ]
+ }
+ ],
+ "weight": 8.5,
+ "duration": 8.5,
+ "distance": 5.1
+ },
+ {
+ "geometry": "g`paGblvpLe@mBS{@CO?MAO@MH_@b@gC@CDW",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 338,
+ "location": [
+ -71.06258,
+ 42.357962
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Beacon Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.06258,
+ 42.357962
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 270
+ ],
+ "location": [
+ -71.061496,
+ 42.358275
+ ]
+ }
+ ],
+ "weight": 64.5,
+ "duration": 64.5,
+ "distance": 188.4
+ },
+ {
+ "geometry": "o`paGx~upLDO`@_CRiA@IZcB",
+ "maneuver": {
+ "bearing_after": 109,
+ "bearing_before": 109,
+ "location": [
+ -71.060447,
+ 42.357995
+ ],
+ "modifier": "straight",
+ "type": "new name"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "School Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.060447,
+ 42.357995
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.05936,
+ 42.357697
+ ]
+ }
+ ],
+ "weight": 38.7,
+ "duration": 38.7,
+ "distance": 144
+ },
+ {
+ "geometry": "u}oaGptupLHB",
+ "maneuver": {
+ "bearing_after": 201,
+ "bearing_before": 109,
+ "location": [
+ -71.058807,
+ 42.357547
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.058807,
+ 42.357547
+ ]
+ }
+ ],
+ "weight": 13,
+ "duration": 13,
+ "distance": 5.2
+ },
+ {
+ "geometry": "k}oaGttupLBSH_@",
+ "maneuver": {
+ "bearing_after": 111,
+ "bearing_before": 201,
+ "location": [
+ -71.05883,
+ 42.357503
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 165,
+ 285
+ ],
+ "location": [
+ -71.05883,
+ 42.357503
+ ]
+ }
+ ],
+ "weight": 21,
+ "duration": 21,
+ "distance": 23.4
+ },
+ {
+ "geometry": "}|oaG`supL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 111,
+ "location": [
+ -71.058565,
+ 42.357428
+ ],
+ "modifier": "right",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 291
+ ],
+ "location": [
+ -71.058565,
+ 42.357428
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Beacon Street, School Street",
+ "weight": 182,
+ "duration": 182,
+ "distance": 401.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "}|oaG`supLDUBO",
+ "maneuver": {
+ "bearing_after": 110,
+ "bearing_before": 0,
+ "location": [
+ -71.058565,
+ 42.357428
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 110
+ ],
+ "location": [
+ -71.058565,
+ 42.357428
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.05846,
+ 42.357399
+ ]
+ }
+ ],
+ "weight": 20,
+ "duration": 20,
+ "distance": 16.5
+ },
+ {
+ "geometry": "s|oaGzqupLGGo@q@c@Ym@OOC]C_A?YAO?",
+ "maneuver": {
+ "bearing_after": 35,
+ "bearing_before": 106,
+ "location": [
+ -71.058376,
+ 42.35738
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Washington Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.058376,
+ 42.35738
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 285
+ ],
+ "location": [
+ -71.058337,
+ 42.35742
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 105,
+ 210
+ ],
+ "location": [
+ -71.058094,
+ 42.357663
+ ]
+ }
+ ],
+ "weight": 49.5,
+ "duration": 49.5,
+ "distance": 173.1
+ },
+ {
+ "geometry": "uepaGlnupLCN[fCAFS~@I^CLQp@CF",
+ "maneuver": {
+ "bearing_after": 285,
+ "bearing_before": 1,
+ "location": [
+ -71.05783,
+ 42.358833
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Court Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.05783,
+ 42.358833
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 300
+ ],
+ "location": [
+ -71.059425,
+ 42.359257
+ ]
+ }
+ ],
+ "weight": 41.6,
+ "duration": 41.6,
+ "distance": 144.3
+ },
+ {
+ "geometry": "ohpaGtxupLKK",
+ "maneuver": {
+ "bearing_after": 35,
+ "bearing_before": 296,
+ "location": [
+ -71.059472,
+ 42.359275
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 30,
+ 120,
+ 210,
+ 270,
+ 300
+ ],
+ "location": [
+ -71.059472,
+ 42.359275
+ ]
+ }
+ ],
+ "weight": 10.5,
+ "duration": 10.5,
+ "distance": 8.4
+ },
+ {
+ "geometry": "{hpaGhxupLF]",
+ "maneuver": {
+ "bearing_after": 109,
+ "bearing_before": 35,
+ "location": [
+ -71.059413,
+ 42.359337
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 60,
+ 105,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.059413,
+ 42.359337
+ ]
+ }
+ ],
+ "weight": 12.4,
+ "duration": 12.4,
+ "distance": 13.8
+ },
+ {
+ "geometry": "shpaGjwupL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 110,
+ "location": [
+ -71.059255,
+ 42.359295
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 290
+ ],
+ "location": [
+ -71.059255,
+ 42.359295
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Washington Street, Court Street",
+ "weight": 134,
+ "duration": 134,
+ "distance": 356.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "shpaGjwupL\\qARo@@E\\qC",
+ "maneuver": {
+ "bearing_after": 117,
+ "bearing_before": 0,
+ "location": [
+ -71.059255,
+ 42.359295
+ ],
+ "modifier": "left",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 117
+ ],
+ "location": [
+ -71.059255,
+ 42.359295
+ ]
+ },
+ {
+ "out": 1,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.058612,
+ 42.35905
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.058582,
+ 42.359043
+ ]
+ }
+ ],
+ "weight": 113,
+ "duration": 113,
+ "distance": 125.3
+ },
+ {
+ "geometry": "afpaGpnupL@?AO?C",
+ "maneuver": {
+ "bearing_after": 88,
+ "bearing_before": 105,
+ "location": [
+ -71.057845,
+ 42.358886
+ ],
+ "modifier": "slight right",
+ "type": "fork"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 75,
+ 90,
+ 285
+ ],
+ "location": [
+ -71.057845,
+ 42.358886
+ ]
+ }
+ ],
+ "weight": 11.9,
+ "duration": 11.9,
+ "distance": 8.5
+ },
+ {
+ "geometry": "afpaG|mupLJAH?FBRB",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 88,
+ "location": [
+ -71.057746,
+ 42.358887
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.057746,
+ 42.358887
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.057744,
+ 42.358829
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195
+ ],
+ "location": [
+ -71.057743,
+ 42.358782
+ ]
+ },
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.057762,
+ 42.358744
+ ]
+ }
+ ],
+ "weight": 35,
+ "duration": 35,
+ "distance": 28.1
+ },
+ {
+ "geometry": "odpaGbnupL?{ACG",
+ "maneuver": {
+ "bearing_after": 90,
+ "bearing_before": 184,
+ "location": [
+ -71.057775,
+ 42.358637
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Freedom Trail",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 180
+ ],
+ "location": [
+ -71.057775,
+ 42.358637
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.057316,
+ 42.358636
+ ]
+ }
+ ],
+ "weight": 41.8,
+ "duration": 41.8,
+ "distance": 41.7
+ },
+ {
+ "geometry": "sdpaG~jupLC?",
+ "maneuver": {
+ "bearing_after": 357,
+ "bearing_before": 46,
+ "location": [
+ -71.057282,
+ 42.35866
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.057282,
+ 42.35866
+ ]
+ }
+ ],
+ "weight": 2.4,
+ "duration": 2.4,
+ "distance": 2.7
+ },
+ {
+ "geometry": "wdpaG~jupLE@CB?FH??QIG",
+ "maneuver": {
+ "bearing_after": 355,
+ "bearing_before": 357,
+ "location": [
+ -71.057283,
+ 42.358684
+ ],
+ "modifier": "uturn",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 180
+ ],
+ "location": [
+ -71.057283,
+ 42.358684
+ ]
+ },
+ {
+ "out": 1,
+ "classes": [
+ "tunnel"
+ ],
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180
+ ],
+ "location": [
+ -71.057353,
+ 42.358729
+ ]
+ }
+ ],
+ "weight": 15.5,
+ "duration": 15.5,
+ "distance": 29.8
+ },
+ {
+ "geometry": "aepaGrjupLC?AC",
+ "maneuver": {
+ "bearing_after": 61,
+ "bearing_before": 45,
+ "location": [
+ -71.057221,
+ 42.358734
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "State",
+ "intersections": [
+ {
+ "out": 0,
+ "classes": [
+ "tunnel"
+ ],
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.057221,
+ 42.358734
+ ]
+ }
+ ],
+ "weight": 3.5,
+ "duration": 3.5,
+ "distance": 4
+ },
+ {
+ "geometry": "gepaGnjupL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 79,
+ "location": [
+ -71.057201,
+ 42.358757
+ ],
+ "type": "arrive"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "State",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 259
+ ],
+ "location": [
+ -71.057201,
+ 42.358757
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Freedom Trail, State",
+ "weight": 223.1,
+ "duration": 223.1,
+ "distance": 240.1
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gepaGnjupL@BB?",
+ "maneuver": {
+ "bearing_after": 259,
+ "bearing_before": 0,
+ "location": [
+ -71.057201,
+ 42.358757
+ ],
+ "type": "depart"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "State",
+ "intersections": [
+ {
+ "classes": [
+ "tunnel"
+ ],
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 259
+ ],
+ "location": [
+ -71.057201,
+ 42.358757
+ ]
+ }
+ ],
+ "weight": 3.8,
+ "duration": 3.8,
+ "distance": 4
+ },
+ {
+ "geometry": "aepaGrjupLHF?PI??GBCDA",
+ "maneuver": {
+ "bearing_after": 225,
+ "bearing_before": 241,
+ "location": [
+ -71.057221,
+ 42.358734
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "classes": [
+ "tunnel"
+ ],
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 75,
+ 225,
+ 255
+ ],
+ "location": [
+ -71.057221,
+ 42.358734
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false
+ ],
+ "bearings": [
+ 90,
+ 180
+ ],
+ "location": [
+ -71.057353,
+ 42.358729
+ ]
+ }
+ ],
+ "weight": 11.3,
+ "duration": 11.3,
+ "distance": 29.8
+ },
+ {
+ "geometry": "wdpaG~jupLB?",
+ "maneuver": {
+ "bearing_after": 177,
+ "bearing_before": 175,
+ "location": [
+ -71.057283,
+ 42.358684
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 0,
+ "entry": [
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180
+ ],
+ "location": [
+ -71.057283,
+ 42.358684
+ ]
+ }
+ ],
+ "weight": 4.8,
+ "duration": 4.8,
+ "distance": 2.7
+ },
+ {
+ "geometry": "sdpaG~jupLDG",
+ "maneuver": {
+ "bearing_after": 129,
+ "bearing_before": 177,
+ "location": [
+ -71.057282,
+ 42.35866
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 45,
+ 135,
+ 225
+ ],
+ "location": [
+ -71.057282,
+ 42.35866
+ ]
+ }
+ ],
+ "weight": 11.3,
+ "duration": 11.3,
+ "distance": 5
+ },
+ {
+ "geometry": "mdpaGvjupLAAAAACAAWe@EIACAEGS",
+ "maneuver": {
+ "bearing_after": 47,
+ "bearing_before": 129,
+ "location": [
+ -71.057235,
+ 42.358631
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Devonshire Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 45,
+ 135,
+ 195,
+ 315
+ ],
+ "location": [
+ -71.057235,
+ 42.358631
+ ]
+ }
+ ],
+ "weight": 43.8,
+ "duration": 43.8,
+ "distance": 45.3
+ },
+ {
+ "geometry": "_fpaG~gupLW?C?A?C?eDn@E@i@HE@QDOBIB",
+ "maneuver": {
+ "bearing_after": 1,
+ "bearing_before": 56,
+ "location": [
+ -71.056804,
+ 42.35888
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Congress Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 165,
+ 240,
+ 270,
+ 315
+ ],
+ "location": [
+ -71.056804,
+ 42.35888
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.05714,
+ 42.360238
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 225,
+ 345
+ ],
+ "location": [
+ -71.057163,
+ 42.36032
+ ]
+ }
+ ],
+ "weight": 62.7,
+ "duration": 62.7,
+ "distance": 168.4
+ },
+ {
+ "geometry": "iopaGjjupLEQA??AAU",
+ "maneuver": {
+ "bearing_after": 63,
+ "bearing_before": 347,
+ "location": [
+ -71.057176,
+ 42.360367
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 165,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.057176,
+ 42.360367
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 165,
+ 240
+ ],
+ "location": [
+ -71.057094,
+ 42.360397
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 90,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.057093,
+ 42.36041
+ ]
+ }
+ ],
+ "weight": 33.9,
+ "duration": 33.9,
+ "distance": 19.1
+ },
+ {
+ "geometry": "sopaG`iupLMD",
+ "maneuver": {
+ "bearing_after": 345,
+ "bearing_before": 81,
+ "location": [
+ -71.056972,
+ 42.36042
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.056972,
+ 42.36042
+ ]
+ }
+ ],
+ "weight": 7.1,
+ "duration": 7.1,
+ "distance": 8
+ },
+ {
+ "geometry": "appaGfiupL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 346,
+ "location": [
+ -71.056995,
+ 42.36049
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 166
+ ],
+ "location": [
+ -71.056995,
+ 42.36049
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Devonshire Street, Congress Street",
+ "weight": 178.7,
+ "duration": 178.7,
+ "distance": 282.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "appaGfiupLLE",
+ "maneuver": {
+ "bearing_after": 166,
+ "bearing_before": 0,
+ "location": [
+ -71.056995,
+ 42.36049
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 166
+ ],
+ "location": [
+ -71.056995,
+ 42.36049
+ ]
+ }
+ ],
+ "weight": 17.5,
+ "duration": 17.5,
+ "distance": 8
+ },
+ {
+ "geometry": "sopaG`iupLESAAACAI",
+ "maneuver": {
+ "bearing_after": 64,
+ "bearing_before": 165,
+ "location": [
+ -71.056972,
+ 42.36042
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 270,
+ 345
+ ],
+ "location": [
+ -71.056972,
+ 42.36042
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 240,
+ 345
+ ],
+ "location": [
+ -71.056857,
+ 42.360463
+ ]
+ }
+ ],
+ "weight": 23.3,
+ "duration": 23.3,
+ "distance": 17
+ },
+ {
+ "geometry": "_ppaG|gupLk@RC@E?C@E?I@E?C?E@C@E?GBGBE@CBE@a@P_A`@A@C@A@C@",
+ "maneuver": {
+ "bearing_after": 340,
+ "bearing_before": 68,
+ "location": [
+ -71.056787,
+ 42.360483
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Union Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.056787,
+ 42.360483
+ ]
+ }
+ ],
+ "weight": 37.5,
+ "duration": 37.5,
+ "distance": 141.6
+ },
+ {
+ "geometry": "qwpaGfkupLi@iAWi@ISEKIMIOWk@KSUe@KU",
+ "maneuver": {
+ "bearing_after": 52,
+ "bearing_before": 330,
+ "location": [
+ -71.057322,
+ 42.361687
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Hanover Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 150,
+ 225
+ ],
+ "location": [
+ -71.057322,
+ 42.361687
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 60,
+ 135,
+ 240
+ ],
+ "location": [
+ -71.05674,
+ 42.362017
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 120,
+ 225,
+ 300
+ ],
+ "location": [
+ -71.056507,
+ 42.362152
+ ]
+ }
+ ],
+ "weight": 52.900000000,
+ "duration": 52.900000000,
+ "distance": 156.6
+ },
+ {
+ "geometry": "}|paGxaupLKTGPa@v@AD",
+ "maneuver": {
+ "bearing_after": 306,
+ "bearing_before": 52,
+ "location": [
+ -71.055814,
+ 42.362545
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Cross Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 45,
+ 120,
+ 240,
+ 300
+ ],
+ "location": [
+ -71.055814,
+ 42.362545
+ ]
+ }
+ ],
+ "weight": 16.2,
+ "duration": 16.2,
+ "distance": 51.9
+ },
+ {
+ "geometry": "u~paG~dupLE@C?EACAECGCKG]S]SIEc@YKGKGa@UGCIC]O",
+ "maneuver": {
+ "bearing_after": 1,
+ "bearing_before": 303,
+ "location": [
+ -71.056315,
+ 42.362829
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Salem Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 315
+ ],
+ "location": [
+ -71.056315,
+ 42.362829
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.055866,
+ 42.363594
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.055682,
+ 42.36388
+ ]
+ }
+ ],
+ "weight": 40.8,
+ "duration": 40.8,
+ "distance": 157.9
+ },
+ {
+ "geometry": "wfqaGf`upL?G",
+ "maneuver": {
+ "bearing_after": 91,
+ "bearing_before": 19,
+ "location": [
+ -71.055558,
+ 42.364123
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Parmenter Street",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.055558,
+ 42.364123
+ ]
+ }
+ ],
+ "weight": 8.2,
+ "duration": 8.2,
+ "distance": 3.4
+ },
+ {
+ "geometry": "wfqaG~_upLD@FDB@",
+ "maneuver": {
+ "bearing_after": 191,
+ "bearing_before": 91,
+ "location": [
+ -71.055517,
+ 42.364122
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.055517,
+ 42.364122
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.055525,
+ 42.364094
+ ]
+ }
+ ],
+ "weight": 9.8,
+ "duration": 9.8,
+ "distance": 11
+ },
+ {
+ "geometry": "efqaGh`upL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 200,
+ "location": [
+ -71.055569,
+ 42.364032
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 20
+ ],
+ "location": [
+ -71.055569,
+ 42.364032
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Hanover Street, Salem Street",
+ "weight": 206.2,
+ "duration": 206.2,
+ "distance": 547.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "efqaGh`upLCAGEEA",
+ "maneuver": {
+ "bearing_after": 20,
+ "bearing_before": 0,
+ "location": [
+ -71.055569,
+ 42.364032
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 20
+ ],
+ "location": [
+ -71.055569,
+ 42.364032
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 15,
+ 120,
+ 210
+ ],
+ "location": [
+ -71.055525,
+ 42.364094
+ ]
+ }
+ ],
+ "weight": 20.2,
+ "duration": 20.2,
+ "distance": 11
+ },
+ {
+ "geometry": "wfqaG~_upL?F",
+ "maneuver": {
+ "bearing_after": 271,
+ "bearing_before": 11,
+ "location": [
+ -71.055517,
+ 42.364122
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Parmenter Street",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 15,
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.055517,
+ 42.364122
+ ]
+ }
+ ],
+ "weight": 4.9,
+ "duration": 4.9,
+ "distance": 3.4
+ },
+ {
+ "geometry": "wfqaGf`upLI?e@?k@E_@Ay@CWA",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 271,
+ "location": [
+ -71.055558,
+ 42.364123
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Salem Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 90,
+ 195,
+ 285
+ ],
+ "location": [
+ -71.055558,
+ 42.364123
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.055555,
+ 42.364362
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 270
+ ],
+ "location": [
+ -71.055517,
+ 42.364741
+ ]
+ }
+ ],
+ "weight": 30.1,
+ "duration": 30.1,
+ "distance": 114.2
+ },
+ {
+ "geometry": "emqaGx_upLCBGBCB",
+ "maneuver": {
+ "bearing_after": 310,
+ "bearing_before": 2,
+ "location": [
+ -71.055487,
+ 42.365149
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 3,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 135,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.055487,
+ 42.365149
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 135,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.055513,
+ 42.365166
+ ]
+ }
+ ],
+ "weight": 10,
+ "duration": 10,
+ "distance": 10
+ },
+ {
+ "geometry": "umqaGd`upL??CD",
+ "maneuver": {
+ "bearing_after": 309,
+ "bearing_before": 337,
+ "location": [
+ -71.055545,
+ 42.365225
+ ],
+ "modifier": "slight left",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 165,
+ 315
+ ],
+ "location": [
+ -71.055545,
+ 42.365225
+ ]
+ }
+ ],
+ "weight": 3.8,
+ "duration": 3.8,
+ "distance": 4.2
+ },
+ {
+ "geometry": "ymqaGj`upL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 310,
+ "location": [
+ -71.055582,
+ 42.365251
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 130
+ ],
+ "location": [
+ -71.055582,
+ 42.365251
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Parmenter Street, Salem Street",
+ "weight": 69,
+ "duration": 69,
+ "distance": 142.8
+ },
+ {
+ "steps": [
+ {
+ "geometry": "ymqaGj`upLBE??BCFC",
+ "maneuver": {
+ "bearing_after": 130,
+ "bearing_before": 0,
+ "location": [
+ -71.055582,
+ 42.365251
+ ],
+ "modifier": "right",
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 130
+ ],
+ "location": [
+ -71.055582,
+ 42.365251
+ ]
+ },
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 165,
+ 315
+ ],
+ "location": [
+ -71.055545,
+ 42.365225
+ ]
+ }
+ ],
+ "weight": 11.2,
+ "duration": 11.2,
+ "distance": 11.4
+ },
+ {
+ "geometry": "imqaG|_upLBC",
+ "maneuver": {
+ "bearing_after": 130,
+ "bearing_before": 157,
+ "location": [
+ -71.055513,
+ 42.365166
+ ],
+ "modifier": "slight left",
+ "type": "fork"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 135,
+ 180,
+ 345
+ ],
+ "location": [
+ -71.055513,
+ 42.365166
+ ]
+ }
+ ],
+ "weight": 19.7,
+ "duration": 19.7,
+ "distance": 2.9
+ },
+ {
+ "geometry": "emqaGx_upLMAIEWI_BcAECME",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 130,
+ "location": [
+ -71.055487,
+ 42.365149
+ ],
+ "modifier": "sharp left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Salem Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 3,
+ "entry": [
+ true,
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 135,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.055487,
+ 42.365149
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 180,
+ 315
+ ],
+ "location": [
+ -71.055482,
+ 42.365222
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 30,
+ 135,
+ 210
+ ],
+ "location": [
+ -71.05506,
+ 42.365868
+ ]
+ }
+ ],
+ "weight": 30.4,
+ "duration": 30.4,
+ "distance": 99.8
+ },
+ {
+ "geometry": "irqaGx|tpLCFe@vAsAhE",
+ "maneuver": {
+ "bearing_after": 300,
+ "bearing_before": 19,
+ "location": [
+ -71.055008,
+ 42.365967
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Sheafe Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 195,
+ 300
+ ],
+ "location": [
+ -71.055008,
+ 42.365967
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 120,
+ 210,
+ 300
+ ],
+ "location": [
+ -71.055488,
+ 42.366179
+ ]
+ }
+ ],
+ "weight": 35.8,
+ "duration": 35.8,
+ "distance": 141.5
+ },
+ {
+ "geometry": "gvqaGbfupLG?iAG",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 299,
+ "location": [
+ -71.056495,
+ 42.366604
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.056495,
+ 42.366604
+ ]
+ },
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 180
+ ],
+ "location": [
+ -71.056495,
+ 42.366641
+ ]
+ }
+ ],
+ "weight": 42.800000000,
+ "duration": 42.800000000,
+ "distance": 45.5
+ },
+ {
+ "geometry": "yxqaGzeupLAC",
+ "maneuver": {
+ "bearing_after": 61,
+ "bearing_before": 2,
+ "location": [
+ -71.056461,
+ 42.367013
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 60,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.056461,
+ 42.367013
+ ]
+ }
+ ],
+ "weight": 3.3,
+ "duration": 3.3,
+ "distance": 1.9
+ },
+ {
+ "geometry": "{xqaGveupLRw@",
+ "maneuver": {
+ "bearing_after": 116,
+ "bearing_before": 61,
+ "location": [
+ -71.05644,
+ 42.367021
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 240
+ ],
+ "location": [
+ -71.05644,
+ 42.367021
+ ]
+ }
+ ],
+ "weight": 23,
+ "duration": 23,
+ "distance": 25.4
+ },
+ {
+ "geometry": "gxqaG~cupL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 117,
+ "location": [
+ -71.056164,
+ 42.366918
+ ],
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 297
+ ],
+ "location": [
+ -71.056164,
+ 42.366918
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Salem Street, Sheafe Street",
+ "weight": 166.2,
+ "duration": 166.2,
+ "distance": 328.4
+ },
+ {
+ "steps": [
+ {
+ "geometry": "gxqaG~cupLSv@@BEF",
+ "maneuver": {
+ "bearing_after": 297,
+ "bearing_before": 0,
+ "location": [
+ -71.056164,
+ 42.366918
+ ],
+ "type": "depart"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 297
+ ],
+ "location": [
+ -71.056164,
+ 42.366918
+ ]
+ },
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 240
+ ],
+ "location": [
+ -71.05644,
+ 42.367021
+ ]
+ },
+ {
+ "out": 2,
+ "in": 0,
+ "entry": [
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 60,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.056461,
+ 42.367013
+ ]
+ }
+ ],
+ "weight": 35.3,
+ "duration": 35.3,
+ "distance": 31.6
+ },
+ {
+ "geometry": "_yqaGbfupLG?",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 306,
+ "location": [
+ -71.056502,
+ 42.367036
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "Snow Hill Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 0,
+ 120,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.056502,
+ 42.367036
+ ]
+ }
+ ],
+ "weight": 4.6,
+ "duration": 4.6,
+ "distance": 5.1
+ },
+ {
+ "geometry": "gyqaGbfupLIAcCKs@GG?",
+ "maneuver": {
+ "bearing_after": 2,
+ "bearing_before": 2,
+ "location": [
+ -71.056498,
+ 42.367082
+ ],
+ "modifier": "straight",
+ "type": "notification"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Snow Hill Street",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 105,
+ 180,
+ 285
+ ],
+ "location": [
+ -71.056498,
+ 42.367082
+ ]
+ },
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 0,
+ 180,
+ 240
+ ],
+ "location": [
+ -71.056427,
+ 42.36779
+ ]
+ }
+ ],
+ "weight": 30.7,
+ "duration": 30.7,
+ "distance": 111.8
+ },
+ {
+ "geometry": "q_raGleupLQ`@KH",
+ "maneuver": {
+ "bearing_after": 305,
+ "bearing_before": 7,
+ "location": [
+ -71.056385,
+ 42.368085
+ ],
+ "modifier": "left",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Charter Street",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 120,
+ 180,
+ 300
+ ],
+ "location": [
+ -71.056385,
+ 42.368085
+ ]
+ }
+ ],
+ "weight": 10.5,
+ "duration": 10.5,
+ "distance": 25.5
+ },
+ {
+ "geometry": "o`raGxfupLIIGECC",
+ "maneuver": {
+ "bearing_after": 32,
+ "bearing_before": 329,
+ "location": [
+ -71.056607,
+ 42.368239
+ ],
+ "modifier": "slight right",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 30,
+ 60,
+ 150,
+ 240
+ ],
+ "location": [
+ -71.056607,
+ 42.368239
+ ]
+ }
+ ],
+ "weight": 7.5,
+ "duration": 7.5,
+ "distance": 15.1
+ },
+ {
+ "geometry": "earaGdfupLC@e@NcAX",
+ "maneuver": {
+ "bearing_after": 330,
+ "bearing_before": 32,
+ "location": [
+ -71.05651,
+ 42.368354
+ ],
+ "modifier": "left",
+ "type": "turn"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "Boston HarborWalk North End",
+ "intersections": [
+ {
+ "out": 2,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 210,
+ 330
+ ],
+ "location": [
+ -71.05651,
+ 42.368354
+ ]
+ },
+ {
+ "out": 3,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true,
+ true
+ ],
+ "bearings": [
+ 75,
+ 150,
+ 255,
+ 345
+ ],
+ "location": [
+ -71.056522,
+ 42.36837
+ ]
+ }
+ ],
+ "weight": 21.900000000,
+ "duration": 21.900000000,
+ "distance": 62.9
+ },
+ {
+ "geometry": "sdraGpgupLEg@Eq@IaBCy@",
+ "maneuver": {
+ "bearing_after": 75,
+ "bearing_before": 343,
+ "location": [
+ -71.056732,
+ 42.368895
+ ],
+ "modifier": "right",
+ "type": "end of road"
+ },
+ "mode": "cycling",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 0,
+ "in": 1,
+ "entry": [
+ true,
+ false,
+ true
+ ],
+ "bearings": [
+ 75,
+ 165,
+ 255
+ ],
+ "location": [
+ -71.056732,
+ 42.368895
+ ]
+ }
+ ],
+ "weight": 31,
+ "duration": 31,
+ "distance": 102.3
+ },
+ {
+ "geometry": "meraGz_upL`@J",
+ "maneuver": {
+ "bearing_after": 192,
+ "bearing_before": 82,
+ "location": [
+ -71.055504,
+ 42.369029
+ ],
+ "modifier": "right",
+ "type": "turn"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "out": 1,
+ "in": 2,
+ "entry": [
+ true,
+ true,
+ false
+ ],
+ "bearings": [
+ 105,
+ 195,
+ 270
+ ],
+ "location": [
+ -71.055504,
+ 42.369029
+ ]
+ }
+ ],
+ "weight": 17.4,
+ "duration": 17.4,
+ "distance": 19.2
+ },
+ {
+ "geometry": "kdraGf`upL",
+ "maneuver": {
+ "bearing_after": 0,
+ "bearing_before": 194,
+ "location": [
+ -71.055561,
+ 42.368861
+ ],
+ "modifier": "left",
+ "type": "arrive"
+ },
+ "mode": "pushing bike",
+ "driving_side": "right",
+ "name": "",
+ "intersections": [
+ {
+ "in": 0,
+ "entry": [
+ true
+ ],
+ "bearings": [
+ 14
+ ],
+ "location": [
+ -71.055561,
+ 42.368861
+ ]
+ }
+ ],
+ "weight": 0,
+ "duration": 0,
+ "distance": 0
+ }
+ ],
+ "summary": "Snow Hill Street, Charter Street",
+ "weight": 158.9,
+ "duration": 158.9,
+ "distance": 373.6
+ }
+ ],
+ "weight_name": "duration",
+ "weight": 36716.100000000,
+ "duration": 36716.100000000,
+ "distance": 123967.000000000
+ }
+ ],
+ "waypoints": [
+ {
+ "waypoint_index": 0,
+ "trips_index": 0,
+ "hint": "gIosgLaKLIDOAAAArgAAAFwBAAAAAAAAp3O3QafxmUEQiRpCAAAAAM4AAACuAAAAXAEAAAAAAAAiAAAAN8fD-11_hgLtx8P7O3-GAgIA7wDMrPZq",
+ "distance": 15.458438989,
+ "name": "",
+ "location": [
+ -71.055561,
+ 42.368861
+ ]
+ },
+ {
+ "waypoint_index": 4,
+ "trips_index": 0,
+ "hint": "zHksgC96LIAOAAAABAAAACMBAABdAQAAbd3QP5tTvj7LbAFC4E4bQg4AAAAEAAAAIwEAAF0BAAAiAAAAxpHD-xlThgI1k8P7d1OGAgEATxXMrPZq",
+ "distance": 31.979699356,
+ "name": "",
+ "location": [
+ -71.069242,
+ 42.357529
+ ]
+ },
+ {
+ "waypoint_index": 29,
+ "trips_index": 0,
+ "hint": "ZVMsgG9TLIAQAAAABgAAAEsBAAAkAAAAk5G9QBPwAECyiu9CX7dQQRAAAAAGAAAASwEAACQAAAAiAAAAr4PB-xpuhwLJg8H7GG6HAhYArwvMrPZq",
+ "distance": 2.151229028,
+ "name": "White trail",
+ "location": [
+ -71.203921,
+ 42.429978
+ ]
+ },
+ {
+ "waypoint_index": 5,
+ "trips_index": 0,
+ "hint": "jt4hgJLeIYA7AAAALQAAAAAAAAAAAAAA4gPGQasVlUEAAAAAAAAAADsAAAAtAAAAAAAAAAAAAAAiAAAAqnnD-zlPhgKDecP7Gk-GAgAATwjMrPZq",
+ "distance": 4.709088444,
+ "name": "",
+ "location": [
+ -71.075414,
+ 42.356537
+ ]
+ },
+ {
+ "waypoint_index": 13,
+ "trips_index": 0,
+ "hint": "F6ghgE2oIYALAAAAFAEAAAAAAAA-AAAALyacQM9Y5UIAAAAAntjNQQsAAAAUAQAAAAAAAD4AAAAiAAAA0AHD--s5hgLdAcP7WTqGAgAA_wXMrPZq",
+ "distance": 12.265685208,
+ "name": "Bay State Road",
+ "location": [
+ -71.106096,
+ 42.351083
+ ]
+ },
+ {
+ "waypoint_index": 11,
+ "trips_index": 0,
+ "hint": "7hAigPYQIoA2AgAAYwEAAAAAAAAAAAAAnsd7Qq9XHUIAAAAAAAAAADYCAABjAQAAAAAAAAAAAAAiAAAAgSXD-_EghgKhJcP7siCGAgAAXwTMrPZq",
+ "distance": 7.478611058,
+ "name": "",
+ "location": [
+ -71.096959,
+ 42.344689
+ ]
+ },
+ {
+ "waypoint_index": 16,
+ "trips_index": 0,
+ "hint": "BtMDgA3TA4DtAQAACQMAAAAAAAAAAAAAGllbQrVyrEIAAAAAAAAAAO0BAAAJAwAAAAAAAAAAAAAiAAAA8KDC-2dBhgL5oML7kEGGAgAAfxHMrPZq",
+ "distance": 4.614233419,
+ "name": "",
+ "location": [
+ -71.130896,
+ 42.352999
+ ]
+ },
+ {
+ "waypoint_index": 57,
+ "trips_index": 0,
+ "hint": "53osgJbBAIA9AQAAfwAAAAAAAAA3AgAAg0gNQqN9YEEAAAAA7xd8Qj0BAAB_AAAAAAAAADcCAAAiAAAAZa3D-yhVhgLArcP7m1SGAgAADwTMrPZq",
+ "distance": 17.363306965,
+ "name": "",
+ "location": [
+ -71.062171,
+ 42.358056
+ ]
+ },
+ {
+ "waypoint_index": 19,
+ "trips_index": 0,
+ "hint": "zJQpgOCUKYAAAAAAggAAAAAAAAD4AAAAAAAAAO-jZkEAAAAA7NvbQQAAAACCAAAAAAAAAPgAAAAiAAAAdGXC-wM2hgIZZsL7ZjaGAgAAjxHMrPZq",
+ "distance": 17.481895794,
+ "name": "",
+ "location": [
+ -71.146124,
+ 42.350083
+ ]
+ },
+ {
+ "waypoint_index": 58,
+ "trips_index": 0,
+ "hint": "pLssgCC8LICEAAAAUwAAAE4AAAAAAAAAhGRrQSCoE0GVZgpBAAAAAIQAAABTAAAATgAAAAAAAAAiAAAAe7vD-7RShgJXu8P7bVKGAgEA7wbMrPZq",
+ "distance": 8.425668561,
+ "name": "",
+ "location": [
+ -71.058565,
+ 42.357428
+ ]
+ },
+ {
+ "waypoint_index": 60,
+ "trips_index": 0,
+ "hint": "ab0sgOi9LIAPAAAAAgAAABQAAADzBAAAU3bhP7GtKD7jRw5APbwMQw8AAAACAAAAFAAAAPMEAAAiAAAAz8DD--VXhgLOwMP761eGAgEADwXMrPZq",
+ "distance": 0.671553231,
+ "name": "State",
+ "location": [
+ -71.057201,
+ 42.358757
+ ]
+ },
+ {
+ "waypoint_index": 63,
+ "trips_index": 0,
+ "hint": "5IgsgAqJLID7AAAAHgAAAAwAAAAIAAAAz5ffQcMBVEDFYKk_E9trP_sAAAAeAAAADAAAAAgAAAAiAAAAIsfD-0NxhgL1xsP7GnGGAgEAHwjMrPZq",
+ "distance": 5.871834935,
+ "name": "",
+ "location": [
+ -71.055582,
+ 42.365251
+ ]
+ },
+ {
+ "waypoint_index": 18,
+ "trips_index": 0,
+ "hint": "kJMpgJWTKYBMAAAAYwEAAAAAAAAAAAAAvsf_QXfOE0MAAAAAAAAAAEwAAABjAQAAAAAAAAAAAAAiAAAA52XC-2M0hgLEZcL7DzSGAgAAvwbMrPZq",
+ "distance": 9.766513400,
+ "name": "",
+ "location": [
+ -71.146009,
+ 42.349667
+ ]
+ },
+ {
+ "waypoint_index": 14,
+ "trips_index": 0,
+ "hint": "VWEpgBGvAIDDAAAAGgAAAOAAAADRAAAAZrGtQTwuNkCkOcdBAoC5QcMAAAAaAAAA4AAAANEAAAAiAAAAusTC-9sYhgLNxML77hiGAgIALxPMrPZq",
+ "distance": 2.628121485,
+ "name": "",
+ "location": [
+ -71.121734,
+ 42.342619
+ ]
+ },
+ {
+ "waypoint_index": 53,
+ "trips_index": 0,
+ "hint": "YQ0DgBTPIYDvAAAAdAAAAAAAAAAAAAAAsgLVQbMxTUEAAAAAAAAAAO8AAAB0AAAAAAAAAAAAAAAiAAAA2obD-3MxhgKjhsP7ZDGGAgAAPxXMrPZq",
+ "distance": 4.830021618,
+ "name": "",
+ "location": [
+ -71.072038,
+ 42.348915
+ ]
+ },
+ {
+ "waypoint_index": 54,
+ "trips_index": 0,
+ "hint": "m8shgJ7LIYAOAAAAXgEAAAAAAAAAAAAAOFW-QDE5G0IAAAAAAAAAAA4AAABeAQAAAAAAAAAAAAAiAAAAMpfD-6k1hgItl8P7uDWGAgAAvwTMrPZq",
+ "distance": 1.716409362,
+ "name": "Piedmont Street",
+ "location": [
+ -71.067854,
+ 42.349993
+ ]
+ },
+ {
+ "waypoint_index": 50,
+ "trips_index": 0,
+ "hint": "jW0sgNVtLIAwAAAABwAAAAAAAAAxAQAAmfygQewAMT8AAAAAUqIHQjAAAAAHAAAAAAAAADEBAAAiAAAAA6rD-z9LhgJcqcP7n0uGAgAAnw3MrPZq",
+ "distance": 17.404100972,
+ "name": "Tremont Street",
+ "location": [
+ -71.063037,
+ 42.355519
+ ]
+ },
+ {
+ "waypoint_index": 36,
+ "trips_index": 0,
+ "hint": "RwEpgEoBKYARAAAAAAAAAP4AAAAdAgAAkPHtPwAAAABn1K9B7xNwQhEAAAAAAAAA_gAAAB0CAAAiAAAAqbTC--LuhQKLtML72O6FAgkA3xTMrPZq",
+ "distance": 2.710863708,
+ "name": "",
+ "location": [
+ -71.125847,
+ 42.331874
+ ]
+ },
+ {
+ "waypoint_index": 38,
+ "trips_index": 0,
+ "hint": "gLshgIS7IYAAAAAAPAAAAAAAAAAAAAAAAAAAAPGU1UAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAiAAAAAvTC-8AAhgKC9ML71ACGAgAATw_MrPZq",
+ "distance": 10.782118946,
+ "name": "",
+ "location": [
+ -71.10963,
+ 42.336448
+ ]
+ },
+ {
+ "waypoint_index": 27,
+ "trips_index": 0,
+ "hint": "aj4fgM3NAoCRAAAAhQAAAAAAAAArAAAAJkGBQbwNbEEAAAAAtAeZQJEAAACFAAAAAAAAACsAAAAiAAAAVpjC-6vNhgJRmML7Dc6GAgAAfwXMrPZq",
+ "distance": 10.893682554,
+ "name": "",
+ "location": [
+ -71.133098,
+ 42.388907
+ ]
+ },
+ {
+ "waypoint_index": 44,
+ "trips_index": 0,
+ "hint": "43YhgPN2IYA1AAAAJAAAAAAAAAA5AAAAEha0QWgpbEEAAAAAVpK-QTUAAAAkAAAAAAAAADkAAAAiAAAAPq3D-8bThQIDrsP7b9OFAgAALw3MrPZq",
+ "distance": 18.896384512,
+ "name": "Lucy Street",
+ "location": [
+ -71.06221,
+ 42.324934
+ ]
+ },
+ {
+ "waypoint_index": 6,
+ "trips_index": 0,
+ "hint": "0OEhgPvhIYADAAAABgAAAA8AAAA0AAAA2lq-PipQFD-Y-Nc_LEW7QAMAAAAGAAAADwAAADQAAAAiAAAAklPD-601hgJ7U8P7szWGAgIAjwzMrPZq",
+ "distance": 2.009577849,
+ "name": "",
+ "location": [
+ -71.085166,
+ 42.349997
+ ]
+ },
+ {
+ "waypoint_index": 37,
+ "trips_index": 0,
+ "hint": "jREAgKy7IYAwAAAACAEAAKICAAAAAAAArRKrQHxV6kFh4pVCAAAAADAAAAAIAQAAogIAAAAAAAAiAAAAyunC-wD_hQJB6cL7J_-FAgcAXwHMrPZq",
+ "distance": 12.095051428,
+ "name": "",
+ "location": [
+ -71.112246,
+ 42.336
+ ]
+ },
+ {
+ "waypoint_index": 55,
+ "trips_index": 0,
+ "hint": "zMkhgLkRAICNAAAA2QAAAAAAAAAyAgAAqSJsQnUwwEEAAAAAdOV5Qo0AAADZAAAAAAAAADICAAAiAAAASpbD-4BEhgLSnMP7eEaGAgAAHxXMrPZq",
+ "distance": 148.655194719,
+ "name": "Charles Street",
+ "location": [
+ -71.068086,
+ 42.353792
+ ]
+ },
+ {
+ "waypoint_index": 31,
+ "trips_index": 0,
+ "hint": "2M4pgNrOKYCCAQAADAAAAAAAAAAAAAAALKILQ27Ah0AAAAAAAAAAAIIBAAAMAAAAAAAAAAAAAAAiAAAAGyjB-wirhQIbKMH7CKuFAgAA_w3MrPZq",
+ "distance": 0,
+ "name": "Echo Bridge",
+ "location": [
+ -71.227365,
+ 42.314504
+ ]
+ },
+ {
+ "waypoint_index": 8,
+ "trips_index": 0,
+ "hint": "lhgDgIkYA4BkAAAAIgEAAFoBAAAaAAAAJyAzQWNrAEI8AxpCXpU7QGQAAAAiAQAAWgEAABoAAAAiAAAAN1rD-zQWhgJyWsP7YxaGAgIAXwjMrPZq",
+ "distance": 7.134932910,
+ "name": "",
+ "location": [
+ -71.083465,
+ 42.34194
+ ]
+ },
+ {
+ "waypoint_index": 41,
+ "trips_index": 0,
+ "hint": "cX8hgJF_IYA1AAAAMAAAAGcAAABOAAAATyWxQQ77nUEHMCtC63QBQjUAAAAwAAAAZwAAAE4AAAAiAAAALBzD-2bphQK8HMP7FeqFAgEAnwfMrPZq",
+ "distance": 22.776295017,
+ "name": "Alleghany Street",
+ "location": [
+ -71.099348,
+ 42.33047
+ ]
+ },
+ {
+ "waypoint_index": 39,
+ "trips_index": 0,
+ "hint": "rLwhgLG8IYAEAAAABQAAADAAAABsAAAA1X8CQHGb7D9Kz6BB-mE0QgQAAAAFAAAAMAAAAGwAAAAiAAAAbBzD-9cGhgJOHcP7YAeGAgEAzwjMrPZq",
+ "distance": 24.054372041,
+ "name": "",
+ "location": [
+ -71.099284,
+ 42.338007
+ ]
+ },
+ {
+ "waypoint_index": 61,
+ "trips_index": 0,
+ "hint": "oLwsgCS9LIBHAAAA2AAAAAAAAABgAQAAkQwAQdo1v0EAAAAAI74cQkcAAADYAAAAAAAAAGABAAAiAAAAncHD-6pehgK7wcP7r16GAgAArxXMrPZq",
+ "distance": 2.532528717,
+ "name": "",
+ "location": [
+ -71.056995,
+ 42.36049
+ ]
+ },
+ {
+ "waypoint_index": 10,
+ "trips_index": 0,
+ "hint": "bwwigH0MIoAFAAAAEAAAAFUAAAArAAAAag0xP3921D-BFxlB1WCZQAUAAAAQAAAAVQAAACsAAAAiAAAAJS3D-3EWhgJ2LcP7RBaGAgQATwLMrPZq",
+ "distance": 8.340476409,
+ "name": "",
+ "location": [
+ -71.095003,
+ 42.342001
+ ]
+ },
+ {
+ "waypoint_index": 9,
+ "trips_index": 0,
+ "hint": "MQwigFwMIoAoAAAANQAAABwAAAB-AAAAoidqQSAYl0GvUh9BndM1QigAAAA1AAAAHAAAAH4AAAAiAAAAyS_D-28ThgLyL8P70hOGAgEA7xHMrPZq",
+ "distance": 11.504463313,
+ "name": "",
+ "location": [
+ -71.094327,
+ 42.341231
+ ]
+ },
+ {
+ "waypoint_index": 45,
+ "trips_index": 0,
+ "hint": "-mUsgHZmLIATAAAAYgEAAL0AAADpAAAALf8HQHZ8HUK-9adBbsvOQRMAAABiAQAAvQAAAOkAAAAiAAAADODD-3jWhQJx3cP7staFAgMAbwDMrPZq",
+ "distance": 55.355564794,
+ "name": "",
+ "location": [
+ -71.049204,
+ 42.325624
+ ]
+ },
+ {
+ "waypoint_index": 42,
+ "trips_index": 0,
+ "hint": "5tYhgJHXIYAIAAAArQAAADwAAABCAQAAaRlbQD16mUGpAchBxIoPQggAAACtAAAAPAAAAEIBAAAiAAAAKD3D--XmhQKGPcP7ceeFAgIATwfMrPZq",
+ "distance": 17.374491149,
+ "name": "Dudley Street",
+ "location": [
+ -71.090904,
+ 42.329829
+ ]
+ },
+ {
+ "waypoint_index": 49,
+ "trips_index": 0,
+ "hint": "uGosgDsvBIBdAQAADAEAAAAAAAAvAAAAJVwbQl6M7UEAAAAAjMmnQF0BAAAMAQAAAAAAAC8AAAAiAAAAVK_D-zVEhgKcr8P7hkSGAgAA_xLMrPZq",
+ "distance": 10.775973238,
+ "name": "",
+ "location": [
+ -71.061676,
+ 42.353717
+ ]
+ },
+ {
+ "waypoint_index": 47,
+ "trips_index": 0,
+ "hint": "Y5IsgK6SLICpAAAAAAAAAEoBAAAAAAAAAat0QgAAAACyCu5CAAAAAKkAAAAAAAAASgEAAAAAAAAiAAAAGBTE-7QxhgLZE8T7AzCGAgMAXwfMrPZq",
+ "distance": 48.376988516,
+ "name": "Boston Harborwalk",
+ "location": [
+ -71.03588,
+ 42.34898
+ ]
+ },
+ {
+ "waypoint_index": 12,
+ "trips_index": 0,
+ "hint": "C-AhgGbgIYBZAAAAMQAAAAAAAABqAAAAj5QfQS1zq0AAAAAAi6c7QVkAAAAxAAAAAAAAAGoAAAAiAAAAYjvD-7ExhgJiO8P73TGGAgAArwXMrPZq",
+ "distance": 4.887502329,
+ "name": "",
+ "location": [
+ -71.091358,
+ 42.348977
+ ]
+ },
+ {
+ "waypoint_index": 40,
+ "trips_index": 0,
+ "hint": "e38hgIUAA4C6AgAAGQAAAAAAAAAAAAAA_DybQoNdJUEAAAAAAAAAALoCAAAZAAAAAAAAAAAAAAAiAAAARBnD-_HwhQKKGcP72vCFAgAAfwHMrPZq",
+ "distance": 6.310267154,
+ "name": "Carmel Street",
+ "location": [
+ -71.100092,
+ 42.332401
+ ]
+ },
+ {
+ "waypoint_index": 15,
+ "trips_index": 0,
+ "hint": "9bEAgGHlA4AFAAAAOQAAAOMAAACeAQAA-5cTP_H4ykBojclB4bs3QgUAAAA5AAAA4wAAAJ4BAAAiAAAAXLvC-zw9hgJeu8L74DyGAgMAnwXMrPZq",
+ "distance": 10.220739994,
+ "name": "",
+ "location": [
+ -71.124132,
+ 42.351932
+ ]
+ },
+ {
+ "waypoint_index": 32,
+ "trips_index": 0,
+ "hint": "KBYpgCkWKYAEAAAAFgAAABoAAAAAAAAAeejrP7suEUG-MytBAAAAAAQAAAAWAAAAGgAAAAAAAAAiAAAAhCfC-8rShQIzKML7ddKFAgEAHwLMrPZq",
+ "distance": 17.240182378,
+ "name": "",
+ "location": [
+ -71.16198,
+ 42.324682
+ ]
+ },
+ {
+ "waypoint_index": 3,
+ "trips_index": 0,
+ "hint": "qn8sgKt_LIAfAAAAAAAAAAAAAAAAAAAA2ElcQAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAiAAAAK6XD-0NYhgL-psP7-VeGAgAA7wTMrPZq",
+ "distance": 39.331841372,
+ "name": "",
+ "location": [
+ -71.064277,
+ 42.358851
+ ]
+ },
+ {
+ "waypoint_index": 34,
+ "trips_index": 0,
+ "hint": "caspgBnmA4APAAAADgAAAKsAAAAhAQAACjjMQO4BskBhd45CIp7xQg8AAAAOAAAAqwAAACEBAAAiAAAASyXC-5kShgIpJcL7uxGGAgYADwbMrPZq",
+ "distance": 24.818413202,
+ "name": "",
+ "location": [
+ -71.162549,
+ 42.341017
+ ]
+ },
+ {
+ "waypoint_index": 28,
+ "trips_index": 0,
+ "hint": "VfIrgFfyK4A3AAAADgAAAGgBAACjAAAAjHShQVW7lkDkuQFDGEdsQjcAAAAOAAAAaAEAAKMAAAAiAAAANg7C-70jhwKSEML7JSOHAgcAbwzMrPZq",
+ "distance": 52.496836206,
+ "name": "",
+ "location": [
+ -71.168458,
+ 42.410941
+ ]
+ },
+ {
+ "waypoint_index": 33,
+ "trips_index": 0,
+ "hint": "oTopgPY6KYA-AAAAXAAAAIgAAACtAAAAcuLQQUWlF0LKLmFCAqeOQj4AAABcAAAAiAAAAK0AAAAiAAAAK0HC--TthQKdQML7Y-6FAgsAbw7MrPZq",
+ "distance": 18.330624172,
+ "name": "",
+ "location": [
+ -71.155413,
+ 42.33162
+ ]
+ },
+ {
+ "waypoint_index": 26,
+ "trips_index": 0,
+ "hint": "3DcugDE4LoAuAAAAfgEAAAAAAAAAAAAA4qymQBZCKUIAAAAAAAAAAC4AAAB-AQAAAAAAAAAAAAAiAAAA8MDC-63rhgLYwML7ouuGAgAAjxTMrPZq",
+ "distance": 2.323865932,
+ "name": "",
+ "location": [
+ -71.122704,
+ 42.396589
+ ]
+ },
+ {
+ "waypoint_index": 30,
+ "trips_index": 0,
+ "hint": "s-8pgLbvKYAOAAAAJgAAAEQAAABCAAAAaEbCQJmAekFTh-NBRUbdQQ4AAAAmAAAARAAAAEIAAAAiAAAAUyK_-0aohQK5Ir_7J6mFAgEAzwbMrPZq",
+ "distance": 26.369185460,
+ "name": "",
+ "location": [
+ -71.359917,
+ 42.313798
+ ]
+ },
+ {
+ "waypoint_index": 23,
+ "trips_index": 0,
+ "hint": "zMICgCkJH4BiAwAAewAAAAAAAAAAAAAAYnbAQskRWkEAAAAAAAAAAGIDAAB7AAAAAAAAAAAAAAAiAAAA1ufC-9W4hgIi6ML7B7mGAgAAnwjMrPZq",
+ "distance": 8.368347408,
+ "name": "",
+ "location": [
+ -71.112746,
+ 42.383573
+ ]
+ },
+ {
+ "waypoint_index": 62,
+ "trips_index": 0,
+ "hint": "IzYEgGw1BIASAAAArwAAADMAAACUAwAAynkIQGUkmkEXlLVAUKPLQhIAAACvAAAAMwAAAJQDAAAiAAAAL8fD-4BshgJ0x8P7bmyGAgEAjwzMrPZq",
+ "distance": 6.024488759,
+ "name": "",
+ "location": [
+ -71.055569,
+ 42.364032
+ ]
+ },
+ {
+ "waypoint_index": 24,
+ "trips_index": 0,
+ "hint": "-jIugP4yLoAAAAAAIgAAAAAAAAAAAAAAAAAAAODNbkAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAiAAAAjc7C-7zLhgLTzsL7sMuGAgAAvxHMrPZq",
+ "distance": 5.917464220,
+ "name": "",
+ "location": [
+ -71.119219,
+ 42.388412
+ ]
+ },
+ {
+ "waypoint_index": 7,
+ "trips_index": 0,
+ "hint": "XAAigHIAIoBKAAAASwAAAFUAAABDAQAARGUEQURlBEG2ZRZBn04PQkoAAABLAAAAVQAAAEMBAAAiAAAAJIrD-_IRhgLoicP7mRGGAgEAjxLMrPZq",
+ "distance": 11.054153936,
+ "name": "",
+ "location": [
+ -71.071196,
+ 42.34085
+ ]
+ },
+ {
+ "waypoint_index": 64,
+ "trips_index": 0,
+ "hint": "G4gsgDiILICSAwAA5gAAAOkAAAAAAAAAQljLQnyXy0Fhy85BAAAAAJIDAADmAAAA6QAAAAAAAAAiAAAA3MTD-8Z3hgLOxMP7sXeGAgIAjxLMrPZq",
+ "distance": 2.602121282,
+ "name": "",
+ "location": [
+ -71.056164,
+ 42.366918
+ ]
+ },
+ {
+ "waypoint_index": 56,
+ "trips_index": 0,
+ "hint": "OjQEgKKALIASAAAAAAAAAAAAAAAAAAAA7mn2QAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAiAAAAOJzD-8pPhgLenMP7A0uGAgAAXwrMrPZq",
+ "distance": 136.537792872,
+ "name": "",
+ "location": [
+ -71.066568,
+ 42.356682
+ ]
+ },
+ {
+ "waypoint_index": 59,
+ "trips_index": 0,
+ "hint": "UkAEgFxABIB8AAAAAAAAAAAAAAAYAgAAVjBdQQAAAAAAAAAAHi9uQnwAAAAAAAAAAAAAABgCAAAiAAAAybjD-_9ZhgLkuMP7NVqGAgAA3wbMrPZq",
+ "distance": 6.397300074,
+ "name": "",
+ "location": [
+ -71.059255,
+ 42.359295
+ ]
+ },
+ {
+ "waypoint_index": 52,
+ "trips_index": 0,
+ "hint": "48khgL2GAIBLAAAAYwAAAAAAAAA_AgAAYjQFQR1-L0EAAAAAD2p_QksAAABjAAAAAAAAAD8CAAAiAAAAKZvD-z0_hgInm8P7HD-GAgAAzwXMrPZq",
+ "distance": 3.669358118,
+ "name": "",
+ "location": [
+ -71.066839,
+ 42.352445
+ ]
+ },
+ {
+ "waypoint_index": 43,
+ "trips_index": 0,
+ "hint": "WhEngAASJ4BcAAAAdwAAAHoBAAAFAAAAI3gkQQlZRUJLNihCraoRQFwAAAB3AAAAegEAAAUAAAAiAAAAp0rD-2xjhQJLS8P7T2OFAgEAHwzMrPZq",
+ "distance": 13.907078842,
+ "name": "Blue Hill Avenue",
+ "location": [
+ -71.087449,
+ 42.296172
+ ]
+ },
+ {
+ "waypoint_index": 2,
+ "trips_index": 0,
+ "hint": "HpwsgCKcLIAAAAAAEgAAAAAAAAAAAAAAAAAAACg870AAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAiAAAAFazD-xB0hgJ-rcP79nSGAgAAnw7MrPZq",
+ "distance": 39.201676568,
+ "name": "",
+ "location": [
+ -71.062507,
+ 42.365968
+ ]
+ },
+ {
+ "waypoint_index": 35,
+ "trips_index": 0,
+ "hint": "tE8pgC7YA4BIAQAAXAAAAGMEAAAAAAAAxc8RQgsFI0H6ePlCAAAAAEgBAABcAAAAYwQAAAAAAAAiAAAAlXLC-9sbhgKvcsL70RuGAgcAvwHMrPZq",
+ "distance": 2.413886454,
+ "name": "",
+ "location": [
+ -71.142763,
+ 42.343387
+ ]
+ },
+ {
+ "waypoint_index": 20,
+ "trips_index": 0,
+ "hint": "fXQpgKx0KYCwAAAALQEAAAAAAACNAwAAqUycQfKzBUIAAAAAMvfJQrAAAAAtAQAAAAAAAI0DAAAiAAAASW7C-2pQhgJabsL7rlCGAgAAjxHMrPZq",
+ "distance": 7.682154577,
+ "name": "",
+ "location": [
+ -71.143863,
+ 42.356842
+ ]
+ },
+ {
+ "waypoint_index": 51,
+ "trips_index": 0,
+ "hint": "CjAEgJltLICCAAAAMQAAAMAFAAAiAAAAZNlnQQ0_oEEmhCNDxWVkQYIAAAAxAAAAwAUAACIAAAAiAAAAJqjD-85IhgLfocP7xUqGAgoAfwHMrPZq",
+ "distance": 143.666703104,
+ "name": "Tremont Street",
+ "location": [
+ -71.063514,
+ 42.354894
+ ]
+ },
+ {
+ "waypoint_index": 48,
+ "trips_index": 0,
+ "hint": "_i4EgMVpLICFAAAASQAAABsCAAAsAAAAPrtuQV4AAEGNdm9CtBabQIUAAABJAAAAGwIAACwAAAAiAAAAkbfD-105hgJkt8P7aDmGAgIAPwHMrPZq",
+ "distance": 3.902534071,
+ "name": "",
+ "location": [
+ -71.059567,
+ 42.350941
+ ]
+ },
+ {
+ "waypoint_index": 46,
+ "trips_index": 0,
+ "hint": "xTgEgAI5BIAiAAAAKQEAADQAAAAAAAAANyZxQILoA0Keb7hAAAAAACIAAAApAQAANAAAAAAAAAAiAAAAxBPE-xMthgLhE8T7Pi2GAgEAjxLMrPZq",
+ "distance": 5.341185433,
+ "name": "Boston HarborWalk",
+ "location": [
+ -71.035964,
+ 42.347795
+ ]
+ },
+ {
+ "waypoint_index": 17,
+ "trips_index": 0,
+ "hint": "dC0pgHYtKYA8AAAAIQAAAAAAAAAcAAAAqpLIQePNV0EAAAAAQzs8QTwAAAAhAAAAAAAAABwAAAAiAAAAuJ7C-8k_hgIwn8L7uz-GAgAAzwvMrPZq",
+ "distance": 10.005103353,
+ "name": "",
+ "location": [
+ -71.131464,
+ 42.352585
+ ]
+ },
+ {
+ "waypoint_index": 21,
+ "trips_index": 0,
+ "hint": "z7cCgEvPHoCLAAAAgwEAAAAAAAAAAAAAZBB4QZDSK0IAAAAAAAAAAIsAAACDAQAAAAAAAAAAAAAiAAAAZ6rC-1VphgJsqsL7NmmGAgAAPwXMrPZq",
+ "distance": 3.468034894,
+ "name": "",
+ "location": [
+ -71.128473,
+ 42.363221
+ ]
+ },
+ {
+ "waypoint_index": 1,
+ "trips_index": 0,
+ "hint": "LRUugHAVLoA1AAAA7wEAAKAAAADqAAAAYZa9QBEBXEIOWo5BwSLQQTUAAADvAQAAoAAAAOoAAAAiAAAAGa_D-6uAhgIDr8P7p4CGAgIAfwrMrPZq",
+ "distance": 1.865657787,
+ "name": "",
+ "location": [
+ -71.061735,
+ 42.369195
+ ]
+ },
+ {
+ "waypoint_index": 25,
+ "trips_index": 0,
+ "hint": "HmYEgCJmBIARAAAAEAAAAFMAAAAfAAAAu2r9P_lj3T_hNhRBXnBdQBEAAAAQAAAAUwAAAB8AAAAiAAAAOc7C-27MhgI7zsL7Q8yGAgIAzxDMrPZq",
+ "distance": 4.779304112,
+ "name": "",
+ "location": [
+ -71.119303,
+ 42.38859
+ ]
+ },
+ {
+ "waypoint_index": 22,
+ "trips_index": 0,
+ "hint": "kiMugJQjLoAAAAAAEgAAAAAAAAA9AAAAAAAAAGWd9UAAAAAAYrnMQQAAAAASAAAAAAAAAD0AAAAiAAAA2iHD-52uhgLlIcP70K6GAgAAjw7MrPZq",
+ "distance": 5.737096415,
+ "name": "",
+ "location": [
+ -71.097894,
+ 42.380957
+ ]
+ }
+ ]
+} \ No newline at end of file
diff --git a/static/img/video.png b/static/img/video.png
new file mode 100644
index 0000000..25cbd08
--- /dev/null
+++ b/static/img/video.png
Binary files differ
diff --git a/static/img/yes-datetime.png b/static/img/yes-datetime.png
new file mode 100644
index 0000000..04ed5a7
--- /dev/null
+++ b/static/img/yes-datetime.png
Binary files differ
diff --git a/static/img/yes-location.png b/static/img/yes-location.png
new file mode 100644
index 0000000..8f20099
--- /dev/null
+++ b/static/img/yes-location.png
Binary files differ
diff --git a/static/js/codemirror/tablist.js b/static/js/codemirror/tablist.js
new file mode 100644
index 0000000..e6cf2d4
--- /dev/null
+++ b/static/js/codemirror/tablist.js
@@ -0,0 +1,44 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+var CodeMirror = require("codemirror");
+
+CodeMirror.commands.tabAndIndentMarkdownList = function (cm) {
+ var ranges = cm.listSelections();
+ var pos = ranges[0].head;
+ var eolState = cm.getStateAfter(pos.line);
+ var inList = eolState.list !== false;
+
+ if (inList) {
+ cm.execCommand("indentMore");
+ return;
+ }
+
+ if (cm.options.indentWithTabs) {
+ cm.execCommand("insertTab");
+ }
+ else {
+ var spaces = Array(cm.options.tabSize + 1).join(" ");
+ cm.replaceSelection(spaces);
+ }
+};
+
+CodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {
+ var ranges = cm.listSelections();
+ var pos = ranges[0].head;
+ var eolState = cm.getStateAfter(pos.line);
+ var inList = eolState.list !== false;
+
+ if (inList) {
+ cm.execCommand("indentLess");
+ return;
+ }
+
+ if (cm.options.indentWithTabs) {
+ cm.execCommand("insertTab");
+ }
+ else {
+ var spaces = Array(cm.options.tabSize + 1).join(" ");
+ cm.replaceSelection(spaces);
+ }
+};
diff --git a/static/js/editor.js b/static/js/editor.js
new file mode 100644
index 0000000..7804f4c
--- /dev/null
+++ b/static/js/editor.js
@@ -0,0 +1,805 @@
+// uses functions in utils.js
+var host = window.location.protocol + "//" + window.location.host;
+var collection_id;
+var latest_timestamp = -1;
+
+// "global" map variables
+var map;
+var location_picking = false;
+
+// layer variables
+const media_markers_l = L.layerGroup([]); // media markers
+const media_markers_ref = {};
+const text_markers = L.layerGroup([]); // polyline routes
+
+// collection info in JSON
+const collection_media = {};
+const collection_notes = {};
+const collection_perms = {};
+const collection_info = {};
+const media_divs = {};
+const changes = { "name" : false, "info" : false, "timestamp" : false }
+
+//
+var mode = 0; // 0 = media, 1 = notes, 2 = routes. the index of hte currently selected tab
+var ascending = true;
+const selected_media_ids = [];
+var is_picking_location = false;
+var last_selected_index = -1;
+var media_modal_open = false;
+var share_modal_open = false;
+var collection_modal_open = false;
+
+var Media_Icon = L.Icon.extend({
+ options: {
+ shadowUrl: 'static/img/marker_background.png',
+ iconSize: [60, 45],
+ shadowSize: [72, 62],
+ iconAnchor: [30, 55],
+ shadowAnchor: [36, 62],
+ popupAnchor: [-3, -76]
+ }
+});
+
+// RUN ON PAGE LOAD
+window.onload = function() {
+ document.getElementById("share-modal").addEventListener("click", close_share_modal);
+ document.getElementById("share-box").addEventListener("click", stop_propagation);
+ document.getElementById("collection-modal").addEventListener("click", close_collection_modal);
+ document.getElementById("collection-box").addEventListener("click", stop_propagation);
+
+ collection_id = document.getElementById("collection_id").innerText;
+ map = L.map('map').setView([13.6760758587756, -89.21535464697462], 10);
+ L.tileLayer('https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.{ext}?api_key=24746ff5-179d-482f-97a8-0267c5b276a1', {
+ minZoom: 0,
+ maxZoom: 20,
+ ext: 'png'
+ }).addTo(map);
+
+
+ map.addLayer(media_markers_l);
+ map.addLayer(text_markers);
+ var layerControl = L.control.layers(null,null,{collapsed:false});
+ layerControl.addOverlay(media_markers_l, "Media");
+ layerControl.addOverlay(text_markers, "Notes");
+ layerControl.addTo(map);
+
+ map.on('click', function(e) {
+ var coords = e.latlng;
+ handle_map_click(coords["lat"], coords["lng"]);
+ });
+
+ request_latest_info();
+}
+var intervalId = window.setInterval(function(){ // constantly get latest info from server
+ request_latest_info();
+ }, 5000);
+
+ // keyboard event listener for ESC to clear selection or cancel location picking
+document.addEventListener('keydown', function(e) {
+ if (e.key === 'Escape') {
+ if(media_modal_open) {
+ close_media_preview();
+ return;
+ }
+ if(share_modal_open) {
+ close_share_modal();
+ return;
+ }
+ if(collection_modal_open) {
+ close_collection_modal();
+ return;
+ }
+ if (is_picking_location) {
+ disable_picking();
+ return;
+ }
+ clear_selection();
+ update_content_editing_box();
+ }
+ if (e.key == 'c') {
+ if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return;
+ if( e.target.isContentEditable ) return;
+ if(selected_media_ids.length)picker_clicked();
+ return;
+ }
+ // select elements by arrow keys
+ if (e.key == 'a' || e.key == 'd') {
+ if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return;
+ if(last_selected_index != -1) {
+ const new_index = last_selected_index + (e.key == 'a' ? -1 : 1);
+ const media = document.querySelector(`.media[data-index="${new_index}"]`);
+ if (media) {
+ clear_selection();
+
+ media.classList.add('selected');
+ selected_media_ids.push(media.dataset.id);
+ last_selected_index = parseInt(media.dataset.index);
+ media.scrollIntoView();
+ //map.panTo(media_markers_ref[media.dataset.id].latlng);
+
+ update_content_editing_box();
+ }
+ }
+ }
+ if (e.key == 'w' || e.key == 's') {
+ if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return;
+ if(last_selected_index != -1) {
+ const grid = document.getElementById("media_grid");
+ const grid_computed_style = window.getComputedStyle(grid);
+ const grid_cols = grid_computed_style.getPropertyValue("grid-template-columns").split(" ").length;
+
+ const new_index = last_selected_index + (e.key == 'w' ? -1 : 1)*grid_cols;
+ const media = document.querySelector(`.media[data-index="${new_index}"]`);
+ console.log(media);
+ if (media) {
+ clear_selection();
+
+ media.classList.add('selected');
+ selected_media_ids.push(media.dataset.id);
+ last_selected_index = parseInt(media.dataset.index);
+ media.scrollIntoView();
+ //map.panTo(media_markers_ref[media.dataset.id].latlng);
+
+ update_content_editing_box();
+ }
+ }
+ }
+});
+
+function stop_propagation(event) {
+ console.log("stop event propagation");
+ event.stopPropagation();
+}
+
+
+function set_tab(evt, tab_id) {
+ if(is_picking_location) return;
+ // Hide all tabs' content and mark all tabs as unselected
+ var tab_content = document.getElementsByClassName("tab-content");
+ for (var i = 0; i < tab_content.length; i++) {
+ tab_content[i].style.display = "none";
+ }
+ var tabs = document.getElementsByClassName("tab");
+ for (var i = 0; i < tabs.length; i++) {
+ tabs[i].className = tabs[i].className.replace(" active", "");
+ }
+
+ // Display selected tab's content, show tab as selected
+ document.getElementById(tab_id).style.display = "flex";
+ evt.currentTarget.className += " active";
+
+ mode = {"media_tab" : 0, "text_tab" : 1, "routes_tab" : 2}[tab_id];
+
+ update_content_editing_box();
+}
+
+function upload_media_files() {
+ var files = document.getElementById("media_upload").files;;
+
+ if (files.length == 0) {
+ alert("No files selected!");
+ return;
+ }
+
+ const formData = new FormData();
+ for (var i = 0; i < files.length; i++){
+ console.log(files[i]);
+ formData.append("files", files[i]);
+ }
+ formData.append("collection_id", collection_id);
+
+ fetch( "/editormediaupload", {
+ method: "POST",
+ credentials: "include",
+ body: formData
+ }).then((response) => response.json())
+ .then((json) => {
+ console.log('Gotcha');
+ }).catch((err) => {
+ console.log(err);
+ });
+}
+
+function edit_media_grid_element(media_dict) {
+ const media_div = media_divs[media_dict["id"]];
+ const name = media_div.querySelector("p");
+ name.innerText = media_dict["name"];
+
+ const icons = media_div.querySelectorAll("div.media div img");
+ icons[0].src = media_dict["longitude"] ? "static/img/yes-location.png" : "static/img/no-location.png";
+ icons[1].src = (media_dict["timestamp"] != "") ? "static/img/yes-datetime.png" : "static/img/no-datetime.png";
+
+ const timestamp = media_div.querySelector("p.media-timestamp");
+ timestamp.innerText = media_dict["timestamp"].replace("T", " ");
+}
+
+function add_media(media_dict){
+ // add data
+ collection_media[media_dict["id"]] = media_dict;
+
+ // add HTML element
+ const media_element = document.createElement('div');
+ media_element.className = "media";
+ media_element.dataset.id = media_dict["id"];
+
+ const img = document.createElement('img');
+ img.src = media_dict["thumbbig"];
+
+ const fn = document.createElement('p');
+ fn.innerText = media_dict["name"];
+
+ const info = document.createElement('div');
+ info.style = "display:flex; flex-direction:horizontal; margin:0; justify-content: center;";
+ const loc = document.createElement('img');
+ loc.src = media_dict["longitude"] ? "static/img/yes-location.png" : "static/img/no-location.png";
+ loc.style.width = "20px"; loc.style.height = "20px";
+ const dt = document.createElement('img');
+ dt.src = (media_dict["timestamp"] != "") ? "static/img/yes-datetime.png" : "static/img/no-datetime.png";
+ dt.style.width = "20px"; dt.style.height = "20px";
+ const dtext = document.createElement('p');
+ dtext.classList.add("media-timestamp")
+ dtext.innerText = media_dict["timestamp"].replace("T", " ");
+
+
+ info.appendChild(loc);
+ info.appendChild(dt);
+
+ media_element.appendChild(img);
+ media_element.appendChild(fn);
+ media_element.appendChild(dtext);
+ media_element.appendChild(info);
+
+
+ media_divs[media_dict["id"]] = media_element;
+
+ // add map icon
+ console.log(media_dict);
+ const media_icon = new Media_Icon({iconUrl : media_dict['thumbsmall']});
+ var lat = 0; var lng = 0;
+ if(media_dict['latitude'] && media_dict['longitude']) {
+ lat = media_dict['latitude'];
+ lng = media_dict['longitude'];
+ }
+ const media_marker = L.marker( [lat, lng], {icon:media_icon} ).on('click', function(e) { map_marker_clicked(media_dict["id"], 'media', e) });
+ media_markers_ref[media_dict["id"]] = media_marker;
+ media_markers_l.addLayer(media_marker);
+}
+
+function remove_media(media_id) {
+ for(var i = 0; i < selected_media_ids.length; i++) {
+ if (selected_media_ids[i] == media_id) {
+ selected_media_ids.pop(i);
+ break;
+ }
+ }
+ media_divs[media_id].remove();
+
+ media_markers_l.removeLayer(media_markers_ref[media_id]);
+ delete media_markers_ref[media_id];
+ delete media_divs[media_id];
+ delete collection_media[media_id];
+ update_content_editing_box();
+}
+
+// media grid stuff made by deepseek, not finished cleaning up
+document.addEventListener('DOMContentLoaded', function() {
+ const media_grid = document.getElementById('media_grid');
+
+ // Add click event listeners
+ media_grid.addEventListener('click', function(e) {
+ const media_element = e.target.closest('.media');
+ const isShiftKey = e.shiftKey;
+ const isCtrlKey = e.ctrlKey || e.metaKey; // metaKey for Mac Command key
+ if (!media_element) {
+ if(!isShiftKey && !isCtrlKey) clear_selection();
+ update_content_editing_box();
+ return;
+ }
+ const isVisible = function (ele, container) {
+ const { bottom, height, top } = ele.getBoundingClientRect();
+ const containerRect = container.getBoundingClientRect();
+
+ //console.log( ele.getBoundingClientRect());
+ //console.log(containerRect);
+
+ return top <= containerRect.top ? containerRect.top - top <= height : bottom - containerRect.bottom <= height;
+ };
+
+
+
+ const currentIndex = parseInt(media_element.dataset.index);
+ const current_media_id = media_element.dataset.id;
+
+ if (isShiftKey && last_selected_index !== -1) {
+ // Range selection with Shift key
+ select_range(last_selected_index, currentIndex, isCtrlKey);
+ } else if (isCtrlKey) {
+ // Toggle selection with Ctrl key
+ media_element.classList.toggle('selected');
+ selected_media_ids.push(current_media_id);
+ last_selected_index = currentIndex;
+ } else {
+ // Single selection
+ clear_selection();
+ media_element.classList.add('selected');
+ last_selected_index = currentIndex;
+ selected_media_ids.push(current_media_id);
+ }
+
+ update_content_editing_box();
+ if(!isVisible(media_element, media_element.parentElement))media_element.scrollIntoView();
+ });
+});
+
+// Clear all selections
+function clear_selection() {
+ selected_media_ids.length = 0; // clear selected media ids array... kind of strange way to do it but appears to be the most readable way of doing it
+ document.querySelectorAll('.media.selected').forEach(el => {
+ el.classList.remove('selected');
+ });
+ last_selected_index = -1;
+}
+
+// Select range of photos
+function select_range(start_index, end_index, additive) {
+ if (!additive) {
+ clear_selection();
+ }
+
+ const start = Math.min(start_index, end_index);
+ const end = Math.max(start_index, end_index);
+
+ for (let i = start; i <= end; i++) {
+ const photo = document.querySelector(`.media[data-index="${i}"]`);
+ if (photo) {
+ photo.classList.add('selected');
+ selected_media_ids.push(photo.dataset.id);
+ }
+ }
+}
+
+function update_media_grid() {
+ const media_grid = document.getElementById('media_grid');
+ while (media_grid.firstChild) {
+ media_grid.removeChild(media_grid.lastChild);
+ }
+ const hide_timestamp = document.getElementById("hide-timestamp").checked;
+ const hide_location = document.getElementById("hide-location").checked;
+ const sort_by = document.getElementById("sort-type").value;
+
+ const media_ids = [...Object.keys(media_divs)];
+ if (sort_by != "none") media_ids.sort( (a, b) => {
+ if(ascending) {
+ return collection_media[a][sort_by].localeCompare(collection_media[b][sort_by]);
+ } else {
+ return collection_media[b][sort_by].localeCompare(collection_media[a][sort_by]);
+ }
+ });
+
+ // remove hidden entries
+ for (var i = media_ids.length-1; i >= 0; i-- ) {
+ if (hide_timestamp && (collection_media[media_ids[i]]["timestamp"] != "")) media_ids.splice(i, 1);
+ else if (hide_location && (collection_media[media_ids[i]]["latitude"] && collection_media[media_ids[i]]["longitude"])) media_ids.splice(i, 1);
+ }
+
+ var i = 0;
+ for (var media_id of media_ids) {
+ const media_div = media_divs[media_id];
+ media_div.dataset.index = i;
+ media_grid.appendChild(media_div);
+ i += 1;
+ }
+}
+
+function update_content_editing_box() {
+ submit_edit_changes(); // make sure user changes are submitted
+
+ const content_box = document.getElementById("content_info");
+ const preview_box = document.getElementById("media-preview");
+ const video = document.getElementById("preview-video");
+ video.pause();
+ if(mode == 0) { // media editing mode
+ if(selected_media_ids.length == 0){
+ content_box.style.display="none";
+ preview_box.style.display="none";
+ return;
+ }
+
+ content_box.style.display="block";
+ preview_box.style.display="flex";
+
+ if(selected_media_ids.length == 1){
+ const selected_media = collection_media[selected_media_ids[0]];
+ for (const [key, value] of Object.entries(selected_media)) {
+ var field = document.getElementById("media_"+key);
+ if (field) field.value = value;
+ }
+ const location_text = document.getElementById("media_coords");
+ if(selected_media['latitude'] && selected_media['longitude']) {
+ map.panTo( [selected_media['latitude'], selected_media['longitude']] );
+ location_text.innerText = `(${selected_media['latitude']}, ${selected_media['longitude']})`;
+ } else {
+ location_text.innerText = "No location given! Press the picker button or 'C' to mark location.";
+ }
+
+ if (selected_media["is_video"]) {
+ const img = document.getElementById("preview-img");
+ video.src = selected_media["mediapath"];
+ img.style.display = "none";
+ video.style.display = "block";
+ } else {
+ const img = document.getElementById("preview-img");
+ img.src = selected_media["mediapath"];
+ video.style.display = "none";
+ img.style.display = "block";
+ }
+
+ } else { // multiple media selected
+ const fields = { ...collection_media[selected_media_ids[0]] };
+ for (var m_i = 1; m_i < selected_media_ids.length; m_i++) {
+ const selected_media = collection_media[selected_media_ids[ m_i ]];
+ for (const [key, value] of Object.entries(selected_media)) {
+ if( value != fields[key] ) fields[key] = "< ... >";
+ }
+ }
+
+ for (const [key, value] of Object.entries(fields)) {
+ var field = document.getElementById("media_"+key);
+ if (field) field.value = value;
+ }
+ const location_text = document.getElementById("media_coords");
+ if(fields['latitude'] && fields['longitude'] && Number(fields['latitude']) && Number(fields['longitude'])) {
+ map.panTo( [fields['latitude'], fields['longitude']]);
+ location_text.innerText = `(${fields['latitude']}, ${fields['longitude']})`;
+ } else if ( !(fields['latitude'] && fields['longitude']) )
+ location_text.innerText = "No location given! Press the picker button or 'C' to mark location.";
+ else {
+ location_text.innerText = "< ... >";
+ }
+ }
+ }
+}
+
+function picker_clicked() {
+ const picking_style = document.createElement('style');
+ picking_style.innerHTML = '*{cursor: crosshair;}';
+ picking_style.id = 'picking-style';
+ document.head.appendChild(picking_style);
+
+ L.DomUtil.addClass(map._container, "crosshair-cursor-enabled");
+
+ const media_boxes = document.getElementsByClassName("media");
+ for(var i = 0; i < media_boxes.length; i++) {
+ media_boxes[i].classList.add('no-hover');
+ }
+ const tabs = document.getElementsByClassName("tab-header");
+ for(var i = 0; i < tabs.length; i++) {
+ tabs[i].classList.add('no-hover');
+ }
+
+ map.removeLayer(media_markers_l);
+
+ is_picking_location = true;
+}
+
+function disable_picking() {
+ is_picking_location = false;
+ document.getElementById('picking-style').remove();
+ L.DomUtil.removeClass(map._container, "crosshair-cursor-enabled");
+
+ const media_boxes = document.getElementsByClassName("media");
+ for(var i = 0; i < media_boxes.length; i++) {
+ media_boxes[i].classList.remove('no-hover');
+ }
+
+ const tabs = document.getElementsByClassName("tab-header");
+ for(var i = 0; i < tabs.length; i++) {
+ tabs[i].classList.remove('no-hover');
+ }
+ map.addLayer(media_markers_l);
+}
+
+function handle_map_click(latitude, longitude) {
+ if(!is_picking_location) return;
+ map.addLayer(media_markers_l);
+ edit_media_info({"latitude" : latitude, "longitude" : longitude});
+ disable_picking();
+}
+
+function map_marker_clicked(id, type, e) {
+ clear_selection();
+ if (type === "media") {
+ const media = document.querySelector(`.media[data-id="${id}"]`);
+ if (media) {
+ media.classList.add('selected');
+ selected_media_ids.push(media.dataset.id);
+ last_selected_index = parseInt(media.dataset.index);
+ media.scrollIntoView();
+ } else { // media filtered
+ document.getElementById("hide-timestamp").checked = false;
+ document.getElementById("hide-location").checked = false;
+ update_media_grid();
+ const media = document.querySelector(`.media[data-id="${id}"]`);
+ media.classList.add('selected');
+ selected_media_ids.push(media.dataset.id);
+ last_selected_index = parseInt(media.dataset.index);
+ media.scrollIntoView();
+ }
+ update_content_editing_box();
+ }
+}
+
+function open_media_preview() {
+ const modal = document.getElementById('media-preview-modal');
+ const preview_img = document.getElementById("preview-img");
+ const modal_media = document.getElementById("modal-img");
+
+ modal.style.display = "block";
+ modal_media.src = preview_img.src;
+ media_modal_open = true;
+}
+
+function close_media_preview() {
+ const modal = document.getElementById('media-preview-modal');
+ modal.style.display = "none";
+ media_modal_open = false;
+}
+
+function open_share_modal() {
+ update_share_info();
+ var modal = document.getElementById('share-modal');
+ share_modal_open = true;
+ modal.style.display = "block";
+}
+
+function close_share_modal() {
+ var modal = document.getElementById('share-modal');
+ share_modal_open = false;
+ modal.style.display = "none";
+}
+
+function update_share_info() {
+ const publicity = document.getElementById("visibility-dropdown");
+ publicity.value = collection_perms["public"] ? "public" : "private";
+
+ const user_section = document.getElementById("shared-users");
+ while (user_section.firstChild)
+ user_section.removeChild(user_section.firstChild);
+
+ const editor_option = document.createElement("option");
+ editor_option.innerText = "Editor";
+ editor_option.value = "editor";
+ const viewer_option = document.createElement("option");
+ viewer_option.innerText = "Viewer";
+ viewer_option.value = "viewer";
+
+ for (var t = 0; t < 2; t++) {
+ const user_type = t == 0 ? "editor" : "viewer";
+ for (var i = 0; i < collection_perms[user_type+"s"].length; i++) {
+ const user_email_str = collection_perms[user_type+"s"][i];
+ const user_email = document.createElement("p");
+ user_email.innerText = collection_perms[user_type+"s"][i];
+ user_email.style.margin = "0";
+
+ const user_permissions = document.createElement("select");
+ const e = editor_option.cloneNode(true);
+ const v = viewer_option.cloneNode(true);
+ user_permissions.appendChild(e);
+ user_permissions.appendChild(v);
+ user_permissions.value = user_type;
+ user_permissions.onchange = () => { edit_permissions(user_email_str, user_permissions.value) }
+
+ const user_unshare = document.createElement("p");
+ user_unshare.innerText = "Unshare";
+ user_unshare.classList.add("user-unshare-button");
+ user_unshare.onclick = function () { edit_permissions(user_email_str, ""); }
+
+ user_section.appendChild(user_email);
+ user_section.appendChild(user_permissions);
+ user_section.appendChild(user_unshare);
+ }
+ }
+}
+
+function open_collection_modal() {
+ update_collection_info();
+ var modal = document.getElementById('collection-modal');
+ collection_modal_open = true;
+ modal.style.display = "block";
+}
+
+function close_collection_modal() {
+ var modal = document.getElementById('collection-modal');
+ collection_modal_open = false;
+ modal.style.display = "none";
+}
+
+function update_collection_info() {
+ document.getElementById("collection-title-field").value = collection_info["title"];
+ document.getElementById("collection-subtitle-field").value = collection_info["subtitle"];
+ document.getElementById("collection-info-field").value = collection_info["info"];
+}
+
+function mark_info_change(field) {
+ changes[field] = true;
+}
+
+function submit_edit_changes() {
+ console.log(changes);
+ var edits = {};
+ for (const [field, was_changed] of Object.entries(changes)) {
+ if (was_changed) {
+ const new_val = document.getElementById("media_"+field).value;
+ if (new_val != collection_media[selected_media_ids[0]][field]) edits[field] = new_val;
+ }
+ changes[field] = false; // reset dictionary
+ }
+ if(Object.keys(edits).length > 0) {
+ edit_media_info(edits);
+ }
+}
+
+// communicate
+// with
+// the
+// server
+
+// run every x seconds to get latest info from server
+function request_latest_info(){
+ console.log("requesting update");
+ function handleLatestInfo(json){
+ console.log(json);
+ if(json['status'] != "OK") return; // ADD ERROR NOTIF ON MENU BAR
+
+ if(!json['update']) return; // no changes
+
+ let new_collection = json['collection'];
+ let new_media_ids = [];
+ for(var i = 0; i < new_collection['media'].length; i++) {
+ const media_id = new_collection['media'][i]['id'];
+ new_media_ids.push(media_id);
+ if(collection_media[media_id] == undefined) {
+ add_media(new_collection['media'][i]);
+ } else { // update existing
+ collection_media[media_id] = new_collection['media'][i]
+ edit_media_grid_element(collection_media[media_id]);
+ if(collection_media[media_id]['latitude'] && collection_media[media_id]['longitude'])
+ media_markers_ref[media_id].setLatLng([collection_media[media_id]['latitude'], collection_media[media_id]['longitude']]);
+ }
+ }
+ let to_be_removed = [];
+ for (const [key, _] of Object.entries(collection_media)) {
+ if (!new_media_ids.includes(key)) to_be_removed.push(key);
+ }
+ console.log(to_be_removed);
+ for (var i = 0; i < to_be_removed.length; i++){
+ remove_media(to_be_removed[i]);
+ }
+
+ // update permissions info
+ collection_perms["owner"] = new_collection["owner"];
+ collection_perms["editors"] = new_collection["editors"];
+ collection_perms["viewers"] = new_collection["viewers"];
+ collection_perms["public"] = new_collection["public"];
+ if(share_modal_open) update_share_info();
+
+ document.getElementById("collection-title").innerText = new_collection["title"];
+ collection_info["title"] = new_collection["title"];
+ collection_info["subtitle"] = new_collection["subtitle"];
+ collection_info["info"] = new_collection["info"];
+ if(collection_modal_open) update_share_info();
+
+ update_media_grid(); // make smarter later
+ update_content_editing_box();
+ latest_timestamp = new_collection["last_edited"];
+
+ }
+ fetch(host+'/editorgetlatestinfo', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({ "collection" : collection_id, "last_updated" : latest_timestamp })})
+ .then((response) => response.json())
+ .then((json) => handleLatestInfo(json));
+}
+
+function delete_media() {
+ if(!confirm("Are you sure you want to delete these pieces of media? This cannot be undone!")) return;
+
+ fetch(host+'/editordeletemedia', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({ "collection" : collection_id, "to_be_removed" : selected_media_ids })})
+ .then((response) => response.json())
+ .then((json) => { clear_selection(); request_latest_info(); });
+}
+
+function edit_media_info(changes) {
+ console.log("edit");
+ const data = [];
+ for (var i = 0; i < selected_media_ids.length; i++) {
+ data.push({"media_id" : selected_media_ids[i], "changes" : changes})
+ }
+ fetch(host+'/editoreditmedia', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({ "collection" : collection_id, "edits" : data })})
+ .then((response) => response.json())
+ .then((json) => {console.log(json); request_latest_info();});
+}
+
+function update_visibility() {
+ const visibility = document.getElementById("visibility-dropdown").value == "public" ? true : false;
+ const data = { "collection" : collection_id, "public" : visibility };
+ fetch(host+'/editorshare', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(data)})
+ .then((response) => response.json())
+ .then((json) => {console.log(json); request_latest_info();});
+}
+
+function add_shared_user() {
+ const user_email_e = document.getElementById("share-email");
+ const permission_e = document.getElementById("share-permissions");
+ edit_permissions(user_email_e.value, permission_e.value);
+
+ user_email_e.value = ""; // reset email
+}
+
+function edit_permissions(user_email, permission) {
+ console.log(user_email);
+ console.log(permission);
+ const data = { "collection" : collection_id, "user_email" : user_email, "perm" : permission };
+
+ fetch(host+'/editorshare', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(data)})
+ .then((response) => response.json())
+ .then((json) => {console.log(json); request_latest_info();});
+}
+
+function collection_info_updated(field) {
+ const field_input = document.getElementById('collection-'+field+'-field');
+ if(field_input) {
+ edit_collection_info(field, field_input.value);
+ }
+}
+
+function edit_collection_info(field, value) {
+ const edits = {};
+ edits[field] = value;
+ const data = { "collection" : collection_id, "edits" : edits };
+
+ fetch(host+'/editorcollectioninfo', {
+ method: "POST",
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(data)})
+ .then((response) => response.json())
+ .then((json) => {console.log(json); request_latest_info();});
+}
+
+function toggle_sort_direction(){
+ ascending = !ascending;
+ document.getElementById("sort-direction").innerText = ascending ? "Ascending" : "Descending";
+ update_media_grid();
+} \ No newline at end of file
diff --git a/static/js/leaflet.js b/static/js/leaflet.js
new file mode 100644
index 0000000..a3bf693
--- /dev/null
+++ b/static/js/leaflet.js
@@ -0,0 +1,6 @@
+/* @preserve
+ * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
+ * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){"use strict";function l(t){for(var e,i,n=1,o=arguments.length;n<o;n++)for(e in i=arguments[n])t[e]=i[e];return t}var R=Object.create||function(t){return N.prototype=t,new N};function N(){}function a(t,e){var i,n=Array.prototype.slice;return t.bind?t.bind.apply(t,n.call(arguments,1)):(i=n.call(arguments,2),function(){return t.apply(e,i.length?i.concat(n.call(arguments)):arguments)})}var D=0;function h(t){return"_leaflet_id"in t||(t._leaflet_id=++D),t._leaflet_id}function j(t,e,i){var n,o,s=function(){n=!1,o&&(r.apply(i,o),o=!1)},r=function(){n?o=arguments:(t.apply(i,arguments),setTimeout(s,e),n=!0)};return r}function H(t,e,i){var n=e[1],e=e[0],o=n-e;return t===n&&i?t:((t-e)%o+o)%o+e}function u(){return!1}function i(t,e){return!1===e?t:(e=Math.pow(10,void 0===e?6:e),Math.round(t*e)/e)}function W(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return W(t).split(/\s+/)}function c(t,e){for(var i in Object.prototype.hasOwnProperty.call(t,"options")||(t.options=t.options?R(t.options):{}),e)t.options[i]=e[i];return t.options}function U(t,e,i){var n,o=[];for(n in t)o.push(encodeURIComponent(i?n.toUpperCase():n)+"="+encodeURIComponent(t[n]));return(e&&-1!==e.indexOf("?")?"&":"?")+o.join("&")}var V=/\{ *([\w_ -]+) *\}/g;function q(t,i){return t.replace(V,function(t,e){e=i[e];if(void 0===e)throw new Error("No value provided for variable "+t);return e="function"==typeof e?e(i):e})}var d=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function G(t,e){for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1}var K="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function Y(t){return window["webkit"+t]||window["moz"+t]||window["ms"+t]}var X=0;function J(t){var e=+new Date,i=Math.max(0,16-(e-X));return X=e+i,window.setTimeout(t,i)}var $=window.requestAnimationFrame||Y("RequestAnimationFrame")||J,Q=window.cancelAnimationFrame||Y("CancelAnimationFrame")||Y("CancelRequestAnimationFrame")||function(t){window.clearTimeout(t)};function x(t,e,i){if(!i||$!==J)return $.call(window,a(t,e));t.call(e)}function r(t){t&&Q.call(window,t)}var tt={__proto__:null,extend:l,create:R,bind:a,get lastId(){return D},stamp:h,throttle:j,wrapNum:H,falseFn:u,formatNum:i,trim:W,splitWords:F,setOptions:c,getParamString:U,template:q,isArray:d,indexOf:G,emptyImageUrl:K,requestFn:$,cancelFn:Q,requestAnimFrame:x,cancelAnimFrame:r};function et(){}et.extend=function(t){function e(){c(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()}var i,n=e.__super__=this.prototype,o=R(n);for(i in(o.constructor=e).prototype=o,this)Object.prototype.hasOwnProperty.call(this,i)&&"prototype"!==i&&"__super__"!==i&&(e[i]=this[i]);if(t.statics&&l(e,t.statics),t.includes){var s=t.includes;if("undefined"!=typeof L&&L&&L.Mixin){s=d(s)?s:[s];for(var r=0;r<s.length;r++)s[r]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.",(new Error).stack)}l.apply(null,[o].concat(t.includes))}return l(o,t),delete o.statics,delete o.includes,o.options&&(o.options=n.options?R(n.options):{},l(o.options,t.options)),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){n.callInitHooks&&n.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=o._initHooks.length;t<e;t++)o._initHooks[t].call(this)}},e},et.include=function(t){var e=this.prototype.options;return l(this.prototype,t),t.options&&(this.prototype.options=e,this.mergeOptions(t.options)),this},et.mergeOptions=function(t){return l(this.prototype.options,t),this},et.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i),this};var e={on:function(t,e,i){if("object"==typeof t)for(var n in t)this._on(n,t[n],e);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i);return this},off:function(t,e,i){if(arguments.length)if("object"==typeof t)for(var n in t)this._off(n,t[n],e);else{t=F(t);for(var o=1===arguments.length,s=0,r=t.length;s<r;s++)o?this._off(t[s]):this._off(t[s],e,i)}else delete this._events;return this},_on:function(t,e,i,n){"function"!=typeof e?console.warn("wrong listener type: "+typeof e):!1===this._listens(t,e,i)&&(e={fn:e,ctx:i=i===this?void 0:i},n&&(e.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(e))},_off:function(t,e,i){var n,o,s;if(this._events&&(n=this._events[t]))if(1===arguments.length){if(this._firingCount)for(o=0,s=n.length;o<s;o++)n[o].fn=u;delete this._events[t]}else"function"!=typeof e?console.warn("wrong listener type: "+typeof e):!1!==(e=this._listens(t,e,i))&&(i=n[e],this._firingCount&&(i.fn=u,this._events[t]=n=n.slice()),n.splice(e,1))},fire:function(t,e,i){if(this.listens(t,i)){var n=l({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var o=this._events[t];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,r=o.length;s<r;s++){var a=o[s],h=a.fn;a.once&&this.off(t,h,a.ctx),h.call(a.ctx||this,n)}this._firingCount--}}i&&this._propagateEvent(n)}return this},listens:function(t,e,i,n){"string"!=typeof t&&console.warn('"string" type argument expected');var o=e,s=("function"!=typeof e&&(n=!!e,i=o=void 0),this._events&&this._events[t]);if(s&&s.length&&!1!==this._listens(t,o,i))return!0;if(n)for(var r in this._eventParents)if(this._eventParents[r].listens(t,e,i,n))return!0;return!1},_listens:function(t,e,i){if(this._events){var n=this._events[t]||[];if(!e)return!!n.length;i===this&&(i=void 0);for(var o=0,s=n.length;o<s;o++)if(n[o].fn===e&&n[o].ctx===i)return o}return!1},once:function(t,e,i){if("object"==typeof t)for(var n in t)this._on(n,t[n],e,!0);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i,!0);return this},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[h(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[h(t)],this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParents[e].fire(t.type,l({layer:t.target,propagatedFrom:t.target},t),!0)}},it=(e.addEventListener=e.on,e.removeEventListener=e.clearAllEventListeners=e.off,e.addOneTimeEventListener=e.once,e.fireEvent=e.fire,e.hasEventListeners=e.listens,et.extend(e));function p(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e}var nt=Math.trunc||function(t){return 0<t?Math.floor(t):Math.ceil(t)};function m(t,e,i){return t instanceof p?t:d(t)?new p(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new p(t.x,t.y):new p(t,e,i)}function f(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function _(t,e){return!t||t instanceof f?t:new f(t,e)}function s(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function g(t,e){return t instanceof s?t:new s(t,e)}function v(t,e,i){if(isNaN(t)||isNaN(e))throw new Error("Invalid LatLng object: ("+t+", "+e+")");this.lat=+t,this.lng=+e,void 0!==i&&(this.alt=+i)}function w(t,e,i){return t instanceof v?t:d(t)&&"object"!=typeof t[0]?3===t.length?new v(t[0],t[1],t[2]):2===t.length?new v(t[0],t[1]):null:null==t?t:"object"==typeof t&&"lat"in t?new v(t.lat,"lng"in t?t.lng:t.lon,t.alt):void 0===e?null:new v(t,e,i)}p.prototype={clone:function(){return new p(this.x,this.y)},add:function(t){return this.clone()._add(m(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(m(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new p(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new p(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=nt(this.x),this.y=nt(this.y),this},distanceTo:function(t){var e=(t=m(t)).x-this.x,t=t.y-this.y;return Math.sqrt(e*e+t*t)},equals:function(t){return(t=m(t)).x===this.x&&t.y===this.y},contains:function(t){return t=m(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+i(this.x)+", "+i(this.y)+")"}},f.prototype={extend:function(t){var e,i;if(t){if(t instanceof p||"number"==typeof t[0]||"x"in t)e=i=m(t);else if(e=(t=_(t)).min,i=t.max,!e||!i)return this;this.min||this.max?(this.min.x=Math.min(e.x,this.min.x),this.max.x=Math.max(i.x,this.max.x),this.min.y=Math.min(e.y,this.min.y),this.max.y=Math.max(i.y,this.max.y)):(this.min=e.clone(),this.max=i.clone())}return this},getCenter:function(t){return m((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return m(this.min.x,this.max.y)},getTopRight:function(){return m(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return(t=("number"==typeof t[0]||t instanceof p?m:_)(t))instanceof f?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.x<i.x,t=t.y>e.y&&n.y<i.y;return o&&t},isValid:function(){return!(!this.min||!this.max)},pad:function(t){var e=this.min,i=this.max,n=Math.abs(e.x-i.x)*t,t=Math.abs(e.y-i.y)*t;return _(m(e.x-n,e.y-t),m(i.x+n,i.y+t))},equals:function(t){return!!t&&(t=_(t),this.min.equals(t.getTopLeft())&&this.max.equals(t.getBottomRight()))}},s.prototype={extend:function(t){var e,i,n=this._southWest,o=this._northEast;if(t instanceof v)i=e=t;else{if(!(t instanceof s))return t?this.extend(w(t)||g(t)):this;if(e=t._southWest,i=t._northEast,!e||!i)return this}return n||o?(n.lat=Math.min(e.lat,n.lat),n.lng=Math.min(e.lng,n.lng),o.lat=Math.max(i.lat,o.lat),o.lng=Math.max(i.lng,o.lng)):(this._southWest=new v(e.lat,e.lng),this._northEast=new v(i.lat,i.lng)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,t=Math.abs(e.lng-i.lng)*t;return new s(new v(e.lat-n,e.lng-t),new v(i.lat+n,i.lng+t))},getCenter:function(){return new v((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new v(this.getNorth(),this.getWest())},getSouthEast:function(){return new v(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t=("number"==typeof t[0]||t instanceof v||"lat"in t?w:g)(t);var e,i,n=this._southWest,o=this._northEast;return t instanceof s?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.lat<i.lat,t=t.lng>e.lng&&n.lng<i.lng;return o&&t},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t,e){return!!t&&(t=g(t),this._southWest.equals(t.getSouthWest(),e)&&this._northEast.equals(t.getNorthEast(),e))},isValid:function(){return!(!this._southWest||!this._northEast)}};var ot={latLngToPoint:function(t,e){t=this.projection.project(t),e=this.scale(e);return this.transformation._transform(t,e)},pointToLatLng:function(t,e){e=this.scale(e),t=this.transformation.untransform(t,e);return this.projection.unproject(t)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){var e;return this.infinite?null:(e=this.projection.bounds,t=this.scale(t),new f(this.transformation.transform(e.min,t),this.transformation.transform(e.max,t)))},infinite:!(v.prototype={equals:function(t,e){return!!t&&(t=w(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===e?1e-9:e))},toString:function(t){return"LatLng("+i(this.lat,t)+", "+i(this.lng,t)+")"},distanceTo:function(t){return st.distance(this,w(t))},wrap:function(){return st.wrapLatLng(this)},toBounds:function(t){var t=180*t/40075017,e=t/Math.cos(Math.PI/180*this.lat);return g([this.lat-t,this.lng-e],[this.lat+t,this.lng+e])},clone:function(){return new v(this.lat,this.lng,this.alt)}}),wrapLatLng:function(t){var e=this.wrapLng?H(t.lng,this.wrapLng,!0):t.lng;return new v(this.wrapLat?H(t.lat,this.wrapLat,!0):t.lat,e,t.alt)},wrapLatLngBounds:function(t){var e=t.getCenter(),i=this.wrapLatLng(e),n=e.lat-i.lat,e=e.lng-i.lng;return 0==n&&0==e?t:(i=t.getSouthWest(),t=t.getNorthEast(),new s(new v(i.lat-n,i.lng-e),new v(t.lat-n,t.lng-e)))}},st=l({},ot,{wrapLng:[-180,180],R:6371e3,distance:function(t,e){var i=Math.PI/180,n=t.lat*i,o=e.lat*i,s=Math.sin((e.lat-t.lat)*i/2),e=Math.sin((e.lng-t.lng)*i/2),t=s*s+Math.cos(n)*Math.cos(o)*e*e,i=2*Math.atan2(Math.sqrt(t),Math.sqrt(1-t));return this.R*i}}),rt=6378137,rt={R:rt,MAX_LATITUDE:85.0511287798,project:function(t){var e=Math.PI/180,i=this.MAX_LATITUDE,i=Math.max(Math.min(i,t.lat),-i),i=Math.sin(i*e);return new p(this.R*t.lng*e,this.R*Math.log((1+i)/(1-i))/2)},unproject:function(t){var e=180/Math.PI;return new v((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*e,t.x*e/this.R)},bounds:new f([-(rt=rt*Math.PI),-rt],[rt,rt])};function at(t,e,i,n){d(t)?(this._a=t[0],this._b=t[1],this._c=t[2],this._d=t[3]):(this._a=t,this._b=e,this._c=i,this._d=n)}function ht(t,e,i,n){return new at(t,e,i,n)}at.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return t.x=(e=e||1)*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return new p((t.x/(e=e||1)-this._b)/this._a,(t.y/e-this._d)/this._c)}};var lt=l({},st,{code:"EPSG:3857",projection:rt,transformation:ht(lt=.5/(Math.PI*rt.R),.5,-lt,.5)}),ut=l({},lt,{code:"EPSG:900913"});function ct(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function dt(t,e){for(var i,n,o,s,r="",a=0,h=t.length;a<h;a++){for(i=0,n=(o=t[a]).length;i<n;i++)r+=(i?"L":"M")+(s=o[i]).x+" "+s.y;r+=e?b.svg?"z":"x":""}return r||"M0 0"}var _t=document.documentElement.style,pt="ActiveXObject"in window,mt=pt&&!document.addEventListener,n="msLaunchUri"in navigator&&!("documentMode"in document),ft=y("webkit"),gt=y("android"),vt=y("android 2")||y("android 3"),yt=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),yt=gt&&y("Google")&&yt<537&&!("AudioNode"in window),xt=!!window.opera,wt=!n&&y("chrome"),bt=y("gecko")&&!ft&&!xt&&!pt,Pt=!wt&&y("safari"),Lt=y("phantom"),o="OTransition"in _t,Tt=0===navigator.platform.indexOf("Win"),Mt=pt&&"transition"in _t,zt="WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix&&!vt,_t="MozPerspective"in _t,Ct=!window.L_DISABLE_3D&&(Mt||zt||_t)&&!o&&!Lt,Zt="undefined"!=typeof orientation||y("mobile"),St=Zt&&ft,Et=Zt&&zt,kt=!window.PointerEvent&&window.MSPointerEvent,Ot=!(!window.PointerEvent&&!kt),At="ontouchstart"in window||!!window.TouchEvent,Bt=!window.L_NO_TOUCH&&(At||Ot),It=Zt&&xt,Rt=Zt&&bt,Nt=1<(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI),Dt=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",u,e),window.removeEventListener("testPassiveEventSupport",u,e)}catch(t){}return t}(),jt=!!document.createElement("canvas").getContext,Ht=!(!document.createElementNS||!ct("svg").createSVGRect),Wt=!!Ht&&((Wt=document.createElement("div")).innerHTML="<svg/>","http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement("div"),e=(t.innerHTML='<v:shape adj="1"/>',t.firstChild);return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Wt,mac:0===navigator.platform.indexOf("Mac"),linux:0===navigator.platform.indexOf("Linux")},Ft=b.msPointer?"MSPointerDown":"pointerdown",Ut=b.msPointer?"MSPointerMove":"pointermove",Vt=b.msPointer?"MSPointerUp":"pointerup",qt=b.msPointer?"MSPointerCancel":"pointercancel",Gt={touchstart:Ft,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return"touchstart"!==e||Xt||(document.addEventListener(Ft,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn("wrong event specified:",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener("dblclick",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type="dblclick",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener("click",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ce=we(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===ce||"OTransition"===ce?ce+"End":"transitionend";function _e(t){return"string"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return"auto"===(i=i&&"auto"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||"",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=F(e),o=0,s=n.length;o<s;o++)t.classList.add(n[o]);else ve(t,e)||ye(t,((i=xe(t))?i+" ":"")+e)}function z(t,e){void 0!==t.classList?t.classList.remove(e):ye(t,W((" "+xe(t)+" ").replace(" "+e+" "," ")))}function ye(t,e){void 0===t.className.baseVal?t.className=e:t.className.baseVal=e}function xe(t){return void 0===(t=t.correspondingElement?t.correspondingElement:t).className.baseVal?t.className:t.className.baseVal}function C(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(t){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}}function we(t){for(var e=document.documentElement.style,i=0;i<t.length;i++)if(t[i]in e)return t[i];return!1}function be(t,e,i){e=e||new p(0,0);t.style[ue]=(b.ie3d?"translate("+e.x+"px,"+e.y+"px)":"translate3d("+e.x+"px,"+e.y+"px,0)")+(i?" scale("+i+")":"")}function Z(t,e){t._leaflet_pos=e,b.any3d?be(t,e):(t.style.left=e.x+"px",t.style.top=e.y+"px")}function Pe(t){return t._leaflet_pos||new p(0,0)}function Le(){S(window,"dragstart",O)}function Te(){k(window,"dragstart",O)}function Me(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(ze(),le=(he=t).style.outlineStyle,t.style.outlineStyle="none",S(window,"keydown",ze))}function ze(){he&&(he.style.outlineStyle=le,le=he=void 0,k(window,"keydown",ze))}function Ce(t){for(;!((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););return t}function Ze(t){var e=t.getBoundingClientRect();return{x:e.width/t.offsetWidth||1,y:e.height/t.offsetHeight||1,boundingClientRect:e}}ae="onselectstart"in document?(re=function(){S(window,"selectstart",O)},function(){k(window,"selectstart",O)}):(se=we(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]),re=function(){var t;se&&(t=document.documentElement.style,oe=t[se],t[se]="none")},function(){se&&(document.documentElement.style[se]=oe,oe=void 0)});pt={__proto__:null,TRANSFORM:ue,TRANSITION:ce,TRANSITION_END:de,get:_e,getStyle:pe,create:P,remove:T,empty:me,toFront:fe,toBack:ge,hasClass:ve,addClass:M,removeClass:z,setClass:ye,getClass:xe,setOpacity:C,testProp:we,setTransform:be,setPosition:Z,getPosition:Pe,get disableTextSelection(){return re},get enableTextSelection(){return ae},disableImageDrag:Le,enableImageDrag:Te,preventOutline:Me,restoreOutline:ze,getSizedParentNode:Ce,getScale:Ze};function S(t,e,i,n){if(e&&"object"==typeof e)for(var o in e)ke(t,o,e[o],i);else for(var s=0,r=(e=F(e)).length;s<r;s++)ke(t,e[s],i,n);return this}var E="_leaflet_events";function k(t,e,i,n){if(1===arguments.length)Se(t),delete t[E];else if(e&&"object"==typeof e)for(var o in e)Oe(t,o,e[o],i);else if(e=F(e),2===arguments.length)Se(t,function(t){return-1!==G(e,t)});else for(var s=0,r=e.length;s<r;s++)Oe(t,e[s],i,n);return this}function Se(t,e){for(var i in t[E]){var n=i.split(/\d/)[0];e&&!e(n)||Oe(t,n,null,null,i)}}var Ee={mouseenter:"mouseover",mouseleave:"mouseout",wheel:!("onwheel"in window)&&"mousewheel"};function ke(e,t,i,n){var o,s,r=t+h(i)+(n?"_"+h(n):"");e[E]&&e[E][r]||(s=o=function(t){return i.call(n||e,t||window.event)},!b.touchNative&&b.pointer&&0===t.indexOf("touch")?o=Jt(e,t,o):b.touch&&"dblclick"===t?o=ne(e,o):"addEventListener"in e?"touchstart"===t||"touchmove"===t||"wheel"===t||"mousewheel"===t?e.addEventListener(Ee[t]||t,o,!!b.passiveEvents&&{passive:!1}):"mouseenter"===t||"mouseleave"===t?e.addEventListener(Ee[t],o=function(t){t=t||window.event,We(e,t)&&s(t)},!1):e.addEventListener(t,s,!1):e.attachEvent("on"+t,o),e[E]=e[E]||{},e[E][r]=o)}function Oe(t,e,i,n,o){o=o||e+h(i)+(n?"_"+h(n):"");var s,r,i=t[E]&&t[E][o];i&&(!b.touchNative&&b.pointer&&0===e.indexOf("touch")?(n=t,r=i,Gt[s=e]?n.removeEventListener(Gt[s],r,!1):console.warn("wrong event specified:",s)):b.touch&&"dblclick"===e?(n=i,(r=t).removeEventListener("dblclick",n.dblclick),r.removeEventListener("click",n.simDblclick)):"removeEventListener"in t?t.removeEventListener(Ee[e]||e,i,!1):t.detachEvent("on"+e,i),t[E][o]=null)}function Ae(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,this}function Be(t){return ke(t,"wheel",Ae),this}function Ie(t){return S(t,"mousedown touchstart dblclick contextmenu",Ae),t._leaflet_disable_click=!0,this}function O(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function Re(t){return O(t),Ae(t),this}function Ne(t){if(t.composedPath)return t.composedPath();for(var e=[],i=t.target;i;)e.push(i),i=i.parentNode;return e}function De(t,e){var i,n;return e?(n=(i=Ze(e)).boundingClientRect,new p((t.clientX-n.left)/i.x-e.clientLeft,(t.clientY-n.top)/i.y-e.clientTop)):new p(t.clientX,t.clientY)}var je=b.linux&&b.chrome?window.devicePixelRatio:b.mac?3*window.devicePixelRatio:0<window.devicePixelRatio?2*window.devicePixelRatio:1;function He(t){return b.edge?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/je:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function We(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(t){return!1}return i!==t}var mt={__proto__:null,on:S,off:k,stopPropagation:Ae,disableScrollPropagation:Be,disableClickPropagation:Ie,preventDefault:O,stop:Re,getPropagationPath:Ne,getMousePosition:De,getWheelDelta:He,isExternalTarget:We,addListener:S,removeListener:k},Fe=it.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pe(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=x(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=1e3*this._duration;e<i?this._runFrame(this._easeOut(e/i),t):(this._runFrame(1),this._complete())},_runFrame:function(t,e){t=this._startPos.add(this._offset.multiplyBy(t));e&&t._round(),Z(this._el,t),this.fire("step")},_complete:function(){r(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),A=it.extend({options:{crs:lt,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,e){e=c(this,e),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(t),this._initLayout(),this._onResize=a(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),void 0!==e.zoom&&(this._zoom=this._limitZoom(e.zoom)),e.center&&void 0!==e.zoom&&this.setView(w(e.center),e.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=ce&&b.any3d&&!b.mobileOpera&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),S(this._proxy,de,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,i){if((e=void 0===e?this._zoom:this._limitZoom(e),t=this._limitCenter(w(t),e,this.options.maxBounds),i=i||{},this._stop(),this._loaded&&!i.reset&&!0!==i)&&(void 0!==i.animate&&(i.zoom=l({animate:i.animate},i.zoom),i.pan=l({animate:i.animate,duration:i.duration},i.pan)),this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,i.zoom):this._tryAnimatedPan(t,i.pan)))return clearTimeout(this._sizeTimer),this;return this._resetView(t,e,i.pan&&i.pan.noMoveStart),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=t,this)},zoomIn:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom+t,e)},zoomOut:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom-t,e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),o=this.getSize().divideBy(2),t=(t instanceof p?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),n=this.containerPointToLatLng(o.add(t));return this.setView(n,e,{zoom:i})},_getBoundsCenterZoom:function(t,e){e=e||{},t=t.getBounds?t.getBounds():g(t);var i=m(e.paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.getBoundsZoom(t,!1,i.add(n));return(o="number"==typeof e.maxZoom?Math.min(e.maxZoom,o):o)===1/0?{center:t.getCenter(),zoom:o}:(e=n.subtract(i).divideBy(2),n=this.project(t.getSouthWest(),o),i=this.project(t.getNorthEast(),o),{center:this.unproject(n.add(i).divideBy(2).add(e),o),zoom:o})},fitBounds:function(t,e){if((t=g(t)).isValid())return t=this._getBoundsCenterZoom(t,e),this.setView(t.center,t.zoom,e);throw new Error("Bounds are not valid.")},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t,e){var i;return e=e||{},(t=m(t).round()).x||t.y?(!0===e.animate||this.getSize().contains(t)?(this._panAnim||(this._panAnim=new Fe,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),!1!==e.animate?(M(this._mapPane,"leaflet-pan-anim"),i=this._getMapPanePos().subtract(t).round(),this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)):(this._rawPanBy(t),this.fire("move").fire("moveend"))):this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this):this.fire("moveend")},flyTo:function(n,o,t){if(!1===(t=t||{}).animate||!b.any3d)return this.setView(n,o,t);this._stop();var s=this.project(this.getCenter()),r=this.project(n),e=this.getSize(),a=this._zoom,h=(n=w(n),o=void 0===o?a:o,Math.max(e.x,e.y)),i=h*this.getZoomScale(a,o),l=r.distanceTo(s)||1,u=1.42,c=u*u;function d(t){t=(i*i-h*h+(t?-1:1)*c*c*l*l)/(2*(t?i:h)*c*l),t=Math.sqrt(t*t+1)-t;return t<1e-9?-18:Math.log(t)}function _(t){return(Math.exp(t)-Math.exp(-t))/2}function p(t){return(Math.exp(t)+Math.exp(-t))/2}var m=d(0);function f(t){return h*(p(m)*(_(t=m+u*t)/p(t))-_(m))/c}var g=Date.now(),v=(d(1)-m)/u,y=t.duration?1e3*t.duration:1e3*v*.8;return this._moveStart(!0,t.noMoveStart),function t(){var e=(Date.now()-g)/y,i=(1-Math.pow(1-e,1.5))*v;e<=1?(this._flyToFrame=x(t,this),this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(i)/l)),a),this.getScaleZoom(h/(e=i,h*(p(m)/p(m+u*e))),a),{flyTo:!0})):this._move(n,o)._moveEnd(!0)}.call(this),this},flyToBounds:function(t,e){t=this._getBoundsCenterZoom(t,e);return this.flyTo(t.center,t.zoom,e)},setMaxBounds:function(t){return t=g(t),this.listens("moveend",this._panInsideMaxBounds)&&this.off("moveend",this._panInsideMaxBounds),t.isValid()?(this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds)):(this.options.maxBounds=null,this)},setMinZoom:function(t){var e=this.options.minZoom;return this.options.minZoom=t,this._loaded&&e!==t&&(this.fire("zoomlevelschange"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var e=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&e!==t&&(this.fire("zoomlevelschange"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),"geolocation"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+t+"."}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)"number"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire("locationfound",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error("Map container not found.");if(t._leaflet_id)throw new Error("Map container is already initialized.");S(t,"scroll",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,"leaflet-container"+(b.touch?" leaflet-touch":"")+(b.retina?" leaflet-retina":"")+(b.ielt9?" leaflet-oldie":"")+(b.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":"")),pe(t,"position"));"absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Z(this._mapPane,new p(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(M(t.markerPane,"leaflet-zoom-hide"),M(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!We(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){"click"===t.type&&((a=l({},t)).type="preclick",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;s<i.length;s++)i[s].listens(e,!0)&&o.push(i[s]);n=o.concat(n)}if(n.length){"contextmenu"===e&&O(t);var r,a=n[0],h={originalEvent:t};for("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type&&(r=a.getLatLng&&(!a._radius||a._radius<=10),h.containerPoint=r?this.latLngToContainerPoint(a.getLatLng()):this.mouseEventToContainerPoint(t),h.layerPoint=this.containerPointToLayerPoint(h.containerPoint),h.latlng=r?a.getLatLng():this.layerPointToLatLng(h.layerPoint)),s=0;s<n.length;s++)if(n[s].fire(e,h,!0),h.originalEvent._stopped||!1===n[s].options.bubblingMouseEvents&&-1!==G(this._mouseEvents,e))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,e=this._handlers.length;t<e;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,{target:this}):this.on("load",t,e),this},_getMapPanePos:function(){return Pe(this._mapPane)||new p(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,e){return(t&&void 0!==e?this._getNewPixelOrigin(t,e):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,e,i){i=this._getNewPixelOrigin(i,e);return this.project(t,e)._subtract(i)},_latLngBoundsToNewLayerBounds:function(t,e,i){i=this._getNewPixelOrigin(i,e);return _([this.project(t.getSouthWest(),e)._subtract(i),this.project(t.getNorthWest(),e)._subtract(i),this.project(t.getSouthEast(),e)._subtract(i),this.project(t.getNorthEast(),e)._subtract(i)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){var n,o;return!i||(n=this.project(t,e),o=this.getSize().divideBy(2),o=new f(n.subtract(o),n.add(o)),o=this._getBoundsOffset(o,i,e),Math.abs(o.x)<=1&&Math.abs(o.y)<=1)?t:this.unproject(n.add(o),e)},_limitOffset:function(t,e){var i;return e?(i=new f((i=this.getPixelBounds()).min.add(t),i.max.add(t)),t.add(this._getBoundsOffset(i,e))):t},_getBoundsOffset:function(t,e,i){e=_(this.project(e.getNorthEast(),i),this.project(e.getSouthWest(),i)),i=e.min.subtract(t.min),e=e.max.subtract(t.max);return new p(this._rebound(i.x,-e.x),this._rebound(i.y,-e.y))},_rebound:function(t,e){return 0<t+e?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=b.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){z(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){t=this._getCenterOffset(t)._trunc();return!(!0!==(e&&e.animate)&&!this.getSize().contains(t))&&(this.panBy(t,e),!0)},_createAnimProxy:function(){var t=this._proxy=P("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",function(t){var e=ue,i=this._proxy.style[e];be(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),i===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){T(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();be(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&0<=t.propertyName.indexOf("transform")&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(!this._animatingZoom){if(i=i||{},!this._zoomAnimated||!1===i.animate||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var B=et.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,"leaflet-control"),-1!==i.indexOf("bottom")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0<t.screenX&&0<t.screenY&&this._map.getContainer().focus()}}),Ve=(A.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var i=this._controlCorners={},n="leaflet-",o=this._controlContainer=P("div",n+"control-container",this._container);function t(t,e){i[t+e]=P("div",n+t+" "+n+e,o)}t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)T(this._controlCorners[t]);T(this._controlContainer),delete this._controlCorners,delete this._controlContainer}}),B.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i<n?-1:n<i?1:0}},initialize:function(t,e,i){for(var n in c(this,i),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,this._preventClick=!1,t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),(this._map=t).on("zoomend",this._checkDisabledLayers,this);for(var e=0;e<this._layers.length;e++)this._layers[e].layer.on("add remove",this._onLayerChange,this);return this._container},addTo:function(t){return B.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off("zoomend",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off("add remove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._map?this._update():this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._map?this._update():this},removeLayer:function(t){t.off("add remove",this._onLayerChange,this);t=this._getLayer(h(t));return t&&this._layers.splice(this._layers.indexOf(t),1),this._map?this._update():this},expand:function(){M(this._container,"leaflet-control-layers-expanded"),this._section.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._section.clientHeight?(M(this._section,"leaflet-control-layers-scrollbar"),this._section.style.height=t+"px"):z(this._section,"leaflet-control-layers-scrollbar"),this._checkDisabledLayers(),this},collapse:function(){return z(this._container,"leaflet-control-layers-expanded"),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=P("div",t),i=this.options.collapsed,n=(e.setAttribute("aria-haspopup",!0),Ie(e),Be(e),this._section=P("section",t+"-list")),o=(i&&(this._map.on("click",this.collapse,this),S(e,{mouseenter:this._expandSafely,mouseleave:this.collapse},this)),this._layersLink=P("a",t+"-toggle",e));o.href="#",o.title="Layers",o.setAttribute("role","button"),S(o,{keydown:function(t){13===t.keyCode&&this._expandSafely()},click:function(t){O(t),this._expandSafely()}},this),i||this.expand(),this._baseLayersList=P("div",t+"-base",n),this._separator=P("div",t+"-separator",n),this._overlaysList=P("div",t+"-overlays",n),e.appendChild(n)},_getLayer:function(t){for(var e=0;e<this._layers.length;e++)if(this._layers[e]&&h(this._layers[e].layer)===t)return this._layers[e]},_addLayer:function(t,e,i){this._map&&t.on("add remove",this._onLayerChange,this),this._layers.push({layer:t,name:e,overlay:i}),this.options.sortLayers&&this._layers.sort(a(function(t,e){return this.options.sortFunction(t.layer,e.layer,t.name,e.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(this._container){me(this._baseLayersList),me(this._overlaysList),this._layerControlInputs=[];for(var t,e,i,n=0,o=0;o<this._layers.length;o++)i=this._layers[o],this._addItem(i),e=e||i.overlay,t=t||!i.overlay,n+=i.overlay?0:1;this.options.hideSingleBase&&(this._baseLayersList.style.display=(t=t&&1<n)?"":"none"),this._separator.style.display=e&&t?"":"none"}return this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(h(t.target)),t=e.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;t&&this._map.fire(t,e)},_createRadioElement:function(t,e){t='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"'+(e?' checked="checked"':"")+"/>",e=document.createElement("div");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement("label"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,"click",this._onInputClick,this),document.createElement("span")),o=(n.innerHTML=" "+t.name,document.createElement("span"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){if(!this._preventClick){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()}},_checkDisabledLayers:function(){for(var t,e,i=this._layerControlInputs,n=this._map.getZoom(),o=i.length-1;0<=o;o--)t=i[o],e=this._getLayer(t.layerId).layer,t.disabled=void 0!==e.options.minZoom&&n<e.options.minZoom||void 0!==e.options.maxZoom&&n>e.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section,e=(this._preventClick=!0,S(t,"click",O),this.expand(),this);setTimeout(function(){k(t,"click",O),e._preventClick=!1})}})),qe=B.extend({options:{position:"topleft",zoomInText:'<span aria-hidden="true">+</span>',zoomInTitle:"Zoom in",zoomOutText:'<span aria-hidden="true">&#x2212;</span>',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=P("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P("a",i,n);return i.innerHTML=t,i.href="#",i.title=e,i.setAttribute("role","button"),i.setAttribute("aria-label",e),Ie(i),S(i,"click",Re),S(i,"click",o,this),S(i,"click",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}}),Ge=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))}),B.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=P("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P("div",e,i)),t.imperial&&(this._iScale=P("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+" m":e/1e3+" km",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280<t?(i=this._getRoundNum(e=t/5280),this._updateScale(this._iScale,i+" mi",i/e)):(i=this._getRoundNum(t),this._updateScale(this._iScale,i+" ft",i/t))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),t=t/e;return e*(t=10<=t?10:5<=t?5:3<=t?3:2<=t?2:1)}})),Ke=B.extend({options:{position:"bottomright",prefix:'<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">'+(b.inlineSvg?'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg> ':"")+"Leaflet</a>"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P("div","leaflet-control-attribution"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(", ")),this._container.innerHTML=i.join(' <span aria-hidden="true">|</span> ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ke).addTo(this)}),B.Layers=Ve,B.Zoom=qe,B.Scale=Ge,B.Attribution=Ke,Ue.layers=function(t,e,i){return new Ve(t,e,i)},Ue.zoom=function(t){return new qe(t)},Ue.scale=function(t){return new Ge(t)},Ue.attribution=function(t){return new Ke(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Ye=b.touch?"touchstart mousedown":"mousedown",Xe=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Xe._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,"leaflet-zoom-anim")||(t.touches&&1!==t.touches.length?Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i="mousedown"===t.type,S(document,i?"mousemove":"touchmove",this._onMove,this),S(document,i?"mouseup":"touchend touchcancel",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1<t.touches.length?this._moved=!0:!(e=new p((e=t.touches&&1===t.touches.length?t.touches[0]:t).clientX,e.clientY)._subtract(this._startPoint)).x&&!e.y||Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,O(t),this._moved||(this.fire("dragstart"),this._moved=!0,M(document.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),M(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(e),this._moving=!0,this._lastEvent=t,this._updatePosition()))},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire("predrag",t),Z(this._element,this._newPos),this.fire("drag",t)},_onUp:function(){this._enabled&&this.finishDrag()},finishDrag:function(t){z(document.body,"leaflet-dragging"),this._lastTarget&&(z(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null),k(document,"mousemove touchmove",this._onMove,this),k(document,"mouseup touchend touchcancel",this._onUp,this),Te(),ae();var e=this._moved&&this._moving;this._moving=!1,Xe._dragging=!1,e&&this.fire("dragend",{noInertia:t,distance:this._newPos.distanceTo(this._startPos)})}});function Je(t,e,i){for(var n,o,s,r,a,h,l,u=[1,4,2,8],c=0,d=t.length;c<d;c++)t[c]._code=si(t[c],e);for(s=0;s<4;s++){for(h=u[s],n=[],c=0,o=(d=t.length)-1;c<d;o=c++)r=t[c],a=t[o],r._code&h?a._code&h||((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)):(a._code&h&&((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)),n.push(r));t=n}return t}function $e(t,e){var i,n,o,s,r,a,h;if(!t||0===t.length)throw new Error("latlngs not passed");I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);for(var l=w([0,0]),u=g(t),c=(u.getNorthWest().distanceTo(u.getSouthWest())*u.getNorthEast().distanceTo(u.getNorthWest())<1700&&(l=Qe(t)),t.length),d=[],_=0;_<c;_++){var p=w(t[_]);d.push(e.project(w([p.lat-l.lat,p.lng-l.lng])))}for(_=r=a=h=0,i=c-1;_<c;i=_++)n=d[_],o=d[i],s=n.y*o.x-o.y*n.x,a+=(n.x+o.x)*s,h+=(n.y+o.y)*s,r+=3*s;u=0===r?d[0]:[a/r,h/r],u=e.unproject(m(u));return w([u.lat+l.lat,u.lng+l.lng])}function Qe(t){for(var e=0,i=0,n=0,o=0;o<t.length;o++){var s=w(t[o]);e+=s.lat,i+=s.lng,n++}return w([e/n,i/n])}var ti,gt={__proto__:null,clipPolygon:Je,polygonCenter:$e,centroid:Qe};function ei(t,e){if(e&&t.length){var i=t=function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;n<s;n++)(function(t,e){var i=e.x-t.x,e=e.y-t.y;return i*i+e*e})(t[n],t[o])>e&&(i.push(t[n]),o=n);o<s-1&&i.push(t[s-1]);return i}(t,e=e*e),n=i.length,o=new(typeof Uint8Array!=void 0+""?Uint8Array:Array)(n);o[0]=o[n-1]=1,function t(e,i,n,o,s){var r,a,h,l=0;for(a=o+1;a<=s-1;a++)h=ri(e[a],e[o],e[s],!0),l<h&&(r=a,l=h);n<l&&(i[r]=1,t(e,i,n,o,r),t(e,i,n,r,s))}(i,o,e,0,n-1);var s,r=[];for(s=0;s<n;s++)o[s]&&r.push(i[s]);return r}return t.slice()}function ii(t,e,i){return Math.sqrt(ri(t,e,i,!0))}function ni(t,e,i,n,o){var s,r,a,h=n?ti:si(t,i),l=si(e,i);for(ti=l;;){if(!(h|l))return[t,e];if(h&l)return!1;a=si(r=oi(t,e,s=h||l,i,o),i),s===h?(t=r,h=a):(e=r,l=a)}}function oi(t,e,i,n,o){var s,r,a=e.x-t.x,e=e.y-t.y,h=n.min,n=n.max;return 8&i?(s=t.x+a*(n.y-t.y)/e,r=n.y):4&i?(s=t.x+a*(h.y-t.y)/e,r=h.y):2&i?(s=n.x,r=t.y+e*(n.x-t.x)/a):1&i&&(s=h.x,r=t.y+e*(h.x-t.x)/a),new p(s,r,o)}function si(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i}function ri(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0<a&&(1<(a=((t.x-o)*s+(t.y-e)*r)/a)?(o=i.x,e=i.y):0<a&&(o+=s*a,e+=r*a)),s=t.x-o,r=t.y-e,n?s*s+r*r:new p(o,e)}function I(t){return!d(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function ai(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),I(t)}function hi(t,e){var i,n,o,s,r,a;if(!t||0===t.length)throw new Error("latlngs not passed");I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"),t=t[0]);for(var h=w([0,0]),l=g(t),u=(l.getNorthWest().distanceTo(l.getSouthWest())*l.getNorthEast().distanceTo(l.getNorthWest())<1700&&(h=Qe(t)),t.length),c=[],d=0;d<u;d++){var _=w(t[d]);c.push(e.project(w([_.lat-h.lat,_.lng-h.lng])))}for(i=d=0;d<u-1;d++)i+=c[d].distanceTo(c[d+1])/2;if(0===i)a=c[0];else for(n=d=0;d<u-1;d++)if(o=c[d],s=c[d+1],i<(n+=r=o.distanceTo(s))){a=[s.x-(r=(n-i)/r)*(s.x-o.x),s.y-r*(s.y-o.y)];break}l=e.unproject(m(a));return w([l.lat+h.lat,l.lng+h.lng])}var vt={__proto__:null,simplify:ei,pointToSegmentDistance:ii,closestPointOnSegment:function(t,e,i){return ri(t,e,i)},clipSegment:ni,_getEdgeIntersection:oi,_getBitCode:si,_sqClosestPointOnSegment:ri,isFlat:I,_flat:ai,polylineCenter:hi},yt={project:function(t){return new p(t.lng,t.lat)},unproject:function(t){return new v(t.y,t.x)},bounds:new f([-180,-90],[180,90])},xt={R:6378137,R_MINOR:6356752.314245179,bounds:new f([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,o=Math.sqrt(1-o*o),s=o*Math.sin(n),s=Math.tan(Math.PI/4-n/2)/Math.pow((1-s)/(1+s),o/2),n=-i*Math.log(Math.max(s,1e-10));return new p(t.lng*e*i,n)},unproject:function(t){for(var e,i=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,l=.1;h<15&&1e-7<Math.abs(l);h++)e=s*Math.sin(a),e=Math.pow((1-e)/(1+e),s/2),a+=l=Math.PI/2-2*Math.atan(r*e)-a;return new v(a*i,t.x*i/n)}},wt={__proto__:null,LonLat:yt,Mercator:xt,SphericalMercator:rt},Pt=l({},st,{code:"EPSG:3395",projection:xt,transformation:ht(bt=.5/(Math.PI*xt.R),.5,-bt,.5)}),li=l({},st,{code:"EPSG:4326",projection:yt,transformation:ht(1/180,1,-1/180,.5)}),Lt=l({},ot,{projection:yt,transformation:ht(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,e=e.lat-t.lat;return Math.sqrt(i*i+e*e)},infinite:!0}),o=(ot.Earth=st,ot.EPSG3395=Pt,ot.EPSG3857=lt,ot.EPSG900913=ut,ot.EPSG4326=li,ot.Simple=Lt,it.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[h(t)]=this},removeInteractiveTarget:function(t){return delete this._map._targets[h(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e,i=t.target;i.hasLayer(this)&&(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents&&(e=this.getEvents(),i.on(e,this),this.once("remove",function(){i.off(e,this)},this)),this.onAdd(i),this.fire("add"),i.fire("layeradd",{layer:this}))}})),ui=(A.include({addLayer:function(t){var e;if(t._layerAdd)return e=h(t),this._layers[e]||((this._layers[e]=t)._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this;throw new Error("The provided object is not a Layer.")},removeLayer:function(t){var e=h(t);return this._layers[e]&&(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null),this},hasLayer:function(t){return h(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){for(var e=0,i=(t=t?d(t)?t:[t]:[]).length;e<i;e++)this.addLayer(t[e])},_addZoomLimit:function(t){isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[h(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){t=h(t);this._zoomBoundLayers[t]&&(delete this._zoomBoundLayers[t],this._updateZoomLevels())},_updateZoomLevels:function(){var t,e=1/0,i=-1/0,n=this._getZoomSpan();for(t in this._zoomBoundLayers)var o=this._zoomBoundLayers[t].options,e=void 0===o.minZoom?e:Math.min(e,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom);this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=e===1/0?void 0:e,n!==this._getZoomSpan()&&this.fire("zoomlevelschange"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}}),o.extend({initialize:function(t,e){var i,n;if(c(this,e),this._layers={},t)for(i=0,n=t.length;i<n;i++)this.addLayer(t[i])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){t=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[t]&&this._map.removeLayer(this._layers[t]),delete this._layers[t],this},hasLayer:function(t){return("number"==typeof t?t:this.getLayerId(t))in this._layers},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)(i=this._layers[e])[t]&&i[t].apply(i,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:h})),ci=ui.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),ui.prototype.addLayer.call(this,t),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?((t=t in this._layers?this._layers[t]:t).removeEventParent(this),ui.prototype.removeLayer.call(this,t),this.fire("layerremove",{layer:t})):this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t,e=new s;for(t in this._layers){var i=this._layers[t];e.extend(i.getBounds?i.getBounds():i.getLatLng())}return e}}),di=et.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0],crossOrigin:!1},initialize:function(t){c(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(i)return i=this._createImg(i,e&&"IMG"===e.tagName?e:null),this._setIconStyles(i,t),!this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),i;if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null},_setIconStyles:function(t,e){var i=this.options,n=i[e+"Size"],n=m(n="number"==typeof n?[n,n]:n),o=m("shadow"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2,!0));t.className="leaflet-marker-"+e+" "+(i.className||""),o&&(t.style.marginLeft=-o.x+"px",t.style.marginTop=-o.y+"px"),n&&(t.style.width=n.x+"px",t.style.height=n.y+"px")},_createImg:function(t,e){return(e=e||document.createElement("img")).src=t,e},_getIconUrl:function(t){return b.retina&&this.options[t+"RetinaUrl"]||this.options[t+"Url"]}});var _i=di.extend({options:{iconUrl:"marker-icon.png",iconRetinaUrl:"marker-icon-2x.png",shadowUrl:"marker-shadow.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return"string"!=typeof _i.imagePath&&(_i.imagePath=this._detectIconPath()),(this.options.imagePath||_i.imagePath)+di.prototype._getIconUrl.call(this,t)},_stripUrl:function(t){function e(t,e,i){return(e=e.exec(t))&&e[i]}return(t=e(t,/^url\((['"])?(.+)\1\)$/,2))&&e(t,/^(.*)marker-icon\.png$/,1)},_detectIconPath:function(){var t=P("div","leaflet-default-icon-path",document.body),e=pe(t,"background-image")||pe(t,"backgroundImage");return document.body.removeChild(t),(e=this._stripUrl(e))?e:(t=document.querySelector('link[href$="leaflet.css"]'))?t.href.substring(0,t.href.length-"leaflet.css".length-1):""}}),pi=n.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new Xe(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),M(t,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&z(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var e=this._marker,i=e._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=Pe(e._icon),r=i.getPixelBounds(),a=i.getPixelOrigin(),a=_(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));a.contains(s)||(o=m((Math.max(a.max.x,s.x)-a.max.x)/(r.max.x-a.max.x)-(Math.min(a.min.x,s.x)-a.min.x)/(r.min.x-a.min.x),(Math.max(a.max.y,s.y)-a.max.y)/(r.max.y-a.max.y)-(Math.min(a.min.y,s.y)-a.min.y)/(r.min.y-a.min.y)).multiplyBy(n),i.panBy(o,{animate:!1}),this._draggable._newPos._add(o),this._draggable._startPos._add(o),Z(e._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup&&this._marker.closePopup(),this._marker.fire("movestart").fire("dragstart")},_onPreDrag:function(t){this._marker.options.autoPan&&(r(this._panRequest),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDrag:function(t){var e=this._marker,i=e._shadow,n=Pe(e._icon),o=e._map.layerPointToLatLng(n);i&&Z(i,n),e._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,e.fire("move",t).fire("drag",t)},_onDragEnd:function(t){r(this._panRequest),delete this._oldLatLng,this._marker.fire("moveend").fire("dragend",t)}}),mi=o.extend({options:{icon:new _i,interactive:!0,keyboard:!0,title:"",alt:"Marker",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:"markerPane",shadowPane:"shadowPane",bubblingMouseEvents:!1,autoPanOnFocus:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,e){c(this,e),this._latlng=w(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on("zoomanim",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off("zoomanim",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.update(),this.fire("move",{oldLatLng:e,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},getIcon:function(){return this.options.icon},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){var t;return this._icon&&this._map&&(t=this._map.latLngToLayerPoint(this._latlng).round(),this._setPos(t)),this},_initIcon:function(){var t=this.options,e="leaflet-zoom-"+(this._zoomAnimated?"animated":"hide"),i=t.icon.createIcon(this._icon),n=!1,i=(i!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(i.title=t.title),"IMG"===i.tagName&&(i.alt=t.alt||"")),M(i,e),t.keyboard&&(i.tabIndex="0",i.setAttribute("role","button")),this._icon=i,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&S(i,"focus",this._panOnFocus,this),t.icon.createShadow(this._shadow)),o=!1;i!==this._shadow&&(this._removeShadow(),o=!0),i&&(M(i,e),i.alt=""),this._shadow=i,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),i&&o&&this.getPane(t.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&k(this._icon,"focus",this._panOnFocus,this),T(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&T(this._shadow),this._shadow=null},_setPos:function(t){this._icon&&Z(this._icon,t),this._shadow&&Z(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon&&(this._icon.style.zIndex=this._zIndex+t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(t)},_initInteraction:function(){var t;this.options.interactive&&(M(this._icon,"leaflet-interactive"),this.addInteractiveTarget(this._icon),pi&&(t=this.options.draggable,this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new pi(this),t&&this.dragging.enable()))},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;this._icon&&C(this._icon,t),this._shadow&&C(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_panOnFocus:function(){var t,e,i=this._map;i&&(t=(e=this.options.icon.options).iconSize?m(e.iconSize):m(0,0),e=e.iconAnchor?m(e.iconAnchor):m(0,0),i.panInside(this._latlng,{paddingTopLeft:e,paddingBottomRight:t.subtract(e)}))},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});var fi=o.extend({options:{stroke:!0,color:"#3388ff",weight:3,opacity:1,lineCap:"round",lineJoin:"round",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:"evenodd",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return c(this,t),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&t&&Object.prototype.hasOwnProperty.call(t,"weight")&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(this._renderer.options.tolerance||0)}}),gi=fi.extend({options:{fill:!0,radius:10},initialize:function(t,e){c(this,e),this._latlng=w(t),this._radius=this.options.radius},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.redraw(),this.fire("move",{oldLatLng:e,latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var e=t&&t.radius||this._radius;return fi.prototype.setStyle.call(this,t),this.setRadius(e),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,e=this._radiusY||t,i=this._clickTolerance(),t=[t+i,e+i];this._pxBounds=new f(this._point.subtract(t),this._point.add(t))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}});var vi=gi.extend({initialize:function(t,e,i){if(c(this,e="number"==typeof e?l({},i,{radius:e}):e),this._latlng=w(t),isNaN(this.options.radius))throw new Error("Circle radius cannot be NaN");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new s(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:fi.prototype.setStyle,_project:function(){var t,e,i,n,o,s=this._latlng.lng,r=this._latlng.lat,a=this._map,h=a.options.crs;h.distance===st.distance?(n=Math.PI/180,o=this._mRadius/st.R/n,t=a.project([r+o,s]),e=a.project([r-o,s]),e=t.add(e).divideBy(2),i=a.unproject(e).lat,n=Math.acos((Math.cos(o*n)-Math.sin(r*n)*Math.sin(i*n))/(Math.cos(r*n)*Math.cos(i*n)))/n,!isNaN(n)&&0!==n||(n=o/Math.cos(Math.PI/180*r)),this._point=e.subtract(a.getPixelOrigin()),this._radius=isNaN(n)?0:e.x-a.project([i,s-n]).x,this._radiusY=e.y-t.y):(o=h.unproject(h.project(this._latlng).subtract([this._mRadius,0])),this._point=a.latLngToLayerPoint(this._latlng),this._radius=this._point.x-a.latLngToLayerPoint(o).x),this._updateBounds()}});var yi=fi.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,e){c(this,e),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var e=1/0,i=null,n=ri,o=0,s=this._parts.length;o<s;o++)for(var r=this._parts[o],a=1,h=r.length;a<h;a++){var l,u,c=n(t,l=r[a-1],u=r[a],!0);c<e&&(e=c,i=n(t,l,u))}return i&&(i.distance=Math.sqrt(e)),i},getCenter:function(){if(this._map)return hi(this._defaultShape(),this._map.options.crs);throw new Error("Must add layer to map before using getCenter()")},getBounds:function(){return this._bounds},addLatLng:function(t,e){return e=e||this._defaultShape(),t=w(t),e.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new s,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return I(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var e=[],i=I(t),n=0,o=t.length;n<o;n++)i?(e[n]=w(t[n]),this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);return e},_project:function(){var t=new f;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t),this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t,this._updateBounds())},_updateBounds:function(){var t=this._clickTolerance(),t=new p(t,t);this._rawPxBounds&&(this._pxBounds=new f([this._rawPxBounds.min.subtract(t),this._rawPxBounds.max.add(t)]))},_projectLatlngs:function(t,e,i){var n,o,s=t[0]instanceof v,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),i.extend(o[n]);e.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],e,i)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var e,i,n,o,s=this._parts,r=0,a=0,h=this._rings.length;r<h;r++)for(e=0,i=(o=this._rings[r]).length;e<i-1;e++)(n=ni(o[e],o[e+1],t,e,!0))&&(s[a]=s[a]||[],s[a].push(n[0]),n[1]===o[e+1]&&e!==i-2||(s[a].push(n[1]),a++))},_simplifyPoints:function(){for(var t=this._parts,e=this.options.smoothFactor,i=0,n=t.length;i<n;i++)t[i]=ei(t[i],e)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,e){var i,n,o,s,r,a,h=this._clickTolerance();if(this._pxBounds&&this._pxBounds.contains(t))for(i=0,s=this._parts.length;i<s;i++)for(n=0,o=(r=(a=this._parts[i]).length)-1;n<r;o=n++)if((e||0!==n)&&ii(t,a[o],a[n])<=h)return!0;return!1}});yi._flat=ai;var xi=yi.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(this._map)return $e(this._defaultShape(),this._map.options.crs);throw new Error("Must add layer to map before using getCenter()")},_convertLatLngs:function(t){var t=yi.prototype._convertLatLngs.call(this,t),e=t.length;return 2<=e&&t[0]instanceof v&&t[0].equals(t[e-1])&&t.pop(),t},_setLatLngs:function(t){yi.prototype._setLatLngs.call(this,t),I(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return(I(this._latlngs[0])?this._latlngs:this._latlngs[0])[0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,e=new p(e,e),t=new f(t.min.subtract(e),t.max.add(e));if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var i,n=0,o=this._rings.length;n<o;n++)(i=Je(this._rings[n],t,!0)).length&&this._parts.push(i)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var e,i,n,o,s,r,a,h,l=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(e=this._parts[o]).length)-1;s<h;r=s++)i=e[s],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||yi.prototype._containsPoint.call(this,t,!0)}});var wi=ci.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;e<i;e++)((n=o[e]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s,r=this.options;return(!r.filter||r.filter(t))&&(s=bi(t,r))?(s.feature=Zi(t),s.defaultOptions=s.options,this.resetStyle(s),r.onEachFeature&&r.onEachFeature(t,s),this.addLayer(s)):this},resetStyle:function(t){return void 0===t?this.eachLayer(this.resetStyle,this):(t.options=l({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this)},setStyle:function(e){return this.eachLayer(function(t){this._setLayerStyle(t,e)},this)},_setLayerStyle:function(t,e){t.setStyle&&("function"==typeof e&&(e=e(t.feature)),t.setStyle(e))}});function bi(t,e){var i,n,o,s,r="Feature"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],l=e&&e.pointToLayer,u=e&&e.coordsToLatLng||Li;if(!a&&!r)return null;switch(r.type){case"Point":return Pi(l,t,i=u(a),e);case"MultiPoint":for(o=0,s=a.length;o<s;o++)i=u(a[o]),h.push(Pi(l,t,i,e));return new ci(h);case"LineString":case"MultiLineString":return n=Ti(a,"LineString"===r.type?0:1,u),new yi(n,e);case"Polygon":case"MultiPolygon":return n=Ti(a,"Polygon"===r.type?1:2,u),new xi(n,e);case"GeometryCollection":for(o=0,s=r.geometries.length;o<s;o++){var c=bi({geometry:r.geometries[o],type:"Feature",properties:t.properties},e);c&&h.push(c)}return new ci(h);case"FeatureCollection":for(o=0,s=r.features.length;o<s;o++){var d=bi(r.features[o],e);d&&h.push(d)}return new ci(h);default:throw new Error("Invalid GeoJSON object.")}}function Pi(t,e,i,n){return t?t(e,i):new mi(i,n&&n.markersInheritOptions&&n)}function Li(t){return new v(t[1],t[0],t[2])}function Ti(t,e,i){for(var n,o=[],s=0,r=t.length;s<r;s++)n=e?Ti(t[s],e-1,i):(i||Li)(t[s]),o.push(n);return o}function Mi(t,e){return void 0!==(t=w(t)).alt?[i(t.lng,e),i(t.lat,e),i(t.alt,e)]:[i(t.lng,e),i(t.lat,e)]}function zi(t,e,i,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(e?zi(t[s],I(t[s])?0:e-1,i,n):Mi(t[s],n));return!e&&i&&0<o.length&&o.push(o[0].slice()),o}function Ci(t,e){return t.feature?l({},t.feature,{geometry:e}):Zi(e)}function Zi(t){return"Feature"===t.type||"FeatureCollection"===t.type?t:{type:"Feature",properties:{},geometry:t}}Tt={toGeoJSON:function(t){return Ci(this,{type:"Point",coordinates:Mi(this.getLatLng(),t)})}};function Si(t,e){return new wi(t,e)}mi.include(Tt),vi.include(Tt),gi.include(Tt),yi.include({toGeoJSON:function(t){var e=!I(this._latlngs);return Ci(this,{type:(e?"Multi":"")+"LineString",coordinates:zi(this._latlngs,e?1:0,!1,t)})}}),xi.include({toGeoJSON:function(t){var e=!I(this._latlngs),i=e&&!I(this._latlngs[0]),t=zi(this._latlngs,i?2:e?1:0,!0,t);return Ci(this,{type:(i?"Multi":"")+"Polygon",coordinates:t=e?t:[t]})}}),ui.include({toMultiPoint:function(e){var i=[];return this.eachLayer(function(t){i.push(t.toGeoJSON(e).geometry.coordinates)}),Ci(this,{type:"MultiPoint",coordinates:i})},toGeoJSON:function(e){var i,n,t=this.feature&&this.feature.geometry&&this.feature.geometry.type;return"MultiPoint"===t?this.toMultiPoint(e):(i="GeometryCollection"===t,n=[],this.eachLayer(function(t){t.toGeoJSON&&(t=t.toGeoJSON(e),i?n.push(t.geometry):"FeatureCollection"===(t=Zi(t)).type?n.push.apply(n,t.features):n.push(t))}),i?Ci(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n})}});var Mt=Si,Ei=o.extend({options:{opacity:1,alt:"",interactive:!1,crossOrigin:!1,errorOverlayUrl:"",zIndex:1,className:""},initialize:function(t,e,i){this._url=t,this._bounds=g(e),c(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(M(this._image,"leaflet-interactive"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){T(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&fe(this._image),this},bringToBack:function(){return this._map&&ge(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=g(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t="IMG"===this._url.tagName,e=this._image=t?this._url:P("img");M(e,"leaflet-image-layer"),this._zoomAnimated&&M(e,"leaflet-zoom-animated"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onload=a(this.fire,this,"load"),e.onerror=a(this._overlayOnError,this,"error"),!this.options.crossOrigin&&""!==this.options.crossOrigin||(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=e.src:(e.src=this._url,e.alt=this.options.alt)},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),t=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;be(this._image,t,e)},_reset:function(){var t=this._image,e=new f(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();Z(t,e.min),t.style.width=i.x+"px",t.style.height=i.y+"px"},_updateOpacity:function(){C(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire("error");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),ki=Ei.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t="VIDEO"===this._url.tagName,e=this._image=t?this._url:P("video");if(M(e,"leaflet-image-layer"),this._zoomAnimated&&M(e,"leaflet-zoom-animated"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onloadeddata=a(this.fire,this,"load"),t){for(var i=e.getElementsByTagName("source"),n=[],o=0;o<i.length;o++)n.push(i[o].src);this._url=0<i.length?n:[e.src]}else{d(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var s=0;s<this._url.length;s++){var r=P("source");r.src=this._url[s],e.appendChild(r)}}}});var Oi=Ei.extend({_initImage:function(){var t=this._image=this._url;M(t,"leaflet-image-layer"),this._zoomAnimated&&M(t,"leaflet-zoom-animated"),this.options.className&&M(t,this.options.className),t.onselectstart=u,t.onmousemove=u}});var Ai=o.extend({options:{interactive:!1,offset:[0,0],className:"",pane:void 0,content:""},initialize:function(t,e){t&&(t instanceof v||d(t))?(this._latlng=w(t),c(this,e)):(c(this,t),this._source=e),this.options.content&&(this._content=this.options.content)},openOn:function(t){return(t=arguments.length?t:this._source._map).hasLayer(this)||t.addLayer(this),this},close:function(){return this._map&&this._map.removeLayer(this),this},toggle:function(t){return this._map?this.close():(arguments.length?this._source=t:t=this._source,this._prepareOpen(),this.openOn(t._map)),this},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&C(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&C(this._container,1),this.bringToFront(),this.options.interactive&&(M(this._container,"leaflet-interactive"),this.addInteractiveTarget(this._container))},onRemove:function(t){t._fadeAnimated?(C(this._container,0),this._removeTimeout=setTimeout(a(T,void 0,this._container),200)):T(this._container),this.options.interactive&&(z(this._container,"leaflet-interactive"),this.removeInteractiveTarget(this._container))},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=w(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&fe(this._container),this},bringToBack:function(){return this._map&&ge(this._container),this},_prepareOpen:function(t){if(!(i=this._source)._map)return!1;if(i instanceof ci){var e,i=null,n=this._source._layers;for(e in n)if(n[e]._map){i=n[e];break}if(!i)return!1;this._source=i}if(!t)if(i.getCenter)t=i.getCenter();else if(i.getLatLng)t=i.getLatLng();else{if(!i.getBounds)throw new Error("Unable to get source layer LatLng.");t=i.getBounds().getCenter()}return this.setLatLng(t),this._map&&this.update(),!0},_updateContent:function(){if(this._content){var t=this._contentNode,e="function"==typeof this._content?this._content(this._source||this):this._content;if("string"==typeof e)t.innerHTML=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(e)}this.fire("contentupdate")}},_updatePosition:function(){var t,e,i;this._map&&(e=this._map.latLngToLayerPoint(this._latlng),t=m(this.options.offset),i=this._getAnchor(),this._zoomAnimated?Z(this._container,e.add(i)):t=t.add(e).add(i),e=this._containerBottom=-t.y,i=this._containerLeft=-Math.round(this._containerWidth/2)+t.x,this._container.style.bottom=e+"px",this._container.style.left=i+"px")},_getAnchor:function(){return[0,0]}}),Bi=(A.include({_initOverlay:function(t,e,i,n){var o=e;return o instanceof t||(o=new t(n).setContent(e)),i&&o.setLatLng(i),o}}),o.include({_initOverlay:function(t,e,i,n){var o=i;return o instanceof t?(c(o,n),o._source=this):(o=e&&!n?e:new t(n,this)).setContent(i),o}}),Ai.extend({options:{pane:"popupPane",offset:[0,7],maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:""},openOn:function(t){return!(t=arguments.length?t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup),t._popup=this,Ai.prototype.openOn.call(this,t)},onAdd:function(t){Ai.prototype.onAdd.call(this,t),t.fire("popupopen",{popup:this}),this._source&&(this._source.fire("popupopen",{popup:this},!0),this._source instanceof fi||this._source.on("preclick",Ae))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("popupclose",{popup:this}),this._source&&(this._source.fire("popupclose",{popup:this},!0),this._source instanceof fi||this._source.off("preclick",Ae))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_initLayout:function(){var t="leaflet-popup",e=this._container=P("div",t+" "+(this.options.className||"")+" leaflet-zoom-animated"),i=this._wrapper=P("div",t+"-content-wrapper",e);this._contentNode=P("div",t+"-content",i),Ie(e),Be(this._contentNode),S(e,"contextmenu",Ae),this._tipContainer=P("div",t+"-tip-container",e),this._tip=P("div",t+"-tip",this._tipContainer),this.options.closeButton&&((i=this._closeButton=P("a",t+"-close-button",e)).setAttribute("role","button"),i.setAttribute("aria-label","Close popup"),i.href="#close",i.innerHTML='<span aria-hidden="true">&#215;</span>',S(i,"click",function(t){O(t),this.close()},this))},_updateLayout:function(){var t=this._contentNode,e=t.style,i=(e.width="",e.whiteSpace="nowrap",t.offsetWidth),i=Math.min(i,this.options.maxWidth),i=(i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="",t.offsetHeight),n=this.options.maxHeight,o="leaflet-popup-scrolled";(n&&n<i?(e.height=n+"px",M):z)(t,o),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Z(this._container,t.add(e))},_adjustPan:function(){var t,e,i,n,o,s,r,a;this.options.autoPan&&(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning?this._autopanning=!1:(t=this._map,e=parseInt(pe(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+e,a=this._containerWidth,(i=new p(this._containerLeft,-e-this._containerBottom))._add(Pe(this._container)),i=t.layerPointToContainerPoint(i),o=m(this.options.autoPanPadding),n=m(this.options.autoPanPaddingTopLeft||o),o=m(this.options.autoPanPaddingBottomRight||o),s=t.getSize(),r=0,i.x+a+o.x>s.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Ii=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Bi,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Bi,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ci||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof fi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Ai.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Ai.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=P("div",t),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i="top"===s?(e=r/2,a):"bottom"===s?(e=r/2,0):(e="center"===s?r/2:"right"===s?0:"left"===s?r:i.x<o.x?(s="right",0):(s="left",r+2*(h.x+l.x)),a/2);t=t.subtract(m(e,i,!0)).add(h).add(l),z(n,"leaflet-tooltip-right"),z(n,"leaflet-tooltip-left"),z(n,"leaflet-tooltip-top"),z(n,"leaflet-tooltip-bottom"),M(n,"leaflet-tooltip-"+s),Z(n,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&C(this._container,t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(t)},_getAnchor:function(){return m(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}})),Ri=(A.include({openTooltip:function(t,e,i){return this._initOverlay(Ii,t,e,i).openOn(this),this},closeTooltip:function(t){return t.close(),this}}),o.include({bindTooltip:function(t,e){return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(),this._tooltip=this._initOverlay(Ii,this._tooltip,t,e),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){var e,i;!t&&this._tooltipHandlersAdded||(e=t?"off":"on",i={remove:this.closeTooltip,move:this._moveTooltip},this._tooltip.options.permanent?i.add=this._openTooltip:(i.mouseover=this._openTooltip,i.mouseout=this.closeTooltip,i.click=this._openTooltip,this._map?this._addFocusListeners():i.add=this._addFocusListeners),this._tooltip.options.sticky&&(i.mousemove=this._moveTooltip),this[e](i),this._tooltipHandlersAdded=!t)},openTooltip:function(t){return this._tooltip&&(this instanceof ci||(this._tooltip._source=this),this._tooltip._prepareOpen(t)&&(this._tooltip.openOn(this._map),this.getElement?this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer,this))),this},closeTooltip:function(){if(this._tooltip)return this._tooltip.close()},toggleTooltip:function(){return this._tooltip&&this._tooltip.toggle(this),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_addFocusListeners:function(){this.getElement?this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer,this)},_addFocusListenersOnLayer:function(t){var e="function"==typeof t.getElement&&t.getElement();e&&(S(e,"focus",function(){this._tooltip._source=t,this.openTooltip()},this),S(e,"blur",this.closeTooltip,this))},_setAriaDescribedByOnLayer:function(t){t="function"==typeof t.getElement&&t.getElement();t&&t.setAttribute("aria-describedby",this._tooltip._container.id)},_openTooltip:function(t){var e;this._tooltip&&this._map&&(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag?(this._openOnceFlag=!0,(e=this)._map.once("moveend",function(){e._openOnceFlag=!1,e._openTooltip(t)})):(this._tooltip._source=t.layer||t.target,this.openTooltip(this._tooltip.options.sticky?t.latlng:void 0)))},_moveTooltip:function(t){var e=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(t=this._map.mouseEventToContainerPoint(t.originalEvent),t=this._map.containerPointToLayerPoint(t),e=this._map.layerPointToLatLng(t)),this._tooltip.setLatLng(e)}}),di.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:"leaflet-div-icon"},createIcon:function(t){var t=t&&"DIV"===t.tagName?t:document.createElement("div"),e=this.options;return e.html instanceof Element?(me(t),t.appendChild(e.html)):t.innerHTML=!1!==e.html?e.html:"",e.bgPos&&(e=m(e.bgPos),t.style.backgroundPosition=-e.x+"px "+-e.y+"px"),this._setIconStyles(t,"icon"),t},createShadow:function(){return null}}));di.Default=_i;var Ni=o.extend({options:{tileSize:256,opacity:1,updateWhenIdle:b.mobile,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:"tilePane",className:"",keepBuffer:2},initialize:function(t){c(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),T(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(fe(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(ge(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){var t;return this._map&&(this._removeAllTiles(),(t=this._clampZoom(this._map.getZoom()))!==this._tileZoom&&(this._tileZoom=t,this._updateLevels()),this._update()),this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=j(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement("div")},getTileSize:function(){var t=this.options.tileSize;return t instanceof p?t:new p(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var e,i=this.getPane().children,n=-t(-1/0,1/0),o=0,s=i.length;o<s;o++)e=i[o].style.zIndex,i[o]!==this._container&&e&&(n=t(n,+e));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!b.ielt9){C(this._container,this.options.opacity);var t,e=+new Date,i=!1,n=!1;for(t in this._tiles){var o,s=this._tiles[t];s.current&&s.loaded&&(o=Math.min(1,(e-s.loaded)/200),C(s.el,o),o<1?i=!0:(s.active?n=!0:this._onOpaqueTile(s),s.active=!0))}n&&!this._noPrune&&this._pruneTiles(),i&&(r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this))}},_onOpaqueTile:u,_initContainer:function(){this._container||(this._container=P("div","leaflet-layer "+(this.options.className||"")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,e=this.options.maxZoom;if(void 0!==t){for(var i in this._levels)i=Number(i),this._levels[i].el.children.length||i===t?(this._levels[i].el.style.zIndex=e-Math.abs(t-i),this._onUpdateLevel(i)):(T(this._levels[i].el),this._removeTilesAtZoom(i),this._onRemoveLevel(i),delete this._levels[i]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=P("div","leaflet-tile-container leaflet-zoom-animated",this._container),n.el.style.zIndex=e,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),u(n.el.offsetWidth),this._onCreateLevel(n)),this._level=n}},_onUpdateLevel:u,_onRemoveLevel:u,_onCreateLevel:u,_pruneTiles:function(){if(this._map){var t,e,i,n=this._map.getZoom();if(n>this.options.maxZoom||n<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)(i=this._tiles[t]).current&&!i.active&&(e=i.coords,this._retainParent(e.x,e.y,e.z,e.z-5)||this._retainChildren(e.x,e.y,e.z,e.z+2));for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var e in this._tiles)this._tiles[e].coords.z===t&&this._removeTile(e)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)T(this._levels[t].el),this._onRemoveLevel(Number(t)),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,e,i,n){var t=Math.floor(t/2),e=Math.floor(e/2),i=i-1,o=new p(+t,+e),o=(o.z=i,this._tileCoordsToKey(o)),o=this._tiles[o];return o&&o.active?o.retain=!0:(o&&o.loaded&&(o.retain=!0),n<i&&this._retainParent(t,e,i,n))},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*e;s<2*e+2;s++){var r=new p(o,s),r=(r.z=i+1,this._tileCoordsToKey(r)),r=this._tiles[r];r&&r.active?r.retain=!0:(r&&r.loaded&&(r.retain=!0),i+1<n&&this._retainChildren(o,s,i+1,n))}},_resetView:function(t){t=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),t,t)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var e=this.options;return void 0!==e.minNativeZoom&&t<e.minNativeZoom?e.minNativeZoom:void 0!==e.maxNativeZoom&&e.maxNativeZoom<t?e.maxNativeZoom:t},_setView:function(t,e,i,n){var o=Math.round(e),o=void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom?void 0:this._clampZoom(o),s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),i||this._pruneTiles(),this._noPrune=!!i),this._setZoomTransforms(t,e)},_setZoomTransforms:function(t,e){for(var i in this._levels)this._setZoomTransform(this._levels[i],t,e)},_setZoomTransform:function(t,e,i){var n=this._map.getZoomScale(i,t.zoom),e=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e,i)).round();b.any3d?be(t.el,e,n):Z(t.el,e)},_resetGrid:function(){var t=this._map,e=t.options.crs,i=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,e.wrapLng[0]],n).x/i.x),Math.ceil(t.project([0,e.wrapLng[1]],n).x/i.y)],this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0],0],n).y/i.x),Math.ceil(t.project([e.wrapLat[1],0],n).y/i.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var e=this._map,i=e._animatingZoom?Math.max(e._animateToZoom,e.getZoom()):e.getZoom(),i=e.getZoomScale(i,this._tileZoom),t=e.project(t,this._tileZoom).floor(),e=e.getSize().divideBy(2*i);return new f(t.subtract(e),t.add(e))},_update:function(t){var e=this._map;if(e){var i=this._clampZoom(e.getZoom());if(void 0===t&&(t=e.getCenter()),void 0!==this._tileZoom){var n,e=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(e),s=o.getCenter(),r=[],e=this.options.keepBuffer,a=new f(o.getBottomLeft().subtract([e,-e]),o.getTopRight().add([e,-e]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error("Attempted to load an infinite number of tiles");for(n in this._tiles){var h=this._tiles[n].coords;h.z===this._tileZoom&&a.contains(new p(h.x,h.y))||(this._tiles[n].current=!1)}if(1<Math.abs(i-this._tileZoom))this._setView(t,i);else{for(var l=o.min.y;l<=o.max.y;l++)for(var u=o.min.x;u<=o.max.x;u++){var c,d=new p(u,l);d.z=this._tileZoom,this._isValidTile(d)&&((c=this._tiles[this._tileCoordsToKey(d)])?c.current=!0:r.push(d))}if(r.sort(function(t,e){return t.distanceTo(s)-e.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire("loading"));for(var _=document.createDocumentFragment(),u=0;u<r.length;u++)this._addTile(r[u],_);this._level.el.appendChild(_)}}}}},_isValidTile:function(t){var e=this._map.options.crs;if(!e.infinite){var i=this._globalTileRange;if(!e.wrapLng&&(t.x<i.min.x||t.x>i.max.x)||!e.wrapLat&&(t.y<i.min.y||t.y>i.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var t=t.split(":"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Di=Ni.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0<e.maxZoom?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),"string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")),this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&void 0===e&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement("img");return S(i,"load",a(this._tileOnLoad,this,e,i)),S(i,"error",a(this._tileOnError,this,e,i)),!this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),"string"==typeof this.options.referrerPolicy&&(i.referrerPolicy=this.options.referrerPolicy),i.alt="",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:b.retina?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};return this._map&&!this._map.options.crs.infinite&&(t=this._globalTileRange.max.y-t.y,this.options.tms&&(e.y=t),e["-y"]=t),q(this._url,l(e,this.options))},_tileOnLoad:function(t,e){b.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute("src")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom;return(t=this.options.zoomReverse?e-t:t)+this.options.zoomOffset},_getSubdomain:function(t){t=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[t]},_abortLoading:function(){var t,e,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u,i.onerror=u,i.complete||(i.src=K,e=this._tiles[t].coords,T(i),delete this._tiles[t],this.fire("tileabort",{tile:i,coords:e})))},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute("src",K),Ni.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(this._map&&(!i||i.getAttribute("src")!==K))return Ni.prototype._tileReady.call(this,t,e,i)}});function ji(t,e){return new Di(t,e)}var Hi=Di.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i,n=l({},this.defaultWmsParams);for(i in e)i in this.options||(n[i]=e[i]);var t=(e=c(this,e)).detectRetina&&b.retina?2:1,o=this.getTileSize();n.width=o.x*t,n.height=o.y*t,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=1.3<=this._wmsVersion?"crs":"srs";this.wmsParams[e]=this._crs.code,Di.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,i=_(i.project(e[0]),i.project(e[1])),e=i.min,i=i.max,e=(1.3<=this._wmsVersion&&this._crs===li?[e.y,e.x,i.y,i.x]:[e.x,e.y,i.x,i.y]).join(","),i=Di.prototype.getTileUrl.call(this,t);return i+U(this.wmsParams,i,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+e},setParams:function(t,e){return l(this.wmsParams,t),e||this.redraw(),this}});Di.WMS=Hi,ji.wms=function(t,e){return new Hi(t,e)};var Wi=o.extend({options:{padding:.1},initialize:function(t){c(this,t),h(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),M(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),n=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));b.any3d?be(this._container,n,i):Z(this._container,n)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new f(i,i.add(e.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Fi=Wi.extend({options:{tolerance:0},getEvents:function(){var t=Wi.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Wi.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");S(t,"mousemove",this._onMouseMove,this),S(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),S(t,"mouseout",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext("2d")},_destroyContainer:function(){r(this._redrawRequest),delete this._ctx,T(this._container),k(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){var t,e,i,n;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),t=this._bounds,e=this._container,i=t.getSize(),n=b.retina?2:1,Z(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+"px",e.style.height=i.y+"px",b.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update"))},_reset:function(){Wi.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t);t=(this._layers[h(t)]=t)._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=t),this._drawLast=t,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,e=e.prev;i?i.prev=e:this._drawLast=e,e?e.next=i:this._drawFirst=i,delete t._order,delete this._layers[h(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){for(var e,i=t.options.dashArray.split(/[, ]+/),n=[],o=0;o<i.length;o++){if(e=Number(i[o]),isNaN(e))return;n.push(e)}t.options._dashArray=n}else t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||x(this._redraw,this))},_extendRedrawBounds:function(t){var e;t._pxBounds&&(e=(t.options.weight||0)+1,this._redrawBounds=this._redrawBounds||new f,this._redrawBounds.extend(t._pxBounds.min.subtract([e,e])),this._redrawBounds.extend(t._pxBounds.max.add([e,e])))},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t,e=this._redrawBounds;e?(t=e.getSize(),this._ctx.clearRect(e.min.x,e.min.y,t.x,t.y)):(this._ctx.save(),this._ctx.setTransform(1,0,0,1,0,0),this._ctx.clearRect(0,0,this._container.width,this._container.height),this._ctx.restore())},_draw:function(){var t,e,i=this._redrawBounds;this._ctx.save(),i&&(e=i.getSize(),this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()),this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,e){if(this._drawing){var i,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(h.beginPath(),i=0;i<a;i++){for(n=0,o=r[i].length;n<o;n++)s=r[i][n],h[n?"lineTo":"moveTo"](s.x,s.y);e&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){var e,i,n,o;this._drawing&&!t._empty()&&(e=t._point,i=this._ctx,n=Math.max(Math.round(t._radius),1),1!=(o=(Math.max(Math.round(t._radiusY),1)||n)/n)&&(i.save(),i.scale(1,o)),i.beginPath(),i.arc(e.x,e.y/o,n,0,2*Math.PI,!1),1!=o&&i.restore(),this._fillStroke(i,t))},_fillStroke:function(t,e){var i=e.options;i.fill&&(t.globalAlpha=i.fillOpacity,t.fillStyle=i.fillColor||i.color,t.fill(i.fillRule||"evenodd")),i.stroke&&0!==i.weight&&(t.setLineDash&&t.setLineDash(e.options&&e.options._dashArray||[]),t.globalAlpha=i.opacity,t.lineWidth=i.weight,t.strokeStyle=i.color,t.lineCap=i.lineCap,t.lineJoin=i.lineJoin,t.stroke())},_onClick:function(t){for(var e,i,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(n)&&(("click"===t.type||"preclick"===t.type)&&this._map._draggableMoved(e)||(i=e));this._fireEvent(!!i&&[i],t)},_onMouseMove:function(t){var e;!this._map||this._map.dragging.moving()||this._map._animatingZoom||(e=this._map.mouseEventToLayerPoint(t),this._handleMouseHover(t,e))},_handleMouseOut:function(t){var e=this._hoveredLayer;e&&(z(this._container,"leaflet-interactive"),this._fireEvent([e],t,"mouseout"),this._hoveredLayer=null,this._mouseHoverThrottled=!1)},_handleMouseHover:function(t,e){if(!this._mouseHoverThrottled){for(var i,n,o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(e)&&(n=i);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(M(this._container,"leaflet-interactive"),this._fireEvent([n],t,"mouseover"),this._hoveredLayer=n)),this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer],t),this._mouseHoverThrottled=!0,setTimeout(a(function(){this._mouseHoverThrottled=!1},this),32)}},_fireEvent:function(t,e,i){this._map._fireDOMEvent(e,i||e.type,t)},_bringToFront:function(t){var e,i,n=t._order;n&&(e=n.next,i=n.prev,e&&((e.prev=i)?i.next=e:e&&(this._drawFirst=e),n.prev=this._drawLast,(this._drawLast.next=n).next=null,this._drawLast=n,this._requestRedraw(t)))},_bringToBack:function(t){var e,i,n=t._order;n&&(e=n.next,(i=n.prev)&&((i.next=e)?e.prev=i:i&&(this._drawLast=i),n.prev=null,n.next=this._drawFirst,this._drawFirst.prev=n,this._drawFirst=n,this._requestRedraw(t)))}});function Ui(t){return b.canvas?new Fi(t):null}var Vi=function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return document.createElement("<lvml:"+t+' class="lvml">')}}catch(t){}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),zt={_initContainer:function(){this._container=P("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Wi.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Vi("shape");M(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Vi("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Vi("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Vi("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},qi=b.vml?Vi:ct,Gi=Wi.extend({_initContainer:function(){this._container=qi("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=qi("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),Z(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update"))},_initPath:function(t){var e=t._path=qi("path");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,"leaflet-interactive"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute("stroke",t.color),e.setAttribute("stroke-opacity",t.opacity),e.setAttribute("stroke-width",t.weight),e.setAttribute("stroke-linecap",t.lineCap),e.setAttribute("stroke-linejoin",t.lineJoin),t.dashArray?e.setAttribute("stroke-dasharray",t.dashArray):e.removeAttribute("stroke-dasharray"),t.dashOffset?e.setAttribute("stroke-dashoffset",t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),t.fill?(e.setAttribute("fill",t.fillColor||t.color),e.setAttribute("fill-opacity",t.fillOpacity),e.setAttribute("fill-rule",t.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n="a"+i+","+(Math.max(Math.round(t._radiusY),1)||i)+" 0 1,0 ",e=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+n+2*i+",0 "+n+2*-i+",0 ";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Ki(t){return b.svg||b.vml?new Gi(t):null}b.vml&&Gi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return"overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Ui(t)||Ki(t)}});var Yi=xi.extend({initialize:function(t,e){xi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Gi.create=qi,Gi.pointsToPath=dt,wi.geometryToLayer=bi,wi.coordsToLatLng=Li,wi.coordsToLatLngs=Ti,wi.latLngToCoords=Mi,wi.latLngsToCoords=zi,wi.getFeature=Ci,wi.asFeature=Zi,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){S(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P("div","leaflet-zoom-box",this._container),M(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(T(this._box),z(this._container,"leaflet-crosshair")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire("boxzoomend",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook("addHandler","boxZoom",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook("addHandler","doubleClickZoom",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Xe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,"leaflet-grab"),z(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire("movestart").fire("dragstart"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1<this._positions.length&&50<t-this._times[0];)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){var t,e;this._viscosity&&this._offsetLimit&&(t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit,t.x<e.min.x&&(t.x=this._viscousLimit(t.x,e.min.x)),t.y<e.min.y&&(t.y=this._viscousLimit(t.y,e.min.y)),t.x>e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)<Math.abs(n+i)?o:n;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=t},_onDragEnd:function(t){var e,i,n,o,s=this._map,r=s.options,a=!r.inertia||t.noInertia||this._times.length<2;s.fire("dragend",t),!a&&(this._prunePositions(+new Date),t=this._lastPos.subtract(this._positions[0]),a=(this._lastTime-this._times[0])/1e3,e=r.easeLinearity,a=(t=t.multiplyBy(e/a)).distanceTo([0,0]),i=Math.min(r.inertiaMaxSpeed,a),t=t.multiplyBy(i/a),n=i/(r.inertiaDeceleration*e),(o=t.multiplyBy(-n/2).round()).x||o.y)?(o=s._limitOffset(o,s.options.maxBounds),x(function(){s.panBy(o,{duration:n,easeLinearity:e,noMoveStart:!0,animate:!0})})):s.fire("moveend")}})),St=(A.addInitHook("addHandler","dragging",Zt),A.mergeOptions({keyboard:!0,keyboardPanDelta:80}),n.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex="0"),S(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),k(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){var t,e,i;this._focused||(i=document.body,t=document.documentElement,e=i.scrollTop||t.scrollTop,i=i.scrollLeft||t.scrollLeft,this._map._container.focus(),window.scrollTo(i,e))},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanDelta:function(t){for(var e=this._panKeys={},i=this.keyCodes,n=0,o=i.left.length;n<o;n++)e[i.left[n]]=[-1*t,0];for(n=0,o=i.right.length;n<o;n++)e[i.right[n]]=[t,0];for(n=0,o=i.down.length;n<o;n++)e[i.down[n]]=[0,t];for(n=0,o=i.up.length;n<o;n++)e[i.up[n]]=[0,-1*t]},_setZoomDelta:function(t){for(var e=this._zoomKeys={},i=this.keyCodes,n=0,o=i.zoomIn.length;n<o;n++)e[i.zoomIn[n]]=t;for(n=0,o=i.zoomOut.length;n<o;n++)e[i.zoomOut[n]]=-t},_addHooks:function(){S(document,"keydown",this._onKeyDown,this)},_removeHooks:function(){k(document,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e,i,n=t.keyCode,o=this._map;if(n in this._panKeys)o._panAnim&&o._panAnim._inProgress||(i=this._panKeys[n],t.shiftKey&&(i=m(i).multiplyBy(3)),o.options.maxBounds&&(i=o._limitOffset(m(i),o.options.maxBounds)),o.options.worldCopyJump?(e=o.wrapLatLng(o.unproject(o.project(o.getCenter()).add(i))),o.panTo(e)):o.panBy(i));else if(n in this._zoomKeys)o.setZoom(o.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[n]);else{if(27!==n||!o._popup||!o._popup.options.closeOnEscapeKey)return;o.closePopup()}Re(t)}}})),Et=(A.addInitHook("addHandler","keyboard",St),A.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60}),n.extend({addHooks:function(){S(this._map._container,"wheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){k(this._map._container,"wheel",this._onWheelScroll,this)},_onWheelScroll:function(t){var e=He(t),i=this._map.options.wheelDebounceTime,e=(this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date),Math.max(i-(+new Date-this._startTime),0));clearTimeout(this._timer),this._timer=setTimeout(a(this._performZoom,this),e),Re(t)},_performZoom:function(){var t=this._map,e=t.getZoom(),i=this._map.options.zoomSnap||0,n=(t._stop(),this._delta/(4*this._map.options.wheelPxPerZoomLevel)),n=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,i=i?Math.ceil(n/i)*i:n,n=t._limitZoom(e+(0<this._delta?i:-i))-e;this._delta=0,this._startTime=null,n&&("center"===t.options.scrollWheelZoom?t.setZoom(e+n):t.setZoomAround(this._lastMousePos,e+n))}})),kt=(A.addInitHook("addHandler","scrollWheelZoom",Et),A.mergeOptions({tapHold:b.touchNative&&b.safari&&b.mobile,tapTolerance:15}),n.extend({addHooks:function(){S(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){k(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){var e;clearTimeout(this._holdTimeout),1===t.touches.length&&(e=t.touches[0],this._startPos=this._newPos=new p(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(S(document,"touchend",O),S(document,"touchend touchcancel",this._cancelClickPrevent),this._simulateEvent("contextmenu",e))},this),600),S(document,"touchend touchcancel contextmenu",this._cancel,this),S(document,"touchmove",this._onMove,this))},_cancelClickPrevent:function t(){k(document,"touchend",O),k(document,"touchend touchcancel",t)},_cancel:function(){clearTimeout(this._holdTimeout),k(document,"touchend touchcancel contextmenu",this._cancel,this),k(document,"touchmove",this._onMove,this)},_onMove:function(t){t=t.touches[0];this._newPos=new p(t.clientX,t.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){t=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});t._simulated=!0,e.target.dispatchEvent(t)}})),Ot=(A.addInitHook("addHandler","tapHold",kt),A.mergeOptions({touchZoom:b.touch,bounceAtZoomLimits:!0}),n.extend({addHooks:function(){M(this._map._container,"leaflet-touch-zoom"),S(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){z(this._map._container,"leaflet-touch-zoom"),k(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e,i,n=this._map;!t.touches||2!==t.touches.length||n._animatingZoom||this._zooming||(e=n.mouseEventToContainerPoint(t.touches[0]),i=n.mouseEventToContainerPoint(t.touches[1]),this._centerPoint=n.getSize()._divideBy(2),this._startLatLng=n.containerPointToLatLng(this._centerPoint),"center"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(i)._divideBy(2))),this._startDist=e.distanceTo(i),this._startZoom=n.getZoom(),this._moved=!1,this._zooming=!0,n._stop(),S(document,"touchmove",this._onTouchMove,this),S(document,"touchend touchcancel",this._onTouchEnd,this),O(t))},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoom<e.getMinZoom()&&o<1||this._zoom>e.getMaxZoom()&&1<o)&&(this._zoom=e._limitZoom(this._zoom)),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1==o)return}else{i=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(1==o&&0===i.x&&0===i.y)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(i),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),r(this._animRequest);n=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=x(n,this,!0),O(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,r(this._animRequest),k(document,"touchmove",this._onTouchMove,this),k(document,"touchend touchcancel",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}})),Xi=(A.addInitHook("addHandler","touchZoom",Ot),A.BoxZoom=_t,A.DoubleClickZoom=Ct,A.Drag=Zt,A.Keyboard=St,A.ScrollWheelZoom=Et,A.TapHold=kt,A.TouchZoom=Ot,t.Bounds=f,t.Browser=b,t.CRS=ot,t.Canvas=Fi,t.Circle=vi,t.CircleMarker=gi,t.Class=et,t.Control=B,t.DivIcon=Ri,t.DivOverlay=Ai,t.DomEvent=mt,t.DomUtil=pt,t.Draggable=Xe,t.Evented=it,t.FeatureGroup=ci,t.GeoJSON=wi,t.GridLayer=Ni,t.Handler=n,t.Icon=di,t.ImageOverlay=Ei,t.LatLng=v,t.LatLngBounds=s,t.Layer=o,t.LayerGroup=ui,t.LineUtil=vt,t.Map=A,t.Marker=mi,t.Mixin=ft,t.Path=fi,t.Point=p,t.PolyUtil=gt,t.Polygon=xi,t.Polyline=yi,t.Popup=Bi,t.PosAnimation=Fe,t.Projection=wt,t.Rectangle=Yi,t.Renderer=Wi,t.SVG=Gi,t.SVGOverlay=Oi,t.TileLayer=Di,t.Tooltip=Ii,t.Transformation=at,t.Util=tt,t.VideoOverlay=ki,t.bind=a,t.bounds=_,t.canvas=Ui,t.circle=function(t,e,i){return new vi(t,e,i)},t.circleMarker=function(t,e){return new gi(t,e)},t.control=Ue,t.divIcon=function(t){return new Ri(t)},t.extend=l,t.featureGroup=function(t,e){return new ci(t,e)},t.geoJSON=Si,t.geoJson=Mt,t.gridLayer=function(t){return new Ni(t)},t.icon=function(t){return new di(t)},t.imageOverlay=function(t,e,i){return new Ei(t,e,i)},t.latLng=w,t.latLngBounds=g,t.layerGroup=function(t,e){return new ui(t,e)},t.map=function(t,e){return new A(t,e)},t.marker=function(t,e){return new mi(t,e)},t.point=m,t.polygon=function(t,e){return new xi(t,e)},t.polyline=function(t,e){return new yi(t,e)},t.popup=function(t,e){return new Bi(t,e)},t.rectangle=function(t,e){return new Yi(t,e)},t.setOptions=c,t.stamp=h,t.svg=Ki,t.svgOverlay=function(t,e,i){return new Oi(t,e,i)},t.tileLayer=ji,t.tooltip=function(t,e){return new Ii(t,e)},t.transformation=ht,t.version="1.9.4",t.videoOverlay=function(t,e,i){return new ki(t,e,i)},window.L);t.noConflict=function(){return window.L=Xi,this},window.L=t});
+//# sourceMappingURL=leaflet.js.map \ No newline at end of file
diff --git a/static/js/simplemde.js b/static/js/simplemde.js
new file mode 100644
index 0000000..016d693
--- /dev/null
+++ b/static/js/simplemde.js
@@ -0,0 +1,2028 @@
+/*global require,module*/
+"use strict";
+var CodeMirror = require("codemirror");
+require("codemirror/addon/edit/continuelist.js");
+require("./codemirror/tablist");
+require("codemirror/addon/display/fullscreen.js");
+require("codemirror/mode/markdown/markdown.js");
+require("codemirror/addon/mode/overlay.js");
+require("codemirror/addon/display/placeholder.js");
+require("codemirror/addon/selection/mark-selection.js");
+require("codemirror/mode/gfm/gfm.js");
+require("codemirror/mode/xml/xml.js");
+var CodeMirrorSpellChecker = require("codemirror-spell-checker");
+var marked = require("marked");
+
+
+// Some variables
+var isMac = /Mac/.test(navigator.platform);
+
+// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons
+var bindings = {
+ "toggleBold": toggleBold,
+ "toggleItalic": toggleItalic,
+ "drawLink": drawLink,
+ "toggleHeadingSmaller": toggleHeadingSmaller,
+ "toggleHeadingBigger": toggleHeadingBigger,
+ "drawImage": drawImage,
+ "toggleBlockquote": toggleBlockquote,
+ "toggleOrderedList": toggleOrderedList,
+ "toggleUnorderedList": toggleUnorderedList,
+ "toggleCodeBlock": toggleCodeBlock,
+ "togglePreview": togglePreview,
+ "toggleStrikethrough": toggleStrikethrough,
+ "toggleHeading1": toggleHeading1,
+ "toggleHeading2": toggleHeading2,
+ "toggleHeading3": toggleHeading3,
+ "cleanBlock": cleanBlock,
+ "drawTable": drawTable,
+ "drawHorizontalRule": drawHorizontalRule,
+ "undo": undo,
+ "redo": redo,
+ "toggleSideBySide": toggleSideBySide,
+ "toggleFullScreen": toggleFullScreen
+};
+
+var shortcuts = {
+ "toggleBold": "Cmd-B",
+ "toggleItalic": "Cmd-I",
+ "drawLink": "Cmd-K",
+ "toggleHeadingSmaller": "Cmd-H",
+ "toggleHeadingBigger": "Shift-Cmd-H",
+ "cleanBlock": "Cmd-E",
+ "drawImage": "Cmd-Alt-I",
+ "toggleBlockquote": "Cmd-'",
+ "toggleOrderedList": "Cmd-Alt-L",
+ "toggleUnorderedList": "Cmd-L",
+ "toggleCodeBlock": "Cmd-Alt-C",
+ "togglePreview": "Cmd-P",
+ "toggleSideBySide": "F9",
+ "toggleFullScreen": "F11"
+};
+
+var getBindingName = function(f) {
+ for(var key in bindings) {
+ if(bindings[key] === f) {
+ return key;
+ }
+ }
+ return null;
+};
+
+var isMobile = function() {
+ var check = false;
+ (function(a) {
+ if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) check = true;
+ })(navigator.userAgent || navigator.vendor || window.opera);
+ return check;
+};
+
+
+/**
+ * Fix shortcut. Mac use Command, others use Ctrl.
+ */
+function fixShortcut(name) {
+ if(isMac) {
+ name = name.replace("Ctrl", "Cmd");
+ } else {
+ name = name.replace("Cmd", "Ctrl");
+ }
+ return name;
+}
+
+
+/**
+ * Create icon element for toolbar.
+ */
+function createIcon(options, enableTooltips, shortcuts) {
+ options = options || {};
+ var el = document.createElement("a");
+ enableTooltips = (enableTooltips == undefined) ? true : enableTooltips;
+
+ if(options.title && enableTooltips) {
+ el.title = createTootlip(options.title, options.action, shortcuts);
+
+ if(isMac) {
+ el.title = el.title.replace("Ctrl", "⌘");
+ el.title = el.title.replace("Alt", "⌥");
+ }
+ }
+
+ el.tabIndex = -1;
+ el.className = options.className;
+ return el;
+}
+
+function createSep() {
+ var el = document.createElement("i");
+ el.className = "separator";
+ el.innerHTML = "|";
+ return el;
+}
+
+function createTootlip(title, action, shortcuts) {
+ var actionName;
+ var tooltip = title;
+
+ if(action) {
+ actionName = getBindingName(action);
+ if(shortcuts[actionName]) {
+ tooltip += " (" + fixShortcut(shortcuts[actionName]) + ")";
+ }
+ }
+
+ return tooltip;
+}
+
+/**
+ * The state of CodeMirror at the given position.
+ */
+function getState(cm, pos) {
+ pos = pos || cm.getCursor("start");
+ var stat = cm.getTokenAt(pos);
+ if(!stat.type) return {};
+
+ var types = stat.type.split(" ");
+
+ var ret = {},
+ data, text;
+ for(var i = 0; i < types.length; i++) {
+ data = types[i];
+ if(data === "strong") {
+ ret.bold = true;
+ } else if(data === "variable-2") {
+ text = cm.getLine(pos.line);
+ if(/^\s*\d+\.\s/.test(text)) {
+ ret["ordered-list"] = true;
+ } else {
+ ret["unordered-list"] = true;
+ }
+ } else if(data === "atom") {
+ ret.quote = true;
+ } else if(data === "em") {
+ ret.italic = true;
+ } else if(data === "quote") {
+ ret.quote = true;
+ } else if(data === "strikethrough") {
+ ret.strikethrough = true;
+ } else if(data === "comment") {
+ ret.code = true;
+ } else if(data === "link") {
+ ret.link = true;
+ } else if(data === "tag") {
+ ret.image = true;
+ } else if(data.match(/^header(\-[1-6])?$/)) {
+ ret[data.replace("header", "heading")] = true;
+ }
+ }
+ return ret;
+}
+
+
+// Saved overflow setting
+var saved_overflow = "";
+
+/**
+ * Toggle full screen of the editor.
+ */
+function toggleFullScreen(editor) {
+ // Set fullscreen
+ var cm = editor.codemirror;
+ cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+
+
+ // Prevent scrolling on body during fullscreen active
+ if(cm.getOption("fullScreen")) {
+ saved_overflow = document.body.style.overflow;
+ document.body.style.overflow = "hidden";
+ } else {
+ document.body.style.overflow = saved_overflow;
+ }
+
+
+ // Update toolbar class
+ var wrap = cm.getWrapperElement();
+
+ if(!/fullscreen/.test(wrap.previousSibling.className)) {
+ wrap.previousSibling.className += " fullscreen";
+ } else {
+ wrap.previousSibling.className = wrap.previousSibling.className.replace(/\s*fullscreen\b/, "");
+ }
+
+
+ // Update toolbar button
+ var toolbarButton = editor.toolbarElements.fullscreen;
+
+ if(!/active/.test(toolbarButton.className)) {
+ toolbarButton.className += " active";
+ } else {
+ toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, "");
+ }
+
+
+ // Hide side by side if needed
+ var sidebyside = cm.getWrapperElement().nextSibling;
+ if(/editor-preview-active-side/.test(sidebyside.className))
+ toggleSideBySide(editor);
+}
+
+
+/**
+ * Action for toggling bold.
+ */
+function toggleBold(editor) {
+ _toggleBlock(editor, "bold", editor.options.blockStyles.bold);
+}
+
+
+/**
+ * Action for toggling italic.
+ */
+function toggleItalic(editor) {
+ _toggleBlock(editor, "italic", editor.options.blockStyles.italic);
+}
+
+
+/**
+ * Action for toggling strikethrough.
+ */
+function toggleStrikethrough(editor) {
+ _toggleBlock(editor, "strikethrough", "~~");
+}
+
+/**
+ * Action for toggling code block.
+ */
+function toggleCodeBlock(editor) {
+ var fenceCharsToInsert = editor.options.blockStyles.code;
+
+ function fencing_line(line) {
+ /* return true, if this is a ``` or ~~~ line */
+ if(typeof line !== "object") {
+ throw "fencing_line() takes a 'line' object (not a line number, or line text). Got: " + typeof line + ": " + line;
+ }
+ return line.styles && line.styles[2] && line.styles[2].indexOf("formatting-code-block") !== -1;
+ }
+
+ function token_state(token) {
+ // base goes an extra level deep when mode backdrops are used, e.g. spellchecker on
+ return token.state.base.base || token.state.base;
+ }
+
+ function code_type(cm, line_num, line, firstTok, lastTok) {
+ /*
+ * Return "single", "indented", "fenced" or false
+ *
+ * cm and line_num are required. Others are optional for efficiency
+ * To check in the middle of a line, pass in firstTok yourself.
+ */
+ line = line || cm.getLineHandle(line_num);
+ firstTok = firstTok || cm.getTokenAt({
+ line: line_num,
+ ch: 1
+ });
+ lastTok = lastTok || (!!line.text && cm.getTokenAt({
+ line: line_num,
+ ch: line.text.length - 1
+ }));
+ var types = firstTok.type ? firstTok.type.split(" ") : [];
+ if(lastTok && token_state(lastTok).indentedCode) {
+ // have to check last char, since first chars of first line aren"t marked as indented
+ return "indented";
+ } else if(types.indexOf("comment") === -1) {
+ // has to be after "indented" check, since first chars of first indented line aren"t marked as such
+ return false;
+ } else if(token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {
+ return "fenced";
+ } else {
+ return "single";
+ }
+ }
+
+ function insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {
+ var start_line_sel = cur_start.line + 1,
+ end_line_sel = cur_end.line + 1,
+ sel_multi = cur_start.line !== cur_end.line,
+ repl_start = fenceCharsToInsert + "\n",
+ repl_end = "\n" + fenceCharsToInsert;
+ if(sel_multi) {
+ end_line_sel++;
+ }
+ // handle last char including \n or not
+ if(sel_multi && cur_end.ch === 0) {
+ repl_end = fenceCharsToInsert + "\n";
+ end_line_sel--;
+ }
+ _replaceSelection(cm, false, [repl_start, repl_end]);
+ cm.setSelection({
+ line: start_line_sel,
+ ch: 0
+ }, {
+ line: end_line_sel,
+ ch: 0
+ });
+ }
+
+ var cm = editor.codemirror,
+ cur_start = cm.getCursor("start"),
+ cur_end = cm.getCursor("end"),
+ tok = cm.getTokenAt({
+ line: cur_start.line,
+ ch: cur_start.ch || 1
+ }), // avoid ch 0 which is a cursor pos but not token
+ line = cm.getLineHandle(cur_start.line),
+ is_code = code_type(cm, cur_start.line, line, tok);
+ var block_start, block_end, lineCount;
+
+ if(is_code === "single") {
+ // similar to some SimpleMDE _toggleBlock logic
+ var start = line.text.slice(0, cur_start.ch).replace("`", ""),
+ end = line.text.slice(cur_start.ch).replace("`", "");
+ cm.replaceRange(start + end, {
+ line: cur_start.line,
+ ch: 0
+ }, {
+ line: cur_start.line,
+ ch: 99999999999999
+ });
+ cur_start.ch--;
+ if(cur_start !== cur_end) {
+ cur_end.ch--;
+ }
+ cm.setSelection(cur_start, cur_end);
+ cm.focus();
+ } else if(is_code === "fenced") {
+ if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {
+ // use selection
+
+ // find the fenced line so we know what type it is (tilde, backticks, number of them)
+ for(block_start = cur_start.line; block_start >= 0; block_start--) {
+ line = cm.getLineHandle(block_start);
+ if(fencing_line(line)) {
+ break;
+ }
+ }
+ var fencedTok = cm.getTokenAt({
+ line: block_start,
+ ch: 1
+ });
+ var fence_chars = token_state(fencedTok).fencedChars;
+ var start_text, start_line;
+ var end_text, end_line;
+ // check for selection going up against fenced lines, in which case we don't want to add more fencing
+ if(fencing_line(cm.getLineHandle(cur_start.line))) {
+ start_text = "";
+ start_line = cur_start.line;
+ } else if(fencing_line(cm.getLineHandle(cur_start.line - 1))) {
+ start_text = "";
+ start_line = cur_start.line - 1;
+ } else {
+ start_text = fence_chars + "\n";
+ start_line = cur_start.line;
+ }
+ if(fencing_line(cm.getLineHandle(cur_end.line))) {
+ end_text = "";
+ end_line = cur_end.line;
+ if(cur_end.ch === 0) {
+ end_line += 1;
+ }
+ } else if(cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {
+ end_text = "";
+ end_line = cur_end.line + 1;
+ } else {
+ end_text = fence_chars + "\n";
+ end_line = cur_end.line + 1;
+ }
+ if(cur_end.ch === 0) {
+ // full last line selected, putting cursor at beginning of next
+ end_line -= 1;
+ }
+ cm.operation(function() {
+ // end line first, so that line numbers don't change
+ cm.replaceRange(end_text, {
+ line: end_line,
+ ch: 0
+ }, {
+ line: end_line + (end_text ? 0 : 1),
+ ch: 0
+ });
+ cm.replaceRange(start_text, {
+ line: start_line,
+ ch: 0
+ }, {
+ line: start_line + (start_text ? 0 : 1),
+ ch: 0
+ });
+ });
+ cm.setSelection({
+ line: start_line + (start_text ? 1 : 0),
+ ch: 0
+ }, {
+ line: end_line + (start_text ? 1 : -1),
+ ch: 0
+ });
+ cm.focus();
+ } else {
+ // no selection, search for ends of this fenced block
+ var search_from = cur_start.line;
+ if(fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line
+ if(code_type(cm, cur_start.line + 1) === "fenced") {
+ block_start = cur_start.line;
+ search_from = cur_start.line + 1; // for searching for "end"
+ } else {
+ block_end = cur_start.line;
+ search_from = cur_start.line - 1; // for searching for "start"
+ }
+ }
+ if(block_start === undefined) {
+ for(block_start = search_from; block_start >= 0; block_start--) {
+ line = cm.getLineHandle(block_start);
+ if(fencing_line(line)) {
+ break;
+ }
+ }
+ }
+ if(block_end === undefined) {
+ lineCount = cm.lineCount();
+ for(block_end = search_from; block_end < lineCount; block_end++) {
+ line = cm.getLineHandle(block_end);
+ if(fencing_line(line)) {
+ break;
+ }
+ }
+ }
+ cm.operation(function() {
+ cm.replaceRange("", {
+ line: block_start,
+ ch: 0
+ }, {
+ line: block_start + 1,
+ ch: 0
+ });
+ cm.replaceRange("", {
+ line: block_end - 1,
+ ch: 0
+ }, {
+ line: block_end,
+ ch: 0
+ });
+ });
+ cm.focus();
+ }
+ } else if(is_code === "indented") {
+ if(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {
+ // use selection
+ block_start = cur_start.line;
+ block_end = cur_end.line;
+ if(cur_end.ch === 0) {
+ block_end--;
+ }
+ } else {
+ // no selection, search for ends of this indented block
+ for(block_start = cur_start.line; block_start >= 0; block_start--) {
+ line = cm.getLineHandle(block_start);
+ if(line.text.match(/^\s*$/)) {
+ // empty or all whitespace - keep going
+ continue;
+ } else {
+ if(code_type(cm, block_start, line) !== "indented") {
+ block_start += 1;
+ break;
+ }
+ }
+ }
+ lineCount = cm.lineCount();
+ for(block_end = cur_start.line; block_end < lineCount; block_end++) {
+ line = cm.getLineHandle(block_end);
+ if(line.text.match(/^\s*$/)) {
+ // empty or all whitespace - keep going
+ continue;
+ } else {
+ if(code_type(cm, block_end, line) !== "indented") {
+ block_end -= 1;
+ break;
+ }
+ }
+ }
+ }
+ // if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to
+ // insert a blank line so that the next line(s) continue to be indented code
+ var next_line = cm.getLineHandle(block_end + 1),
+ next_line_last_tok = next_line && cm.getTokenAt({
+ line: block_end + 1,
+ ch: next_line.text.length - 1
+ }),
+ next_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;
+ if(next_line_indented) {
+ cm.replaceRange("\n", {
+ line: block_end + 1,
+ ch: 0
+ });
+ }
+
+ for(var i = block_start; i <= block_end; i++) {
+ cm.indentLine(i, "subtract"); // TODO: this doesn't get tracked in the history, so can't be undone :(
+ }
+ cm.focus();
+ } else {
+ // insert code formatting
+ var no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0);
+ var sel_multi = cur_start.line !== cur_end.line;
+ if(no_sel_and_starting_of_line || sel_multi) {
+ insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);
+ } else {
+ _replaceSelection(cm, false, ["`", "`"]);
+ }
+ }
+}
+
+/**
+ * Action for toggling blockquote.
+ */
+function toggleBlockquote(editor) {
+ var cm = editor.codemirror;
+ _toggleLine(cm, "quote");
+}
+
+/**
+ * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal
+ */
+function toggleHeadingSmaller(editor) {
+ var cm = editor.codemirror;
+ _toggleHeading(cm, "smaller");
+}
+
+/**
+ * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal
+ */
+function toggleHeadingBigger(editor) {
+ var cm = editor.codemirror;
+ _toggleHeading(cm, "bigger");
+}
+
+/**
+ * Action for toggling heading size 1
+ */
+function toggleHeading1(editor) {
+ var cm = editor.codemirror;
+ _toggleHeading(cm, undefined, 1);
+}
+
+/**
+ * Action for toggling heading size 2
+ */
+function toggleHeading2(editor) {
+ var cm = editor.codemirror;
+ _toggleHeading(cm, undefined, 2);
+}
+
+/**
+ * Action for toggling heading size 3
+ */
+function toggleHeading3(editor) {
+ var cm = editor.codemirror;
+ _toggleHeading(cm, undefined, 3);
+}
+
+
+/**
+ * Action for toggling ul.
+ */
+function toggleUnorderedList(editor) {
+ var cm = editor.codemirror;
+ _toggleLine(cm, "unordered-list");
+}
+
+
+/**
+ * Action for toggling ol.
+ */
+function toggleOrderedList(editor) {
+ var cm = editor.codemirror;
+ _toggleLine(cm, "ordered-list");
+}
+
+/**
+ * Action for clean block (remove headline, list, blockquote code, markers)
+ */
+function cleanBlock(editor) {
+ var cm = editor.codemirror;
+ _cleanBlock(cm);
+}
+
+/**
+ * Action for drawing a link.
+ */
+function drawLink(editor) {
+ var cm = editor.codemirror;
+ var stat = getState(cm);
+ var options = editor.options;
+ var url = "http://";
+ if(options.promptURLs) {
+ url = prompt(options.promptTexts.link);
+ if(!url) {
+ return false;
+ }
+ }
+ _replaceSelection(cm, stat.link, options.insertTexts.link, url);
+}
+
+/**
+ * Action for drawing an img.
+ */
+function drawImage(editor) {
+ var cm = editor.codemirror;
+ var stat = getState(cm);
+ var options = editor.options;
+ var url = "http://";
+ if(options.promptURLs) {
+ url = prompt(options.promptTexts.image);
+ if(!url) {
+ return false;
+ }
+ }
+ _replaceSelection(cm, stat.image, options.insertTexts.image, url);
+}
+
+/**
+ * Action for drawing a table.
+ */
+function drawTable(editor) {
+ var cm = editor.codemirror;
+ var stat = getState(cm);
+ var options = editor.options;
+ _replaceSelection(cm, stat.table, options.insertTexts.table);
+}
+
+/**
+ * Action for drawing a horizontal rule.
+ */
+function drawHorizontalRule(editor) {
+ var cm = editor.codemirror;
+ var stat = getState(cm);
+ var options = editor.options;
+ _replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);
+}
+
+
+/**
+ * Undo action.
+ */
+function undo(editor) {
+ var cm = editor.codemirror;
+ cm.undo();
+ cm.focus();
+}
+
+
+/**
+ * Redo action.
+ */
+function redo(editor) {
+ var cm = editor.codemirror;
+ cm.redo();
+ cm.focus();
+}
+
+
+/**
+ * Toggle side by side preview
+ */
+function toggleSideBySide(editor) {
+ var cm = editor.codemirror;
+ var wrapper = cm.getWrapperElement();
+ var preview = wrapper.nextSibling;
+ var toolbarButton = editor.toolbarElements["side-by-side"];
+ var useSideBySideListener = false;
+ if(/editor-preview-active-side/.test(preview.className)) {
+ preview.className = preview.className.replace(
+ /\s*editor-preview-active-side\s*/g, ""
+ );
+ toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, "");
+ wrapper.className = wrapper.className.replace(/\s*CodeMirror-sided\s*/g, " ");
+ } else {
+ // When the preview button is clicked for the first time,
+ // give some time for the transition from editor.css to fire and the view to slide from right to left,
+ // instead of just appearing.
+ setTimeout(function() {
+ if(!cm.getOption("fullScreen"))
+ toggleFullScreen(editor);
+ preview.className += " editor-preview-active-side";
+ }, 1);
+ toolbarButton.className += " active";
+ wrapper.className += " CodeMirror-sided";
+ useSideBySideListener = true;
+ }
+
+ // Hide normal preview if active
+ var previewNormal = wrapper.lastChild;
+ if(/editor-preview-active/.test(previewNormal.className)) {
+ previewNormal.className = previewNormal.className.replace(
+ /\s*editor-preview-active\s*/g, ""
+ );
+ var toolbar = editor.toolbarElements.preview;
+ var toolbar_div = wrapper.previousSibling;
+ toolbar.className = toolbar.className.replace(/\s*active\s*/g, "");
+ toolbar_div.className = toolbar_div.className.replace(/\s*disabled-for-preview*/g, "");
+ }
+
+ var sideBySideRenderingFunction = function() {
+ preview.innerHTML = editor.options.previewRender(editor.value(), preview);
+ };
+
+ if(!cm.sideBySideRenderingFunction) {
+ cm.sideBySideRenderingFunction = sideBySideRenderingFunction;
+ }
+
+ if(useSideBySideListener) {
+ preview.innerHTML = editor.options.previewRender(editor.value(), preview);
+ cm.on("update", cm.sideBySideRenderingFunction);
+ } else {
+ cm.off("update", cm.sideBySideRenderingFunction);
+ }
+
+ // Refresh to fix selection being off (#309)
+ cm.refresh();
+}
+
+
+/**
+ * Preview action.
+ */
+function togglePreview(editor) {
+ var cm = editor.codemirror;
+ var wrapper = cm.getWrapperElement();
+ var toolbar_div = wrapper.previousSibling;
+ var toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;
+ var preview = wrapper.lastChild;
+ if(!preview || !/editor-preview/.test(preview.className)) {
+ preview = document.createElement("div");
+ preview.className = "editor-preview";
+ wrapper.appendChild(preview);
+ }
+ if(/editor-preview-active/.test(preview.className)) {
+ preview.className = preview.className.replace(
+ /\s*editor-preview-active\s*/g, ""
+ );
+ if(toolbar) {
+ toolbar.className = toolbar.className.replace(/\s*active\s*/g, "");
+ toolbar_div.className = toolbar_div.className.replace(/\s*disabled-for-preview*/g, "");
+ }
+ } else {
+ // When the preview button is clicked for the first time,
+ // give some time for the transition from editor.css to fire and the view to slide from right to left,
+ // instead of just appearing.
+ setTimeout(function() {
+ preview.className += " editor-preview-active";
+ }, 1);
+ if(toolbar) {
+ toolbar.className += " active";
+ toolbar_div.className += " disabled-for-preview";
+ }
+ }
+ preview.innerHTML = editor.options.previewRender(editor.value(), preview);
+
+ // Turn off side by side if needed
+ var sidebyside = cm.getWrapperElement().nextSibling;
+ if(/editor-preview-active-side/.test(sidebyside.className))
+ toggleSideBySide(editor);
+}
+
+function _replaceSelection(cm, active, startEnd, url) {
+ if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))
+ return;
+
+ var text;
+ var start = startEnd[0];
+ var end = startEnd[1];
+ var startPoint = cm.getCursor("start");
+ var endPoint = cm.getCursor("end");
+ if(url) {
+ end = end.replace("#url#", url);
+ }
+ if(active) {
+ text = cm.getLine(startPoint.line);
+ start = text.slice(0, startPoint.ch);
+ end = text.slice(startPoint.ch);
+ cm.replaceRange(start + end, {
+ line: startPoint.line,
+ ch: 0
+ });
+ } else {
+ text = cm.getSelection();
+ cm.replaceSelection(start + text + end);
+
+ startPoint.ch += start.length;
+ if(startPoint !== endPoint) {
+ endPoint.ch += start.length;
+ }
+ }
+ cm.setSelection(startPoint, endPoint);
+ cm.focus();
+}
+
+
+function _toggleHeading(cm, direction, size) {
+ if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))
+ return;
+
+ var startPoint = cm.getCursor("start");
+ var endPoint = cm.getCursor("end");
+ for(var i = startPoint.line; i <= endPoint.line; i++) {
+ (function(i) {
+ var text = cm.getLine(i);
+ var currHeadingLevel = text.search(/[^#]/);
+
+ if(direction !== undefined) {
+ if(currHeadingLevel <= 0) {
+ if(direction == "bigger") {
+ text = "###### " + text;
+ } else {
+ text = "# " + text;
+ }
+ } else if(currHeadingLevel == 6 && direction == "smaller") {
+ text = text.substr(7);
+ } else if(currHeadingLevel == 1 && direction == "bigger") {
+ text = text.substr(2);
+ } else {
+ if(direction == "bigger") {
+ text = text.substr(1);
+ } else {
+ text = "#" + text;
+ }
+ }
+ } else {
+ if(size == 1) {
+ if(currHeadingLevel <= 0) {
+ text = "# " + text;
+ } else if(currHeadingLevel == size) {
+ text = text.substr(currHeadingLevel + 1);
+ } else {
+ text = "# " + text.substr(currHeadingLevel + 1);
+ }
+ } else if(size == 2) {
+ if(currHeadingLevel <= 0) {
+ text = "## " + text;
+ } else if(currHeadingLevel == size) {
+ text = text.substr(currHeadingLevel + 1);
+ } else {
+ text = "## " + text.substr(currHeadingLevel + 1);
+ }
+ } else {
+ if(currHeadingLevel <= 0) {
+ text = "### " + text;
+ } else if(currHeadingLevel == size) {
+ text = text.substr(currHeadingLevel + 1);
+ } else {
+ text = "### " + text.substr(currHeadingLevel + 1);
+ }
+ }
+ }
+
+ cm.replaceRange(text, {
+ line: i,
+ ch: 0
+ }, {
+ line: i,
+ ch: 99999999999999
+ });
+ })(i);
+ }
+ cm.focus();
+}
+
+
+function _toggleLine(cm, name) {
+ if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))
+ return;
+
+ var stat = getState(cm);
+ var startPoint = cm.getCursor("start");
+ var endPoint = cm.getCursor("end");
+ var repl = {
+ "quote": /^(\s*)\>\s+/,
+ "unordered-list": /^(\s*)(\*|\-|\+)\s+/,
+ "ordered-list": /^(\s*)\d+\.\s+/
+ };
+ var map = {
+ "quote": "> ",
+ "unordered-list": "* ",
+ "ordered-list": "1. "
+ };
+ for(var i = startPoint.line; i <= endPoint.line; i++) {
+ (function(i) {
+ var text = cm.getLine(i);
+ if(stat[name]) {
+ text = text.replace(repl[name], "$1");
+ } else {
+ text = map[name] + text;
+ }
+ cm.replaceRange(text, {
+ line: i,
+ ch: 0
+ }, {
+ line: i,
+ ch: 99999999999999
+ });
+ })(i);
+ }
+ cm.focus();
+}
+
+function _toggleBlock(editor, type, start_chars, end_chars) {
+ if(/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className))
+ return;
+
+ end_chars = (typeof end_chars === "undefined") ? start_chars : end_chars;
+ var cm = editor.codemirror;
+ var stat = getState(cm);
+
+ var text;
+ var start = start_chars;
+ var end = end_chars;
+
+ var startPoint = cm.getCursor("start");
+ var endPoint = cm.getCursor("end");
+
+ if(stat[type]) {
+ text = cm.getLine(startPoint.line);
+ start = text.slice(0, startPoint.ch);
+ end = text.slice(startPoint.ch);
+ if(type == "bold") {
+ start = start.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/, "");
+ end = end.replace(/(\*\*|__)/, "");
+ } else if(type == "italic") {
+ start = start.replace(/(\*|_)(?![\s\S]*(\*|_))/, "");
+ end = end.replace(/(\*|_)/, "");
+ } else if(type == "strikethrough") {
+ start = start.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/, "");
+ end = end.replace(/(\*\*|~~)/, "");
+ }
+ cm.replaceRange(start + end, {
+ line: startPoint.line,
+ ch: 0
+ }, {
+ line: startPoint.line,
+ ch: 99999999999999
+ });
+
+ if(type == "bold" || type == "strikethrough") {
+ startPoint.ch -= 2;
+ if(startPoint !== endPoint) {
+ endPoint.ch -= 2;
+ }
+ } else if(type == "italic") {
+ startPoint.ch -= 1;
+ if(startPoint !== endPoint) {
+ endPoint.ch -= 1;
+ }
+ }
+ } else {
+ text = cm.getSelection();
+ if(type == "bold") {
+ text = text.split("**").join("");
+ text = text.split("__").join("");
+ } else if(type == "italic") {
+ text = text.split("*").join("");
+ text = text.split("_").join("");
+ } else if(type == "strikethrough") {
+ text = text.split("~~").join("");
+ }
+ cm.replaceSelection(start + text + end);
+
+ startPoint.ch += start_chars.length;
+ endPoint.ch = startPoint.ch + text.length;
+ }
+
+ cm.setSelection(startPoint, endPoint);
+ cm.focus();
+}
+
+function _cleanBlock(cm) {
+ if(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))
+ return;
+
+ var startPoint = cm.getCursor("start");
+ var endPoint = cm.getCursor("end");
+ var text;
+
+ for(var line = startPoint.line; line <= endPoint.line; line++) {
+ text = cm.getLine(line);
+ text = text.replace(/^[ ]*([# ]+|\*|\-|[> ]+|[0-9]+(.|\)))[ ]*/, "");
+
+ cm.replaceRange(text, {
+ line: line,
+ ch: 0
+ }, {
+ line: line,
+ ch: 99999999999999
+ });
+ }
+}
+
+// Merge the properties of one object into another.
+function _mergeProperties(target, source) {
+ for(var property in source) {
+ if(source.hasOwnProperty(property)) {
+ if(source[property] instanceof Array) {
+ target[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);
+ } else if(
+ source[property] !== null &&
+ typeof source[property] === "object" &&
+ source[property].constructor === Object
+ ) {
+ target[property] = _mergeProperties(target[property] || {}, source[property]);
+ } else {
+ target[property] = source[property];
+ }
+ }
+ }
+
+ return target;
+}
+
+// Merge an arbitrary number of objects into one.
+function extend(target) {
+ for(var i = 1; i < arguments.length; i++) {
+ target = _mergeProperties(target, arguments[i]);
+ }
+
+ return target;
+}
+
+/* The right word count in respect for CJK. */
+function wordCount(data) {
+ var pattern = /[a-zA-Z0-9_\u0392-\u03c9\u0410-\u04F9]+|[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]+/g;
+ var m = data.match(pattern);
+ var count = 0;
+ if(m === null) return count;
+ for(var i = 0; i < m.length; i++) {
+ if(m[i].charCodeAt(0) >= 0x4E00) {
+ count += m[i].length;
+ } else {
+ count += 1;
+ }
+ }
+ return count;
+}
+
+var toolbarBuiltInButtons = {
+ "bold": {
+ name: "bold",
+ action: toggleBold,
+ className: "fa fa-bold",
+ title: "Bold",
+ default: true
+ },
+ "italic": {
+ name: "italic",
+ action: toggleItalic,
+ className: "fa fa-italic",
+ title: "Italic",
+ default: true
+ },
+ "strikethrough": {
+ name: "strikethrough",
+ action: toggleStrikethrough,
+ className: "fa fa-strikethrough",
+ title: "Strikethrough"
+ },
+ "heading": {
+ name: "heading",
+ action: toggleHeadingSmaller,
+ className: "fa fa-header",
+ title: "Heading",
+ default: true
+ },
+ "heading-smaller": {
+ name: "heading-smaller",
+ action: toggleHeadingSmaller,
+ className: "fa fa-header fa-header-x fa-header-smaller",
+ title: "Smaller Heading"
+ },
+ "heading-bigger": {
+ name: "heading-bigger",
+ action: toggleHeadingBigger,
+ className: "fa fa-header fa-header-x fa-header-bigger",
+ title: "Bigger Heading"
+ },
+ "heading-1": {
+ name: "heading-1",
+ action: toggleHeading1,
+ className: "fa fa-header fa-header-x fa-header-1",
+ title: "Big Heading"
+ },
+ "heading-2": {
+ name: "heading-2",
+ action: toggleHeading2,
+ className: "fa fa-header fa-header-x fa-header-2",
+ title: "Medium Heading"
+ },
+ "heading-3": {
+ name: "heading-3",
+ action: toggleHeading3,
+ className: "fa fa-header fa-header-x fa-header-3",
+ title: "Small Heading"
+ },
+ "separator-1": {
+ name: "separator-1"
+ },
+ "code": {
+ name: "code",
+ action: toggleCodeBlock,
+ className: "fa fa-code",
+ title: "Code"
+ },
+ "quote": {
+ name: "quote",
+ action: toggleBlockquote,
+ className: "fa fa-quote-left",
+ title: "Quote",
+ default: true
+ },
+ "unordered-list": {
+ name: "unordered-list",
+ action: toggleUnorderedList,
+ className: "fa fa-list-ul",
+ title: "Generic List",
+ default: true
+ },
+ "ordered-list": {
+ name: "ordered-list",
+ action: toggleOrderedList,
+ className: "fa fa-list-ol",
+ title: "Numbered List",
+ default: true
+ },
+ "clean-block": {
+ name: "clean-block",
+ action: cleanBlock,
+ className: "fa fa-eraser fa-clean-block",
+ title: "Clean block"
+ },
+ "separator-2": {
+ name: "separator-2"
+ },
+ "link": {
+ name: "link",
+ action: drawLink,
+ className: "fa fa-link",
+ title: "Create Link",
+ default: true
+ },
+ "image": {
+ name: "image",
+ action: drawImage,
+ className: "fa fa-picture-o",
+ title: "Insert Image",
+ default: true
+ },
+ "table": {
+ name: "table",
+ action: drawTable,
+ className: "fa fa-table",
+ title: "Insert Table"
+ },
+ "horizontal-rule": {
+ name: "horizontal-rule",
+ action: drawHorizontalRule,
+ className: "fa fa-minus",
+ title: "Insert Horizontal Line"
+ },
+ "separator-3": {
+ name: "separator-3"
+ },
+ "preview": {
+ name: "preview",
+ action: togglePreview,
+ className: "fa fa-eye no-disable",
+ title: "Toggle Preview",
+ default: true
+ },
+ "side-by-side": {
+ name: "side-by-side",
+ action: toggleSideBySide,
+ className: "fa fa-columns no-disable no-mobile",
+ title: "Toggle Side by Side",
+ default: true
+ },
+ "fullscreen": {
+ name: "fullscreen",
+ action: toggleFullScreen,
+ className: "fa fa-arrows-alt no-disable no-mobile",
+ title: "Toggle Fullscreen",
+ default: true
+ },
+ "separator-4": {
+ name: "separator-4"
+ },
+ "guide": {
+ name: "guide",
+ action: "https://simplemde.com/markdown-guide",
+ className: "fa fa-question-circle",
+ title: "Markdown Guide",
+ default: true
+ },
+ "separator-5": {
+ name: "separator-5"
+ },
+ "undo": {
+ name: "undo",
+ action: undo,
+ className: "fa fa-undo no-disable",
+ title: "Undo"
+ },
+ "redo": {
+ name: "redo",
+ action: redo,
+ className: "fa fa-repeat no-disable",
+ title: "Redo"
+ }
+};
+
+var insertTexts = {
+ link: ["[", "](#url#)"],
+ image: ["![](", "#url#)"],
+ table: ["", "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],
+ horizontalRule: ["", "\n\n-----\n\n"]
+};
+
+var promptTexts = {
+ link: "URL for the link:",
+ image: "URL of the image:"
+};
+
+var blockStyles = {
+ "bold": "**",
+ "code": "```",
+ "italic": "*"
+};
+
+/**
+ * Interface of SimpleMDE.
+ */
+function SimpleMDE(options) {
+ // Handle options parameter
+ options = options || {};
+
+
+ // Used later to refer to it"s parent
+ options.parent = this;
+
+
+ // Check if Font Awesome needs to be auto downloaded
+ var autoDownloadFA = true;
+
+ if(options.autoDownloadFontAwesome === false) {
+ autoDownloadFA = false;
+ }
+
+ if(options.autoDownloadFontAwesome !== true) {
+ var styleSheets = document.styleSheets;
+ for(var i = 0; i < styleSheets.length; i++) {
+ if(!styleSheets[i].href)
+ continue;
+
+ if(styleSheets[i].href.indexOf("//maxcdn.bootstrapcdn.com/font-awesome/") > -1) {
+ autoDownloadFA = false;
+ }
+ }
+ }
+
+ if(autoDownloadFA) {
+ var link = document.createElement("link");
+ link.rel = "stylesheet";
+ link.href = "https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css";
+ document.getElementsByTagName("head")[0].appendChild(link);
+ }
+
+
+ // Find the textarea to use
+ if(options.element) {
+ this.element = options.element;
+ } else if(options.element === null) {
+ // This means that the element option was specified, but no element was found
+ console.log("SimpleMDE: Error. No element was found.");
+ return;
+ }
+
+
+ // Handle toolbar
+ if(options.toolbar === undefined) {
+ // Initialize
+ options.toolbar = [];
+
+
+ // Loop over the built in buttons, to get the preferred order
+ for(var key in toolbarBuiltInButtons) {
+ if(toolbarBuiltInButtons.hasOwnProperty(key)) {
+ if(key.indexOf("separator-") != -1) {
+ options.toolbar.push("|");
+ }
+
+ if(toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) {
+ options.toolbar.push(key);
+ }
+ }
+ }
+ }
+
+
+ // Handle status bar
+ if(!options.hasOwnProperty("status")) {
+ options.status = ["autosave", "lines", "words", "cursor"];
+ }
+
+
+ // Add default preview rendering function
+ if(!options.previewRender) {
+ options.previewRender = function(plainText) {
+ // Note: "this" refers to the options object
+ return this.parent.markdown(plainText);
+ };
+ }
+
+
+ // Set default options for parsing config
+ options.parsingConfig = extend({
+ highlightFormatting: true // needed for toggleCodeBlock to detect types of code
+ }, options.parsingConfig || {});
+
+
+ // Merging the insertTexts, with the given options
+ options.insertTexts = extend({}, insertTexts, options.insertTexts || {});
+
+
+ // Merging the promptTexts, with the given options
+ options.promptTexts = promptTexts;
+
+
+ // Merging the blockStyles, with the given options
+ options.blockStyles = extend({}, blockStyles, options.blockStyles || {});
+
+
+ // Merging the shortcuts, with the given options
+ options.shortcuts = extend({}, shortcuts, options.shortcuts || {});
+
+
+ // Change unique_id to uniqueId for backwards compatibility
+ if(options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != "")
+ options.autosave.uniqueId = options.autosave.unique_id;
+
+
+ // Update this options
+ this.options = options;
+
+
+ // Auto render
+ this.render();
+
+
+ // The codemirror component is only available after rendering
+ // so, the setter for the initialValue can only run after
+ // the element has been rendered
+ if(options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {
+ this.value(options.initialValue);
+ }
+}
+
+/**
+ * Default markdown render.
+ */
+SimpleMDE.prototype.markdown = function(text) {
+ if(marked) {
+ // Initialize
+ var markedOptions = {};
+
+
+ // Update options
+ if(this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {
+ markedOptions.breaks = false;
+ } else {
+ markedOptions.breaks = true;
+ }
+
+ if(this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true && window.hljs) {
+ markedOptions.highlight = function(code) {
+ return window.hljs.highlightAuto(code).value;
+ };
+ }
+
+
+ // Set options
+ marked.setOptions(markedOptions);
+
+
+ // Return
+ return marked(text);
+ }
+};
+
+/**
+ * Render editor to the given element.
+ */
+SimpleMDE.prototype.render = function(el) {
+ if(!el) {
+ el = this.element || document.getElementsByTagName("textarea")[0];
+ }
+
+ if(this._rendered && this._rendered === el) {
+ // Already rendered.
+ return;
+ }
+
+ this.element = el;
+ var options = this.options;
+
+ var self = this;
+ var keyMaps = {};
+
+ for(var key in options.shortcuts) {
+ // null stands for "do not bind this command"
+ if(options.shortcuts[key] !== null && bindings[key] !== null) {
+ (function(key) {
+ keyMaps[fixShortcut(options.shortcuts[key])] = function() {
+ bindings[key](self);
+ };
+ })(key);
+ }
+ }
+
+ keyMaps["Enter"] = "newlineAndIndentContinueMarkdownList";
+ keyMaps["Tab"] = "tabAndIndentMarkdownList";
+ keyMaps["Shift-Tab"] = "shiftTabAndUnindentMarkdownList";
+ keyMaps["Esc"] = function(cm) {
+ if(cm.getOption("fullScreen")) toggleFullScreen(self);
+ };
+
+ document.addEventListener("keydown", function(e) {
+ e = e || window.event;
+
+ if(e.keyCode == 27) {
+ if(self.codemirror.getOption("fullScreen")) toggleFullScreen(self);
+ }
+ }, false);
+
+ var mode, backdrop;
+ if(options.spellChecker !== false) {
+ mode = "spell-checker";
+ backdrop = options.parsingConfig;
+ backdrop.name = "gfm";
+ backdrop.gitHubSpice = false;
+
+ CodeMirrorSpellChecker({
+ codeMirrorInstance: CodeMirror
+ });
+ } else {
+ mode = options.parsingConfig;
+ mode.name = "gfm";
+ mode.gitHubSpice = false;
+ }
+
+ this.codemirror = CodeMirror.fromTextArea(el, {
+ mode: mode,
+ backdrop: backdrop,
+ theme: "paper",
+ tabSize: (options.tabSize != undefined) ? options.tabSize : 2,
+ indentUnit: (options.tabSize != undefined) ? options.tabSize : 2,
+ indentWithTabs: (options.indentWithTabs === false) ? false : true,
+ lineNumbers: false,
+ autofocus: (options.autofocus === true) ? true : false,
+ extraKeys: keyMaps,
+ lineWrapping: (options.lineWrapping === false) ? false : true,
+ allowDropFileTypes: ["text/plain"],
+ placeholder: options.placeholder || el.getAttribute("placeholder") || "",
+ styleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : true
+ });
+
+ if(options.forceSync === true) {
+ var cm = this.codemirror;
+ cm.on("change", function() {
+ cm.save();
+ });
+ }
+
+ this.gui = {};
+
+ if(options.toolbar !== false) {
+ this.gui.toolbar = this.createToolbar();
+ }
+ if(options.status !== false) {
+ this.gui.statusbar = this.createStatusbar();
+ }
+ if(options.autosave != undefined && options.autosave.enabled === true) {
+ this.autosave();
+ }
+
+ this.gui.sideBySide = this.createSideBySide();
+
+ this._rendered = this.element;
+
+
+ // Fixes CodeMirror bug (#344)
+ var temp_cm = this.codemirror;
+ setTimeout(function() {
+ temp_cm.refresh();
+ }.bind(temp_cm), 0);
+};
+
+// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.
+function isLocalStorageAvailable() {
+ if(typeof localStorage === "object") {
+ try {
+ localStorage.setItem("smde_localStorage", 1);
+ localStorage.removeItem("smde_localStorage");
+ } catch(e) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ return true;
+}
+
+SimpleMDE.prototype.autosave = function() {
+ if(isLocalStorageAvailable()) {
+ var simplemde = this;
+
+ if(this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == "") {
+ console.log("SimpleMDE: You must set a uniqueId to use the autosave feature");
+ return;
+ }
+
+ if(simplemde.element.form != null && simplemde.element.form != undefined) {
+ simplemde.element.form.addEventListener("submit", function() {
+ localStorage.removeItem("smde_" + simplemde.options.autosave.uniqueId);
+ });
+ }
+
+ if(this.options.autosave.loaded !== true) {
+ if(typeof localStorage.getItem("smde_" + this.options.autosave.uniqueId) == "string" && localStorage.getItem("smde_" + this.options.autosave.uniqueId) != "") {
+ this.codemirror.setValue(localStorage.getItem("smde_" + this.options.autosave.uniqueId));
+ this.options.autosave.foundSavedValue = true;
+ }
+
+ this.options.autosave.loaded = true;
+ }
+
+ localStorage.setItem("smde_" + this.options.autosave.uniqueId, simplemde.value());
+
+ var el = document.getElementById("autosaved");
+ if(el != null && el != undefined && el != "") {
+ var d = new Date();
+ var hh = d.getHours();
+ var m = d.getMinutes();
+ var dd = "am";
+ var h = hh;
+ if(h >= 12) {
+ h = hh - 12;
+ dd = "pm";
+ }
+ if(h == 0) {
+ h = 12;
+ }
+ m = m < 10 ? "0" + m : m;
+
+ el.innerHTML = "Autosaved: " + h + ":" + m + " " + dd;
+ }
+
+ this.autosaveTimeoutId = setTimeout(function() {
+ simplemde.autosave();
+ }, this.options.autosave.delay || 10000);
+ } else {
+ console.log("SimpleMDE: localStorage not available, cannot autosave");
+ }
+};
+
+SimpleMDE.prototype.clearAutosavedValue = function() {
+ if(isLocalStorageAvailable()) {
+ if(this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == "") {
+ console.log("SimpleMDE: You must set a uniqueId to clear the autosave value");
+ return;
+ }
+
+ localStorage.removeItem("smde_" + this.options.autosave.uniqueId);
+ } else {
+ console.log("SimpleMDE: localStorage not available, cannot autosave");
+ }
+};
+
+SimpleMDE.prototype.createSideBySide = function() {
+ var cm = this.codemirror;
+ var wrapper = cm.getWrapperElement();
+ var preview = wrapper.nextSibling;
+
+ if(!preview || !/editor-preview-side/.test(preview.className)) {
+ preview = document.createElement("div");
+ preview.className = "editor-preview-side";
+ wrapper.parentNode.insertBefore(preview, wrapper.nextSibling);
+ }
+
+ // Syncs scroll editor -> preview
+ var cScroll = false;
+ var pScroll = false;
+ cm.on("scroll", function(v) {
+ if(cScroll) {
+ cScroll = false;
+ return;
+ }
+ pScroll = true;
+ var height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;
+ var ratio = parseFloat(v.getScrollInfo().top) / height;
+ var move = (preview.scrollHeight - preview.clientHeight) * ratio;
+ preview.scrollTop = move;
+ });
+
+ // Syncs scroll preview -> editor
+ preview.onscroll = function() {
+ if(pScroll) {
+ pScroll = false;
+ return;
+ }
+ cScroll = true;
+ var height = preview.scrollHeight - preview.clientHeight;
+ var ratio = parseFloat(preview.scrollTop) / height;
+ var move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;
+ cm.scrollTo(0, move);
+ };
+ return preview;
+};
+
+SimpleMDE.prototype.createToolbar = function(items) {
+ items = items || this.options.toolbar;
+
+ if(!items || items.length === 0) {
+ return;
+ }
+ var i;
+ for(i = 0; i < items.length; i++) {
+ if(toolbarBuiltInButtons[items[i]] != undefined) {
+ items[i] = toolbarBuiltInButtons[items[i]];
+ }
+ }
+
+ var bar = document.createElement("div");
+ bar.className = "editor-toolbar";
+
+ var self = this;
+
+ var toolbarData = {};
+ self.toolbar = items;
+
+ for(i = 0; i < items.length; i++) {
+ if(items[i].name == "guide" && self.options.toolbarGuideIcon === false)
+ continue;
+
+ if(self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1)
+ continue;
+
+ // Fullscreen does not work well on mobile devices (even tablets)
+ // In the future, hopefully this can be resolved
+ if((items[i].name == "fullscreen" || items[i].name == "side-by-side") && isMobile())
+ continue;
+
+
+ // Don't include trailing separators
+ if(items[i] === "|") {
+ var nonSeparatorIconsFollow = false;
+
+ for(var x = (i + 1); x < items.length; x++) {
+ if(items[x] !== "|" && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {
+ nonSeparatorIconsFollow = true;
+ }
+ }
+
+ if(!nonSeparatorIconsFollow)
+ continue;
+ }
+
+
+ // Create the icon and append to the toolbar
+ (function(item) {
+ var el;
+ if(item === "|") {
+ el = createSep();
+ } else {
+ el = createIcon(item, self.options.toolbarTips, self.options.shortcuts);
+ }
+
+ // bind events, special for info
+ if(item.action) {
+ if(typeof item.action === "function") {
+ el.onclick = function(e) {
+ e.preventDefault();
+ item.action(self);
+ };
+ } else if(typeof item.action === "string") {
+ el.href = item.action;
+ el.target = "_blank";
+ }
+ }
+
+ toolbarData[item.name || item] = el;
+ bar.appendChild(el);
+ })(items[i]);
+ }
+
+ self.toolbarElements = toolbarData;
+
+ var cm = this.codemirror;
+ cm.on("cursorActivity", function() {
+ var stat = getState(cm);
+
+ for(var key in toolbarData) {
+ (function(key) {
+ var el = toolbarData[key];
+ if(stat[key]) {
+ el.className += " active";
+ } else if(key != "fullscreen" && key != "side-by-side") {
+ el.className = el.className.replace(/\s*active\s*/g, "");
+ }
+ })(key);
+ }
+ });
+
+ var cmWrapper = cm.getWrapperElement();
+ cmWrapper.parentNode.insertBefore(bar, cmWrapper);
+ return bar;
+};
+
+SimpleMDE.prototype.createStatusbar = function(status) {
+ // Initialize
+ status = status || this.options.status;
+ var options = this.options;
+ var cm = this.codemirror;
+
+
+ // Make sure the status variable is valid
+ if(!status || status.length === 0)
+ return;
+
+
+ // Set up the built-in items
+ var items = [];
+ var i, onUpdate, defaultValue;
+
+ for(i = 0; i < status.length; i++) {
+ // Reset some values
+ onUpdate = undefined;
+ defaultValue = undefined;
+
+
+ // Handle if custom or not
+ if(typeof status[i] === "object") {
+ items.push({
+ className: status[i].className,
+ defaultValue: status[i].defaultValue,
+ onUpdate: status[i].onUpdate
+ });
+ } else {
+ var name = status[i];
+
+ if(name === "words") {
+ defaultValue = function(el) {
+ el.innerHTML = wordCount(cm.getValue());
+ };
+ onUpdate = function(el) {
+ el.innerHTML = wordCount(cm.getValue());
+ };
+ } else if(name === "lines") {
+ defaultValue = function(el) {
+ el.innerHTML = cm.lineCount();
+ };
+ onUpdate = function(el) {
+ el.innerHTML = cm.lineCount();
+ };
+ } else if(name === "cursor") {
+ defaultValue = function(el) {
+ el.innerHTML = "0:0";
+ };
+ onUpdate = function(el) {
+ var pos = cm.getCursor();
+ el.innerHTML = pos.line + ":" + pos.ch;
+ };
+ } else if(name === "autosave") {
+ defaultValue = function(el) {
+ if(options.autosave != undefined && options.autosave.enabled === true) {
+ el.setAttribute("id", "autosaved");
+ }
+ };
+ }
+
+ items.push({
+ className: name,
+ defaultValue: defaultValue,
+ onUpdate: onUpdate
+ });
+ }
+ }
+
+
+ // Create element for the status bar
+ var bar = document.createElement("div");
+ bar.className = "editor-statusbar";
+
+
+ // Create a new span for each item
+ for(i = 0; i < items.length; i++) {
+ // Store in temporary variable
+ var item = items[i];
+
+
+ // Create span element
+ var el = document.createElement("span");
+ el.className = item.className;
+
+
+ // Ensure the defaultValue is a function
+ if(typeof item.defaultValue === "function") {
+ item.defaultValue(el);
+ }
+
+
+ // Ensure the onUpdate is a function
+ if(typeof item.onUpdate === "function") {
+ // Create a closure around the span of the current action, then execute the onUpdate handler
+ this.codemirror.on("update", (function(el, item) {
+ return function() {
+ item.onUpdate(el);
+ };
+ }(el, item)));
+ }
+
+
+ // Append the item to the status bar
+ bar.appendChild(el);
+ }
+
+
+ // Insert the status bar into the DOM
+ var cmWrapper = this.codemirror.getWrapperElement();
+ cmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);
+ return bar;
+};
+
+/**
+ * Get or set the text content.
+ */
+SimpleMDE.prototype.value = function(val) {
+ if(val === undefined) {
+ return this.codemirror.getValue();
+ } else {
+ this.codemirror.getDoc().setValue(val);
+ return this;
+ }
+};
+
+
+/**
+ * Bind static methods for exports.
+ */
+SimpleMDE.toggleBold = toggleBold;
+SimpleMDE.toggleItalic = toggleItalic;
+SimpleMDE.toggleStrikethrough = toggleStrikethrough;
+SimpleMDE.toggleBlockquote = toggleBlockquote;
+SimpleMDE.toggleHeadingSmaller = toggleHeadingSmaller;
+SimpleMDE.toggleHeadingBigger = toggleHeadingBigger;
+SimpleMDE.toggleHeading1 = toggleHeading1;
+SimpleMDE.toggleHeading2 = toggleHeading2;
+SimpleMDE.toggleHeading3 = toggleHeading3;
+SimpleMDE.toggleCodeBlock = toggleCodeBlock;
+SimpleMDE.toggleUnorderedList = toggleUnorderedList;
+SimpleMDE.toggleOrderedList = toggleOrderedList;
+SimpleMDE.cleanBlock = cleanBlock;
+SimpleMDE.drawLink = drawLink;
+SimpleMDE.drawImage = drawImage;
+SimpleMDE.drawTable = drawTable;
+SimpleMDE.drawHorizontalRule = drawHorizontalRule;
+SimpleMDE.undo = undo;
+SimpleMDE.redo = redo;
+SimpleMDE.togglePreview = togglePreview;
+SimpleMDE.toggleSideBySide = toggleSideBySide;
+SimpleMDE.toggleFullScreen = toggleFullScreen;
+
+/**
+ * Bind instance methods for exports.
+ */
+SimpleMDE.prototype.toggleBold = function() {
+ toggleBold(this);
+};
+SimpleMDE.prototype.toggleItalic = function() {
+ toggleItalic(this);
+};
+SimpleMDE.prototype.toggleStrikethrough = function() {
+ toggleStrikethrough(this);
+};
+SimpleMDE.prototype.toggleBlockquote = function() {
+ toggleBlockquote(this);
+};
+SimpleMDE.prototype.toggleHeadingSmaller = function() {
+ toggleHeadingSmaller(this);
+};
+SimpleMDE.prototype.toggleHeadingBigger = function() {
+ toggleHeadingBigger(this);
+};
+SimpleMDE.prototype.toggleHeading1 = function() {
+ toggleHeading1(this);
+};
+SimpleMDE.prototype.toggleHeading2 = function() {
+ toggleHeading2(this);
+};
+SimpleMDE.prototype.toggleHeading3 = function() {
+ toggleHeading3(this);
+};
+SimpleMDE.prototype.toggleCodeBlock = function() {
+ toggleCodeBlock(this);
+};
+SimpleMDE.prototype.toggleUnorderedList = function() {
+ toggleUnorderedList(this);
+};
+SimpleMDE.prototype.toggleOrderedList = function() {
+ toggleOrderedList(this);
+};
+SimpleMDE.prototype.cleanBlock = function() {
+ cleanBlock(this);
+};
+SimpleMDE.prototype.drawLink = function() {
+ drawLink(this);
+};
+SimpleMDE.prototype.drawImage = function() {
+ drawImage(this);
+};
+SimpleMDE.prototype.drawTable = function() {
+ drawTable(this);
+};
+SimpleMDE.prototype.drawHorizontalRule = function() {
+ drawHorizontalRule(this);
+};
+SimpleMDE.prototype.undo = function() {
+ undo(this);
+};
+SimpleMDE.prototype.redo = function() {
+ redo(this);
+};
+SimpleMDE.prototype.togglePreview = function() {
+ togglePreview(this);
+};
+SimpleMDE.prototype.toggleSideBySide = function() {
+ toggleSideBySide(this);
+};
+SimpleMDE.prototype.toggleFullScreen = function() {
+ toggleFullScreen(this);
+};
+
+SimpleMDE.prototype.isPreviewActive = function() {
+ var cm = this.codemirror;
+ var wrapper = cm.getWrapperElement();
+ var preview = wrapper.lastChild;
+
+ return /editor-preview-active/.test(preview.className);
+};
+
+SimpleMDE.prototype.isSideBySideActive = function() {
+ var cm = this.codemirror;
+ var wrapper = cm.getWrapperElement();
+ var preview = wrapper.nextSibling;
+
+ return /editor-preview-active-side/.test(preview.className);
+};
+
+SimpleMDE.prototype.isFullscreenActive = function() {
+ var cm = this.codemirror;
+
+ return cm.getOption("fullScreen");
+};
+
+SimpleMDE.prototype.getState = function() {
+ var cm = this.codemirror;
+
+ return getState(cm);
+};
+
+SimpleMDE.prototype.toTextArea = function() {
+ var cm = this.codemirror;
+ var wrapper = cm.getWrapperElement();
+
+ if(wrapper.parentNode) {
+ if(this.gui.toolbar) {
+ wrapper.parentNode.removeChild(this.gui.toolbar);
+ }
+ if(this.gui.statusbar) {
+ wrapper.parentNode.removeChild(this.gui.statusbar);
+ }
+ if(this.gui.sideBySide) {
+ wrapper.parentNode.removeChild(this.gui.sideBySide);
+ }
+ }
+
+ cm.toTextArea();
+
+ if(this.autosaveTimeoutId) {
+ clearTimeout(this.autosaveTimeoutId);
+ this.autosaveTimeoutId = undefined;
+ this.clearAutosavedValue();
+ }
+};
+
+module.exports = SimpleMDE; \ No newline at end of file
diff --git a/static/js/utils.js b/static/js/utils.js
new file mode 100644
index 0000000..83e6397
--- /dev/null
+++ b/static/js/utils.js
@@ -0,0 +1,18 @@
+function deg2rad(deg) {
+ return deg * (Math.PI/180)
+}
+function getDistanceFromLatLon(item1, item2) {
+ lat1 = item1['latitude']; lon1 = item1['longitude'];
+ lat2 = item2['latitude']; lon2 = item2['longitude'];
+ var R = 3958.8; // Radius of the earth
+ var dLat = deg2rad(lat2-lat1);
+ var dLon = deg2rad(lon2-lon1);
+ var a =
+ Math.sin(dLat/2) * Math.sin(dLat/2) +
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
+ Math.sin(dLon/2) * Math.sin(dLon/2)
+ ;
+ var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+ var d = R * c; // Distance in mi
+ return d;
+} \ No newline at end of file
diff --git a/templates/editor.html b/templates/editor.html
new file mode 100644
index 0000000..b6b7130
--- /dev/null
+++ b/templates/editor.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html style="height:100%">
+ <head>
+ <title>Photocosm - Editor</title>
+ <link rel="icon" type="image/x-icon" href="/static/img/favicon.ico">
+
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/leaflet.css') }}"
+ integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
+ crossorigin=""/>
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/dashboard.css') }}"/>
+ <script src="{{ url_for('static', filename='js/leaflet.js') }}"
+ integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
+ crossorigin=""></script>
+ <script src="https://unpkg.com/leaflet.vectorgrid@latest/dist/Leaflet.VectorGrid.js"></script>
+ <!-- <script src="{{ url_for('static', filename='js/utils.js') }}"></script> -->
+ <script src="{{ url_for('static', filename='js/editor.js') }}"></script>
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/navbar.css') }}">
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/editor.css') }}">
+ </head>
+
+ <body>
+ <div onclick="close_media_preview()" id="media-preview-modal" class="modal">
+ <img class="modal-content" id="modal-img">
+ <video class="modal-content" id="modal-video"></video>
+ </div>
+ <div id="share-modal" class="modal">
+ <div id="share-box" class="share-box">
+ <p style="margin-top:5px; margin-bottom:5px; margin-left:10px;">Sharing options</p>
+ <hr style="width: 100%; border-top: 3px double lightgray; margin:0;">
+ <div>
+ <label style="margin-left: 10px" for="visibility-dropdown">Visibility: </label>
+ <select onchange="update_visibility()" id="visibility-dropdown">
+ <option value="public">Public</option>
+ <option value="private">Private</option>
+ </select>
+ </div>
+ <div class="user-share-section " id="shared-users">
+ <!-- shared users -->
+ </div>
+ <div style="margin:10px; display:flex; flex-direction:row; padding:10px;">
+ <input style="flex:1; margin-right:10px;" id="share-email" placeholder="<user@email.com>">
+ <select style="margin-right:10px;" id="share-permissions">
+ <option value="viewer">Viewer</option>
+ <option value="editor">Editor</option>
+ </select>
+ <button onclick="add_shared_user()">Share</button>
+ </div>
+ </div>
+ </div>
+ <div id="collection-modal" class="modal">
+ <div id="collection-box" class="collection-box">
+ <p style="margin-top:5px; margin-bottom:5px; margin-left:10px;">Collection options</p>
+ <hr style="width: 100%; border-top: 3px double lightgray; margin:0">
+ <div style="display:grid; grid-template-columns: 30% 70%; margin:15px">
+ <label for="collection-title-field">Title: </label> <input onblur="collection_info_updated('title')" id="collection-title-field">
+ <label for="collection-subtitle-field">Subtitle: </label> <input onblur="collection_info_updated('subtitle')" id="collection-subtitle-field">
+ <label for="collection-info-field">Information: </label> <input onblur="collection_info_updated('info')" id="collection-info-field">
+ </div>
+ </div>
+ </div>
+ <p style="display:none" id="collection_id">{{ collection_id }}</p>
+ <div class="topnav">
+ <a onclick="open_collection_modal()" class="collection-title" id="collection-title"></a>
+ <a onclick="open_share_modal()">Share</a>
+ <a href="/viewer?collection={{ collection_id }}">Viewer</a>
+ <a class="split" href="/">Home</a>
+ </div>
+
+ <div class="page-container">
+ <div class="left-column">
+ <div class="tab-section">
+ <div class="tab-header">
+ <button class="tab active" onclick="set_tab(event, 'media_tab')">Media</button>
+ <button class="tab" onclick="set_tab(event, 'text_tab')">Text</button>
+ <button class="tab" onclick="set_tab(event, 'routes_tab')">Routes</button>
+ </div>
+ <div id="media_tab" class="tab-content" style="display:flex; flex-direction:column">
+ <div class="tab-filters" id="media-filters">
+ <input type="file" id="media_upload" style="display:none" accept=".JPG,.PNG,.JPEG,.HEIC,.HEIF,.MOV,.MP4,.WEBM" onchange="upload_media_files();" multiple/>
+ <label for="media_upload"><a style="text-decoration:underline; cursor:pointer;">Upload Media</a></label>
+ <label style="margin-left:15px;" for="sort-type">Sort by: </label>
+ <select onchange="update_media_grid()" id="sort-type">
+ <option value="none">None</option>
+ <option value="name">Name</option>
+ <option value="timestamp">Date/time</option>
+ <option value="id">Filename</option>
+ </select>
+ <button id="sort-direction-media" onclick="toggle_sort_direction('media')">Ascending</button>
+ <label style="margin-left:15px;" for="hide-location">Hide media with location: </label>
+ <input onchange="update_media_grid()" id="hide-location" type="checkbox">
+ <label style="margin-left:15px;" for="hide-timestamp">Hide media with timestamp: </label>
+ <input onchange="update_media_grid()" id="hide-timestamp" type="checkbox">
+ </div>
+ <div style="overflow:auto; flex-grow:1">
+ <div class="media-grid" id="media_grid"></div>
+ </div>
+ </div>
+ <div id="text_tab" class="tab-content" style="display:flex; flex-direction:column">
+ <div class="tab-filters">
+ <button id="add-note">Add Note</button>
+ <label for="sort-notes">Sort by:</label>
+ <select onchange="update_media_grid()" id="sort-type">
+ <option value="none">None</option>
+ <option value="name">Name</option>
+ <option value="timestamp">Date/time</option>
+ </select>
+ <button id="sort-direction-media" onclick="toggle_sort_direction('media')">Ascending</button>
+ </div>
+ </div>
+ <div id="routes_tab" class="tab-content">Not yet supported.</div>
+ </div>
+ <div class="media-preview" id="media-preview">
+ <img id="preview-img" onclick="open_media_preview()" style="object-fit: contain; max-width:100%; max-height:100%; position: relative; height: 60vh; width: auto;">
+ <video type="video/mp4" id="preview-video" style="object-fit: contain; max-width:100%; max-height:100%; position: relative; height: 60vh; width: auto;" controls></video>
+ </div>
+ </div>
+ <div class="right-column">
+ <div class="map-frame">
+ <div id="map"></div>
+ </div>
+ <div id="content_info" class="content-info" style="display:none">
+ <div id="media-content" class="content-info-edit">
+ <span style="font-weight: bold; margin-left: 10px; margin-top:5px;">Edit Media</span> <a class="delete-button" onclick="delete_media()">Delete</a>
+ <hr style="grid-column: 1 / 3; width: 100%; margin: 0;">
+
+ <label class="content-info-edit-label" for="media_name">Name:</label>
+ <input onblur="submit_edit_changes()" onchange="mark_info_change('name')" class="content-info-edit-field" type="text" id="media_name" autocomplete="off">
+
+ <label class="content-info-edit-label" for="media_id">Filename:</label>
+ <input class="content-info-edit-field" type="text" id="media_id" disabled autocomplete="off">
+
+ <label class="content-info-edit-label" for="media_timestamp">Date/time:</label>
+ <input onblur="submit_edit_changes()" onchange="mark_info_change('timestamp')" class="content-info-edit-field" type="datetime-local" id="media_timestamp" autocomplete="off">
+
+ <span class="content-info-edit-label">Location:</span>
+ <div style="display: flex; align-items: center; gap: 8px;">
+ <span id="media_coords">No location given!</span>
+ <button onclick="picker_clicked()" style="padding: 2px;">
+ <img src="static/img/picker.png" width="20px" height="20px">
+ </button>
+ </div>
+
+ <label class="content-info-edit-label" for="media_info">Information:</label>
+ <textarea onblur="submit_edit_changes()" onchange="mark_info_change('info')" class="content-info-edit-field" id="media_info" style="min-height: 60px; resize:none;"></textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+
+</html> \ No newline at end of file
diff --git a/templates/home.html b/templates/home.html
new file mode 100644
index 0000000..d54d2b7
--- /dev/null
+++ b/templates/home.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Photocosm - Home</title>
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/navbar.css') }}">
+ </head>
+ <body style="margin:0px">
+ <div class="topnav">
+ <a class="active" href="#home">Home</a>
+ {% if current_user.is_authenticated %}
+ <a href="/logout" class="split">Logout, {{current_user.name}}</a>
+ {% else %}
+ <a href="/login" class="split">Log In</a>
+ <a href="/signup" class="split">Sign Up</a>
+ {% endif %}
+ </div>
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+ <div class="notification is-danger">
+ {{ messages[0] }}
+ </div>
+ {% endif %}
+ {% endwith %}
+ <div style="margin-left:10%">
+ <h2>Collections</h2>
+ {% for collection in collections %}
+ <a href="editor?collection={{ collection['id'] }}">{{ collection['id'] }}</a> <br>
+ {% endfor %}
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/templates/login.html b/templates/login.html
new file mode 100644
index 0000000..26a2329
--- /dev/null
+++ b/templates/login.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Create Account</title>
+ </head>
+ <body>
+ <div class="column is-4 is-offset-4">
+ <h3 class="title">Login</h3>
+ <div class="box">
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+ <div class="notification is-danger">
+ {{ messages[0] }}
+ </div>
+ {% endif %}
+ {% endwith %}
+ <form method="POST" action="/login">
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="email" name="email" placeholder="Your Email" autofocus="">
+ </div>
+ </div>
+
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="password" name="password" placeholder="Your Password">
+ </div>
+ </div>
+ <div class="field">
+ <label class="checkbox">
+ <input type="checkbox" name="remember">
+ Remember me
+ </label>
+ </div>
+ <button class="button is-block is-info is-large is-fullwidth">Login</button>
+ </form>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/templates/signup.html b/templates/signup.html
new file mode 100644
index 0000000..dffeb62
--- /dev/null
+++ b/templates/signup.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Create Account</title>
+ </head>
+ <body>
+ <div>
+ <h3 class="title">Create an account</h3>
+ <div class="box">
+ {% with messages = get_flashed_messages() %}
+ {% if messages %}
+ <div class="notification is-danger">
+ {{ messages[0] }}. Go to <a href="{{ url_for('auth.login') }}">login page</a>.
+ </div>
+ {% endif %}
+ {% endwith %}
+ <form method="POST" action="/signup">
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="email" name="email" placeholder="Email" autofocus="">
+ </div>
+ </div>
+
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="text" name="name" placeholder="Name" autofocus="">
+ </div>
+ </div>
+
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="password" name="password" placeholder="Password">
+ </div>
+ </div>
+
+ <div class="field">
+ <div class="control">
+ <input class="input is-large" type="file" name="profile_picture" accept=".jpg,.jpeg,.png">
+ </div>
+ </div>
+
+ <button class="button is-block is-info is-large is-fullwidth">Sign Up</button>
+ </form>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/users.json b/users.json
new file mode 100644
index 0000000..6ca29f6
--- /dev/null
+++ b/users.json
@@ -0,0 +1 @@
+{"john@gmail.com": {"email": "john@gmail.com", "password": "pbkdf2:sha256:1000000$3Ji8ZFYGLtwtvOmX$6be0a3a2f1bb5560ac4b8591fe084396cc900d7c3be55d9d997d634764196a5d", "name": "John"}, "fred@gmail.com": {"email": "fred@gmail.com", "password": "pbkdf2:sha256:1000000$771YwAvpHFWHsLpj$bdd20e8da550c83b3ee18b78d0aa4d5b50a09ceba3a99aeb3ef777ddc8ce1ef4", "name": "fred"}, "goid@gmail.com": {"email": "goid@gmail.com", "password": "pbkdf2:sha256:1000000$Yn6f2wpThAsnmRxk$3a3be7f539d42489de861ab30dbc8e989fda5405c9ebdbc8b87acb9fadf9239a", "name": "goid"}} \ No newline at end of file