{"actors":{},"app":"gabi-router","cortex":{"config":{"id":"gabi_router","initial":"routing","meta":{"host":"omnishell"},"on":{"route:router":{"reenter":true,"target":".router"}},"states":{"routing":{},"router":{"initial":"loading","meta":{"screen":"router"},"invoke":{"src":"routerRows"},"states":{"loading":{"invoke":{"src":"navigate","onDone":"ready","onError":"failed"}},"ready":{},"failed":{}}}}},"actors":{"navigate":{"via":"navigation"},"routerRows":{"via":"rows","lifetime":"attachment","screen":"router","charts":{"device":[{"field":"theme","initial":"auto","states":{"auto":{"on":{"click@theme-light":"light","click@theme-dark":"dark"}},"light":{"on":{"click@theme-auto":"auto","click@theme-dark":"dark"}},"dark":{"on":{"click@theme-auto":"auto","click@theme-light":"light"}}}},{"field":"units","initial":"metric","states":{"metric":{"on":{"click@units-imperial":"imperial"}},"imperial":{"on":{"click@units-metric":"metric"}}}}],"planner":[{"field":"drawer","initial":"open","states":{"open":{"on":{"click@btn-drawer-toggle":"collapsed"}},"collapsed":{"on":{"click@btn-drawer-toggle":"open"}}}},{"field":"modal","initial":"none","on":{"click@btn-modal-custom":"custom","click@btn-modal-offline":"offline","click@btn-modal-about":"about","click@btn-modal-close":"none"},"states":{"none":{},"custom":{},"offline":{},"about":{}}},{"field":"breakdown_tab","initial":"surface","on":{"click@tab-surface":"surface","click@tab-road":"road","click@tab-traffic":"traffic","click@tab-noise":"noise","click@tab-speed":"speed","click@tab-warnings":"warnings"},"states":{"surface":{},"road":{},"traffic":{},"noise":{},"speed":{},"warnings":{}}},{"field":"basemap","initial":"gbrouter","on":{"click@basemap-gbrouter":"gbrouter","click@basemap-light":"light","click@basemap-osm":"osm","click@basemap-cyclosm":"cyclosm"},"states":{"gbrouter":{},"light":{},"osm":{},"cyclosm":{}}},{"field":"terrain_3d","initial":"off","states":{"off":{"on":{"click@btn-terrain-toggle":"on"}},"on":{"on":{"click@btn-terrain-toggle":"off"}}}},{"field":"legend_open","initial":"closed","states":{"closed":{"on":{"click@btn-legend-toggle":"open"}},"open":{"on":{"click@btn-legend-toggle":"closed"}}}},{"field":"clear_confirm","initial":"idle","states":{"idle":{"on":{"click@btn-clear-route":"armed"}},"armed":{"on":{"click@btn-clear-confirm":"idle","click@btn-clear-cancel":"idle"},"after":{"4000":"idle"}}}},{"field":"share_status","initial":"idle","states":{"idle":{"on":{"click@btn-share-route":"copied"}},"copied":{"after":{"2000":"idle"}}}},{"field":"search_step","initial":"idle","on":{"focus@search-input":"open","click@search-input":"open","input@search-input":{"target":"open","assign":{"search_text":{"type":"event","params":{"field":"value"}}}},"keydown@search-input":{"guard":{"type":"is_key","params":{"key":"Enter"}},"target":"open","assign":{"search_q":{"type":"search_submitted"}}},"click@btn-search-submit":{"target":"open","assign":{"search_q":{"type":"search_submitted"}}},"click@btn-search-close":"idle","pointermove@elevation-stage":{"assign":{"hover_permille":{"type":"event","params":{"field":"pointerX"}}}},"pointerleave@elevation-stage":{"assign":{"hover_permille":-1}}},"states":{"idle":{},"open":{}}}]}}}},"floors":{"touch":24},"hostDom":{"gpx-io":{"src":"shell/hatches/gpx-io.js","note":"Browser File input picker for .gpx upload, Blob anchor download for .gpx export, and navigator.clipboard URL copy"}},"i18n":{"default":"en","locales":{"en":{"path":"en"},"pt-BR":{"path":"pt-br"}}},"local":{"device":"device","planner_state":"tab","route_slot":"tab","route_answer":"tab","place_answer":"tab","place_suggestion":"tab","offline_bundle":"tab"},"seed":{"planner_state":[{"id":"planner","drawer":"open","modal":"none","breakdown_tab":"surface","basemap":"gbrouter","terrain_3d":"off","legend_open":"closed","clear_confirm":"idle","share_status":"idle","search_step":"idle","search_text":"","search_q":"","waypoints_json":"[[-0.1276,51.5072,\"Trafalgar Square, London\"],[-0.0754,51.5055,\"Tower Bridge, London\"]]","waypoint_count":2,"avoids_json":"[]","avoid_count":0,"avoid_radius_m":500,"active_slot":0,"active_profile":"gabis-fast-city","custom_brf":"# Custom BRouter profile\n---context:global\nassign processUnusedTags = true\n---context:way\nassign costfactor = 1.0","request_key":"{\"w\":[[-0.1276,51.5072,\"Trafalgar Square, London\"],[-0.0754,51.5055,\"Tower Bridge, London\"]],\"a\":[],\"p\":[\"gabis-fast-city\",\"gabis-safe-road\",\"gabis-lite-gravel\"],\"alt\":[0,0,0],\"active\":0,\"brf\":\"# Custom BRouter profile\\n---context:global\\nassign processUnusedTags = true\\n---context:way\\nassign costfactor = 1.0\"}","routes_geojson":"{\"type\":\"FeatureCollection\",\"features\":[]}","active_gpx":"","gpx_import_xml":"","hover_permille":-1,"hover_lon":"0.0","hover_lat":"0.0","inspect_lon":"0.0","inspect_lat":"0.0","inspect_summary":"Right-click map -> Inspect road segment to view OSM tags and cost factors.","center_lat":"51.5082","center_lon":"-0.095","zoom":"13.0","start_label":"Trafalgar Square, London","end_label":"Tower Bridge, London","active_distance_label":"4.8 km","active_ascent_label":"34 m","active_descent_label":"31 m","active_duration_label":"16 min","active_energy_label":"112 kcal","active_warnings_count":0,"active_elevation_json":"{\"points\":[[0,14,0],[1.2,19,1.2],[2.4,24,1.8],[3.6,18,-1.5],[4.8,16,-0.5]],\"ascent_m\":34,\"descent_m\":31,\"distance_m\":4800,\"units\":\"metric\"}","active_breakdown_json":"{\"breakdown\":{\"surface\":[{\"label\":\"Asphalt\",\"distance_m\":3600,\"pct\":75},{\"label\":\"Paved Cycleway\",\"distance_m\":960,\"pct\":20},{\"label\":\"Compacted / Fine Gravel\",\"distance_m\":240,\"pct\":5}],\"road\":[{\"label\":\"Protected Cycleway\",\"distance_m\":2400,\"pct\":50},{\"label\":\"Local Street\",\"distance_m\":1920,\"pct\":40},{\"label\":\"Tertiary Road\",\"distance_m\":480,\"pct\":10}],\"traffic\":[{\"label\":\"Quiet / Traffic-Free\",\"distance_m\":2880,\"pct\":60},{\"label\":\"Low Traffic\",\"distance_m\":1440,\"pct\":30},{\"label\":\"Moderate Traffic\",\"distance_m\":480,\"pct\":10}],\"noise\":[{\"label\":\"Quiet\",\"distance_m\":3360,\"pct\":70},{\"label\":\"Moderate\",\"distance_m\":1440,\"pct\":30}],\"speed\":[{\"label\":\"Off-road / Cycleway\",\"distance_m\":2400,\"pct\":50},{\"label\":\"≤ 30 km/h\",\"distance_m\":1920,\"pct\":40},{\"label\":\"40–50 km/h\",\"distance_m\":480,\"pct\":10}],\"warnings\":[]},\"units\":\"metric\"}"}],"route_slot":[{"id":"slot-0","slot_index":0,"active":"yes","profile":"gabis-fast-city","profile_label":"profile_gabis_fast_city","alt":0,"alt_label":"Alt 1","status":"ready","distance_m":4800,"distance_label":"4.8 km","ascent_m":34,"ascent_label":"34 m","descent_m":31,"descent_label":"31 m","time_s":960,"duration_label":"16 min","energy_kcal":112,"warnings_count":0,"elevation_json":"[[0,14,0],[1.2,19,1.2],[2.4,24,1.8],[3.6,18,-1.5],[4.8,16,-0.5]]","breakdown_json":"{\"surface\":[{\"label\":\"Asphalt\",\"distance_m\":3600,\"pct\":75},{\"label\":\"Paved Cycleway\",\"distance_m\":960,\"pct\":20},{\"label\":\"Compacted / Fine Gravel\",\"distance_m\":240,\"pct\":5}],\"road\":[{\"label\":\"Protected Cycleway\",\"distance_m\":2400,\"pct\":50},{\"label\":\"Local Street\",\"distance_m\":1920,\"pct\":40},{\"label\":\"Tertiary Road\",\"distance_m\":480,\"pct\":10}],\"traffic\":[{\"label\":\"Quiet / Traffic-Free\",\"distance_m\":2880,\"pct\":60},{\"label\":\"Low Traffic\",\"distance_m\":1440,\"pct\":30},{\"label\":\"Moderate Traffic\",\"distance_m\":480,\"pct\":10}],\"noise\":[{\"label\":\"Quiet\",\"distance_m\":3360,\"pct\":70},{\"label\":\"Moderate\",\"distance_m\":1440,\"pct\":30}],\"speed\":[{\"label\":\"Off-road / Cycleway\",\"distance_m\":2400,\"pct\":50},{\"label\":\"≤ 30 km/h\",\"distance_m\":1920,\"pct\":40},{\"label\":\"40–50 km/h\",\"distance_m\":480,\"pct\":10}],\"warnings\":[]}"},{"id":"slot-1","slot_index":1,"active":"no","profile":"gabis-safe-road","profile_label":"profile_gabis_safe_road","alt":0,"alt_label":"Alt 1","status":"ready","distance_m":5100,"distance_label":"5.1 km","ascent_m":29,"ascent_label":"29 m","descent_m":27,"descent_label":"27 m","time_s":1020,"duration_label":"17 min","energy_kcal":108,"warnings_count":0,"elevation_json":"[[0,14,0],[1.3,17,0.8],[2.6,21,1.1],[3.9,16,-1.2],[5.1,15,-0.3]]","breakdown_json":"{\"surface\":[{\"label\":\"Asphalt\",\"distance_m\":4080,\"pct\":80},{\"label\":\"Paved Cycleway\",\"distance_m\":1020,\"pct\":20}],\"road\":[{\"label\":\"Protected Cycleway\",\"distance_m\":3060,\"pct\":60},{\"label\":\"Local Street\",\"distance_m\":2040,\"pct\":40}],\"traffic\":[{\"label\":\"Quiet / Traffic-Free\",\"distance_m\":3570,\"pct\":70},{\"label\":\"Low Traffic\",\"distance_m\":1530,\"pct\":30}],\"noise\":[{\"label\":\"Quiet\",\"distance_m\":4080,\"pct\":80},{\"label\":\"Moderate\",\"distance_m\":1020,\"pct\":20}],\"speed\":[{\"label\":\"Off-road / Cycleway\",\"distance_m\":3060,\"pct\":60},{\"label\":\"≤ 30 km/h\",\"distance_m\":2040,\"pct\":40}],\"warnings\":[]}"},{"id":"slot-2","slot_index":2,"active":"no","profile":"gabis-lite-gravel","profile_label":"profile_gabis_lite_gravel","alt":0,"alt_label":"Alt 1","status":"ready","distance_m":5400,"distance_label":"5.4 km","ascent_m":42,"ascent_label":"42 m","descent_m":39,"descent_label":"39 m","time_s":1140,"duration_label":"19 min","energy_kcal":126,"warnings_count":1,"elevation_json":"[[0,14,0],[1.4,22,1.6],[2.8,29,2.1],[4.1,20,-1.8],[5.4,16,-0.7]]","breakdown_json":"{\"surface\":[{\"label\":\"Asphalt\",\"distance_m\":2700,\"pct\":50},{\"label\":\"Compacted / Fine Gravel\",\"distance_m\":1890,\"pct\":35},{\"label\":\"Unpaved / Rough Track\",\"distance_m\":810,\"pct\":15}],\"road\":[{\"label\":\"Path / Track\",\"distance_m\":2700,\"pct\":50},{\"label\":\"Protected Cycleway\",\"distance_m\":1620,\"pct\":30},{\"label\":\"Local Street\",\"distance_m\":1080,\"pct\":20}],\"traffic\":[{\"label\":\"Quiet / Traffic-Free\",\"distance_m\":4320,\"pct\":80},{\"label\":\"Low Traffic\",\"distance_m\":1080,\"pct\":20}],\"noise\":[{\"label\":\"Quiet\",\"distance_m\":4590,\"pct\":85},{\"label\":\"Moderate\",\"distance_m\":810,\"pct\":15}],\"speed\":[{\"label\":\"Off-road / Cycleway\",\"distance_m\":4320,\"pct\":80},{\"label\":\"≤ 30 km/h\",\"distance_m\":1080,\"pct\":20}],\"warnings\":[{\"kind\":\"rough_surface\",\"label\":\"Unpaved / compacted gravel surface segments along route\",\"distance_m\":2700,\"severity\":\"warn\"}]}"}],"offline_bundle":[{"id":"sao-paulo","title":"São Paulo Metro","coverage":"W50_S25 · Greater SP & Serra do Mar","size_label":"18.4 MB","status":"available","segments_cached":0,"pmtiles_ready":"no"},{"id":"london","title":"Greater London & Surrey Hills","coverage":"W5_N50 + E0_N50 · Thames Valley & Box Hill","size_label":"24.1 MB","status":"available","segments_cached":0,"pmtiles_ready":"no"},{"id":"amsterdam","title":"Amsterdam & Randstad","coverage":"E0_N50 · North Holland Cycle Network","size_label":"14.8 MB","status":"available","segments_cached":0,"pmtiles_ready":"no"},{"id":"girona","title":"Girona & Costa Brava Gravel","coverage":"E0_N40 · Rocacorba & Empordà","size_label":"16.2 MB","status":"available","segments_cached":0,"pmtiles_ready":"no"}]},"server":false,"routes":[{"hatches":["gpx-io"],"path":"/","screen":"router","nav":{"key":"nav_router","label":"Gabi's Router","strip":false},"files":{"adapters":[],"handlers":["shell/handlers/is_key.js","shell/handlers/map_action.js","shell/handlers/place_found.js","shell/handlers/planner_action.js","shell/handlers/route_answered.js","shell/handlers/search_submitted.js"],"shared":[],"renderers":["shell/renderers/elevation-chart.js","shell/renderers/surface-breakdown.js"],"html":"shell/screens/router.html","css":"shell/screens/router.css"},"ssr":"spa","states":["planning"]}],"tables":[],"schema":{"device":{"durability":"device","fields":[{"enum":["device"],"name":"id","pk":true,"type":"string","required":true},{"default":"auto","defaulted":true,"enum":["auto","light","dark"],"name":"theme","type":"string","required":true},{"default":"metric","defaulted":true,"enum":["metric","imperial"],"name":"units","type":"string","required":true}]},"planner_state":{"durability":"tab","fields":[{"enum":["planner"],"name":"id","pk":true,"type":"string","required":true},{"enum":["open","collapsed"],"name":"drawer","type":"string","required":true},{"enum":["none","custom","offline","about"],"name":"modal","type":"string","required":true},{"enum":["surface","road","traffic","noise","speed","warnings"],"name":"breakdown_tab","type":"string","required":true},{"enum":["gbrouter","light","osm","cyclosm"],"name":"basemap","type":"string","required":true},{"enum":["off","on"],"name":"terrain_3d","type":"string","required":true},{"enum":["closed","open"],"name":"legend_open","type":"string","required":true},{"enum":["idle","armed"],"name":"clear_confirm","type":"string","required":true},{"enum":["idle","copied"],"name":"share_status","type":"string","required":true},{"enum":["idle","open"],"name":"search_step","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"search_text","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"search_q","type":"string","required":true},{"bounds":{"sizeMax":16384},"name":"waypoints_json","type":"string","required":true},{"bounds":{"intMin":0,"intMax":64},"name":"waypoint_count","type":"int32","required":true},{"bounds":{"sizeMax":8192},"name":"avoids_json","type":"string","required":true},{"bounds":{"intMin":0,"intMax":32},"name":"avoid_count","type":"int32","required":true},{"enum":["250","500","1000","2500","5000"],"name":"avoid_radius_m","type":"int32","required":true},{"enum":["0","1","2"],"name":"active_slot","type":"int32","required":true},{"enum":["gabis-fast-city","gabis-safe-road","gabis-lite-gravel","fastbike-lowtraffic","fastbike-verylowtraffic","fastbike","gravel","trekking","mtb","shortest","custom"],"name":"active_profile","type":"string","required":true},{"bounds":{"sizeMax":32768},"name":"custom_brf","type":"string","required":true},{"bounds":{"sizeMax":65536},"name":"request_key","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"routes_geojson","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"active_gpx","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"gpx_import_xml","type":"string","required":true},{"bounds":{"intMin":-1,"intMax":1000},"name":"hover_permille","type":"int32","required":true},{"bounds":{"sizeMax":32},"name":"hover_lon","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"hover_lat","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"inspect_lon","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"inspect_lat","type":"string","required":true},{"bounds":{"sizeMax":4096},"name":"inspect_summary","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"center_lat","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"center_lon","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"zoom","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"start_label","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"end_label","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"active_distance_label","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"active_ascent_label","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"active_descent_label","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"active_duration_label","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"active_energy_label","type":"string","required":true},{"bounds":{"intMin":0,"intMax":200},"name":"active_warnings_count","type":"int32","required":true},{"bounds":{"sizeMax":65536},"name":"active_elevation_json","type":"string","required":true},{"bounds":{"sizeMax":65536},"name":"active_breakdown_json","type":"string","required":true}]},"route_slot":{"durability":"tab","fields":[{"enum":["slot-0","slot-1","slot-2"],"name":"id","pk":true,"type":"string","required":true},{"enum":["0","1","2"],"name":"slot_index","type":"int32","required":true},{"enum":["yes","no"],"name":"active","type":"string","required":true},{"enum":["gabis-fast-city","gabis-safe-road","gabis-lite-gravel","fastbike-lowtraffic","fastbike-verylowtraffic","fastbike","gravel","trekking","mtb","shortest","custom"],"name":"profile","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"profile_label","type":"string","required":true},{"enum":["0","1","2"],"name":"alt","type":"int32","required":true},{"bounds":{"sizeMax":32},"name":"alt_label","type":"string","required":true},{"enum":["ready","empty"],"name":"status","type":"string","required":true},{"bounds":{"intMin":0},"name":"distance_m","type":"int32","required":true},{"bounds":{"sizeMax":64},"name":"distance_label","type":"string","required":true},{"bounds":{"intMin":0},"name":"ascent_m","type":"int32","required":true},{"bounds":{"sizeMax":64},"name":"ascent_label","type":"string","required":true},{"bounds":{"intMin":0},"name":"descent_m","type":"int32","required":true},{"bounds":{"sizeMax":64},"name":"descent_label","type":"string","required":true},{"bounds":{"intMin":0},"name":"time_s","type":"int32","required":true},{"bounds":{"sizeMax":64},"name":"duration_label","type":"string","required":true},{"bounds":{"intMin":0},"name":"energy_kcal","type":"int32","required":true},{"bounds":{"intMin":0},"name":"warnings_count","type":"int32","required":true},{"bounds":{"sizeMax":65536},"name":"elevation_json","type":"string","required":true},{"bounds":{"sizeMax":65536},"name":"breakdown_json","type":"string","required":true}]},"route_answer":{"durability":"tab","fields":[{"name":"id","pk":true,"type":"string","required":true},{"bounds":{"sizeMax":65536},"name":"request_key","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"slot_0_json","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"slot_1_json","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"slot_2_json","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"routes_geojson","type":"string","required":true},{"bounds":{"sizeMax":131072},"name":"active_gpx","type":"string","required":true},{"bounds":{"sizeMax":16384},"name":"inspect_json","type":"string","required":true},{"bounds":{"sizeMax":16384},"name":"matched_waypoints_json","type":"string","required":true},{"bounds":{"sizeMax":16384},"name":"offline_json","type":"string","required":true}],"uniques":[{"name":"uq_route_answer_key","cols":["request_key"]}]},"place_answer":{"durability":"tab","fields":[{"name":"id","pk":true,"type":"string","required":true},{"enum":["search","address","reverse"],"name":"kind","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"q","type":"string","required":true},{"bounds":{"sizeMax":8},"name":"lang","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"p0","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"p1","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"p2","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"p3","type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"p4","type":"string","required":true}],"uniques":[{"name":"uq_place_answer_question","cols":["kind","q","lang"]}]},"place_suggestion":{"durability":"tab","fields":[{"enum":["s0","s1","s2","s3","s4"],"name":"id","pk":true,"type":"string","required":true},{"bounds":{"sizeMax":2000},"name":"q","type":"string","required":true},{"bounds":{"sizeMax":500},"name":"label","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"line1","type":"string","required":true},{"bounds":{"sizeMax":120},"name":"district","type":"string","required":true},{"bounds":{"sizeMax":120},"name":"city","type":"string","required":true},{"bounds":{"sizeMax":120},"name":"region","type":"string","required":true},{"bounds":{"sizeMax":40},"name":"postal_code","type":"string","required":true},{"bounds":{"sizeMax":8},"name":"country","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"latitude","type":"string","required":true},{"bounds":{"sizeMax":32},"name":"longitude","type":"string","required":true}]},"offline_bundle":{"durability":"tab","fields":[{"enum":["sao-paulo","london","amsterdam","girona"],"name":"id","pk":true,"type":"string","required":true},{"bounds":{"sizeMax":120},"name":"title","type":"string","required":true},{"bounds":{"sizeMax":240},"name":"coverage","type":"string","required":true},{"bounds":{"sizeMax":64},"name":"size_label","type":"string","required":true},{"enum":["available","installed"],"name":"status","type":"string","required":true},{"bounds":{"intMin":0},"name":"segments_cached","type":"int32","required":true},{"enum":["yes","no"],"name":"pmtiles_ready","type":"string","required":true}]}},"types":{"types":{"string":{"pg":"text","column":"plain","subset":true,"base":["text","varchar","bpchar","tsvector"],"json":"string","refuse":"\\x00","order":"text","beyond":["scalar-values"]},"bool":{"pg":"boolean","column":"plain","subset":true,"base":["bool","boolean"],"json":"boolean","order":"boolean","beyond":[]},"int32":{"pg":"integer","column":"plain","subset":true,"base":["int2","int4","integer","smallint"],"json":"number","min":-2147483648,"max":2147483647,"order":"number","beyond":[]},"int64":{"pg":"bigint","column":"domain","subset":false,"sql":"portable_int64","base":["int8","bigint"],"json":"string","pattern":"^(0|-?[1-9][0-9]*)$","order":"integer","beyond":["int64-range"]},"double":{"pg":"double precision","column":"checked","subset":true,"base":["float4","float8","double precision","real"],"json":"number","order":"number","beyond":[]},"bytes":{"pg":"bytea","column":"domain","subset":false,"sql":"portable_bytes","base":["bytea"],"json":"string","pattern":"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$","order":"none","beyond":[]},"uuid":{"pg":"uuid","column":"plain","subset":true,"base":["uuid"],"json":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","order":"text","beyond":[]},"timestamp":{"pg":"timestamptz","column":"domain","subset":false,"sql":"portable_timestamp","base":["timestamptz","timestamp with time zone"],"json":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}Z$","order":"text","beyond":["calendar"]},"duration":{"pg":"interval","column":"domain","subset":false,"sql":"portable_duration","base":["interval"],"json":"string","pattern":"^PT(0|[1-9][0-9]*)(\\.[0-9]{0,5}[1-9])?S$","order":"duration","beyond":["duration-range"]},"decimal":{"pg":"numeric","column":"domain","subset":false,"base":["numeric","decimal"],"json":"string","pattern":"^(0|-?[1-9][0-9]*|-?(0|[1-9][0-9]*)\\.[0-9]*[1-9])$","order":"decimal","beyond":["decimal-profile"]},"date":{"pg":"date","column":"checked","subset":true,"base":["date"],"json":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$","order":"text","beyond":["calendar"]},"time":{"pg":"time(6)","column":"domain","subset":false,"sql":"portable_time","base":["time","time without time zone"],"json":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}$","order":"text","beyond":[]},"timezone":{"pg":"text","column":"checked","subset":true,"base":["text"],"json":"string","pattern":"^[A-Za-z0-9+_/-]+$","order":"none","beyond":["tzdb"]},"json":{"pg":"json","column":"checked","subset":false,"base":["json","jsonb"],"json":"value","order":"none","beyond":["scalar-values","finite-numbers"]},"geojson":{"pg":"json","column":"checked","subset":false,"base":["json","jsonb","geometry","geography"],"json":"value","order":"none","beyond":["scalar-values","finite-numbers","ring-closure"]}},"aliases":{"text":"string","int":"int32","bigint":"int64","timestamptz":"timestamp","tsvector":"string"}},"carriers":{"types":{"string":{"pg":"text","column":"plain","subset":true,"base":["text","varchar","bpchar","tsvector"],"json":"string","refuse":"\\x00","order":"text","beyond":["scalar-values"]},"bool":{"pg":"boolean","column":"plain","subset":true,"base":["bool","boolean"],"json":"boolean","order":"boolean","beyond":[]},"int32":{"pg":"integer","column":"plain","subset":true,"base":["int2","int4","integer","smallint"],"json":"number","min":-2147483648,"max":2147483647,"order":"number","beyond":[]},"int64":{"pg":"bigint","column":"domain","subset":false,"sql":"portable_int64","base":["int8","bigint"],"json":"string","pattern":"^(0|-?[1-9][0-9]*)$","order":"integer","beyond":["int64-range"]},"double":{"pg":"double precision","column":"checked","subset":true,"base":["float4","float8","double precision","real"],"json":"number","order":"number","beyond":[]},"bytes":{"pg":"bytea","column":"domain","subset":false,"sql":"portable_bytes","base":["bytea"],"json":"string","pattern":"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$","order":"none","beyond":[]},"uuid":{"pg":"uuid","column":"plain","subset":true,"base":["uuid"],"json":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","order":"text","beyond":[]},"timestamp":{"pg":"timestamptz","column":"domain","subset":false,"sql":"portable_timestamp","base":["timestamptz","timestamp with time zone"],"json":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}Z$","order":"text","beyond":["calendar"]},"duration":{"pg":"interval","column":"domain","subset":false,"sql":"portable_duration","base":["interval"],"json":"string","pattern":"^PT(0|[1-9][0-9]*)(\\.[0-9]{0,5}[1-9])?S$","order":"duration","beyond":["duration-range"]},"decimal":{"pg":"numeric","column":"domain","subset":false,"base":["numeric","decimal"],"json":"string","pattern":"^(0|-?[1-9][0-9]*|-?(0|[1-9][0-9]*)\\.[0-9]*[1-9])$","order":"decimal","beyond":["decimal-profile"]},"date":{"pg":"date","column":"checked","subset":true,"base":["date"],"json":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$","order":"text","beyond":["calendar"]},"time":{"pg":"time(6)","column":"domain","subset":false,"sql":"portable_time","base":["time","time without time zone"],"json":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}$","order":"text","beyond":[]},"timezone":{"pg":"text","column":"checked","subset":true,"base":["text"],"json":"string","pattern":"^[A-Za-z0-9+_/-]+$","order":"none","beyond":["tzdb"]},"json":{"pg":"json","column":"checked","subset":false,"base":["json","jsonb"],"json":"value","order":"none","beyond":["scalar-values","finite-numbers"]},"geojson":{"pg":"json","column":"checked","subset":false,"base":["json","jsonb","geometry","geography"],"json":"value","order":"none","beyond":["scalar-values","finite-numbers","ring-closure"]}},"aliases":{"text":"string","int":"int32","bigint":"int64","timestamptz":"timestamp","tsvector":"string"}},"migrations":[],"pipelines":[],"uniques":{"route_answer":[["request_key"]],"place_answer":[["kind","q","lang"]]},"units":{"brouter":{"isolation":"agent","memo":{"table":"route_answer","key":["request_key"],"columns":["request_key","slot_0_json","slot_1_json","slot_2_json","routes_geojson","active_gpx","inspect_json","matched_waypoints_json","offline_json"]},"ports":{"reads":["planner_state"],"raises":{"routed":{"type":"object","fields":{"request_key":{"type":"string","maxLength":65536},"slot_0_json":{"type":"string","maxLength":131072},"slot_1_json":{"type":"string","maxLength":131072},"slot_2_json":{"type":"string","maxLength":131072},"routes_geojson":{"type":"string","maxLength":131072},"active_gpx":{"type":"string","maxLength":131072},"inspect_json":{"type":"string","maxLength":16384},"matched_waypoints_json":{"type":"string","maxLength":16384},"offline_json":{"type":"string","maxLength":16384}}}}},"files":["shell/units/brouter/unit.js"],"src":"shell/units/brouter/unit.js"},"geocoder":{"isolation":"agent","memo":{"table":"place_answer","key":["kind","q","lang"],"columns":["kind","q","lang","p0","p1","p2","p3","p4"]},"ports":{"reads":["planner_state"],"raises":{"found":{"type":"object","fields":{"kind":{"type":"string","maxLength":65536},"q":{"type":"string","maxLength":2000},"lang":{"type":"string","maxLength":8},"p0":{"type":"string","maxLength":2000},"p1":{"type":"string","maxLength":2000},"p2":{"type":"string","maxLength":2000},"p3":{"type":"string","maxLength":2000},"p4":{"type":"string","maxLength":2000}}}}},"files":["shell/units/geocoder/unit.js"],"src":"shell/units/geocoder/unit.js"},"router-map":{"grants":["geolocation"],"isolation":"realm","ports":{"reads":["planner_state"],"raises":{"map_action":{"type":"object","fields":{"action":{"type":"string","maxLength":24,"values":["add_waypoint","move_waypoint","remove_waypoint","delete_waypoint","set_start","set_end","add_via","add_avoid","remove_avoid","clear_avoids","inspect_point"]},"index":{"type":"integer","min":-1,"max":128},"lon":{"type":"string","maxLength":32},"lat":{"type":"string","maxLength":32},"label":{"type":"string","maxLength":120}}}}},"files":["shell/units/router-map/index.html","shell/units/router-map/vendor/maplibre-gl.js","shell/units/router-map/vendor/maplibre-gl.css"],"src":"shell/units/router-map/index.html"}},"iceServers":[{"urls":"stun:stun.cloudflare.com:3478"}]}