diff --git a/pom.xml b/pom.xml
index 9c412d876..726d5ff79 100644
--- a/pom.xml
+++ b/pom.xml
@@ -262,7 +262,7 @@
org.mobilitydata.gtfs-validator
gtfs-validator-main
- 4.2.0
+ 5.0.0
- a8a376c82b
+ 5dd609bfb5
diff --git a/src/main/java/com/conveyal/datatools/manager/DataManager.java b/src/main/java/com/conveyal/datatools/manager/DataManager.java
index ed3031ea2..6738a3ae6 100644
--- a/src/main/java/com/conveyal/datatools/manager/DataManager.java
+++ b/src/main/java/com/conveyal/datatools/manager/DataManager.java
@@ -204,19 +204,29 @@ static void registerRoutes() throws IOException {
SnapshotController.register(EDITOR_API_PREFIX);
EditorLockController.register(EDITOR_API_PREFIX);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.AREAS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.AGENCY, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.ATTRIBUTIONS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.CALENDAR, DataManager.GTFS_DATA_SOURCE);
// NOTE: fare_attributes controller handles updates to nested table fare_rules.
new EditorControllerImpl(EDITOR_API_PREFIX, Table.FARE_ATTRIBUTES, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.FARE_LEG_RULES, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.FARE_MEDIAS, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.FARE_PRODUCTS, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.FARE_TRANSFER_RULES, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.FEED_INFO, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.NETWORKS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.ROUTES, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.ROUTE_NETWORKS, DataManager.GTFS_DATA_SOURCE);
// NOTE: Patterns controller handles updates to nested tables shapes, pattern stops, and frequencies.
new EditorControllerImpl(EDITOR_API_PREFIX, Table.PATTERNS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.SCHEDULE_EXCEPTIONS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.STOPS, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.STOP_AREAS, DataManager.GTFS_DATA_SOURCE);
+ new EditorControllerImpl(EDITOR_API_PREFIX, Table.TIME_FRAMES, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.TRANSLATIONS, DataManager.GTFS_DATA_SOURCE);
new EditorControllerImpl(EDITOR_API_PREFIX, Table.TRIPS, DataManager.GTFS_DATA_SOURCE);
+
// TODO: Add transfers.txt controller?
}
diff --git a/src/test/java/com/conveyal/datatools/manager/jobs/validation/FaresV2ValidationTest.java b/src/test/java/com/conveyal/datatools/manager/jobs/validation/FaresV2ValidationTest.java
new file mode 100644
index 000000000..74094bfd5
--- /dev/null
+++ b/src/test/java/com/conveyal/datatools/manager/jobs/validation/FaresV2ValidationTest.java
@@ -0,0 +1,98 @@
+package com.conveyal.datatools.manager.jobs.validation;
+
+import com.conveyal.datatools.DatatoolsTest;
+import com.conveyal.datatools.manager.auth.Auth0Connection;
+import com.conveyal.datatools.manager.models.FeedSource;
+import com.conveyal.datatools.manager.models.FeedVersion;
+import com.conveyal.datatools.manager.models.Project;
+import com.conveyal.datatools.manager.persistence.Persistence;
+import org.bson.Document;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static com.conveyal.datatools.TestUtils.createFeedVersion;
+import static com.conveyal.datatools.TestUtils.zipFolderFiles;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class FaresV2ValidationTest {
+
+ private static Project project;
+ private static FeedVersion faresV2Version;
+
+ @BeforeAll
+ public static void setUp() throws IOException {
+ // Start server if it isn't already running.
+ DatatoolsTest.setUp();
+ Auth0Connection.setAuthDisabled(true);
+ // Create a project, feed sources, and feed versions to merge.
+ project = new Project();
+ project.name = String.format("Test %s", new Date());
+ Persistence.projects.create(project);
+
+ FeedSource faresV2FeedSource = new FeedSource("fares-v2");
+ faresV2FeedSource.projectId = project.id;
+ Persistence.feedSources.create(faresV2FeedSource);
+ faresV2Version = createFeedVersion(
+ faresV2FeedSource,
+ zipFolderFiles("fake-agency-with-fares-v2")
+ );
+ Persistence.feedVersions.replace(faresV2Version.id, faresV2Version);
+ }
+
+ @AfterAll
+ static void tearDown() {
+ Auth0Connection.setAuthDisabled(Auth0Connection.getDefaultAuthDisabled());
+ project.delete();
+ }
+
+ @Test
+ void canValidateFareV2Files() {
+ Document summary = (Document) faresV2Version.mobilityDataResult.get("summary");
+ List files = summary.getList("files", String.class);
+ assertTrue(files.contains("areas.txt"));
+ assertTrue(files.contains("fare_leg_rules.txt"));
+ assertTrue(files.contains("fare_media.txt"));
+ assertTrue(files.contains("fare_products.txt"));
+ assertTrue(files.contains("fare_transfer_rules.txt"));
+ assertTrue(files.contains("networks.txt"));
+ assertTrue(files.contains("route_networks.txt"));
+ assertTrue(files.contains("stop_areas.txt"));
+ assertTrue(files.contains("timeframes.txt"));
+ }
+
+ /**
+ * This is not an exhaustive test, more of a sanity check that MobilityData can detect errors in fares v2 data.
+ * https://gtfs-validator.mobilitydata.org/rules.html
+ */
+ @ParameterizedTest
+ @MethodSource("createValidationErrorChecks")
+ void canDetectValidationErrors(Set codes, String expectedCode) {
+ assertTrue(codes.contains(expectedCode));
+ }
+
+ private static Stream createValidationErrorChecks() {
+ ArrayList notices = (ArrayList) faresV2Version.mobilityDataResult.get("notices");
+ Set codes = new HashSet<>();
+ for (Document notice : notices) {
+ codes.add(notice.getString("code"));
+ }
+ return Stream.of(
+ Arguments.of(codes, "fare_transfer_rule_duration_limit_type_without_duration_limit"),
+ Arguments.of(codes, "fare_transfer_rule_duration_limit_without_type"),
+ Arguments.of(codes, "fare_transfer_rule_missing_transfer_count"),
+ Arguments.of(codes, "fare_transfer_rule_with_forbidden_transfer_count")
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/agency.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/agency.txt
new file mode 100644
index 000000000..5cb6afa42
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/agency.txt
@@ -0,0 +1,2 @@
+agency_id,agency_name,agency_url,agency_lang,agency_phone,agency_email,agency_timezone,agency_fare_url,agency_branding_url
+1,Fake Transit,http://www.fake-agency.com,,,,America/Los_Angeles,,
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/areas.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/areas.txt
new file mode 100644
index 000000000..73b6734b6
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/areas.txt
@@ -0,0 +1,40 @@
+area_id,area_name
+area_bl,Blue Line
+area_bl_airport,Blue Line - Airport Station
+area_cf_zone_buzzards,CapeFLYER - Wareham/Buzzards Bay/Bourne
+area_cf_zone_hyannis,CapeFLYER - Hyannis
+area_commuter_rail_porter_zone_1a,Commuter Rail Zone 1A
+area_commuter_rail_sumner_tunnel_zone_1a,Commuter Rail Zone 1A
+area_commuter_rail_zone_1,Commuter Rail Zone 1
+area_commuter_rail_zone_10,Commuter Rail Zone 10
+area_commuter_rail_zone_1a,Commuter Rail Zone 1A
+area_commuter_rail_zone_2,Commuter Rail Zone 2
+area_commuter_rail_zone_3,Commuter Rail Zone 3
+area_commuter_rail_zone_4,Commuter Rail Zone 4
+area_commuter_rail_zone_5,Commuter Rail Zone 5
+area_commuter_rail_zone_6,Commuter Rail Zone 6
+area_commuter_rail_zone_7,Commuter Rail Zone 7
+area_commuter_rail_zone_8,Commuter Rail Zone 8
+area_commuter_rail_zone_9,Commuter Rail Zone 9
+area_fairmount_line_zone_1a,Commuter Rail Zone 1A - Fairmount Line
+area_gl_govt_ctr,Green Line - Government Center
+area_green_b_west_of_kenmore,Green Line B - West of Kenmore
+area_green_c_west_of_kenmore,Green Line C - West of Kenmore
+area_green_e_west_of_symphony,Green Line E - West of Symphony
+area_m_ashmont_mattapan,Mattapan Trolley - Ashmont and Mattapan
+area_ol_state,Orange Line - State
+area_red_south_station,Red Line - South Station
+area_route_354_downtown,Route 354 - Downtown
+area_route_354_outside_downtown,Route 354 - Outside Downtown
+area_route_426_downtown,Route 426 - Downtown
+area_route_426_outside_downtown,Route 426 - Outside Downtown
+area_route_450_downtown,Route 450 - Downtown
+area_route_450_outside_downtown,Route 450 - Outside Downtown
+area_sl3_north_of_airport,Silver Line - North of Airport Station
+area_sl_airport,Silver Line - Airport Station
+area_sl_courthouse,Silver Line - Courthouse
+area_sl_logan_terminal,Silver Line - Airport Terminals
+area_sl_silver_line_way,Silver Line - Silver Line Way
+area_sl_south_station,Silver Line - South Station
+area_sl_world_trade_center,Silver Line - World Trade Center
+area_ss_commuter_rail_zone_1a,Commuter Rail Zone 1A - South Station
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar.txt
new file mode 100644
index 000000000..1bf13678e
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar.txt
@@ -0,0 +1,2 @@
+service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date
+04100312-8fe1-46a5-a9f2-556f39478f57,1,1,1,1,1,1,1,20170915,20170917
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar_dates.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar_dates.txt
new file mode 100644
index 000000000..5d0a31806
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/calendar_dates.txt
@@ -0,0 +1,3 @@
+service_id,date,exception_type
+04100312-8fe1-46a5-a9f2-556f39478f57,20170916,2
+calendar-date-service,20170917,1
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_leg_rules.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_leg_rules.txt
new file mode 100644
index 000000000..37b60d472
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_leg_rules.txt
@@ -0,0 +1,697 @@
+leg_group_id,network_id,from_area_id,to_area_id,fare_product_id,from_timeframe_group_id,to_timeframe_group_id,transfer_only
+leg_airport_rapid_transit_quick_subway,rapid_transit,area_bl_airport,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_cape_buzzards_hyannis_cash,cape_flyer,area_cf_zone_buzzards,area_cf_zone_hyannis,prod_cape_buzzards_hyannis_fare,,,
+leg_cape_buzzards_hyannis_cash,cape_flyer,area_cf_zone_hyannis,area_cf_zone_buzzards,prod_cape_buzzards_hyannis_fare,,,
+leg_cape_buzzards_hyannis_cash,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_8,prod_cape_buzzards_hyannis_fare,,,
+leg_cape_buzzards_hyannis_cash,cape_flyer,area_commuter_rail_zone_8,area_cf_zone_hyannis,prod_cape_buzzards_hyannis_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_1a,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_2,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_4,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_commuter_rail_zone_1a,area_cf_zone_buzzards,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_commuter_rail_zone_2,area_cf_zone_buzzards,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_buzzards_cash,cape_flyer,area_commuter_rail_zone_4,area_cf_zone_buzzards,prod_cape_sbb_buzzards_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_1a,prod_cape_sbb_hyannis_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_2,prod_cape_sbb_hyannis_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_4,prod_cape_sbb_hyannis_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_commuter_rail_zone_1a,area_cf_zone_hyannis,prod_cape_sbb_hyannis_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_commuter_rail_zone_2,area_cf_zone_hyannis,prod_cape_sbb_hyannis_fare,,,
+leg_cape_sbb_hyannis_cash,cape_flyer,area_commuter_rail_zone_4,area_cf_zone_hyannis,prod_cape_sbb_hyannis_fare,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_sumner_tunnel_zone_1a,area_commuter_rail_sumner_tunnel_zone_1a,prod_cr_zone_1a,timeframe_sumner_tunnel_closure,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_sumner_tunnel_zone_1a,area_commuter_rail_zone_1a,prod_cr_zone_1a,timeframe_sumner_tunnel_closure,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_1,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_10,prod_cr_inter_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_1a,prod_cr_zone_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_2,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_3,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_4,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_5,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_6,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_7,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_8,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_9,prod_cr_inter_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_fairmount_line_zone_1a,prod_cr_zone_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1,area_ss_commuter_rail_zone_1a,prod_cr_zone_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_1,prod_cr_inter_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_10,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_1a,prod_cr_zone_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_2,prod_cr_inter_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_3,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_4,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_5,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_6,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_7,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_8,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_9,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_fairmount_line_zone_1a,prod_cr_zone_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_10,area_ss_commuter_rail_zone_1a,prod_cr_zone_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_sumner_tunnel_zone_1a,prod_cr_zone_1a,timeframe_sumner_tunnel_closure,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_1,prod_cr_zone_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_10,prod_cr_zone_10,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_1a,prod_cr_zone_1a,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_2,prod_cr_zone_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_3,prod_cr_zone_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_4,prod_cr_zone_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_5,prod_cr_zone_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_6,prod_cr_zone_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_7,prod_cr_zone_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_8,prod_cr_zone_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_9,prod_cr_zone_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_fairmount_line_zone_1a,prod_cr_zone_1a,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_1a,area_ss_commuter_rail_zone_1a,prod_cr_zone_1a,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_1,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_10,prod_cr_inter_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_1a,prod_cr_zone_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_2,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_3,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_4,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_5,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_6,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_7,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_8,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_9,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_fairmount_line_zone_1a,prod_cr_zone_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_2,area_ss_commuter_rail_zone_1a,prod_cr_zone_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_1,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_10,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_1a,prod_cr_zone_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_2,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_3,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_4,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_5,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_6,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_7,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_8,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_9,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_fairmount_line_zone_1a,prod_cr_zone_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_3,area_ss_commuter_rail_zone_1a,prod_cr_zone_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_1,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_10,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_1a,prod_cr_zone_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_2,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_3,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_4,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_5,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_6,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_7,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_8,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_9,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_fairmount_line_zone_1a,prod_cr_zone_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_4,area_ss_commuter_rail_zone_1a,prod_cr_zone_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_1,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_10,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_1a,prod_cr_zone_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_2,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_3,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_4,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_5,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_6,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_7,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_8,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_9,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_fairmount_line_zone_1a,prod_cr_zone_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_5,area_ss_commuter_rail_zone_1a,prod_cr_zone_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_1,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_10,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_1a,prod_cr_zone_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_2,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_3,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_4,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_5,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_6,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_7,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_8,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_9,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_fairmount_line_zone_1a,prod_cr_zone_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_6,area_ss_commuter_rail_zone_1a,prod_cr_zone_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_1,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_10,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_1a,prod_cr_zone_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_2,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_3,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_4,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_5,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_6,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_7,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_8,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_9,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_fairmount_line_zone_1a,prod_cr_zone_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_7,area_ss_commuter_rail_zone_1a,prod_cr_zone_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_1,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_10,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_1a,prod_cr_zone_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_2,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_3,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_4,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_5,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_6,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_7,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_8,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_9,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_fairmount_line_zone_1a,prod_cr_zone_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_8,area_ss_commuter_rail_zone_1a,prod_cr_zone_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_1,prod_cr_inter_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_10,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_1a,prod_cr_zone_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_2,prod_cr_inter_8,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_3,prod_cr_inter_7,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_4,prod_cr_inter_6,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_5,prod_cr_inter_5,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_6,prod_cr_inter_4,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_7,prod_cr_inter_3,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_8,prod_cr_inter_2,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_9,prod_cr_inter_1,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_fairmount_line_zone_1a,prod_cr_zone_9,,,
+leg_commuter_rail_cash,commuter_rail,area_commuter_rail_zone_9,area_ss_commuter_rail_zone_1a,prod_cr_zone_9,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_1,prod_cr_zone_1,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_10,prod_cr_zone_10,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_1a,prod_cr_zone_1a,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_2,prod_cr_zone_2,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_3,prod_cr_zone_3,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_4,prod_cr_zone_4,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_5,prod_cr_zone_5,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_6,prod_cr_zone_6,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_7,prod_cr_zone_7,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_8,prod_cr_zone_8,,,
+leg_commuter_rail_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_9,prod_cr_zone_9,,,
+leg_commuter_rail_free,commuter_rail,area_commuter_rail_porter_zone_1a,area_commuter_rail_zone_1a,prod_free_fare,timeframe_alewife_kendall_surge,,
+leg_commuter_rail_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_porter_zone_1a,prod_free_fare,timeframe_alewife_kendall_surge,,
+leg_express_bus_cash,express_bus,area_route_354_downtown,area_route_354_outside_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus,area_route_354_outside_downtown,area_route_354_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus,area_route_426_downtown,area_route_426_outside_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus,area_route_426_outside_downtown,area_route_426_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus,area_route_450_downtown,area_route_450_outside_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus,area_route_450_outside_downtown,area_route_450_downtown,prod_express_bus,,,
+leg_express_bus_cash,express_bus_special,,,prod_express_bus,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_1,prod_cr_zone_1,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_10,prod_cr_zone_10,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_1a,prod_cr_zone_1a,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_2,prod_cr_zone_2,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_3,prod_cr_zone_3,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_4,prod_cr_zone_4,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_5,prod_cr_zone_5,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_6,prod_cr_zone_6,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_7,prod_cr_zone_7,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_8,prod_cr_zone_8,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_9,prod_cr_zone_9,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_fairmount_line_zone_1a,prod_cr_zone_1a,,,
+leg_fairmount_line_cash,commuter_rail,area_fairmount_line_zone_1a,area_ss_commuter_rail_zone_1a,prod_cr_zone_1a,,,
+leg_ferry_east_boston_free,ferry_east_boston,,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_ferry_east_boston_free,ferry_east_boston,,,prod_boat_zone_1a,timeframe_regular,,
+leg_ferry_f1_cash,ferry_f1,,,prod_ferry_f1,,,
+leg_ferry_f4_cash,ferry_f4,,,prod_ferry_f4,,,
+leg_ferry_f6_cash,ferry_f6,,,prod_boat_zone_1a,timeframe_sumner_tunnel_closure,,
+leg_ferry_f6_cash,ferry_f6,,,prod_boat_zone_1,timeframe_regular,,
+leg_ferry_lynn_cash,ferry_lynn,,,prod_boat_zone_1a,timeframe_sumner_tunnel_closure,,
+leg_ferry_lynn_cash,ferry_lynn,,,prod_boat_zone_2,timeframe_regular,,
+leg_foxboro_event_cash,cr_foxboro,,,prod_foxboro_event_fare,,,
+leg_local_bus_cash,express_bus,area_route_354_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,express_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,express_bus,area_route_426_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,express_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,express_bus,area_route_450_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,express_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_354_outside_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_426_outside_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,area_route_450_outside_downtown,,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_354_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_354_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_426_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_426_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_450_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,area_route_450_outside_downtown,prod_local_bus,,,
+leg_local_bus_cash,local_bus,,,prod_local_bus,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_354_outside_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_426_outside_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,area_route_450_outside_downtown,,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_354_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_354_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_426_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_426_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_450_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,area_route_450_outside_downtown,prod_free_fare,,,
+leg_local_bus_free,local_bus_free,,,prod_free_fare,,,
+leg_local_bus_quick_subway,express_bus,area_route_354_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,express_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,express_bus,area_route_426_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,express_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,express_bus,area_route_450_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,express_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_354_outside_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_426_outside_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,area_route_450_outside_downtown,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_354_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_426_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_450_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,
+leg_local_bus_quick_subway,local_bus,,,prod_rapid_transit_quick_subway,,,
+leg_local_bus_restricted_cash,local_bus_restricted,,,prod_local_bus,,,
+leg_mattapan_rapid_transit_cash,m_rapid_transit,,,prod_rapid_transit_cash,,,
+leg_mattapan_rapid_transit_quick_subway,m_rapid_transit,area_m_ashmont_mattapan,,prod_rapid_transit_quick_subway,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_354_outside_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_426_outside_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,area_route_450_outside_downtown,,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_354_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_354_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_426_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_426_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_450_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,area_route_450_outside_downtown,prod_free_fare,,,
+leg_rail_replacement_free,rail_replacement_bus,,,prod_free_fare,,,
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_354_outside_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_426_outside_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,area_route_450_outside_downtown,,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_354_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_354_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_426_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_426_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_450_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,area_route_450_outside_downtown,prod_rapid_transit_quick_subway,,,1
+leg_rail_replacement_quick_subway,rail_replacement_bus,,,prod_rapid_transit_quick_subway,,,1
+leg_rapid_transit_cash,rapid_transit,area_green_b_west_of_kenmore,,prod_rapid_transit_cash,,,
+leg_rapid_transit_cash,rapid_transit,area_green_c_west_of_kenmore,,prod_rapid_transit_cash,,,
+leg_rapid_transit_cash,rapid_transit,area_green_e_west_of_symphony,,prod_rapid_transit_cash,,,
+leg_rapid_transit_cash,rapid_transit,,,prod_rapid_transit_cash,,,1
+leg_rapid_transit_free,rapid_transit,area_bl,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_rapid_transit_free,rapid_transit,area_bl_airport,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_rapid_transit_free,rapid_transit,area_gl_govt_ctr,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_rapid_transit_free,rapid_transit,area_ol_state,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_rapid_transit_free,rapid_transit,,,prod_free_fare,,,1
+leg_rapid_transit_quick_subway,rapid_transit,area_bl,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_rapid_transit_quick_subway,rapid_transit,area_gl_govt_ctr,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_rapid_transit_quick_subway,rapid_transit,area_ol_state,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_rapid_transit_quick_subway,rapid_transit,,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl3_north_of_airport,area_sl3_north_of_airport,prod_rapid_transit_cash,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl3_north_of_airport,area_sl_airport,prod_rapid_transit_cash,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl3_north_of_airport,,prod_rapid_transit_cash,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_silver_line_way,area_sl3_north_of_airport,prod_rapid_transit_cash,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_silver_line_way,area_sl_airport,prod_rapid_transit_cash,timeframe_regular,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_silver_line_way,,prod_rapid_transit_cash,,,
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_south_station,area_sl3_north_of_airport,prod_rapid_transit_cash,,,1
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_south_station,area_sl_airport,prod_rapid_transit_cash,,,1
+leg_sl_rapid_transit_cash,sl_rapid_transit,area_sl_south_station,,prod_rapid_transit_cash,,,1
+leg_sl_rapid_transit_cash,sl_rapid_transit,,,prod_rapid_transit_cash,,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl3_north_of_airport,area_sl3_north_of_airport,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl3_north_of_airport,area_sl_airport,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl3_north_of_airport,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl_airport,area_sl3_north_of_airport,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl_airport,,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl_logan_terminal,,prod_free_fare,,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl_silver_line_way,area_sl3_north_of_airport,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_free,sl_rapid_transit,area_sl_silver_line_way,area_sl_airport,prod_free_fare,timeframe_sumner_tunnel_closure,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_airport,area_sl3_north_of_airport,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_airport,,prod_rapid_transit_quick_subway,timeframe_regular,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_courthouse,area_sl3_north_of_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_courthouse,area_sl_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_courthouse,,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_south_station,area_sl3_north_of_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_south_station,area_sl_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_south_station,,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_world_trade_center,area_sl3_north_of_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_world_trade_center,area_sl_airport,prod_rapid_transit_quick_subway,,,
+leg_sl_rapid_transit_quick_subway,sl_rapid_transit,area_sl_world_trade_center,,prod_rapid_transit_quick_subway,,,
+leg_ss_fairmount_line_zone_1a_cash,commuter_rail,area_ss_commuter_rail_zone_1a,area_fairmount_line_zone_1a,prod_cr_zone_1a,,,
+leg_ss_rapid_transit_cash,rapid_transit,area_red_south_station,,prod_rapid_transit_cash,,,1
+leg_ss_rapid_transit_free,rapid_transit,area_red_south_station,,prod_free_fare,,,1
+leg_ss_rapid_transit_quick_subway,rapid_transit,area_red_south_station,,prod_rapid_transit_quick_subway,,,
+leg_systemwide_free,cape_flyer,area_cf_zone_buzzards,area_cf_zone_hyannis,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_buzzards,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_hyannis,area_cf_zone_buzzards,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_cf_zone_hyannis,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_1a,area_cf_zone_buzzards,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_1a,area_cf_zone_hyannis,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_2,area_cf_zone_buzzards,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_2,area_cf_zone_hyannis,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_4,area_cf_zone_buzzards,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_4,area_cf_zone_hyannis,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cape_flyer,area_commuter_rail_zone_8,area_cf_zone_hyannis,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_10,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_1a,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_2,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_3,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_4,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_5,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_6,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_7,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_8,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_commuter_rail_zone_9,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_fairmount_line_zone_1a,area_ss_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_1,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_10,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_2,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_3,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_4,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_5,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_6,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_7,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_8,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_commuter_rail_zone_9,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,commuter_rail,area_ss_commuter_rail_zone_1a,area_fairmount_line_zone_1a,prod_free_fare,timeframe_systemwide_free,,
+leg_systemwide_free,cr_foxboro,,,prod_free_fare,timeframe_systemwide_free,,
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_media.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_media.txt
new file mode 100644
index 000000000..a695de634
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_media.txt
@@ -0,0 +1,5 @@
+fare_media_id,fare_media_name,fare_media_type
+cash,Cash,0
+credit_debit,Credit/debit card,0
+charlieticket,CharlieTicket,1
+mticket,mTicket app,4
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_products.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_products.txt
new file mode 100644
index 000000000..1138f4591
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_products.txt
@@ -0,0 +1,97 @@
+fare_product_id,fare_product_name,fare_media_id,amount,currency
+prod_boat_zone_1,Ferry Zone 1 one-way fare,cash,6.50,USD
+prod_boat_zone_1,Ferry Zone 1 one-way fare,credit_debit,6.50,USD
+prod_boat_zone_1,Ferry Zone 1 one-way fare,mticket,6.50,USD
+prod_boat_zone_1a,Ferry Zone 1A one-way fare,cash,2.40,USD
+prod_boat_zone_1a,Ferry Zone 1A one-way fare,credit_debit,2.40,USD
+prod_boat_zone_1a,Ferry Zone 1A one-way fare,mticket,2.40,USD
+prod_boat_zone_2,Ferry Zone 2 one-way fare,cash,7.00,USD
+prod_boat_zone_2,Ferry Zone 2 one-way fare,credit_debit,7.00,USD
+prod_boat_zone_2,Ferry Zone 2 one-way fare,mticket,7.00,USD
+prod_cape_buzzards_hyannis_fare,CapeFLYER Middleborough/Lakeville one-way fare,cash,5.00,USD
+prod_cape_buzzards_hyannis_fare,CapeFLYER Middleborough/Lakeville one-way fare,credit_debit,5.00,USD
+prod_cape_buzzards_hyannis_fare,CapeFLYER Middleborough/Lakeville one-way fare,mticket,5.00,USD
+prod_cape_sbb_buzzards_fare,CapeFLYER Bourne one-way fare,cash,20.00,USD
+prod_cape_sbb_buzzards_fare,CapeFLYER Bourne one-way fare,credit_debit,20.00,USD
+prod_cape_sbb_buzzards_fare,CapeFLYER Bourne one-way fare,mticket,20.00,USD
+prod_cape_sbb_hyannis_fare,CapeFLYER Hyannis one-way fare,cash,22.00,USD
+prod_cape_sbb_hyannis_fare,CapeFLYER Hyannis one-way fare,credit_debit,22.00,USD
+prod_cape_sbb_hyannis_fare,CapeFLYER Hyannis one-way fare,mticket,22.00,USD
+prod_cr_inter_1,Commuter Rail Interzone 1 one-way fare,cash,2.75,USD
+prod_cr_inter_1,Commuter Rail Interzone 1 one-way fare,credit_debit,2.75,USD
+prod_cr_inter_1,Commuter Rail Interzone 1 one-way fare,mticket,2.75,USD
+prod_cr_inter_10,Commuter Rail Interzone 10 one-way fare,cash,7.25,USD
+prod_cr_inter_10,Commuter Rail Interzone 10 one-way fare,credit_debit,7.25,USD
+prod_cr_inter_10,Commuter Rail Interzone 10 one-way fare,mticket,7.25,USD
+prod_cr_inter_2,Commuter Rail Interzone 2 one-way fare,cash,3.25,USD
+prod_cr_inter_2,Commuter Rail Interzone 2 one-way fare,credit_debit,3.25,USD
+prod_cr_inter_2,Commuter Rail Interzone 2 one-way fare,mticket,3.25,USD
+prod_cr_inter_3,Commuter Rail Interzone 3 one-way fare,cash,3.50,USD
+prod_cr_inter_3,Commuter Rail Interzone 3 one-way fare,credit_debit,3.50,USD
+prod_cr_inter_3,Commuter Rail Interzone 3 one-way fare,mticket,3.50,USD
+prod_cr_inter_4,Commuter Rail Interzone 4 one-way fare,cash,4.25,USD
+prod_cr_inter_4,Commuter Rail Interzone 4 one-way fare,credit_debit,4.25,USD
+prod_cr_inter_4,Commuter Rail Interzone 4 one-way fare,mticket,4.25,USD
+prod_cr_inter_5,Commuter Rail Interzone 5 one-way fare,cash,4.75,USD
+prod_cr_inter_5,Commuter Rail Interzone 5 one-way fare,credit_debit,4.75,USD
+prod_cr_inter_5,Commuter Rail Interzone 5 one-way fare,mticket,4.75,USD
+prod_cr_inter_6,Commuter Rail Interzone 6 one-way fare,cash,5.25,USD
+prod_cr_inter_6,Commuter Rail Interzone 6 one-way fare,credit_debit,5.25,USD
+prod_cr_inter_6,Commuter Rail Interzone 6 one-way fare,mticket,5.25,USD
+prod_cr_inter_7,Commuter Rail Interzone 7 one-way fare,cash,5.75,USD
+prod_cr_inter_7,Commuter Rail Interzone 7 one-way fare,credit_debit,5.75,USD
+prod_cr_inter_7,Commuter Rail Interzone 7 one-way fare,mticket,5.75,USD
+prod_cr_inter_8,Commuter Rail Interzone 8 one-way fare,cash,6.25,USD
+prod_cr_inter_8,Commuter Rail Interzone 8 one-way fare,credit_debit,6.25,USD
+prod_cr_inter_8,Commuter Rail Interzone 8 one-way fare,mticket,6.25,USD
+prod_cr_inter_9,Commuter Rail Interzone 9 one-way fare,cash,6.75,USD
+prod_cr_inter_9,Commuter Rail Interzone 9 one-way fare,credit_debit,6.75,USD
+prod_cr_inter_9,Commuter Rail Interzone 9 one-way fare,mticket,6.75,USD
+prod_cr_zone_1,Commuter Rail Zone 1 one-way fare,cash,6.50,USD
+prod_cr_zone_1,Commuter Rail Zone 1 one-way fare,credit_debit,6.50,USD
+prod_cr_zone_1,Commuter Rail Zone 1 one-way fare,mticket,6.50,USD
+prod_cr_zone_10,Commuter Rail Zone 10 one-way fare,cash,13.25,USD
+prod_cr_zone_10,Commuter Rail Zone 10 one-way fare,credit_debit,13.25,USD
+prod_cr_zone_10,Commuter Rail Zone 10 one-way fare,mticket,13.25,USD
+prod_cr_zone_1a,Commuter Rail Zone 1A one-way fare,cash,2.40,USD
+prod_cr_zone_1a,Commuter Rail Zone 1A one-way fare,credit_debit,2.40,USD
+prod_cr_zone_1a,Commuter Rail Zone 1A one-way fare,mticket,2.40,USD
+prod_cr_zone_2,Commuter Rail Zone 2 one-way fare,cash,7.00,USD
+prod_cr_zone_2,Commuter Rail Zone 2 one-way fare,credit_debit,7.00,USD
+prod_cr_zone_2,Commuter Rail Zone 2 one-way fare,mticket,7.00,USD
+prod_cr_zone_3,Commuter Rail Zone 3 one-way fare,cash,8.00,USD
+prod_cr_zone_3,Commuter Rail Zone 3 one-way fare,credit_debit,8.00,USD
+prod_cr_zone_3,Commuter Rail Zone 3 one-way fare,mticket,8.00,USD
+prod_cr_zone_4,Commuter Rail Zone 4 one-way fare,cash,8.75,USD
+prod_cr_zone_4,Commuter Rail Zone 4 one-way fare,credit_debit,8.75,USD
+prod_cr_zone_4,Commuter Rail Zone 4 one-way fare,mticket,8.75,USD
+prod_cr_zone_5,Commuter Rail Zone 5 one-way fare,cash,9.75,USD
+prod_cr_zone_5,Commuter Rail Zone 5 one-way fare,credit_debit,9.75,USD
+prod_cr_zone_5,Commuter Rail Zone 5 one-way fare,mticket,9.75,USD
+prod_cr_zone_6,Commuter Rail Zone 6 one-way fare,cash,10.50,USD
+prod_cr_zone_6,Commuter Rail Zone 6 one-way fare,credit_debit,10.50,USD
+prod_cr_zone_6,Commuter Rail Zone 6 one-way fare,mticket,10.50,USD
+prod_cr_zone_7,Commuter Rail Zone 7 one-way fare,cash,11.00,USD
+prod_cr_zone_7,Commuter Rail Zone 7 one-way fare,credit_debit,11.00,USD
+prod_cr_zone_7,Commuter Rail Zone 7 one-way fare,mticket,11.00,USD
+prod_cr_zone_8,Commuter Rail Zone 8 one-way fare,cash,12.25,USD
+prod_cr_zone_8,Commuter Rail Zone 8 one-way fare,credit_debit,12.25,USD
+prod_cr_zone_8,Commuter Rail Zone 8 one-way fare,mticket,12.25,USD
+prod_cr_zone_9,Commuter Rail Zone 9 one-way fare,cash,12.75,USD
+prod_cr_zone_9,Commuter Rail Zone 9 one-way fare,credit_debit,12.75,USD
+prod_cr_zone_9,Commuter Rail Zone 9 one-way fare,mticket,12.75,USD
+prod_express_bus,Express Bus cash fare,cash,4.25,USD
+prod_ferry_east_boston,East Boston Ferry one-way fare,mticket,2.40,USD
+prod_ferry_f1,Hingham/Hull Ferry one-way fare,cash,9.75,USD
+prod_ferry_f1,Hingham/Hull Ferry one-way fare,credit_debit,9.75,USD
+prod_ferry_f1,Hingham/Hull Ferry one-way fare,mticket,9.75,USD
+prod_ferry_f4,Charlestown Ferry one-way fare,cash,3.70,USD
+prod_ferry_f4,Charlestown Ferry one-way fare,credit_debit,3.70,USD
+prod_ferry_f4,Charlestown Ferry one-way fare,mticket,3.70,USD
+prod_foxboro_event_fare,Foxboro Event Service round-trip fare,cash,20.00,USD
+prod_foxboro_event_fare,Foxboro Event Service round-trip fare,credit_debit,20.00,USD
+prod_foxboro_event_fare,Foxboro Event Service round-trip fare,mticket,20.00,USD
+prod_free_fare,Free fare,,0.00,USD
+prod_local_bus,Local Bus cash fare,cash,1.70,USD
+prod_rapid_transit_cash,Subway cash fare,cash,2.40,USD
+prod_rapid_transit_quick_subway,Subway Quick Ticket,charlieticket,2.40,USD
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_transfer_rules.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_transfer_rules.txt
new file mode 100644
index 000000000..bccb48b0f
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/fare_transfer_rules.txt
@@ -0,0 +1,38 @@
+from_leg_group_id,to_leg_group_id,transfer_count,duration_limit,duration_limit_type,fare_transfer_type,fare_product_id,filter_fare_product_id,fare_media_behavior,fare_product_behavior
+leg_airport_rapid_transit_quick_subway,leg_local_bus_quick_subway,99,7200,1,0,prod_rapid_transit_quick_subway,prod_rapid_transit_quick_subway,0,1
+leg_airport_rapid_transit_quick_subway,leg_rapid_transit_quick_subway,,,1,0,prod_rapid_transit_quick_subway,prod_rapid_transit_quick_subway,0,1
+leg_mattapan_rapid_transit_quick_subway,leg_local_bus_quick_subway,,7200,1,0,prod_rapid_transit_quick_subway,prod_rapid_transit_quick_subway,0,1
+leg_mattapan_rapid_transit_quick_subway,leg_rail_replacement_quick_subway,,99,,0,,prod_rapid_transit_quick_subway,0,1
+leg_mattapan_rapid_transit_quick_subway,leg_rapid_transit_quick_subway,99999,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_mattapan_rapid_transit_quick_subway,leg_mattapan_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_airport_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_local_bus_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_mattapan_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_rail_replacement_quick_subway,-1,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_sl_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rail_replacement_quick_subway,leg_ss_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_cash,leg_rapid_transit_cash,-1,,,0,,prod_rapid_transit_cash,0,1
+leg_rapid_transit_cash,leg_sl_rapid_transit_cash,,,,0,,prod_rapid_transit_cash,0,1
+leg_rapid_transit_free,leg_rapid_transit_free,-1,,,0,,prod_free_fare,0,1
+leg_rapid_transit_free,leg_sl_rapid_transit_free,,,,0,,prod_free_fare,0,1
+leg_rapid_transit_quick_subway,leg_airport_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_local_bus_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_mattapan_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_rail_replacement_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_rapid_transit_quick_subway,-1,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_sl_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_rapid_transit_quick_subway,leg_ss_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_sl_rapid_transit_cash,leg_ss_rapid_transit_cash,,,,0,,prod_rapid_transit_cash,0,1
+leg_sl_rapid_transit_free,leg_ss_rapid_transit_free,,,,0,,prod_free_fare,0,1
+leg_sl_rapid_transit_quick_subway,leg_airport_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_sl_rapid_transit_quick_subway,leg_local_bus_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_sl_rapid_transit_quick_subway,leg_mattapan_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_sl_rapid_transit_quick_subway,leg_rail_replacement_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_sl_rapid_transit_quick_subway,leg_ss_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_ss_rapid_transit_cash,leg_rapid_transit_cash,,,,0,,prod_rapid_transit_cash,0,1
+leg_ss_rapid_transit_free,leg_rapid_transit_free,,,,0,,prod_free_fare,0,1
+leg_ss_rapid_transit_quick_subway,leg_local_bus_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_ss_rapid_transit_quick_subway,leg_mattapan_rapid_transit_quick_subway,,7200,1,0,,prod_rapid_transit_quick_subway,0,1
+leg_ss_rapid_transit_quick_subway,leg_rail_replacement_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
+leg_ss_rapid_transit_quick_subway,leg_rapid_transit_quick_subway,,,,0,,prod_rapid_transit_quick_subway,0,1
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/feed_info.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/feed_info.txt
new file mode 100644
index 000000000..ceac60810
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/feed_info.txt
@@ -0,0 +1,2 @@
+feed_id,feed_publisher_name,feed_publisher_url,feed_lang,feed_version
+fake_transit,Conveyal,http://www.conveyal.com,en,1.0
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/networks.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/networks.txt
new file mode 100644
index 000000000..47a67eaad
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/networks.txt
@@ -0,0 +1,2 @@
+network_id,network_name
+1,Forbidden because network id is defined in routes
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/route_networks.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/route_networks.txt
new file mode 100644
index 000000000..d2f8f9a9d
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/route_networks.txt
@@ -0,0 +1,2 @@
+network_id,route_id
+1,1
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/routes.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/routes.txt
new file mode 100644
index 000000000..dd6a30eaf
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/routes.txt
@@ -0,0 +1,2 @@
+route_id,agency_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color,route_sort_order,route_fare_class,line_id,listed_route,network_id
+1,1,,RL,RT,1,https://www.mbta.com/schedules/Red,DA291C,FFFFFF,10010,Rapid Transit,line-Red,,rapid_transit
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/shapes.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/shapes.txt
new file mode 100644
index 000000000..3f2e3fd13
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/shapes.txt
@@ -0,0 +1,8 @@
+shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence,shape_dist_traveled
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0612132,-122.0074332,1,0.0000000
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0611720,-122.0075000,2,7.4997067
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0613590,-122.0076830,3,33.8739075
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0608780,-122.0082780,4,109.0402932
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0603590,-122.0088280,5,184.6078298
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0597610,-122.0093540,6,265.8053023
+5820f377-f947-4728-ac29-ac0102cbc34e,37.0590660,-122.0099190,7,357.8617018
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_areas.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_areas.txt
new file mode 100644
index 000000000..85cbda304
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_areas.txt
@@ -0,0 +1,848 @@
+stop_id,area_id
+4u6g,area_route_426_downtown
+4u6g,area_route_450_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_sl_logan_terminal
+4u6g,area_sl_logan_terminal
+4u6g,area_sl_logan_terminal
+4u6g,area_sl_logan_terminal
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_sl_logan_terminal
+4u6g,area_route_426_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_downtown
+4u6g,area_route_354_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_ol_state
+4u6g,area_ol_state
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl_airport
+4u6g,area_bl_airport
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_bl
+4u6g,area_red_south_station
+4u6g,area_red_south_station
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_green_b_west_of_kenmore
+4u6g,area_gl_govt_ctr
+4u6g,area_gl_govt_ctr
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_c_west_of_kenmore
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_green_e_west_of_symphony
+4u6g,area_m_ashmont_mattapan
+4u6g,area_m_ashmont_mattapan
+4u6g,area_m_ashmont_mattapan
+4u6g,area_bl
+4u6g,area_sl_airport
+4u6g,area_sl_airport
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_450_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_426_outside_downtown
+4u6g,area_sl_south_station
+4u6g,area_sl_courthouse
+4u6g,area_sl_world_trade_center
+4u6g,area_sl_silver_line_way
+4u6g,area_sl_world_trade_center
+4u6g,area_sl_courthouse
+4u6g,area_sl_south_station
+4u6g,area_sl_silver_line_way
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_sl3_north_of_airport
+4u6g,area_route_426_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_route_426_downtown
+4u6g,area_route_450_downtown
+4u6g,area_route_354_outside_downtown
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_cf_zone_buzzards
+4u6g,area_cf_zone_buzzards
+4u6g,area_cf_zone_buzzards
+4u6g,area_cf_zone_hyannis
+4u6g,area_commuter_rail_zone_2
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_fairmount_line_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_porter_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_porter_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_porter_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_sumner_tunnel_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_10
+4u6g,area_commuter_rail_zone_9
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_ss_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_8
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1a
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_1
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_2
+4u6g,area_commuter_rail_zone_3
+4u6g,area_commuter_rail_zone_4
+4u6g,area_commuter_rail_zone_5
+4u6g,area_commuter_rail_zone_6
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
+4u6g,area_commuter_rail_zone_7
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_times.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_times.txt
new file mode 100644
index 000000000..1cfefaa49
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stop_times.txt
@@ -0,0 +1,7 @@
+trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled,timepoint
+a30277f8-e50a-4a85-9141-b1e0da9d429d,07:00:00,07:00:00,4u6g,1,Test stop headsign,0,0,0.0000000,
+a30277f8-e50a-4a85-9141-b1e0da9d429d,07:01:00,07:01:00,johv,2,Test stop headsign 2,0,0,341.4491961,
+frequency-trip,08:00:00,08:00:00,4u6g,1,Test stop headsign frequency trip,0,0,0.0000000,
+frequency-trip,08:29:00,08:29:00,1234,2,Test stop headsign frequency trip 2,0,0,341.4491961,
+calendar-date-trip,08:00:00,08:00:00,4u6g,1,Test stop headsign calendar date trip,0,0,0.0000000,
+calendar-date-trip,08:29:00,08:29:00,1234,2,Test stop headsign calendar date trip 2,0,0,341.4491961,
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stops.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stops.txt
new file mode 100644
index 000000000..ba368047e
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/stops.txt
@@ -0,0 +1,5 @@
+stop_id,stop_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,stop_timezone,wheelchair_boarding
+4u6g,,Butler Ln,,37.0612132,-122.0074332,,,0,,,
+johv,,Scotts Valley Dr & Victor Sq,,37.0590172,-122.0096058,,,0,,,
+123,,Parent Station,,37.0666,-122.0777,,,1,,,
+1234,,Child Stop,,37.06662,-122.07772,,,0,123,,
\ No newline at end of file
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/timeframes.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/timeframes.txt
new file mode 100644
index 000000000..52667abe1
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/timeframes.txt
@@ -0,0 +1,8 @@
+timeframe_group_id,start_time,end_time,service_id
+timeframe_regular,,,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_systemwide_free,,,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_sumner_tunnel_closure,,,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_sumner_tunnel_closure,00:00:00,02:30:00,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_regular,02:30:00,24:00:00,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_alewife_kendall_surge,,,04100312-8fe1-46a5-a9f2-556f39478f57
+timeframe_alewife_kendall_surge,00:00:00,02:30:00,04100312-8fe1-46a5-a9f2-556f39478f57
diff --git a/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/trips.txt b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/trips.txt
new file mode 100644
index 000000000..982c01e0f
--- /dev/null
+++ b/src/test/resources/com/conveyal/datatools/gtfs/fake-agency-with-fares-v2/trips.txt
@@ -0,0 +1,4 @@
+route_id,trip_id,trip_headsign,trip_short_name,direction_id,block_id,shape_id,bikes_allowed,wheelchair_accessible,service_id
+1,a30277f8-e50a-4a85-9141-b1e0da9d429d,,,0,,5820f377-f947-4728-ac29-ac0102cbc34e,0,0,04100312-8fe1-46a5-a9f2-556f39478f57
+1,frequency-trip,,,0,,5820f377-f947-4728-ac29-ac0102cbc34e,0,0,04100312-8fe1-46a5-a9f2-556f39478f57
+1,calendar-date-trip,,,0,,5820f377-f947-4728-ac29-ac0102cbc34e,0,0,calendar-date-service
\ No newline at end of file