diff --git a/.gitignore b/.gitignore
index db625dcb..3c3b4d05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,3 +73,4 @@ target/
#Ipython Notebook
.ipynb_checkpoints
+local_run/data
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 843ed52b..0596ac2d 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -15,32 +15,32 @@ ENV DEBIAN_FRONTEND noninteractive
RUN --mount=type=cache,target=/var/cache/apt,id=apt_$TARGETARCH --mount=type=tmpfs,target=/var/lib/apt/lists \
rm /etc/apt/apt.conf.d/docker-clean && \
apt-get update && apt-get install -y --no-install-recommends \
- python3.12=3.12.3-1ubuntu0.5 \
+ python3.12 \
# renovate: srcname=python3.12
- libpython3.12=3.12.3-1ubuntu0.5 \
+ libpython3.12 \
# renovate: srcname=python3.12
- python3.12-venv=3.12.3-1ubuntu0.5 \
+ python3.12-venv \
# renovate: srcname=python-pip
- python3-pip=24.0+dfsg-1ubuntu1.1 \
+ python3-pip \
# renovate: srcname=postgresql-16
- libpq5=16.8-0ubuntu0.24.04.1 \
+ libpq5 \
# renovate: srcname=postgresql-16
- postgresql-client-16=16.8-0ubuntu0.24.04.1 \
- curl=8.5.0-2ubuntu10.6 \
+ postgresql-client-16 \
+ curl \
# renovate: srcname=pcre3
- libpcre3=2:8.39-15build1 \
+ libpcre3 \
# renovate: srcname=librsvg
- librsvg2-2=2.58.0+dfsg-1build1 \
+ librsvg2-2 \
# renovate: srcname=librsvg
- gir1.2-rsvg-2.0=2.58.0+dfsg-1build1 \
+ gir1.2-rsvg-2.0 \
# renovate: srcname=cairo
- libcairo2=1.18.0-3build1 \
- libgirepository-1.0-1=1.80.1-1 \
+ libcairo2 \
+ libgirepository-1.0-1 \
# renovate: srcname=libmemcached
- libmemcached11t64=1.1.4-1.1build3 \
+ libmemcached11t64 \
gettext \
- tzdata=2025b-0ubuntu0.24.04 \
- ca-certificates=20240203 \
+ tzdata-legacy \
+ ca-certificates \
# renovate: srcname=libzstd
zstd=1.5.5+dfsg2-2build1.1
ENV PATH="/usr/lib/postgresql/16/bin/:$PATH"
@@ -49,17 +49,17 @@ ENV PATH="/usr/lib/postgresql/16/bin/:$PATH"
FROM base as builder
RUN --mount=type=cache,target=/var/cache/apt,id=apt_$TARGETARCH --mount=type=tmpfs,target=/var/lib/apt/lists \
apt-get update && apt-get install -y --no-install-recommends \
- build-essential=12.10ubuntu1 \
+ build-essential \
# renovate: srcname=python3.12
- python3.12-dev=3.12.3-1ubuntu0.5 \
- libpcre3-dev=2:8.39-15build1 \
+ python3.12-dev \
+ libpcre3-dev \
# renovate: srcname=postgresql-16
- libpq-dev=16.8-0ubuntu0.24.04.1 \
+ libpq-dev \
# renovate: srcname=cairo
- libcairo2-dev=1.18.0-3build1 \
- libgirepository1.0-dev=1.80.1-1 \
+ libcairo2-dev \
+ libgirepository1.0-dev \
# renovate: srcname=libmemcached
- libmemcached-dev=1.1.4-1.1build3
+ libmemcached-dev
RUN mkdir /app
diff --git a/local_run/.env b/local_run/.env
new file mode 100644
index 00000000..c1ed8d5b
--- /dev/null
+++ b/local_run/.env
@@ -0,0 +1,6 @@
+C3NAV_TAG=latest
+C3NAV_DOMAIN=c3nav.docker.localhost
+# to change the default database name
+#C3NAV_DATABASE_NAME=c3nav-37c3
+# if you want to change the default path to the data dir, which by default is a folder called data in this directory
+C3NAV_DOCKER_DATA_DIR=./data
\ No newline at end of file
diff --git a/local_run/SENSOR_README.md b/local_run/SENSOR_README.md
new file mode 100644
index 00000000..4b5db906
--- /dev/null
+++ b/local_run/SENSOR_README.md
@@ -0,0 +1,152 @@
+# NOI Sensor Management System
+
+This system allows you to manage environmental sensors from the NOI Open Data Hub in c3nav, displaying them as overlay features on different levels/floors.
+
+## Overview
+
+The system supports:
+- Multiple sensors on the same overlay but on different levels
+- Dynamic addition of new sensors through Django management commands
+- Automatic data scraping from NOI Open Data Hub APIs
+- Real-time display of CO2, temperature, humidity and other environmental data
+
+## Architecture
+
+- **Single Overlay**: All NOI environmental sensors are managed under one `DataOverlay`
+- **Multiple Levels**: Sensors can be placed on different floors (floor0, floor1, etc.)
+- **Flexible Configuration**: Sensor locations and properties are configurable via the overlay's `sensor_config` field
+- **Dynamic Discovery**: The system can automatically discover and display any sensor data from the NOI API
+
+## Setup
+
+The main setup is handled by the `up.sh` script, which:
+
+1. Creates a single "NOI Environmental Sensors" overlay
+2. Configures initial sensors with their coordinates and levels
+3. Scrapes initial data from the NOI Open Data Hub
+4. Applies necessary database migrations
+
+## Managing Sensors
+
+### 1. List All Sensors
+```bash
+# Using the helper script
+./manage_noi_sensors.sh list
+
+# Or directly
+docker compose exec -T c3nav-core python manage.py list_sensors --overlay-id 1
+```
+
+### 2. Add a New Sensor
+```bash
+# Using the helper script
+./manage_noi_sensors.sh add 'NOI:YourSensorID' 'Sensor Display Name' 300.0 250.0 floor1
+
+# Or directly
+docker compose exec -T c3nav-core python manage.py add_sensor \
+ --overlay-id 1 \
+ --sensor-id 'NOI:YourSensorID' \
+ --name 'Sensor Display Name' \
+ --x 300.0 \
+ --y 250.0 \
+ --level floor1
+```
+
+### 3. Scrape Data for All Sensors
+```bash
+# Using the helper script
+./manage_noi_sensors.sh scrape
+
+# Or directly
+docker compose exec -T c3nav-core python manage.py manage_sensors --scrape-data --overlay-id 1
+```
+
+## Configuration Structure
+
+The overlay's `sensor_config` field contains:
+
+```json
+{
+ "data_path": "data",
+ "mappings": {
+ "id_field": "scode",
+ "name_field": "sname",
+ "x_field": "scoordinate.x",
+ "y_field": "scoordinate.y"
+ },
+ "sensors": [
+ {
+ "id": "NOI:FreeSoftwareLab-Temperature",
+ "coordinates": {"x": 291.0, "y": 241.0},
+ "level": "floor1"
+ },
+ {
+ "id": "NOI:NOI-A1-Floor1-CO2",
+ "coordinates": {"x": 270.0, "y": 241.0},
+ "level": "floor1"
+ }
+ ]
+}
+```
+
+## Database Schema
+
+### DataOverlay fields:
+- `data_source_url`: URL to scrape sensor data from
+- `sensor_config`: JSON configuration for sensor mapping and processing
+
+### DataOverlayFeature fields:
+- `sensor_id`: Unique identifier for the sensor
+- `sensor_type`: Type of sensor (e.g., 'environmental')
+- `sensor_value`: Single sensor value (nullable for multi-measurement sensors)
+- `sensor_unit`: Unit of measurement (nullable for multi-measurement sensors)
+- `coordinates_x`, `coordinates_y`: Position in c3nav coordinate system
+- `last_updated`: Timestamp of last data update
+- `sensor_data`: Raw sensor data for debugging
+- `extra_data`: Processed sensor readings for display
+
+## Data Flow
+
+1. **Configuration**: Sensors are configured in the overlay's `sensor_config`
+2. **Scraping**: The `manage_sensors` command fetches data from NOI Open Data Hub
+3. **Processing**: Data is processed according to sensor configuration
+4. **Storage**: Sensor features are created/updated in the database
+5. **Display**: Sensors appear as interactive points on the map
+
+## Adding New Sensor Types
+
+To add a new sensor from the NOI Open Data Hub:
+
+1. Find the sensor ID in the NOI API (usually starts with "NOI:")
+2. Determine the coordinates where it should appear on the map
+3. Choose the appropriate level/floor
+4. Add it using the `add_sensor` command
+5. Run the scrape command to fetch initial data
+
+## Troubleshooting
+
+### Sensor not appearing on map
+- Check if the level exists: `docker compose exec -T c3nav-core python manage.py shell -c "from c3nav.mapdata.models import Level; print([l.short_label for l in Level.objects.all()])"`
+- Verify coordinates are within the map bounds
+- Check if the overlay is enabled and visible
+
+### No data being scraped
+- Verify the sensor ID exists in the NOI Open Data Hub API
+- Check the API URL is accessible: https://mobility.api.opendatahub.com/v2/flat/IndoorStation/*/latest
+- Review logs during scraping for errors
+
+### Data not updating
+- Check the `last_updated` field in the sensor feature
+- Verify the scraping command completed successfully
+- Consider running the scrape command more frequently
+
+## Files
+
+- `up.sh`: Main setup script
+- `manage_noi_sensors.sh`: Helper script for sensor management
+- `src/c3nav/mapdata/management/commands/manage_sensors.py`: Core sensor management command
+- `src/c3nav/mapdata/management/commands/add_sensor.py`: Command to add new sensors
+- `src/c3nav/mapdata/management/commands/list_sensors.py`: Command to list sensors
+- `src/c3nav/mapdata/models/overlay.py`: Database models
+- `src/c3nav/mapdata/migrations/0140_add_temperature_fields.py`: Migration for sensor fields
+- `src/c3nav/mapdata/migrations/0141_add_sensor_data_field.py`: Migration for sensor_data field
diff --git a/local_run/compose.yml b/local_run/compose.yml
new file mode 100644
index 00000000..6af7d37d
--- /dev/null
+++ b/local_run/compose.yml
@@ -0,0 +1,109 @@
+# SPDX-FileCopyrightText: 2024 NOI Techpark
+# SPDX-FileCopyrightText: 2024 https://github.com/c3nav/c3nav
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# Initially Copied from https://github.com/c3nav/c3nav/blob/034f8fe4633be3a982e94fd9e2f1fbc6d3dfafe1/deployment/docker/compose.yaml
+
+x-restart-policy: &restart-policy
+ restart: unless-stopped
+x-depends_on-default: &depends_on
+ condition: service_started
+x-depends_on-healthy: &depends_on-healthy
+ condition: service_healthy
+x-healthcheck_defaults: &healthcheck_defaults
+ interval: 10s
+ timeout: 2s
+ retries: 5
+ start_period: 10s
+x-c3nav-defaults: &c3nav-defaults
+ build:
+ context: ..
+ dockerfile: docker/Dockerfile
+ args:
+ - COMMIT=${COMMIT}
+ depends_on:
+ redis:
+ <<: *depends_on-healthy
+ postgres:
+ <<: *depends_on-healthy
+ volumes:
+ - type: bind
+ source: ${C3NAV_DOCKER_DATA_DIR:-./data}
+ target: /data
+ bind:
+ create_host_path: true
+x-c3nav-environment: &c3nav-environment
+ C3NAV_DEBUG: false
+ C3NAV_LOGLEVEL: info
+ C3NAV_CONFIG: /data/c3nav.cfg
+ C3NAV_DATA_DIR: /data
+ C3NAV_DJANGO_ALLOWED_HOSTS: localhost,127.0.0.1,c3nav-core,c3nav-tiles,${C3NAV_DJANGO_ALLOWED_HOSTS:-""},${C3NAV_DOMAIN}
+ C3NAV_DJANGO_REVERSE_PROXY: "true"
+ UWSGI_WORKERS: ${C3NAV_CORE_WORKERS:-2}
+ C3NAV_DATABASE_BACKEND: postgresql
+ C3NAV_DATABASE_NAME: ${C3NAV_DATABASE_NAME:-c3nav}
+ C3NAV_DATABASE_USER: ${C3NAV_DATABASE_USER:-postgres}
+ C3NAV_DATABASE_HOST: postgres
+ C3NAV_REDIS: "redis://redis:6379/0"
+ C3NAV_CELERY_BROKER: "redis://redis:6379/1"
+ C3NAV_CELERY_BACKEND: "redis://redis:6379/2"
+
+
+services:
+ c3nav-core:
+ <<: [*restart-policy, *c3nav-defaults]
+ command: webstatic
+ environment:
+ <<: *c3nav-environment
+ C3NAV_AUTOMIGRATE: yes
+ healthcheck:
+ <<: *healthcheck_defaults
+ test: curl -f http://localhost:8000/
+ ports:
+ - "${SERVER_PORT:-8000}:8000"
+
+ c3nav-workers:
+ <<: [*restart-policy, *c3nav-defaults]
+ command: worker
+ environment:
+ <<: *c3nav-environment
+ C3NAV_AUTOMIGRATE: no
+ healthcheck:
+ interval: 30s
+ timeout: 15s
+ retries: 2
+ start_period: 5s
+ test: entrypoint worker_healthcheck
+
+ postgres:
+ <<: *restart-policy
+ image: postgres:16
+ healthcheck:
+ <<: *healthcheck_defaults
+ test: pg_isready -U postgres && psql -U postgres -d ${C3NAV_DATABASE_NAME:-c3nav} -c "SELECT 1;"
+ environment:
+ POSTGRES_DB: ${C3NAV_DATABASE_NAME:-c3nav}
+ POSTGRES_HOST_AUTH_METHOD: "trust"
+ volumes:
+ - "c3nav-postgres:/var/lib/postgresql/data"
+
+ redis:
+ <<: *restart-policy
+ image: redis:7.2
+ command: redis-server --save 60 1 --loglevel warning
+ healthcheck:
+ <<: *healthcheck_defaults
+ test: redis-cli ping
+ volumes:
+ - "c3nav-redis:/data"
+ ulimits:
+ nofile:
+ soft: 10032
+ hard: 10032
+
+volumes:
+ c3nav-postgres:
+ external: true
+ c3nav-redis:
+ external: true
diff --git a/local_run/data-copy/c3nav.cfg b/local_run/data-copy/c3nav.cfg
new file mode 100644
index 00000000..db3e8c76
--- /dev/null
+++ b/local_run/data-copy/c3nav.cfg
@@ -0,0 +1,44 @@
+# SPDX-FileCopyrightText: 2024 NOI Techpark
+#
+# SPDX-License-Identifier: CC0-1.0
+
+[c3nav]
+svg_renderer=rsvg
+editor=False
+user_registration=false
+initial_level=2
+header_logo=/data/logo/sfscon.svg
+imprint_link=https://www.sfscon.it/impressum/
+branding=SFSCON map
+app_enabled=False
+
+[locale]
+languages=en
+
+[theme]
+#is_dark=False
+#randomize_primary_color=False
+map_background=#f7f8f8
+map_wall_fill=#e5e4e5
+map_wall_border=#c1bfbe
+#map_door_fill=#ffffff
+map_ground_fill=#f7f8f8
+#map_obstacles_default_fill=#b7b7b7
+#map_obstacles_default_border=#888888
+#css_primary=#9b4dca
+#css_initial=#ffffff
+#css_primary=#9b4dca
+#css_logo=None
+#css_secondary=#525862
+#css_tertiary=#f0f0f0
+#css_quaternary=#767676
+#css_quinary=#cccccc
+css_header_text=#000000
+#css_header_text_hover=#eeeeee
+css_header_background=#ffffff
+#css_shadow=#000000
+#css_overlay_background=#ffffff
+#css_grid=#000000
+#css_modal_backdrop=#000000
+#css_route_dots_shadow=#ffffff
+#map_background=#dcdcdc
diff --git a/local_run/data-copy/logo/sfscon.svg b/local_run/data-copy/logo/sfscon.svg
new file mode 100644
index 00000000..8480f30c
--- /dev/null
+++ b/local_run/data-copy/logo/sfscon.svg
@@ -0,0 +1,6 @@
+
+logo
diff --git a/local_run/db/auth_user.sql b/local_run/db/auth_user.sql
new file mode 100644
index 00000000..13e4d770
--- /dev/null
+++ b/local_run/db/auth_user.sql
@@ -0,0 +1,85 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 17.5 (Debian 17.5-1.pgdg120+1)
+-- Dumped by pg_dump version 17.5
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET transaction_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+SET default_tablespace = '';
+
+SET default_table_access_method = heap;
+
+--
+-- Name: auth_user; Type: TABLE; Schema: public; Owner: mindshub
+--
+
+CREATE TABLE public.auth_user (
+ id integer NOT NULL,
+ password character varying(128) NOT NULL,
+ last_login timestamp with time zone,
+ is_superuser boolean NOT NULL,
+ username character varying(150) NOT NULL,
+ first_name character varying(150) NOT NULL,
+ last_name character varying(150) NOT NULL,
+ email character varying(254) NOT NULL,
+ is_staff boolean NOT NULL,
+ is_active boolean NOT NULL,
+ date_joined timestamp with time zone NOT NULL
+);
+
+
+ALTER TABLE public.auth_user OWNER TO mindshub;
+
+--
+-- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: mindshub
+--
+
+ALTER TABLE public.auth_user ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_user_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_user auth_user_pkey; Type: CONSTRAINT; Schema: public; Owner: mindshub
+--
+
+ALTER TABLE ONLY public.auth_user
+ ADD CONSTRAINT auth_user_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_user auth_user_username_key; Type: CONSTRAINT; Schema: public; Owner: mindshub
+--
+
+ALTER TABLE ONLY public.auth_user
+ ADD CONSTRAINT auth_user_username_key UNIQUE (username);
+
+
+--
+-- Name: auth_user_username_6821ab7c_like; Type: INDEX; Schema: public; Owner: mindshub
+--
+
+CREATE INDEX auth_user_username_6821ab7c_like ON public.auth_user USING btree (username varchar_pattern_ops);
+
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/local_run/db/dump.sh b/local_run/db/dump.sh
new file mode 100644
index 00000000..55165cea
--- /dev/null
+++ b/local_run/db/dump.sh
@@ -0,0 +1,6 @@
+# SPDX-FileCopyrightText: 2024 NOI Techpark
+#
+# SPDX-License-Identifier: CC0-1.0
+
+#/bin/bash
+docker exec -i c3nav-postgres-1 su - postgres -c 'pg_dump --clean --if-exists --no-owner --exclude-table=public.auth_user c3nav' > dump.sql
\ No newline at end of file
diff --git a/local_run/db/dump.sql b/local_run/db/dump.sql
new file mode 100644
index 00000000..b7c71790
--- /dev/null
+++ b/local_run/db/dump.sql
@@ -0,0 +1,10780 @@
+-- SPDX-FileCopyrightText: 2024 NOI Techpark
+--
+-- SPDX-License-Identifier: CC0-1.0
+
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 15.6
+-- Dumped by pg_dump version 15.6
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+ALTER TABLE IF EXISTS ONLY public.site_announcement DROP CONSTRAINT IF EXISTS site_announcement_author_id_136858c5_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_otaupdaterecipient DROP CONSTRAINT IF EXISTS mesh_otaupdaterecipient_update_id_95637e8a_fk_mesh_otaupdate_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_otaupdaterecipient DROP CONSTRAINT IF EXISTS mesh_otaupdaterecipi_node_id_0fd5e307_fk_mesh_mesh;
+ALTER TABLE IF EXISTS ONLY public.mesh_otaupdate DROP CONSTRAINT IF EXISTS mesh_otaupdate_build_id_af114c77_fk_mesh_firmwarebuild_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_nodemessage DROP CONSTRAINT IF EXISTS mesh_nodemessage_uplink_id_22f38887_fk_mesh_meshuplink_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_nodemessage DROP CONSTRAINT IF EXISTS mesh_nodemessage_src_node_id_2754ac40_fk_mesh_meshnode_address;
+ALTER TABLE IF EXISTS ONLY public.mesh_meshuplink DROP CONSTRAINT IF EXISTS mesh_meshuplink_node_id_e0c94b45_fk_mesh_meshnode_address;
+ALTER TABLE IF EXISTS ONLY public.mesh_meshnode DROP CONSTRAINT IF EXISTS mesh_meshnode_upstream_id_c946622a_fk_mesh_meshnode_address;
+ALTER TABLE IF EXISTS ONLY public.mesh_meshnode DROP CONSTRAINT IF EXISTS mesh_meshnode_uplink_id_cf6b04db_fk_mesh_meshuplink_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwareversion DROP CONSTRAINT IF EXISTS mesh_firmwareversion_uploader_id_30c14fe3_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuildboard DROP CONSTRAINT IF EXISTS mesh_firmwarebuildbo_build_id_902517a9_fk_mesh_firm;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuild DROP CONSTRAINT IF EXISTS mesh_firmwarebuild_version_id_93e4b318_fk_mesh_firm;
+ALTER TABLE IF EXISTS ONLY public.mapdata_beaconmeasurement DROP CONSTRAINT IF EXISTS mapdata_wifimeasurement_author_id_e4b5352e_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_beaconmeasurement DROP CONSTRAINT IF EXISTS mapdata_wifimeasurem_space_id_1d127e47_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themeobstaclegroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themeobstacl_theme_id_629c5bc7_fk_mapdata_t;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themeobstaclegroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themeobstacl_obstacle_group_id_6a51b028_fk_mapdata_o;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themelocationgroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themelocatio_theme_id_9baff4da_fk_mapdata_t;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themelocationgroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themelocatio_location_group_id_2b664e23_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_stair DROP CONSTRAINT IF EXISTS mapdata_stair_space_id_6dd3ccb0_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space DROP CONSTRAINT IF EXISTS mapdata_space_locationslug_ptr_id_228ac56f_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space DROP CONSTRAINT IF EXISTS mapdata_space_level_id_b635bbeb_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space DROP CONSTRAINT IF EXISTS mapdata_space_label_settings_id_b26b4945_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space_groups DROP CONSTRAINT IF EXISTS mapdata_space_groups_space_id_d9bb3827_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space_groups DROP CONSTRAINT IF EXISTS mapdata_space_groups_locationgroup_id_352f0e89_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space DROP CONSTRAINT IF EXISTS mapdata_space_access_restriction_i_c295dd70_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_source DROP CONSTRAINT IF EXISTS mapdata_source_access_restriction_i_10e0a307_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_reportupdate DROP CONSTRAINT IF EXISTS mapdata_reportupdate_report_id_ac2b4e37_fk_mapdata_report_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_reportupdate DROP CONSTRAINT IF EXISTS mapdata_reportupdate_author_id_b0e6e04b_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_reportupdate DROP CONSTRAINT IF EXISTS mapdata_reportupdate_assigned_to_id_7af867b4_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report DROP CONSTRAINT IF EXISTS mapdata_report_location_id_a1b9eef3_fk_mapdata_locationslug_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report_created_groups DROP CONSTRAINT IF EXISTS mapdata_report_creat_report_id_e8da1176_fk_mapdata_r;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report_created_groups DROP CONSTRAINT IF EXISTS mapdata_report_creat_locationgroup_id_07a66aea_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report DROP CONSTRAINT IF EXISTS mapdata_report_author_id_1dd5fc14_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report DROP CONSTRAINT IF EXISTS mapdata_report_assigned_to_id_fd3a8aab_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeaco_space_id_2c6b1efe_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_ramp DROP CONSTRAINT IF EXISTS mapdata_ramp_space_id_e6f57e61_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_position DROP CONSTRAINT IF EXISTS mapdata_position_owner_id_8ad6b67c_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi DROP CONSTRAINT IF EXISTS mapdata_poi_space_id_dcb9f571_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi DROP CONSTRAINT IF EXISTS mapdata_poi_locationslug_ptr_id_22498ca8_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi DROP CONSTRAINT IF EXISTS mapdata_poi_label_settings_id_18a6c1cf_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi_groups DROP CONSTRAINT IF EXISTS mapdata_poi_groups_poi_id_a7128a8c_fk_mapdata_p;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi_groups DROP CONSTRAINT IF EXISTS mapdata_poi_groups_locationgroup_id_46758a1e_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi DROP CONSTRAINT IF EXISTS mapdata_poi_access_restriction_i_a6d0faf9_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_obstacle DROP CONSTRAINT IF EXISTS mapdata_obstacle_space_id_0aa1260c_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_obstacle DROP CONSTRAINT IF EXISTS mapdata_obstacle_group_id_a59d9b9b_fk_mapdata_obstaclegroup_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationredirect DROP CONSTRAINT IF EXISTS mapdata_locationredi_target_id_29d1b3d7_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationredirect DROP CONSTRAINT IF EXISTS mapdata_locationredi_locationslug_ptr_id_81cda0c9_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgrou_locationslug_ptr_id_5f0e4ebb_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgrou_label_settings_id_bc60e3cf_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgrou_category_id_96775229_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgrou_access_restriction_i_0f7d4828_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_lineobstacle DROP CONSTRAINT IF EXISTS mapdata_lineobstacle_space_id_b9ab6bf6_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_lineobstacle DROP CONSTRAINT IF EXISTS mapdata_lineobstacle_group_id_62d35458_fk_mapdata_o;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_on_top_of_id_10a0cb32_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_locationslug_ptr_id_ba5858ed_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_label_settings_id_6617bb7b_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level_groups DROP CONSTRAINT IF EXISTS mapdata_level_groups_locationgroup_id_b712e10d_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level_groups DROP CONSTRAINT IF EXISTS mapdata_level_groups_level_id_e60fa7db_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_access_restriction_i_22d67a77_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_leavedescription DROP CONSTRAINT IF EXISTS mapdata_leavedescrip_target_space_id_31053028_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_leavedescription DROP CONSTRAINT IF EXISTS mapdata_leavedescrip_space_id_33695534_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_hole DROP CONSTRAINT IF EXISTS mapdata_hole_space_id_20336b94_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphnode DROP CONSTRAINT IF EXISTS mapdata_graphnode_space_id_6c55bd00_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_waytype_id_2f0d449d_fk_mapdata_waytype_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_to_node_id_ba97ebb9_fk_mapdata_graphnode_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_from_node_id_98a76645_fk_mapdata_graphnode_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_access_restriction_i_cccddf9b_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation DROP CONSTRAINT IF EXISTS mapdata_dynamiclocat_locationslug_ptr_id_d18ebf9f_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation_groups DROP CONSTRAINT IF EXISTS mapdata_dynamiclocat_locationgroup_id_3212157f_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation DROP CONSTRAINT IF EXISTS mapdata_dynamiclocat_label_settings_id_3ae9d026_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation_groups DROP CONSTRAINT IF EXISTS mapdata_dynamiclocat_dynamiclocation_id_e7af76aa_fk_mapdata_d;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation DROP CONSTRAINT IF EXISTS mapdata_dynamiclocat_access_restriction_i_aadb0fd6_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_door DROP CONSTRAINT IF EXISTS mapdata_door_level_id_f6d894b2_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_door DROP CONSTRAINT IF EXISTS mapdata_door_access_restriction_i_2bfd4081_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_crossdescription DROP CONSTRAINT IF EXISTS mapdata_crossdescrip_target_space_id_8f82991b_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_crossdescription DROP CONSTRAINT IF EXISTS mapdata_crossdescrip_space_id_5b117c2d_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_crossdescription DROP CONSTRAINT IF EXISTS mapdata_crossdescrip_origin_space_id_88f8ef46_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_column DROP CONSTRAINT IF EXISTS mapdata_column_space_id_4f64c0d4_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_column DROP CONSTRAINT IF EXISTS mapdata_column_access_restriction_i_e09dd08f_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_building DROP CONSTRAINT IF EXISTS mapdata_building_level_id_0e322f7a_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area DROP CONSTRAINT IF EXISTS mapdata_area_space_id_c0461a4c_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area DROP CONSTRAINT IF EXISTS mapdata_area_locationslug_ptr_id_41901eb8_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area DROP CONSTRAINT IF EXISTS mapdata_area_label_settings_id_7ccf6168_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area_groups DROP CONSTRAINT IF EXISTS mapdata_area_groups_locationgroup_id_8cc32166_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area_groups DROP CONSTRAINT IF EXISTS mapdata_area_groups_area_id_68ea7b48_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area DROP CONSTRAINT IF EXISTS mapdata_area_access_restriction_i_a549eda1_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_altitudemarker DROP CONSTRAINT IF EXISTS mapdata_altitudemark_space_id_cea7cf47_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.mapdata_altitudemarker DROP CONSTRAINT IF EXISTS mapdata_altitudemark_groundaltitude_id_13c52aa1_fk_mapdata_g;
+ALTER TABLE IF EXISTS ONLY public.mapdata_altitudearea DROP CONSTRAINT IF EXISTS mapdata_altitudearea_level_id_b1320e34_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestriction_groups DROP CONSTRAINT IF EXISTS mapdata_accessrestri_accessrestrictiongro_fcb1eea5_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestriction_groups DROP CONSTRAINT IF EXISTS mapdata_accessrestri_accessrestriction_id_c6318580_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermission_user_id_0160fe04_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermission_author_id_f42ef447_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermis_token_id_e3647d7b_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermis_sso_grant_id_425b2515_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissiontoken DROP CONSTRAINT IF EXISTS mapdata_accesspermis_author_id_4ae5d792_fk_auth_user;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissionssogrant DROP CONSTRAINT IF EXISTS mapdata_accesspermis_access_restriction_i_d94eb926_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermis_access_restriction_i_6cf436d8_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissionssogrant DROP CONSTRAINT IF EXISTS mapdata_accesspermis_access_restriction_g_960b8494_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermis_access_restriction_g_194c451d_fk_mapdata_a;
+ALTER TABLE IF EXISTS ONLY public.editor_changesetupdate DROP CONSTRAINT IF EXISTS editor_changesetupdate_user_id_cd2202c2_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.editor_changesetupdate DROP CONSTRAINT IF EXISTS editor_changesetupdate_assigned_to_id_373deb2a_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.editor_changesetupdate DROP CONSTRAINT IF EXISTS editor_changesetupda_changeset_id_aedbc5fb_fk_editor_ch;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_map_update_id_aaecae3b_fk_mapdata_mapupdate_id;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_last_update_id_e0d77297_fk_editor_ch;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_last_state_update_id_292a8530_fk_editor_ch;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_last_cleaned_with_id_d5214743_fk_mapdata_m;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_last_change_id_5be51ccf_fk_editor_ch;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_author_id_f4bf3c7f_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_assigned_to_id_3afcfbb7_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.editor_changedobject DROP CONSTRAINT IF EXISTS editor_changedobject_content_type_id_aa981231_fk_django_co;
+ALTER TABLE IF EXISTS ONLY public.editor_changedobject DROP CONSTRAINT IF EXISTS editor_changedobject_changeset_id_0692bc40_fk_editor_ch;
+ALTER TABLE IF EXISTS ONLY public.django_admin_log DROP CONSTRAINT IF EXISTS django_admin_log_user_id_c564eba6_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.django_admin_log DROP CONSTRAINT IF EXISTS django_admin_log_content_type_id_c4bce8eb_fk_django_co;
+ALTER TABLE IF EXISTS ONLY public.control_userspaceaccess DROP CONSTRAINT IF EXISTS control_userspaceaccess_user_id_4ad6da16_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.control_userspaceaccess DROP CONSTRAINT IF EXISTS control_userspaceacc_space_id_c22914b2_fk_mapdata_s;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions DROP CONSTRAINT IF EXISTS control_userpermissions_user_id_6003ff4e_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions_review_group_reports DROP CONSTRAINT IF EXISTS control_userpermissi_userpermissions_id_3d2fb35b_fk_control_u;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions_review_group_reports DROP CONSTRAINT IF EXISTS control_userpermissi_locationgroup_id_96a3102b_fk_mapdata_l;
+ALTER TABLE IF EXISTS ONLY public.auth_user_user_permissions DROP CONSTRAINT IF EXISTS auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.auth_user_user_permissions DROP CONSTRAINT IF EXISTS auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm;
+ALTER TABLE IF EXISTS ONLY public.auth_user_groups DROP CONSTRAINT IF EXISTS auth_user_groups_user_id_6a12ed8b_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.auth_user_groups DROP CONSTRAINT IF EXISTS auth_user_groups_group_id_97559544_fk_auth_group_id;
+ALTER TABLE IF EXISTS ONLY public.auth_permission DROP CONSTRAINT IF EXISTS auth_permission_content_type_id_2f476e4b_fk_django_co;
+ALTER TABLE IF EXISTS ONLY public.auth_group_permissions DROP CONSTRAINT IF EXISTS auth_group_permissions_group_id_b120cbf9_fk_auth_group_id;
+ALTER TABLE IF EXISTS ONLY public.auth_group_permissions DROP CONSTRAINT IF EXISTS auth_group_permissio_permission_id_84c5c92e_fk_auth_perm;
+ALTER TABLE IF EXISTS ONLY public.api_logintoken DROP CONSTRAINT IF EXISTS api_token_user_id_b646d2e7_fk_auth_user_id;
+ALTER TABLE IF EXISTS ONLY public.api_secret DROP CONSTRAINT IF EXISTS api_secret_user_id_74e5b7a6_fk_auth_user_id;
+DROP INDEX IF EXISTS public.site_announcement_author_id_136858c5;
+DROP INDEX IF EXISTS public.only_one_active_uplink;
+DROP INDEX IF EXISTS public.only_one_active_ota;
+DROP INDEX IF EXISTS public.mesh_otaupdaterecipient_update_id_95637e8a;
+DROP INDEX IF EXISTS public.mesh_otaupdaterecipient_node_id_0fd5e307_like;
+DROP INDEX IF EXISTS public.mesh_otaupdaterecipient_node_id_0fd5e307;
+DROP INDEX IF EXISTS public.mesh_otaupdate_build_id_af114c77;
+DROP INDEX IF EXISTS public.mesh_nodemessage_uplink_id_22f38887;
+DROP INDEX IF EXISTS public.mesh_nodemessage_src_node_id_2754ac40_like;
+DROP INDEX IF EXISTS public.mesh_nodemessage_src_node_id_2754ac40;
+DROP INDEX IF EXISTS public.mesh_nodemessage_message_type_17e37336_like;
+DROP INDEX IF EXISTS public.mesh_nodemessage_message_type_17e37336;
+DROP INDEX IF EXISTS public.mesh_nodemessage_datetime_5b8e7dce;
+DROP INDEX IF EXISTS public.mesh_meshuplink_node_id_e0c94b45_like;
+DROP INDEX IF EXISTS public.mesh_meshuplink_node_id_e0c94b45;
+DROP INDEX IF EXISTS public.mesh_meshnode_upstream_id_c946622a_like;
+DROP INDEX IF EXISTS public.mesh_meshnode_upstream_id_c946622a;
+DROP INDEX IF EXISTS public.mesh_meshnode_uplink_id_cf6b04db;
+DROP INDEX IF EXISTS public.mesh_meshnode_address_bbb2a884_like;
+DROP INDEX IF EXISTS public.mesh_firmwareversion_version_5d057b34_like;
+DROP INDEX IF EXISTS public.mesh_firmwareversion_uploader_id_30c14fe3;
+DROP INDEX IF EXISTS public.mesh_firmwarebuildboard_build_id_902517a9;
+DROP INDEX IF EXISTS public.mesh_firmwarebuildboard_board_711484ba_like;
+DROP INDEX IF EXISTS public.mesh_firmwarebuildboard_board_711484ba;
+DROP INDEX IF EXISTS public.mesh_firmwarebuild_version_id_93e4b318;
+DROP INDEX IF EXISTS public.mesh_firmwarebuild_sha256_hash_627d7144_like;
+DROP INDEX IF EXISTS public.mesh_firmwarebuild_chip_f56e2ddf;
+DROP INDEX IF EXISTS public.mapdata_wifimeasurement_space_id_1d127e47;
+DROP INDEX IF EXISTS public.mapdata_wifimeasurement_author_id_e4b5352e;
+DROP INDEX IF EXISTS public.mapdata_themeobstaclegroupbackgroundcolor_theme_id_629c5bc7;
+DROP INDEX IF EXISTS public.mapdata_themeobstaclegroup_obstacle_group_id_6a51b028;
+DROP INDEX IF EXISTS public.mapdata_themelocationgroupbackgroundcolor_theme_id_9baff4da;
+DROP INDEX IF EXISTS public.mapdata_themelocationgroup_location_group_id_2b664e23;
+DROP INDEX IF EXISTS public.mapdata_stair_space_id_6dd3ccb0;
+DROP INDEX IF EXISTS public.mapdata_space_level_id_b635bbeb;
+DROP INDEX IF EXISTS public.mapdata_space_label_settings_id_b26b4945;
+DROP INDEX IF EXISTS public.mapdata_space_groups_space_id_d9bb3827;
+DROP INDEX IF EXISTS public.mapdata_space_groups_locationgroup_id_352f0e89;
+DROP INDEX IF EXISTS public.mapdata_space_access_restriction_id_c295dd70;
+DROP INDEX IF EXISTS public.mapdata_source_name_626b3547_like;
+DROP INDEX IF EXISTS public.mapdata_source_access_restriction_id_10e0a307;
+DROP INDEX IF EXISTS public.mapdata_reportupdate_report_id_ac2b4e37;
+DROP INDEX IF EXISTS public.mapdata_reportupdate_author_id_b0e6e04b;
+DROP INDEX IF EXISTS public.mapdata_reportupdate_assigned_to_id_7af867b4;
+DROP INDEX IF EXISTS public.mapdata_report_location_id_a1b9eef3;
+DROP INDEX IF EXISTS public.mapdata_report_created_groups_report_id_e8da1176;
+DROP INDEX IF EXISTS public.mapdata_report_created_groups_locationgroup_id_07a66aea;
+DROP INDEX IF EXISTS public.mapdata_report_category_b3157148_like;
+DROP INDEX IF EXISTS public.mapdata_report_category_b3157148;
+DROP INDEX IF EXISTS public.mapdata_report_author_id_1dd5fc14;
+DROP INDEX IF EXISTS public.mapdata_report_assigned_to_id_fd3a8aab;
+DROP INDEX IF EXISTS public.mapdata_rangingbeacon_uwb_address_9d8771d7_like;
+DROP INDEX IF EXISTS public.mapdata_rangingbeacon_space_id_2c6b1efe;
+DROP INDEX IF EXISTS public.mapdata_rangingbeacon_bssid_e2cf3255_like;
+DROP INDEX IF EXISTS public.mapdata_rangingbeacon_bluetooth_address_20e06b93_like;
+DROP INDEX IF EXISTS public.mapdata_ramp_space_id_e6f57e61;
+DROP INDEX IF EXISTS public.mapdata_position_secret_fef1b916_like;
+DROP INDEX IF EXISTS public.mapdata_position_owner_id_8ad6b67c;
+DROP INDEX IF EXISTS public.mapdata_poi_space_id_dcb9f571;
+DROP INDEX IF EXISTS public.mapdata_poi_label_settings_id_18a6c1cf;
+DROP INDEX IF EXISTS public.mapdata_poi_groups_poi_id_a7128a8c;
+DROP INDEX IF EXISTS public.mapdata_poi_groups_locationgroup_id_46758a1e;
+DROP INDEX IF EXISTS public.mapdata_poi_access_restriction_id_a6d0faf9;
+DROP INDEX IF EXISTS public.mapdata_obstacle_space_id_0aa1260c;
+DROP INDEX IF EXISTS public.mapdata_obstacle_group_id_a59d9b9b;
+DROP INDEX IF EXISTS public.mapdata_mapupdate_user_id_faec6f5a;
+DROP INDEX IF EXISTS public.mapdata_mapupdate_datetime_750ec913;
+DROP INDEX IF EXISTS public.mapdata_locationslug_slug_1c195013_like;
+DROP INDEX IF EXISTS public.mapdata_locationredirect_target_id_29d1b3d7;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_priority_a21c67cd;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_name_5b0451cf_like;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_allow_spaces_1085c8dd;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_allow_pois_4efc5134;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_allow_levels_fcf0f4ee;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_allow_dynamic_locations_ced914d1;
+DROP INDEX IF EXISTS public.mapdata_locationgroupcategory_allow_areas_68afeb0a;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_priority_44e13f62;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_label_settings_id_bc60e3cf;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_hub_import_type_4926843d_like;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_hierarchy_accf714c;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_category_id_96775229;
+DROP INDEX IF EXISTS public.mapdata_locationgroup_access_restriction_id_0f7d4828;
+DROP INDEX IF EXISTS public.mapdata_lineobstacle_space_id_b9ab6bf6;
+DROP INDEX IF EXISTS public.mapdata_lineobstacle_group_id_62d35458;
+DROP INDEX IF EXISTS public.mapdata_level_short_label_4b45d051_like;
+DROP INDEX IF EXISTS public.mapdata_level_on_top_of_id_10a0cb32;
+DROP INDEX IF EXISTS public.mapdata_level_label_settings_id_6617bb7b;
+DROP INDEX IF EXISTS public.mapdata_level_groups_locationgroup_id_b712e10d;
+DROP INDEX IF EXISTS public.mapdata_level_groups_level_id_e60fa7db;
+DROP INDEX IF EXISTS public.mapdata_level_access_restriction_id_22d67a77;
+DROP INDEX IF EXISTS public.mapdata_leavedescription_target_space_id_31053028;
+DROP INDEX IF EXISTS public.mapdata_leavedescription_space_id_33695534;
+DROP INDEX IF EXISTS public.mapdata_hole_space_id_20336b94;
+DROP INDEX IF EXISTS public.mapdata_groundaltitude_name_cf324830_like;
+DROP INDEX IF EXISTS public.mapdata_graphnode_space_id_6c55bd00;
+DROP INDEX IF EXISTS public.mapdata_graphedge_waytype_id_2f0d449d;
+DROP INDEX IF EXISTS public.mapdata_graphedge_to_node_id_ba97ebb9;
+DROP INDEX IF EXISTS public.mapdata_graphedge_from_node_id_98a76645;
+DROP INDEX IF EXISTS public.mapdata_graphedge_access_restriction_id_cccddf9b;
+DROP INDEX IF EXISTS public.mapdata_dynamiclocation_label_settings_id_3ae9d026;
+DROP INDEX IF EXISTS public.mapdata_dynamiclocation_groups_locationgroup_id_3212157f;
+DROP INDEX IF EXISTS public.mapdata_dynamiclocation_groups_dynamiclocation_id_e7af76aa;
+DROP INDEX IF EXISTS public.mapdata_dynamiclocation_access_restriction_id_aadb0fd6;
+DROP INDEX IF EXISTS public.mapdata_door_level_id_f6d894b2;
+DROP INDEX IF EXISTS public.mapdata_door_access_restriction_id_2bfd4081;
+DROP INDEX IF EXISTS public.mapdata_crossdescription_target_space_id_8f82991b;
+DROP INDEX IF EXISTS public.mapdata_crossdescription_space_id_5b117c2d;
+DROP INDEX IF EXISTS public.mapdata_crossdescription_origin_space_id_88f8ef46;
+DROP INDEX IF EXISTS public.mapdata_column_space_id_4f64c0d4;
+DROP INDEX IF EXISTS public.mapdata_column_access_restriction_id_e09dd08f;
+DROP INDEX IF EXISTS public.mapdata_building_level_id_0e322f7a;
+DROP INDEX IF EXISTS public.mapdata_area_space_id_c0461a4c;
+DROP INDEX IF EXISTS public.mapdata_area_label_settings_id_7ccf6168;
+DROP INDEX IF EXISTS public.mapdata_area_groups_locationgroup_id_8cc32166;
+DROP INDEX IF EXISTS public.mapdata_area_groups_area_id_68ea7b48;
+DROP INDEX IF EXISTS public.mapdata_area_access_restriction_id_a549eda1;
+DROP INDEX IF EXISTS public.mapdata_altitudemarker_space_id_cea7cf47;
+DROP INDEX IF EXISTS public.mapdata_altitudemarker_groundaltitude_id_13c52aa1;
+DROP INDEX IF EXISTS public.mapdata_altitudearea_level_id_b1320e34;
+DROP INDEX IF EXISTS public.mapdata_accessrestriction_groups_accessrestriction_id_c6318580;
+DROP INDEX IF EXISTS public.mapdata_accessrestriction__accessrestrictiongroup_id_fcb1eea5;
+DROP INDEX IF EXISTS public.mapdata_accesspermissiontoken_valid_until_beec34ec;
+DROP INDEX IF EXISTS public.mapdata_accesspermissiontoken_unlimited_2f438422;
+DROP INDEX IF EXISTS public.mapdata_accesspermissiontoken_redeemed_d5cc5d44;
+DROP INDEX IF EXISTS public.mapdata_accesspermissiontoken_can_grant_9d37516f;
+DROP INDEX IF EXISTS public.mapdata_accesspermissiontoken_author_id_4ae5d792;
+DROP INDEX IF EXISTS public.mapdata_accesspermissionssogrant_access_restriction_id_d94eb926;
+DROP INDEX IF EXISTS public.mapdata_accesspermissionss_access_restriction_group_i_960b8494;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_user_id_0160fe04;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_token_id_e3647d7b;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_sso_grant_id_425b2515;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_author_id_f42ef447;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_access_restriction_id_6cf436d8;
+DROP INDEX IF EXISTS public.mapdata_accesspermission_access_restriction_group_id_194c451d;
+DROP INDEX IF EXISTS public.editor_changesetupdate_user_id_cd2202c2;
+DROP INDEX IF EXISTS public.editor_changesetupdate_state_ed535412_like;
+DROP INDEX IF EXISTS public.editor_changesetupdate_state_ed535412;
+DROP INDEX IF EXISTS public.editor_changesetupdate_changeset_id_aedbc5fb;
+DROP INDEX IF EXISTS public.editor_changesetupdate_assigned_to_id_373deb2a;
+DROP INDEX IF EXISTS public.editor_changeset_state_5a7a590f_like;
+DROP INDEX IF EXISTS public.editor_changeset_state_5a7a590f;
+DROP INDEX IF EXISTS public.editor_changeset_last_update_id_e0d77297;
+DROP INDEX IF EXISTS public.editor_changeset_last_state_update_id_292a8530;
+DROP INDEX IF EXISTS public.editor_changeset_last_cleaned_with_id_d5214743;
+DROP INDEX IF EXISTS public.editor_changeset_last_change_id_5be51ccf;
+DROP INDEX IF EXISTS public.editor_changeset_author_id_f4bf3c7f;
+DROP INDEX IF EXISTS public.editor_changeset_assigned_to_id_3afcfbb7;
+DROP INDEX IF EXISTS public.editor_changedobject_content_type_id_aa981231;
+DROP INDEX IF EXISTS public.editor_changedobject_changeset_id_0692bc40;
+DROP INDEX IF EXISTS public.django_session_session_key_c0390e0f_like;
+DROP INDEX IF EXISTS public.django_session_expire_date_a5c62663;
+DROP INDEX IF EXISTS public.django_admin_log_user_id_c564eba6;
+DROP INDEX IF EXISTS public.django_admin_log_content_type_id_c4bce8eb;
+DROP INDEX IF EXISTS public.control_userspaceaccess_user_id_4ad6da16;
+DROP INDEX IF EXISTS public.control_userspaceaccess_space_id_c22914b2;
+DROP INDEX IF EXISTS public.control_userpermissions_re_userpermissions_id_3d2fb35b;
+DROP INDEX IF EXISTS public.control_userpermissions_re_locationgroup_id_96a3102b;
+DROP INDEX IF EXISTS public.auth_user_user_permissions_user_id_a95ead1b;
+DROP INDEX IF EXISTS public.auth_user_user_permissions_permission_id_1fbb5f2c;
+DROP INDEX IF EXISTS public.auth_user_groups_user_id_6a12ed8b;
+DROP INDEX IF EXISTS public.auth_user_groups_group_id_97559544;
+DROP INDEX IF EXISTS public.auth_permission_content_type_id_2f476e4b;
+DROP INDEX IF EXISTS public.auth_group_permissions_permission_id_84c5c92e;
+DROP INDEX IF EXISTS public.auth_group_permissions_group_id_b120cbf9;
+DROP INDEX IF EXISTS public.auth_group_name_a6ea08ec_like;
+DROP INDEX IF EXISTS public.api_token_user_id_b646d2e7;
+DROP INDEX IF EXISTS public.api_secret_user_id_74e5b7a6;
+DROP INDEX IF EXISTS public.api_secret_api_secret_e655122c_like;
+ALTER TABLE IF EXISTS ONLY public.site_siteupdate DROP CONSTRAINT IF EXISTS site_siteupdate_pkey;
+ALTER TABLE IF EXISTS ONLY public.site_announcement DROP CONSTRAINT IF EXISTS site_announcement_pkey;
+ALTER TABLE IF EXISTS ONLY public.routing_routeoptions DROP CONSTRAINT IF EXISTS routing_routeoptions_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_otaupdaterecipient DROP CONSTRAINT IF EXISTS mesh_otaupdaterecipient_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_otaupdate DROP CONSTRAINT IF EXISTS mesh_otaupdate_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_nodemessage DROP CONSTRAINT IF EXISTS mesh_nodemessage_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_meshuplink DROP CONSTRAINT IF EXISTS mesh_meshuplink_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_meshnode DROP CONSTRAINT IF EXISTS mesh_meshnode_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwareversion DROP CONSTRAINT IF EXISTS mesh_firmwareversion_version_key;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwareversion DROP CONSTRAINT IF EXISTS mesh_firmwareversion_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuildboard DROP CONSTRAINT IF EXISTS mesh_firmwarebuildboard_pkey;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuildboard DROP CONSTRAINT IF EXISTS mesh_firmwarebuildboard_build_id_board_e38ac95f_uniq;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuild DROP CONSTRAINT IF EXISTS mesh_firmwarebuild_version_id_variant_0930ed52_uniq;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuild DROP CONSTRAINT IF EXISTS mesh_firmwarebuild_sha256_hash_key;
+ALTER TABLE IF EXISTS ONLY public.mesh_firmwarebuild DROP CONSTRAINT IF EXISTS mesh_firmwarebuild_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_beaconmeasurement DROP CONSTRAINT IF EXISTS mapdata_wifimeasurement_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_waytype DROP CONSTRAINT IF EXISTS mapdata_waytype_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themeobstaclegroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themeobstaclegroupbackgroundcolor_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_themelocationgroupbackgroundcolor DROP CONSTRAINT IF EXISTS mapdata_themelocationgroupbackgroundcolor_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_theme DROP CONSTRAINT IF EXISTS mapdata_theme_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_stair DROP CONSTRAINT IF EXISTS mapdata_stair_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space DROP CONSTRAINT IF EXISTS mapdata_space_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space_groups DROP CONSTRAINT IF EXISTS mapdata_space_groups_space_id_locationgroup_id_170f4e14_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_space_groups DROP CONSTRAINT IF EXISTS mapdata_space_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_source DROP CONSTRAINT IF EXISTS mapdata_source_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_source DROP CONSTRAINT IF EXISTS mapdata_source_name_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_reportupdate DROP CONSTRAINT IF EXISTS mapdata_reportupdate_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report DROP CONSTRAINT IF EXISTS mapdata_report_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report_created_groups DROP CONSTRAINT IF EXISTS mapdata_report_created_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_report_created_groups DROP CONSTRAINT IF EXISTS mapdata_report_created_g_report_id_locationgroup__27469fb6_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeacon_uwb_address_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeacon_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeacon_node_number_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeacon_bssid_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_rangingbeacon DROP CONSTRAINT IF EXISTS mapdata_rangingbeacon_bluetooth_address_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_ramp DROP CONSTRAINT IF EXISTS mapdata_ramp_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_position DROP CONSTRAINT IF EXISTS mapdata_position_secret_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_position DROP CONSTRAINT IF EXISTS mapdata_position_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi DROP CONSTRAINT IF EXISTS mapdata_poi_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi_groups DROP CONSTRAINT IF EXISTS mapdata_poi_groups_poi_id_locationgroup_id_e97cd00b_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_poi_groups DROP CONSTRAINT IF EXISTS mapdata_poi_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_obstaclegroup DROP CONSTRAINT IF EXISTS mapdata_obstaclegroup_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_obstacle DROP CONSTRAINT IF EXISTS mapdata_obstacle_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_mapupdate DROP CONSTRAINT IF EXISTS mapdata_mapupdate_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationslug DROP CONSTRAINT IF EXISTS mapdata_locationslug_slug_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationslug DROP CONSTRAINT IF EXISTS mapdata_locationslug_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationredirect DROP CONSTRAINT IF EXISTS mapdata_locationredirect_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroupcategory DROP CONSTRAINT IF EXISTS mapdata_locationgroupcategory_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroupcategory DROP CONSTRAINT IF EXISTS mapdata_locationgroupcategory_name_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgroup_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_locationgroup DROP CONSTRAINT IF EXISTS mapdata_locationgroup_hub_import_type_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_lineobstacle DROP CONSTRAINT IF EXISTS mapdata_lineobstacle_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_short_label_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level_groups DROP CONSTRAINT IF EXISTS mapdata_level_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level_groups DROP CONSTRAINT IF EXISTS mapdata_level_groups_level_id_locationgroup_id_a6e17493_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_level DROP CONSTRAINT IF EXISTS mapdata_level_base_altitude_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_leavedescription DROP CONSTRAINT IF EXISTS mapdata_leavedescription_space_id_target_space_id_91b3fce3_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_leavedescription DROP CONSTRAINT IF EXISTS mapdata_leavedescription_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_labelsettings DROP CONSTRAINT IF EXISTS mapdata_labelsettings_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_hole DROP CONSTRAINT IF EXISTS mapdata_hole_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_groundaltitude DROP CONSTRAINT IF EXISTS mapdata_groundaltitude_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_groundaltitude DROP CONSTRAINT IF EXISTS mapdata_groundaltitude_name_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphnode DROP CONSTRAINT IF EXISTS mapdata_graphnode_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_graphedge DROP CONSTRAINT IF EXISTS mapdata_graphedge_from_node_id_to_node_id_69dfc18a_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation DROP CONSTRAINT IF EXISTS mapdata_dynamiclocation_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation_groups DROP CONSTRAINT IF EXISTS mapdata_dynamiclocation_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_dynamiclocation_groups DROP CONSTRAINT IF EXISTS mapdata_dynamiclocation__dynamiclocation_id_locat_d1a2f283_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_door DROP CONSTRAINT IF EXISTS mapdata_door_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_crossdescription DROP CONSTRAINT IF EXISTS mapdata_crossdescription_space_id_origin_space_id_0efa52a4_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_crossdescription DROP CONSTRAINT IF EXISTS mapdata_crossdescription_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_column DROP CONSTRAINT IF EXISTS mapdata_column_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_building DROP CONSTRAINT IF EXISTS mapdata_building_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area DROP CONSTRAINT IF EXISTS mapdata_area_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area_groups DROP CONSTRAINT IF EXISTS mapdata_area_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_area_groups DROP CONSTRAINT IF EXISTS mapdata_area_groups_area_id_locationgroup_id_573c1a07_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_altitudemarker DROP CONSTRAINT IF EXISTS mapdata_altitudemarker_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_altitudearea DROP CONSTRAINT IF EXISTS mapdata_altitudearea_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestrictiongroup DROP CONSTRAINT IF EXISTS mapdata_accessrestrictiongroup_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestriction DROP CONSTRAINT IF EXISTS mapdata_accessrestriction_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestriction_groups DROP CONSTRAINT IF EXISTS mapdata_accessrestriction_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accessrestriction_groups DROP CONSTRAINT IF EXISTS mapdata_accessrestrictio_accessrestriction_id_acc_1dbcda69_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissiontoken DROP CONSTRAINT IF EXISTS mapdata_accesspermissiontoken_token_key;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissiontoken DROP CONSTRAINT IF EXISTS mapdata_accesspermissiontoken_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissionssogrant DROP CONSTRAINT IF EXISTS mapdata_accesspermissionssogrant_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermissionssogrant DROP CONSTRAINT IF EXISTS mapdata_accesspermission_provider_group_access_re_bf15c068_uniq;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermission_pkey;
+ALTER TABLE IF EXISTS ONLY public.mapdata_accesspermission DROP CONSTRAINT IF EXISTS mapdata_accesspermission_author_id_unique_key_0644d161_uniq;
+ALTER TABLE IF EXISTS ONLY public.editor_changesetupdate DROP CONSTRAINT IF EXISTS editor_changesetupdate_pkey;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_pkey;
+ALTER TABLE IF EXISTS ONLY public.editor_changeset DROP CONSTRAINT IF EXISTS editor_changeset_map_update_id_key;
+ALTER TABLE IF EXISTS ONLY public.editor_changedobject DROP CONSTRAINT IF EXISTS editor_changedobject_pkey;
+ALTER TABLE IF EXISTS ONLY public.editor_changedobject DROP CONSTRAINT IF EXISTS editor_changedobject_changeset_id_content_typ_30a7cdb1_uniq;
+ALTER TABLE IF EXISTS ONLY public.django_session DROP CONSTRAINT IF EXISTS django_session_pkey;
+ALTER TABLE IF EXISTS ONLY public.django_migrations DROP CONSTRAINT IF EXISTS django_migrations_pkey;
+ALTER TABLE IF EXISTS ONLY public.django_content_type DROP CONSTRAINT IF EXISTS django_content_type_pkey;
+ALTER TABLE IF EXISTS ONLY public.django_content_type DROP CONSTRAINT IF EXISTS django_content_type_app_label_model_76bd3d3b_uniq;
+ALTER TABLE IF EXISTS ONLY public.django_admin_log DROP CONSTRAINT IF EXISTS django_admin_log_pkey;
+ALTER TABLE IF EXISTS ONLY public.control_userspaceaccess DROP CONSTRAINT IF EXISTS control_userspaceaccess_user_id_space_id_224c3409_uniq;
+ALTER TABLE IF EXISTS ONLY public.control_userspaceaccess DROP CONSTRAINT IF EXISTS control_userspaceaccess_pkey;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions_review_group_reports DROP CONSTRAINT IF EXISTS control_userpermissions_review_group_reports_pkey;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions DROP CONSTRAINT IF EXISTS control_userpermissions_pkey;
+ALTER TABLE IF EXISTS ONLY public.control_userpermissions_review_group_reports DROP CONSTRAINT IF EXISTS control_userpermissions__userpermissions_id_locat_17cbbd3d_uniq;
+ALTER TABLE IF EXISTS ONLY public.auth_user_user_permissions DROP CONSTRAINT IF EXISTS auth_user_user_permissions_user_id_permission_id_14a6b632_uniq;
+ALTER TABLE IF EXISTS ONLY public.auth_user_user_permissions DROP CONSTRAINT IF EXISTS auth_user_user_permissions_pkey;
+ALTER TABLE IF EXISTS ONLY public.auth_user_groups DROP CONSTRAINT IF EXISTS auth_user_groups_user_id_group_id_94350c0c_uniq;
+ALTER TABLE IF EXISTS ONLY public.auth_user_groups DROP CONSTRAINT IF EXISTS auth_user_groups_pkey;
+ALTER TABLE IF EXISTS ONLY public.auth_permission DROP CONSTRAINT IF EXISTS auth_permission_pkey;
+ALTER TABLE IF EXISTS ONLY public.auth_permission DROP CONSTRAINT IF EXISTS auth_permission_content_type_id_codename_01ab375a_uniq;
+ALTER TABLE IF EXISTS ONLY public.auth_group DROP CONSTRAINT IF EXISTS auth_group_pkey;
+ALTER TABLE IF EXISTS ONLY public.auth_group_permissions DROP CONSTRAINT IF EXISTS auth_group_permissions_pkey;
+ALTER TABLE IF EXISTS ONLY public.auth_group_permissions DROP CONSTRAINT IF EXISTS auth_group_permissions_group_id_permission_id_0cd325b0_uniq;
+ALTER TABLE IF EXISTS ONLY public.auth_group DROP CONSTRAINT IF EXISTS auth_group_name_key;
+ALTER TABLE IF EXISTS ONLY public.api_logintoken DROP CONSTRAINT IF EXISTS api_token_pkey;
+ALTER TABLE IF EXISTS ONLY public.api_secret DROP CONSTRAINT IF EXISTS api_secret_user_id_name_21b4a70e_uniq;
+ALTER TABLE IF EXISTS ONLY public.api_secret DROP CONSTRAINT IF EXISTS api_secret_pkey;
+ALTER TABLE IF EXISTS ONLY public.api_secret DROP CONSTRAINT IF EXISTS api_secret_api_secret_key;
+DROP TABLE IF EXISTS public.site_siteupdate;
+DROP TABLE IF EXISTS public.site_announcement;
+DROP TABLE IF EXISTS public.routing_routeoptions;
+DROP TABLE IF EXISTS public.mesh_otaupdaterecipient;
+DROP TABLE IF EXISTS public.mesh_otaupdate;
+DROP TABLE IF EXISTS public.mesh_nodemessage;
+DROP TABLE IF EXISTS public.mesh_meshuplink;
+DROP TABLE IF EXISTS public.mesh_meshnode;
+DROP TABLE IF EXISTS public.mesh_firmwareversion;
+DROP TABLE IF EXISTS public.mesh_firmwarebuildboard;
+DROP TABLE IF EXISTS public.mesh_firmwarebuild;
+DROP TABLE IF EXISTS public.mapdata_waytype;
+DROP TABLE IF EXISTS public.mapdata_themeobstaclegroupbackgroundcolor;
+DROP TABLE IF EXISTS public.mapdata_themelocationgroupbackgroundcolor;
+DROP TABLE IF EXISTS public.mapdata_theme;
+DROP TABLE IF EXISTS public.mapdata_stair;
+DROP TABLE IF EXISTS public.mapdata_space_groups;
+DROP TABLE IF EXISTS public.mapdata_space;
+DROP TABLE IF EXISTS public.mapdata_source;
+DROP TABLE IF EXISTS public.mapdata_reportupdate;
+DROP TABLE IF EXISTS public.mapdata_report_created_groups;
+DROP TABLE IF EXISTS public.mapdata_report;
+DROP TABLE IF EXISTS public.mapdata_rangingbeacon;
+DROP TABLE IF EXISTS public.mapdata_ramp;
+DROP TABLE IF EXISTS public.mapdata_position;
+DROP TABLE IF EXISTS public.mapdata_poi_groups;
+DROP TABLE IF EXISTS public.mapdata_poi;
+DROP TABLE IF EXISTS public.mapdata_obstaclegroup;
+DROP TABLE IF EXISTS public.mapdata_obstacle;
+DROP TABLE IF EXISTS public.mapdata_mapupdate;
+DROP TABLE IF EXISTS public.mapdata_locationslug;
+DROP TABLE IF EXISTS public.mapdata_locationredirect;
+DROP TABLE IF EXISTS public.mapdata_locationgroupcategory;
+DROP TABLE IF EXISTS public.mapdata_locationgroup;
+DROP TABLE IF EXISTS public.mapdata_lineobstacle;
+DROP TABLE IF EXISTS public.mapdata_level_groups;
+DROP TABLE IF EXISTS public.mapdata_level;
+DROP TABLE IF EXISTS public.mapdata_leavedescription;
+DROP TABLE IF EXISTS public.mapdata_labelsettings;
+DROP TABLE IF EXISTS public.mapdata_hole;
+DROP TABLE IF EXISTS public.mapdata_groundaltitude;
+DROP TABLE IF EXISTS public.mapdata_graphnode;
+DROP TABLE IF EXISTS public.mapdata_graphedge;
+DROP TABLE IF EXISTS public.mapdata_dynamiclocation_groups;
+DROP TABLE IF EXISTS public.mapdata_dynamiclocation;
+DROP TABLE IF EXISTS public.mapdata_door;
+DROP TABLE IF EXISTS public.mapdata_crossdescription;
+DROP TABLE IF EXISTS public.mapdata_column;
+DROP TABLE IF EXISTS public.mapdata_building;
+DROP TABLE IF EXISTS public.mapdata_beaconmeasurement;
+DROP TABLE IF EXISTS public.mapdata_area_groups;
+DROP TABLE IF EXISTS public.mapdata_area;
+DROP TABLE IF EXISTS public.mapdata_altitudemarker;
+DROP TABLE IF EXISTS public.mapdata_altitudearea;
+DROP TABLE IF EXISTS public.mapdata_accessrestrictiongroup;
+DROP TABLE IF EXISTS public.mapdata_accessrestriction_groups;
+DROP TABLE IF EXISTS public.mapdata_accessrestriction;
+DROP TABLE IF EXISTS public.mapdata_accesspermissiontoken;
+DROP TABLE IF EXISTS public.mapdata_accesspermissionssogrant;
+DROP TABLE IF EXISTS public.mapdata_accesspermission;
+DROP TABLE IF EXISTS public.editor_changesetupdate;
+DROP TABLE IF EXISTS public.editor_changeset;
+DROP TABLE IF EXISTS public.editor_changedobject;
+DROP TABLE IF EXISTS public.django_session;
+DROP TABLE IF EXISTS public.django_migrations;
+DROP TABLE IF EXISTS public.django_content_type;
+DROP TABLE IF EXISTS public.django_admin_log;
+DROP TABLE IF EXISTS public.control_userspaceaccess;
+DROP TABLE IF EXISTS public.control_userpermissions_review_group_reports;
+DROP TABLE IF EXISTS public.control_userpermissions;
+DROP TABLE IF EXISTS public.auth_user_user_permissions;
+DROP TABLE IF EXISTS public.auth_user_groups;
+DROP TABLE IF EXISTS public.auth_permission;
+DROP TABLE IF EXISTS public.auth_group_permissions;
+DROP TABLE IF EXISTS public.auth_group;
+DROP TABLE IF EXISTS public.api_secret;
+DROP TABLE IF EXISTS public.api_logintoken;
+
+SET default_tablespace = '';
+
+SET default_table_access_method = heap;
+
+--
+-- Name: api_logintoken; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.api_logintoken (
+ id integer NOT NULL,
+ secret character varying(64) NOT NULL,
+ session_auth_hash character varying(128) NOT NULL,
+ user_id integer NOT NULL
+);
+
+
+--
+-- Name: api_secret; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.api_secret (
+ id integer NOT NULL,
+ name character varying(32) NOT NULL,
+ created timestamp with time zone NOT NULL,
+ api_secret character varying(64) NOT NULL,
+ readonly boolean NOT NULL,
+ scope_grant_permissions boolean NOT NULL,
+ scope_editor boolean NOT NULL,
+ scope_mesh boolean NOT NULL,
+ valid_until timestamp with time zone,
+ user_id integer NOT NULL
+);
+
+
+--
+-- Name: api_secret_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.api_secret ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.api_secret_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: api_token_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.api_logintoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.api_token_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_group; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.auth_group (
+ id integer NOT NULL,
+ name character varying(150) NOT NULL
+);
+
+
+--
+-- Name: auth_group_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.auth_group ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_group_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_group_permissions; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.auth_group_permissions (
+ id integer NOT NULL,
+ group_id integer NOT NULL,
+ permission_id integer NOT NULL
+);
+
+
+--
+-- Name: auth_group_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.auth_group_permissions ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_group_permissions_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_permission; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.auth_permission (
+ id integer NOT NULL,
+ name character varying(255) NOT NULL,
+ content_type_id integer NOT NULL,
+ codename character varying(100) NOT NULL
+);
+
+
+--
+-- Name: auth_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.auth_permission ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_permission_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_user_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.auth_user_groups (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ group_id integer NOT NULL
+);
+
+
+--
+-- Name: auth_user_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.auth_user_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_user_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: auth_user_user_permissions; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.auth_user_user_permissions (
+ id integer NOT NULL,
+ user_id integer NOT NULL,
+ permission_id integer NOT NULL
+);
+
+
+--
+-- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.auth_user_user_permissions ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.auth_user_user_permissions_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: control_userpermissions; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.control_userpermissions (
+ user_id integer NOT NULL,
+ review_changesets boolean NOT NULL,
+ direct_edit boolean NOT NULL,
+ control_panel boolean NOT NULL,
+ grant_permissions boolean NOT NULL,
+ manage_announcements boolean NOT NULL,
+ grant_all_access boolean NOT NULL,
+ max_changeset_changes smallint NOT NULL,
+ base_mapdata_access boolean NOT NULL,
+ editor_access boolean NOT NULL,
+ grant_space_access boolean NOT NULL,
+ manage_map_updates boolean NOT NULL,
+ review_all_reports boolean NOT NULL,
+ mesh_control boolean NOT NULL,
+ grant_unlimited_access boolean NOT NULL,
+ nonpublic_themes boolean NOT NULL,
+ sources_access boolean NOT NULL,
+ CONSTRAINT control_userpermissions_max_changeset_changes_check CHECK ((max_changeset_changes >= 0))
+);
+
+
+--
+-- Name: control_userpermissions_review_group_reports; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.control_userpermissions_review_group_reports (
+ id integer NOT NULL,
+ userpermissions_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: control_userpermissions_review_group_reports_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.control_userpermissions_review_group_reports ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.control_userpermissions_review_group_reports_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: control_userspaceaccess; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.control_userspaceaccess (
+ id integer NOT NULL,
+ can_edit boolean NOT NULL,
+ space_id integer NOT NULL,
+ user_id integer NOT NULL
+);
+
+
+--
+-- Name: control_userspaceaccess_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.control_userspaceaccess ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.control_userspaceaccess_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: django_admin_log; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.django_admin_log (
+ id integer NOT NULL,
+ action_time timestamp with time zone NOT NULL,
+ object_id text,
+ object_repr character varying(200) NOT NULL,
+ action_flag smallint NOT NULL,
+ change_message text NOT NULL,
+ content_type_id integer,
+ user_id integer NOT NULL,
+ CONSTRAINT django_admin_log_action_flag_check CHECK ((action_flag >= 0))
+);
+
+
+--
+-- Name: django_admin_log_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.django_admin_log ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.django_admin_log_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: django_content_type; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.django_content_type (
+ id integer NOT NULL,
+ app_label character varying(100) NOT NULL,
+ model character varying(100) NOT NULL
+);
+
+
+--
+-- Name: django_content_type_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.django_content_type ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.django_content_type_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: django_migrations; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.django_migrations (
+ id integer NOT NULL,
+ app character varying(255) NOT NULL,
+ name character varying(255) NOT NULL,
+ applied timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: django_migrations_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.django_migrations ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.django_migrations_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: django_session; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.django_session (
+ session_key character varying(40) NOT NULL,
+ session_data text NOT NULL,
+ expire_date timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: editor_changedobject; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.editor_changedobject (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL,
+ existing_object_pk integer,
+ updated_fields jsonb NOT NULL,
+ m2m_added jsonb NOT NULL,
+ m2m_removed jsonb NOT NULL,
+ deleted boolean NOT NULL,
+ changeset_id integer NOT NULL,
+ content_type_id integer NOT NULL,
+ CONSTRAINT editor_changedobject_existing_object_pk_check CHECK ((existing_object_pk >= 0))
+);
+
+
+--
+-- Name: editor_changedobject_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.editor_changedobject ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.editor_changedobject_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: editor_changeset; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.editor_changeset (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL,
+ state character varying(20) NOT NULL,
+ title character varying(100) NOT NULL,
+ description text NOT NULL,
+ assigned_to_id integer,
+ author_id integer,
+ last_change_id integer,
+ last_cleaned_with_id integer,
+ last_state_update_id integer,
+ last_update_id integer,
+ map_update_id integer
+);
+
+
+--
+-- Name: editor_changeset_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.editor_changeset ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.editor_changeset_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: editor_changesetupdate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.editor_changesetupdate (
+ id integer NOT NULL,
+ datetime timestamp with time zone NOT NULL,
+ comment text,
+ state character varying(20) NOT NULL,
+ title character varying(100),
+ description text,
+ objects_changed boolean NOT NULL,
+ assigned_to_id integer,
+ changeset_id integer NOT NULL,
+ user_id integer
+);
+
+
+--
+-- Name: editor_changesetupdate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.editor_changesetupdate ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.editor_changesetupdate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accesspermission; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accesspermission (
+ id integer NOT NULL,
+ expire_date timestamp with time zone,
+ can_grant boolean NOT NULL,
+ unique_key character varying(32),
+ access_restriction_id integer,
+ author_id integer,
+ token_id integer,
+ user_id integer,
+ access_restriction_group_id integer,
+ session_token uuid,
+ sso_grant_id integer,
+ CONSTRAINT permission_needs_restriction_or_restriction_group CHECK (((NOT ((access_restriction_id IS NULL) AND (access_restriction_group_id IS NULL))) AND (NOT ((access_restriction_id IS NOT NULL) AND (access_restriction_group_id IS NOT NULL))))),
+ CONSTRAINT permission_needs_user_or_session CHECK (((NOT ((session_token IS NULL) AND (user_id IS NULL))) AND (NOT ((session_token IS NOT NULL) AND (user_id IS NOT NULL)))))
+);
+
+
+--
+-- Name: mapdata_accesspermission_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accesspermission ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accesspermission_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accesspermissionssogrant (
+ id integer NOT NULL,
+ provider character varying(32) NOT NULL,
+ "group" character varying(64) NOT NULL,
+ access_restriction_id integer,
+ access_restriction_group_id integer,
+ CONSTRAINT sso_permission_grant_needs_restriction_or_restriction_group CHECK (((NOT ((access_restriction_id IS NULL) AND (access_restriction_group_id IS NULL))) AND (NOT ((access_restriction_id IS NOT NULL) AND (access_restriction_group_id IS NOT NULL)))))
+);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accesspermissionssogrant ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accesspermissionssogrant_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accesspermissiontoken; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accesspermissiontoken (
+ id integer NOT NULL,
+ token uuid NOT NULL,
+ valid_until timestamp with time zone NOT NULL,
+ unlimited boolean NOT NULL,
+ redeemed boolean NOT NULL,
+ can_grant boolean NOT NULL,
+ unique_key character varying(32),
+ data bytea NOT NULL,
+ author_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accesspermissiontoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accesspermissiontoken_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accessrestriction; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accessrestriction (
+ id integer NOT NULL,
+ titles jsonb NOT NULL,
+ public boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_accessrestriction_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accessrestriction_groups (
+ id integer NOT NULL,
+ accessrestriction_id integer NOT NULL,
+ accessrestrictiongroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_accessrestriction_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accessrestriction_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accessrestriction_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accessrestriction_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accessrestriction ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accessrestriction_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_accessrestrictiongroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_accessrestrictiongroup (
+ id integer NOT NULL,
+ titles jsonb NOT NULL
+);
+
+
+--
+-- Name: mapdata_accessrestrictiongroup_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_accessrestrictiongroup ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_accessrestrictiongroup_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_altitudearea; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_altitudearea (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ altitude numeric(6,2),
+ level_id integer NOT NULL,
+ import_tag character varying(64),
+ points jsonb
+);
+
+
+--
+-- Name: mapdata_altitudearea_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_altitudearea ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_altitudearea_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_altitudemarker; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_altitudemarker (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64),
+ groundaltitude_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_altitudemarker_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_altitudemarker ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_altitudemarker_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_area; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_area (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ geometry jsonb NOT NULL,
+ slow_down_factor numeric(6,2) NOT NULL,
+ access_restriction_id integer,
+ space_id integer NOT NULL,
+ import_tag character varying(64),
+ icon character varying(32),
+ label_overrides jsonb NOT NULL,
+ label_settings_id integer,
+ main_point jsonb,
+ external_url character varying(200),
+ import_block_data boolean NOT NULL,
+ import_block_geom boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_area_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_area_groups (
+ id integer NOT NULL,
+ area_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_area_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_area_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_area_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_beaconmeasurement; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_beaconmeasurement (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ comment text,
+ data jsonb NOT NULL,
+ author_id integer,
+ space_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_building; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_building (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ level_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_building_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_building ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_building_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_column; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_column (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ access_restriction_id integer,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_column_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_column ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_column_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_crossdescription; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_crossdescription (
+ id integer NOT NULL,
+ description_i18n jsonb NOT NULL,
+ origin_space_id integer NOT NULL,
+ space_id integer NOT NULL,
+ target_space_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_crossdescription_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_crossdescription ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_crossdescription_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_door; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_door (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ access_restriction_id integer,
+ level_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_door_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_door ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_door_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_dynamiclocation; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_dynamiclocation (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ icon character varying(32),
+ label_overrides jsonb NOT NULL,
+ position_secret character varying(32),
+ access_restriction_id integer,
+ label_settings_id integer,
+ external_url character varying(200),
+ import_block_data boolean NOT NULL,
+ import_block_geom boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_dynamiclocation_groups (
+ id integer NOT NULL,
+ dynamiclocation_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_dynamiclocation_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_dynamiclocation_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_graphedge; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_graphedge (
+ id integer NOT NULL,
+ access_restriction_id integer,
+ from_node_id integer NOT NULL,
+ to_node_id integer NOT NULL,
+ waytype_id integer
+);
+
+
+--
+-- Name: mapdata_graphedge_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_graphedge ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_graphedge_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_graphnode; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_graphnode (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_graphnode_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_graphnode ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_graphnode_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_groundaltitude; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_groundaltitude (
+ id integer NOT NULL,
+ name character varying(70) NOT NULL,
+ altitude numeric(6,2) NOT NULL
+);
+
+
+--
+-- Name: mapdata_groundaltitude_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_groundaltitude ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_groundaltitude_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_hole; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_hole (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_hole_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_hole ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_hole_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_labelsettings; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_labelsettings (
+ id integer NOT NULL,
+ titles jsonb NOT NULL,
+ min_zoom numeric(3,1) NOT NULL,
+ max_zoom numeric(3,1) NOT NULL,
+ font_size integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_labelsettings_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_labelsettings ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_labelsettings_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_leavedescription; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_leavedescription (
+ id integer NOT NULL,
+ description_i18n jsonb NOT NULL,
+ space_id integer NOT NULL,
+ target_space_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_leavedescription_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_leavedescription ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_leavedescription_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_level; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_level (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ base_altitude numeric(6,2) NOT NULL,
+ default_height numeric(6,2) NOT NULL,
+ door_height numeric(6,2) NOT NULL,
+ short_label character varying(20) NOT NULL,
+ access_restriction_id integer,
+ on_top_of_id integer,
+ icon character varying(32),
+ label_overrides jsonb NOT NULL,
+ label_settings_id integer,
+ external_url character varying(200),
+ import_block_data boolean NOT NULL,
+ import_block_geom boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_level_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_level_groups (
+ id integer NOT NULL,
+ level_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_level_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_level_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_level_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_lineobstacle; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_lineobstacle (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ width numeric(4,2) NOT NULL,
+ height numeric(6,2) NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64),
+ altitude numeric(6,2) NOT NULL,
+ group_id integer
+);
+
+
+--
+-- Name: mapdata_lineobstacle_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_lineobstacle ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_lineobstacle_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_locationgroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_locationgroup (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ priority integer NOT NULL,
+ color character varying(32),
+ access_restriction_id integer,
+ category_id integer NOT NULL,
+ icon character varying(32),
+ hierarchy integer NOT NULL,
+ label_settings_id integer,
+ hub_import_type character varying(100),
+ descriptions jsonb NOT NULL,
+ can_report_missing character varying(16) NOT NULL,
+ report_help_texts jsonb NOT NULL,
+ in_legend boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_locationgroupcategory; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_locationgroupcategory (
+ id integer NOT NULL,
+ name character varying(50) NOT NULL,
+ single boolean NOT NULL,
+ titles jsonb NOT NULL,
+ titles_plural jsonb NOT NULL,
+ allow_levels boolean NOT NULL,
+ allow_spaces boolean NOT NULL,
+ allow_areas boolean NOT NULL,
+ allow_pois boolean NOT NULL,
+ priority integer NOT NULL,
+ help_texts jsonb NOT NULL,
+ allow_dynamic_locations boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_locationgroupcategory_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_locationgroupcategory ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_locationgroupcategory_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_locationredirect; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_locationredirect (
+ locationslug_ptr_id integer NOT NULL,
+ target_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_locationslug; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_locationslug (
+ id integer NOT NULL,
+ slug character varying(50)
+);
+
+
+--
+-- Name: mapdata_locationslug_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_locationslug ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_locationslug_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_mapupdate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_mapupdate (
+ id integer NOT NULL,
+ datetime timestamp with time zone NOT NULL,
+ type character varying(32) NOT NULL,
+ processed boolean NOT NULL,
+ geometries_changed boolean NOT NULL,
+ user_id integer
+);
+
+
+--
+-- Name: mapdata_mapupdate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_mapupdate ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_mapupdate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_obstacle; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_obstacle (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ height numeric(6,2) NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64),
+ altitude numeric(6,2) NOT NULL,
+ group_id integer
+);
+
+
+--
+-- Name: mapdata_obstacle_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_obstacle ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_obstacle_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_obstaclegroup; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_obstaclegroup (
+ id integer NOT NULL,
+ titles jsonb NOT NULL,
+ color character varying(32),
+ in_legend boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_obstaclegroup_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_obstaclegroup ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_obstaclegroup_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_poi; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_poi (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ geometry jsonb NOT NULL,
+ access_restriction_id integer,
+ space_id integer NOT NULL,
+ import_tag character varying(64),
+ icon character varying(32),
+ label_overrides jsonb NOT NULL,
+ label_settings_id integer,
+ external_url character varying(200),
+ import_block_data boolean NOT NULL,
+ import_block_geom boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_poi_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_poi_groups (
+ id integer NOT NULL,
+ poi_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_poi_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_poi_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_poi_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_position; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_position (
+ id integer NOT NULL,
+ name character varying(32) NOT NULL,
+ secret character varying(32) NOT NULL,
+ owner_id integer NOT NULL,
+ coordinates_id character varying(48),
+ last_coordinates_update timestamp with time zone,
+ timeout smallint NOT NULL,
+ CONSTRAINT mapdata_position_timeout_check CHECK ((timeout >= 0))
+);
+
+
+--
+-- Name: mapdata_position_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_position ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_position_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_ramp; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_ramp (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_ramp_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_ramp ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_ramp_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_rangingbeacon; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_rangingbeacon (
+ id integer NOT NULL,
+ import_tag character varying(64),
+ geometry jsonb NOT NULL,
+ wifi_bssid character varying(17),
+ altitude numeric(6,2) NOT NULL,
+ comment text,
+ space_id integer NOT NULL,
+ bluetooth_address character varying(17),
+ ibeacon_major integer,
+ ibeacon_minor integer,
+ ibeacon_uuid uuid,
+ node_number smallint,
+ uwb_address character varying(23),
+ CONSTRAINT mapdata_rangingbeacon_ibeacon_major_check CHECK ((ibeacon_major >= 0)),
+ CONSTRAINT mapdata_rangingbeacon_ibeacon_minor_check CHECK ((ibeacon_minor >= 0)),
+ CONSTRAINT mapdata_rangingbeacon_node_number_check CHECK ((node_number >= 0))
+);
+
+
+--
+-- Name: mapdata_rangingbeacon_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_rangingbeacon ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_rangingbeacon_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_report; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_report (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL,
+ category character varying(20) NOT NULL,
+ open boolean NOT NULL,
+ last_update timestamp with time zone NOT NULL,
+ title character varying(100) NOT NULL,
+ description text NOT NULL,
+ coordinates_id character varying(48),
+ origin_id character varying(48),
+ destination_id character varying(48),
+ route_options character varying(128),
+ titles jsonb NOT NULL,
+ secret character varying(32) NOT NULL,
+ assigned_to_id integer,
+ author_id integer,
+ location_id integer,
+ import_tag character varying(256)
+);
+
+
+--
+-- Name: mapdata_report_created_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_report_created_groups (
+ id integer NOT NULL,
+ report_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_report_created_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_report_created_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_report_created_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_report_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_report ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_report_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_reportupdate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_reportupdate (
+ id integer NOT NULL,
+ datetime timestamp with time zone NOT NULL,
+ open boolean,
+ comment text NOT NULL,
+ public boolean NOT NULL,
+ assigned_to_id integer,
+ author_id integer,
+ report_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_reportupdate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_reportupdate ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_reportupdate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_source; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_source (
+ id integer NOT NULL,
+ bottom numeric(6,2) NOT NULL,
+ "left" numeric(6,2) NOT NULL,
+ top numeric(6,2) NOT NULL,
+ "right" numeric(6,2) NOT NULL,
+ name character varying(50) NOT NULL,
+ access_restriction_id integer
+);
+
+
+--
+-- Name: mapdata_source_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_source ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_source_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_space; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_space (
+ locationslug_ptr_id integer NOT NULL,
+ titles jsonb NOT NULL,
+ can_search boolean NOT NULL,
+ can_describe boolean NOT NULL,
+ geometry jsonb NOT NULL,
+ height numeric(6,2),
+ outside boolean NOT NULL,
+ enter_description_i18n jsonb NOT NULL,
+ base_mapdata_accessible boolean NOT NULL,
+ access_restriction_id integer,
+ level_id integer NOT NULL,
+ import_tag character varying(64),
+ icon character varying(32),
+ label_overrides jsonb NOT NULL,
+ label_settings_id integer,
+ external_url character varying(200),
+ import_block_data boolean NOT NULL,
+ import_block_geom boolean NOT NULL
+);
+
+
+--
+-- Name: mapdata_space_groups; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_space_groups (
+ id integer NOT NULL,
+ space_id integer NOT NULL,
+ locationgroup_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_space_groups_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_space_groups ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_space_groups_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_stair; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_stair (
+ id integer NOT NULL,
+ geometry jsonb NOT NULL,
+ space_id integer NOT NULL,
+ import_tag character varying(64)
+);
+
+
+--
+-- Name: mapdata_stair_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_stair ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_stair_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_theme; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_theme (
+ id integer NOT NULL,
+ titles jsonb NOT NULL,
+ description text NOT NULL,
+ public boolean NOT NULL,
+ color_background character varying(32) NOT NULL,
+ color_wall_fill character varying(32) NOT NULL,
+ color_wall_border character varying(32) NOT NULL,
+ color_door_fill character varying(32) NOT NULL,
+ color_ground_fill character varying(32) NOT NULL,
+ color_obstacles_default_fill character varying(32) NOT NULL,
+ color_obstacles_default_border character varying(32) NOT NULL,
+ last_updated timestamp with time zone NOT NULL,
+ color_css_grid character varying(32) NOT NULL,
+ color_css_header_background character varying(32) NOT NULL,
+ color_css_header_text character varying(32) NOT NULL,
+ color_css_header_text_hover character varying(32) NOT NULL,
+ color_css_initial character varying(32) NOT NULL,
+ color_css_modal_backdrop character varying(32) NOT NULL,
+ color_css_overlay_background character varying(32) NOT NULL,
+ color_css_primary character varying(32) NOT NULL,
+ color_css_quaternary character varying(32) NOT NULL,
+ color_css_quinary character varying(32) NOT NULL,
+ color_css_route_dots_shadow character varying(32) NOT NULL,
+ color_css_secondary character varying(32) NOT NULL,
+ color_css_shadow character varying(32) NOT NULL,
+ color_css_tertiary character varying(32) NOT NULL,
+ color_logo text NOT NULL,
+ dark boolean NOT NULL,
+ "default" boolean NOT NULL,
+ extra_css text NOT NULL,
+ funky boolean NOT NULL,
+ high_contrast boolean NOT NULL,
+ randomize_primary_color boolean NOT NULL,
+ icon_path character varying(255) NOT NULL,
+ leaflet_marker_config text NOT NULL
+);
+
+
+--
+-- Name: mapdata_theme_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_theme ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_theme_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_themelocationgroupbackgroundcolor (
+ id integer NOT NULL,
+ fill_color character varying(32),
+ border_color character varying(32),
+ location_group_id integer,
+ theme_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_themelocationgroupbackgroundcolor ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_themelocationgroupbackgroundcolor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_themeobstaclegroupbackgroundcolor (
+ id integer NOT NULL,
+ fill_color character varying(32),
+ border_color character varying(32),
+ obstacle_group_id integer,
+ theme_id integer NOT NULL
+);
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_themeobstaclegroupbackgroundcolor ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_themeobstaclegroupbackgroundcolor_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_waytype; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mapdata_waytype (
+ id integer NOT NULL,
+ titles jsonb NOT NULL,
+ titles_plural jsonb NOT NULL,
+ join_edges boolean NOT NULL,
+ up_separate boolean NOT NULL,
+ walk boolean NOT NULL,
+ color character varying(32) NOT NULL,
+ icon_name character varying(32),
+ extra_seconds smallint NOT NULL,
+ speed numeric(3,1) NOT NULL,
+ description_i18n jsonb NOT NULL,
+ speed_up numeric(3,1) NOT NULL,
+ description_up_i18n jsonb NOT NULL,
+ level_change_description_i18n jsonb NOT NULL,
+ CONSTRAINT mapdata_waytype_extra_seconds_check CHECK ((extra_seconds >= 0))
+);
+
+
+--
+-- Name: mapdata_waytype_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_waytype ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_waytype_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mapdata_wifimeasurement_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mapdata_beaconmeasurement ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mapdata_wifimeasurement_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_firmwarebuild; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_firmwarebuild (
+ id integer NOT NULL,
+ variant character varying(64) NOT NULL,
+ chip smallint NOT NULL,
+ sha256_hash character varying(64) NOT NULL,
+ project_description jsonb NOT NULL,
+ "binary" character varying(100),
+ version_id integer NOT NULL
+);
+
+
+--
+-- Name: mesh_firmwarebuild_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_firmwarebuild ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_firmwarebuild_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_firmwarebuildboard; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_firmwarebuildboard (
+ id integer NOT NULL,
+ board character varying(32) NOT NULL,
+ build_id integer NOT NULL
+);
+
+
+--
+-- Name: mesh_firmwarebuildboard_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_firmwarebuildboard ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_firmwarebuildboard_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_firmwareversion; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_firmwareversion (
+ id integer NOT NULL,
+ project_name character varying(32) NOT NULL,
+ version character varying(32) NOT NULL,
+ idf_version character varying(32) NOT NULL,
+ created timestamp with time zone NOT NULL,
+ uploader_id integer
+);
+
+
+--
+-- Name: mesh_firmwareversion_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_firmwareversion ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_firmwareversion_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_meshnode; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_meshnode (
+ address character varying(17) NOT NULL,
+ first_seen timestamp with time zone NOT NULL,
+ last_signin timestamp with time zone,
+ uplink_id integer,
+ upstream_id character varying(17)
+);
+
+
+--
+-- Name: mesh_meshuplink; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_meshuplink (
+ id integer NOT NULL,
+ name character varying(128) NOT NULL,
+ started timestamp with time zone NOT NULL,
+ last_ping timestamp with time zone NOT NULL,
+ end_reason character varying(16),
+ node_id character varying(17) NOT NULL
+);
+
+
+--
+-- Name: mesh_meshuplink_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_meshuplink ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_meshuplink_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_nodemessage; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_nodemessage (
+ id integer NOT NULL,
+ datetime timestamp with time zone NOT NULL,
+ data jsonb NOT NULL,
+ src_node_id character varying(17) NOT NULL,
+ message_type character varying(24) NOT NULL,
+ uplink_id integer NOT NULL
+);
+
+
+--
+-- Name: mesh_nodemessage_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_nodemessage ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_nodemessage_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_otaupdate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_otaupdate (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL,
+ build_id integer NOT NULL
+);
+
+
+--
+-- Name: mesh_otaupdate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_otaupdate ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_otaupdate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: mesh_otaupdaterecipient; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.mesh_otaupdaterecipient (
+ id integer NOT NULL,
+ node_id character varying(17) NOT NULL,
+ update_id integer NOT NULL,
+ status character varying(10) NOT NULL
+);
+
+
+--
+-- Name: mesh_otaupdaterecipient_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.mesh_otaupdaterecipient ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.mesh_otaupdaterecipient_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: routing_routeoptions; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.routing_routeoptions (
+ user_id integer NOT NULL,
+ data jsonb NOT NULL
+);
+
+
+--
+-- Name: site_announcement; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.site_announcement (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL,
+ active_until timestamp with time zone,
+ active boolean NOT NULL,
+ author_id integer,
+ text_i18n jsonb NOT NULL
+);
+
+
+--
+-- Name: site_announcement_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.site_announcement ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.site_announcement_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Name: site_siteupdate; Type: TABLE; Schema: public; Owner: -
+--
+
+CREATE TABLE public.site_siteupdate (
+ id integer NOT NULL,
+ created timestamp with time zone NOT NULL
+);
+
+
+--
+-- Name: site_siteupdate_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+ALTER TABLE public.site_siteupdate ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
+ SEQUENCE NAME public.site_siteupdate_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1
+);
+
+
+--
+-- Data for Name: api_logintoken; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.api_logintoken (id, secret, session_auth_hash, user_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: api_secret; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.api_secret (id, name, created, api_secret, readonly, scope_grant_permissions, scope_editor, scope_mesh, valid_until, user_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: auth_group; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.auth_group (id, name) FROM stdin;
+\.
+
+
+--
+-- Data for Name: auth_group_permissions; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.auth_group_permissions (id, group_id, permission_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: auth_permission; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin;
+1 Can add log entry 1 add_logentry
+2 Can change log entry 1 change_logentry
+3 Can delete log entry 1 delete_logentry
+4 Can view log entry 1 view_logentry
+5 Can add permission 2 add_permission
+6 Can change permission 2 change_permission
+7 Can delete permission 2 delete_permission
+8 Can view permission 2 view_permission
+9 Can add group 3 add_group
+10 Can change group 3 change_group
+11 Can delete group 3 delete_group
+12 Can view group 3 view_group
+13 Can add user 4 add_user
+14 Can change user 4 change_user
+15 Can delete user 4 delete_user
+16 Can view user 4 view_user
+17 Can add content type 5 add_contenttype
+18 Can change content type 5 change_contenttype
+19 Can delete content type 5 delete_contenttype
+20 Can view content type 5 view_contenttype
+21 Can add session 6 add_session
+22 Can change session 6 change_session
+23 Can delete session 6 delete_session
+24 Can view session 6 view_session
+25 Can add login tokens 7 add_logintoken
+26 Can change login tokens 7 change_logintoken
+27 Can delete login tokens 7 delete_logintoken
+28 Can view login tokens 7 view_logintoken
+29 Can add API secret 8 add_secret
+30 Can change API secret 8 change_secret
+31 Can delete API secret 8 delete_secret
+32 Can view API secret 8 view_secret
+33 Can add Access Permission 9 add_accesspermission
+34 Can change Access Permission 9 change_accesspermission
+35 Can delete Access Permission 9 delete_accesspermission
+36 Can view Access Permission 9 view_accesspermission
+37 Can add Access Permission Token 10 add_accesspermissiontoken
+38 Can change Access Permission Token 10 change_accesspermissiontoken
+39 Can delete Access Permission Token 10 delete_accesspermissiontoken
+40 Can view Access Permission Token 10 view_accesspermissiontoken
+41 Can add Access Restriction 11 add_accessrestriction
+42 Can change Access Restriction 11 change_accessrestriction
+43 Can delete Access Restriction 11 delete_accessrestriction
+44 Can view Access Restriction 11 view_accessrestriction
+45 Can add Access Restriction Group 12 add_accessrestrictiongroup
+46 Can change Access Restriction Group 12 change_accessrestrictiongroup
+47 Can delete Access Restriction Group 12 delete_accessrestrictiongroup
+48 Can view Access Restriction Group 12 view_accessrestrictiongroup
+49 Can add Altitude Area 13 add_altitudearea
+50 Can change Altitude Area 13 change_altitudearea
+51 Can delete Altitude Area 13 delete_altitudearea
+52 Can view Altitude Area 13 view_altitudearea
+53 Can add Altitude Marker 14 add_altitudemarker
+54 Can change Altitude Marker 14 change_altitudemarker
+55 Can delete Altitude Marker 14 delete_altitudemarker
+56 Can view Altitude Marker 14 view_altitudemarker
+57 Can add Building 15 add_building
+58 Can change Building 15 change_building
+59 Can delete Building 15 delete_building
+60 Can view Building 15 view_building
+61 Can add Column 16 add_column
+62 Can change Column 16 change_column
+63 Can delete Column 16 delete_column
+64 Can view Column 16 view_column
+65 Can add Cross description 17 add_crossdescription
+66 Can change Cross description 17 change_crossdescription
+67 Can delete Cross description 17 delete_crossdescription
+68 Can view Cross description 17 view_crossdescription
+69 Can add Door 18 add_door
+70 Can change Door 18 change_door
+71 Can delete Door 18 delete_door
+72 Can view Door 18 view_door
+73 Can add Graph Edge 19 add_graphedge
+74 Can change Graph Edge 19 change_graphedge
+75 Can delete Graph Edge 19 delete_graphedge
+76 Can view Graph Edge 19 view_graphedge
+77 Can add Graph Node 20 add_graphnode
+78 Can change Graph Node 20 change_graphnode
+79 Can delete Graph Node 20 delete_graphnode
+80 Can view Graph Node 20 view_graphnode
+81 Can add Hole 21 add_hole
+82 Can change Hole 21 change_hole
+83 Can delete Hole 21 delete_hole
+84 Can view Hole 21 view_hole
+85 Can add Leave description 22 add_leavedescription
+86 Can change Leave description 22 change_leavedescription
+87 Can delete Leave description 22 delete_leavedescription
+88 Can view Leave description 22 view_leavedescription
+89 Can add Line Obstacle 23 add_lineobstacle
+90 Can change Line Obstacle 23 change_lineobstacle
+91 Can delete Line Obstacle 23 delete_lineobstacle
+92 Can view Line Obstacle 23 view_lineobstacle
+93 Can add Location Group Category 24 add_locationgroupcategory
+94 Can change Location Group Category 24 change_locationgroupcategory
+95 Can delete Location Group Category 24 delete_locationgroupcategory
+96 Can view Location Group Category 24 view_locationgroupcategory
+97 Can add Location with Slug 25 add_locationslug
+98 Can change Location with Slug 25 change_locationslug
+99 Can delete Location with Slug 25 delete_locationslug
+100 Can view Location with Slug 25 view_locationslug
+101 Can add Map update 26 add_mapupdate
+102 Can change Map update 26 change_mapupdate
+103 Can delete Map update 26 delete_mapupdate
+104 Can view Map update 26 view_mapupdate
+105 Can add Obstacle 27 add_obstacle
+106 Can change Obstacle 27 change_obstacle
+107 Can delete Obstacle 27 delete_obstacle
+108 Can view Obstacle 27 view_obstacle
+109 Can add Ramp 28 add_ramp
+110 Can change Ramp 28 change_ramp
+111 Can delete Ramp 28 delete_ramp
+112 Can view Ramp 28 view_ramp
+113 Can add Source 29 add_source
+114 Can change Source 29 change_source
+115 Can delete Source 29 delete_source
+116 Can view Source 29 view_source
+117 Can add Stair 30 add_stair
+118 Can change Stair 30 change_stair
+119 Can delete Stair 30 delete_stair
+120 Can view Stair 30 view_stair
+121 Can add Way Type 31 add_waytype
+122 Can change Way Type 31 change_waytype
+123 Can delete Way Type 31 delete_waytype
+124 Can view Way Type 31 view_waytype
+125 Can add Area 32 add_area
+126 Can change Area 32 change_area
+127 Can delete Area 32 delete_area
+128 Can view Area 32 view_area
+129 Can add Level 33 add_level
+130 Can change Level 33 change_level
+131 Can delete Level 33 delete_level
+132 Can view Level 33 view_level
+133 Can add Location Group 34 add_locationgroup
+134 Can change Location Group 34 change_locationgroup
+135 Can delete Location Group 34 delete_locationgroup
+136 Can view Location Group 34 view_locationgroup
+137 Can add location redirect 35 add_locationredirect
+138 Can change location redirect 35 change_locationredirect
+139 Can delete location redirect 35 delete_locationredirect
+140 Can view location redirect 35 view_locationredirect
+141 Can add Point of Interest 36 add_poi
+142 Can change Point of Interest 36 change_poi
+143 Can delete Point of Interest 36 delete_poi
+144 Can view Point of Interest 36 view_poi
+145 Can add Space 37 add_space
+146 Can change Space 37 change_space
+147 Can delete Space 37 delete_space
+148 Can view Space 37 view_space
+149 Can add Label Settings 38 add_labelsettings
+150 Can change Label Settings 38 change_labelsettings
+151 Can delete Label Settings 38 delete_labelsettings
+152 Can view Label Settings 38 view_labelsettings
+153 Can add Report 39 add_report
+154 Can change Report 39 change_report
+155 Can delete Report 39 delete_report
+156 Can view Report 39 view_report
+157 Can add Report update 40 add_reportupdate
+158 Can change Report update 40 change_reportupdate
+159 Can delete Report update 40 delete_reportupdate
+160 Can view Report update 40 view_reportupdate
+161 Can add Dynamic position 41 add_position
+162 Can change Dynamic position 41 change_position
+163 Can delete Dynamic position 41 delete_position
+164 Can view Dynamic position 41 view_position
+165 Can add Dynamic location 42 add_dynamiclocation
+166 Can change Dynamic location 42 change_dynamiclocation
+167 Can delete Dynamic location 42 delete_dynamiclocation
+168 Can view Dynamic location 42 view_dynamiclocation
+169 Can add Ranging beacon 43 add_rangingbeacon
+170 Can change Ranging beacon 43 change_rangingbeacon
+171 Can delete Ranging beacon 43 delete_rangingbeacon
+172 Can view Ranging beacon 43 view_rangingbeacon
+173 Can add Ground Altitude 44 add_groundaltitude
+174 Can change Ground Altitude 44 change_groundaltitude
+175 Can delete Ground Altitude 44 delete_groundaltitude
+176 Can view Ground Altitude 44 view_groundaltitude
+177 Can add Obstacle Group 45 add_obstaclegroup
+178 Can change Obstacle Group 45 change_obstaclegroup
+179 Can delete Obstacle Group 45 delete_obstaclegroup
+180 Can view Obstacle Group 45 view_obstaclegroup
+181 Can add Theme 46 add_theme
+182 Can change Theme 46 change_theme
+183 Can delete Theme 46 delete_theme
+184 Can view Theme 46 view_theme
+185 Can add theme obstacle group background color 47 add_themeobstaclegroupbackgroundcolor
+186 Can change theme obstacle group background color 47 change_themeobstaclegroupbackgroundcolor
+187 Can delete theme obstacle group background color 47 delete_themeobstaclegroupbackgroundcolor
+188 Can view theme obstacle group background color 47 view_themeobstaclegroupbackgroundcolor
+189 Can add theme location group background color 48 add_themelocationgroupbackgroundcolor
+190 Can change theme location group background color 48 change_themelocationgroupbackgroundcolor
+191 Can delete theme location group background color 48 delete_themelocationgroupbackgroundcolor
+192 Can view theme location group background color 48 view_themelocationgroupbackgroundcolor
+193 Can add Beacon Measurement 49 add_beaconmeasurement
+194 Can change Beacon Measurement 49 change_beaconmeasurement
+195 Can delete Beacon Measurement 49 delete_beaconmeasurement
+196 Can view Beacon Measurement 49 view_beaconmeasurement
+197 Can add Route options 50 add_routeoptions
+198 Can change Route options 50 change_routeoptions
+199 Can delete Route options 50 delete_routeoptions
+200 Can view Route options 50 view_routeoptions
+201 Can add Announcement 51 add_announcement
+202 Can change Announcement 51 change_announcement
+203 Can delete Announcement 51 delete_announcement
+204 Can view Announcement 51 view_announcement
+205 Can add Site update 52 add_siteupdate
+206 Can change Site update 52 change_siteupdate
+207 Can delete Site update 52 delete_siteupdate
+208 Can view Site update 52 view_siteupdate
+209 Can add User Permissions 53 add_userpermissions
+210 Can change User Permissions 53 change_userpermissions
+211 Can delete User Permissions 53 delete_userpermissions
+212 Can view User Permissions 53 view_userpermissions
+213 Can add user space access 54 add_userspaceaccess
+214 Can change user space access 54 change_userspaceaccess
+215 Can delete user space access 54 delete_userspaceaccess
+216 Can view user space access 54 view_userspaceaccess
+217 Can add mesh node 55 add_meshnode
+218 Can change mesh node 55 change_meshnode
+219 Can delete mesh node 55 delete_meshnode
+220 Can view mesh node 55 view_meshnode
+221 Can add node message 56 add_nodemessage
+222 Can change node message 56 change_nodemessage
+223 Can delete node message 56 delete_nodemessage
+224 Can view node message 56 view_nodemessage
+225 Can add firmware build 57 add_firmwarebuild
+226 Can change firmware build 57 change_firmwarebuild
+227 Can delete firmware build 57 delete_firmwarebuild
+228 Can view firmware build 57 view_firmwarebuild
+229 Can add firmware build board 58 add_firmwarebuildboard
+230 Can change firmware build board 58 change_firmwarebuildboard
+231 Can delete firmware build board 58 delete_firmwarebuildboard
+232 Can view firmware build board 58 view_firmwarebuildboard
+233 Can add firmware version 59 add_firmwareversion
+234 Can change firmware version 59 change_firmwareversion
+235 Can delete firmware version 59 delete_firmwareversion
+236 Can view firmware version 59 view_firmwareversion
+237 Can add mesh uplink 60 add_meshuplink
+238 Can change mesh uplink 60 change_meshuplink
+239 Can delete mesh uplink 60 delete_meshuplink
+240 Can view mesh uplink 60 view_meshuplink
+241 Can add ota update 61 add_otaupdate
+242 Can change ota update 61 change_otaupdate
+243 Can delete ota update 61 delete_otaupdate
+244 Can view ota update 61 view_otaupdate
+245 Can add ota update recipient 62 add_otaupdaterecipient
+246 Can change ota update recipient 62 change_otaupdaterecipient
+247 Can delete ota update recipient 62 delete_otaupdaterecipient
+248 Can view ota update recipient 62 view_otaupdaterecipient
+249 Can add Changed object 63 add_changedobject
+250 Can change Changed object 63 change_changedobject
+251 Can delete Changed object 63 delete_changedobject
+252 Can view Changed object 63 view_changedobject
+253 Can add Change Set 64 add_changeset
+254 Can change Change Set 64 change_changeset
+255 Can delete Change Set 64 delete_changeset
+256 Can view Change Set 64 view_changeset
+257 Can add Change set update 65 add_changesetupdate
+258 Can change Change set update 65 change_changesetupdate
+259 Can delete Change set update 65 delete_changesetupdate
+260 Can view Change set update 65 view_changesetupdate
+261 Can add Access Permission SSO Grant 66 add_accesspermissionssogrant
+262 Can change Access Permission SSO Grant 66 change_accesspermissionssogrant
+263 Can delete Access Permission SSO Grant 66 delete_accesspermissionssogrant
+264 Can view Access Permission SSO Grant 66 view_accesspermissionssogrant
+\.
+
+
+--
+-- Data for Name: auth_user_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.auth_user_groups (id, user_id, group_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: auth_user_user_permissions; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.auth_user_user_permissions (id, user_id, permission_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: control_userpermissions; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.control_userpermissions (user_id, review_changesets, direct_edit, control_panel, grant_permissions, manage_announcements, grant_all_access, max_changeset_changes, base_mapdata_access, editor_access, grant_space_access, manage_map_updates, review_all_reports, mesh_control, grant_unlimited_access, nonpublic_themes, sources_access) FROM stdin;
+\.
+
+
+--
+-- Data for Name: control_userpermissions_review_group_reports; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.control_userpermissions_review_group_reports (id, userpermissions_id, locationgroup_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: control_userspaceaccess; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.control_userspaceaccess (id, can_edit, space_id, user_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: django_admin_log; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.django_admin_log (id, action_time, object_id, object_repr, action_flag, change_message, content_type_id, user_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: django_content_type; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.django_content_type (id, app_label, model) FROM stdin;
+1 admin logentry
+2 auth permission
+3 auth group
+4 auth user
+5 contenttypes contenttype
+6 sessions session
+7 api logintoken
+8 api secret
+9 mapdata accesspermission
+10 mapdata accesspermissiontoken
+11 mapdata accessrestriction
+12 mapdata accessrestrictiongroup
+13 mapdata altitudearea
+14 mapdata altitudemarker
+15 mapdata building
+16 mapdata column
+17 mapdata crossdescription
+18 mapdata door
+19 mapdata graphedge
+20 mapdata graphnode
+21 mapdata hole
+22 mapdata leavedescription
+23 mapdata lineobstacle
+24 mapdata locationgroupcategory
+25 mapdata locationslug
+26 mapdata mapupdate
+27 mapdata obstacle
+28 mapdata ramp
+29 mapdata source
+30 mapdata stair
+31 mapdata waytype
+32 mapdata area
+33 mapdata level
+34 mapdata locationgroup
+35 mapdata locationredirect
+36 mapdata poi
+37 mapdata space
+38 mapdata labelsettings
+39 mapdata report
+40 mapdata reportupdate
+41 mapdata position
+42 mapdata dynamiclocation
+43 mapdata rangingbeacon
+44 mapdata groundaltitude
+45 mapdata obstaclegroup
+46 mapdata theme
+47 mapdata themeobstaclegroupbackgroundcolor
+48 mapdata themelocationgroupbackgroundcolor
+49 mapdata beaconmeasurement
+50 routing routeoptions
+51 site announcement
+52 site siteupdate
+53 control userpermissions
+54 control userspaceaccess
+55 mesh meshnode
+56 mesh nodemessage
+57 mesh firmwarebuild
+58 mesh firmwarebuildboard
+59 mesh firmwareversion
+60 mesh meshuplink
+61 mesh otaupdate
+62 mesh otaupdaterecipient
+63 editor changedobject
+64 editor changeset
+65 editor changesetupdate
+66 mapdata accesspermissionssogrant
+\.
+
+
+--
+-- Data for Name: django_migrations; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.django_migrations (id, app, name, applied) FROM stdin;
+1 contenttypes 0001_initial 2024-08-27 09:57:42.723509+00
+2 auth 0001_initial 2024-08-27 09:57:42.885499+00
+3 admin 0001_initial 2024-08-27 09:57:42.927278+00
+4 admin 0002_logentry_remove_auto_add 2024-08-27 09:57:42.939178+00
+5 admin 0003_logentry_add_action_flag_choices 2024-08-27 09:57:42.951548+00
+6 mapdata 0001_squashed_refactor_2017 2024-08-27 09:57:45.7437+00
+7 mapdata 0002_locationredirect 2024-08-27 09:57:45.754826+00
+8 mapdata 0003_space_outside 2024-08-27 09:57:45.758164+00
+9 mapdata 0004_space_level_category_name 2024-08-27 09:57:45.761399+00
+10 mapdata 0005_auto_20170527_1556 2024-08-27 09:57:45.764762+00
+11 mapdata 0006_remove_section_name 2024-08-27 09:57:45.768032+00
+12 mapdata 0007_assign_hole_space 2024-08-27 09:57:45.771276+00
+13 mapdata 0008_auto_20170608_1317 2024-08-27 09:57:45.774513+00
+14 mapdata 0009_column 2024-08-27 09:57:45.777869+00
+15 mapdata 0010_on_top_of 2024-08-27 09:57:45.782128+00
+16 mapdata 0011_outside_only_outside 2024-08-27 09:57:45.78627+00
+17 mapdata 0012_rename_section_to_level 2024-08-27 09:57:45.79037+00
+18 mapdata 0013_auto_20170618_1934 2024-08-27 09:57:45.794617+00
+19 mapdata 0014_mapupdate 2024-08-27 09:57:45.798823+00
+20 mapdata 0015_auto_20170706_1334 2024-08-27 09:57:45.803036+00
+21 mapdata 0016_remove_source_image 2024-08-27 09:57:45.807201+00
+22 mapdata 0017_point_to_poi 2024-08-27 09:57:45.811312+00
+23 mapdata 0018_auto_20170708_1752 2024-08-27 09:57:45.814525+00
+24 mapdata 0019_location_group_category 2024-08-27 09:57:45.817789+00
+25 mapdata 0020_auto_20170710_1848 2024-08-27 09:57:45.821055+00
+26 mapdata 0021_auto_20170710_1916 2024-08-27 09:57:45.824314+00
+27 mapdata 0022_remove_space_category 2024-08-27 09:57:45.827552+00
+28 mapdata 0023_auto_20170711_1741 2024-08-27 09:57:45.830785+00
+29 mapdata 0024_remove_compiled_room_area 2024-08-27 09:57:45.834138+00
+30 mapdata 0025_remove_area_stuffed 2024-08-27 09:57:45.838237+00
+31 mapdata 0026_remove_specificlocation_color 2024-08-27 09:57:45.84236+00
+32 mapdata 0027_access_restriction 2024-08-27 09:57:45.84653+00
+33 mapdata 0028_door_access_restriction 2024-08-27 09:57:45.850662+00
+34 mapdata 0029_auto_20170714_1519 2024-08-27 09:57:45.854964+00
+35 mapdata 0030_altitudes 2024-08-27 09:57:45.859161+00
+36 mapdata 0031_auto_20170805_1647 2024-08-27 09:57:45.863259+00
+37 mapdata 0032_remove_graphnode_space_transfer 2024-08-27 09:57:45.86736+00
+38 mapdata 0033_auto_20170807_1423 2024-08-27 09:57:45.870573+00
+39 mapdata 0034_auto_20170807_1523 2024-08-27 09:57:45.873837+00
+40 mapdata 0035_auto_20170916_1216 2024-08-27 09:57:45.877044+00
+41 mapdata 0036_geometry_bounds 2024-08-27 09:57:45.880205+00
+42 mapdata 0037_level_geoms_cache 2024-08-27 09:57:45.883408+00
+43 mapdata 0038_level_render_data 2024-08-27 09:57:45.886609+00
+44 mapdata 0039_auto_20171024_2011 2024-08-27 09:57:45.889873+00
+45 mapdata 0040_access_permissions 2024-08-27 09:57:45.893103+00
+46 mapdata 0041_level_short_label 2024-08-27 09:57:45.897411+00
+47 mapdata 0042_auto_20171031_1507 2024-08-27 09:57:45.901581+00
+48 mapdata 0043_auto_20171110_1451 2024-08-27 09:57:45.90589+00
+49 mapdata 0044_mapupdate_processed 2024-08-27 09:57:45.910066+00
+50 mapdata 0045_level_door_height 2024-08-27 09:57:45.914284+00
+51 mapdata 0046_remove_level_render_data 2024-08-27 09:57:45.918428+00
+52 mapdata 0047_remove_mapupdate_changed_geometries 2024-08-27 09:57:45.922651+00
+53 mapdata 0048_ramp 2024-08-27 09:57:45.926913+00
+54 mapdata 0049_altitude_area_ramp 2024-08-27 09:57:45.930145+00
+55 mapdata 0050_remove_geometry_bounds 2024-08-27 09:57:45.93336+00
+56 mapdata 0051_auto_20171125_1241 2024-08-27 09:57:45.936629+00
+57 mapdata 0052_auto_20171125_1335 2024-08-27 09:57:45.939862+00
+58 mapdata 0053_i18nfield 2024-08-27 09:57:45.943067+00
+59 mapdata 0054_title_plural 2024-08-27 09:57:45.94637+00
+60 mapdata 0055_grant_access_permissions 2024-08-27 09:57:45.94959+00
+61 mapdata 0056_accesspermissiontoken 2024-08-27 09:57:45.952916+00
+62 mapdata 0057_waytype_fields 2024-08-27 09:57:45.957066+00
+63 mapdata 0058_wifimeasurement 2024-08-27 09:57:45.961135+00
+64 mapdata 0059_multiple_accesspermissions 2024-08-27 09:57:45.965397+00
+65 mapdata 0060_access_permission_id 2024-08-27 09:57:45.969543+00
+66 mapdata 0061_space_based_route_descriptions 2024-08-27 09:57:45.973869+00
+67 mapdata 0062_typos 2024-08-27 09:57:45.978108+00
+68 mapdata 0063_descriptions_unique_together 2024-08-27 09:57:45.982313+00
+69 mapdata 0064_access_permission_unique_key 2024-08-27 09:57:45.986325+00
+70 mapdata 0065_access_restriction_group 2024-08-27 09:57:45.989467+00
+71 mapdata 0066_area_slow_down_factor 2024-08-27 09:57:45.992632+00
+72 mapdata 0067_space_enter_description 2024-08-27 09:57:45.995857+00
+73 mapdata 0068_waytype_level_change_description 2024-08-27 09:57:45.998946+00
+74 mapdata 0069_mapupdate_geometries_changed 2024-08-27 09:57:46.002113+00
+75 mapdata 0070_auto_20180918_1736 2024-08-27 09:57:46.005299+00
+76 mapdata 0071_space_base_mapdata_accessible 2024-08-27 09:57:46.008532+00
+77 mapdata 0002_fix_broken_spaces 2024-08-27 09:57:46.063211+00
+78 mapdata 0003_column_access_restriction 2024-08-27 09:57:46.126575+00
+79 mapdata 0004_mapupdate_types 2024-08-27 09:57:46.143054+00
+80 mapdata 0005_geometry_import_tag 2024-08-27 09:57:46.575212+00
+81 mapdata 0006_location_icon 2024-08-27 09:57:46.733351+00
+82 mapdata 0007_location_group_help_text 2024-08-27 09:57:46.897828+00
+83 mapdata 0008_validate_slug 2024-08-27 09:57:46.920409+00
+84 mapdata 0072_make_wifi_measurement_author_nullable 2024-08-27 09:57:46.997022+00
+85 mapdata 0073_locationgroup_hierarchy 2024-08-27 09:57:47.034252+00
+86 mapdata 0074_show_labels 2024-08-27 09:57:47.20163+00
+87 mapdata 0075_label_settings 2024-08-27 09:57:47.806179+00
+88 mapdata 0076_obstacle_color 2024-08-27 09:57:48.251462+00
+89 mapdata 0077_obstacle_altitude 2024-08-27 09:57:48.319484+00
+90 mapdata 0078_reports 2024-08-27 09:57:48.733881+00
+91 mapdata 0079_auto_20191224_1858 2024-08-27 09:57:48.879595+00
+92 mapdata 0080_auto_20191224_2203 2024-08-27 09:57:48.942036+00
+93 mapdata 0081_auto_20191225_1015 2024-08-27 09:57:49.233043+00
+94 mapdata 0082_dynamiclocation_position 2024-08-27 09:57:49.454565+00
+95 mapdata 0083_auto_20191227_1642 2024-08-27 09:57:49.53827+00
+96 mapdata 0084_position_timeout 2024-08-27 09:57:49.562811+00
+97 mapdata 0085_locationgroupcategory_allow_dynamic_locations 2024-08-27 09:57:49.581141+00
+98 mapdata 0086_django_4_0 2024-08-27 09:57:53.433557+00
+99 contenttypes 0002_remove_content_type_name 2024-08-27 09:57:53.5103+00
+100 auth 0002_alter_permission_name_max_length 2024-08-27 09:57:53.575171+00
+101 auth 0003_alter_user_email_max_length 2024-08-27 09:57:53.599379+00
+102 auth 0004_alter_user_username_opts 2024-08-27 09:57:53.623728+00
+103 auth 0005_alter_user_last_login_null 2024-08-27 09:57:53.647635+00
+104 auth 0006_require_contenttypes_0002 2024-08-27 09:57:53.651058+00
+105 auth 0007_alter_validators_add_error_messages 2024-08-27 09:57:53.672943+00
+106 auth 0008_alter_user_username_max_length 2024-08-27 09:57:53.703935+00
+107 control 0001_initial 2024-08-27 09:57:53.777867+00
+108 control 0002_userpermissions_access_all 2024-08-27 09:57:53.802912+00
+109 control 0003_auto_20171210_1452 2024-08-27 09:57:53.827703+00
+110 control 0004_more_user_permissions 2024-08-27 09:57:53.893158+00
+111 control 0005_editor_mapdata_permissions 2024-08-27 09:57:53.942208+00
+112 control 0006_user_space_access 2024-08-27 09:57:54.104337+00
+113 control 0007_userpermissions_manage_map_updates 2024-08-27 09:57:54.242443+00
+114 control 0008_userpermissions_reports 2024-08-27 09:57:54.36221+00
+115 control 0009_django_4_0 2024-08-27 09:57:54.607086+00
+116 control 0010_userpermissions_mesh_control 2024-08-27 09:57:54.658528+00
+117 api 0001_initial 2024-08-27 09:57:54.737125+00
+118 api 0002_django_4_0 2024-08-27 09:57:54.802191+00
+119 api 0003_rename_token_logintoken_secret 2024-08-27 09:57:55.102916+00
+120 api 0004_alter_secret_name 2024-08-27 09:57:55.132302+00
+121 auth 0009_alter_user_last_name_max_length 2024-08-27 09:57:55.16147+00
+122 auth 0010_alter_group_name_max_length 2024-08-27 09:57:55.350028+00
+123 auth 0011_update_proxy_permissions 2024-08-27 09:57:55.41671+00
+124 auth 0012_alter_user_first_name_max_length 2024-08-27 09:57:55.444353+00
+125 control 0011_remove_userpermissions_api_secret 2024-08-27 09:57:55.492785+00
+126 control 0012_userpermissions_grant_unlimited_access 2024-08-27 09:57:55.541242+00
+127 control 0013_userpermissions_nonpublic_themes 2024-08-27 09:57:55.592623+00
+128 control 0014_userpermissions_sources_access 2024-08-27 09:57:55.644732+00
+129 editor 0001_initial 2024-08-27 09:57:56.597311+00
+130 editor 0002_auto_20170612_1615 2024-08-27 09:57:56.601125+00
+131 editor 0003_auto_20170618_1942 2024-08-27 09:57:56.604448+00
+132 editor 0004_auto_20170620_0934 2024-08-27 09:57:56.607744+00
+133 editor 0005_auto_20170627_0027 2024-08-27 09:57:56.610979+00
+134 editor 0006_auto_20170629_1222 2024-08-27 09:57:56.614322+00
+135 editor 0007_auto_20170629_1327 2024-08-27 09:57:56.618568+00
+136 editor 0008_auto_20170629_1450 2024-08-27 09:57:56.622841+00
+137 editor 0009_auto_20170701_1218 2024-08-27 09:57:56.627082+00
+138 editor 0010_auto_20170704_1431 2024-08-27 09:57:56.631272+00
+139 editor 0011_auto_20170704_1640 2024-08-27 09:57:56.635557+00
+140 editor 0012_remove_changeset_session_id 2024-08-27 09:57:56.63978+00
+141 editor 0013_remove_changesetupdate_session_user 2024-08-27 09:57:56.643985+00
+142 editor 0014_last_update_foreign_key 2024-08-27 09:57:56.64818+00
+143 editor 0015_changeset_last_state_update 2024-08-27 09:57:56.65161+00
+144 editor 0016_auto_20170705_1938 2024-08-27 09:57:56.655023+00
+145 editor 0017_changeset_map_update 2024-08-27 09:57:56.658389+00
+146 editor 0018_changeset_last_cleaned_with 2024-08-27 09:57:56.661636+00
+147 editor 0019_permissions 2024-08-27 09:57:56.664991+00
+148 editor 0020_remove_permissions 2024-08-27 09:57:56.668251+00
+149 editor 0021_auto_20180918_1736 2024-08-27 09:57:56.671549+00
+150 editor 0002_django_4_0 2024-08-27 09:57:57.034555+00
+151 editor 0003_changedobject_json_encoder 2024-08-27 09:57:57.054668+00
+152 mapdata 0087_rangingbeacon 2024-08-27 09:57:57.163656+00
+153 mapdata 0088_remove_position_api_secret 2024-08-27 09:57:57.195682+00
+154 mapdata 0089_groundaltitude 2024-08-27 09:57:57.485463+00
+155 mapdata 0090_alter_report_author 2024-08-27 09:57:57.558095+00
+156 mapdata 0091_area_main_point 2024-08-27 09:57:57.608702+00
+157 mapdata 0092_accesspermission_by_group 2024-08-27 09:57:57.94174+00
+158 mapdata 0093_public_accessrestriction 2024-08-27 09:57:57.997669+00
+159 mapdata 0094_hub_import_prepare 2024-08-27 09:57:58.272683+00
+160 mapdata 0095_import_block 2024-08-27 09:57:58.851733+00
+161 mapdata 0095_accesspermission_for_session 2024-08-27 09:57:59.045496+00
+162 mapdata 0096_merge_20231225_2216 2024-08-27 09:57:59.048283+00
+163 mapdata 0097_longer_import_tag 2024-08-27 09:57:59.686923+00
+164 mapdata 0098_report_import_tag 2024-08-27 09:57:59.740631+00
+165 mapdata 0099_theming 2024-08-27 09:58:00.180053+00
+166 mapdata 0100_obstaclegroup_color_data 2024-08-27 09:58:00.261418+00
+167 mapdata 0101_remove_obstacle_color 2024-08-27 09:58:00.343321+00
+168 mapdata 0102_rename_bssid_rangingbeacon_wifi_bssid_and_more 2024-08-27 09:58:00.744145+00
+169 mapdata 0103_report_flow_overhaul 2024-08-27 09:58:01.267908+00
+170 mapdata 0104_theme_color_css_grid_and_more 2024-08-27 09:58:01.451199+00
+171 mapdata 0105_alter_theme_color_background_and_more 2024-08-27 09:58:01.507173+00
+172 mapdata 0106_rename_wifi_to_beaconmeasurement 2024-08-27 09:58:01.778579+00
+173 mesh 0001_initial 2024-08-27 09:58:01.897982+00
+174 mesh 0002_alter_firmware_unique_together_meshnode_firmware_and_more 2024-08-27 09:58:01.941023+00
+175 mesh 0003_meshnode_name 2024-08-27 09:58:01.951991+00
+176 mesh 0004_relay_vs_src_node_and_remove_firmware 2024-08-27 09:58:02.211169+00
+177 mesh 0005_meshnode_last_signin 2024-08-27 09:58:02.220932+00
+178 mesh 0006_rename_route_meshnode_uplink 2024-08-27 09:58:02.244607+00
+179 mesh 0007_nodemessage_message_type_new 2024-08-27 09:58:02.370616+00
+180 mesh 0008_firmwarebuild_firmwarebuildboard_firmwareversion_and_more 2024-08-27 09:58:02.784016+00
+181 mesh 0009_meshuplink 2024-08-27 09:58:03.018144+00
+182 mesh 0010_otaupdate_otaupdaterecipient 2024-08-27 09:58:03.237301+00
+183 mesh 0011_meshnode_address_validate 2024-08-27 09:58:03.327313+00
+184 mesh 0012_otaupdaterecipient_status_and_more 2024-08-27 09:58:03.363442+00
+185 mesh 0013_meshnode_upstream_alter_nodemessage_message_type 2024-08-27 09:58:03.473797+00
+186 mesh 0014_remove_meshnode_name 2024-08-27 09:58:03.485254+00
+187 routing 0001_routeoptions 2024-08-27 09:58:03.590206+00
+188 routing 0002_django_4_0 2024-08-27 09:58:03.724786+00
+189 sessions 0001_initial 2024-08-27 09:58:03.753999+00
+190 site 0001_announcement 2024-08-27 09:58:03.773676+00
+191 site 0002_announcement_tweaks 2024-08-27 09:58:04.028622+00
+192 site 0003_siteupdate 2024-08-27 09:58:04.041775+00
+193 site 0004_siteupdate_tweaks 2024-08-27 09:58:04.048811+00
+194 site 0005_siteupdate_default_related_name 2024-08-27 09:58:04.055683+00
+195 site 0006_django_4_0 2024-08-27 09:58:04.145531+00
+196 mapdata 0001_squashed_2018 2024-08-27 09:58:04.152164+00
+197 editor 0001_squashed_2018 2024-08-27 09:58:04.15528+00
+198 mapdata 0107_altitudearea_multiple_points 2024-09-24 10:03:02.577602+00
+199 mapdata 0108_in_legend 2024-09-24 10:03:02.833749+00
+200 mapdata 0109_accesspermissionssogrant_accesspermission_sso_grant 2024-09-24 10:03:03.120676+00
+201 mapdata 0110_theme_icon_path_theme_leaflet_marker_config 2024-09-24 10:03:03.142018+00
+\.
+
+
+--
+-- Data for Name: django_session; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.django_session (session_key, session_data, expire_date) FROM stdin;
+amvzk9pgex1m82ry1kzdx25pszsej2or e30:1sisys:ZBLYTXPW4Mst-LCrO5xpvF3ncqA7l9oZVXwrhyE4wWQ 2024-09-10 09:59:18.364971+00
+4hovxfellnv5gkn8gvpjkg41m1723c50 e30:1snM7G:UekKIessh996E-RmJDoSZpNXjv1WZlcXCyTU2vebGSA 2024-09-22 17:54:26.072226+00
+dv9skqjm3ux1p9nluyuu56n5sso8xgh5 .eJxVjrkOwyAQRP9la8sCfHCU6fMNCHY3hhy2ZOMqyr8HSy6SdubN07zBh70kv2-8-kzgQELzm8WAD56Pgu5hnpYWl7msObYH0p7t1l4X4uflZP8EKWyprmM0QySpUXcChVRS4mCiMdwba6ymfuy0soMVo2aBpCjoUSlx642oy6CqFFM9wBsXcLIByitj8Uy55HkCV9adGyiJXwxOfL4COUZd:1sqV5O:ojREBcqoUHbyE-TRbY9cEXF3RPxC4y-kcAr3qboRQtU 2024-10-01 10:05:30.172933+00
+5xe6jji23iln8m5xvo0vyfe5eebi5chr e30:1st1ml:tbKISLK_GjatJxEjzSyqJJuDy4JDglctKtfWbCwkM_8 2024-10-08 09:24:43.211555+00
+fworhxwo4qsqrhlvpddnf6h59higwz3t e30:1sqU0l:MkZWje9AwTXlTXak9zAoh7yOKlrrR3xrEmhWTIyTD2I 2024-10-01 08:56:39.666121+00
+l8miuu132yek6hqkv38ae27nwbzpwhik e30:1sqU0l:MkZWje9AwTXlTXak9zAoh7yOKlrrR3xrEmhWTIyTD2I 2024-10-01 08:56:39.677817+00
+kbx8kfya72l81fzz9ii640h5n0lmwg9i eyJ0aGVtZSI6MH0:1st1ns:K_Y6Ur37_ksB3hSVBBU9porQ8g8jlxo4hlQVNUU_72w 2024-10-08 09:25:52.412981+00
+fwflkpv9b5xy8q72cbe6q429mfspzww7 .eJxNzDEKgDAMBdC7_NlFx16mBBuhGE1po0XEu1vRwfUN70TWzdhrsqhrgTuxaGA4TFSMi6FDJZl9ScyhceCJNnn5sCOx75uSiNafDY_tGkOz3JYcx-_HqnkhwXXdjEorUQ:1sne7R:51tDVOqUFko6t1YzgnBM3LNjJ0Y0SnT5HsKGu_qM614 2024-09-23 13:07:49.089044+00
+q8m07j89qos02p9auhqky6pp03ob2krz e30:1sngGx:7eKDZWGa-25u7FaYQlzNsrnrCUr5sMT1yK9cptHUN5E 2024-09-23 15:25:47.510524+00
+27nlikabtzgx9twchu43xq8s4r3rv1du e30:1sngGx:7eKDZWGa-25u7FaYQlzNsrnrCUr5sMT1yK9cptHUN5E 2024-09-23 15:25:47.562451+00
+vnbjrnbm0qrwaiu3b3zv1u5krc7lov49 e30:1sjbnL:theokb1P_6Ah1vG1iyD7OuL4Wa5hyLIr37tmMz-Yi9Q 2024-09-12 09:50:23.897761+00
+51wj5enr83qlh1y8m9gxfbvx2sqsgq07 e30:1sjbnL:theokb1P_6Ah1vG1iyD7OuL4Wa5hyLIr37tmMz-Yi9Q 2024-09-12 09:50:23.905553+00
+ei17awdyef1h0cf88icch72tt72l904x e30:1snIBI:6YTHXawaY6C4mhclD2aS52Mtplo71U1svQ0R1wgF1aQ 2024-09-22 13:42:20.810821+00
+kxjxyug1szrlfxmgpcqhzv22hwdsdfb7 e30:1snIBI:6YTHXawaY6C4mhclD2aS52Mtplo71U1svQ0R1wgF1aQ 2024-09-22 13:42:20.891774+00
+2sqgh1eez736yycp9ye1vfn57zpgr96z e30:1sngSo:82f8NvHNkGa6KiC_xppFSubGLpuWHpHvlAPlkblQrR4 2024-09-23 15:38:02.237571+00
+7c4pat9ia3590od8nnlkuyw5rqkkixtv e30:1sngSo:82f8NvHNkGa6KiC_xppFSubGLpuWHpHvlAPlkblQrR4 2024-09-23 15:38:02.347145+00
+fsunuzk5s3j41te85rqqzws0y3mt9ihl .eJxVjrkOwyAQRP9la8sCfHCU6fMNCHY3hhy2ZOMqyr8HSy6SdubN07zBh70kv2-8-kzgQELzm8WAD56Pgu5hnpYWl7msObYH0p7t1l4X4uflZP8EKWyprmM0QySpUXcChVRS4mCiMdwba6ymfuy0soMVo2aBpCjoUSlx642oy6CqtCR-MTjRAKZ6hTcu4FQDlFfG4plyyfMErqw7f77shEZe:1stlXP:u8QsfdZbgKrz7zquI3z3RuCNIFKLZyTZ9zrJCdBdSoU 2024-10-10 10:15:55.164456+00
+id9pv62xyn92ahnefr4210edrkodeuf3 e30:1sze1A:fFBWSCLSxkvcG4IUMiMWFzeoH5Lwbp1LQjRtIr4kR8Y 2024-10-26 15:26:56.468238+00
+rgyoqr9kt4q5hp2x1zkp1estiv1bzw5c e30:1t0Fne:EyQsIXzexCQvCqWzuahDcCWoXcV3ID9XQiT79fCRvFg 2024-10-28 07:47:30.932495+00
+ci83dj1uq0qyowc0kgld08nedz3zkzzi e30:1stibl:N7SVwoTd7Gn1cV1AClys4ydxGXZhZs4Ird7PTWdIBCA 2024-10-10 07:08:13.07702+00
+bqymqssw92jj8k67t1qb7jka29z7v8mc .eJxNzEEKgCAQQNG7zLpNLb2MSI4gWSM6JiLevYlctH18fodEhVFTZE9XBtXhJIugwJnMmBkWqCYcOkdEK2zRmRI-btwi6lXU3OTtz7bXQqAqluSS_D7_Mx3jAV-QKts:1t0GJi:QGcAJpkUuYtNynAmgbMEJKJaAsYtcyFlECfdH-m7Ugk 2024-10-28 08:20:38.207074+00
+oti396jz8a5is79ywv018b9c0yzyrv20 e30:1t2vKs:6_9G7fpVV5H9eGLlXMNIS--xw4zQDvdFhAuWkx_Imb0 2024-11-04 16:32:50.494131+00
+frh7shgsyutsdk76ko6va3adqhwl24pt e30:1t2vKs:6_9G7fpVV5H9eGLlXMNIS--xw4zQDvdFhAuWkx_Imb0 2024-11-04 16:32:50.563172+00
+du6i1y35imkqnpjw9eontbwhlxcthnyr e30:1t3xkc:mcf8V6aMWq9oCnuWdB042ZsvkbZOvU6bEJ6C28MFNxo 2024-11-07 13:19:42.27057+00
+22ky2dvil1mzjkge4l2w781k9llxrun4 .eJxVjkEOwiAURO_CuiGAtECX7j0Dgf-_BTVtAnRlvLs06UK3M29e5s182Fvye6XiM7KZSTb8ZjHAk9ajwEdYl43DtraSIz8QfraV3zak1_Vk_wQp1NTXMdoxojRgLgKEVFLCaKO1pK2zzqCeLka50YnJkABUGMyklLhrK_oyqC6F1A9QpcZmPTDMhaB5wtzyurC5lZ0-X1FqQ3M:1t4HCF:le4fcDuRrAolkiAZByxprxoBdC3KTDEtSt3V5ahm8xc 2024-11-08 10:05:31.458212+00
+m5fqocfdl1ano9n7zm0abev7rc1ygm1h e30:1t3xkc:mcf8V6aMWq9oCnuWdB042ZsvkbZOvU6bEJ6C28MFNxo 2024-11-07 13:19:42.426527+00
+flff3bukysca7jty72fyvnpog017eh4o e30:1t3xlG:1hmMWR5LVInGbxmw92Yu6EFzs9p6BYFKz6mpKvfcut8 2024-11-07 13:20:22.134477+00
+32e3enrs3s3j6br4liejz6kw1ag9rdmp e30:1t3xlG:1hmMWR5LVInGbxmw92Yu6EFzs9p6BYFKz6mpKvfcut8 2024-11-07 13:20:22.185861+00
+ow694isitijclav0ap763b3woz0hvm4l e30:1t2s5t:OfrKMJvPRdweQkRSgNLNB-loXQZRdfX-uQgJVAWNJj8 2024-11-04 13:05:09.134775+00
+\.
+
+
+--
+-- Data for Name: editor_changedobject; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.editor_changedobject (id, created, existing_object_pk, updated_fields, m2m_added, m2m_removed, deleted, changeset_id, content_type_id) FROM stdin;
+23 2024-10-27 10:01:39.992448+00 \N {"category": 5, "can_describe": false, "label_settings": 1, "title__i18n__en": "Crane Hall BOF meetings"} {} {} f 5 34
+25 2024-10-28 10:27:30.241382+00 \N {"space": 36, "geometry": {"type": "Point", "coordinates": [236.47, 217.71]}, "external_url": "https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/", "title__i18n__en": "Crane Hall BOF meetings"} {} {} f 6 36
+26 2024-10-28 10:27:56.272718+00 152 {} {} {} t 6 34
+27 2024-10-28 10:38:53.342045+00 153 {"geometry": {"type": "Point", "coordinates": [222.31, 217.56]}, "label_settings": 1} {} {} f 7 36
+28 2024-10-28 10:54:03.336259+00 106 {"title__i18n__en": "Access to President's Office (NOI Board)"} {} {} f 8 36
+\.
+
+
+--
+-- Data for Name: editor_changeset; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.editor_changeset (id, created, state, title, description, assigned_to_id, author_id, last_change_id, last_cleaned_with_id, last_state_update_id, last_update_id, map_update_id) FROM stdin;
+5 2024-10-27 10:01:39.987629+00 applied Add Crane Hall BOF meetings add the POI for the BOF meetings in the Crane Hall 1 1 12 1822 16 16 1823
+6 2024-10-27 10:15:56.996907+00 applied Add Crane Hall BOF meetings Add BOF meetings location 1 1 19 1823 23 23 1824
+7 2024-10-28 10:38:53.340637+00 applied Change label BOF meetings Add and move BOF meetings label 1 1 \N 1824 27 27 1825
+8 2024-10-28 10:54:03.335676+00 applied Modify Access President room label Add NOI Board to label 1 1 \N 1825 31 31 1826
+\.
+
+
+--
+-- Data for Name: editor_changesetupdate; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.editor_changesetupdate (id, datetime, comment, state, title, description, objects_changed, assigned_to_id, changeset_id, user_id) FROM stdin;
+11 2024-10-27 10:05:24.122876+00 \N \N \N t \N 5 1
+12 2024-10-27 10:08:25.573123+00 \N \N \N t \N 5 1
+13 2024-10-27 10:10:06.688136+00 \N Add Crane Hall BOF meetings add the POI for the BOF meetings in the Crane Hall f \N 5 1
+14 2024-10-27 10:10:15.582027+00 \N proposed \N \N f \N 5 1
+15 2024-10-27 10:10:30.161808+00 \N review \N \N f 1 5 1
+16 2024-10-27 10:10:35.45748+00 \N applied \N \N f \N 5 1
+17 2024-10-27 10:15:57.171981+00 \N \N \N t \N 6 \N
+18 2024-10-28 10:27:30.247929+00 \N \N \N t \N 6 1
+19 2024-10-28 10:27:56.27351+00 \N \N \N t \N 6 1
+20 2024-10-28 10:35:07.946298+00 \N Add Crane Hall BOF meetings Add BOF meetings location f \N 6 1
+21 2024-10-28 10:35:10.718123+00 \N proposed \N \N f \N 6 1
+22 2024-10-28 10:35:16.868547+00 \N review \N \N f 1 6 1
+23 2024-10-28 10:35:30.293212+00 \N applied \N \N f \N 6 1
+24 2024-10-28 10:39:55.938127+00 \N Change label BOF meetings Add and move BOF meetings label f \N 7 1
+25 2024-10-28 10:39:57.50337+00 \N proposed \N \N f \N 7 1
+26 2024-10-28 10:39:59.544028+00 \N review \N \N f 1 7 1
+27 2024-10-28 10:40:03.615256+00 \N applied \N \N f \N 7 1
+28 2024-10-28 10:55:26.062094+00 \N Modify Access President room label Add NOI Board to label f \N 8 1
+29 2024-10-28 10:55:27.527888+00 \N proposed \N \N f \N 8 1
+30 2024-10-28 10:55:29.420802+00 \N review \N \N f 1 8 1
+31 2024-10-28 10:55:32.590528+00 \N applied \N \N f \N 8 1
+\.
+
+
+--
+-- Data for Name: mapdata_accesspermission; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accesspermission (id, expire_date, can_grant, unique_key, access_restriction_id, author_id, token_id, user_id, access_restriction_group_id, session_token, sso_grant_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_accesspermissionssogrant; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accesspermissionssogrant (id, provider, "group", access_restriction_id, access_restriction_group_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_accesspermissiontoken; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accesspermissiontoken (id, token, valid_until, unlimited, redeemed, can_grant, unique_key, data, author_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_accessrestriction; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accessrestriction (id, titles, public) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_accessrestriction_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accessrestriction_groups (id, accessrestriction_id, accessrestrictiongroup_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_accessrestrictiongroup; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_accessrestrictiongroup (id, titles) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_altitudearea; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_altitudearea (id, geometry, altitude, level_id, import_tag, points) FROM stdin;
+3 {"type": "Polygon", "coordinates": [[[272.79, 223.14], [272.72, 223.14], [272.72, 223.13], [274.51, 223.13], [280.61, 223.11], [280.61, 223.08], [275.82, 223.08], [275.81, 209.71], [283.49, 209.71], [283.49, 223.08], [282.75, 223.08], [282.75, 223.1], [284.05, 223.1], [284.05, 222.57], [284.46, 222.57], [284.46, 222.37], [284.04, 222.37], [284.05, 211.96], [301.6, 211.96], [301.6, 222.38], [288.02, 222.37], [288.02, 222.57], [299.94, 222.57], [299.94, 223.15], [304.78, 223.15], [304.78, 223.03], [302.25, 223.03], [302.16, 199.75], [315.52, 199.75], [315.52, 223.03], [306.51, 223.03], [306.51, 223.15], [316.04, 223.15], [316.04, 229.84], [306.67, 229.84], [306.67, 230.0], [315.52, 230.0], [315.52, 244.57], [302.23, 244.57], [302.23, 230.0], [304.96, 230.0], [304.96, 229.84], [301.62, 229.84], [301.62, 240.06], [282.67, 240.05], [282.67, 240.25], [283.45, 240.23], [283.45, 243.05], [280.8, 243.05], [280.8, 240.29], [281.88, 240.27], [281.88, 240.05], [280.84, 240.05], [280.82, 233.84], [276.4, 233.84], [276.4, 234.09], [280.54, 234.09], [280.56, 245.24], [275.09, 245.24], [275.09, 234.09], [275.19, 234.09], [275.19, 233.84], [274.49, 233.84], [274.49, 234.0], [272.79, 234.0], [272.79, 223.14]], [[286.29, 222.37], [286.15, 222.37], [286.14, 222.57], [286.29, 222.57], [286.29, 222.37]], [[288.95, 229.86], [288.95, 234.43], [298.97, 234.44], [298.97, 229.86], [288.95, 229.86]], [[285.98, 232.63], [285.98, 231.68], [285.82, 231.68], [285.82, 231.99], [283.95, 231.99], [283.95, 230.3], [286.45, 230.3], [286.45, 229.86], [283.46, 229.86], [283.46, 234.45], [286.45, 234.45], [286.45, 234.02], [283.95, 234.02], [283.95, 232.32], [285.82, 232.32], [285.82, 232.63], [285.98, 232.63]]]} -5.00 10 \N \N
+319 {"type": "Polygon", "coordinates": [[[248.98, 132.78], [248.95, 133.05], [248.93, 133.31], [249.58, 133.37], [249.25, 136.9], [252.65, 137.21], [252.6, 137.91], [252.91, 137.94], [253.18, 137.96], [253.44, 137.99], [257.51, 138.35], [257.77, 138.38], [258.05, 138.4], [258.37, 138.43], [258.42, 137.74], [269.81, 138.8], [269.75, 139.48], [269.98, 139.5], [270.26, 139.53], [270.53, 139.55], [271.7, 139.66], [271.72, 139.44], [271.74, 139.24], [271.87, 138.0], [267.04, 137.54], [267.11, 136.59], [272.35, 137.07], [273.26, 127.01], [272.34, 137.49], [273.55, 137.6], [273.54, 137.7], [272.35, 137.59], [272.17, 139.25], [274.22, 139.46], [274.18, 139.93], [276.59, 140.15], [276.8, 138.01], [276.29, 137.96], [276.29, 137.85], [278.73, 138.08], [278.78, 137.51], [278.88, 137.51], [278.8, 138.32], [278.45, 138.26], [277.93, 143.73], [298.3, 145.79], [300.23, 125.07], [280.22, 123.24], [279.93, 126.35], [279.8, 126.34], [280.09, 123.21], [278.08, 123.02], [278.29, 120.53], [277.97, 120.5], [277.98, 120.4], [279.71, 120.55], [280.1, 116.13], [277.53, 115.88], [277.11, 120.32], [277.19, 120.33], [277.18, 120.43], [276.83, 120.4], [276.85, 120.29], [276.97, 120.3], [277.36, 115.87], [274.35, 115.6], [273.92, 120.01], [276.07, 120.21], [276.06, 120.34], [275.97, 120.33], [275.97, 120.38], [275.85, 120.36], [275.85, 120.31], [273.93, 120.14], [273.72, 122.27], [275.64, 122.43], [275.71, 121.77], [275.82, 121.78], [275.72, 122.77], [273.65, 122.59], [273.65, 122.61], [265.19, 121.84], [264.98, 123.97], [254.68, 122.99], [253.85, 123.36], [253.29, 123.74], [252.79, 124.22], [252.34, 124.92], [251.29, 135.14], [261.95, 136.12], [261.87, 137.05], [259.39, 136.82], [250.34, 135.98], [250.34, 135.97], [250.26, 135.96], [250.88, 129.87], [249.67, 129.76], [249.68, 129.64], [249.27, 129.6], [249.0, 132.51], [248.98, 132.78]], [[249.64, 133.38], [249.66, 133.09], [249.67, 132.96], [249.64, 133.38]], [[295.26, 131.15], [295.29, 130.8], [297.19, 130.99], [297.16, 131.32], [295.26, 131.15]], [[295.63, 136.96], [295.67, 136.63], [296.01, 136.66], [295.99, 137.0], [295.63, 136.96]], [[295.7, 140.02], [295.36, 139.99], [295.39, 139.65], [295.73, 139.68], [295.7, 140.02]], [[289.4, 130.61], [289.43, 130.26], [291.34, 130.45], [291.31, 130.79], [289.4, 130.61]], [[289.73, 136.42], [289.76, 136.09], [290.1, 136.12], [290.07, 136.45], [289.73, 136.42]], [[289.8, 139.48], [289.45, 139.44], [289.48, 139.11], [289.83, 139.14], [289.8, 139.48]], [[283.53, 130.08], [283.56, 129.74], [285.47, 129.89], [285.43, 130.25], [283.53, 130.08]], [[283.88, 135.89], [283.91, 135.54], [284.27, 135.58], [284.23, 135.92], [283.88, 135.89]], [[283.59, 138.91], [283.62, 138.56], [283.99, 138.59], [283.95, 138.95], [283.59, 138.91]], [[279.08, 134.26], [279.5, 129.7], [277.69, 129.53], [277.76, 128.27], [279.62, 128.37], [279.67, 127.78], [279.79, 127.79], [279.01, 136.06], [278.92, 136.05], [278.97, 135.42], [277.16, 135.26], [277.27, 134.14], [279.08, 134.26]], [[270.93, 128.9], [271.03, 127.98], [272.81, 128.11], [272.71, 129.05], [270.93, 128.9]], [[270.45, 134.46], [270.5, 133.56], [272.32, 133.69], [272.23, 134.62], [270.45, 134.46]], [[267.48, 127.67], [267.49, 127.31], [268.85, 127.44], [268.81, 127.78], [267.48, 127.67]], [[266.82, 134.49], [266.86, 134.14], [268.22, 134.26], [268.16, 134.6], [266.82, 134.49]], [[264.1, 136.31], [265.24, 136.42], [265.16, 137.36], [264.05, 137.26], [264.1, 136.31]], [[263.35, 127.27], [263.38, 126.93], [264.74, 127.02], [264.71, 127.42], [263.35, 127.27]], [[262.7, 134.11], [262.73, 133.74], [264.11, 133.86], [264.07, 134.24], [262.7, 134.11]], [[260.54, 126.65], [260.5, 127.0], [259.35, 126.91], [259.25, 127.87], [258.86, 127.82], [259.01, 126.51], [260.54, 126.65]], [[258.74, 133.37], [259.89, 133.51], [259.85, 133.84], [258.32, 133.7], [258.46, 132.42], [258.85, 132.46], [258.74, 133.37]], [[253.0, 137.17], [253.08, 137.18], [252.66, 137.14], [253.0, 137.17]], [[253.08, 137.18], [253.05, 137.53], [253.07, 137.24], [253.08, 137.18]], [[253.05, 137.53], [256.28, 137.82], [253.48, 137.57], [253.22, 137.55], [253.05, 137.53]]]} 1.00 2 \N \N
+106 {"type": "MultiPolygon", "coordinates": [[[[343.99, 201.08], [338.21, 201.08], [338.21, 207.65], [343.99, 207.64], [343.99, 201.08]], [[342.74, 202.61], [342.74, 206.19], [339.69, 206.19], [339.69, 202.61], [342.74, 202.61]]], [[[421.64, 207.7], [426.99, 207.72], [426.99, 201.35], [421.64, 201.35], [421.64, 207.7]], [[422.62, 206.17], [422.62, 202.6], [425.57, 202.6], [425.57, 206.17], [422.62, 206.17]]]]} 5.00 37 \N \N
+277 {"type": "Polygon", "coordinates": [[[284.05, 210.67], [284.05, 209.31], [301.53, 209.31], [301.53, 210.67], [284.05, 210.67]]]} -4.23 11 \N \N
+4 {"type": "MultiPolygon", "coordinates": [[[[198.82, 114.05], [198.77, 115.5], [200.53, 115.55], [200.48, 114.05], [198.82, 114.05]]], [[[270.36, 198.24], [270.36, 198.23], [268.92, 198.23], [270.36, 198.24]]], [[[343.92, 157.08], [353.88, 157.08], [362.27, 157.89], [353.97, 157.05], [343.92, 157.08]]], [[[270.62, 201.23], [269.47, 201.23], [269.47, 201.24], [269.44, 201.24], [269.44, 201.23], [251.96, 201.23], [251.96, 200.52], [259.45, 200.52], [259.42, 192.41], [240.04, 192.41], [240.04, 200.52], [250.47, 200.52], [250.46, 201.23], [239.73, 201.23], [239.73, 198.92], [235.34, 198.92], [235.34, 201.25], [215.82, 201.25], [215.82, 203.44], [235.53, 203.44], [235.53, 203.75], [239.58, 203.75], [239.59, 205.04], [239.59, 203.39], [263.91, 203.39], [263.91, 206.18], [263.73, 206.18], [263.73, 206.1], [260.14, 206.1], [260.14, 208.71], [264.21, 208.69], [264.21, 207.11], [263.73, 207.11], [263.73, 206.9], [263.91, 206.9], [263.91, 206.91], [265.21, 206.91], [265.21, 207.17], [264.39, 207.17], [264.39, 208.67], [266.72, 208.66], [266.72, 207.17], [265.95, 207.17], [265.95, 206.91], [266.94, 206.91], [266.94, 206.89], [267.11, 206.89], [267.11, 207.16], [266.89, 207.16], [266.9, 208.67], [270.3, 208.68], [270.3, 206.08], [267.12, 206.09], [267.12, 206.1], [266.94, 206.1], [266.94, 203.47], [269.44, 203.47], [269.44, 203.46], [269.46, 203.46], [269.46, 203.47], [270.63, 203.47], [270.63, 204.15], [270.4, 204.15], [270.4, 203.71], [267.26, 203.71], [267.26, 205.83], [270.4, 205.8], [270.4, 205.08], [270.64, 205.08], [270.64, 206.15], [272.37, 206.15], [272.37, 205.42], [272.66, 205.42], [272.66, 207.36], [274.5, 207.36], [274.5, 207.3], [274.99, 207.3], [274.99, 205.44], [275.11, 205.44], [275.11, 205.42], [283.42, 205.42], [283.42, 194.36], [283.68, 194.36], [283.68, 194.29], [272.7, 194.29], [272.7, 194.23], [302.38, 194.13], [302.41, 200.83], [337.54, 200.75], [337.54, 185.02], [352.38, 185.02], [352.38, 180.37], [422.1, 180.52], [422.1, 184.79], [427.34, 184.8], [427.48, 198.98], [426.57, 198.98], [426.56, 190.86], [414.02, 190.85], [414.03, 189.37], [413.95, 189.37], [413.95, 189.21], [414.01, 189.21], [414.01, 186.02], [411.86, 186.02], [411.86, 189.21], [412.34, 189.21], [412.34, 189.36], [411.87, 189.36], [411.81, 195.58], [421.62, 195.58], [421.63, 198.79], [421.34, 198.79], [421.34, 197.36], [419.78, 197.36], [419.81, 201.18], [412.0, 201.22], [412.0, 207.34], [420.99, 207.34], [420.99, 201.31], [420.77, 201.31], [420.77, 200.51], [421.34, 200.51], [421.34, 200.43], [421.63, 200.43], [421.63, 200.44], [421.91, 200.44], [421.91, 201.15], [423.2, 201.15], [423.2, 201.35], [421.64, 201.35], [421.64, 207.7], [426.99, 207.72], [426.99, 201.35], [424.95, 201.35], [424.95, 201.15], [426.57, 201.15], [426.57, 200.72], [427.5, 200.72], [427.5, 201.0], [440.17, 201.0], [440.19, 164.3], [396.06, 160.7], [399.94, 124.9], [389.56, 123.88], [386.49, 153.69], [364.71, 151.88], [354.13, 151.04], [343.88, 151.12], [343.89, 157.08], [343.92, 157.08], [343.89, 151.17], [354.19, 151.27], [364.46, 152.22], [363.92, 158.05], [365.09, 158.17], [353.88, 157.25], [343.62, 157.25], [343.62, 150.0], [298.72, 146.28], [276.27, 144.15], [276.32, 143.58], [277.46, 143.69], [278.01, 138.07], [277.6, 142.23], [276.65, 142.16], [277.04, 137.98], [276.65, 142.12], [276.39, 142.09], [276.45, 141.51], [274.05, 141.28], [274.01, 141.78], [273.58, 141.74], [273.6, 141.52], [273.77, 141.54], [273.93, 139.67], [272.17, 139.5], [272.01, 141.37], [272.73, 141.44], [272.71, 141.67], [271.97, 141.6], [271.82, 143.16], [272.82, 143.25], [272.76, 143.82], [271.2, 143.67], [271.7, 139.66], [270.53, 139.55], [270.48, 140.23], [257.45, 139.03], [257.51, 138.35], [253.44, 137.99], [253.37, 138.64], [247.78, 138.13], [248.29, 132.44], [249.0, 132.51], [249.26, 129.73], [242.74, 129.16], [242.76, 129.01], [231.46, 127.99], [231.31, 139.99], [229.09, 144.68], [225.1, 149.11], [218.76, 151.9], [210.52, 151.46], [210.71, 194.43], [215.06, 194.42], [215.06, 191.62], [259.63, 191.62], [259.63, 192.47], [272.66, 192.47], [272.66, 193.31], [272.37, 193.32], [272.37, 192.83], [267.32, 192.84], [267.32, 194.29], [268.93, 194.28], [268.92, 198.23], [268.93, 194.29], [270.36, 194.29], [270.58, 194.29], [270.62, 201.23]], [[293.81, 183.88], [294.19, 184.59], [294.47, 185.63], [294.44, 187.09], [294.0, 188.31], [293.22, 189.28], [291.94, 190.19], [290.22, 190.56], [288.31, 190.09], [287.25, 189.38], [286.38, 188.31], [285.97, 186.72], [285.97, 185.53], [286.22, 184.53], [286.91, 183.5], [287.66, 182.72], [288.63, 182.22], [289.47, 181.97], [291.06, 182.03], [292.03, 182.38], [293.03, 182.94], [293.81, 183.88]], [[274.56, 199.78], [274.56, 199.21], [275.1, 199.19], [275.1, 199.78], [274.56, 199.78]], [[275.07, 203.84], [274.54, 203.84], [274.54, 203.3], [275.07, 203.3], [275.07, 203.84]], [[272.37, 204.1], [272.37, 194.36], [272.66, 194.36], [272.66, 204.1], [272.37, 204.1]], [[269.84, 176.84], [270.18, 177.33], [270.41, 178.03], [270.4, 178.69], [270.29, 179.19], [270.09, 179.56], [269.8, 179.94], [269.47, 180.22], [269.1, 180.43], [268.67, 180.58], [268.2, 180.63], [267.74, 180.58], [267.17, 180.38], [266.69, 180.07], [266.21, 179.48], [266.0, 178.89], [265.94, 178.21], [266.08, 177.7], [266.3, 177.23], [266.62, 176.8], [267.02, 176.47], [267.48, 176.23], [268.26, 176.12], [268.79, 176.21], [269.48, 176.55], [269.84, 176.84]]], [[[343.99, 201.08], [343.29, 201.08], [343.29, 200.65], [343.69, 200.65], [343.69, 200.94], [344.15, 200.94], [344.15, 207.31], [352.44, 207.31], [352.44, 201.31], [345.35, 201.31], [345.35, 197.45], [343.69, 197.45], [343.69, 198.97], [343.29, 198.97], [343.29, 195.59], [350.88, 195.59], [350.88, 188.95], [348.51, 188.95], [348.51, 189.49], [348.25, 189.49], [348.24, 190.57], [348.51, 190.57], [348.51, 190.87], [343.34, 190.87], [343.28, 190.63], [338.78, 190.63], [338.78, 201.08], [338.21, 201.08], [338.21, 207.65], [343.99, 207.64], [343.99, 201.08]]], [[[269.09, 229.5], [272.65, 229.5], [272.65, 225.14], [269.09, 225.14], [269.09, 229.5]]], [[[249.11, 234.45], [249.11, 246.06], [300.43, 246.07], [300.43, 234.45], [249.11, 234.45]]]]} 0.00 2 \N \N
+226 {"type": "Polygon", "coordinates": [[[269.03, 233.92], [266.97, 233.92], [266.97, 230.31], [269.03, 230.31], [269.03, 231.89], [268.77, 231.89], [268.76, 232.33], [269.03, 232.33], [269.03, 233.92]]]} 2.21 85 \N \N
+124 {"type": "MultiPolygon", "coordinates": [[[[339.8, 202.68], [339.8, 202.47], [340.31, 202.47], [340.31, 201.23], [338.52, 201.23], [338.52, 202.68], [339.8, 202.68]]], [[[426.91, 202.72], [426.91, 201.31], [425.01, 201.31], [425.01, 202.68], [425.63, 202.68], [425.63, 202.72], [426.91, 202.72]]]]} 5.33 82 \N \N
+100 {"type": "Polygon", "coordinates": [[[274.51, 213.55], [272.72, 213.55], [272.72, 211.63], [274.5, 211.63], [274.51, 213.55]]]} -4.50 10 \N \N
+179 {"type": "Polygon", "coordinates": [[[277.82, 139.94], [277.75, 140.74], [276.8, 140.65], [276.87, 139.85], [277.82, 139.94]]]} -0.50 11 \N \N
+175 {"type": "Polygon", "coordinates": [[[274.26, 139.27], [274.29, 138.99], [276.72, 139.22], [276.69, 139.5], [274.26, 139.27]]]} -2.16 10 \N \N
+33 {"type": "Polygon", "coordinates": [[[270.36, 197.9], [270.36, 198.2], [268.96, 198.2], [268.96, 197.9], [270.36, 197.9]]]} -5.07 77 \N \N
+34 {"type": "Polygon", "coordinates": [[[270.36, 197.3], [270.36, 197.6], [268.96, 197.6], [268.96, 197.3], [270.36, 197.3]]]} -4.74 77 \N \N
+37 {"type": "Polygon", "coordinates": [[[270.36, 196.4], [270.36, 196.7], [268.96, 196.7], [268.96, 196.4], [270.36, 196.4]]]} -4.25 77 \N \N
+15 {"type": "Polygon", "coordinates": [[[274.81, 183.31], [274.81, 179.37], [274.55, 179.37], [274.55, 179.65], [274.54, 179.65], [274.54, 189.16], [272.22, 189.16], [272.21, 205.58], [270.75, 205.58], [270.75, 204.92], [270.32, 204.92], [270.32, 203.94], [270.74, 203.94], [270.7, 194.23], [270.37, 194.23], [270.37, 194.36], [268.71, 194.37], [268.69, 197.91], [267.38, 197.91], [267.36, 192.56], [270.37, 192.56], [270.37, 192.64], [270.69, 192.64], [270.65, 183.96], [272.76, 183.96], [272.76, 179.67], [272.76, 179.58], [272.76, 179.37], [272.69, 179.37], [272.69, 173.12], [268.0, 173.12], [268.0, 156.12], [269.88, 156.12], [269.88, 153.37], [334.06, 153.37], [334.06, 157.98], [367.13, 157.98], [367.13, 180.44], [350.0, 180.44], [350.0, 183.19], [299.12, 183.19], [299.12, 180.56], [283.56, 180.56], [283.56, 183.31], [274.81, 183.31]]]} -6.21 34 \N \N
+273 {"type": "Polygon", "coordinates": [[[284.05, 205.25], [284.05, 203.9], [301.53, 203.9], [301.53, 205.25], [284.05, 205.25]]]} -2.69 11 \N \N
+271 {"type": "Polygon", "coordinates": [[[284.05, 202.54], [284.05, 201.19], [301.53, 201.19], [301.53, 202.54], [284.05, 202.54]]]} -1.92 11 \N \N
+268 {"type": "Polygon", "coordinates": [[[284.05, 197.12], [284.05, 195.77], [301.53, 195.77], [301.53, 197.12], [284.05, 197.12]]]} -0.38 11 \N \N
+2 {"type": "Polygon", "coordinates": [[[276.49, 141.47], [276.48, 141.59], [276.49, 141.59], [276.35, 143.25], [273.93, 143.04], [273.21, 150.85], [270.11, 150.87], [270.12, 153.04], [269.81, 153.04], [269.81, 155.98], [269.78, 155.98], [269.78, 156.12], [269.88, 156.12], [269.88, 153.37], [334.06, 153.37], [334.06, 158.0], [367.13, 158.06], [367.13, 180.44], [350.0, 180.44], [350.0, 183.19], [299.12, 183.19], [299.12, 180.56], [283.56, 180.56], [283.56, 183.31], [274.81, 183.31], [274.81, 179.37], [274.46, 179.37], [274.46, 181.71], [272.72, 181.71], [272.72, 179.37], [272.69, 179.37], [272.69, 173.12], [268.0, 173.12], [268.0, 156.12], [268.02, 156.12], [268.03, 155.99], [268.01, 155.99], [267.97, 149.0], [271.18, 148.99], [271.9, 141.19], [274.02, 141.37], [274.04, 141.24], [276.49, 141.47]]]} -3.45 10 \N \N
+280 {"type": "MultiPolygon", "coordinates": [[[[270.64, 207.07], [270.66, 211.77], [270.68, 211.77], [270.68, 211.96], [239.59, 211.96], [239.59, 211.59], [239.59, 211.53], [239.59, 211.51], [235.53, 211.5], [235.53, 211.57], [235.54, 211.57], [235.54, 211.96], [205.64, 211.96], [205.64, 223.14], [268.38, 223.22], [268.38, 223.58], [259.65, 223.58], [259.65, 224.91], [260.82, 224.91], [260.82, 225.12], [259.82, 225.12], [259.85, 226.99], [262.01, 226.99], [262.01, 225.12], [261.93, 225.12], [261.93, 224.91], [263.6, 224.91], [263.6, 225.16], [263.44, 225.16], [263.44, 229.52], [265.89, 229.52], [265.89, 225.16], [264.48, 225.16], [264.48, 224.91], [267.63, 224.91], [267.63, 225.16], [266.27, 225.17], [266.26, 229.52], [268.74, 229.52], [268.72, 225.16], [268.57, 225.16], [268.57, 224.91], [271.86, 224.91], [271.86, 223.58], [270.2, 223.58], [270.2, 223.22], [272.22, 223.22], [272.22, 211.96], [272.15, 211.96], [272.15, 211.77], [272.37, 211.77], [272.37, 207.07], [270.64, 207.07]]], [[[272.66, 211.99], [272.66, 222.0], [277.48, 222.0], [277.48, 222.45], [272.73, 222.44], [272.75, 223.59], [271.96, 223.61], [271.92, 224.88], [272.73, 224.88], [272.73, 234.31], [283.53, 234.31], [283.53, 233.45], [284.05, 233.45], [284.05, 232.57], [283.53, 232.57], [283.53, 231.57], [284.03, 231.57], [284.03, 230.76], [283.53, 230.76], [283.53, 229.81], [300.46, 229.81], [300.46, 227.62], [302.65, 227.57], [302.59, 224.95], [300.46, 224.9], [300.46, 222.51], [281.13, 222.46], [281.13, 222.0], [283.42, 222.0], [283.42, 219.95], [275.11, 219.93], [274.99, 219.93], [274.99, 212.03], [274.54, 212.03], [274.54, 211.98], [272.66, 211.99]], [[279.35, 222.46], [279.17, 222.46], [279.17, 222.0], [279.35, 222.0], [279.35, 222.46]]]]} 0.60 2 \N \N
+341 {"type": "Polygon", "coordinates": [[[411.86, 189.21], [411.86, 186.02], [414.01, 186.02], [414.01, 189.21], [413.9, 189.21], [413.9, 189.46], [414.01, 189.46], [414.01, 190.8], [427.24, 190.83], [427.24, 195.42], [426.53, 195.42], [426.54, 197.11], [426.39, 197.11], [426.39, 197.3], [427.08, 197.3], [427.08, 202.42], [422.86, 202.42], [422.8, 203.16], [422.1, 203.22], [422.08, 205.35], [422.82, 205.38], [422.85, 207.52], [422.38, 207.52], [422.38, 207.2], [403.68, 207.16], [403.54, 197.3], [422.17, 197.3], [422.17, 197.1], [422.14, 195.49], [343.48, 195.47], [343.46, 197.08], [343.47, 197.08], [343.47, 197.25], [360.03, 197.25], [360.03, 207.2], [343.83, 207.2], [343.83, 207.55], [342.82, 207.55], [342.83, 205.37], [343.57, 205.37], [343.57, 203.22], [342.78, 203.22], [342.78, 202.5], [338.62, 202.5], [338.62, 197.45], [338.99, 197.45], [338.99, 197.25], [339.29, 197.25], [339.29, 197.11], [339.26, 190.78], [349.83, 190.78], [349.83, 190.64], [348.54, 190.64], [348.54, 190.59], [348.27, 190.59], [348.27, 190.69], [346.42, 190.69], [346.42, 188.99], [348.27, 188.99], [348.27, 189.54], [348.54, 189.54], [348.54, 189.04], [350.58, 189.04], [350.56, 190.78], [411.87, 190.78], [411.87, 189.46], [412.37, 189.46], [412.37, 189.21], [411.86, 189.21]], [[341.71, 197.11], [341.06, 197.11], [341.06, 197.25], [341.71, 197.25], [341.71, 197.11]], [[424.73, 197.3], [424.73, 197.11], [423.95, 197.1], [423.95, 197.3], [424.73, 197.3]]]} 9.05 38 \N \N
+266 {"type": "Polygon", "coordinates": [[[264.39, 207.17], [265.23, 207.17], [265.23, 207.02], [263.85, 207.03], [263.85, 206.84], [263.73, 206.84], [263.73, 207.11], [264.21, 207.11], [264.21, 208.69], [260.14, 208.71], [260.14, 206.1], [263.73, 206.1], [263.73, 206.2], [263.85, 206.2], [263.82, 201.33], [270.54, 201.3], [270.54, 199.69], [272.71, 199.69], [272.71, 199.25], [274.47, 199.25], [274.47, 212.02], [274.66, 212.02], [274.66, 222.42], [274.53, 222.42], [274.53, 229.98], [283.48, 229.98], [283.48, 230.83], [283.95, 230.83], [283.95, 230.23], [285.79, 230.23], [285.79, 231.93], [283.95, 231.93], [283.95, 231.61], [283.48, 231.61], [283.48, 232.66], [283.95, 232.66], [283.95, 232.3], [285.79, 232.3], [285.79, 234.0], [283.95, 234.0], [283.95, 233.44], [283.48, 233.44], [283.48, 233.99], [272.62, 233.99], [272.62, 232.17], [268.76, 232.17], [268.76, 233.94], [266.97, 233.94], [266.97, 230.34], [272.63, 230.34], [272.7, 203.64], [272.43, 203.64], [272.43, 205.89], [270.62, 205.89], [270.62, 203.47], [266.91, 203.47], [266.91, 206.15], [267.12, 206.15], [267.12, 206.09], [270.3, 206.08], [270.3, 208.68], [266.9, 208.67], [266.89, 207.16], [267.11, 207.16], [267.11, 206.94], [266.91, 206.94], [266.91, 207.0], [265.93, 207.01], [265.93, 207.17], [266.72, 207.17], [266.72, 208.66], [264.39, 208.67], [264.39, 207.17]]]} 9.25 38 \N \N
+104 {"type": "MultiPolygon", "coordinates": [[[[273.77, 141.14], [273.94, 139.44], [272.17, 139.27], [272.01, 140.98], [273.77, 141.14]]], [[[342.07, 157.07], [343.12, 156.77], [350.82, 156.73], [353.91, 157.02], [364.32, 158.05], [364.86, 152.13], [354.29, 151.1], [351.13, 151.08], [343.15, 151.04], [341.79, 151.23], [340.49, 151.57], [339.46, 152.06], [338.54, 152.56], [336.83, 153.94], [335.8, 155.2], [335.2, 156.29], [334.55, 157.98], [341.05, 157.98], [341.05, 157.78], [342.07, 157.07]]], [[[270.36, 205.58], [270.36, 203.59], [267.36, 203.59], [267.36, 205.58], [270.36, 205.58]]], [[[285.79, 230.23], [283.95, 230.23], [283.95, 231.93], [285.79, 231.93], [285.79, 230.23]]], [[[283.95, 234.0], [285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0]]]]} -3.00 11 \N \N
+21 {"type": "MultiPolygon", "coordinates": [[[[334.55, 157.98], [341.05, 157.98], [341.05, 157.78], [342.07, 157.07], [343.12, 156.77], [350.82, 156.73], [353.91, 157.02], [354.92, 157.34], [355.44, 157.62], [355.84, 157.94], [355.84, 158.02], [362.3, 158.03], [361.84, 156.82], [361.26, 155.68], [360.56, 154.73], [359.63, 153.73], [358.53, 152.9], [357.19, 152.16], [355.89, 151.67], [354.83, 151.42], [351.13, 151.08], [343.14, 151.06], [341.79, 151.23], [340.49, 151.57], [339.46, 152.06], [338.54, 152.56], [336.83, 153.94], [335.8, 155.2], [335.2, 156.29], [334.55, 157.98]]], [[[268.96, 197.9], [270.36, 197.9], [270.36, 197.6], [268.96, 197.6], [268.96, 197.9]]], [[[267.36, 205.58], [270.36, 205.58], [270.36, 203.59], [267.36, 203.59], [267.36, 205.58]]]]} -4.90 77 \N \N
+241 {"type": "Polygon", "coordinates": [[[272.39, 230.31], [272.73, 230.31], [272.73, 231.89], [272.39, 231.89], [272.39, 230.31]]]} 4.60 82 \N \N
+364 {"type": "Polygon", "coordinates": [[[274.99, 207.93], [275.11, 207.93], [275.11, 211.43], [274.99, 211.43], [274.99, 211.71], [274.99, 211.98], [274.99, 219.93], [275.11, 219.93], [283.42, 219.95], [283.42, 222.0], [283.68, 222.0], [283.68, 219.95], [283.68, 205.42], [283.68, 194.36], [283.42, 194.36], [283.42, 205.42], [275.11, 205.42], [275.11, 205.44], [274.99, 205.44], [274.99, 207.36], [274.99, 207.65], [274.99, 207.93]], [[275.13, 211.71], [275.13, 211.43], [275.13, 211.37], [275.16, 211.37], [275.16, 212.03], [275.13, 212.03], [275.13, 211.98], [275.13, 211.71]]]} \N 2 \N [{"altitude": 0.6, "coordinates": [275.10900005786385, 219.93]}, {"altitude": 0.6, "coordinates": [275.11, 219.93]}, {"altitude": 0.6, "coordinates": [283.42, 219.94983293556083]}, {"altitude": 0.6, "coordinates": [283.42, 219.95083282099603]}, {"altitude": 0.0, "coordinates": [283.42, 205.41899999999998]}, {"altitude": 0.0, "coordinates": [283.42, 205.42]}, {"altitude": 0.0, "coordinates": [275.11, 205.42]}, {"altitude": 0.0, "coordinates": [275.11, 205.44]}, {"altitude": 0.0, "coordinates": [275.10900000000004, 205.44]}]
+99 {"type": "Polygon", "coordinates": [[[275.07, 201.79], [275.08, 199.68], [277.41, 199.69], [277.41, 202.88], [277.65, 202.88], [277.65, 199.72], [283.42, 199.72], [283.41, 204.08], [277.65, 204.08], [277.65, 203.72], [277.41, 203.72], [277.41, 204.68], [277.63, 204.68], [277.63, 204.33], [283.48, 204.37], [283.48, 209.09], [277.63, 209.09], [277.63, 205.57], [277.41, 205.57], [277.41, 206.11], [276.23, 206.1], [276.23, 206.31], [277.44, 206.32], [277.44, 209.11], [275.1, 209.11], [275.1, 206.31], [275.34, 206.31], [275.34, 206.09], [275.12, 206.09], [275.11, 203.2], [274.5, 203.23], [274.5, 204.02], [272.72, 204.02], [272.72, 201.56], [274.49, 201.56], [274.49, 201.83], [275.07, 201.79]]]} -4.10 10 \N \N
+11 {"type": "Polygon", "coordinates": [[[272.87, 185.46], [274.47, 185.46], [274.48, 192.1], [272.72, 192.1], [272.72, 189.23], [272.36, 189.23], [272.36, 191.91], [272.15, 191.91], [272.15, 207.92], [270.55, 207.92], [270.55, 205.04], [270.25, 205.04], [270.27, 204.06], [270.56, 204.06], [270.57, 194.28], [270.33, 194.29], [270.32, 194.87], [268.94, 194.87], [268.95, 194.23], [268.7, 194.21], [268.71, 195.91], [267.23, 195.92], [267.23, 192.76], [270.54, 192.77], [270.52, 184.39], [272.36, 184.39], [272.36, 185.46], [272.72, 185.46], [272.87, 185.46]]]} -3.60 10 \N \N
+240 {"type": "Polygon", "coordinates": [[[283.6, 230.01], [283.6, 233.99], [272.65, 233.99], [272.65, 230.01], [283.6, 230.01]]]} 4.60 37 \N \N
+363 {"type": "Polygon", "coordinates": [[[235.53, 211.5], [239.59, 211.51], [239.59, 205.04], [239.58, 203.75], [235.53, 203.75], [235.53, 211.5]]]} \N 2 \N [{"altitude": 0.6, "coordinates": [235.53, 211.50107246668534]}, {"altitude": 0.6, "coordinates": [235.53, 211.5000724637681]}, {"altitude": 0.6, "coordinates": [239.59, 211.50987922705312]}, {"altitude": 0.6, "coordinates": [239.59, 211.51087911113746]}, {"altitude": 0.0, "coordinates": [239.59, 204.9139961340779]}, {"altitude": 0.0, "coordinates": [239.59, 205.04333333333273]}, {"altitude": 0.0, "coordinates": [239.58, 203.75]}, {"altitude": 0.0, "coordinates": [235.53, 203.75]}, {"altitude": 0.0, "coordinates": [235.53, 203.749]}]
+171 {"type": "Polygon", "coordinates": [[[274.29, 138.99], [272.11, 138.78], [272.53, 134.17], [278.53, 134.67], [278.21, 137.99], [276.85, 137.9], [276.72, 139.22], [274.29, 138.99]]]} -2.00 10 \N \N
+70 {"type": "MultiPolygon", "coordinates": [[[[276.75, 141.18], [277.7, 141.28], [277.72, 141.02], [276.77, 140.92], [276.75, 141.18]]], [[[270.36, 194.09], [268.93, 194.09], [268.93, 194.3], [270.36, 194.3], [270.36, 194.09]]], [[[301.53, 194.38], [284.05, 194.38], [284.05, 195.77], [301.53, 195.77], [301.53, 194.38]]], [[[272.74, 233.92], [272.73, 232.33], [272.67, 232.33], [272.67, 233.92], [272.74, 233.92]]]]} 0.00 11 \N \N
+270 {"type": "Polygon", "coordinates": [[[284.05, 201.19], [284.05, 199.83], [301.53, 199.83], [301.53, 201.19], [284.05, 201.19]]]} -1.54 11 \N \N
+269 {"type": "Polygon", "coordinates": [[[284.05, 198.48], [284.05, 197.12], [301.53, 197.12], [301.53, 198.48], [284.05, 198.48]]]} -0.77 11 \N \N
+276 {"type": "Polygon", "coordinates": [[[284.05, 209.31], [284.05, 207.96], [301.53, 207.96], [301.53, 209.31], [284.05, 209.31]]]} -3.85 11 \N \N
+274 {"type": "Polygon", "coordinates": [[[284.05, 206.6], [284.05, 205.25], [301.53, 205.25], [301.53, 206.6], [284.05, 206.6]]]} -3.08 11 \N \N
+92 {"type": "MultiPolygon", "coordinates": [[[[268.93, 196.1], [268.93, 196.4], [270.36, 196.4], [270.36, 196.1], [268.93, 196.1]]], [[[301.53, 199.83], [301.53, 198.48], [284.05, 198.48], [284.05, 199.83], [301.53, 199.83]], [[300.36, 199.75], [299.83, 199.75], [299.83, 199.24], [300.36, 199.24], [300.36, 199.75]], [[286.35, 199.75], [286.35, 199.25], [289.48, 199.25], [289.48, 199.75], [286.35, 199.75]]]]} -1.15 11 \N \N
+275 {"type": "Polygon", "coordinates": [[[284.05, 207.96], [284.05, 206.6], [301.53, 206.6], [301.53, 207.96], [284.05, 207.96]], [[300.36, 207.4], [299.83, 207.4], [299.83, 207.91], [300.36, 207.91], [300.36, 207.4]], [[289.5, 207.91], [289.49, 207.41], [286.35, 207.41], [286.35, 207.91], [289.5, 207.91]]]} -3.46 11 \N \N
+272 {"type": "Polygon", "coordinates": [[[284.05, 203.9], [284.05, 202.54], [301.53, 202.54], [301.53, 203.9], [284.05, 203.9]], [[300.36, 203.34], [299.83, 203.34], [299.83, 203.84], [300.36, 203.84], [300.36, 203.34]], [[289.5, 203.85], [289.49, 203.34], [286.34, 203.34], [286.34, 203.85], [289.5, 203.85]]]} -2.31 11 \N \N
+278 {"type": "Polygon", "coordinates": [[[284.05, 212.02], [284.05, 210.67], [301.53, 210.67], [301.53, 212.02], [284.05, 212.02]], [[300.36, 211.46], [299.83, 211.46], [299.83, 211.97], [300.36, 211.97], [300.36, 211.46]], [[289.49, 211.97], [289.5, 211.47], [286.34, 211.47], [286.34, 211.97], [289.49, 211.97]]]} -4.62 11 \N \N
+103 {"type": "Polygon", "coordinates": [[[272.72, 223.13], [274.51, 223.13], [274.51, 213.55], [272.72, 213.55], [272.72, 223.13]]]} \N 10 \N [{"altitude": -4.5, "coordinates": [274.50518332496233, 213.55]}, {"altitude": -4.5, "coordinates": [272.72, 213.55]}, {"altitude": -4.5, "coordinates": [272.72, 213.549]}, {"altitude": -4.5, "coordinates": [274.5051828227022, 213.549]}, {"altitude": -5.0, "coordinates": [272.72, 223.131]}, {"altitude": -5.0, "coordinates": [272.72, 223.13]}, {"altitude": -5.0, "coordinates": [274.50999497739826, 223.13]}, {"altitude": -5.0, "coordinates": [274.509995479646, 223.13099997531825]}]
+101 {"type": "Polygon", "coordinates": [[[274.48, 192.1], [272.72, 192.1], [272.72, 201.56], [274.49, 201.56], [274.48, 192.1]]]} \N 10 \N [{"altitude": -3.6, "coordinates": [274.4770022261799, 192.099]}, {"altitude": -3.6, "coordinates": [274.4770035618878, 192.1]}, {"altitude": -3.6, "coordinates": [272.72, 192.1]}, {"altitude": -3.6, "coordinates": [272.72, 192.099]}, {"altitude": -4.1, "coordinates": [272.72, 201.561]}, {"altitude": -4.1, "coordinates": [272.72, 201.56]}, {"altitude": -4.1, "coordinates": [274.4896393588602, 201.56]}, {"altitude": -4.1, "coordinates": [274.4896406944804, 201.56099993432932]}]
+102 {"type": "Polygon", "coordinates": [[[272.72, 211.63], [274.5, 211.63], [274.5, 204.02], [272.72, 204.02], [272.72, 211.63]]]} \N 10 \N [{"altitude": -4.1, "coordinates": [274.50039628327477, 204.019]}, {"altitude": -4.1, "coordinates": [274.5003967855349, 204.02]}, {"altitude": -4.1, "coordinates": [272.72, 204.02]}, {"altitude": -4.1, "coordinates": [272.72, 204.019]}, {"altitude": -4.5, "coordinates": [272.72, 211.631]}, {"altitude": -4.5, "coordinates": [272.72, 211.63]}, {"altitude": -4.5, "coordinates": [274.5042189854345, 211.63]}, {"altitude": -4.5, "coordinates": [274.50421948768224, 211.63099997531825]}]
+355 {"type": "MultiPolygon", "coordinates": [[[[270.64, 206.76], [272.37, 206.76], [272.37, 206.46], [270.64, 206.46], [270.64, 206.76]]], [[[274.99, 211.37], [274.99, 211.43], [275.11, 211.43], [275.11, 207.93], [274.99, 207.93], [274.99, 207.97], [274.5, 207.97], [274.5, 207.93], [272.66, 207.92], [272.66, 211.43], [274.54, 211.43], [274.54, 211.37], [274.99, 211.37]]]]} 0.30 2 \N \N
+358 {"type": "MultiPolygon", "coordinates": [[[[248.95, 137.15], [252.63, 137.5], [252.65, 137.21], [249.25, 136.9], [249.58, 133.37], [249.3, 133.35], [248.95, 137.15]]], [[[269.81, 138.8], [258.42, 137.74], [258.4, 138.01], [269.79, 139.07], [269.81, 138.8]]], [[[276.59, 140.15], [274.18, 139.93], [274.15, 140.19], [276.56, 140.42], [276.59, 140.15]]]]} 0.83 2 \N \N
+360 {"type": "MultiPolygon", "coordinates": [[[[248.29, 132.44], [247.78, 138.13], [253.37, 138.64], [253.44, 137.99], [253.18, 137.96], [253.14, 138.35], [248.07, 137.88], [248.55, 132.74], [248.98, 132.78], [249.0, 132.51], [248.29, 132.44]]], [[[270.48, 140.23], [270.53, 139.55], [270.26, 139.53], [270.22, 139.92], [257.73, 138.78], [257.77, 138.38], [257.51, 138.35], [257.45, 139.03], [270.48, 140.23]]], [[[276.48, 141.24], [274.08, 141.01], [274.05, 141.28], [276.45, 141.51], [276.48, 141.24]]]]} 0.17 2 \N \N
+200 {"type": "Polygon", "coordinates": [[[269.03, 233.92], [266.97, 233.92], [266.97, 230.31], [269.03, 230.31], [269.03, 231.89], [268.77, 231.89], [268.76, 232.33], [269.03, 232.33], [269.03, 233.92]]]} -2.59 11 \N \N
+254 {"type": "Polygon", "coordinates": [[[269.03, 233.92], [266.97, 233.92], [266.97, 230.31], [269.03, 230.31], [269.03, 231.89], [268.77, 231.89], [268.76, 232.33], [269.03, 232.33], [269.03, 233.92]]]} 6.84 82 \N \N
+267 {"type": "MultiPolygon", "coordinates": [[[[283.95, 230.86], [283.59, 230.86], [283.57, 231.59], [283.95, 231.59], [283.95, 231.93], [285.79, 231.93], [285.79, 230.23], [283.95, 230.23], [283.95, 230.86]]], [[[285.79, 232.3], [283.95, 232.3], [283.95, 232.7], [283.56, 232.7], [283.55, 233.45], [283.95, 233.45], [283.95, 234.0], [285.79, 234.0], [285.79, 232.3]]]]} 6.75 82 \N \N
+359 {"type": "MultiPolygon", "coordinates": [[[[248.37, 137.64], [252.89, 138.06], [252.91, 137.94], [252.6, 137.91], [252.61, 137.77], [248.66, 137.4], [249.04, 133.32], [248.93, 133.31], [248.95, 133.05], [248.79, 133.04], [248.37, 137.64]]], [[[269.97, 139.65], [269.98, 139.5], [269.75, 139.48], [269.76, 139.33], [258.38, 138.29], [258.37, 138.43], [258.05, 138.4], [258.04, 138.53], [269.97, 139.65]]], [[[276.53, 140.7], [274.13, 140.47], [274.1, 140.74], [276.5, 140.97], [276.53, 140.7]]], [[[272.66, 211.99], [274.54, 211.98], [274.54, 211.71], [272.66, 211.71], [272.66, 211.99]]]]} 0.50 2 \N \N
+357 {"type": "MultiPolygon", "coordinates": [[[[248.55, 132.74], [248.07, 137.88], [253.14, 138.35], [253.18, 137.96], [252.91, 137.94], [252.89, 138.06], [248.37, 137.64], [248.79, 133.04], [248.95, 133.05], [248.98, 132.78], [248.55, 132.74]]], [[[270.22, 139.92], [270.26, 139.53], [269.98, 139.5], [269.97, 139.65], [258.04, 138.53], [258.05, 138.4], [257.77, 138.38], [257.73, 138.78], [270.22, 139.92]]], [[[274.08, 141.01], [276.48, 141.24], [276.5, 140.97], [274.1, 140.74], [274.08, 141.01]]]]} 0.33 2 \N \N
+14 {"type": "Polygon", "coordinates": [[[274.46, 181.71], [272.72, 181.71], [272.72, 185.46], [274.47, 185.46], [274.46, 181.71]]]} \N 10 \N [{"altitude": -3.45, "coordinates": [274.463124220837, 181.709]}, {"altitude": -3.45, "coordinates": [274.4631255565449, 181.71]}, {"altitude": -3.45, "coordinates": [272.72, 181.71]}, {"altitude": -3.45, "coordinates": [272.72, 181.709]}, {"altitude": -3.6, "coordinates": [272.87, 185.46]}, {"altitude": -3.6, "coordinates": [274.46813446126447, 185.46]}, {"altitude": -3.6, "coordinates": [274.46813579688467, 185.46099993432932]}, {"altitude": -3.6, "coordinates": [272.71900000000005, 185.46]}, {"altitude": -3.6, "coordinates": [272.72, 185.46]}]
+342 {"type": "MultiPolygon", "coordinates": [[[[283.95, 230.23], [283.95, 231.93], [285.79, 231.93], [285.79, 230.23], [283.95, 230.23]]], [[[285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0], [285.79, 234.0]]]]} 2.10 85 \N \N
+315 {"type": "MultiPolygon", "coordinates": [[[[248.95, 137.15], [249.3, 133.35], [249.04, 133.32], [248.66, 137.4], [252.61, 137.77], [252.63, 137.5], [248.95, 137.15]]], [[[269.79, 139.07], [258.4, 138.01], [258.38, 138.29], [269.76, 139.33], [269.79, 139.07]]], [[[274.13, 140.47], [276.53, 140.7], [276.56, 140.42], [274.15, 140.19], [274.13, 140.47]]]]} 0.67 2 \N \N
+145 {"type": "MultiPolygon", "coordinates": [[[[346.42, 190.69], [348.27, 190.69], [348.27, 188.99], [346.42, 188.99], [346.42, 190.69]]], [[[426.91, 203.58], [425.75, 203.58], [425.75, 203.7], [426.91, 203.7], [426.91, 203.58]]], [[[339.8, 203.55], [338.52, 203.55], [338.52, 203.83], [339.8, 203.83], [339.8, 203.55]]], [[[272.73, 231.89], [272.73, 230.31], [272.39, 230.31], [272.39, 231.89], [272.73, 231.89]]]]} 0.00 85 \N \N
+136 {"type": "MultiPolygon", "coordinates": [[[[339.9, 206.23], [339.8, 206.23], [339.8, 206.13], [338.52, 206.13], [338.52, 207.6], [339.9, 207.6], [339.9, 206.23]]], [[[425.55, 207.68], [426.91, 207.68], [426.91, 206.19], [425.63, 206.19], [425.63, 206.44], [425.55, 206.44], [425.55, 207.68]]]]} 7.43 82 \N \N
+27 {"type": "Polygon", "coordinates": [[[270.36, 198.2], [270.36, 199.3], [267.44, 199.29], [267.43, 197.9], [268.69, 197.9], [268.69, 198.23], [268.7, 198.23], [268.93, 198.23], [268.96, 198.23], [268.96, 198.2], [270.36, 198.2]]]} -5.23 77 \N \N
+154 {"type": "MultiPolygon", "coordinates": [[[[339.9, 206.23], [339.8, 206.23], [339.8, 206.13], [338.52, 206.13], [338.52, 207.6], [339.9, 207.6], [339.9, 206.23]]], [[[425.75, 206.4], [425.75, 206.55], [425.71, 206.55], [425.71, 207.68], [426.91, 207.68], [426.91, 206.4], [425.75, 206.4]]]]} 1.83 85 \N \N
+78 {"type": "Polygon", "coordinates": [[[270.36, 198.2], [270.36, 199.3], [267.44, 199.29], [267.43, 198.2], [268.71, 198.2], [268.71, 198.23], [268.93, 198.23], [268.93, 198.2], [270.36, 198.2]]]} -2.29 11 \N \N
+188 {"type": "MultiPolygon", "coordinates": [[[[284.05, 212.02], [284.05, 212.09], [301.53, 212.09], [301.53, 212.02], [284.05, 212.02]]], [[[272.39, 231.89], [272.73, 231.89], [272.73, 230.31], [272.39, 230.31], [272.39, 231.89]]]]} -5.00 11 \N \N
+123 {"type": "MultiPolygon", "coordinates": [[[[341.8, 207.6], [342.12, 207.6], [342.12, 206.24], [341.8, 206.24], [341.8, 207.6]]], [[[423.64, 207.68], [423.64, 206.43], [423.33, 206.43], [423.33, 207.68], [423.64, 207.68]]], [[[271.55, 232.33], [271.55, 233.92], [271.83, 233.92], [271.83, 232.33], [271.55, 232.33]]]]} 8.56 82 \N \N
+113 {"type": "MultiPolygon", "coordinates": [[[[342.43, 206.24], [342.12, 206.24], [342.12, 207.6], [342.43, 207.6], [342.43, 206.24]]], [[[423.33, 207.68], [423.33, 206.43], [423.01, 206.43], [423.01, 207.68], [423.33, 207.68]]], [[[271.83, 232.33], [271.83, 233.92], [272.11, 233.92], [272.11, 232.33], [271.83, 232.33]]]]} 8.73 82 \N \N
+150 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.27], [339.8, 204.98], [338.52, 204.98], [338.52, 205.27], [339.8, 205.27]]], [[[426.91, 205.05], [425.75, 205.05], [425.75, 205.39], [426.91, 205.39], [426.91, 205.05]]], [[[270.71, 230.31], [270.71, 231.89], [270.99, 231.89], [270.99, 230.31], [270.71, 230.31]]]]} 1.02 85 \N \N
+127 {"type": "MultiPolygon", "coordinates": [[[[339.8, 203.54], [339.8, 203.26], [338.52, 203.26], [338.52, 203.54], [339.8, 203.54]]], [[[426.91, 203.3], [425.63, 203.3], [425.63, 203.59], [426.91, 203.59], [426.91, 203.3]]], [[[270.43, 230.31], [270.43, 231.89], [270.71, 231.89], [270.71, 230.31], [270.43, 230.31]]]]} 5.81 82 \N \N
+155 {"type": "MultiPolygon", "coordinates": [[[[340.22, 206.23], [339.9, 206.23], [339.9, 207.6], [340.22, 207.6], [340.22, 206.23]]], [[[425.71, 207.68], [425.71, 206.55], [425.5, 206.55], [425.5, 207.68], [425.71, 207.68]]], [[[269.03, 230.31], [269.03, 231.89], [269.31, 231.89], [269.31, 230.31], [269.03, 230.31]]]]} 2.04 85 \N \N
+137 {"type": "MultiPolygon", "coordinates": [[[[340.22, 206.23], [339.9, 206.23], [339.9, 207.6], [340.22, 207.6], [340.22, 206.23]]], [[[425.23, 207.68], [425.55, 207.68], [425.55, 206.44], [425.23, 206.44], [425.23, 207.68]]]]} 7.59 82 \N \N
+140 {"type": "MultiPolygon", "coordinates": [[[[341.17, 206.23], [340.85, 206.23], [340.85, 207.6], [341.17, 207.6], [341.17, 206.23]]], [[[424.28, 207.68], [424.6, 207.68], [424.6, 206.44], [424.28, 206.44], [424.28, 207.68]]]]} 8.08 82 \N \N
+142 {"type": "MultiPolygon", "coordinates": [[[[341.8, 206.24], [341.48, 206.24], [341.48, 207.6], [341.8, 207.6], [341.8, 206.24]]], [[[423.64, 207.68], [423.96, 207.68], [423.96, 206.43], [423.64, 206.43], [423.64, 207.68]]]]} 8.40 82 \N \N
+114 {"type": "MultiPolygon", "coordinates": [[[[342.75, 206.24], [342.43, 206.24], [342.43, 207.6], [342.75, 207.6], [342.75, 206.24]]], [[[422.69, 207.68], [423.01, 207.68], [423.01, 206.43], [422.69, 206.43], [422.69, 207.68]]]]} 8.89 82 \N \N
+81 {"type": "MultiPolygon", "coordinates": [[[[267.43, 197.3], [267.43, 197.6], [268.71, 197.6], [268.71, 197.3], [267.43, 197.3]]], [[[269.31, 230.31], [269.03, 230.31], [269.03, 231.89], [269.31, 231.89], [269.31, 230.31]]]]} -2.78 11 \N \N
+139 {"type": "MultiPolygon", "coordinates": [[[[340.85, 206.23], [340.53, 206.23], [340.53, 207.6], [340.85, 207.6], [340.85, 206.23]]], [[[424.6, 207.68], [424.91, 207.68], [424.91, 206.44], [424.6, 206.44], [424.6, 207.68]]]]} 7.92 82 \N \N
+141 {"type": "MultiPolygon", "coordinates": [[[[341.48, 206.24], [341.17, 206.23], [341.17, 207.6], [341.48, 207.6], [341.48, 206.24]]], [[[423.96, 207.68], [424.28, 207.68], [424.28, 206.44], [423.96, 206.43], [423.96, 207.68]]]]} 8.24 82 \N \N
+138 {"type": "MultiPolygon", "coordinates": [[[[340.53, 206.23], [340.22, 206.23], [340.22, 207.6], [340.53, 207.6], [340.53, 206.23]]], [[[424.91, 207.68], [425.23, 207.68], [425.23, 206.44], [424.91, 206.44], [424.91, 207.68]]]]} 7.76 82 \N \N
+146 {"type": "MultiPolygon", "coordinates": [[[[426.91, 204.04], [426.91, 203.7], [425.75, 203.7], [425.75, 204.04], [426.91, 204.04]]], [[[339.8, 204.12], [339.8, 203.83], [338.52, 203.83], [338.52, 204.12], [339.8, 204.12]]]]} 0.20 85 \N \N
+147 {"type": "MultiPolygon", "coordinates": [[[[426.91, 204.38], [426.91, 204.04], [425.75, 204.04], [425.75, 204.38], [426.91, 204.38]]], [[[339.8, 204.41], [339.8, 204.12], [338.52, 204.12], [338.52, 204.41], [339.8, 204.41]]]]} 0.41 85 \N \N
+149 {"type": "MultiPolygon", "coordinates": [[[[339.8, 204.98], [339.8, 204.69], [338.52, 204.69], [338.52, 204.98], [339.8, 204.98]]], [[[426.91, 205.05], [426.91, 204.71], [425.75, 204.71], [425.75, 205.05], [426.91, 205.05]]]]} 0.81 85 \N \N
+151 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.56], [339.8, 205.27], [338.52, 205.27], [338.52, 205.56], [339.8, 205.56]]], [[[426.91, 205.73], [426.91, 205.39], [425.75, 205.39], [425.75, 205.73], [426.91, 205.73]]]]} 1.22 85 \N \N
+153 {"type": "MultiPolygon", "coordinates": [[[[339.8, 206.13], [339.8, 205.84], [338.52, 205.84], [338.52, 206.13], [339.8, 206.13]]], [[[426.91, 206.4], [426.91, 206.06], [425.75, 206.06], [425.75, 206.4], [426.91, 206.4]]]]} 1.63 85 \N \N
+117 {"type": "MultiPolygon", "coordinates": [[[[341.77, 202.48], [342.06, 202.48], [342.06, 201.23], [341.77, 201.23], [341.77, 202.48]]], [[[423.62, 201.31], [423.34, 201.31], [423.34, 202.67], [423.62, 202.67], [423.62, 201.31]]]]} 4.36 82 \N \N
+115 {"type": "MultiPolygon", "coordinates": [[[[342.35, 202.48], [342.64, 202.48], [342.64, 201.23], [342.35, 201.23], [342.35, 202.48]]], [[[423.06, 201.31], [422.78, 201.31], [422.78, 202.67], [423.06, 202.67], [423.06, 201.31]]]]} 4.03 82 \N \N
+116 {"type": "MultiPolygon", "coordinates": [[[[342.06, 202.48], [342.35, 202.48], [342.35, 201.23], [342.06, 201.23], [342.06, 202.48]]], [[[423.34, 201.31], [423.06, 201.31], [423.06, 202.67], [423.34, 202.67], [423.34, 201.31]]]]} 4.19 82 \N \N
+118 {"type": "MultiPolygon", "coordinates": [[[[341.48, 202.48], [341.77, 202.48], [341.77, 201.23], [341.48, 201.23], [341.48, 202.48]]], [[[423.9, 201.31], [423.62, 201.31], [423.62, 202.67], [423.9, 202.67], [423.9, 201.31]]]]} 4.52 82 \N \N
+121 {"type": "MultiPolygon", "coordinates": [[[[340.6, 202.47], [340.89, 202.47], [340.89, 201.23], [340.6, 201.23], [340.6, 202.47]]], [[[424.73, 201.31], [424.45, 201.31], [424.45, 202.68], [424.73, 202.68], [424.73, 201.31]]]]} 5.00 82 \N \N
+120 {"type": "MultiPolygon", "coordinates": [[[[340.89, 202.47], [341.18, 202.47], [341.18, 201.23], [340.89, 201.23], [340.89, 202.47]]], [[[424.45, 201.31], [424.17, 201.31], [424.17, 202.68], [424.45, 202.68], [424.45, 201.31]]]]} 4.84 82 \N \N
+122 {"type": "MultiPolygon", "coordinates": [[[[340.31, 202.47], [340.6, 202.47], [340.6, 201.23], [340.31, 201.23], [340.31, 202.47]]], [[[425.01, 201.31], [424.73, 201.31], [424.73, 202.68], [425.01, 202.68], [425.01, 201.31]]]]} 5.16 82 \N \N
+126 {"type": "MultiPolygon", "coordinates": [[[[339.8, 203.26], [339.8, 202.97], [338.52, 202.97], [338.52, 203.26], [339.8, 203.26]]], [[[426.91, 203.3], [426.91, 203.01], [425.63, 203.01], [425.63, 203.3], [426.91, 203.3]]]]} 5.65 82 \N \N
+128 {"type": "MultiPolygon", "coordinates": [[[[339.8, 203.83], [339.8, 203.54], [338.52, 203.54], [338.52, 203.83], [339.8, 203.83]]], [[[426.91, 203.88], [426.91, 203.59], [425.63, 203.59], [425.63, 203.88], [426.91, 203.88]]]]} 5.97 82 \N \N
+130 {"type": "MultiPolygon", "coordinates": [[[[339.8, 204.41], [339.8, 204.12], [338.52, 204.12], [338.52, 204.41], [339.8, 204.41]]], [[[426.91, 204.46], [426.91, 204.17], [425.63, 204.17], [425.63, 204.46], [426.91, 204.46]]]]} 6.30 82 \N \N
+132 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.27], [339.8, 204.98], [338.52, 204.98], [338.52, 205.27], [339.8, 205.27]]], [[[426.91, 205.32], [426.91, 205.03], [425.63, 205.03], [425.63, 205.32], [426.91, 205.32]]]]} 6.78 82 \N \N
+133 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.56], [339.8, 205.27], [338.52, 205.27], [338.52, 205.56], [339.8, 205.56]]], [[[426.91, 205.61], [426.91, 205.32], [425.63, 205.32], [425.63, 205.61], [426.91, 205.61]]]]} 6.95 82 \N \N
+125 {"type": "MultiPolygon", "coordinates": [[[[339.8, 202.97], [339.8, 202.68], [338.52, 202.68], [338.52, 202.97], [339.8, 202.97]]], [[[426.91, 203.01], [426.91, 202.72], [425.63, 202.72], [425.63, 203.01], [426.91, 203.01]]]]} 5.49 82 \N \N
+129 {"type": "MultiPolygon", "coordinates": [[[[339.8, 204.12], [339.8, 203.83], [338.52, 203.83], [338.52, 204.12], [339.8, 204.12]]], [[[426.91, 204.17], [426.91, 203.88], [425.63, 203.88], [425.63, 204.17], [426.91, 204.17]]]]} 6.14 82 \N \N
+131 {"type": "MultiPolygon", "coordinates": [[[[339.8, 204.98], [339.8, 204.69], [338.52, 204.69], [338.52, 204.98], [339.8, 204.98]]], [[[426.91, 205.03], [426.91, 204.74], [425.63, 204.74], [425.63, 205.03], [426.91, 205.03]]]]} 6.62 82 \N \N
+135 {"type": "MultiPolygon", "coordinates": [[[[339.8, 206.13], [339.8, 205.84], [338.52, 205.84], [338.52, 206.13], [339.8, 206.13]]], [[[426.91, 206.19], [426.91, 205.9], [425.63, 205.9], [425.63, 206.19], [426.91, 206.19]]]]} 7.27 82 \N \N
+119 {"type": "MultiPolygon", "coordinates": [[[[341.18, 202.47], [341.48, 202.48], [341.48, 201.23], [341.18, 201.23], [341.18, 202.47]]], [[[424.17, 201.31], [423.9, 201.31], [423.9, 202.67], [424.17, 202.68], [424.17, 201.31]]]]} 4.68 82 \N \N
+148 {"type": "MultiPolygon", "coordinates": [[[[426.91, 204.71], [426.91, 204.38], [425.75, 204.38], [425.75, 204.71], [426.91, 204.71]]], [[[339.8, 204.69], [339.8, 204.41], [338.52, 204.41], [338.52, 204.69], [339.8, 204.69]]]]} 0.61 85 \N \N
+152 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.84], [339.8, 205.56], [338.52, 205.56], [338.52, 205.84], [339.8, 205.84]]], [[[426.91, 206.06], [426.91, 205.73], [425.75, 205.73], [425.75, 206.06], [426.91, 206.06]]]]} 1.43 85 \N \N
+134 {"type": "MultiPolygon", "coordinates": [[[[339.8, 205.84], [339.8, 205.56], [338.52, 205.56], [338.52, 205.84], [339.8, 205.84]]], [[[426.91, 205.9], [426.91, 205.61], [425.63, 205.61], [425.63, 205.9], [426.91, 205.9]]]]} 7.11 82 \N \N
+111 {"type": "MultiPolygon", "coordinates": [[[[339.8, 204.69], [339.8, 204.41], [338.52, 204.41], [338.52, 204.69], [339.8, 204.69]]], [[[426.91, 204.74], [426.91, 204.46], [425.63, 204.46], [425.63, 204.74], [426.91, 204.74]]]]} 6.46 82 \N \N
+169 {"type": "Polygon", "coordinates": [[[276.63, 140.06], [276.61, 140.35], [274.16, 140.12], [274.2, 139.83], [276.63, 140.06]]]} -2.64 10 \N \N
+172 {"type": "Polygon", "coordinates": [[[274.07, 140.96], [274.1, 140.68], [276.55, 140.91], [276.52, 141.19], [274.07, 140.96]]]} -3.13 10 \N \N
+173 {"type": "Polygon", "coordinates": [[[274.13, 140.4], [274.16, 140.12], [276.61, 140.35], [276.58, 140.63], [274.13, 140.4]]]} -2.81 10 \N \N
+167 {"type": "Polygon", "coordinates": [[[276.52, 141.19], [276.49, 141.47], [274.04, 141.24], [274.07, 140.96], [276.52, 141.19]]]} -3.29 10 \N \N
+168 {"type": "Polygon", "coordinates": [[[276.58, 140.63], [276.55, 140.91], [274.1, 140.68], [274.13, 140.4], [276.58, 140.63]]]} -2.97 10 \N \N
+174 {"type": "Polygon", "coordinates": [[[274.2, 139.83], [274.23, 139.55], [276.66, 139.78], [276.63, 140.06], [274.2, 139.83]]]} -2.48 10 \N \N
+170 {"type": "Polygon", "coordinates": [[[276.69, 139.5], [276.66, 139.78], [274.23, 139.55], [274.26, 139.27], [276.69, 139.5]]]} -2.32 10 \N \N
+157 {"type": "MultiPolygon", "coordinates": [[[[340.85, 206.23], [340.53, 206.23], [340.53, 207.6], [340.85, 207.6], [340.85, 206.23]]], [[[425.28, 206.55], [425.07, 206.55], [425.07, 207.68], [425.28, 207.68], [425.28, 206.55]]]]} 2.44 85 \N \N
+158 {"type": "MultiPolygon", "coordinates": [[[[341.17, 206.23], [340.85, 206.23], [340.85, 207.6], [341.17, 207.6], [341.17, 206.23]]], [[[425.07, 206.55], [424.86, 206.55], [424.86, 207.68], [425.07, 207.68], [425.07, 206.55]]]]} 2.65 85 \N \N
+160 {"type": "MultiPolygon", "coordinates": [[[[341.8, 206.24], [341.48, 206.24], [341.48, 207.6], [341.8, 207.6], [341.8, 206.24]]], [[[424.64, 206.54], [424.43, 206.54], [424.43, 207.68], [424.64, 207.68], [424.64, 206.54]]]]} 3.06 85 \N \N
+161 {"type": "MultiPolygon", "coordinates": [[[[342.12, 206.24], [341.8, 206.24], [341.8, 207.6], [342.12, 207.6], [342.12, 206.24]]], [[[424.43, 206.54], [424.22, 206.54], [424.22, 207.68], [424.43, 207.68], [424.43, 206.54]]]]} 3.26 85 \N \N
+163 {"type": "MultiPolygon", "coordinates": [[[[342.75, 206.24], [342.43, 206.24], [342.43, 207.6], [342.75, 207.6], [342.75, 206.24]]], [[[424.0, 206.54], [423.79, 206.54], [423.79, 207.68], [424.0, 207.68], [424.0, 206.54]]]]} 3.67 85 \N \N
+156 {"type": "MultiPolygon", "coordinates": [[[[340.53, 206.23], [340.22, 206.23], [340.22, 207.6], [340.53, 207.6], [340.53, 206.23]]], [[[425.5, 206.55], [425.28, 206.55], [425.28, 207.68], [425.5, 207.68], [425.5, 206.55]]]]} 2.24 85 \N \N
+159 {"type": "MultiPolygon", "coordinates": [[[[341.48, 206.24], [341.17, 206.23], [341.17, 207.6], [341.48, 207.6], [341.48, 206.24]]], [[[424.86, 206.55], [424.64, 206.54], [424.64, 207.68], [424.86, 207.68], [424.86, 206.55]]]]} 2.85 85 \N \N
+162 {"type": "MultiPolygon", "coordinates": [[[[342.43, 206.24], [342.12, 206.24], [342.12, 207.6], [342.43, 207.6], [342.43, 206.24]]], [[[424.22, 206.54], [424.0, 206.54], [424.0, 207.68], [424.22, 207.68], [424.22, 206.54]]]]} 3.46 85 \N \N
+362 {"type": "Polygon", "coordinates": [[[272.37, 206.15], [272.37, 206.46], [270.64, 206.46], [270.64, 206.15], [272.37, 206.15]]]} 0.15 2 \N \N
+361 {"type": "Polygon", "coordinates": [[[272.37, 206.76], [272.37, 207.07], [270.64, 207.07], [270.64, 206.76], [272.37, 206.76]]]} 0.45 2 \N \N
+356 {"type": "Polygon", "coordinates": [[[274.5, 207.36], [274.5, 207.65], [272.66, 207.65], [272.66, 207.36], [274.5, 207.36]]]} 0.10 2 \N \N
+354 {"type": "Polygon", "coordinates": [[[274.54, 211.43], [274.54, 211.71], [272.66, 211.71], [272.66, 211.43], [274.54, 211.43]]]} 0.40 2 \N \N
+112 {"type": "MultiPolygon", "coordinates": [[[[342.64, 202.48], [342.83, 202.48], [342.83, 201.23], [342.64, 201.23], [342.64, 202.48]]], [[[422.78, 201.31], [422.57, 201.31], [422.57, 202.67], [422.78, 202.67], [422.78, 201.31]]]]} 3.87 82 \N \N
+353 {"type": "Polygon", "coordinates": [[[274.5, 207.65], [274.5, 207.93], [272.66, 207.92], [272.66, 207.65], [274.5, 207.65]]]} 0.20 2 \N \N
+181 {"type": "Polygon", "coordinates": [[[277.0, 138.49], [277.05, 137.98], [278.0, 138.08], [277.95, 138.59], [277.0, 138.49]]]} -2.00 11 \N \N
+201 {"type": "Polygon", "coordinates": [[[269.31, 233.92], [269.03, 233.92], [269.03, 232.33], [269.31, 232.33], [269.31, 233.92]]]} -2.41 11 \N \N
+203 {"type": "Polygon", "coordinates": [[[269.87, 233.92], [269.59, 233.92], [269.59, 232.33], [269.87, 232.33], [269.87, 233.92]]]} -2.04 11 \N \N
+205 {"type": "Polygon", "coordinates": [[[270.43, 233.92], [270.15, 233.92], [270.15, 232.33], [270.43, 232.33], [270.43, 233.92]]]} -1.67 11 \N \N
+207 {"type": "Polygon", "coordinates": [[[270.99, 233.92], [270.71, 233.92], [270.71, 232.33], [270.99, 232.33], [270.99, 233.92]]]} -1.30 11 \N \N
+209 {"type": "Polygon", "coordinates": [[[271.55, 233.92], [271.27, 233.92], [271.27, 232.33], [271.55, 232.33], [271.55, 233.92]]]} -0.93 11 \N \N
+211 {"type": "Polygon", "coordinates": [[[272.11, 233.92], [271.83, 233.92], [271.83, 232.33], [272.11, 232.33], [272.11, 233.92]]]} -0.56 11 \N \N
+213 {"type": "Polygon", "coordinates": [[[272.67, 233.92], [272.39, 233.92], [272.39, 232.33], [272.67, 232.33], [272.67, 233.92]]]} -0.19 11 \N \N
+227 {"type": "Polygon", "coordinates": [[[269.31, 233.92], [269.03, 233.92], [269.03, 232.33], [269.31, 232.33], [269.31, 233.92]]]} 2.39 85 \N \N
+229 {"type": "Polygon", "coordinates": [[[269.87, 233.92], [269.59, 233.92], [269.59, 232.33], [269.87, 232.33], [269.87, 233.92]]]} 2.73 85 \N \N
+231 {"type": "Polygon", "coordinates": [[[270.43, 233.92], [270.15, 233.92], [270.15, 232.33], [270.43, 232.33], [270.43, 233.92]]]} 3.07 85 \N \N
+233 {"type": "Polygon", "coordinates": [[[270.99, 233.92], [270.71, 233.92], [270.71, 232.33], [270.99, 232.33], [270.99, 233.92]]]} 3.41 85 \N \N
+235 {"type": "Polygon", "coordinates": [[[271.55, 233.92], [271.27, 233.92], [271.27, 232.33], [271.55, 232.33], [271.55, 233.92]]]} 3.75 85 \N \N
+237 {"type": "Polygon", "coordinates": [[[272.11, 233.92], [271.83, 233.92], [271.83, 232.33], [272.11, 232.33], [272.11, 233.92]]]} 4.09 85 \N \N
+239 {"type": "Polygon", "coordinates": [[[272.67, 233.92], [272.39, 233.92], [272.39, 232.33], [272.67, 232.33], [272.67, 233.92]]]} 4.43 85 \N \N
+255 {"type": "Polygon", "coordinates": [[[269.31, 233.92], [269.03, 233.92], [269.03, 232.33], [269.31, 232.33], [269.31, 233.92]]]} 7.01 82 \N \N
+257 {"type": "Polygon", "coordinates": [[[269.87, 233.92], [269.59, 233.92], [269.59, 232.33], [269.87, 232.33], [269.87, 233.92]]]} 7.36 82 \N \N
+259 {"type": "Polygon", "coordinates": [[[270.43, 233.92], [270.15, 233.92], [270.15, 232.33], [270.43, 232.33], [270.43, 233.92]]]} 7.70 82 \N \N
+261 {"type": "Polygon", "coordinates": [[[270.99, 233.92], [270.71, 233.92], [270.71, 232.33], [270.99, 232.33], [270.99, 233.92]]]} 8.04 82 \N \N
+263 {"type": "Polygon", "coordinates": [[[271.55, 233.92], [271.27, 233.92], [271.27, 232.33], [271.55, 232.33], [271.55, 233.92]]]} 8.39 82 \N \N
+265 {"type": "Polygon", "coordinates": [[[272.67, 233.92], [272.39, 233.92], [272.39, 232.33], [272.67, 232.33], [272.67, 233.92]]]} 9.08 82 \N \N
+202 {"type": "Polygon", "coordinates": [[[269.59, 233.92], [269.31, 233.92], [269.31, 232.33], [269.59, 232.33], [269.59, 233.92]]]} -2.22 11 \N \N
+204 {"type": "Polygon", "coordinates": [[[270.15, 233.92], [269.87, 233.92], [269.87, 232.33], [270.15, 232.33], [270.15, 233.92]]]} -1.85 11 \N \N
+206 {"type": "Polygon", "coordinates": [[[270.71, 233.92], [270.43, 233.92], [270.43, 232.33], [270.71, 232.33], [270.71, 233.92]]]} -1.48 11 \N \N
+208 {"type": "Polygon", "coordinates": [[[271.27, 233.92], [270.99, 233.92], [270.99, 232.33], [271.27, 232.33], [271.27, 233.92]]]} -1.11 11 \N \N
+210 {"type": "Polygon", "coordinates": [[[271.83, 233.92], [271.55, 233.92], [271.55, 232.33], [271.83, 232.33], [271.83, 233.92]]]} -0.74 11 \N \N
+212 {"type": "Polygon", "coordinates": [[[272.39, 233.92], [272.11, 233.92], [272.11, 232.33], [272.39, 232.33], [272.39, 233.92]]]} -0.37 11 \N \N
+228 {"type": "Polygon", "coordinates": [[[269.59, 233.92], [269.31, 233.92], [269.31, 232.33], [269.59, 232.33], [269.59, 233.92]]]} 2.56 85 \N \N
+230 {"type": "Polygon", "coordinates": [[[270.15, 233.92], [269.87, 233.92], [269.87, 232.33], [270.15, 232.33], [270.15, 233.92]]]} 2.90 85 \N \N
+232 {"type": "Polygon", "coordinates": [[[270.71, 233.92], [270.43, 233.92], [270.43, 232.33], [270.71, 232.33], [270.71, 233.92]]]} 3.24 85 \N \N
+234 {"type": "Polygon", "coordinates": [[[271.27, 233.92], [270.99, 233.92], [270.99, 232.33], [271.27, 232.33], [271.27, 233.92]]]} 3.58 85 \N \N
+236 {"type": "Polygon", "coordinates": [[[271.83, 233.92], [271.55, 233.92], [271.55, 232.33], [271.83, 232.33], [271.83, 233.92]]]} 3.92 85 \N \N
+238 {"type": "Polygon", "coordinates": [[[272.39, 233.92], [272.11, 233.92], [272.11, 232.33], [272.39, 232.33], [272.39, 233.92]]]} 4.26 85 \N \N
+256 {"type": "Polygon", "coordinates": [[[269.59, 233.92], [269.31, 233.92], [269.31, 232.33], [269.59, 232.33], [269.59, 233.92]]]} 7.18 82 \N \N
+258 {"type": "Polygon", "coordinates": [[[270.15, 233.92], [269.87, 233.92], [269.87, 232.33], [270.15, 232.33], [270.15, 233.92]]]} 7.53 82 \N \N
+260 {"type": "Polygon", "coordinates": [[[270.71, 233.92], [270.43, 233.92], [270.43, 232.33], [270.71, 232.33], [270.71, 233.92]]]} 7.87 82 \N \N
+262 {"type": "Polygon", "coordinates": [[[271.27, 233.92], [270.99, 233.92], [270.99, 232.33], [271.27, 232.33], [271.27, 233.92]]]} 8.22 82 \N \N
+264 {"type": "Polygon", "coordinates": [[[272.39, 233.92], [272.11, 233.92], [272.11, 232.33], [272.39, 232.33], [272.39, 233.92]]]} 8.91 82 \N \N
+198 {"type": "Polygon", "coordinates": [[[272.11, 231.89], [271.83, 231.89], [271.83, 230.31], [272.11, 230.31], [272.11, 231.89]]]} -4.63 11 \N \N
+196 {"type": "Polygon", "coordinates": [[[271.55, 231.89], [271.27, 231.89], [271.27, 230.31], [271.55, 230.31], [271.55, 231.89]]]} -4.26 11 \N \N
+194 {"type": "Polygon", "coordinates": [[[270.99, 231.89], [270.71, 231.89], [270.71, 230.31], [270.99, 230.31], [270.99, 231.89]]]} -3.89 11 \N \N
+192 {"type": "Polygon", "coordinates": [[[270.43, 231.89], [270.15, 231.89], [270.15, 230.31], [270.43, 230.31], [270.43, 231.89]]]} -3.52 11 \N \N
+190 {"type": "Polygon", "coordinates": [[[269.87, 231.89], [269.59, 231.89], [269.59, 230.31], [269.87, 230.31], [269.87, 231.89]]]} -3.15 11 \N \N
+224 {"type": "Polygon", "coordinates": [[[272.11, 231.89], [271.83, 231.89], [271.83, 230.31], [272.11, 230.31], [272.11, 231.89]]]} 0.34 85 \N \N
+222 {"type": "Polygon", "coordinates": [[[271.55, 231.89], [271.27, 231.89], [271.27, 230.31], [271.55, 230.31], [271.55, 231.89]]]} 0.68 85 \N \N
+219 {"type": "Polygon", "coordinates": [[[270.43, 231.89], [270.15, 231.89], [270.15, 230.31], [270.43, 230.31], [270.43, 231.89]]]} 1.36 85 \N \N
+217 {"type": "Polygon", "coordinates": [[[269.87, 231.89], [269.59, 231.89], [269.59, 230.31], [269.87, 230.31], [269.87, 231.89]]]} 1.70 85 \N \N
+252 {"type": "Polygon", "coordinates": [[[272.11, 231.89], [271.83, 231.89], [271.83, 230.31], [272.11, 230.31], [272.11, 231.89]]]} 4.94 82 \N \N
+250 {"type": "Polygon", "coordinates": [[[271.55, 231.89], [271.27, 231.89], [271.27, 230.31], [271.55, 230.31], [271.55, 231.89]]]} 5.29 82 \N \N
+248 {"type": "Polygon", "coordinates": [[[270.99, 231.89], [270.71, 231.89], [270.71, 230.31], [270.99, 230.31], [270.99, 231.89]]]} 5.63 82 \N \N
+247 {"type": "Polygon", "coordinates": [[[270.43, 231.89], [270.15, 231.89], [270.15, 230.31], [270.43, 230.31], [270.43, 231.89]]]} 5.98 82 \N \N
+245 {"type": "Polygon", "coordinates": [[[269.87, 231.89], [269.59, 231.89], [269.59, 230.31], [269.87, 230.31], [269.87, 231.89]]]} 6.32 82 \N \N
+243 {"type": "Polygon", "coordinates": [[[269.31, 231.89], [269.03, 231.89], [269.03, 230.31], [269.31, 230.31], [269.31, 231.89]]]} 6.67 82 \N \N
+199 {"type": "Polygon", "coordinates": [[[272.39, 231.89], [272.11, 231.89], [272.11, 230.31], [272.39, 230.31], [272.39, 231.89]]]} -4.81 11 \N \N
+197 {"type": "Polygon", "coordinates": [[[271.83, 231.89], [271.55, 231.89], [271.55, 230.31], [271.83, 230.31], [271.83, 231.89]]]} -4.44 11 \N \N
+195 {"type": "Polygon", "coordinates": [[[271.27, 231.89], [270.99, 231.89], [270.99, 230.31], [271.27, 230.31], [271.27, 231.89]]]} -4.07 11 \N \N
+193 {"type": "Polygon", "coordinates": [[[270.71, 231.89], [270.43, 231.89], [270.43, 230.31], [270.71, 230.31], [270.71, 231.89]]]} -3.70 11 \N \N
+191 {"type": "Polygon", "coordinates": [[[270.15, 231.89], [269.87, 231.89], [269.87, 230.31], [270.15, 230.31], [270.15, 231.89]]]} -3.33 11 \N \N
+189 {"type": "Polygon", "coordinates": [[[269.59, 231.89], [269.31, 231.89], [269.31, 230.31], [269.59, 230.31], [269.59, 231.89]]]} -2.96 11 \N \N
+225 {"type": "Polygon", "coordinates": [[[272.39, 231.89], [272.11, 231.89], [272.11, 230.31], [272.39, 230.31], [272.39, 231.89]]]} 0.17 85 \N \N
+223 {"type": "Polygon", "coordinates": [[[271.83, 231.89], [271.55, 231.89], [271.55, 230.31], [271.83, 230.31], [271.83, 231.89]]]} 0.51 85 \N \N
+221 {"type": "Polygon", "coordinates": [[[271.27, 231.89], [270.99, 231.89], [270.99, 230.31], [271.27, 230.31], [271.27, 231.89]]]} 0.85 85 \N \N
+220 {"type": "Polygon", "coordinates": [[[270.71, 231.89], [270.43, 231.89], [270.43, 230.31], [270.71, 230.31], [270.71, 231.89]]]} 1.19 85 \N \N
+218 {"type": "Polygon", "coordinates": [[[270.15, 231.89], [269.87, 231.89], [269.87, 230.31], [270.15, 230.31], [270.15, 231.89]]]} 1.53 85 \N \N
+216 {"type": "Polygon", "coordinates": [[[269.59, 231.89], [269.31, 231.89], [269.31, 230.31], [269.59, 230.31], [269.59, 231.89]]]} 1.87 85 \N \N
+253 {"type": "Polygon", "coordinates": [[[272.39, 231.89], [272.11, 231.89], [272.11, 230.31], [272.39, 230.31], [272.39, 231.89]]]} 4.77 82 \N \N
+251 {"type": "Polygon", "coordinates": [[[271.83, 231.89], [271.55, 231.89], [271.55, 230.31], [271.83, 230.31], [271.83, 231.89]]]} 5.12 82 \N \N
+249 {"type": "Polygon", "coordinates": [[[271.27, 231.89], [270.99, 231.89], [270.99, 230.31], [271.27, 230.31], [271.27, 231.89]]]} 5.46 82 \N \N
+246 {"type": "Polygon", "coordinates": [[[270.15, 231.89], [269.87, 231.89], [269.87, 230.31], [270.15, 230.31], [270.15, 231.89]]]} 6.15 82 \N \N
+244 {"type": "Polygon", "coordinates": [[[269.59, 231.89], [269.31, 231.89], [269.31, 230.31], [269.59, 230.31], [269.59, 231.89]]]} 6.49 82 \N \N
+87 {"type": "Polygon", "coordinates": [[[270.36, 197.6], [270.36, 197.9], [268.93, 197.9], [268.93, 197.6], [270.36, 197.6]]]} -1.96 11 \N \N
+89 {"type": "Polygon", "coordinates": [[[270.36, 197.0], [270.36, 197.3], [268.93, 197.3], [268.93, 197.0], [270.36, 197.0]]]} -1.64 11 \N \N
+90 {"type": "Polygon", "coordinates": [[[270.36, 196.7], [270.36, 197.0], [268.93, 197.0], [268.93, 196.7], [270.36, 196.7]]]} -1.47 11 \N \N
+94 {"type": "Polygon", "coordinates": [[[270.36, 195.5], [270.36, 195.8], [268.93, 195.8], [268.93, 195.5], [270.36, 195.5]]]} -0.82 11 \N \N
+95 {"type": "Polygon", "coordinates": [[[270.36, 195.2], [270.36, 195.5], [268.93, 195.5], [268.93, 195.2], [270.36, 195.2]]]} -0.65 11 \N \N
+97 {"type": "Polygon", "coordinates": [[[270.36, 194.6], [270.36, 194.9], [268.93, 194.9], [268.93, 194.6], [270.36, 194.6]]]} -0.33 11 \N \N
+86 {"type": "Polygon", "coordinates": [[[270.36, 197.9], [270.36, 198.2], [268.93, 198.2], [268.93, 197.9], [270.36, 197.9]]]} -2.13 11 \N \N
+88 {"type": "Polygon", "coordinates": [[[270.36, 197.3], [270.36, 197.6], [268.93, 197.6], [268.93, 197.3], [270.36, 197.3]]]} -1.80 11 \N \N
+91 {"type": "Polygon", "coordinates": [[[270.36, 196.4], [270.36, 196.7], [268.93, 196.7], [268.93, 196.4], [270.36, 196.4]]]} -1.31 11 \N \N
+93 {"type": "Polygon", "coordinates": [[[270.36, 195.8], [270.36, 196.1], [268.93, 196.1], [268.93, 195.8], [270.36, 195.8]]]} -0.98 11 \N \N
+96 {"type": "Polygon", "coordinates": [[[270.36, 194.9], [270.36, 195.2], [268.93, 195.2], [268.93, 194.9], [270.36, 194.9]]]} -0.49 11 \N \N
+98 {"type": "Polygon", "coordinates": [[[270.36, 194.3], [270.36, 194.6], [268.93, 194.6], [268.93, 194.3], [270.36, 194.3]]]} -0.16 11 \N \N
+35 {"type": "Polygon", "coordinates": [[[270.36, 197.0], [270.36, 197.3], [268.96, 197.3], [268.96, 197.0], [270.36, 197.0]]]} -4.58 77 \N \N
+36 {"type": "Polygon", "coordinates": [[[270.36, 196.7], [270.36, 197.0], [268.96, 197.0], [268.96, 196.7], [270.36, 196.7]]]} -4.42 77 \N \N
+38 {"type": "Polygon", "coordinates": [[[270.36, 196.1], [270.36, 196.4], [268.96, 196.4], [268.96, 196.1], [270.36, 196.1]]]} -4.09 77 \N \N
+40 {"type": "Polygon", "coordinates": [[[270.36, 195.5], [270.36, 195.8], [268.96, 195.8], [268.96, 195.5], [270.36, 195.5]]]} -3.76 77 \N \N
+39 {"type": "Polygon", "coordinates": [[[270.36, 195.8], [270.36, 196.1], [268.96, 196.1], [268.96, 195.8], [270.36, 195.8]]]} -3.93 77 \N \N
+26 {"type": "Polygon", "coordinates": [[[268.96, 195.5], [268.96, 195.22], [270.36, 195.22], [270.36, 195.5], [268.96, 195.5]]]} -3.60 77 \N \N
+85 {"type": "Polygon", "coordinates": [[[268.7, 196.1], [268.7, 196.4], [267.42, 196.4], [267.42, 196.1], [268.7, 196.1]]]} -3.44 11 \N \N
+80 {"type": "Polygon", "coordinates": [[[268.71, 197.6], [268.71, 197.9], [267.43, 197.9], [267.43, 197.6], [268.71, 197.6]]]} -2.62 11 \N \N
+84 {"type": "Polygon", "coordinates": [[[268.7, 196.4], [268.7, 196.7], [267.42, 196.7], [267.42, 196.4], [268.7, 196.4]]]} -3.27 11 \N \N
+79 {"type": "Polygon", "coordinates": [[[268.71, 197.9], [268.71, 198.2], [267.43, 198.2], [267.43, 197.9], [268.71, 197.9]]]} -2.45 11 \N \N
+83 {"type": "Polygon", "coordinates": [[[268.7, 196.7], [268.7, 197.0], [267.43, 197.0], [267.42, 196.7], [268.7, 196.7]]]} -3.11 11 \N \N
+82 {"type": "Polygon", "coordinates": [[[268.7, 197.0], [268.71, 197.3], [267.43, 197.3], [267.43, 197.0], [268.7, 197.0]]]} -2.95 11 \N \N
+28 {"type": "Polygon", "coordinates": [[[267.42, 196.7], [267.42, 196.4], [268.69, 196.4], [268.69, 196.7], [267.42, 196.7]]]} -6.05 77 \N \N
+29 {"type": "Polygon", "coordinates": [[[268.69, 196.7], [268.69, 197.0], [267.43, 197.0], [267.42, 196.7], [268.69, 196.7]]]} -5.88 77 \N \N
+30 {"type": "Polygon", "coordinates": [[[267.43, 197.3], [267.43, 197.0], [268.69, 197.0], [268.69, 197.3], [267.43, 197.3]]]} -5.72 77 \N \N
+32 {"type": "Polygon", "coordinates": [[[267.43, 197.9], [267.43, 197.6], [268.69, 197.6], [268.69, 197.9], [267.43, 197.9]]]} -5.39 77 \N \N
+31 {"type": "Polygon", "coordinates": [[[267.43, 197.6], [267.43, 197.3], [268.69, 197.3], [268.69, 197.6], [267.43, 197.6]]]} -5.56 77 \N \N
+16 {"type": "Polygon", "coordinates": [[[267.42, 196.4], [267.42, 196.11], [268.69, 196.11], [268.69, 196.4], [267.42, 196.4]]]} -6.21 77 \N \N
+144 {"type": "MultiPolygon", "coordinates": [[[[342.75, 207.6], [342.86, 207.6], [342.86, 206.24], [342.75, 206.24], [342.75, 207.6]]], [[[423.79, 206.54], [423.63, 206.54], [423.63, 207.68], [423.79, 207.68], [423.79, 206.54]]]]} 3.87 85 \N \N
+77 {"type": "Polygon", "coordinates": [[[267.42, 196.1], [267.42, 195.86], [268.7, 195.86], [268.7, 196.1], [267.42, 196.1]]]} -3.60 11 \N \N
+105 {"type": "MultiPolygon", "coordinates": [[[[342.75, 207.6], [342.88, 207.6], [342.88, 206.24], [342.75, 206.24], [342.75, 207.6]]], [[[422.69, 206.43], [422.6, 206.43], [422.6, 207.68], [422.69, 207.68], [422.69, 206.43]]]]} 9.05 82 \N \N
+176 {"type": "Polygon", "coordinates": [[[277.62, 142.09], [277.59, 142.39], [276.64, 142.29], [276.67, 142.0], [277.62, 142.09]]]} 1.00 11 \N \N
+185 {"type": "Polygon", "coordinates": [[[276.87, 139.85], [276.9, 139.57], [277.85, 139.66], [277.82, 139.94], [276.87, 139.85]]]} -0.75 11 \N \N
+187 {"type": "Polygon", "coordinates": [[[276.97, 138.77], [277.0, 138.49], [277.95, 138.59], [277.93, 138.86], [276.97, 138.77]]]} -1.75 11 \N \N
+183 {"type": "Polygon", "coordinates": [[[276.72, 141.46], [276.75, 141.18], [277.7, 141.28], [277.67, 141.55], [276.72, 141.46]]]} 0.25 11 \N \N
+184 {"type": "Polygon", "coordinates": [[[276.77, 140.92], [276.8, 140.65], [277.75, 140.74], [277.72, 141.02], [276.77, 140.92]]]} -0.25 11 \N \N
+177 {"type": "Polygon", "coordinates": [[[277.88, 139.39], [277.85, 139.66], [276.9, 139.57], [276.92, 139.3], [277.88, 139.39]]]} -1.00 11 \N \N
+186 {"type": "Polygon", "coordinates": [[[276.92, 139.3], [276.95, 139.03], [277.9, 139.12], [277.88, 139.39], [276.92, 139.3]]]} -1.25 11 \N \N
+178 {"type": "Polygon", "coordinates": [[[277.67, 141.55], [277.64, 141.82], [276.69, 141.73], [276.72, 141.46], [277.67, 141.55]]]} 0.50 11 \N \N
+182 {"type": "Polygon", "coordinates": [[[276.67, 142.0], [276.69, 141.73], [277.64, 141.82], [277.62, 142.09], [276.67, 142.0]]]} 0.75 11 \N \N
+180 {"type": "Polygon", "coordinates": [[[277.93, 138.86], [277.9, 139.12], [276.95, 139.03], [276.97, 138.77], [277.93, 138.86]]]} -1.50 11 \N \N
+215 {"type": "Polygon", "coordinates": [[[272.67, 232.33], [272.73, 232.33], [272.74, 233.92], [272.67, 233.92], [272.67, 232.33]]]} 4.60 85 \N \N
+242 {"type": "Polygon", "coordinates": [[[272.67, 232.33], [272.73, 232.33], [272.74, 233.92], [272.67, 233.92], [272.67, 232.33]]]} 9.25 82 \N \N
+\.
+
+
+--
+-- Data for Name: mapdata_altitudemarker; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_altitudemarker (id, geometry, space_id, import_tag, groundaltitude_id) FROM stdin;
+1 {"type": "Point", "coordinates": [276.44, 176.94]} 14 \N 2
+2 {"type": "Point", "coordinates": [277.31, 228.69]} 22 \N 1
+52 {"type": "Point", "coordinates": [268.83, 224.0]} 32 \N 14
+7 {"type": "Point", "coordinates": [271.83, 191.67]} 52 \N 4
+8 {"type": "Point", "coordinates": [274.62, 202.38]} 20 \N 5
+9 {"type": "Point", "coordinates": [274.26, 212.37]} 20 \N 6
+10 {"type": "Point", "coordinates": [283.74, 172.16]} 35 \N 7
+13 {"type": "Point", "coordinates": [269.72, 195.23]} 78 \N 4
+53 {"type": "Point", "coordinates": [277.82, 169.61]} 61 \N 3
+19 {"type": "Point", "coordinates": [274.93, 143.2]} 95 \N 3
+6 {"type": "Point", "coordinates": [268.04, 195.94]} 71 \N 4
+5 {"type": "Point", "coordinates": [269.6, 194.16]} 71 \N 3
+12 {"type": "Point", "coordinates": [268.05, 196.22]} 78 \N 7
+14 {"type": "Point", "coordinates": [342.77, 201.86]} 83 \N 8
+15 {"type": "Point", "coordinates": [342.8, 206.91]} 83 \N 9
+16 {"type": "Point", "coordinates": [339.57, 203.63]} 86 \N 3
+17 {"type": "Point", "coordinates": [342.82, 207.09]} 86 \N 8
+18 {"type": "Point", "coordinates": [275.83, 132.36]} 92 \N 10
+21 {"type": "Point", "coordinates": [271.92, 130.4]} 93 \N 10
+22 {"type": "Point", "coordinates": [292.34, 127.49]} 94 \N 10
+23 {"type": "Point", "coordinates": [274.33, 142.24]} 97 \N 2
+25 {"type": "Point", "coordinates": [278.14, 135.85]} 98 \N 11
+26 {"type": "Point", "coordinates": [275.25, 141.45]} 98 \N 2
+28 {"type": "Point", "coordinates": [277.37, 142.28]} 99 \N 10
+34 {"type": "Point", "coordinates": [272.61, 231.12]} 101 \N 1
+35 {"type": "Point", "coordinates": [272.72, 233.19]} 101 \N 3
+36 {"type": "Point", "coordinates": [272.6, 231.07]} 103 \N 3
+37 {"type": "Point", "coordinates": [272.72, 233.01]} 103 \N 12
+38 {"type": "Point", "coordinates": [272.65, 231.1]} 107 \N 12
+39 {"type": "Point", "coordinates": [272.72, 233.12]} 107 \N 13
+40 {"type": "Point", "coordinates": [275.77, 230.34]} 104 \N 12
+41 {"type": "Point", "coordinates": [280.28, 230.31]} 105 \N 13
+43 {"type": "Point", "coordinates": [284.22, 212.07]} 118 \N 1
+42 {"type": "Point", "coordinates": [284.3, 194.51]} 118 \N 3
+44 {"type": "Point", "coordinates": [276.82, 223.22]} 31 \N 14
+45 {"type": "Point", "coordinates": [277.92, 221.56]} 33 \N 14
+46 {"type": "Point", "coordinates": [279.14, 204.58]} 33 \N 3
+47 {"type": "Point", "coordinates": [271.58, 204.24]} 59 \N 3
+48 {"type": "Point", "coordinates": [271.78, 207.98]} 59 \N 14
+49 {"type": "Point", "coordinates": [236.45, 202.04]} 58 \N 3
+50 {"type": "Point", "coordinates": [235.6, 211.55]} 58 \N 14
+51 {"type": "Point", "coordinates": [244.7, 214.68]} 36 \N 14
+27 {"type": "Point", "coordinates": [277.51, 138.26]} 99 \N 11
+20 {"type": "Point", "coordinates": [275.41, 139.74]} 95 \N 10
+54 {"type": "Point", "coordinates": [273.23, 140.19]} 96 \N 10
+57 {"type": "Point", "coordinates": [426.59, 203.62]} 136 \N 3
+58 {"type": "Point", "coordinates": [423.67, 207.32]} 136 \N 8
+59 {"type": "Point", "coordinates": [422.67, 202.08]} 138 \N 8
+60 {"type": "Point", "coordinates": [422.63, 207.27]} 138 \N 9
+61 {"type": "Point", "coordinates": [346.81, 189.36]} 50 \N 3
+62 {"type": "Point", "coordinates": [346.76, 189.26]} 88 \N 9
+\.
+
+
+--
+-- Data for Name: mapdata_area; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_area (locationslug_ptr_id, titles, can_search, can_describe, geometry, slow_down_factor, access_restriction_id, space_id, import_tag, icon, label_overrides, label_settings_id, main_point, external_url, import_block_data, import_block_geom) FROM stdin;
+63 {"en": "Water pool"} f f {"type": "Polygon", "coordinates": [[[233.53, 179.22], [241.07, 179.22], [241.07, 153.74], [240.05, 153.74], [240.05, 152.83], [240.39, 152.83], [240.39, 152.4], [240.2, 152.07], [239.98, 151.85], [239.71, 151.85], [234.88, 151.85], [234.64, 151.99], [234.52, 152.14], [234.44, 152.36], [234.4, 152.47], [234.4, 152.72], [234.71, 152.72], [234.71, 153.75], [233.66, 153.75], [233.53, 179.22]]]} 1.00 \N 61 \N \N {} \N \N \N f f
+69 {} f f {"type": "Polygon", "coordinates": [[[243.36, 152.6], [243.36, 182.24], [259.35, 182.24], [259.35, 160.99], [258.91, 158.59], [257.89, 156.4], [256.57, 155.23], [254.67, 153.84], [252.04, 152.6], [243.36, 152.6]]]} 1.00 \N 61 \N \N {} \N \N \N f f
+68 {} f f {"type": "Polygon", "coordinates": [[[214.81, 182.53], [231.45, 182.53], [231.45, 152.6], [227.06, 152.6], [223.57, 153.91], [221.01, 155.37], [218.6, 157.42], [216.78, 159.9], [215.03, 163.11], [214.81, 182.53]]]} 1.00 \N 61 \N \N {} \N \N \N f f
+70 {} t t {"type": "Polygon", "coordinates": [[[297.25, 181.94], [299.69, 175.13], [301.81, 175.19], [301.81, 172.56], [299.13, 172.44], [296.69, 168.81], [302.0, 168.88], [302.0, 164.94], [295.5, 164.94], [297.31, 162.19], [301.88, 162.19], [301.88, 158.93], [296.37, 158.93], [295.38, 157.13], [299.38, 157.13], [299.75, 153.13], [337.44, 153.13], [341.69, 151.06], [343.44, 150.94], [343.44, 157.44], [364.06, 158.5], [367.5, 158.75], [367.5, 175.38], [340.44, 175.38], [321.88, 181.88], [297.25, 181.94]]]} 1.00 \N 61 \N \N {} \N \N \N f f
+121 {"en": "Checkin area"} t f {"type": "Polygon", "coordinates": [[[299.87, 223.09], [299.87, 225.98], [303.74, 225.98], [303.74, 223.12], [299.87, 223.09]]]} 1.00 \N 22 \N \N {} \N \N \N f f
+122 {"en": "Checkin area (speakers)"} t f {"type": "Polygon", "coordinates": [[[303.66, 228.36], [303.66, 229.83], [301.63, 229.83], [301.63, 228.35], [303.66, 228.36]]]} 1.00 \N 22 \N \N {} \N \N \N f f
+124 {"en": "Job Wall"} t f {"type": "Polygon", "coordinates": [[[283.89, 229.87], [283.89, 229.52], [286.9, 229.52], [286.9, 229.84], [283.89, 229.87]]]} 1.00 \N 22 \N \N {} \N \N \N f f
+125 {"en": "Coffee Station"} t t {"type": "Polygon", "coordinates": [[[289.59, 239.31], [289.59, 240.83], [294.43, 240.83], [294.43, 239.29], [289.59, 239.31]]]} 1.00 \N 22 \N \N {} \N \N \N f f
+67 {"en": "Bycicle Parking"} t t {"type": "Polygon", "coordinates": [[[243.38, 189.04], [243.36, 182.24], [272.78, 182.24], [272.78, 189.18], [243.38, 189.04]]]} 1.00 \N 61 \N \N {} \N \N \N f f
+126 {"en": "Wardrobe"} t t {"type": "Polygon", "coordinates": [[[295.06, 239.29], [295.06, 240.79], [301.62, 240.79], [301.62, 239.28], [295.06, 239.29]]]} 1.00 \N 22 \N \N {} \N \N \N f f
+\.
+
+
+--
+-- Data for Name: mapdata_area_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_area_groups (id, area_id, locationgroup_id) FROM stdin;
+1 63 62
+2 68 65
+3 69 65
+4 70 65
+5 121 119
+6 125 123
+7 67 66
+8 126 133
+\.
+
+
+--
+-- Data for Name: mapdata_beaconmeasurement; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_beaconmeasurement (id, geometry, comment, data, author_id, space_id, import_tag) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_building; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_building (id, geometry, level_id, import_tag) FROM stdin;
+1 {"type": "Polygon", "coordinates": [[[301.43, 246.99], [301.43, 222.0], [272.66, 222.0], [272.66, 192.47], [259.63, 192.47], [259.63, 191.62], [215.06, 191.62], [215.06, 195.56], [205.03, 195.56], [205.03, 230.02], [244.91, 230.02], [244.91, 225.09], [248.22, 225.09], [248.22, 247.07], [301.43, 246.99]]]} 2 \N
+2 {"type": "Polygon", "coordinates": [[[337.54, 208.22], [337.54, 185.02], [427.34, 185.02], [427.34, 208.11], [337.54, 208.22]]]} 2 \N
+3 {"type": "Polygon", "coordinates": [[[316.11, 246.21], [316.09, 199.11], [301.61, 199.09], [301.61, 222.38], [284.04, 222.37], [284.06, 199.13], [275.05, 199.06], [274.78, 179.34], [272.16, 179.34], [272.16, 181.48], [270.05, 181.45], [269.99, 192.41], [259.63, 192.47], [259.63, 191.62], [214.89, 191.63], [214.89, 211.44], [204.83, 211.49], [204.83, 229.91], [236.57, 229.87], [236.52, 246.17], [316.11, 246.21]]]} 10 \N
+4 {"type": "Polygon", "coordinates": [[[301.43, 246.99], [301.43, 222.0], [272.66, 222.0], [272.66, 192.47], [259.63, 192.47], [259.63, 191.62], [215.06, 191.62], [215.06, 195.56], [205.03, 195.56], [205.03, 230.02], [244.91, 230.02], [244.91, 225.09], [248.22, 225.09], [248.22, 247.07], [301.43, 246.99]]]} 34 \N
+6 {"type": "Polygon", "coordinates": [[[301.43, 246.99], [301.43, 222.0], [272.66, 222.0], [272.66, 192.47], [259.63, 192.47], [259.63, 191.62], [215.06, 191.62], [215.06, 195.56], [205.03, 195.56], [205.03, 230.02], [244.91, 230.02], [244.91, 225.09], [248.22, 225.09], [248.22, 247.07], [301.43, 246.99]]]} 37 \N
+8 {"type": "Polygon", "coordinates": [[[337.54, 208.22], [337.54, 185.02], [427.34, 185.02], [427.34, 208.11], [337.54, 208.22]]]} 37 \N
+9 {"type": "Polygon", "coordinates": [[[337.54, 208.22], [337.54, 185.02], [427.34, 185.02], [427.34, 208.11], [337.54, 208.22]]]} 38 \N
+10 {"type": "Polygon", "coordinates": [[[188.29, 133.47], [201.19, 134.65], [201.19, 129.15], [215.51, 130.17], [215.43, 132.21], [223.69, 132.92], [224.71, 122.15], [224.63, 120.65], [224.24, 119.71], [223.61, 118.84], [222.66, 118.45], [221.25, 117.9], [217.16, 117.51], [217.16, 116.48], [196.16, 114.2], [196.08, 117.27], [189.47, 116.88], [188.29, 133.47]]]} 2 \N
+11 {"type": "Polygon", "coordinates": [[[397.9, 150.93], [409.77, 152.27], [409.46, 158.01], [442.1, 160.92], [445.4, 128.6], [401.67, 124.11], [400.89, 133.31], [399.55, 133.24], [397.9, 150.93]]]} 2 \N
+12 {"type": "Polygon", "coordinates": [[[448.79, 247.91], [485.12, 247.75], [477.73, 155.42], [449.1, 152.58], [448.79, 247.91]]]} 2 \N
+13 {"type": "Polygon", "coordinates": [[[309.1, 116.72], [307.06, 140.79], [364.94, 146.13], [367.15, 121.6], [309.1, 116.72]]]} 2 \N
+5 {"type": "Polygon", "coordinates": [[[250.34, 135.98], [271.87, 137.98], [271.3, 143.61], [298.68, 146.21], [301.42, 117.47], [273.9, 114.91], [273.26, 122.1], [259.43, 120.83], [259.3, 122.58], [255.87, 122.27], [254.78, 122.26], [253.35, 122.75], [252.36, 123.57], [251.53, 124.99], [250.34, 135.98]]]} 2 \N
+7 {"type": "Polygon", "coordinates": [[[302.87, 247.02], [302.93, 193.33], [274.35, 193.35], [274.34, 198.94], [272.82, 198.94], [272.66, 192.47], [259.63, 192.47], [259.63, 191.62], [215.06, 191.62], [215.06, 195.56], [205.03, 195.56], [205.03, 230.02], [244.91, 230.02], [244.91, 225.09], [248.22, 225.09], [248.22, 247.07], [302.87, 247.02]]]} 38 \N
+14 {"type": "Polygon", "coordinates": [[[290.22, 190.56], [291.94, 190.19], [293.22, 189.28], [294.0, 188.31], [294.44, 187.09], [294.47, 185.63], [294.19, 184.59], [293.81, 183.88], [293.03, 182.94], [292.03, 182.38], [291.06, 182.03], [289.47, 181.97], [288.63, 182.22], [287.66, 182.72], [286.91, 183.5], [286.22, 184.53], [285.97, 185.53], [285.97, 186.72], [286.38, 188.31], [287.25, 189.38], [288.31, 190.09], [290.22, 190.56]]]} 2 \N
+15 {"type": "Polygon", "coordinates": [[[267.74, 180.58], [268.2, 180.63], [268.67, 180.58], [269.1, 180.43], [269.47, 180.22], [269.8, 179.94], [270.09, 179.56], [270.29, 179.19], [270.4, 178.69], [270.41, 178.03], [270.18, 177.33], [269.84, 176.84], [269.48, 176.55], [268.79, 176.21], [268.26, 176.12], [267.48, 176.23], [267.02, 176.47], [266.62, 176.8], [266.3, 177.23], [266.08, 177.7], [265.94, 178.21], [266.0, 178.89], [266.21, 179.48], [266.69, 180.07], [267.17, 180.38], [267.74, 180.58]]]} 2 \N
+16 {"type": "Polygon", "coordinates": [[[250.34, 135.98], [271.87, 137.98], [271.3, 143.61], [298.68, 146.21], [301.42, 117.47], [273.9, 114.91], [273.26, 122.1], [259.43, 120.83], [259.3, 122.58], [255.87, 122.27], [254.78, 122.26], [253.35, 122.75], [252.36, 123.57], [251.53, 124.99], [250.34, 135.98]]]} 10 \N
+\.
+
+
+--
+-- Data for Name: mapdata_column; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_column (id, geometry, space_id, access_restriction_id, import_tag) FROM stdin;
+1 {"type": "Polygon", "coordinates": [[[274.56, 199.21], [274.56, 199.78], [275.1, 199.78], [275.1, 199.19], [274.56, 199.21]]]} 33 \N \N
+2 {"type": "Polygon", "coordinates": [[[274.54, 203.3], [274.54, 203.84], [275.07, 203.84], [275.07, 203.3], [274.54, 203.3]]]} 33 \N \N
+18 {"type": "Polygon", "coordinates": [[[267.48, 127.67], [267.49, 127.31], [268.85, 127.44], [268.81, 127.78], [267.48, 127.67]]]} 93 \N \N
+19 {"type": "Polygon", "coordinates": [[[283.59, 138.91], [283.62, 138.56], [283.99, 138.59], [283.95, 138.95], [283.59, 138.91]]]} 94 \N \N
+20 {"type": "Polygon", "coordinates": [[[289.45, 139.44], [289.48, 139.11], [289.83, 139.14], [289.8, 139.48], [289.45, 139.44]]]} 94 \N \N
+21 {"type": "Polygon", "coordinates": [[[295.36, 139.99], [295.39, 139.65], [295.73, 139.68], [295.7, 140.02], [295.36, 139.99]]]} 94 \N \N
+7 {"type": "Polygon", "coordinates": [[[268.69, 198.23], [268.69, 194.16], [268.96, 194.16], [268.96, 198.23], [268.69, 198.23]]]} 78 \N \N
+9 {"type": "Polygon", "coordinates": [[[277.16, 135.26], [277.27, 134.14], [279.13, 134.26], [279.0, 135.42], [277.16, 135.26]]]} 92 \N \N
+10 {"type": "Polygon", "coordinates": [[[277.69, 129.53], [277.76, 128.27], [279.63, 128.37], [279.55, 129.7], [277.69, 129.53]]]} 92 \N \N
+11 {"type": "Polygon", "coordinates": [[[270.45, 134.46], [270.5, 133.56], [272.32, 133.69], [272.23, 134.62], [270.45, 134.46]]]} 93 \N \N
+12 {"type": "Polygon", "coordinates": [[[270.93, 128.9], [271.03, 127.98], [272.81, 128.11], [272.71, 129.05], [270.93, 128.9]]]} 93 \N \N
+13 {"type": "Polygon", "coordinates": [[[266.82, 134.49], [266.86, 134.14], [268.22, 134.26], [268.16, 134.6], [266.82, 134.49]]]} 93 \N \N
+14 {"type": "Polygon", "coordinates": [[[262.7, 134.11], [262.73, 133.74], [264.11, 133.86], [264.07, 134.24], [262.7, 134.11]]]} 93 \N \N
+15 {"type": "Polygon", "coordinates": [[[258.46, 132.42], [258.32, 133.7], [259.85, 133.84], [259.89, 133.51], [258.74, 133.37], [258.85, 132.46], [258.46, 132.42]]]} 93 \N \N
+16 {"type": "Polygon", "coordinates": [[[258.86, 127.82], [259.25, 127.87], [259.35, 126.91], [260.5, 127.0], [260.54, 126.65], [259.01, 126.51], [258.86, 127.82]]]} 93 \N \N
+17 {"type": "Polygon", "coordinates": [[[263.35, 127.27], [263.38, 126.93], [264.74, 127.02], [264.71, 127.42], [263.35, 127.27]]]} 93 \N \N
+22 {"type": "Polygon", "coordinates": [[[283.88, 135.89], [283.91, 135.54], [284.27, 135.58], [284.23, 135.92], [283.88, 135.89]]]} 94 \N \N
+23 {"type": "Polygon", "coordinates": [[[289.73, 136.42], [289.76, 136.09], [290.1, 136.12], [290.07, 136.45], [289.73, 136.42]]]} 94 \N \N
+24 {"type": "Polygon", "coordinates": [[[295.63, 136.96], [295.67, 136.63], [296.01, 136.66], [295.99, 137.0], [295.63, 136.96]]]} 94 \N \N
+25 {"type": "Polygon", "coordinates": [[[283.53, 130.08], [283.56, 129.74], [285.47, 129.89], [285.43, 130.25], [283.53, 130.08]]]} 94 \N \N
+26 {"type": "Polygon", "coordinates": [[[289.4, 130.61], [289.43, 130.26], [291.34, 130.45], [291.31, 130.79], [289.4, 130.61]]]} 94 \N \N
+3 {"type": "Polygon", "coordinates": [[[274.5, 207.3], [274.5, 207.97], [275.06, 207.97], [275.06, 207.3], [274.5, 207.3]]]} 33 \N \N
+27 {"type": "Polygon", "coordinates": [[[295.26, 131.15], [295.29, 130.8], [297.19, 130.99], [297.16, 131.32], [295.26, 131.15]]]} 94 \N \N
+4 {"type": "Polygon", "coordinates": [[[274.54, 211.37], [274.54, 212.03], [275.16, 212.03], [275.16, 211.37], [274.54, 211.37]]]} 33 \N \N
+30 {"type": "Polygon", "coordinates": [[[299.83, 211.46], [300.36, 211.46], [300.36, 211.97], [299.83, 211.97], [299.83, 211.46]]]} 118 \N \N
+31 {"type": "Polygon", "coordinates": [[[299.83, 207.4], [300.36, 207.4], [300.36, 207.91], [299.83, 207.91], [299.83, 207.4]]]} 118 \N \N
+32 {"type": "Polygon", "coordinates": [[[299.83, 203.34], [300.36, 203.34], [300.36, 203.84], [299.83, 203.84], [299.83, 203.34]]]} 118 \N \N
+33 {"type": "Polygon", "coordinates": [[[299.83, 199.24], [300.36, 199.24], [300.36, 199.75], [299.83, 199.75], [299.83, 199.24]]]} 118 \N \N
+34 {"type": "Polygon", "coordinates": [[[289.5, 211.47], [286.34, 211.47], [286.34, 211.97], [289.49, 211.97], [289.5, 211.47]]]} 118 \N \N
+35 {"type": "Polygon", "coordinates": [[[289.49, 207.41], [286.35, 207.41], [286.35, 207.91], [289.5, 207.91], [289.49, 207.41]]]} 118 \N \N
+36 {"type": "Polygon", "coordinates": [[[289.49, 203.34], [286.34, 203.34], [286.34, 203.85], [289.5, 203.85], [289.49, 203.34]]]} 118 \N \N
+37 {"type": "Polygon", "coordinates": [[[289.48, 199.25], [286.35, 199.25], [286.35, 199.75], [289.48, 199.75], [289.48, 199.25]]]} 118 \N \N
+38 {"type": "Polygon", "coordinates": [[[251.01, 129.88], [242.74, 129.16], [242.77, 128.89], [251.03, 129.67], [251.01, 129.88]]]} 61 \N \N
+39 {"type": "Polygon", "coordinates": [[[288.95, 234.43], [288.95, 229.86], [298.97, 229.86], [298.97, 234.44], [288.95, 234.43]]]} 22 \N \N
+5 {"type": "Polygon", "coordinates": [[[283.95, 230.3], [283.95, 231.99], [285.82, 231.99], [285.82, 231.68], [285.98, 231.68], [285.98, 232.63], [285.82, 232.63], [285.82, 232.32], [283.95, 232.32], [283.95, 234.02], [286.45, 234.02], [286.45, 234.45], [283.46, 234.45], [283.46, 229.86], [286.45, 229.86], [286.45, 230.3], [283.95, 230.3]]]} 22 \N \N
+\.
+
+
+--
+-- Data for Name: mapdata_crossdescription; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_crossdescription (id, description_i18n, origin_space_id, space_id, target_space_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_door; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_door (id, geometry, access_restriction_id, level_id, import_tag) FROM stdin;
+1 {"type": "Polygon", "coordinates": [[[277.48, 222.48], [279.17, 222.47], [279.17, 221.99], [277.48, 221.99], [277.48, 222.48]]]} \N 2 \N
+2 {"type": "Polygon", "coordinates": [[[279.35, 221.99], [279.35, 222.51], [281.13, 222.51], [281.13, 222.0], [279.35, 221.99]]]} \N 2 \N
+3 {"type": "Polygon", "coordinates": [[[306.51, 223.2], [304.78, 223.2], [304.78, 222.99], [306.51, 222.99], [306.51, 223.2]]]} \N 10 \N
+6 {"type": "Polygon", "coordinates": [[[275.19, 233.81], [275.19, 234.12], [276.4, 234.12], [276.4, 233.82], [275.19, 233.81]]]} \N 10 \N
+7 {"type": "Polygon", "coordinates": [[[250.46, 201.3], [250.47, 200.5], [251.96, 200.5], [251.96, 201.31], [250.46, 201.3]]]} \N 2 \N
+8 {"type": "Polygon", "coordinates": [[[299.92, 224.89], [302.59, 224.95], [302.65, 227.57], [299.92, 227.63], [299.92, 224.89]]]} \N 2 \N
+10 {"type": "Polygon", "coordinates": [[[270.25, 205.04], [270.64, 205.04], [270.64, 204.06], [270.27, 204.06], [270.25, 205.04]]]} \N 10 \N
+11 {"type": "Polygon", "coordinates": [[[272.27, 189.23], [272.87, 189.23], [272.87, 185.46], [272.3, 185.46], [272.27, 189.23]]]} \N 10 \N
+12 {"type": "Polygon", "coordinates": [[[275.34, 206.34], [275.34, 206.07], [276.23, 206.07], [276.23, 206.34], [275.34, 206.34]]]} \N 10 \N
+13 {"type": "Polygon", "coordinates": [[[277.36, 205.57], [277.73, 205.57], [277.73, 204.68], [277.38, 204.68], [277.36, 205.57]]]} \N 10 \N
+14 {"type": "Polygon", "coordinates": [[[277.37, 203.72], [277.69, 203.72], [277.69, 202.88], [277.37, 202.88], [277.37, 203.72]]]} \N 10 \N
+15 {"type": "Polygon", "coordinates": [[[281.88, 240.02], [281.88, 240.35], [282.67, 240.35], [282.67, 240.02], [281.88, 240.02]]]} \N 10 \N
+18 {"type": "Polygon", "coordinates": [[[267.63, 225.17], [267.63, 224.85], [268.57, 224.85], [268.57, 225.18], [267.63, 225.17]]]} \N 2 \N
+19 {"type": "Polygon", "coordinates": [[[263.6, 225.2], [263.6, 224.89], [264.48, 224.89], [264.48, 225.18], [263.6, 225.2]]]} \N 2 \N
+20 {"type": "Polygon", "coordinates": [[[260.82, 225.21], [260.82, 224.85], [261.93, 224.85], [261.93, 225.19], [260.82, 225.21]]]} \N 2 \N
+21 {"type": "Polygon", "coordinates": [[[263.67, 206.9], [263.99, 206.9], [263.99, 206.18], [263.7, 206.18], [263.67, 206.9]]]} \N 2 \N
+22 {"type": "Polygon", "coordinates": [[[265.21, 207.22], [265.21, 206.9], [265.95, 206.9], [265.95, 207.21], [265.21, 207.22]]]} \N 2 \N
+23 {"type": "Polygon", "coordinates": [[[266.94, 206.89], [267.15, 206.89], [267.15, 206.1], [266.93, 206.1], [266.94, 206.89]]]} \N 2 \N
+24 {"type": "Polygon", "coordinates": [[[235.54, 212.02], [235.54, 211.53], [239.59, 211.53], [239.59, 212.0], [235.54, 212.02]]]} \N 2 \N
+25 {"type": "Polygon", "coordinates": [[[269.33, 203.46], [269.53, 203.46], [269.53, 201.24], [269.31, 201.24], [269.33, 203.46]]]} \N 2 \N
+26 {"type": "Polygon", "coordinates": [[[270.68, 211.99], [270.68, 211.75], [272.15, 211.75], [272.15, 211.99], [270.68, 211.99]]]} \N 2 \N
+16 {"type": "Polygon", "coordinates": [[[284.46, 222.64], [284.46, 222.23], [286.15, 222.24], [286.14, 222.65], [284.46, 222.64]]]} \N 10 \N
+17 {"type": "Polygon", "coordinates": [[[286.29, 222.61], [286.29, 222.28], [288.02, 222.28], [288.02, 222.61], [286.29, 222.61]]]} \N 10 \N
+9 {"type": "Polygon", "coordinates": [[[268.38, 223.61], [268.38, 223.13], [270.2, 223.13], [270.2, 223.61], [268.38, 223.61]]]} \N 2 \N
+4 {"type": "Polygon", "coordinates": [[[304.96, 229.71], [304.96, 230.15], [306.67, 230.14], [306.67, 229.71], [304.96, 229.71]]]} \N 10 \N
+30 {"type": "Polygon", "coordinates": [[[270.32, 204.92], [270.77, 204.92], [270.77, 203.94], [270.32, 203.94], [270.32, 204.92]]]} \N 34 \N
+31 {"type": "Polygon", "coordinates": [[[272.76, 179.67], [272.76, 179.26], [274.55, 179.26], [274.55, 179.65], [272.76, 179.67]]]} \N 34 \N
+32 {"type": "Polygon", "coordinates": [[[270.28, 194.23], [270.77, 194.23], [270.77, 192.64], [270.3, 192.64], [270.28, 194.23]]]} \N 34 \N
+5 {"type": "Polygon", "coordinates": [[[280.61, 223.21], [280.61, 222.96], [282.75, 222.96], [282.75, 223.19], [280.61, 223.21]]]} \N 10 \N
+33 {"type": "Polygon", "coordinates": [[[339.29, 197.09], [339.29, 197.34], [341.06, 197.34], [341.06, 197.08], [339.29, 197.09]]]} \N 38 \N
+34 {"type": "Polygon", "coordinates": [[[341.71, 197.34], [341.71, 197.08], [343.47, 197.08], [343.47, 197.34], [341.71, 197.34]]]} \N 38 \N
+35 {"type": "Polygon", "coordinates": [[[422.17, 197.34], [422.17, 197.08], [423.95, 197.08], [423.95, 197.35], [422.17, 197.34]]]} \N 38 \N
+36 {"type": "Polygon", "coordinates": [[[424.73, 197.08], [424.73, 197.34], [426.39, 197.34], [426.39, 197.09], [424.73, 197.08]]]} \N 38 \N
+37 {"type": "Polygon", "coordinates": [[[348.24, 190.57], [348.55, 190.57], [348.55, 189.49], [348.25, 189.49], [348.24, 190.57]]]} \N 2 \N
+38 {"type": "Polygon", "coordinates": [[[343.24, 198.97], [343.74, 198.97], [343.74, 200.65], [343.26, 200.65], [343.24, 198.97]]]} \N 2 \N
+39 {"type": "Polygon", "coordinates": [[[348.25, 190.59], [348.58, 190.59], [348.58, 189.54], [348.26, 189.54], [348.25, 190.59]]]} \N 38 \N
+40 {"type": "Polygon", "coordinates": [[[278.7, 137.5], [278.96, 137.52], [279.11, 136.07], [278.85, 136.04], [278.7, 137.5]]]} \N 2 \N
+41 {"type": "Polygon", "coordinates": [[[279.61, 127.77], [279.86, 127.8], [280.01, 126.36], [279.76, 126.33], [279.61, 127.77]]]} \N 2 \N
+42 {"type": "Polygon", "coordinates": [[[277.18, 120.47], [277.2, 120.27], [277.99, 120.34], [277.96, 120.55], [277.18, 120.47]]]} \N 2 \N
+43 {"type": "Polygon", "coordinates": [[[276.06, 120.37], [276.08, 120.16], [276.86, 120.24], [276.83, 120.43], [276.06, 120.37]]]} \N 2 \N
+44 {"type": "Polygon", "coordinates": [[[275.64, 121.76], [275.85, 121.78], [275.98, 120.38], [275.79, 120.35], [275.64, 121.76]]]} \N 2 \N
+45 {"type": "Polygon", "coordinates": [[[265.15, 137.47], [265.26, 136.19], [267.13, 136.3], [267.03, 137.69], [265.15, 137.47]]]} \N 2 \N
+46 {"type": "Polygon", "coordinates": [[[261.86, 137.15], [261.97, 135.89], [264.11, 136.1], [264.04, 137.4], [261.86, 137.15]]]} \N 2 \N
+47 {"type": "Polygon", "coordinates": [[[272.75, 143.89], [272.82, 143.21], [276.33, 143.46], [276.27, 144.21], [272.75, 143.89]]]} \N 2 \N
+50 {"type": "Polygon", "coordinates": [[[268.02, 156.18], [268.03, 155.91], [269.78, 155.91], [269.78, 156.2], [268.02, 156.18]]]} \N 10 \N
+51 {"type": "Polygon", "coordinates": [[[272.3, 205.42], [272.77, 205.42], [272.77, 204.1], [272.31, 204.1], [272.3, 205.42]]]} \N 2 \N
+52 {"type": "Polygon", "coordinates": [[[270.31, 205.08], [270.66, 205.08], [270.66, 204.15], [270.3, 204.15], [270.31, 205.08]]]} \N 2 \N
+53 {"type": "Polygon", "coordinates": [[[272.34, 193.32], [272.7, 193.31], [272.7, 194.36], [272.34, 194.36], [272.34, 193.32]]]} \N 2 \N
+54 {"type": "Polygon", "coordinates": [[[283.45, 233.45], [284.05, 233.45], [284.05, 232.57], [283.48, 232.57], [283.45, 233.45]]]} \N 2 \N
+55 {"type": "Polygon", "coordinates": [[[283.49, 231.57], [284.03, 231.57], [284.03, 230.76], [283.49, 230.76], [283.49, 231.57]]]} \N 2 \N
+56 {"type": "Polygon", "coordinates": [[[283.55, 233.45], [284.03, 233.45], [284.03, 232.7], [283.56, 232.7], [283.55, 233.45]]]} \N 82 \N
+57 {"type": "Polygon", "coordinates": [[[283.57, 231.59], [283.98, 231.59], [283.98, 230.86], [283.59, 230.86], [283.57, 231.59]]]} \N 82 \N
+58 {"type": "Polygon", "coordinates": [[[283.45, 233.44], [284.03, 233.44], [284.03, 232.66], [283.46, 232.66], [283.45, 233.44]]]} \N 38 \N
+59 {"type": "Polygon", "coordinates": [[[283.44, 231.61], [284.01, 231.61], [284.01, 230.83], [283.46, 230.83], [283.44, 231.61]]]} \N 38 \N
+60 {"type": "Polygon", "coordinates": [[[263.66, 206.84], [263.88, 206.84], [263.88, 206.2], [263.66, 206.2], [263.66, 206.84]]]} \N 38 \N
+61 {"type": "Polygon", "coordinates": [[[266.88, 206.15], [267.15, 206.15], [267.15, 206.94], [266.88, 206.94], [266.88, 206.15]]]} \N 38 \N
+62 {"type": "Polygon", "coordinates": [[[265.23, 206.94], [265.23, 207.25], [265.93, 207.25], [265.93, 206.93], [265.23, 206.94]]]} \N 38 \N
+48 {"type": "Polygon", "coordinates": [[[272.71, 141.68], [272.73, 141.4], [273.6, 141.48], [273.58, 141.76], [272.71, 141.68]]]} \N 2 \N
+63 {"type": "Polygon", "coordinates": [[[273.54, 137.76], [273.55, 137.46], [276.29, 137.71], [276.29, 138.01], [273.54, 137.76]]]} \N 2 \N
+64 {"type": "Polygon", "coordinates": [[[423.2, 201.41], [423.2, 201.09], [424.95, 201.09], [424.95, 201.41], [423.2, 201.41]]]} \N 2 \N
+65 {"type": "Polygon", "coordinates": [[[421.29, 200.43], [421.7, 200.43], [421.7, 198.79], [421.3, 198.79], [421.29, 200.43]]]} \N 2 \N
+67 {"type": "Polygon", "coordinates": [[[426.51, 200.72], [427.66, 200.72], [427.66, 198.98], [426.51, 198.98], [426.51, 200.72]]]} \N 2 \N
+68 {"type": "Polygon", "coordinates": [[[412.34, 189.43], [412.34, 189.13], [413.95, 189.13], [413.95, 189.43], [412.34, 189.43]]]} \N 2 \N
+69 {"type": "Polygon", "coordinates": [[[412.37, 189.52], [412.37, 189.16], [413.9, 189.16], [413.9, 189.51], [412.37, 189.52]]]} \N 38 \N
+\.
+
+
+--
+-- Data for Name: mapdata_dynamiclocation; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_dynamiclocation (locationslug_ptr_id, titles, can_search, can_describe, icon, label_overrides, position_secret, access_restriction_id, label_settings_id, external_url, import_block_data, import_block_geom) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_dynamiclocation_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_dynamiclocation_groups (id, dynamiclocation_id, locationgroup_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_graphedge; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_graphedge (id, access_restriction_id, from_node_id, to_node_id, waytype_id) FROM stdin;
+73 \N 29 28 \N
+74 \N 28 29 \N
+75 \N 31 32 1
+76 \N 32 31 1
+77 \N 32 33 1
+78 \N 33 32 1
+79 \N 33 30 \N
+80 \N 30 33 \N
+81 \N 41 34 \N
+82 \N 34 41 \N
+83 \N 42 35 \N
+84 \N 35 42 \N
+85 \N 39 37 \N
+86 \N 37 39 \N
+17 \N 7 8 \N
+18 \N 8 7 \N
+87 \N 40 38 \N
+88 \N 38 40 \N
+89 \N 34 36 \N
+90 \N 36 34 \N
+91 \N 35 36 \N
+92 \N 36 35 \N
+93 \N 43 37 \N
+94 \N 37 43 \N
+95 \N 43 38 \N
+96 \N 38 43 \N
+99 \N 45 44 1
+100 \N 44 45 1
+101 \N 44 46 1
+102 \N 46 44 1
+103 \N 46 31 \N
+104 \N 31 46 \N
+105 \N 30 42 \N
+106 \N 42 30 \N
+37 \N 16 17 1
+38 \N 17 16 1
+107 \N 36 48 \N
+108 \N 48 36 \N
+109 \N 47 48 \N
+110 \N 48 47 \N
+43 \N 14 18 \N
+44 \N 18 14 \N
+55 \N 23 16 1
+56 \N 16 23 1
+57 \N 17 24 1
+58 \N 24 17 1
+59 \N 18 23 \N
+60 \N 23 18 \N
+61 \N 24 25 \N
+62 \N 25 24 \N
+121 \N 54 45 \N
+122 \N 45 54 \N
+67 \N 26 22 2
+68 \N 22 26 2
+123 \N 54 55 \N
+124 \N 55 54 \N
+125 \N 54 53 \N
+126 \N 53 54 \N
+127 \N 53 52 \N
+128 \N 52 53 \N
+129 \N 52 51 \N
+130 \N 51 52 \N
+137 \N 68 58 \N
+138 \N 58 68 \N
+141 \N 60 61 2
+142 \N 61 60 2
+147 \N 65 64 \N
+148 \N 64 65 \N
+149 \N 66 64 \N
+150 \N 64 66 \N
+151 \N 67 64 \N
+152 \N 64 67 \N
+153 \N 60 58 \N
+154 \N 58 60 \N
+155 \N 69 70 \N
+156 \N 70 69 \N
+157 \N 70 71 \N
+158 \N 71 70 \N
+159 \N 71 72 \N
+160 \N 72 71 \N
+161 \N 72 73 \N
+162 \N 73 72 \N
+163 \N 73 74 1
+164 \N 74 73 1
+167 \N 72 76 2
+168 \N 76 72 2
+169 \N 76 74 2
+170 \N 74 76 2
+173 \N 61 76 2
+174 \N 76 61 2
+177 \N 77 75 1
+178 \N 75 77 1
+179 \N 74 75 \N
+180 \N 75 74 \N
+181 \N 82 78 \N
+182 \N 79 83 \N
+183 \N 81 84 \N
+184 \N 84 81 \N
+185 \N 84 64 \N
+186 \N 64 84 \N
+187 \N 84 83 \N
+188 \N 83 84 \N
+191 \N 85 82 \N
+192 \N 82 85 \N
+193 \N 85 80 \N
+194 \N 80 85 \N
+197 \N 85 84 \N
+198 \N 84 85 \N
+199 \N 88 87 1
+200 \N 87 88 1
+201 \N 89 86 1
+202 \N 86 89 1
+203 \N 77 58 \N
+204 \N 58 77 \N
+205 \N 90 91 \N
+206 \N 94 92 \N
+207 \N 92 94 \N
+208 \N 92 95 \N
+209 \N 95 92 \N
+210 \N 96 92 \N
+211 \N 92 96 \N
+212 \N 92 93 \N
+213 \N 93 92 \N
+214 \N 104 103 \N
+215 \N 103 104 \N
+216 \N 105 102 \N
+217 \N 102 105 \N
+218 \N 106 101 \N
+219 \N 101 106 \N
+220 \N 100 99 \N
+221 \N 99 100 \N
+222 \N 103 102 \N
+223 \N 102 103 \N
+224 \N 102 101 \N
+225 \N 101 102 \N
+226 \N 101 100 \N
+227 \N 100 101 \N
+228 \N 100 107 \N
+229 \N 107 100 \N
+230 \N 107 108 \N
+231 \N 108 107 \N
+232 \N 108 109 \N
+233 \N 109 108 \N
+234 \N 110 112 \N
+235 \N 112 110 \N
+236 \N 111 113 \N
+237 \N 113 111 \N
+238 \N 114 115 \N
+239 \N 115 114 \N
+240 \N 115 116 \N
+241 \N 116 115 \N
+242 \N 116 97 \N
+243 \N 97 116 \N
+244 \N 97 93 \N
+245 \N 93 97 \N
+246 \N 97 98 \N
+247 \N 98 97 \N
+248 \N 93 117 \N
+249 \N 117 93 \N
+250 \N 121 120 \N
+251 \N 120 121 \N
+256 \N 119 118 \N
+257 \N 118 119 \N
+258 \N 118 117 \N
+259 \N 117 118 \N
+260 \N 119 122 \N
+261 \N 122 119 \N
+262 \N 123 122 \N
+263 \N 122 123 \N
+264 \N 123 8 1
+265 \N 8 123 1
+133 \N 49 47 \N
+134 \N 47 49 \N
+266 \N 125 25 \N
+267 \N 25 125 \N
+268 \N 25 124 \N
+269 \N 124 25 \N
+270 \N 7 124 1
+271 \N 124 7 1
+272 \N 128 127 \N
+273 \N 127 128 \N
+274 \N 127 126 \N
+275 \N 126 127 \N
+276 \N 126 125 \N
+277 \N 125 126 \N
+278 \N 125 22 \N
+279 \N 22 125 \N
+280 \N 135 130 \N
+281 \N 130 135 \N
+282 \N 130 131 \N
+283 \N 131 130 \N
+284 \N 131 134 \N
+285 \N 134 131 \N
+286 \N 131 132 \N
+287 \N 132 131 \N
+288 \N 132 133 \N
+289 \N 133 132 \N
+290 \N 130 129 \N
+291 \N 129 130 \N
+292 \N 127 129 \N
+293 \N 129 127 \N
+294 \N 137 136 \N
+295 \N 136 137 \N
+296 \N 136 129 \N
+297 \N 129 136 \N
+298 \N 69 138 \N
+299 \N 138 69 \N
+300 \N 138 128 \N
+301 \N 128 138 \N
+302 \N 90 119 \N
+303 \N 119 90 \N
+304 \N 26 90 2
+305 \N 90 26 2
+306 \N 19 14 \N
+307 \N 14 19 \N
+308 \N 139 14 \N
+309 \N 14 139 \N
+310 \N 139 140 \N
+311 \N 140 139 \N
+312 \N 140 28 \N
+313 \N 28 140 \N
+314 \N 112 141 \N
+315 \N 141 112 \N
+316 \N 113 141 \N
+317 \N 141 113 \N
+318 \N 141 91 \N
+319 \N 91 141 \N
+320 \N 122 142 \N
+321 \N 142 141 \N
+322 \N 141 142 \N
+323 \N 146 145 \N
+324 \N 145 146 \N
+325 \N 145 143 \N
+326 \N 143 145 \N
+329 \N 147 148 1
+330 \N 148 147 1
+331 \N 149 150 \N
+332 \N 150 149 \N
+333 \N 151 152 1
+334 \N 152 151 1
+335 \N 153 147 1
+336 \N 147 153 1
+337 \N 109 148 1
+338 \N 148 109 1
+339 \N 108 149 1
+340 \N 149 108 1
+341 \N 150 154 1
+342 \N 154 150 1
+343 \N 154 155 \N
+344 \N 155 154 \N
+345 \N 151 155 1
+346 \N 155 151 1
+347 \N 152 143 1
+348 \N 143 152 1
+371 \N 110 107 \N
+372 \N 107 110 \N
+373 \N 111 110 \N
+374 \N 110 111 \N
+375 \N 111 161 \N
+376 \N 161 111 \N
+377 \N 110 108 \N
+378 \N 108 110 \N
+379 \N 109 160 \N
+380 \N 160 109 \N
+381 \N 161 160 \N
+382 \N 160 161 \N
+387 \N 176 175 \N
+388 \N 175 176 \N
+389 \N 169 171 \N
+390 \N 171 169 \N
+391 \N 170 172 \N
+392 \N 172 170 \N
+393 \N 167 173 \N
+394 \N 173 167 \N
+395 \N 168 174 \N
+396 \N 174 168 \N
+397 \N 153 137 \N
+398 \N 137 153 \N
+399 \N 153 171 \N
+400 \N 171 153 \N
+401 \N 137 172 \N
+402 \N 172 137 \N
+403 \N 172 153 \N
+404 \N 153 172 \N
+413 \N 172 173 \N
+414 \N 173 172 \N
+415 \N 173 174 \N
+416 \N 174 173 \N
+417 \N 182 181 \N
+418 \N 181 182 \N
+419 \N 181 180 \N
+420 \N 180 181 \N
+421 \N 180 177 \N
+422 \N 177 180 \N
+423 \N 180 178 \N
+424 \N 178 180 \N
+425 \N 180 179 \N
+426 \N 179 180 \N
+429 \N 143 183 \N
+430 \N 183 143 \N
+431 \N 183 182 \N
+432 \N 182 183 \N
+433 \N 144 183 \N
+434 \N 183 144 \N
+437 \N 99 121 \N
+438 \N 121 99 \N
+439 \N 99 114 \N
+440 \N 114 99 \N
+441 \N 121 114 \N
+442 \N 114 121 \N
+443 \N 109 185 \N
+444 \N 185 109 \N
+445 \N 186 160 \N
+446 \N 160 186 \N
+453 \N 76 85 2
+454 \N 85 76 2
+455 \N 58 187 1
+456 \N 187 58 1
+457 \N 85 187 \N
+458 \N 187 85 \N
+461 \N 90 120 1
+462 \N 120 90 1
+465 \N 202 201 \N
+466 \N 201 202 \N
+467 \N 201 200 1
+468 \N 200 201 1
+469 \N 200 199 1
+470 \N 199 200 1
+471 \N 199 198 1
+472 \N 198 199 1
+473 \N 198 197 \N
+474 \N 197 198 \N
+475 \N 197 196 \N
+476 \N 196 197 \N
+477 \N 196 195 \N
+478 \N 195 196 \N
+479 \N 195 194 1
+480 \N 194 195 1
+481 \N 194 193 1
+482 \N 193 194 1
+485 \N 189 190 \N
+486 \N 190 189 \N
+487 \N 190 191 \N
+488 \N 191 190 \N
+489 \N 191 193 \N
+490 \N 193 191 \N
+493 \N 203 207 \N
+494 \N 207 203 \N
+495 \N 207 205 \N
+496 \N 205 207 \N
+497 \N 68 205 \N
+498 \N 205 68 \N
+499 \N 205 142 \N
+500 \N 142 205 \N
+501 \N 142 206 \N
+502 \N 206 142 \N
+505 \N 207 88 \N
+506 \N 88 207 \N
+135 \N 50 51 \N
+136 \N 51 50 \N
+507 \N 49 50 2
+508 \N 50 49 2
+513 \N 171 216 \N
+514 \N 216 171 \N
+515 \N 216 175 \N
+516 \N 175 216 \N
+517 \N 175 211 \N
+518 \N 211 175 \N
+519 \N 211 215 \N
+520 \N 215 211 \N
+521 \N 215 213 \N
+522 \N 213 215 \N
+523 \N 213 172 \N
+524 \N 172 213 \N
+525 \N 211 212 \N
+526 \N 212 211 \N
+527 \N 212 214 \N
+528 \N 214 212 \N
+529 \N 214 213 \N
+530 \N 213 214 \N
+531 \N 214 174 \N
+532 \N 174 214 \N
+533 \N 172 216 \N
+534 \N 216 172 \N
+535 \N 157 215 \N
+536 \N 215 157 \N
+537 \N 209 215 \N
+538 \N 215 209 \N
+539 \N 212 218 \N
+540 \N 218 212 \N
+541 \N 211 217 \N
+542 \N 217 211 \N
+543 \N 217 212 \N
+544 \N 212 217 \N
+545 \N 163 146 \N
+546 \N 146 163 \N
+551 \N 209 208 2
+552 \N 208 209 2
+563 \N 219 145 \N
+564 \N 145 219 \N
+569 \N 208 160 \N
+570 \N 160 208 \N
+571 \N 208 219 2
+572 \N 219 208 2
+573 \N 209 219 2
+574 \N 219 209 2
+575 \N 220 22 \N
+576 \N 22 220 \N
+577 \N 220 19 2
+578 \N 19 220 2
+579 \N 220 90 2
+580 \N 90 220 2
+66 \N 26 19 \N
+65 \N 19 26 \N
+581 \N 222 161 \N
+582 \N 161 222 \N
+583 \N 222 157 2
+584 \N 157 222 2
+585 \N 163 157 2
+586 \N 157 163 2
+587 \N 163 222 2
+588 \N 222 163 2
+591 \N 48 223 \N
+592 \N 223 48 \N
+593 \N 43 223 \N
+594 \N 223 43 \N
+595 \N 206 232 \N
+596 \N 232 206 \N
+597 \N 232 231 \N
+598 \N 231 232 \N
+599 \N 231 230 \N
+600 \N 230 231 \N
+601 \N 230 233 \N
+602 \N 233 230 \N
+603 \N 190 233 \N
+604 \N 233 190 \N
+605 \N 190 226 \N
+606 \N 226 190 \N
+607 \N 226 227 \N
+608 \N 227 226 \N
+609 \N 227 228 \N
+610 \N 228 227 \N
+611 \N 228 229 \N
+612 \N 229 228 \N
+613 \N 229 224 2
+614 \N 224 229 2
+615 \N 223 225 \N
+616 \N 225 223 \N
+617 \N 224 225 \N
+618 \N 225 224 \N
+\.
+
+
+--
+-- Data for Name: mapdata_graphnode; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_graphnode (id, geometry, space_id, import_tag) FROM stdin;
+7 {"type": "Point", "coordinates": [268.0, 198.79]} 71 \N
+8 {"type": "Point", "coordinates": [269.65, 198.79]} 71 \N
+14 {"type": "Point", "coordinates": [271.42, 193.34]} 75 \N
+16 {"type": "Point", "coordinates": [268.09, 198.69]} 78 \N
+17 {"type": "Point", "coordinates": [269.61, 198.69]} 78 \N
+18 {"type": "Point", "coordinates": [268.2, 193.38]} 79 \N
+19 {"type": "Point", "coordinates": [271.51, 204.39]} 75 \N
+22 {"type": "Point", "coordinates": [271.33, 204.55]} 52 \N
+23 {"type": "Point", "coordinates": [268.14, 196.22]} 78 \N
+24 {"type": "Point", "coordinates": [269.69, 195.27]} 78 \N
+25 {"type": "Point", "coordinates": [269.74, 193.86]} 52 \N
+26 {"type": "Point", "coordinates": [269.01, 204.52]} 76 \N
+28 {"type": "Point", "coordinates": [273.68, 179.73]} 75 \N
+29 {"type": "Point", "coordinates": [273.64, 179.03]} 35 \N
+31 {"type": "Point", "coordinates": [343.36, 201.92]} 84 \N
+32 {"type": "Point", "coordinates": [339.12, 201.89]} 83 \N
+33 {"type": "Point", "coordinates": [339.09, 206.9]} 83 \N
+34 {"type": "Point", "coordinates": [340.21, 196.98]} 45 \N
+35 {"type": "Point", "coordinates": [342.65, 196.99]} 45 \N
+36 {"type": "Point", "coordinates": [343.63, 193.3]} 45 \N
+37 {"type": "Point", "coordinates": [423.11, 196.75]} 45 \N
+38 {"type": "Point", "coordinates": [425.57, 196.71]} 45 \N
+39 {"type": "Point", "coordinates": [423.1, 197.66]} 39 \N
+40 {"type": "Point", "coordinates": [425.54, 197.61]} 39 \N
+41 {"type": "Point", "coordinates": [340.2, 197.53]} 46 \N
+42 {"type": "Point", "coordinates": [342.64, 197.51]} 46 \N
+43 {"type": "Point", "coordinates": [424.55, 193.06]} 45 \N
+44 {"type": "Point", "coordinates": [339.18, 206.82]} 86 \N
+45 {"type": "Point", "coordinates": [339.21, 203.19]} 64 \N
+46 {"type": "Point", "coordinates": [343.34, 206.84]} 84 \N
+30 {"type": "Point", "coordinates": [346.93, 206.89]} 46 \N
+47 {"type": "Point", "coordinates": [350.08, 189.87]} 45 \N
+48 {"type": "Point", "coordinates": [350.12, 193.27]} 45 \N
+49 {"type": "Point", "coordinates": [347.38, 189.84]} 88 \N
+50 {"type": "Point", "coordinates": [347.37, 189.81]} 50 \N
+51 {"type": "Point", "coordinates": [350.12, 189.91]} 49 \N
+52 {"type": "Point", "coordinates": [350.08, 193.43]} 49 \N
+53 {"type": "Point", "coordinates": [340.63, 193.43]} 49 \N
+54 {"type": "Point", "coordinates": [341.04, 199.69]} 49 \N
+55 {"type": "Point", "coordinates": [344.57, 199.69]} 47 \N
+58 {"type": "Point", "coordinates": [274.98, 142.64]} 95 \N
+60 {"type": "Point", "coordinates": [272.95, 142.34]} 95 \N
+61 {"type": "Point", "coordinates": [273.1, 140.53]} 96 \N
+64 {"type": "Point", "coordinates": [276.94, 121.61]} 92 \N
+65 {"type": "Point", "coordinates": [275.01, 121.37]} 91 \N
+66 {"type": "Point", "coordinates": [276.52, 119.82]} 90 \N
+67 {"type": "Point", "coordinates": [277.64, 119.94]} 89 \N
+68 {"type": "Point", "coordinates": [274.93, 144.38]} 61 \N
+69 {"type": "Point", "coordinates": [268.85, 156.86]} 14 \N
+70 {"type": "Point", "coordinates": [268.96, 150.0]} 97 \N
+71 {"type": "Point", "coordinates": [272.17, 149.89]} 97 \N
+72 {"type": "Point", "coordinates": [273.0, 142.2]} 97 \N
+73 {"type": "Point", "coordinates": [275.37, 142.31]} 97 \N
+74 {"type": "Point", "coordinates": [276.04, 137.0]} 98 \N
+75 {"type": "Point", "coordinates": [277.81, 137.11]} 98 \N
+76 {"type": "Point", "coordinates": [273.1, 140.15]} 100 \N
+77 {"type": "Point", "coordinates": [277.12, 142.84]} 95 \N
+78 {"type": "Point", "coordinates": [279.29, 136.82]} 94 \N
+79 {"type": "Point", "coordinates": [280.18, 127.07]} 94 \N
+80 {"type": "Point", "coordinates": [272.0, 136.02]} 93 \N
+81 {"type": "Point", "coordinates": [273.13, 124.11]} 93 \N
+82 {"type": "Point", "coordinates": [278.37, 136.7]} 92 \N
+83 {"type": "Point", "coordinates": [279.32, 127.01]} 92 \N
+84 {"type": "Point", "coordinates": [277.25, 124.28]} 92 \N
+85 {"type": "Point", "coordinates": [275.61, 136.54]} 92 \N
+86 {"type": "Point", "coordinates": [266.22, 135.88]} 93 \N
+87 {"type": "Point", "coordinates": [262.97, 135.65]} 93 \N
+88 {"type": "Point", "coordinates": [262.61, 139.88]} 61 \N
+89 {"type": "Point", "coordinates": [266.01, 140.12]} 61 \N
+91 {"type": "Point", "coordinates": [272.81, 204.74]} 33 \N
+92 {"type": "Point", "coordinates": [265.56, 206.42]} 58 \N
+93 {"type": "Point", "coordinates": [265.81, 202.38]} 58 \N
+94 {"type": "Point", "coordinates": [263.41, 206.55]} 56 \N
+95 {"type": "Point", "coordinates": [265.53, 207.35]} 57 \N
+96 {"type": "Point", "coordinates": [267.4, 206.45]} 40 \N
+97 {"type": "Point", "coordinates": [251.24, 201.56]} 58 \N
+98 {"type": "Point", "coordinates": [251.27, 200.21]} 30 \N
+99 {"type": "Point", "coordinates": [269.35, 222.9]} 36 \N
+100 {"type": "Point", "coordinates": [269.32, 224.24]} 32 \N
+101 {"type": "Point", "coordinates": [268.05, 224.27]} 32 \N
+102 {"type": "Point", "coordinates": [263.94, 224.3]} 32 \N
+103 {"type": "Point", "coordinates": [261.46, 224.33]} 32 \N
+104 {"type": "Point", "coordinates": [261.4, 225.6]} 54 \N
+105 {"type": "Point", "coordinates": [263.94, 225.6]} 55 \N
+106 {"type": "Point", "coordinates": [268.02, 225.63]} 42 \N
+107 {"type": "Point", "coordinates": [273.6, 224.2]} 31 \N
+108 {"type": "Point", "coordinates": [273.47, 231.17]} 31 \N
+109 {"type": "Point", "coordinates": [273.47, 233.06]} 31 \N
+110 {"type": "Point", "coordinates": [278.34, 224.14]} 31 \N
+111 {"type": "Point", "coordinates": [280.29, 224.11]} 31 \N
+112 {"type": "Point", "coordinates": [278.33, 221.85]} 33 \N
+113 {"type": "Point", "coordinates": [280.22, 221.8]} 33 \N
+114 {"type": "Point", "coordinates": [237.61, 212.28]} 36 \N
+115 {"type": "Point", "coordinates": [237.64, 211.32]} 58 \N
+116 {"type": "Point", "coordinates": [237.83, 201.97]} 58 \N
+117 {"type": "Point", "coordinates": [269.23, 202.28]} 58 \N
+118 {"type": "Point", "coordinates": [269.63, 202.31]} 59 \N
+119 {"type": "Point", "coordinates": [271.46, 202.31]} 59 \N
+120 {"type": "Point", "coordinates": [271.49, 211.57]} 59 \N
+121 {"type": "Point", "coordinates": [271.46, 212.19]} 36 \N
+122 {"type": "Point", "coordinates": [271.48, 193.49]} 59 \N
+123 {"type": "Point", "coordinates": [269.69, 193.46]} 59 \N
+124 {"type": "Point", "coordinates": [267.96, 193.74]} 52 \N
+125 {"type": "Point", "coordinates": [271.37, 193.6]} 52 \N
+126 {"type": "Point", "coordinates": [271.51, 187.46]} 52 \N
+127 {"type": "Point", "coordinates": [273.49, 187.36]} 20 \N
+128 {"type": "Point", "coordinates": [273.6, 178.85]} 14 \N
+129 {"type": "Point", "coordinates": [273.81, 202.63]} 20 \N
+130 {"type": "Point", "coordinates": [276.47, 203.2]} 20 \N
+131 {"type": "Point", "coordinates": [276.51, 205.08]} 20 \N
+132 {"type": "Point", "coordinates": [275.82, 205.67]} 20 \N
+133 {"type": "Point", "coordinates": [275.82, 206.59]} 19 \N
+134 {"type": "Point", "coordinates": [277.91, 205.08]} 16 \N
+135 {"type": "Point", "coordinates": [277.99, 203.28]} 17 \N
+136 {"type": "Point", "coordinates": [273.67, 222.93]} 20 \N
+137 {"type": "Point", "coordinates": [273.68, 223.43]} 22 \N
+138 {"type": "Point", "coordinates": [273.74, 172.26]} 14 \N
+90 {"type": "Point", "coordinates": [271.46, 204.74]} 59 \N
+139 {"type": "Point", "coordinates": [271.63, 186.67]} 75 \N
+140 {"type": "Point", "coordinates": [273.53, 186.63]} 75 \N
+141 {"type": "Point", "coordinates": [279.05, 204.74]} 33 \N
+142 {"type": "Point", "coordinates": [273.54, 193.55]} 61 \N
+143 {"type": "Point", "coordinates": [273.56, 233.13]} 105 \N
+144 {"type": "Point", "coordinates": [273.61, 200.93]} 105 \N
+145 {"type": "Point", "coordinates": [283.08, 233.07]} 105 \N
+146 {"type": "Point", "coordinates": [283.12, 231.17]} 105 \N
+147 {"type": "Point", "coordinates": [268.5, 231.14]} 101 \N
+148 {"type": "Point", "coordinates": [268.5, 233.12]} 101 \N
+149 {"type": "Point", "coordinates": [268.22, 231.1]} 103 \N
+150 {"type": "Point", "coordinates": [268.19, 233.13]} 103 \N
+151 {"type": "Point", "coordinates": [268.47, 231.1]} 107 \N
+152 {"type": "Point", "coordinates": [268.44, 233.13]} 107 \N
+153 {"type": "Point", "coordinates": [273.56, 231.16]} 22 \N
+154 {"type": "Point", "coordinates": [273.16, 233.09]} 104 \N
+155 {"type": "Point", "coordinates": [273.16, 231.08]} 104 \N
+157 {"type": "Point", "coordinates": [284.93, 231.02]} 109 \N
+160 {"type": "Point", "coordinates": [283.07, 233.11]} 31 \N
+161 {"type": "Point", "coordinates": [283.13, 231.17]} 31 \N
+163 {"type": "Point", "coordinates": [284.84, 231.08]} 113 \N
+167 {"type": "Point", "coordinates": [305.62, 222.48]} 27 \N
+168 {"type": "Point", "coordinates": [305.77, 230.46]} 26 \N
+169 {"type": "Point", "coordinates": [275.8, 234.32]} 25 \N
+170 {"type": "Point", "coordinates": [281.66, 222.42]} 24 \N
+171 {"type": "Point", "coordinates": [275.8, 232.85]} 22 \N
+172 {"type": "Point", "coordinates": [281.69, 224.75]} 22 \N
+173 {"type": "Point", "coordinates": [305.59, 224.57]} 22 \N
+174 {"type": "Point", "coordinates": [305.89, 228.93]} 22 \N
+175 {"type": "Point", "coordinates": [282.31, 239.23]} 22 \N
+176 {"type": "Point", "coordinates": [282.31, 240.68]} 43 \N
+177 {"type": "Point", "coordinates": [263.59, 206.51]} 114 \N
+178 {"type": "Point", "coordinates": [265.58, 207.35]} 115 \N
+179 {"type": "Point", "coordinates": [267.32, 206.52]} 116 \N
+180 {"type": "Point", "coordinates": [265.59, 206.55]} 117 \N
+181 {"type": "Point", "coordinates": [265.67, 202.45]} 117 \N
+182 {"type": "Point", "coordinates": [271.51, 202.31]} 117 \N
+183 {"type": "Point", "coordinates": [273.62, 202.29]} 105 \N
+185 {"type": "Point", "coordinates": [273.64, 234.85]} 29 \N
+186 {"type": "Point", "coordinates": [283.07, 234.95]} 29 \N
+187 {"type": "Point", "coordinates": [275.56, 138.91]} 95 \N
+189 {"type": "Point", "coordinates": [420.51, 199.65]} 48 \N
+190 {"type": "Point", "coordinates": [424.05, 199.62]} 135 \N
+191 {"type": "Point", "coordinates": [424.09, 201.94]} 134 \N
+193 {"type": "Point", "coordinates": [426.26, 203.63]} 136 \N
+194 {"type": "Point", "coordinates": [426.28, 207.17]} 136 \N
+195 {"type": "Point", "coordinates": [423.67, 207.15]} 136 \N
+196 {"type": "Point", "coordinates": [422.13, 207.09]} 137 \N
+197 {"type": "Point", "coordinates": [422.22, 201.92]} 137 \N
+198 {"type": "Point", "coordinates": [422.64, 201.86]} 138 \N
+199 {"type": "Point", "coordinates": [426.23, 201.88]} 138 \N
+200 {"type": "Point", "coordinates": [426.25, 206.9]} 138 \N
+201 {"type": "Point", "coordinates": [422.63, 206.8]} 138 \N
+202 {"type": "Point", "coordinates": [422.01, 206.78]} 39 \N
+203 {"type": "Point", "coordinates": [241.48, 129.06]} 61 \N
+205 {"type": "Point", "coordinates": [274.26, 166.82]} 61 \N
+206 {"type": "Point", "coordinates": [303.64, 193.56]} 61 \N
+207 {"type": "Point", "coordinates": [252.06, 145.94]} 61 \N
+208 {"type": "Point", "coordinates": [284.96, 233.01]} 4 \N
+209 {"type": "Point", "coordinates": [284.91, 233.08]} 108 \N
+211 {"type": "Point", "coordinates": [287.64, 234.7]} 22 \N
+212 {"type": "Point", "coordinates": [300.35, 234.68]} 22 \N
+213 {"type": "Point", "coordinates": [287.69, 229.54]} 22 \N
+214 {"type": "Point", "coordinates": [300.54, 229.65]} 22 \N
+215 {"type": "Point", "coordinates": [287.66, 232.11]} 22 \N
+216 {"type": "Point", "coordinates": [282.2, 233.36]} 22 \N
+217 {"type": "Point", "coordinates": [293.06, 239.65]} 22 \N
+218 {"type": "Point", "coordinates": [300.84, 239.76]} 22 \N
+219 {"type": "Point", "coordinates": [284.88, 233.21]} 112 \N
+220 {"type": "Point", "coordinates": [269.01, 204.8]} 142 \N
+222 {"type": "Point", "coordinates": [284.76, 231.21]} 5 \N
+223 {"type": "Point", "coordinates": [413.07, 193.08]} 45 \N
+224 {"type": "Point", "coordinates": [413.15, 188.09]} 151 \N
+225 {"type": "Point", "coordinates": [413.14, 190.41]} 45 \N
+226 {"type": "Point", "coordinates": [424.06, 193.6]} 135 \N
+227 {"type": "Point", "coordinates": [413.06, 193.15]} 135 \N
+228 {"type": "Point", "coordinates": [413.14, 190.08]} 135 \N
+229 {"type": "Point", "coordinates": [413.14, 187.75]} 150 \N
+230 {"type": "Point", "coordinates": [428.36, 177.65]} 61 \N
+231 {"type": "Point", "coordinates": [340.77, 177.97]} 61 \N
+232 {"type": "Point", "coordinates": [325.7, 184.16]} 61 \N
+233 {"type": "Point", "coordinates": [428.37, 199.69]} 61 \N
+\.
+
+
+--
+-- Data for Name: mapdata_groundaltitude; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_groundaltitude (id, name, altitude) FROM stdin;
+1 a1-1 -5.00
+2 parking-1 -3.45
+4 a1-1parking to corridor -3.60
+5 a-1WCs -4.10
+6 a-1corridorsem3 -4.50
+7 a1-2 -6.21
+8 a2floor1 3.87
+9 a2floor2 9.05
+10 a4ground floor 1.00
+11 A4mezzanine-1 -2.00
+12 a1f1 4.60
+13 a1f2 9.25
+3 outside ground floor 0.00
+14 a1 ground floor 0.60
+\.
+
+
+--
+-- Data for Name: mapdata_hole; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_hole (id, geometry, space_id, import_tag) FROM stdin;
+4 {"type": "Polygon", "coordinates": [[[363.92, 158.06], [364.46, 152.22], [354.19, 151.27], [343.89, 151.17], [343.92, 157.08], [353.97, 157.05], [363.92, 158.06]]]} 60 \N
+5 {"type": "Polygon", "coordinates": [[[342.74, 206.19], [342.74, 202.61], [339.69, 202.61], [339.69, 206.19], [342.74, 206.19]]]} 84 \N
+6 {"type": "Polygon", "coordinates": [[[338.62, 202.49], [338.62, 207.6], [342.8, 207.6], [342.8, 205.38], [343.57, 205.38], [343.57, 203.28], [342.82, 203.28], [342.82, 202.52], [338.62, 202.49]]]} 87 \N
+8 {"type": "Polygon", "coordinates": [[[272.74, 232.17], [268.76, 232.17], [268.76, 233.94], [272.75, 233.94], [272.74, 232.17]]]} 102 \N
+7 {"type": "Polygon", "coordinates": [[[276.65, 142.16], [277.04, 137.98], [278.01, 138.07], [277.6, 142.23], [276.65, 142.16]]]} 95 \N
+9 {"type": "Polygon", "coordinates": [[[268.92, 198.23], [270.36, 198.23], [270.36, 194.29], [268.93, 194.29], [268.92, 198.23]]]} 59 \N
+10 {"type": "Polygon", "coordinates": [[[422.62, 206.17], [422.62, 202.6], [425.57, 202.6], [425.57, 206.17], [422.62, 206.17]]]} 137 \N
+11 {"type": "Polygon", "coordinates": [[[422.85, 207.52], [422.82, 205.37], [422.08, 205.35], [422.1, 203.22], [422.8, 203.16], [422.86, 202.42], [427.08, 202.42], [427.08, 207.54], [422.85, 207.52]]]} 139 \N
+\.
+
+
+--
+-- Data for Name: mapdata_labelsettings; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_labelsettings (id, titles, min_zoom, max_zoom, font_size) FROM stdin;
+1 {"en": "Conference Rooms"} -10.0 10.0 15
+2 {"en": "Campus main directions"} -10.0 10.0 22
+3 {"en": "Utilities"} -10.0 10.0 12
+\.
+
+
+--
+-- Data for Name: mapdata_leavedescription; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_leavedescription (id, description_i18n, space_id, target_space_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_level; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_level (locationslug_ptr_id, titles, can_search, can_describe, base_altitude, default_height, door_height, short_label, access_restriction_id, on_top_of_id, icon, label_overrides, label_settings_id, external_url, import_block_data, import_block_geom) FROM stdin;
+11 {"en": "Floor -1 to 0"} f f -3.00 3.00 2.00 floor-1to0 \N 10 \N {} \N \N f f
+37 {"en": "Floor 1"} t t 5.00 3.25 2.00 floor1 \N \N \N {} \N \N f f
+38 {"en": "Floor 2"} t t 8.75 3.70 2.00 floor2 \N \N \N {} \N \N f f
+34 {"en": "Floor -2"} t t -6.21 2.45 2.00 floor-2 \N \N \N {} \N \N f f
+77 {"en": "Floor -2 to -1"} f t -4.90 3.00 2.00 floor-2to-1 \N 34 \N {} \N \N f f
+82 {"en": "Floor 1 to 2"} f f 6.75 3.00 2.00 floor1to2 \N 37 \N {} \N \N f f
+10 {"en": "Floor -1"} t t -5.00 5.00 2.00 floor-1 \N \N \N {} 2 \N f f
+85 {"en": "Floor 0 to 1"} f f 2.10 3.00 2.00 floor0to1 \N 2 \N {} \N \N f f
+2 {"en": "Ground Floor"} f t 0.00 4.00 3.00 floor0 \N \N \N {} \N \N f f
+\.
+
+
+--
+-- Data for Name: mapdata_level_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_level_groups (id, level_id, locationgroup_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_lineobstacle; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_lineobstacle (id, geometry, width, height, space_id, import_tag, altitude, group_id) FROM stdin;
+1 {"type": "LineString", "coordinates": [[283.72, 222.2], [283.72, 194.36]]} 0.60 1.20 33 \N 0.00 \N
+2 {"type": "LineString", "coordinates": [[275.06, 219.93], [275.06, 205.44]]} 0.15 0.60 33 \N 0.00 \N
+9 {"type": "LineString", "coordinates": [[297.25, 181.94], [299.69, 175.13], [301.81, 175.19], [301.81, 172.56], [299.13, 172.44], [296.69, 168.81], [302, 168.88], [302, 164.94], [295.5, 164.94], [297.31, 162.19], [301.88, 162.19], [301.88, 158.93], [296.37, 158.93], [295.38, 157.13], [299.38, 157.13], [299.75, 153.13], [337.44, 153.13], [341.69, 151.06], [343.44, 150.94], [343.44, 157.44], [364.06, 158.5], [367.5, 158.75], [367.5, 175.38], [340.44, 175.38], [321.88, 181.88], [297.25, 181.94]]} 0.15 0.80 61 \N 0.00 \N
+5 {"type": "LineString", "coordinates": [[233.53, 179.22], [241.07, 179.22], [241.07, 153.74], [240.05, 153.74], [240.05, 152.83], [240.39, 152.83], [240.39, 152.4], [240.2, 152.07], [239.98, 151.85], [239.71, 151.85], [234.88, 151.85], [234.64, 151.99], [234.52, 152.14], [234.44, 152.36], [234.4, 152.47], [234.4, 152.72], [234.71, 152.72], [234.71, 153.75], [233.66, 153.75], [233.53, 179.22]]} 0.25 0.20 61 \N 0.00 \N
+7 {"type": "LineString", "coordinates": [[214.81, 182.53], [231.45, 182.53], [231.45, 152.6], [227.06, 152.6], [223.57, 153.91], [221.01, 155.37], [218.6, 157.42], [216.78, 159.9], [215.03, 163.11], [214.81, 182.53]]} 0.15 0.80 61 \N 0.00 \N
+8 {"type": "LineString", "coordinates": [[243.36, 152.6], [243.36, 182.24], [259.35, 182.24], [259.35, 160.99], [258.91, 158.59], [257.89, 156.4], [256.57, 155.23], [254.67, 153.84], [252.04, 152.6], [243.36, 152.6]]} 0.15 0.80 61 \N 0.00 \N
+\.
+
+
+--
+-- Data for Name: mapdata_locationgroup; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_locationgroup (locationslug_ptr_id, titles, can_search, can_describe, priority, color, access_restriction_id, category_id, icon, hierarchy, label_settings_id, hub_import_type, descriptions, can_report_missing, report_help_texts, in_legend) FROM stdin;
+120 {"en": "Checkin area (speakers)"} f f 0 \N \N 1 \N 0 \N \N {} dont_offer {} f
+119 {"en": "Checkin area"} f f 0 \N \N 1 \N 0 2 \N {} dont_offer {} f
+66 {"en": "Bike Parking"} t t 0 #dbb991 \N 1 pedal_bike 0 \N \N {} dont_offer {} t
+28 {"en": "Hackathon Space"} t t 1 #e3e6ab \N 2 \N 0 \N \N {} dont_offer {} t
+3 {"en": "Elevator"} t t 0 #f4cccc \N 2 elevator 0 \N \N {} dont_offer {} t
+13 {"en": "Car Park"} t t 0 \N \N 2 local_parking 0 \N \N {} dont_offer {} f
+7 {"en": "WC for Men"} t t 0 \N \N 4 \N 0 \N \N {} dont_offer {} f
+18 {"en": "Barrier Free WC"} t t 0 \N \N 4 \N 0 \N \N {} dont_offer {} f
+8 {"en": "WC for Women"} t t 0 \N \N 4 \N 0 \N \N {} dont_offer {} f
+62 {"en": "Water"} f f 1 #e5e4e5 \N 3 \N 1 \N \N {} dont_offer {} f
+123 {"en": "Food and Beverage"} t t 0 #ffe18c \N 3 emoji_food_beverage 0 \N \N {} dont_offer {} t
+9 {"en": "WC"} f f 0 #7b8ebc \N 3 \N 0 \N \N {} dont_offer {} f
+133 {"en": "Wardrobe"} f f 0 #dcc6e0 \N 3 \N 1 \N \N {} dont_offer {} f
+65 {"en": "Green Area"} f f 0 #bbb68f \N 3 \N 0 \N \N {} dont_offer {} f
+23 {"en": "Conference Room"} t t 2 \N \N 2 \N 1 1 \N {} dont_offer {} f
+21 {"en": "Conference area"} f f 0 #d0e8fa \N 3 \N 0 \N \N {} dont_offer {} t
+144 {"en": "Car Park Payment Machine"} t f 0 \N \N 5 payments 0 3 \N {} dont_offer {} f
+148 {"en": "ATM"} t f 0 \N \N 5 credit_card 0 3 \N {} dont_offer {} f
+\.
+
+
+--
+-- Data for Name: mapdata_locationgroupcategory; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_locationgroupcategory (id, name, single, titles, titles_plural, allow_levels, allow_spaces, allow_areas, allow_pois, priority, help_texts, allow_dynamic_locations) FROM stdin;
+1 areatype t {"en": "Area Type"} {"en": "Area Types"} f f t f 11 {"en": "Choose an area type"} f
+2 spacetype t {"en": "Space Type"} {"en": "Space Types"} f t f f 10 {"en": "Choose a space type"} f
+3 colors t {"en": "Color Group"} {"en": "Colors Group"} f t t t -1 {"en": "Choose a color group"} t
+4 wc f {"en": "WC Group"} {"en": "WC Groups"} f t f f 0 {"en": "Choose a WC Group"} f
+5 poitype f {"en": "POI type"} {"en": "POI types"} f f f t 0 {"en": "Choose a POI Type"} f
+\.
+
+
+--
+-- Data for Name: mapdata_locationredirect; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_locationredirect (locationslug_ptr_id, target_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_locationslug; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_locationslug (id, slug) FROM stdin;
+11 floor-1to0
+14 car-park--1
+16 a1-wc--1
+17 a1-wc--1w
+19 a1-wc--1bf
+31 main-lobby
+32 corridor-main-lobby-kranhalle
+37 floor1
+38 floor2
+42 a1-wc-0m2
+43 a1-wc--12
+44 noi-techpark-infodesk
+47 a2f0wc
+51 theather
+54 a1f0wcbf
+55 a1f0wcw
+56 a1f0wcw2
+57 a1f0wcbf2
+58 a1f0corridor
+63 pool
+94 a4noisteriarest
+93 a4noisteriabar
+69 \N
+68 \N
+70 \N
+117 a1f2corridorstartup
+124 jobwall
+73 \N
+33 main-entrance
+49 a2f0corridor
+74 \N
+125 coffee-area
+34 floor-2
+127 alumix
+77 floor-2to-1
+128 alumix-restaurant
+89 a4wcmen
+75 corridor-car-park--2
+91 a4wcbf
+79 a2f-2sd
+90 a4wcwomen
+13 car-park
+97 a4toparking
+98 a4mezzanine
+95 a4entrance
+52 corridor-car-park--1-park-1
+7 wc-for-men
+78 a1stairsd-2-1
+71 \N
+20 corridor-car-park--1-foyer
+18 wc-barrier-free
+41 elev0
+101 a1stairsb-10
+102 a1stairwaybf0
+35 car-park--2
+80 car-ramp-2
+81 car-ramp-1
+60 car-access
+82 floor1to2
+103 a1stairsb01
+64 a2f0stairseast
+46 a2f2multimediacenter
+86 a2stairwaybf0
+87 a2stairwaybf2
+104 a1f1corridor
+105 a1f2corridor
+27 sem1
+107 a1stairsb12
+8 wc-for-women
+5 a1el2
+109 a1f-1el2
+111 a1f1el2
+113 a1f2el2
+40 a1-wc-0m
+114 a1f2wcwomen
+115 a1f2wcbf
+116 a1f2wcmen
+118 a1theathertopiazza
+96 a4f0elev
+25 sem4
+62 water
+24 sem3
+121 checkin
+122 checkin-speakers
+92 a4corridor
+123 fab
+9 \N
+99 a4stairs
+26 sem2
+133 \N
+100 a4elevator-1
+65 greenarea
+10 floor-1
+22 foyer
+67 bycicle-park1
+126 wardrobe
+59 a1f0corridorpark
+120 \N
+119 \N
+66 bicyclepark
+28 hackathon-space
+3 el
+23 conference-room
+21 \N
+134 a2stairwayaf0
+48 a2f0wc2
+136 \N
+137 \N
+138 \N
+83 a2stairwayb
+84 a2stairwaybf1
+139 \N
+39 auditorium
+36 kranhalle
+30 makerspace
+29 noise
+50 a2f0elev
+4 a1el1
+110 a1f1el1
+112 a1f2el1
+108 a1f-1el1
+85 floor0t01
+76 \N
+142 \N
+2 0
+145 \N
+144 \N
+148 \N
+146 \N
+147 \N
+149 \N
+61 piazza
+72 \N
+135 a2corridorwestf0
+150 \N
+151 \N
+45 a2f2corridor
+88 a2f1elev
+153 \N
+106 presidentoffice
+\.
+
+
+--
+-- Data for Name: mapdata_mapupdate; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_mapupdate (id, datetime, type, processed, geometries_changed, user_id) FROM stdin;
+210 2024-08-26 16:29:07.884+00 direct_edit t t 1
+209 2024-08-26 16:28:00.699+00 direct_edit t t 1
+211 2024-08-27 10:08:59.004972+00 management t f \N
+212 2024-08-27 10:09:19.465461+00 management t f \N
+213 2024-08-27 10:13:53.88039+00 direct_edit t f 1
+214 2024-08-27 10:14:57.981204+00 direct_edit t f 1
+215 2024-08-27 10:19:11.329148+00 direct_edit t t 1
+217 2024-08-29 09:18:33.55282+00 control_panel t t 1
+216 2024-08-29 09:13:55.910267+00 direct_edit t t 1
+224 2024-08-29 09:26:25.481507+00 direct_edit t t 1
+223 2024-08-29 09:25:13.004416+00 direct_edit t f 1
+222 2024-08-29 09:25:05.815454+00 direct_edit t t 1
+221 2024-08-29 09:24:38.776899+00 direct_edit t t 1
+220 2024-08-29 09:24:04.990566+00 direct_edit t t 1
+219 2024-08-29 09:23:11.100271+00 direct_edit t f 1
+218 2024-08-29 09:21:00.436979+00 direct_edit t f 1
+226 2024-08-29 09:28:42.264428+00 direct_edit t t 1
+225 2024-08-29 09:28:04.595118+00 direct_edit t t 1
+228 2024-08-29 09:30:34.905809+00 direct_edit t t 1
+227 2024-08-29 09:29:52.750463+00 direct_edit t t 1
+230 2024-08-29 09:33:17.930903+00 direct_edit t t 1
+229 2024-08-29 09:32:58.921582+00 direct_edit t t 1
+233 2024-08-29 09:35:39.654214+00 direct_edit t t 1
+232 2024-08-29 09:35:16.548169+00 direct_edit t t 1
+231 2024-08-29 09:34:20.803056+00 direct_edit t t 1
+238 2024-08-29 09:39:04.878827+00 direct_edit t t 1
+237 2024-08-29 09:38:39.870322+00 direct_edit t f 1
+236 2024-08-29 09:38:14.712598+00 direct_edit t t 1
+235 2024-08-29 09:37:48.887054+00 direct_edit t t 1
+234 2024-08-29 09:37:25.335645+00 direct_edit t t 1
+241 2024-08-29 09:41:22.091492+00 direct_edit t f 1
+240 2024-08-29 09:41:09.392881+00 direct_edit t f 1
+239 2024-08-29 09:40:47.681107+00 direct_edit t f 1
+243 2024-08-29 09:43:06.952599+00 direct_edit t f 1
+242 2024-08-29 09:42:42.579501+00 direct_edit t f 1
+248 2024-08-29 09:50:43.687998+00 direct_edit t f 1
+247 2024-08-29 09:49:54.703769+00 direct_edit t t 1
+246 2024-08-29 09:45:51.81963+00 direct_edit t t 1
+245 2024-08-29 09:45:43.221388+00 direct_edit t t 1
+244 2024-08-29 09:44:03.545467+00 direct_edit t f 1
+250 2024-08-29 09:52:50.042778+00 direct_edit t t 1
+249 2024-08-29 09:52:07.250959+00 direct_edit t f 1
+252 2024-08-29 09:56:04.807276+00 direct_edit t t 1
+251 2024-08-29 09:55:11.149843+00 direct_edit t t 1
+253 2024-08-29 09:58:45.59235+00 direct_edit t t 1
+263 2024-08-29 10:10:13.499096+00 direct_edit t f 1
+262 2024-08-29 10:09:58.138119+00 direct_edit t f 1
+261 2024-08-29 10:09:50.15106+00 direct_edit t f 1
+260 2024-08-29 10:09:28.440383+00 direct_edit t f 1
+259 2024-08-29 10:08:52.800394+00 direct_edit t t 1
+258 2024-08-29 10:03:57.066581+00 direct_edit t t 1
+257 2024-08-29 10:03:33.10395+00 direct_edit t t 1
+256 2024-08-29 10:03:16.565277+00 direct_edit t t 1
+255 2024-08-29 10:02:57.69302+00 direct_edit t t 1
+254 2024-08-29 10:02:38.237035+00 direct_edit t t 1
+274 2024-08-29 10:25:28.979404+00 direct_edit t f 1
+273 2024-08-29 10:25:22.62013+00 direct_edit t f 1
+272 2024-08-29 10:24:57.442782+00 direct_edit t f 1
+271 2024-08-29 10:24:50.46408+00 direct_edit t f 1
+270 2024-08-29 10:24:11.962458+00 direct_edit t t 1
+269 2024-08-29 10:23:46.154768+00 direct_edit t t 1
+268 2024-08-29 10:23:38.376962+00 direct_edit t t 1
+267 2024-08-29 10:23:25.265377+00 direct_edit t t 1
+266 2024-08-29 10:23:09.084656+00 direct_edit t t 1
+265 2024-08-29 10:23:04.380568+00 direct_edit t t 1
+264 2024-08-29 10:22:53.13712+00 direct_edit t t 1
+275 2024-08-29 10:28:18.446324+00 direct_edit t f 1
+282 2024-08-29 10:49:43.078575+00 direct_edit t f 1
+281 2024-08-29 10:49:37.142884+00 direct_edit t f 1
+280 2024-08-29 10:49:31.622177+00 direct_edit t f 1
+279 2024-08-29 10:49:23.006829+00 direct_edit t f 1
+278 2024-08-29 10:49:16.448651+00 direct_edit t f 1
+277 2024-08-29 10:49:08.6712+00 direct_edit t f 1
+276 2024-08-29 10:48:39.777997+00 direct_edit t f 1
+283 2024-08-29 10:51:13.586654+00 direct_edit t f 1
+284 2024-08-29 10:54:27.127752+00 direct_edit t f 1
+285 2024-09-04 14:17:36.439755+00 direct_edit t t 1
+291 2024-09-06 07:49:06.147603+00 direct_edit t t 1
+290 2024-09-06 07:48:02.455722+00 direct_edit t t 1
+289 2024-09-06 07:47:54.260887+00 direct_edit t t 1
+288 2024-09-06 07:47:45.454026+00 direct_edit t t 1
+287 2024-09-06 07:47:33.783657+00 direct_edit t t 1
+286 2024-09-06 07:47:16.576667+00 direct_edit t t 1
+292 2024-09-06 07:50:25.234843+00 direct_edit t t 1
+302 2024-09-06 15:28:30.847255+00 direct_edit t t 1
+301 2024-09-06 15:27:17.120685+00 direct_edit t t 1
+300 2024-09-06 15:27:07.071526+00 direct_edit t f 1
+299 2024-09-06 15:26:38.412071+00 direct_edit t t 1
+298 2024-09-06 15:26:20.069538+00 direct_edit t f 1
+297 2024-09-06 15:25:42.704835+00 direct_edit t t 1
+296 2024-09-06 15:25:12.19151+00 direct_edit t f 1
+295 2024-09-06 15:25:01.734519+00 direct_edit t f 1
+294 2024-09-06 15:23:15.453189+00 direct_edit t t 1
+293 2024-09-06 15:23:07.672316+00 direct_edit t t 1
+1451 2024-09-17 09:58:51.286769+00 direct_edit t t 1
+1463 2024-09-24 10:04:34.216787+00 management t t \N
+343 2024-09-06 15:45:12.369938+00 direct_edit t t 1
+342 2024-09-06 15:44:39.977339+00 direct_edit t t 1
+341 2024-09-06 15:43:49.834548+00 direct_edit t t 1
+340 2024-09-06 15:41:42.21649+00 direct_edit t f 1
+339 2024-09-06 15:41:39.146591+00 direct_edit t f 1
+338 2024-09-06 15:41:35.192818+00 direct_edit t f 1
+337 2024-09-06 15:41:28.49275+00 direct_edit t f 1
+336 2024-09-06 15:40:55.116517+00 direct_edit t f 1
+335 2024-09-06 15:40:52.249014+00 direct_edit t f 1
+334 2024-09-06 15:40:46.721944+00 direct_edit t f 1
+333 2024-09-06 15:40:39.957981+00 direct_edit t f 1
+332 2024-09-06 15:40:34.017518+00 direct_edit t f 1
+331 2024-09-06 15:40:29.918907+00 direct_edit t f 1
+330 2024-09-06 15:40:25.412466+00 direct_edit t f 1
+329 2024-09-06 15:40:07.586805+00 direct_edit t t 1
+328 2024-09-06 15:39:58.370542+00 direct_edit t t 1
+327 2024-09-06 15:39:51.615625+00 direct_edit t t 1
+326 2024-09-06 15:39:44.252296+00 direct_edit t t 1
+325 2024-09-06 15:39:36.05012+00 direct_edit t t 1
+324 2024-09-06 15:39:28.67254+00 direct_edit t t 1
+323 2024-09-06 15:39:20.688748+00 direct_edit t t 1
+322 2024-09-06 15:39:12.4951+00 direct_edit t t 1
+321 2024-09-06 15:39:05.125222+00 direct_edit t t 1
+320 2024-09-06 15:38:58.978201+00 direct_edit t t 1
+319 2024-09-06 15:38:52.424022+00 direct_edit t t 1
+318 2024-09-06 15:38:45.25631+00 direct_edit t t 1
+317 2024-09-06 15:38:37.47802+00 direct_edit t t 1
+316 2024-09-06 15:38:30.719377+00 direct_edit t t 1
+315 2024-09-06 15:38:23.554845+00 direct_edit t t 1
+314 2024-09-06 15:38:16.584641+00 direct_edit t t 1
+313 2024-09-06 15:37:58.567224+00 direct_edit t t 1
+312 2024-09-06 15:37:42.597163+00 direct_edit t t 1
+311 2024-09-06 15:37:27.229276+00 direct_edit t t 1
+310 2024-09-06 15:37:17.406104+00 direct_edit t t 1
+309 2024-09-06 15:36:49.97444+00 direct_edit t t 1
+308 2024-09-06 15:35:20.876125+00 direct_edit t f 1
+307 2024-09-06 15:32:59.171721+00 direct_edit t t 1
+306 2024-09-06 15:32:43.78461+00 direct_edit t t 1
+305 2024-09-06 15:32:28.731979+00 direct_edit t t 1
+304 2024-09-06 15:32:06.937298+00 direct_edit t f 1
+303 2024-09-06 15:31:16.321467+00 direct_edit t f 1
+345 2024-09-06 15:50:36.751498+00 direct_edit t f 1
+344 2024-09-06 15:50:01.149004+00 direct_edit t t 1
+352 2024-09-07 13:43:01.626708+00 direct_edit t f 1
+351 2024-09-07 13:42:57.534366+00 direct_edit t f 1
+350 2024-09-07 13:42:48.31167+00 direct_edit t f 1
+349 2024-09-07 13:42:42.988137+00 direct_edit t t 1
+348 2024-09-07 13:42:29.676839+00 direct_edit t t 1
+347 2024-09-07 13:42:22.290238+00 direct_edit t f 1
+346 2024-09-07 13:41:57.104812+00 direct_edit t t 1
+359 2024-09-07 13:45:13.724763+00 direct_edit t f 1
+358 2024-09-07 13:45:11.879539+00 direct_edit t f 1
+357 2024-09-07 13:45:10.0371+00 direct_edit t f 1
+356 2024-09-07 13:45:02.871721+00 direct_edit t f 1
+355 2024-09-07 13:44:59.794215+00 direct_edit t f 1
+354 2024-09-07 13:44:48.941889+00 direct_edit t t 1
+353 2024-09-07 13:44:40.756985+00 direct_edit t f 1
+360 2024-09-07 13:46:44.063729+00 direct_edit t t 1
+361 2024-09-07 13:48:12.30391+00 direct_edit t t 1
+362 2024-09-07 13:49:23.4101+00 direct_edit t t 1
+381 2024-09-07 15:20:12.780091+00 direct_edit t f 1
+380 2024-09-07 15:20:01.312732+00 direct_edit t f 1
+379 2024-09-07 15:19:57.622271+00 direct_edit t f 1
+378 2024-09-07 15:19:44.30942+00 direct_edit t f 1
+377 2024-09-07 15:19:28.943039+00 direct_edit t f 1
+376 2024-09-07 15:17:29.760583+00 direct_edit t f 1
+375 2024-09-07 15:17:26.282425+00 direct_edit t f 1
+374 2024-09-07 15:17:21.766637+00 direct_edit t f 1
+373 2024-09-07 15:17:14.193557+00 direct_edit t f 1
+372 2024-09-07 15:16:49.208231+00 direct_edit t f 1
+371 2024-09-07 15:16:44.701281+00 direct_edit t f 1
+370 2024-09-07 15:16:36.505509+00 direct_edit t f 1
+369 2024-09-07 15:16:19.924697+00 direct_edit t f 1
+368 2024-09-07 15:15:55.34475+00 direct_edit t f 1
+367 2024-09-07 15:15:44.920176+00 direct_edit t f 1
+366 2024-09-07 15:14:55.7438+00 direct_edit t t 1
+365 2024-09-07 15:14:15.073165+00 direct_edit t t 1
+364 2024-09-07 15:14:00.6651+00 direct_edit t t 1
+363 2024-09-07 15:12:46.537393+00 direct_edit t t 1
+382 2024-09-07 15:24:48.242937+00 direct_edit t t 1
+383 2024-09-08 13:04:23.072218+00 direct_edit t f 1
+384 2024-09-08 13:14:51.180815+00 direct_edit t f 1
+385 2024-09-08 13:15:09.849713+00 management t f \N
+386 2024-09-08 13:16:15.996417+00 direct_edit t t 1
+393 2024-09-08 13:21:59.630012+00 direct_edit t t 1
+392 2024-09-08 13:21:33.834162+00 direct_edit t t 1
+391 2024-09-08 13:20:53.916275+00 direct_edit t t 1
+390 2024-09-08 13:19:34.427024+00 direct_edit t t 1
+389 2024-09-08 13:19:30.126553+00 direct_edit t t 1
+388 2024-09-08 13:19:26.241253+00 direct_edit t t 1
+387 2024-09-08 13:19:21.730552+00 direct_edit t t 1
+397 2024-09-08 13:31:06.252171+00 direct_edit t t 1
+396 2024-09-08 13:30:22.245382+00 direct_edit t t 1
+395 2024-09-08 13:28:23.668135+00 direct_edit t t 1
+394 2024-09-08 13:26:31.02319+00 direct_edit t t 1
+404 2024-09-08 13:40:14.331678+00 direct_edit t f 1
+403 2024-09-08 13:39:39.482799+00 direct_edit t t 1
+402 2024-09-08 13:39:13.094796+00 direct_edit t t 1
+401 2024-09-08 13:38:12.688373+00 direct_edit t t 1
+400 2024-09-08 13:33:14.247243+00 direct_edit t t 1
+399 2024-09-08 13:32:36.363492+00 direct_edit t f 1
+398 2024-09-08 13:32:30.633935+00 direct_edit t t 1
+405 2024-09-08 13:40:53.892833+00 management t f \N
+406 2024-09-08 13:44:43.245159+00 management t f \N
+408 2024-09-08 14:01:34.830472+00 management t f \N
+407 2024-09-08 14:01:23.061072+00 direct_edit t t 1
+410 2024-09-08 14:04:15.562542+00 management t f \N
+409 2024-09-08 14:04:03.248852+00 direct_edit t t 1
+412 2024-09-08 14:06:05.753489+00 management t f \N
+411 2024-09-08 14:05:32.747845+00 direct_edit t t 1
+414 2024-09-08 14:07:55.085302+00 direct_edit t t 1
+413 2024-09-08 14:07:10.447539+00 direct_edit t t 1
+415 2024-09-08 14:09:40.963861+00 direct_edit t t 1
+416 2024-09-08 14:13:20.719936+00 direct_edit t t 1
+419 2024-09-08 14:16:06.405037+00 direct_edit t t 1
+418 2024-09-08 14:15:40.775285+00 direct_edit t t 1
+417 2024-09-08 14:15:03.119899+00 direct_edit t t 1
+420 2024-09-08 14:17:05.617823+00 management t f \N
+422 2024-09-09 06:37:17.566215+00 direct_edit t t 1
+421 2024-09-09 06:36:57.6649+00 direct_edit t t 1
+428 2024-09-09 06:46:05.994759+00 management t f \N
+427 2024-09-09 06:44:29.459471+00 direct_edit t t 1
+426 2024-09-09 06:44:20.049891+00 direct_edit t t 1
+425 2024-09-09 06:44:15.327053+00 direct_edit t t 1
+424 2024-09-09 06:44:02.22251+00 direct_edit t t 1
+423 2024-09-09 06:43:54.850252+00 direct_edit t t 1
+429 2024-09-09 06:47:55.518215+00 management t f \N
+430 2024-09-09 06:49:19.705936+00 direct_edit t t 1
+431 2024-09-09 06:51:46.579894+00 management t f \N
+434 2024-09-09 06:53:44.896137+00 direct_edit t t 1
+433 2024-09-09 06:53:35.67678+00 direct_edit t t 1
+432 2024-09-09 06:53:20.752247+00 direct_edit t t 1
+435 2024-09-09 06:56:19.959336+00 direct_edit t t 1
+442 2024-09-09 07:25:29.971686+00 direct_edit t t 1
+441 2024-09-09 07:24:59.279486+00 direct_edit t t 1
+440 2024-09-09 07:24:24.263241+00 direct_edit t t 1
+439 2024-09-09 07:23:52.68741+00 direct_edit t t 1
+438 2024-09-09 07:23:17.474656+00 direct_edit t t 1
+437 2024-09-09 07:22:07.631007+00 direct_edit t t 1
+436 2024-09-09 07:20:46.323148+00 direct_edit t t 1
+444 2024-09-09 07:27:42.479752+00 direct_edit t t 1
+443 2024-09-09 07:26:57.015816+00 direct_edit t t 1
+452 2024-09-09 07:31:34.524747+00 direct_edit t f 1
+451 2024-09-09 07:31:25.920365+00 direct_edit t f 1
+450 2024-09-09 07:30:46.398787+00 direct_edit t f 1
+449 2024-09-09 07:30:31.45453+00 direct_edit t f 1
+448 2024-09-09 07:30:26.742663+00 direct_edit t f 1
+447 2024-09-09 07:30:08.710049+00 direct_edit t f 1
+446 2024-09-09 07:30:04.660181+00 direct_edit t f 1
+445 2024-09-09 07:29:42.502925+00 direct_edit t t 1
+453 2024-09-09 07:33:19.990441+00 direct_edit t f 1
+454 2024-09-09 07:38:05.891486+00 direct_edit t f 1
+457 2024-09-09 07:41:53.062925+00 direct_edit t f 1
+456 2024-09-09 07:41:43.840339+00 direct_edit t f 1
+455 2024-09-09 07:41:32.580453+00 direct_edit t t 1
+459 2024-09-09 07:45:18.448552+00 direct_edit t f 1
+458 2024-09-09 07:45:05.797165+00 direct_edit t f 1
+462 2024-09-09 07:56:38.643113+00 management t f \N
+461 2024-09-09 07:55:27.942423+00 direct_edit t t 1
+460 2024-09-09 07:55:19.551465+00 direct_edit t t 1
+466 2024-09-09 08:00:06.483721+00 direct_edit t f 1
+465 2024-09-09 07:59:54.601331+00 direct_edit t f 1
+464 2024-09-09 07:59:28.790191+00 direct_edit t f 1
+463 2024-09-09 07:57:29.873802+00 direct_edit t t 1
+468 2024-09-09 08:02:46.83677+00 direct_edit t f 1
+467 2024-09-09 08:02:35.782532+00 direct_edit t f 1
+469 2024-09-09 08:04:04.461798+00 direct_edit t f 1
+470 2024-09-09 08:04:19.910271+00 management t f \N
+473 2024-09-09 08:07:16.244106+00 management t f \N
+472 2024-09-09 08:06:46.052174+00 direct_edit t f 1
+471 2024-09-09 08:06:41.541636+00 direct_edit t f 1
+477 2024-09-09 08:16:12.052682+00 direct_edit t f 1
+476 2024-09-09 08:16:03.111476+00 direct_edit t f 1
+475 2024-09-09 08:15:53.284379+00 direct_edit t f 1
+474 2024-09-09 08:10:37.274052+00 direct_edit t t 1
+478 2024-09-09 08:19:10.094147+00 direct_edit t t 1
+485 2024-09-09 08:37:42.05259+00 management t f \N
+484 2024-09-09 08:36:37.475212+00 direct_edit t t 1
+483 2024-09-09 08:35:27.65272+00 direct_edit t t 1
+482 2024-09-09 08:34:45.671364+00 direct_edit t t 1
+481 2024-09-09 08:34:07.579557+00 direct_edit t t 1
+480 2024-09-09 08:32:52.955664+00 direct_edit t t 1
+479 2024-09-09 08:31:10.824543+00 direct_edit t t 1
+487 2024-09-09 08:39:44.509942+00 management t f \N
+486 2024-09-09 08:39:09.27074+00 direct_edit t t 1
+489 2024-09-09 08:41:34.626938+00 direct_edit t t 1
+488 2024-09-09 08:41:14.003561+00 direct_edit t t 1
+496 2024-09-09 08:54:47.832929+00 direct_edit t t 1
+495 2024-09-09 08:54:40.051725+00 direct_edit t t 1
+494 2024-09-09 08:54:18.534587+00 direct_edit t f 1
+493 2024-09-09 08:54:08.703531+00 direct_edit t f 1
+492 2024-09-09 08:52:59.117547+00 direct_edit t t 1
+491 2024-09-09 08:49:56.831755+00 direct_edit t t 1
+490 2024-09-09 08:46:58.644834+00 direct_edit t f 1
+501 2024-09-09 09:03:24.045831+00 management t f \N
+500 2024-09-09 09:02:19.64621+00 direct_edit t t 1
+499 2024-09-09 09:01:08.354748+00 direct_edit t t 1
+498 2024-09-09 09:00:55.251079+00 direct_edit t t 1
+497 2024-09-09 09:00:30.296998+00 direct_edit t t 1
+510 2024-09-09 09:08:37.427351+00 management t f \N
+509 2024-09-09 09:07:59.805377+00 direct_edit t t 1
+508 2024-09-09 09:07:52.025037+00 direct_edit t t 1
+507 2024-09-09 09:07:24.783785+00 direct_edit t t 1
+506 2024-09-09 09:07:09.426652+00 direct_edit t t 1
+505 2024-09-09 09:06:27.852913+00 direct_edit t t 1
+504 2024-09-09 09:06:09.011879+00 direct_edit t t 1
+503 2024-09-09 09:06:04.296966+00 direct_edit t t 1
+502 2024-09-09 09:05:54.878263+00 direct_edit t t 1
+518 2024-09-09 11:57:25.073455+00 management t f \N
+517 2024-09-09 11:26:58.990248+00 direct_edit t t 1
+516 2024-09-09 11:26:46.299127+00 direct_edit t t 1
+515 2024-09-09 11:26:06.77042+00 direct_edit t t 1
+514 2024-09-09 11:25:49.766881+00 direct_edit t t 1
+513 2024-09-09 11:25:36.250635+00 direct_edit t t 1
+512 2024-09-09 11:25:05.939145+00 direct_edit t t 1
+511 2024-09-09 11:24:36.066279+00 direct_edit t t 1
+1453 2024-09-17 10:00:13.823186+00 direct_edit t t 1
+527 2024-09-09 12:00:51.062797+00 direct_edit t f 1
+526 2024-09-09 12:00:45.735306+00 direct_edit t f 1
+525 2024-09-09 12:00:42.260665+00 direct_edit t f 1
+524 2024-09-09 12:00:28.937938+00 direct_edit t f 1
+523 2024-09-09 12:00:24.22382+00 direct_edit t f 1
+522 2024-09-09 12:00:12.344409+00 direct_edit t f 1
+521 2024-09-09 11:59:42.466064+00 direct_edit t f 1
+520 2024-09-09 11:59:23.022119+00 direct_edit t t 1
+519 2024-09-09 11:58:34.450776+00 direct_edit t t 1
+531 2024-09-09 12:03:37.550135+00 direct_edit t t 1
+530 2024-09-09 12:03:24.238836+00 direct_edit t t 1
+529 2024-09-09 12:03:06.217063+00 direct_edit t t 1
+528 2024-09-09 12:02:54.135449+00 direct_edit t t 1
+544 2024-09-09 12:06:15.055296+00 direct_edit t f 1
+543 2024-09-09 12:06:12.187204+00 direct_edit t f 1
+542 2024-09-09 12:06:01.745036+00 direct_edit t f 1
+541 2024-09-09 12:05:59.494049+00 direct_edit t f 1
+540 2024-09-09 12:05:54.980294+00 direct_edit t f 1
+539 2024-09-09 12:05:51.708362+00 direct_edit t f 1
+538 2024-09-09 12:05:41.886527+00 direct_edit t f 1
+537 2024-09-09 12:05:39.213338+00 direct_edit t f 1
+536 2024-09-09 12:05:31.633572+00 direct_edit t f 1
+535 2024-09-09 12:05:29.793947+00 direct_edit t f 1
+534 2024-09-09 12:05:21.807729+00 direct_edit t f 1
+533 2024-09-09 12:05:15.66883+00 direct_edit t f 1
+532 2024-09-09 12:05:13.616362+00 direct_edit t f 1
+549 2024-09-09 12:08:20.195811+00 direct_edit t f 1
+548 2024-09-09 12:08:17.121137+00 direct_edit t f 1
+547 2024-09-09 12:08:14.455351+00 direct_edit t f 1
+546 2024-09-09 12:08:07.905102+00 direct_edit t f 1
+545 2024-09-09 12:07:59.918561+00 direct_edit t f 1
+550 2024-09-09 12:10:02.798039+00 direct_edit t f 1
+554 2024-09-09 12:33:11.19119+00 direct_edit t t 1
+553 2024-09-09 12:15:22.295487+00 direct_edit t f 1
+552 2024-09-09 12:13:40.28748+00 direct_edit t t 1
+551 2024-09-09 12:13:30.047792+00 direct_edit t t 1
+555 2024-09-09 12:34:49.699096+00 direct_edit t t 1
+566 2024-09-09 12:39:29.031929+00 direct_edit t f 1
+565 2024-09-09 12:39:21.850678+00 direct_edit t f 1
+564 2024-09-09 12:38:45.407038+00 direct_edit t f 1
+563 2024-09-09 12:38:38.433731+00 direct_edit t f 1
+562 2024-09-09 12:38:21.638096+00 direct_edit t f 1
+561 2024-09-09 12:38:04.024341+00 direct_edit t t 1
+560 2024-09-09 12:37:55.630884+00 direct_edit t t 1
+559 2024-09-09 12:37:40.675049+00 direct_edit t t 1
+558 2024-09-09 12:37:36.168929+00 direct_edit t t 1
+557 2024-09-09 12:37:31.665195+00 direct_edit t t 1
+556 2024-09-09 12:37:27.243943+00 direct_edit t t 1
+567 2024-09-09 12:41:56.070963+00 direct_edit t f 1
+568 2024-09-09 12:43:44.826086+00 direct_edit t f 1
+570 2024-09-09 12:48:58.986939+00 direct_edit t t 1
+569 2024-09-09 12:48:26.642027+00 direct_edit t t 1
+571 2024-09-09 12:50:13.765199+00 management t f \N
+574 2024-09-09 12:55:50.305978+00 management t f \N
+573 2024-09-09 12:55:14.205586+00 direct_edit t t 1
+572 2024-09-09 12:53:09.292181+00 direct_edit t t 1
+575 2024-09-09 12:57:13.966329+00 management t f \N
+603 2024-09-09 13:03:45.03202+00 management t f \N
+602 2024-09-09 13:03:30.849157+00 direct_edit t f 1
+601 2024-09-09 13:03:26.95121+00 direct_edit t f 1
+600 2024-09-09 13:03:24.083947+00 direct_edit t f 1
+599 2024-09-09 13:03:17.526609+00 direct_edit t f 1
+598 2024-09-09 13:03:13.840004+00 direct_edit t f 1
+597 2024-09-09 13:03:10.369874+00 direct_edit t f 1
+596 2024-09-09 13:03:01.759687+00 direct_edit t f 1
+595 2024-09-09 13:02:58.077408+00 direct_edit t f 1
+594 2024-09-09 13:02:52.12882+00 direct_edit t f 1
+593 2024-09-09 13:02:46.394023+00 direct_edit t f 1
+592 2024-09-09 13:02:27.353622+00 direct_edit t f 1
+591 2024-09-09 13:02:17.520558+00 direct_edit t f 1
+590 2024-09-09 13:02:13.420799+00 direct_edit t f 1
+589 2024-09-09 13:02:08.229664+00 direct_edit t f 1
+588 2024-09-09 13:02:04.821244+00 direct_edit t f 1
+587 2024-09-09 13:01:48.233024+00 direct_edit t f 1
+586 2024-09-09 13:01:37.170637+00 direct_edit t f 1
+585 2024-09-09 13:00:52.117656+00 direct_edit t f 1
+584 2024-09-09 13:00:46.583968+00 direct_edit t f 1
+583 2024-09-09 13:00:28.769765+00 direct_edit t f 1
+582 2024-09-09 13:00:23.854871+00 direct_edit t f 1
+581 2024-09-09 13:00:19.969116+00 direct_edit t f 1
+580 2024-09-09 13:00:14.02975+00 direct_edit t f 1
+579 2024-09-09 13:00:06.24147+00 direct_edit t f 1
+578 2024-09-09 13:00:03.170837+00 direct_edit t f 1
+577 2024-09-09 12:59:37.151395+00 direct_edit t t 1
+576 2024-09-09 12:59:10.566704+00 direct_edit t t 1
+607 2024-09-09 13:05:17.133838+00 direct_edit t f 1
+606 2024-09-09 13:05:05.46058+00 direct_edit t f 1
+605 2024-09-09 13:04:59.531447+00 direct_edit t f 1
+604 2024-09-09 13:04:53.378149+00 direct_edit t f 1
+608 2024-09-09 13:05:34.169905+00 management t f \N
+610 2024-09-09 13:28:14.67968+00 management t f \N
+609 2024-09-09 13:27:34.491531+00 direct_edit t f 1
+1454 2024-09-17 10:00:18.739234+00 direct_edit t t 1
+631 2024-09-09 13:43:49.356112+00 direct_edit t t 1
+630 2024-09-09 13:43:42.194974+00 direct_edit t t 1
+629 2024-09-09 13:43:21.295518+00 direct_edit t t 1
+628 2024-09-09 13:42:50.17174+00 direct_edit t t 1
+627 2024-09-09 13:42:30.731202+00 direct_edit t t 1
+626 2024-09-09 13:41:11.864986+00 direct_edit t t 1
+658 2024-09-09 13:48:31.172176+00 direct_edit t f 1
+657 2024-09-09 13:48:28.714556+00 direct_edit t f 1
+656 2024-09-09 13:48:25.84855+00 direct_edit t f 1
+655 2024-09-09 13:48:18.679285+00 direct_edit t f 1
+654 2024-09-09 13:48:10.284205+00 direct_edit t f 1
+653 2024-09-09 13:48:05.782015+00 direct_edit t f 1
+652 2024-09-09 13:47:56.153905+00 direct_edit t f 1
+651 2024-09-09 13:47:50.212298+00 direct_edit t f 1
+650 2024-09-09 13:47:34.43843+00 direct_edit t f 1
+649 2024-09-09 13:47:20.14339+00 direct_edit t f 1
+648 2024-09-09 13:47:13.346907+00 direct_edit t f 1
+647 2024-09-09 13:47:07.408202+00 direct_edit t f 1
+646 2024-09-09 13:46:58.400144+00 direct_edit t f 1
+645 2024-09-09 13:46:51.431683+00 direct_edit t f 1
+644 2024-09-09 13:46:48.153253+00 direct_edit t f 1
+643 2024-09-09 13:46:39.763655+00 direct_edit t f 1
+642 2024-09-09 13:46:32.998182+00 direct_edit t f 1
+641 2024-09-09 13:46:29.722789+00 direct_edit t f 1
+640 2024-09-09 13:46:16.817946+00 direct_edit t f 1
+639 2024-09-09 13:45:56.332285+00 direct_edit t t 1
+638 2024-09-09 13:45:44.250209+00 direct_edit t t 1
+637 2024-09-09 13:45:21.929415+00 direct_edit t t 1
+636 2024-09-09 13:44:57.574367+00 direct_edit t t 1
+635 2024-09-09 13:44:18.23462+00 direct_edit t t 1
+634 2024-09-09 13:44:11.476916+00 direct_edit t t 1
+633 2024-09-09 13:44:04.664403+00 direct_edit t t 1
+632 2024-09-09 13:43:56.727716+00 direct_edit t t 1
+625 2024-09-09 13:40:31.92791+00 direct_edit t t 1
+624 2024-09-09 13:40:21.068689+00 direct_edit t t 1
+623 2024-09-09 13:39:58.948469+00 direct_edit t t 1
+622 2024-09-09 13:39:47.480192+00 direct_edit t t 1
+621 2024-09-09 13:39:34.578118+00 direct_edit t t 1
+620 2024-09-09 13:39:18.194475+00 direct_edit t t 1
+619 2024-09-09 13:39:05.495438+00 direct_edit t t 1
+618 2024-09-09 13:38:48.313627+00 direct_edit t t 1
+617 2024-09-09 13:37:55.685618+00 direct_edit t t 1
+616 2024-09-09 13:36:34.581299+00 direct_edit t t 1
+615 2024-09-09 13:35:24.539412+00 direct_edit t t 1
+614 2024-09-09 13:34:47.876849+00 direct_edit t t 1
+613 2024-09-09 13:34:08.14431+00 direct_edit t t 1
+612 2024-09-09 13:33:03.473213+00 direct_edit t f 1
+611 2024-09-09 13:30:37.800973+00 direct_edit t t 1
+659 2024-09-09 13:48:58.707951+00 management t f \N
+666 2024-09-09 13:51:45.35696+00 direct_edit t t 1
+665 2024-09-09 13:51:26.310329+00 direct_edit t t 1
+664 2024-09-09 13:51:12.999236+00 direct_edit t t 1
+663 2024-09-09 13:50:50.062646+00 direct_edit t t 1
+662 2024-09-09 13:50:41.254625+00 direct_edit t t 1
+661 2024-09-09 13:50:29.57931+00 direct_edit t t 1
+660 2024-09-09 13:50:15.448635+00 direct_edit t t 1
+687 2024-09-09 14:04:07.322115+00 direct_edit t t 1
+686 2024-09-09 14:03:50.324188+00 direct_edit t t 1
+685 2024-09-09 14:03:34.759507+00 direct_edit t t 1
+684 2024-09-09 14:03:12.643939+00 direct_edit t t 1
+683 2024-09-09 14:02:48.474875+00 direct_edit t t 1
+682 2024-09-09 14:02:27.173899+00 direct_edit t t 1
+681 2024-09-09 14:02:11.200696+00 direct_edit t t 1
+680 2024-09-09 14:01:55.635385+00 direct_edit t t 1
+679 2024-09-09 14:01:39.455646+00 direct_edit t t 1
+678 2024-09-09 14:01:07.508034+00 direct_edit t t 1
+677 2024-09-09 13:57:54.995296+00 direct_edit t t 1
+676 2024-09-09 13:57:45.776761+00 direct_edit t t 1
+675 2024-09-09 13:57:36.968439+00 direct_edit t t 1
+674 2024-09-09 13:57:22.839341+00 direct_edit t t 1
+673 2024-09-09 13:57:09.730985+00 direct_edit t t 1
+672 2024-09-09 13:57:00.310189+00 direct_edit t t 1
+671 2024-09-09 13:56:51.299095+00 direct_edit t t 1
+670 2024-09-09 13:56:41.468215+00 direct_edit t t 1
+669 2024-09-09 13:56:21.400039+00 direct_edit t t 1
+668 2024-09-09 13:56:03.375588+00 direct_edit t t 1
+667 2024-09-09 13:55:52.113989+00 direct_edit t t 1
+698 2024-09-09 14:15:07.441089+00 direct_edit t t 1
+697 2024-09-09 14:12:46.122989+00 direct_edit t t 1
+696 2024-09-09 14:11:59.222563+00 direct_edit t t 1
+695 2024-09-09 14:11:02.910211+00 direct_edit t t 1
+694 2024-09-09 14:10:38.946712+00 direct_edit t t 1
+693 2024-09-09 14:10:21.53429+00 direct_edit t t 1
+692 2024-09-09 14:10:07.249053+00 direct_edit t t 1
+691 2024-09-09 14:09:48.966391+00 direct_edit t t 1
+690 2024-09-09 14:09:28.28864+00 direct_edit t t 1
+689 2024-09-09 14:08:57.571337+00 direct_edit t t 1
+688 2024-09-09 14:08:42.821668+00 direct_edit t t 1
+1452 2024-09-17 10:00:07.681503+00 direct_edit t t 1
+721 2024-09-09 14:42:37.299858+00 direct_edit t t 1
+720 2024-09-09 14:42:26.854917+00 direct_edit t t 1
+719 2024-09-09 14:42:19.2775+00 direct_edit t t 1
+718 2024-09-09 14:41:49.860184+00 direct_edit t t 1
+717 2024-09-09 14:41:08.83302+00 direct_edit t t 1
+716 2024-09-09 14:40:55.741299+00 direct_edit t t 1
+715 2024-09-09 14:39:43.42214+00 direct_edit t t 1
+714 2024-09-09 14:39:31.546104+00 direct_edit t t 1
+713 2024-09-09 14:39:17.199621+00 direct_edit t f 1
+712 2024-09-09 14:38:26.830121+00 direct_edit t t 1
+711 2024-09-09 14:37:35.419623+00 direct_edit t t 1
+741 2024-09-09 14:46:14.812377+00 direct_edit t f 1
+740 2024-09-09 14:46:08.05121+00 direct_edit t f 1
+739 2024-09-09 14:46:01.289731+00 direct_edit t f 1
+738 2024-09-09 14:45:57.809232+00 direct_edit t f 1
+737 2024-09-09 14:45:53.508681+00 direct_edit t f 1
+736 2024-09-09 14:45:48.591985+00 direct_edit t f 1
+735 2024-09-09 14:45:37.157912+00 direct_edit t f 1
+734 2024-09-09 14:45:34.050797+00 direct_edit t f 1
+733 2024-09-09 14:45:20.326512+00 direct_edit t f 1
+732 2024-09-09 14:45:18.076862+00 direct_edit t f 1
+731 2024-09-09 14:45:14.553235+00 direct_edit t f 1
+730 2024-09-09 14:45:13.159283+00 direct_edit t f 1
+729 2024-09-09 14:45:00.25725+00 direct_edit t f 1
+728 2024-09-09 14:44:10.693149+00 direct_edit t t 1
+727 2024-09-09 14:43:36.692517+00 direct_edit t t 1
+726 2024-09-09 14:43:24.199819+00 direct_edit t t 1
+725 2024-09-09 14:43:16.005348+00 direct_edit t t 1
+724 2024-09-09 14:43:06.176757+00 direct_edit t t 1
+723 2024-09-09 14:42:55.730699+00 direct_edit t t 1
+722 2024-09-09 14:42:47.129569+00 direct_edit t t 1
+710 2024-09-09 14:37:17.631584+00 direct_edit t t 1
+709 2024-09-09 14:33:37.495966+00 direct_edit t t 1
+708 2024-09-09 14:32:03.642575+00 direct_edit t f 1
+707 2024-09-09 14:31:25.169783+00 direct_edit t t 1
+706 2024-09-09 14:31:15.346592+00 direct_edit t t 1
+705 2024-09-09 14:23:56.448109+00 direct_edit t t 1
+704 2024-09-09 14:23:46.206295+00 direct_edit t t 1
+703 2024-09-09 14:23:36.585252+00 direct_edit t t 1
+702 2024-09-09 14:22:52.557659+00 direct_edit t t 1
+701 2024-09-09 14:22:43.741771+00 direct_edit t t 1
+700 2024-09-09 14:22:27.762349+00 direct_edit t t 1
+699 2024-09-09 14:21:27.152056+00 direct_edit t t 1
+742 2024-09-09 14:46:38.004481+00 management t f \N
+759 2024-09-09 14:53:24.341781+00 management t f \N
+758 2024-09-09 14:52:31.870219+00 direct_edit t t 1
+757 2024-09-09 14:51:33.679277+00 direct_edit t t 1
+756 2024-09-09 14:51:26.514627+00 direct_edit t t 1
+755 2024-09-09 14:51:19.962915+00 direct_edit t t 1
+754 2024-09-09 14:51:11.9709+00 direct_edit t t 1
+753 2024-09-09 14:51:05.416861+00 direct_edit t t 1
+752 2024-09-09 14:50:53.135543+00 direct_edit t t 1
+751 2024-09-09 14:50:27.528711+00 direct_edit t t 1
+750 2024-09-09 14:50:19.95056+00 direct_edit t t 1
+749 2024-09-09 14:50:10.120533+00 direct_edit t t 1
+748 2024-09-09 14:49:59.67579+00 direct_edit t t 1
+747 2024-09-09 14:49:52.199725+00 direct_edit t t 1
+746 2024-09-09 14:49:44.117897+00 direct_edit t t 1
+745 2024-09-09 14:49:27.1135+00 direct_edit t t 1
+744 2024-09-09 14:49:21.181014+00 direct_edit t t 1
+743 2024-09-09 14:49:06.449208+00 direct_edit t t 1
+773 2024-09-09 14:57:05.611561+00 management t f \N
+772 2024-09-09 14:56:56.867307+00 direct_edit t f 1
+771 2024-09-09 14:56:51.544724+00 direct_edit t f 1
+770 2024-09-09 14:56:39.467066+00 direct_edit t f 1
+769 2024-09-09 14:56:28.609327+00 direct_edit t f 1
+768 2024-09-09 14:56:15.699736+00 direct_edit t f 1
+767 2024-09-09 14:56:02.795991+00 direct_edit t f 1
+766 2024-09-09 14:55:41.499774+00 direct_edit t f 1
+765 2024-09-09 14:55:33.514474+00 direct_edit t f 1
+764 2024-09-09 14:55:26.756891+00 direct_edit t f 1
+763 2024-09-09 14:55:17.538542+00 direct_edit t f 1
+762 2024-09-09 14:55:10.371135+00 direct_edit t f 1
+761 2024-09-09 14:54:47.225281+00 direct_edit t f 1
+760 2024-09-09 14:54:38.651452+00 direct_edit t t 1
+774 2024-09-09 14:57:18.623603+00 management t f \N
+794 2024-09-09 15:03:16.641422+00 management t f \N
+793 2024-09-09 15:03:00.191054+00 direct_edit t f 1
+792 2024-09-09 15:02:56.912913+00 direct_edit t f 1
+791 2024-09-09 15:02:54.055947+00 direct_edit t f 1
+790 2024-09-09 15:02:50.162101+00 direct_edit t f 1
+789 2024-09-09 15:02:47.493644+00 direct_edit t f 1
+788 2024-09-09 15:02:44.007636+00 direct_edit t f 1
+787 2024-09-09 15:02:37.050894+00 direct_edit t f 1
+786 2024-09-09 15:02:34.186485+00 direct_edit t f 1
+785 2024-09-09 15:02:31.519509+00 direct_edit t f 1
+784 2024-09-09 15:02:21.070813+00 direct_edit t f 1
+783 2024-09-09 15:02:10.421794+00 direct_edit t f 1
+782 2024-09-09 15:01:59.773053+00 direct_edit t f 1
+781 2024-09-09 15:01:56.702011+00 direct_edit t f 1
+780 2024-09-09 15:01:53.419768+00 direct_edit t f 1
+779 2024-09-09 15:01:32.740429+00 direct_edit t f 1
+778 2024-09-09 15:01:28.228709+00 direct_edit t f 1
+777 2024-09-09 15:01:12.25606+00 direct_edit t f 1
+776 2024-09-09 15:01:10.006245+00 direct_edit t f 1
+775 2024-09-09 14:59:32.547784+00 direct_edit t t 1
+797 2024-09-09 15:06:40.045046+00 management t f \N
+796 2024-09-09 15:06:33.382507+00 direct_edit t t 1
+795 2024-09-09 15:06:15.801827+00 direct_edit t t 1
+799 2024-09-09 15:10:57.869151+00 management t f \N
+798 2024-09-09 15:10:32.129171+00 direct_edit t t 1
+801 2024-09-09 15:13:47.635457+00 management t f \N
+800 2024-09-09 15:13:35.720719+00 direct_edit t t 1
+1455 2024-09-17 10:03:27.308168+00 direct_edit t f 1
+819 2024-09-09 15:22:02.165001+00 direct_edit t t 1
+818 2024-09-09 15:21:37.179556+00 direct_edit t t 1
+817 2024-09-09 15:21:27.967841+00 direct_edit t t 1
+816 2024-09-09 15:21:20.184142+00 direct_edit t t 1
+815 2024-09-09 15:21:05.846867+00 direct_edit t t 1
+814 2024-09-09 15:21:00.110493+00 direct_edit t t 1
+823 2024-09-09 15:23:38.76088+00 management t f \N
+822 2024-09-09 15:23:21.837302+00 direct_edit t t 1
+821 2024-09-09 15:22:39.030878+00 direct_edit t t 1
+820 2024-09-09 15:22:21.006923+00 direct_edit t t 1
+813 2024-09-09 15:20:32.667788+00 direct_edit t t 1
+812 2024-09-09 15:20:07.073381+00 direct_edit t t 1
+811 2024-09-09 15:19:58.471777+00 direct_edit t t 1
+810 2024-09-09 15:19:37.187125+00 direct_edit t t 1
+809 2024-09-09 15:18:31.422418+00 direct_edit t t 1
+808 2024-09-09 15:18:18.376823+00 direct_edit t t 1
+807 2024-09-09 15:17:56.400423+00 direct_edit t t 1
+806 2024-09-09 15:17:35.936931+00 direct_edit t t 1
+805 2024-09-09 15:17:15.651589+00 direct_edit t t 1
+804 2024-09-09 15:16:59.057677+00 direct_edit t t 1
+803 2024-09-09 15:16:48.201833+00 direct_edit t t 1
+802 2024-09-09 15:16:27.139051+00 direct_edit t t 1
+826 2024-09-09 15:25:05.571358+00 management t f \N
+825 2024-09-09 15:24:31.987392+00 direct_edit t t 1
+824 2024-09-09 15:24:24.916009+00 direct_edit t t 1
+827 2024-09-09 15:25:18.240423+00 management t f \N
+834 2024-09-09 15:27:00.815678+00 management t f \N
+833 2024-09-09 15:26:42.55383+00 direct_edit t f 1
+832 2024-09-09 15:26:37.844086+00 direct_edit t f 1
+831 2024-09-09 15:26:32.307001+00 direct_edit t f 1
+830 2024-09-09 15:26:28.825505+00 direct_edit t f 1
+829 2024-09-09 15:26:13.258574+00 direct_edit t f 1
+828 2024-09-09 15:26:11.417793+00 direct_edit t f 1
+838 2024-09-09 15:29:18.531931+00 direct_edit t t 1
+837 2024-09-09 15:29:07.751553+00 direct_edit t t 1
+836 2024-09-09 15:28:47.680282+00 direct_edit t t 1
+835 2024-09-09 15:28:31.910177+00 direct_edit t t 1
+843 2024-09-09 15:32:04.506854+00 direct_edit t f 1
+842 2024-09-09 15:31:23.331322+00 direct_edit t t 1
+841 2024-09-09 15:31:14.325872+00 direct_edit t t 1
+840 2024-09-09 15:30:39.091431+00 direct_edit t t 1
+839 2024-09-09 15:30:23.319439+00 direct_edit t t 1
+845 2024-09-09 15:35:32.372085+00 direct_edit t t 1
+844 2024-09-09 15:34:35.847373+00 direct_edit t t 1
+1456 2024-09-17 10:05:11.639195+00 direct_edit t t 1
+901 2024-09-09 15:48:00.104842+00 direct_edit t t 1
+900 2024-09-09 15:47:53.961517+00 direct_edit t t 1
+899 2024-09-09 15:47:34.720627+00 direct_edit t t 1
+898 2024-09-09 15:47:11.567502+00 direct_edit t t 1
+897 2024-09-09 15:47:05.015101+00 direct_edit t t 1
+896 2024-09-09 15:46:58.051044+00 direct_edit t t 1
+895 2024-09-09 15:46:39.419062+00 direct_edit t t 1
+894 2024-09-09 15:46:28.153253+00 direct_edit t t 1
+893 2024-09-09 15:46:20.782602+00 direct_edit t t 1
+892 2024-09-09 15:46:07.205055+00 direct_edit t t 1
+891 2024-09-09 15:45:37.158161+00 direct_edit t t 1
+890 2024-09-09 15:45:12.783557+00 direct_edit t t 1
+889 2024-09-09 15:45:05.613235+00 direct_edit t t 1
+888 2024-09-09 15:44:56.398826+00 direct_edit t t 1
+887 2024-09-09 15:43:51.895105+00 direct_edit t f 1
+886 2024-09-09 15:43:49.0265+00 direct_edit t f 1
+885 2024-09-09 15:43:33.252773+00 direct_edit t f 1
+884 2024-09-09 15:43:29.770647+00 direct_edit t f 1
+883 2024-09-09 15:43:27.5188+00 direct_edit t f 1
+882 2024-09-09 15:43:06.423156+00 direct_edit t f 1
+881 2024-09-09 15:43:04.578857+00 direct_edit t f 1
+880 2024-09-09 15:42:54.749394+00 direct_edit t f 1
+879 2024-09-09 15:42:52.906128+00 direct_edit t f 1
+878 2024-09-09 15:42:48.809602+00 direct_edit t f 1
+877 2024-09-09 15:42:46.352972+00 direct_edit t f 1
+876 2024-09-09 15:42:43.081229+00 direct_edit t f 1
+875 2024-09-09 15:42:17.68852+00 direct_edit t f 1
+874 2024-09-09 15:42:16.054336+00 direct_edit t f 1
+873 2024-09-09 15:42:14.412413+00 direct_edit t f 1
+872 2024-09-09 15:41:58.843281+00 direct_edit t f 1
+871 2024-09-09 15:41:55.769955+00 direct_edit t f 1
+870 2024-09-09 15:41:52.284859+00 direct_edit t f 1
+869 2024-09-09 15:41:49.008141+00 direct_edit t f 1
+868 2024-09-09 15:41:42.457152+00 direct_edit t f 1
+867 2024-09-09 15:41:36.513765+00 direct_edit t f 1
+866 2024-09-09 15:41:31.392503+00 direct_edit t f 1
+865 2024-09-09 15:41:24.428782+00 direct_edit t f 1
+864 2024-09-09 15:41:22.794299+00 direct_edit t f 1
+863 2024-09-09 15:41:21.567533+00 direct_edit t f 1
+862 2024-09-09 15:41:19.929128+00 direct_edit t f 1
+861 2024-09-09 15:41:12.144284+00 direct_edit t f 1
+860 2024-09-09 15:40:59.239368+00 direct_edit t f 1
+859 2024-09-09 15:40:52.685648+00 direct_edit t f 1
+858 2024-09-09 15:40:36.100573+00 direct_edit t f 1
+857 2024-09-09 15:40:33.646623+00 direct_edit t f 1
+856 2024-09-09 15:40:29.750576+00 direct_edit t f 1
+855 2024-09-09 15:40:27.905151+00 direct_edit t f 1
+854 2024-09-09 15:40:16.844008+00 direct_edit t f 1
+853 2024-09-09 15:40:10.088577+00 direct_edit t f 1
+852 2024-09-09 15:40:03.742177+00 direct_edit t f 1
+851 2024-09-09 15:39:56.779731+00 direct_edit t f 1
+850 2024-09-09 15:39:54.729627+00 direct_edit t f 1
+849 2024-09-09 15:39:41.825332+00 direct_edit t f 1
+848 2024-09-09 15:39:32.931356+00 direct_edit t f 1
+847 2024-09-09 15:39:25.442567+00 direct_edit t f 1
+846 2024-09-09 15:39:17.075826+00 direct_edit t t 1
+926 2024-09-09 15:53:31.791144+00 direct_edit t f 1
+925 2024-09-09 15:52:55.852348+00 direct_edit t f 1
+924 2024-09-09 15:52:52.779984+00 direct_edit t f 1
+923 2024-09-09 15:52:46.220708+00 direct_edit t t 1
+922 2024-09-09 15:52:16.741247+00 direct_edit t f 1
+921 2024-09-09 15:52:12.633944+00 direct_edit t f 1
+920 2024-09-09 15:52:07.108412+00 direct_edit t f 1
+919 2024-09-09 15:52:05.060613+00 direct_edit t f 1
+918 2024-09-09 15:52:00.146159+00 direct_edit t f 1
+917 2024-09-09 15:51:49.905508+00 direct_edit t f 1
+916 2024-09-09 15:51:44.786188+00 direct_edit t f 1
+915 2024-09-09 15:51:40.070199+00 direct_edit t f 1
+914 2024-09-09 15:51:28.805581+00 direct_edit t f 1
+913 2024-09-09 15:51:24.094114+00 direct_edit t f 1
+912 2024-09-09 15:51:17.336304+00 direct_edit t f 1
+911 2024-09-09 15:51:08.537834+00 direct_edit t f 1
+910 2024-09-09 15:51:05.051844+00 direct_edit t f 1
+909 2024-09-09 15:51:01.335741+00 direct_edit t f 1
+908 2024-09-09 15:50:57.679261+00 direct_edit t f 1
+907 2024-09-09 15:50:54.607382+00 direct_edit t f 1
+906 2024-09-09 15:50:49.494613+00 direct_edit t f 1
+905 2024-09-09 15:50:39.659019+00 direct_edit t f 1
+904 2024-09-09 15:50:32.484294+00 direct_edit t f 1
+903 2024-09-09 15:50:28.593042+00 direct_edit t f 1
+902 2024-09-09 15:50:21.840726+00 direct_edit t f 1
+931 2024-09-09 15:58:46.883933+00 direct_edit t f 1
+930 2024-09-09 15:58:20.877154+00 direct_edit t f 1
+929 2024-09-09 15:58:18.622145+00 direct_edit t f 1
+928 2024-09-09 15:58:11.04266+00 direct_edit t f 1
+927 2024-09-09 15:58:04.89416+00 direct_edit t f 1
+956 2024-09-09 16:03:22.546346+00 direct_edit t f 1
+955 2024-09-09 16:03:17.836562+00 direct_edit t f 1
+954 2024-09-09 16:03:07.595391+00 direct_edit t f 1
+953 2024-09-09 16:02:57.559898+00 direct_edit t f 1
+952 2024-09-09 16:02:44.461183+00 direct_edit t f 1
+951 2024-09-09 16:02:27.666751+00 direct_edit t f 1
+950 2024-09-09 16:02:15.780412+00 direct_edit t f 1
+949 2024-09-09 16:02:13.938969+00 direct_edit t f 1
+948 2024-09-09 16:02:08.614082+00 direct_edit t f 1
+947 2024-09-09 16:02:07.178099+00 direct_edit t f 1
+946 2024-09-09 16:02:05.745597+00 direct_edit t f 1
+945 2024-09-09 16:01:57.141895+00 direct_edit t f 1
+944 2024-09-09 16:01:52.024287+00 direct_edit t f 1
+943 2024-09-09 16:01:46.493704+00 direct_edit t f 1
+942 2024-09-09 16:01:41.373295+00 direct_edit t f 1
+941 2024-09-09 16:01:39.426621+00 direct_edit t f 1
+940 2024-09-09 16:01:33.183144+00 direct_edit t f 1
+939 2024-09-09 16:01:24.378937+00 direct_edit t f 1
+938 2024-09-09 16:01:09.226872+00 direct_edit t f 1
+937 2024-09-09 16:00:57.75291+00 direct_edit t f 1
+936 2024-09-09 16:00:54.680543+00 direct_edit t f 1
+935 2024-09-09 16:00:52.226405+00 direct_edit t f 1
+934 2024-09-09 16:00:43.004831+00 direct_edit t f 1
+933 2024-09-09 16:00:30.306412+00 direct_edit t f 1
+932 2024-09-09 16:00:23.136976+00 direct_edit t f 1
+959 2024-09-09 16:06:00.660218+00 direct_edit t f 1
+958 2024-09-09 16:05:57.593639+00 direct_edit t f 1
+957 2024-09-09 16:05:53.901182+00 direct_edit t f 1
+961 2024-09-09 16:07:16.455108+00 direct_edit t f 1
+960 2024-09-09 16:07:08.651333+00 direct_edit t f 1
+963 2024-09-09 16:10:55.58048+00 direct_edit t f 1
+962 2024-09-09 16:10:03.135512+00 direct_edit t t 1
+969 2024-09-09 16:11:37.356612+00 direct_edit t f 1
+968 2024-09-09 16:11:33.467715+00 direct_edit t f 1
+967 2024-09-09 16:11:31.418572+00 direct_edit t f 1
+966 2024-09-09 16:11:27.736257+00 direct_edit t f 1
+965 2024-09-09 16:11:23.83446+00 direct_edit t f 1
+964 2024-09-09 16:11:22.399638+00 direct_edit t f 1
+977 2024-09-09 16:16:14.656205+00 direct_edit t f 1
+976 2024-09-09 16:15:59.502132+00 direct_edit t f 1
+975 2024-09-09 16:15:48.938214+00 direct_edit t f 1
+974 2024-09-09 16:15:35.119841+00 direct_edit t t 1
+973 2024-09-09 16:14:39.017091+00 direct_edit t f 1
+972 2024-09-09 16:14:36.152595+00 direct_edit t f 1
+971 2024-09-09 16:14:32.053479+00 direct_edit t f 1
+970 2024-09-09 16:14:27.543746+00 direct_edit t f 1
+1457 2024-09-17 10:05:30.041206+00 direct_edit t t 1
+983 2024-09-10 06:22:36.888074+00 direct_edit t t 1
+982 2024-09-10 06:22:21.118129+00 direct_edit t t 1
+981 2024-09-10 06:22:11.081416+00 direct_edit t t 1
+980 2024-09-10 06:21:54.901983+00 direct_edit t t 1
+979 2024-09-10 06:21:18.468894+00 direct_edit t t 1
+978 2024-09-10 06:18:29.074162+00 direct_edit t t 1
+984 2024-09-10 06:33:32.724259+00 management t f \N
+989 2024-09-10 06:37:19.818788+00 direct_edit t t 1
+988 2024-09-10 06:36:20.404931+00 direct_edit t t 1
+987 2024-09-10 06:35:51.339245+00 direct_edit t t 1
+986 2024-09-10 06:34:15.679963+00 direct_edit t t 1
+985 2024-09-10 06:34:05.038753+00 direct_edit t t 1
+990 2024-09-10 06:38:35.260487+00 management t f \N
+991 2024-09-10 06:42:04.397867+00 management t f \N
+994 2024-09-10 06:52:59.081015+00 management t f \N
+993 2024-09-10 06:52:46.938868+00 direct_edit t f 1
+992 2024-09-10 06:50:18.256989+00 direct_edit t f 1
+1000 2024-09-10 07:01:49.312009+00 management t f \N
+999 2024-09-10 07:00:45.581379+00 direct_edit t t 1
+998 2024-09-10 07:00:11.590715+00 direct_edit t t 1
+997 2024-09-10 06:58:58.476081+00 direct_edit t t 1
+996 2024-09-10 06:57:30.822485+00 direct_edit t t 1
+995 2024-09-10 06:55:38.36628+00 direct_edit t t 1
+1001 2024-09-10 07:01:58.836854+00 management t f \N
+1010 2024-09-10 07:08:13.678342+00 direct_edit t t 1
+1009 2024-09-10 07:07:58.119787+00 direct_edit t t 1
+1008 2024-09-10 07:07:41.11907+00 direct_edit t t 1
+1007 2024-09-10 07:07:33.207083+00 direct_edit t f 1
+1006 2024-09-10 07:07:25.771546+00 direct_edit t t 1
+1005 2024-09-10 07:07:09.579729+00 direct_edit t t 1
+1004 2024-09-10 07:07:03.638362+00 direct_edit t t 1
+1003 2024-09-10 07:06:36.592162+00 direct_edit t f 1
+1002 2024-09-10 07:06:26.145492+00 direct_edit t f 1
+1011 2024-09-10 07:08:41.054164+00 management t f \N
+1012 2024-09-10 07:10:25.886125+00 management t f \N
+1013 2024-09-10 07:10:35.84252+00 management t f \N
+1458 2024-09-24 09:20:31.075516+00 management t f \N
+1071 2024-09-10 07:31:44.779065+00 direct_edit t f 1
+1070 2024-09-10 07:31:40.68586+00 direct_edit t f 1
+1069 2024-09-10 07:31:21.032366+00 direct_edit t f 1
+1068 2024-09-10 07:31:17.138664+00 direct_edit t f 1
+1067 2024-09-10 07:31:04.22757+00 direct_edit t t 1
+1066 2024-09-10 07:30:56.237034+00 direct_edit t f 1
+1065 2024-09-10 07:30:34.124262+00 direct_edit t f 1
+1064 2024-09-10 07:30:26.953416+00 direct_edit t f 1
+1063 2024-09-10 07:30:17.121261+00 direct_edit t f 1
+1062 2024-09-10 07:30:09.746568+00 direct_edit t f 1
+1061 2024-09-10 07:29:57.663086+00 direct_edit t f 1
+1060 2024-09-10 07:29:55.818907+00 direct_edit t f 1
+1059 2024-09-10 07:29:40.664954+00 direct_edit t f 1
+1058 2024-09-10 07:29:38.412682+00 direct_edit t f 1
+1057 2024-09-10 07:29:30.424139+00 direct_edit t f 1
+1056 2024-09-10 07:29:23.46604+00 direct_edit t f 1
+1055 2024-09-10 07:28:58.68489+00 direct_edit t f 1
+1054 2024-09-10 07:28:15.47345+00 direct_edit t f 1
+1053 2024-09-10 07:27:50.489936+00 direct_edit t f 1
+1052 2024-09-10 07:27:36.763103+00 direct_edit t f 1
+1051 2024-09-10 07:27:08.700572+00 direct_edit t f 1
+1050 2024-09-10 07:27:03.17155+00 direct_edit t f 1
+1049 2024-09-10 07:26:41.671668+00 direct_edit t f 1
+1048 2024-09-10 07:26:24.094783+00 direct_edit t f 1
+1047 2024-09-10 07:26:05.018583+00 direct_edit t f 1
+1046 2024-09-10 07:25:50.466543+00 direct_edit t f 1
+1045 2024-09-10 07:25:17.916165+00 direct_edit t f 1
+1081 2024-09-10 07:33:44.595645+00 direct_edit t f 1
+1080 2024-09-10 07:33:33.531432+00 direct_edit t f 1
+1079 2024-09-10 07:33:20.831094+00 direct_edit t f 1
+1078 2024-09-10 07:33:17.144203+00 direct_edit t f 1
+1077 2024-09-10 07:33:05.270051+00 direct_edit t f 1
+1076 2024-09-10 07:32:55.03399+00 direct_edit t f 1
+1075 2024-09-10 07:32:44.785066+00 direct_edit t f 1
+1074 2024-09-10 07:32:33.119238+00 direct_edit t f 1
+1073 2024-09-10 07:32:26.361774+00 direct_edit t f 1
+1072 2024-09-10 07:32:22.469286+00 direct_edit t f 1
+1044 2024-09-10 07:25:11.968955+00 direct_edit t f 1
+1043 2024-09-10 07:25:09.919392+00 direct_edit t f 1
+1042 2024-09-10 07:24:52.717905+00 direct_edit t f 1
+1041 2024-09-10 07:24:49.435088+00 direct_edit t f 1
+1040 2024-09-10 07:24:46.773264+00 direct_edit t f 1
+1039 2024-09-10 07:24:23.845091+00 direct_edit t f 1
+1038 2024-09-10 07:24:20.560327+00 direct_edit t f 1
+1037 2024-09-10 07:24:18.92284+00 direct_edit t f 1
+1036 2024-09-10 07:23:50.864879+00 direct_edit t f 1
+1035 2024-09-10 07:23:44.112658+00 direct_edit t f 1
+1034 2024-09-10 07:23:41.857947+00 direct_edit t f 1
+1033 2024-09-10 07:23:39.189714+00 direct_edit t f 1
+1032 2024-09-10 07:23:36.319899+00 direct_edit t f 1
+1031 2024-09-10 07:23:10.721979+00 direct_edit t t 1
+1030 2024-09-10 07:23:01.086375+00 direct_edit t t 1
+1029 2024-09-10 07:22:03.150649+00 direct_edit t t 1
+1028 2024-09-10 07:21:40.824725+00 direct_edit t t 1
+1027 2024-09-10 07:20:56.365353+00 direct_edit t t 1
+1026 2024-09-10 07:20:42.296313+00 direct_edit t t 1
+1025 2024-09-10 07:19:49.695157+00 direct_edit t t 1
+1024 2024-09-10 07:19:25.260586+00 direct_edit t t 1
+1023 2024-09-10 07:19:13.366464+00 direct_edit t t 1
+1022 2024-09-10 07:17:59.858424+00 direct_edit t t 1
+1021 2024-09-10 07:17:22.980022+00 direct_edit t t 1
+1020 2024-09-10 07:16:23.387289+00 direct_edit t t 1
+1019 2024-09-10 07:15:02.46272+00 direct_edit t t 1
+1018 2024-09-10 07:14:53.455803+00 direct_edit t t 1
+1017 2024-09-10 07:14:30.148124+00 direct_edit t t 1
+1016 2024-09-10 07:13:29.931682+00 direct_edit t t 1
+1015 2024-09-10 07:11:40.329937+00 direct_edit t f 1
+1014 2024-09-10 07:11:33.776659+00 direct_edit t f 1
+1082 2024-09-10 07:34:15.759685+00 management t f \N
+1105 2024-09-10 07:38:24.963291+00 direct_edit t f 1
+1104 2024-09-10 07:38:21.27844+00 direct_edit t f 1
+1103 2024-09-10 07:38:18.818351+00 direct_edit t f 1
+1102 2024-09-10 07:38:16.157492+00 direct_edit t f 1
+1101 2024-09-10 07:38:12.263816+00 direct_edit t f 1
+1100 2024-09-10 07:38:07.560253+00 direct_edit t f 1
+1099 2024-09-10 07:38:01.619635+00 direct_edit t f 1
+1098 2024-09-10 07:37:57.925508+00 direct_edit t f 1
+1097 2024-09-10 07:37:55.678166+00 direct_edit t f 1
+1096 2024-09-10 07:37:50.968628+00 direct_edit t f 1
+1095 2024-09-10 07:37:46.444113+00 direct_edit t f 1
+1094 2024-09-10 07:37:34.173938+00 direct_edit t f 1
+1093 2024-09-10 07:37:26.796477+00 direct_edit t f 1
+1092 2024-09-10 07:37:18.814936+00 direct_edit t f 1
+1091 2024-09-10 07:37:11.847109+00 direct_edit t f 1
+1090 2024-09-10 07:36:38.88559+00 direct_edit t f 1
+1089 2024-09-10 07:36:35.349165+00 direct_edit t f 1
+1088 2024-09-10 07:36:28.637432+00 direct_edit t f 1
+1087 2024-09-10 07:36:23.315367+00 direct_edit t f 1
+1086 2024-09-10 07:36:18.198093+00 direct_edit t f 1
+1085 2024-09-10 07:36:13.895611+00 direct_edit t f 1
+1084 2024-09-10 07:36:10.619955+00 direct_edit t f 1
+1083 2024-09-10 07:35:59.966899+00 direct_edit t f 1
+1106 2024-09-10 07:38:44.865336+00 management t f \N
+1117 2024-09-10 07:40:17.832002+00 management t f \N
+1116 2024-09-10 07:40:02.665381+00 direct_edit t f 1
+1115 2024-09-10 07:39:59.798852+00 direct_edit t f 1
+1114 2024-09-10 07:39:55.900552+00 direct_edit t f 1
+1113 2024-09-10 07:39:53.240895+00 direct_edit t f 1
+1112 2024-09-10 07:39:50.790082+00 direct_edit t f 1
+1111 2024-09-10 07:39:48.326713+00 direct_edit t f 1
+1110 2024-09-10 07:39:41.155381+00 direct_edit t f 1
+1109 2024-09-10 07:39:38.287972+00 direct_edit t f 1
+1108 2024-09-10 07:39:34.601079+00 direct_edit t f 1
+1107 2024-09-10 07:39:27.643685+00 direct_edit t f 1
+1122 2024-09-10 07:43:09.431356+00 direct_edit t t 1
+1121 2024-09-10 07:43:02.673132+00 direct_edit t f 1
+1120 2024-09-10 07:42:58.371451+00 direct_edit t f 1
+1119 2024-09-10 07:42:47.312706+00 direct_edit t f 1
+1118 2024-09-10 07:42:37.892976+00 direct_edit t t 1
+1123 2024-09-10 07:43:47.367298+00 management t f \N
+1125 2024-09-10 08:51:41.065157+00 direct_edit t t 1
+1124 2024-09-10 08:51:26.319809+00 direct_edit t t 1
+1126 2024-09-10 08:52:45.444994+00 management t f \N
+1139 2024-09-10 09:03:25.386854+00 direct_edit t f 1
+1138 2024-09-10 09:03:20.265732+00 direct_edit t f 1
+1137 2024-09-10 09:03:11.255069+00 direct_edit t f 1
+1136 2024-09-10 09:03:02.247125+00 direct_edit t f 1
+1135 2024-09-10 09:02:55.688952+00 direct_edit t f 1
+1134 2024-09-10 09:02:39.093267+00 direct_edit t t 1
+1133 2024-09-10 09:02:21.072475+00 direct_edit t t 1
+1132 2024-09-10 09:02:07.355806+00 direct_edit t t 1
+1131 2024-09-10 09:01:51.406459+00 direct_edit t t 1
+1130 2024-09-10 08:59:34.999033+00 direct_edit t t 1
+1129 2024-09-10 08:59:04.697292+00 direct_edit t t 1
+1128 2024-09-10 08:58:29.055523+00 direct_edit t t 1
+1127 2024-09-10 08:55:16.552757+00 direct_edit t t 1
+1459 2024-09-24 09:23:49.369172+00 management t f \N
+1168 2024-09-10 09:16:52.598778+00 management t f \N
+1167 2024-09-10 09:16:31.015353+00 direct_edit t t 1
+1166 2024-09-10 09:16:19.541274+00 direct_edit t t 1
+1165 2024-09-10 09:15:54.964396+00 direct_edit t t 1
+1164 2024-09-10 09:15:42.471133+00 direct_edit t t 1
+1163 2024-09-10 09:15:25.883527+00 direct_edit t t 1
+1162 2024-09-10 09:15:13.185646+00 direct_edit t t 1
+1161 2024-09-10 09:14:41.031198+00 direct_edit t t 1
+1160 2024-09-10 09:14:27.927123+00 direct_edit t t 1
+1159 2024-09-10 09:14:06.008888+00 direct_edit t t 1
+1158 2024-09-10 09:13:51.468061+00 direct_edit t t 1
+1157 2024-09-10 09:10:20.722623+00 direct_edit t t 1
+1156 2024-09-10 09:09:55.737451+00 direct_edit t t 1
+1155 2024-09-10 09:09:07.642834+00 direct_edit t t 1
+1154 2024-09-10 09:04:49.776333+00 direct_edit t f 1
+1153 2024-09-10 09:04:46.905732+00 direct_edit t t 1
+1152 2024-09-10 09:04:38.296838+00 direct_edit t f 1
+1151 2024-09-10 09:04:37.078347+00 direct_edit t f 1
+1150 2024-09-10 09:04:34.820855+00 direct_edit t f 1
+1149 2024-09-10 09:04:32.169107+00 direct_edit t f 1
+1148 2024-09-10 09:04:29.093588+00 direct_edit t f 1
+1147 2024-09-10 09:04:25.603541+00 direct_edit t f 1
+1146 2024-09-10 09:04:05.750208+00 direct_edit t f 1
+1145 2024-09-10 09:04:01.84966+00 direct_edit t f 1
+1144 2024-09-10 09:04:00.209123+00 direct_edit t f 1
+1143 2024-09-10 09:03:57.958611+00 direct_edit t f 1
+1142 2024-09-10 09:03:55.90805+00 direct_edit t f 1
+1141 2024-09-10 09:03:53.508422+00 direct_edit t f 1
+1140 2024-09-10 09:03:48.938429+00 direct_edit t f 1
+1170 2024-09-10 09:20:52.348011+00 direct_edit t t 1
+1169 2024-09-10 09:20:32.712751+00 direct_edit t t 1
+1178 2024-09-10 10:35:46.134569+00 direct_edit t t 1
+1177 2024-09-10 10:35:24.631662+00 direct_edit t t 1
+1176 2024-09-10 10:34:37.526944+00 direct_edit t t 1
+1175 2024-09-10 10:34:22.781024+00 direct_edit t t 1
+1174 2024-09-10 10:33:50.428653+00 direct_edit t t 1
+1173 2024-09-10 10:33:17.025546+00 direct_edit t f 1
+1172 2024-09-10 10:33:05.354592+00 direct_edit t f 1
+1171 2024-09-10 10:28:43.017777+00 direct_edit t t 1
+1179 2024-09-10 10:36:17.624541+00 management t f \N
+1195 2024-09-10 10:40:53.357321+00 direct_edit t f 1
+1194 2024-09-10 10:40:49.054053+00 direct_edit t f 1
+1193 2024-09-10 10:40:38.8102+00 direct_edit t f 1
+1192 2024-09-10 10:40:10.744638+00 direct_edit t t 1
+1191 2024-09-10 10:39:48.215218+00 direct_edit t t 1
+1190 2024-09-10 10:39:28.122349+00 direct_edit t t 1
+1189 2024-09-10 10:39:07.049401+00 direct_edit t t 1
+1188 2024-09-10 10:38:41.448708+00 direct_edit t t 1
+1187 2024-09-10 10:38:16.062679+00 direct_edit t f 1
+1186 2024-09-10 10:38:10.140262+00 direct_edit t f 1
+1185 2024-09-10 10:37:59.461945+00 direct_edit t t 1
+1184 2024-09-10 10:37:52.088878+00 direct_edit t t 1
+1183 2024-09-10 10:37:45.124498+00 direct_edit t t 1
+1182 2024-09-10 10:37:36.939331+00 direct_edit t t 1
+1181 2024-09-10 10:37:18.913463+00 direct_edit t t 1
+1180 2024-09-10 10:37:11.339574+00 direct_edit t t 1
+1196 2024-09-10 10:41:26.170354+00 management t f \N
+1197 2024-09-10 10:42:34.309452+00 direct_edit t t 1
+1198 2024-09-10 10:42:55.667308+00 management t f \N
+1202 2024-09-10 10:44:00.73906+00 direct_edit t f 1
+1201 2024-09-10 10:43:57.465429+00 direct_edit t f 1
+1200 2024-09-10 10:43:45.791858+00 direct_edit t f 1
+1199 2024-09-10 10:43:43.534028+00 direct_edit t f 1
+1203 2024-09-10 10:44:14.757652+00 management t f \N
+1205 2024-09-10 10:48:32.635643+00 management t f \N
+1204 2024-09-10 10:47:35.778796+00 direct_edit t t 1
+1206 2024-09-10 10:48:44.226134+00 management t f \N
+1213 2024-09-10 11:02:21.142448+00 direct_edit t t 1
+1212 2024-09-10 11:01:57.63076+00 direct_edit t t 1
+1211 2024-09-10 11:01:34.242533+00 direct_edit t t 1
+1210 2024-09-10 11:01:22.7795+00 direct_edit t t 1
+1209 2024-09-10 11:00:59.456046+00 direct_edit t t 1
+1208 2024-09-10 10:59:52.863624+00 direct_edit t t 1
+1207 2024-09-10 10:59:46.925942+00 direct_edit t t 1
+1214 2024-09-10 11:02:52.771715+00 management t f \N
+1227 2024-09-10 12:18:13.775765+00 management t f \N
+1226 2024-09-10 12:17:55.290982+00 direct_edit t t 1
+1225 2024-09-10 12:17:39.309157+00 direct_edit t t 1
+1224 2024-09-10 12:17:24.571456+00 direct_edit t t 1
+1223 2024-09-10 12:17:06.341263+00 direct_edit t t 1
+1222 2024-09-10 12:16:50.569837+00 direct_edit t t 1
+1221 2024-09-10 12:16:29.065862+00 direct_edit t t 1
+1220 2024-09-10 12:15:31.1649+00 direct_edit t t 1
+1219 2024-09-10 11:06:44.931091+00 direct_edit t t 1
+1218 2024-09-10 11:03:47.981823+00 direct_edit t t 1
+1217 2024-09-10 11:03:41.634863+00 direct_edit t f 1
+1216 2024-09-10 11:03:37.94683+00 direct_edit t f 1
+1215 2024-09-10 11:03:33.239261+00 direct_edit t t 1
+1228 2024-09-10 12:18:25.071164+00 management t f \N
+1230 2024-09-10 12:20:36.671186+00 direct_edit t t 1
+1229 2024-09-10 12:19:55.335175+00 direct_edit t t 1
+1231 2024-09-10 12:21:40.212905+00 management t f \N
+1239 2024-09-10 12:27:50.260162+00 direct_edit t t 1
+1238 2024-09-10 12:26:50.892246+00 direct_edit t t 1
+1237 2024-09-10 12:26:34.900505+00 direct_edit t t 1
+1236 2024-09-10 12:25:49.60828+00 direct_edit t f 1
+1235 2024-09-10 12:25:27.295137+00 direct_edit t f 1
+1234 2024-09-10 12:25:19.913659+00 direct_edit t f 1
+1233 2024-09-10 12:23:27.074047+00 direct_edit t t 1
+1232 2024-09-10 12:23:17.85972+00 direct_edit t t 1
+1245 2024-09-10 12:34:43.976903+00 direct_edit t t 1
+1244 2024-09-10 12:34:32.929968+00 direct_edit t t 1
+1243 2024-09-10 12:34:08.621853+00 direct_edit t f 1
+1242 2024-09-10 12:29:53.129579+00 direct_edit t f 1
+1241 2024-09-10 12:29:48.418817+00 direct_edit t f 1
+1240 2024-09-10 12:29:44.331845+00 direct_edit t f 1
+1246 2024-09-10 12:35:07.360218+00 management t f \N
+1460 2024-09-24 09:26:09.867117+00 management t f \N
+1255 2024-09-10 13:41:45.300033+00 direct_edit t f 1
+1254 2024-09-10 13:41:22.35702+00 direct_edit t f 1
+1253 2024-09-10 13:40:51.841158+00 direct_edit t f 1
+1252 2024-09-10 13:40:00.841204+00 direct_edit t f 1
+1251 2024-09-10 13:29:49.496297+00 direct_edit t t 1
+1250 2024-09-10 13:28:45.780241+00 direct_edit t t 1
+1249 2024-09-10 13:24:39.433561+00 direct_edit t t 1
+1248 2024-09-10 13:20:33.032079+00 direct_edit t f 1
+1247 2024-09-10 13:20:22.790597+00 direct_edit t f 1
+1256 2024-09-10 13:42:48.157359+00 management t f \N
+1261 2024-09-11 12:29:25.106061+00 direct_edit t t 1
+1260 2024-09-11 12:28:51.30691+00 direct_edit t t 1
+1259 2024-09-11 12:25:40.227963+00 direct_edit t t 1
+1258 2024-09-11 12:25:09.922248+00 direct_edit t t 1
+1257 2024-09-11 12:21:56.725799+00 direct_edit t t 1
+1262 2024-09-11 13:04:14.763689+00 management t f \N
+1270 2024-09-12 14:52:38.483398+00 direct_edit t t 1
+1269 2024-09-12 14:52:26.395897+00 direct_edit t f 1
+1268 2024-09-12 14:52:19.234856+00 direct_edit t t 1
+1267 2024-09-12 14:52:04.690547+00 direct_edit t t 1
+1266 2024-09-12 14:51:54.044696+00 direct_edit t t 1
+1265 2024-09-12 14:51:44.21068+00 direct_edit t t 1
+1264 2024-09-12 14:51:31.52176+00 direct_edit t t 1
+1263 2024-09-12 14:51:19.841867+00 direct_edit t t 1
+1271 2024-09-12 14:54:00.590495+00 direct_edit t f 1
+1272 2024-09-12 14:55:41.985865+00 direct_edit t t 1
+1273 2024-09-12 15:19:36.778805+00 direct_edit t t 1
+1276 2024-09-12 15:46:36.388235+00 direct_edit t t 1
+1275 2024-09-12 15:46:26.558709+00 direct_edit t t 1
+1274 2024-09-12 15:31:08.423966+00 direct_edit t t 1
+1277 2024-09-12 15:48:42.772787+00 direct_edit t t 1
+1278 2024-09-12 15:50:12.045228+00 direct_edit t t 1
+1279 2024-09-12 15:52:41.961572+00 direct_edit t t 1
+1284 2024-09-12 15:54:51.198154+00 direct_edit t t 1
+1283 2024-09-12 15:54:36.655943+00 direct_edit t t 1
+1282 2024-09-12 15:54:20.069994+00 direct_edit t t 1
+1281 2024-09-12 15:54:02.455219+00 direct_edit t t 1
+1280 2024-09-12 15:53:50.166135+00 direct_edit t t 1
+1286 2024-09-12 15:55:47.513854+00 direct_edit t t 1
+1285 2024-09-12 15:55:39.116675+00 direct_edit t t 1
+1287 2024-09-12 15:56:49.572548+00 direct_edit t t 1
+1288 2024-09-12 15:57:09.83227+00 management t f \N
+1290 2024-09-12 15:58:29.768858+00 management t f \N
+1289 2024-09-12 15:58:22.553631+00 direct_edit t t 1
+1291 2024-09-12 16:40:57.370124+00 management t f \N
+1299 2024-09-13 09:46:57.590404+00 management t f \N
+1298 2024-09-13 09:46:38.273145+00 direct_edit t t 1
+1297 2024-09-13 09:46:06.120767+00 direct_edit t t 1
+1296 2024-09-13 09:45:57.694057+00 direct_edit t t 1
+1295 2024-09-13 09:45:26.595928+00 direct_edit t t 1
+1294 2024-09-13 09:43:33.110826+00 direct_edit t t 1
+1293 2024-09-13 09:43:25.525499+00 direct_edit t t 1
+1292 2024-09-13 09:42:31.456966+00 direct_edit t t 1
+1301 2024-09-13 09:47:58.598763+00 management t f \N
+1300 2024-09-13 09:47:42.791393+00 direct_edit t t 1
+1311 2024-09-13 09:52:32.79547+00 management t f \N
+1310 2024-09-13 09:52:17.616863+00 direct_edit t f 1
+1309 2024-09-13 09:52:01.63862+00 direct_edit t f 1
+1308 2024-09-13 09:51:23.334695+00 direct_edit t t 1
+1307 2024-09-13 09:51:18.214351+00 direct_edit t t 1
+1306 2024-09-13 09:51:05.518083+00 direct_edit t t 1
+1305 2024-09-13 09:50:47.07476+00 direct_edit t t 1
+1304 2024-09-13 09:50:26.220617+00 direct_edit t t 1
+1303 2024-09-13 09:49:27.857506+00 direct_edit t t 1
+1302 2024-09-13 09:48:40.749106+00 direct_edit t t 1
+1318 2024-09-13 09:54:08.479852+00 management t f \N
+1317 2024-09-13 09:53:57.350878+00 direct_edit t f 1
+1316 2024-09-13 09:53:51.823046+00 direct_edit t f 1
+1315 2024-09-13 09:53:46.086056+00 direct_edit t f 1
+1314 2024-09-13 09:53:39.330484+00 direct_edit t f 1
+1313 2024-09-13 09:53:30.926138+00 direct_edit t f 1
+1312 2024-09-13 09:53:21.71681+00 direct_edit t t 1
+1323 2024-09-13 09:57:07.100504+00 management t f \N
+1322 2024-09-13 09:56:07.436373+00 direct_edit t t 1
+1321 2024-09-13 09:55:53.469571+00 direct_edit t t 1
+1320 2024-09-13 09:55:06.363944+00 direct_edit t t 1
+1319 2024-09-13 09:54:53.695535+00 direct_edit t t 1
+1324 2024-09-13 09:57:18.7182+00 management t f \N
+1330 2024-09-13 10:00:20.828182+00 management t f \N
+1329 2024-09-13 10:00:13.154724+00 direct_edit t t 1
+1328 2024-09-13 09:59:49.840141+00 direct_edit t t 1
+1327 2024-09-13 09:59:28.954764+00 direct_edit t t 1
+1326 2024-09-13 09:59:08.876721+00 direct_edit t t 1
+1325 2024-09-13 09:58:31.812257+00 direct_edit t t 1
+1331 2024-09-13 10:00:32.546703+00 management t f \N
+1334 2024-09-13 10:02:33.270975+00 management t f \N
+1333 2024-09-13 10:02:25.260072+00 direct_edit t t 1
+1332 2024-09-13 10:02:16.071062+00 direct_edit t t 1
+1336 2024-09-13 10:03:21.208059+00 management t f \N
+1335 2024-09-13 10:03:13.626379+00 direct_edit t t 1
+1338 2024-09-13 10:04:16.748769+00 management t f \N
+1337 2024-09-13 10:04:06.26271+00 direct_edit t t 1
+1341 2024-09-13 10:06:17.274559+00 management t f \N
+1340 2024-09-13 10:06:07.8786+00 direct_edit t t 1
+1339 2024-09-13 10:05:00.939688+00 direct_edit t t 1
+1343 2024-09-13 10:07:04.478183+00 management t f \N
+1342 2024-09-13 10:06:57.468532+00 direct_edit t t 1
+1345 2024-09-13 10:07:52.984192+00 management t f \N
+1344 2024-09-13 10:07:46.011761+00 direct_edit t t 1
+1348 2024-09-13 10:08:46.48357+00 management t f \N
+1347 2024-09-13 10:08:39.020339+00 direct_edit t t 1
+1346 2024-09-13 10:08:29.631386+00 direct_edit t t 1
+1350 2024-09-13 10:10:18.42692+00 management t f \N
+1349 2024-09-13 10:10:10.975279+00 direct_edit t t 1
+1352 2024-09-13 10:12:15.610325+00 management t f \N
+1351 2024-09-13 10:10:47.841157+00 direct_edit t t 1
+1354 2024-09-13 10:13:05.013524+00 management t f \N
+1353 2024-09-13 10:12:59.121993+00 direct_edit t t 1
+1358 2024-09-13 10:14:25.413255+00 management t f \N
+1357 2024-09-13 10:14:16.945085+00 direct_edit t t 1
+1356 2024-09-13 10:14:11.622835+00 direct_edit t t 1
+1355 2024-09-13 10:14:07.297797+00 direct_edit t t 1
+1360 2024-09-13 10:15:03.879754+00 management t f \N
+1359 2024-09-13 10:14:56.473102+00 direct_edit t t 1
+1362 2024-09-13 10:15:47.602122+00 management t f \N
+1461 2024-09-24 09:26:50.419953+00 management t t \N
+1361 2024-09-13 10:15:41.122242+00 direct_edit t t 1
+1364 2024-09-13 10:16:33.767728+00 management t f \N
+1363 2024-09-13 10:16:26.790795+00 direct_edit t t 1
+1366 2024-09-13 10:17:17.002324+00 management t f \N
+1365 2024-09-13 10:17:09.184966+00 direct_edit t t 1
+1368 2024-09-13 10:17:54.917009+00 management t f \N
+1367 2024-09-13 10:17:45.654775+00 direct_edit t t 1
+1376 2024-09-14 07:38:23.226492+00 management t f \N
+1375 2024-09-14 07:37:54.918275+00 direct_edit t t 1
+1374 2024-09-14 07:31:41.807829+00 direct_edit t t 1
+1373 2024-09-14 07:31:29.894066+00 direct_edit t t 1
+1372 2024-09-14 07:31:20.49625+00 direct_edit t t 1
+1371 2024-09-14 07:31:06.981565+00 direct_edit t t 1
+1370 2024-09-14 07:30:50.598423+00 direct_edit t t 1
+1369 2024-09-14 07:30:23.565052+00 direct_edit t t 1
+1378 2024-09-14 07:41:40.772276+00 management t f \N
+1377 2024-09-14 07:41:33.68215+00 direct_edit t t 1
+1380 2024-09-14 07:44:31.52611+00 management t f \N
+1379 2024-09-14 07:44:24.084008+00 direct_edit t t 1
+1381 2024-09-14 07:44:42.796719+00 management t f \N
+1382 2024-09-14 08:07:07.642383+00 management t f \N
+1383 2024-09-14 08:08:06.892598+00 management t f \N
+1392 2024-09-17 07:27:25.135224+00 direct_edit t f 1
+1391 2024-09-17 07:21:04.067146+00 direct_edit t f 1
+1390 2024-09-17 07:18:17.567738+00 direct_edit t f 1
+1389 2024-09-17 07:17:02.403835+00 direct_edit t f 1
+1388 2024-09-17 07:13:24.078989+00 direct_edit t f 1
+1387 2024-09-17 07:05:02.1913+00 direct_edit t f 1
+1386 2024-09-16 11:42:47.35352+00 direct_edit t f 1
+1385 2024-09-16 11:40:31.779548+00 direct_edit t f 1
+1384 2024-09-16 11:40:10.877233+00 direct_edit t f 1
+1393 2024-09-17 07:28:20.104683+00 direct_edit t f 1
+1397 2024-09-17 07:51:20.07211+00 direct_edit t f 1
+1396 2024-09-17 07:46:27.647246+00 direct_edit t t 1
+1395 2024-09-17 07:44:43.784645+00 direct_edit t t 1
+1394 2024-09-17 07:29:26.460936+00 direct_edit t f 1
+1409 2024-09-17 08:08:34.297084+00 direct_edit t t 1
+1408 2024-09-17 08:08:28.562649+00 direct_edit t t 1
+1407 2024-09-17 08:08:16.012427+00 direct_edit t t 1
+1406 2024-09-17 08:08:10.332891+00 direct_edit t t 1
+1405 2024-09-17 08:08:04.802643+00 direct_edit t t 1
+1404 2024-09-17 08:07:54.562573+00 direct_edit t t 1
+1403 2024-09-17 08:03:38.970107+00 direct_edit t t 1
+1402 2024-09-17 08:00:28.296372+00 direct_edit t t 1
+1401 2024-09-17 08:00:19.082067+00 direct_edit t t 1
+1400 2024-09-17 08:00:07.843568+00 direct_edit t t 1
+1399 2024-09-17 07:57:44.266739+00 direct_edit t t 1
+1398 2024-09-17 07:53:26.858845+00 direct_edit t f 1
+1412 2024-09-17 08:10:25.17003+00 direct_edit t t 1
+1411 2024-09-17 08:09:50.072073+00 direct_edit t t 1
+1410 2024-09-17 08:09:42.90533+00 direct_edit t t 1
+1416 2024-09-17 08:12:17.736897+00 direct_edit t t 1
+1415 2024-09-17 08:12:05.857031+00 direct_edit t t 1
+1414 2024-09-17 08:12:00.121251+00 direct_edit t t 1
+1413 2024-09-17 08:11:11.788843+00 direct_edit t t 1
+1417 2024-09-17 08:13:06.272245+00 direct_edit t t 1
+1418 2024-09-17 08:13:59.321358+00 direct_edit t t 1
+1421 2024-09-17 08:15:17.756792+00 direct_edit t t 1
+1420 2024-09-17 08:14:59.12088+00 direct_edit t t 1
+1419 2024-09-17 08:14:52.163509+00 direct_edit t t 1
+1423 2024-09-17 08:18:21.474712+00 direct_edit t t 1
+1422 2024-09-17 08:18:13.689605+00 direct_edit t t 1
+1424 2024-09-17 08:20:15.545646+00 direct_edit t t 1
+1447 2024-09-17 09:51:43.294892+00 direct_edit t t 1
+1446 2024-09-17 09:51:29.159128+00 direct_edit t f 1
+1445 2024-09-17 09:51:02.081944+00 direct_edit t f 1
+1444 2024-09-17 09:50:26.890106+00 direct_edit t t 1
+1443 2024-09-17 09:48:18.483833+00 direct_edit t t 1
+1442 2024-09-17 09:46:10.929869+00 direct_edit t t 1
+1441 2024-09-17 09:46:03.479578+00 direct_edit t t 1
+1440 2024-09-17 09:45:59.588099+00 direct_edit t t 1
+1439 2024-09-17 09:45:52.827538+00 direct_edit t t 1
+1438 2024-09-17 09:45:46.485474+00 direct_edit t t 1
+1437 2024-09-17 09:45:43.407182+00 direct_edit t t 1
+1436 2024-09-17 09:45:40.336744+00 direct_edit t t 1
+1435 2024-09-17 09:45:33.167597+00 direct_edit t t 1
+1434 2024-09-17 09:45:28.660578+00 direct_edit t t 1
+1433 2024-09-17 09:45:22.10772+00 direct_edit t t 1
+1432 2024-09-17 09:32:36.370708+00 direct_edit t f 1
+1431 2024-09-17 09:31:05.023255+00 direct_edit t f 1
+1430 2024-09-17 09:30:57.037458+00 direct_edit t f 1
+1429 2024-09-17 09:21:36.275858+00 direct_edit t f 1
+1428 2024-09-17 09:21:14.154067+00 direct_edit t f 1
+1427 2024-09-17 09:17:57.13612+00 direct_edit t t 1
+1426 2024-09-17 09:17:50.579633+00 direct_edit t f 1
+1425 2024-09-17 09:11:18.984082+00 direct_edit t f 1
+1450 2024-09-17 09:57:49.847976+00 direct_edit t t 1
+1449 2024-09-17 09:55:01.292517+00 direct_edit t t 1
+1448 2024-09-17 09:54:20.130126+00 direct_edit t t 1
+1462 2024-09-24 10:04:08.949053+00 management t t \N
+1464 2024-09-26 07:07:03.307946+00 management t t \N
+1466 2024-09-26 07:30:45.077639+00 management t t \N
+1475 2024-09-26 07:42:42.544684+00 direct_edit t f 1
+1484 2024-09-26 08:11:34.742136+00 management t t \N
+1493 2024-09-26 08:25:43.432671+00 management t t \N
+1502 2024-09-26 09:49:38.352906+00 direct_edit t t 1
+1538 2024-09-26 10:04:34.371102+00 direct_edit t t 1
+1529 2024-09-26 10:03:13.271285+00 direct_edit t f 1
+1520 2024-09-26 10:01:44.385284+00 direct_edit t f 1
+1511 2024-09-26 10:00:21.846249+00 direct_edit t f 1
+1547 2024-09-26 10:15:54.970891+00 direct_edit t t 1
+1565 2024-10-14 07:43:30.556651+00 direct_edit t f 1
+1556 2024-10-14 07:42:25.236643+00 direct_edit t f 1
+1574 2024-10-14 07:59:13.073095+00 direct_edit t f 1
+1583 2024-10-14 08:06:52.733014+00 direct_edit t f 1
+1646 2024-10-14 09:15:48.453187+00 direct_edit t f 1
+1637 2024-10-14 09:13:19.559871+00 direct_edit t f 1
+1628 2024-10-14 08:37:22.579852+00 direct_edit t f 1
+1619 2024-10-14 08:36:31.780933+00 direct_edit t f 1
+1610 2024-10-14 08:35:59.622567+00 direct_edit t f 1
+1601 2024-10-14 08:32:57.760393+00 direct_edit t f 1
+1592 2024-10-14 08:26:29.247563+00 direct_edit t f 1
+1655 2024-10-14 09:22:02.24729+00 direct_edit t f 1
+1664 2024-10-14 09:38:02.7512+00 direct_edit t f 1
+1673 2024-10-14 09:47:00.962367+00 management t t \N
+1682 2024-10-14 09:53:37.872442+00 direct_edit t f 1
+1691 2024-10-14 09:58:45.112624+00 management t t \N
+1467 2024-09-26 07:31:54.371969+00 management t t \N
+1476 2024-09-26 07:42:58.255982+00 management t t \N
+1485 2024-09-26 08:16:09.237281+00 direct_edit t t 1
+1494 2024-09-26 08:26:20.93681+00 direct_edit t t 1
+1503 2024-09-26 09:49:47.073889+00 direct_edit t t 1
+1539 2024-09-26 10:05:06.833964+00 management t t \N
+1530 2024-09-26 10:03:26.586659+00 direct_edit t f 1
+1521 2024-09-26 10:01:49.092846+00 direct_edit t f 1
+1512 2024-09-26 10:00:29.221148+00 direct_edit t f 1
+1548 2024-09-26 10:16:06.754154+00 management t t \N
+1566 2024-10-14 07:47:08.014453+00 management t t \N
+1557 2024-10-14 07:42:32.398147+00 direct_edit t f 1
+1575 2024-10-14 07:59:25.558589+00 management t t \N
+1584 2024-10-14 08:07:00.817526+00 management t t \N
+1647 2024-10-14 09:15:59.923983+00 direct_edit t f 1
+1638 2024-10-14 09:13:56.022618+00 direct_edit t f 1
+1629 2024-10-14 08:37:32.193879+00 direct_edit t f 1
+1620 2024-10-14 08:36:34.035541+00 direct_edit t f 1
+1611 2024-10-14 08:36:02.077794+00 direct_edit t f 1
+1602 2024-10-14 08:33:10.660786+00 direct_edit t f 1
+1593 2024-10-14 08:26:37.439362+00 direct_edit t f 1
+1656 2024-10-14 09:22:15.157528+00 direct_edit t f 1
+1665 2024-10-14 09:38:18.700802+00 management t t \N
+1674 2024-10-14 09:48:16.32765+00 direct_edit t f 1
+1683 2024-10-14 09:54:10.855695+00 direct_edit t f 1
+1692 2024-10-14 09:59:22.143816+00 direct_edit t f 1
+1468 2024-09-26 07:35:43.672033+00 management t t \N
+1477 2024-09-26 07:48:28.47175+00 direct_edit t t 1
+1486 2024-09-26 08:16:29.469269+00 direct_edit t t 1
+1495 2024-09-26 08:26:33.432951+00 direct_edit t t 1
+1504 2024-09-26 09:49:54.124328+00 direct_edit t t 1
+1531 2024-09-26 10:03:44.205265+00 direct_edit t f 1
+1522 2024-09-26 10:01:51.965332+00 direct_edit t f 1
+1513 2024-09-26 10:00:34.551498+00 direct_edit t f 1
+1540 2024-09-26 10:06:52.821557+00 direct_edit t t 1
+1558 2024-10-14 07:42:40.38506+00 direct_edit t f 1
+1549 2024-10-14 07:41:38.533546+00 direct_edit t f 1
+1567 2024-10-14 07:48:57.680573+00 direct_edit t f 1
+1576 2024-10-14 08:00:59.400395+00 direct_edit t f 1
+1585 2024-10-14 08:09:33.206094+00 direct_edit t f 1
+1648 2024-10-14 09:16:12.619615+00 direct_edit t f 1
+1639 2024-10-14 09:14:06.470297+00 direct_edit t f 1
+1630 2024-10-14 08:37:33.832333+00 direct_edit t f 1
+1621 2024-10-14 08:36:36.901217+00 direct_edit t f 1
+1612 2024-10-14 08:36:05.15603+00 direct_edit t f 1
+1603 2024-10-14 08:34:35.448399+00 direct_edit t t 1
+1594 2024-10-14 08:27:26.389106+00 direct_edit t f 1
+1657 2024-10-14 09:22:22.94894+00 management t t \N
+1666 2024-10-14 09:39:13.008294+00 direct_edit t f 1
+1675 2024-10-14 09:48:22.655548+00 management t t \N
+1684 2024-10-14 09:54:20.255639+00 management t t \N
+1693 2024-10-14 09:59:30.122254+00 management t t \N
+1469 2024-09-26 07:38:19.155151+00 direct_edit t t 1
+1478 2024-09-26 07:49:21.92287+00 direct_edit t t 1
+1487 2024-09-26 08:16:51.178104+00 direct_edit t t 1
+1496 2024-09-26 08:29:09.919491+00 direct_edit t t 1
+1505 2024-09-26 09:50:02.115388+00 direct_edit t t 1
+1532 2024-09-26 10:03:47.27035+00 direct_edit t f 1
+1523 2024-09-26 10:02:06.712112+00 direct_edit t f 1
+1514 2024-09-26 10:00:52.369591+00 direct_edit t f 1
+1541 2024-09-26 10:08:47.953783+00 management t t \N
+1559 2024-10-14 07:42:44.694661+00 direct_edit t f 1
+1550 2024-10-14 07:41:40.995795+00 direct_edit t f 1
+1568 2024-10-14 07:49:07.499496+00 direct_edit t f 1
+1577 2024-10-14 08:01:12.515093+00 direct_edit t f 1
+1586 2024-10-14 08:09:41.771586+00 management t t \N
+1649 2024-10-14 09:16:25.304951+00 management t t \N
+1640 2024-10-14 09:14:13.628584+00 direct_edit t f 1
+1631 2024-10-14 08:37:36.911522+00 direct_edit t f 1
+1622 2024-10-14 08:36:48.994384+00 direct_edit t f 1
+1613 2024-10-14 08:36:09.042423+00 direct_edit t f 1
+1604 2024-10-14 08:34:42.819696+00 direct_edit t f 1
+1595 2024-10-14 08:27:30.891749+00 direct_edit t f 1
+1658 2024-10-14 09:24:46.051051+00 direct_edit t f 1
+1667 2024-10-14 09:41:08.674406+00 management t t \N
+1676 2024-10-14 09:50:36.830452+00 direct_edit t f 1
+1685 2024-10-14 09:56:31.145849+00 direct_edit t f 1
+1470 2024-09-26 07:38:30.01308+00 management t t \N
+1479 2024-09-26 07:49:39.561913+00 direct_edit t t 1
+1488 2024-09-26 08:17:03.261658+00 direct_edit t t 1
+1497 2024-09-26 08:29:52.871375+00 management t t \N
+1506 2024-09-26 09:50:46.179522+00 direct_edit t f 1
+1533 2024-09-26 10:04:00.171117+00 direct_edit t f 1
+1524 2024-09-26 10:02:16.749619+00 direct_edit t f 1
+1515 2024-09-26 10:00:55.854845+00 direct_edit t f 1
+1542 2024-09-26 10:10:07.012276+00 direct_edit t t 1
+1560 2024-10-14 07:42:48.792562+00 direct_edit t f 1
+1551 2024-10-14 07:41:46.943402+00 direct_edit t t 1
+1569 2024-10-14 07:49:17.024828+00 direct_edit t f 1
+1578 2024-10-14 08:01:26.629597+00 direct_edit t f 1
+1587 2024-10-14 08:11:24.619805+00 direct_edit t f 1
+1641 2024-10-14 09:14:19.569443+00 direct_edit t f 1
+1632 2024-10-14 08:37:41.208229+00 direct_edit t f 1
+1623 2024-10-14 08:36:51.236409+00 direct_edit t f 1
+1614 2024-10-14 08:36:12.72773+00 direct_edit t f 1
+1605 2024-10-14 08:34:55.107253+00 direct_edit t f 1
+1596 2024-10-14 08:27:54.241424+00 direct_edit t f 1
+1650 2024-10-14 09:17:53.585831+00 direct_edit t f 1
+1659 2024-10-14 09:24:53.004838+00 management t t \N
+1668 2024-10-14 09:44:10.394599+00 direct_edit t f 1
+1677 2024-10-14 09:50:44.846528+00 management t t \N
+1686 2024-10-14 09:56:44.050708+00 direct_edit t f 1
+1471 2024-09-26 07:38:57.446861+00 direct_edit t f 1
+1480 2024-09-26 07:50:10.845706+00 direct_edit t t 1
+1489 2024-09-26 08:17:11.45662+00 direct_edit t t 1
+1498 2024-09-26 09:40:18.444027+00 direct_edit t t 1
+1507 2024-09-26 09:57:56.001745+00 management t t \N
+1534 2024-09-26 10:04:06.518797+00 direct_edit t f 1
+1525 2024-09-26 10:02:39.690126+00 direct_edit t f 1
+1516 2024-09-26 10:00:59.94124+00 direct_edit t f 1
+1543 2024-09-26 10:11:36.710816+00 direct_edit t f 1
+1561 2024-10-14 07:42:58.211412+00 direct_edit t f 1
+1552 2024-10-14 07:41:54.924809+00 direct_edit t f 1
+1570 2024-10-14 07:49:25.460115+00 management t t \N
+1579 2024-10-14 08:02:28.456476+00 direct_edit t t 1
+1588 2024-10-14 08:11:30.55195+00 management t t \N
+1642 2024-10-14 09:14:49.056757+00 direct_edit t f 1
+1633 2024-10-14 08:37:43.872311+00 direct_edit t f 1
+1624 2024-10-14 08:36:53.284849+00 direct_edit t f 1
+1615 2024-10-14 08:36:17.643729+00 direct_edit t f 1
+1606 2024-10-14 08:35:35.872762+00 direct_edit t t 1
+1597 2024-10-14 08:28:08.375584+00 direct_edit t f 1
+1651 2024-10-14 09:18:04.222893+00 management t t \N
+1660 2024-10-14 09:30:58.798038+00 direct_edit t f 1
+1669 2024-10-14 09:44:51.342677+00 management t t \N
+1678 2024-10-14 09:51:21.268761+00 direct_edit t f 1
+1687 2024-10-14 09:57:08.407394+00 direct_edit t f 1
+1472 2024-09-26 07:39:07.477781+00 management t t \N
+1481 2024-09-26 07:50:29.278483+00 direct_edit t t 1
+1490 2024-09-26 08:17:51.221735+00 direct_edit t t 1
+1499 2024-09-26 09:48:35.893205+00 management t t \N
+1535 2024-09-26 10:04:10.823677+00 direct_edit t f 1
+1526 2024-09-26 10:02:43.997566+00 direct_edit t f 1
+1517 2024-09-26 10:01:27.179627+00 direct_edit t f 1
+1508 2024-09-26 09:58:46.616902+00 direct_edit t t 1
+1544 2024-09-26 10:13:38.548988+00 direct_edit t t 1
+1562 2024-10-14 07:43:01.282515+00 direct_edit t f 1
+1553 2024-10-14 07:42:02.09414+00 direct_edit t f 1
+1571 2024-10-14 07:58:34.540077+00 direct_edit t f 1
+1580 2024-10-14 08:02:46.362294+00 management t t \N
+1643 2024-10-14 09:15:06.874703+00 direct_edit t f 1
+1634 2024-10-14 09:12:47.203034+00 direct_edit t f 1
+1625 2024-10-14 08:36:57.176022+00 direct_edit t f 1
+1616 2024-10-14 08:36:20.722192+00 direct_edit t f 1
+1607 2024-10-14 08:35:39.759403+00 direct_edit t t 1
+1598 2024-10-14 08:28:18.40645+00 direct_edit t f 1
+1589 2024-10-14 08:14:31.198129+00 direct_edit t f 1
+1652 2024-10-14 09:18:41.316411+00 direct_edit t f 1
+1661 2024-10-14 09:31:06.359922+00 management t t \N
+1670 2024-10-14 09:46:33.115552+00 direct_edit t f 1
+1679 2024-10-14 09:51:33.620681+00 management t t \N
+1688 2024-10-14 09:57:23.575567+00 direct_edit t f 1
+1473 2024-09-26 07:40:45.156097+00 management t t \N
+1482 2024-09-26 07:54:22.979359+00 direct_edit t t 1
+1491 2024-09-26 08:18:23.962267+00 direct_edit t t 1
+1500 2024-09-26 09:49:21.765432+00 direct_edit t t 1
+1536 2024-09-26 10:04:14.711941+00 direct_edit t f 1
+1527 2024-09-26 10:02:46.857999+00 direct_edit t f 1
+1518 2024-09-26 10:01:30.865264+00 direct_edit t f 1
+1509 2024-09-26 09:58:56.65741+00 direct_edit t t 1
+1545 2024-09-26 10:13:50.617381+00 direct_edit t t 1
+1563 2024-10-14 07:43:11.52314+00 direct_edit t f 1
+1554 2024-10-14 07:42:13.562517+00 direct_edit t f 1
+1572 2024-10-14 07:58:51.157162+00 direct_edit t f 1
+1581 2024-10-14 08:05:56.745213+00 direct_edit t t 1
+1644 2024-10-14 09:15:20.599362+00 direct_edit t f 1
+1635 2024-10-14 09:12:53.139439+00 direct_edit t f 1
+1626 2024-10-14 08:37:06.806701+00 direct_edit t f 1
+1617 2024-10-14 08:36:26.046949+00 direct_edit t f 1
+1608 2024-10-14 08:35:44.023856+00 direct_edit t f 1
+1599 2024-10-14 08:28:42.181576+00 direct_edit t f 1
+1590 2024-10-14 08:26:19.20971+00 direct_edit t f 1
+1653 2024-10-14 09:18:50.755437+00 management t t \N
+1662 2024-10-14 09:32:48.402875+00 direct_edit t f 1
+1671 2024-10-14 09:46:41.322179+00 direct_edit t f 1
+1680 2024-10-14 09:52:39.090567+00 direct_edit t f 1
+1689 2024-10-14 09:57:34.040624+00 management t t \N
+1474 2024-09-26 07:42:29.674239+00 direct_edit t t 1
+1483 2024-09-26 07:58:04.543571+00 management t t \N
+1492 2024-09-26 08:18:33.581381+00 direct_edit t t 1
+1501 2024-09-26 09:49:31.389063+00 direct_edit t t 1
+1537 2024-09-26 10:04:18.193127+00 direct_edit t f 1
+1528 2024-09-26 10:03:00.16993+00 direct_edit t f 1
+1519 2024-09-26 10:01:38.647719+00 direct_edit t f 1
+1510 2024-09-26 10:00:12.015625+00 direct_edit t f 1
+1546 2024-09-26 10:14:33.200347+00 management t t \N
+1564 2024-10-14 07:43:15.62323+00 direct_edit t f 1
+1555 2024-10-14 07:42:21.134923+00 direct_edit t f 1
+1573 2024-10-14 07:58:55.666249+00 direct_edit t f 1
+1582 2024-10-14 08:06:10.672704+00 management t t \N
+1645 2024-10-14 09:15:38.420506+00 direct_edit t f 1
+1636 2024-10-14 09:13:09.52928+00 direct_edit t f 1
+1627 2024-10-14 08:37:16.430538+00 direct_edit t f 1
+1618 2024-10-14 08:36:28.301877+00 direct_edit t f 1
+1609 2024-10-14 08:35:55.32481+00 direct_edit t t 1
+1600 2024-10-14 08:32:50.384939+00 direct_edit t f 1
+1591 2024-10-14 08:26:23.104212+00 direct_edit t f 1
+1654 2024-10-14 09:21:43.836395+00 direct_edit t f 1
+1663 2024-10-14 09:37:44.111677+00 direct_edit t t 1
+1672 2024-10-14 09:46:51.753904+00 direct_edit t f 1
+1681 2024-10-14 09:52:47.471178+00 management t t \N
+1690 2024-10-14 09:58:36.302143+00 direct_edit t f 1
+1465 2024-09-26 07:07:49.438347+00 management t t \N
+1694 2024-10-14 10:11:32.671043+00 management t t \N
+1696 2024-10-14 10:23:51.222383+00 management t t \N
+1695 2024-10-14 10:23:43.84118+00 direct_edit t f 1
+1699 2024-10-14 10:27:01.543045+00 management t t \N
+1698 2024-10-14 10:26:54.099375+00 direct_edit t f 1
+1697 2024-10-14 10:25:00.434511+00 direct_edit t f 1
+1700 2024-10-14 10:35:23.941986+00 management t t \N
+1702 2024-10-14 10:35:38.393384+00 management t t \N
+1701 2024-10-14 10:35:32.664991+00 direct_edit t f 1
+1704 2024-10-14 10:42:51.211+00 management t t \N
+1703 2024-10-14 10:42:42.736223+00 direct_edit t f 1
+1705 2024-10-14 10:44:39.470984+00 management t t \N
+1708 2024-10-14 10:48:06.994629+00 management t t \N
+1707 2024-10-14 10:47:59.978441+00 direct_edit t f 1
+1706 2024-10-14 10:45:22.311998+00 direct_edit t f 1
+1715 2024-10-14 10:54:23.789031+00 management t t \N
+1714 2024-10-14 10:53:54.304584+00 direct_edit t f 1
+1713 2024-10-14 10:53:24.396856+00 direct_edit t f 1
+1712 2024-10-14 10:52:59.410632+00 direct_edit t f 1
+1711 2024-10-14 10:50:59.146135+00 direct_edit t f 1
+1710 2024-10-14 10:50:26.011795+00 direct_edit t f 1
+1709 2024-10-14 10:49:52.428081+00 direct_edit t f 1
+1718 2024-10-14 12:20:16.611694+00 management t t \N
+1717 2024-10-14 12:20:09.09036+00 direct_edit t f 1
+1716 2024-10-14 12:19:37.95791+00 direct_edit t f 1
+1719 2024-10-14 12:22:02.195387+00 management t t \N
+1723 2024-10-14 12:30:31.691898+00 management t t \N
+1722 2024-10-14 12:29:01.759267+00 direct_edit t t 1
+1721 2024-10-14 12:28:17.949207+00 direct_edit t t 1
+1720 2024-10-14 12:27:25.927843+00 direct_edit t t 1
+1725 2024-10-14 12:31:30.893196+00 management t t \N
+1724 2024-10-14 12:31:17.535758+00 direct_edit t t 1
+1728 2024-10-14 12:32:27.748725+00 management t t \N
+1727 2024-10-14 12:32:20.084137+00 direct_edit t t 1
+1726 2024-10-14 12:32:14.473308+00 direct_edit t t 1
+1730 2024-10-14 12:36:00.833629+00 management t t \N
+1729 2024-10-14 12:35:14.527524+00 direct_edit t t 1
+1739 2024-10-14 12:40:18.251126+00 management t t \N
+1738 2024-10-14 12:40:10.044146+00 direct_edit t f 1
+1737 2024-10-14 12:39:50.589335+00 direct_edit t f 1
+1736 2024-10-14 12:39:34.197076+00 direct_edit t f 1
+1735 2024-10-14 12:39:23.352926+00 direct_edit t f 1
+1734 2024-10-14 12:39:01.422917+00 direct_edit t f 1
+1733 2024-10-14 12:37:02.267928+00 direct_edit t f 1
+1732 2024-10-14 12:36:53.043007+00 direct_edit t f 1
+1731 2024-10-14 12:36:48.538728+00 direct_edit t t 1
+1742 2024-10-14 12:48:23.395417+00 management t t \N
+1741 2024-10-14 12:44:17.439792+00 direct_edit t t 1
+1740 2024-10-14 12:44:09.447739+00 direct_edit t t 1
+1743 2024-10-14 12:48:34.637638+00 management t t \N
+1745 2024-10-14 12:54:08.270301+00 management t t \N
+1744 2024-10-14 12:52:21.005875+00 direct_edit t t 1
+1749 2024-10-14 12:56:39.387991+00 management t t \N
+1748 2024-10-14 12:56:32.352144+00 direct_edit t t 1
+1747 2024-10-14 12:55:09.746827+00 direct_edit t t 1
+1746 2024-10-14 12:54:37.171423+00 direct_edit t f 1
+1755 2024-10-14 12:59:57.859694+00 management t t \N
+1754 2024-10-14 12:58:48.262633+00 direct_edit t f 1
+1753 2024-10-14 12:58:22.049434+00 direct_edit t f 1
+1752 2024-10-14 12:57:49.279354+00 direct_edit t f 1
+1751 2024-10-14 12:57:33.507269+00 direct_edit t f 1
+1750 2024-10-14 12:57:24.493498+00 direct_edit t f 1
+1757 2024-10-24 13:16:51.718189+00 management t t \N
+1756 2024-10-18 09:49:53.311021+00 direct_edit t f 1
+1761 2024-10-24 13:20:06.907445+00 management t t \N
+1760 2024-10-24 13:19:56.019943+00 direct_edit t t 1
+1759 2024-10-24 13:18:53.332804+00 direct_edit t f 1
+1758 2024-10-24 13:17:52.697184+00 direct_edit t f 1
+1766 2024-10-24 13:24:02.57539+00 management t t \N
+1765 2024-10-24 13:23:54.202272+00 direct_edit t t 1
+1764 2024-10-24 13:23:14.444768+00 direct_edit t f 1
+1763 2024-10-24 13:22:22.251781+00 direct_edit t t 1
+1762 2024-10-24 13:21:45.137678+00 direct_edit t t 1
+1773 2024-10-24 13:29:43.594563+00 management t t \N
+1772 2024-10-24 13:29:36.025806+00 direct_edit t f 1
+1771 2024-10-24 13:29:17.595969+00 direct_edit t f 1
+1770 2024-10-24 13:28:59.98065+00 direct_edit t f 1
+1769 2024-10-24 13:28:29.852193+00 direct_edit t f 1
+1768 2024-10-24 13:28:22.598123+00 direct_edit t f 1
+1767 2024-10-24 13:28:09.564467+00 direct_edit t f 1
+1820 2024-10-25 10:03:45.949335+00 management t t \N
+1819 2024-10-25 10:03:24.25572+00 direct_edit t f 1
+1818 2024-10-25 10:03:18.725972+00 direct_edit t t 1
+1817 2024-10-25 10:03:07.249371+00 direct_edit t f 1
+1816 2024-10-25 10:02:38.999621+00 direct_edit t f 1
+1815 2024-10-25 10:02:28.138342+00 direct_edit t f 1
+1814 2024-10-25 10:02:18.922037+00 direct_edit t f 1
+1813 2024-10-25 10:02:16.260526+00 direct_edit t f 1
+1812 2024-10-25 10:02:13.400114+00 direct_edit t f 1
+1811 2024-10-25 10:02:09.706571+00 direct_edit t f 1
+1810 2024-10-25 10:01:58.851573+00 direct_edit t f 1
+1809 2024-10-25 10:01:54.961302+00 direct_edit t f 1
+1808 2024-10-25 10:01:51.068408+00 direct_edit t f 1
+1807 2024-10-25 10:01:40.216588+00 direct_edit t f 1
+1806 2024-10-25 10:01:33.052438+00 direct_edit t f 1
+1805 2024-10-25 10:01:25.674626+00 direct_edit t f 1
+1804 2024-10-25 10:01:12.970707+00 direct_edit t t 1
+1803 2024-10-25 10:01:09.082121+00 direct_edit t t 1
+1802 2024-10-25 10:00:55.156445+00 direct_edit t f 1
+1801 2024-10-25 10:00:50.650989+00 direct_edit t f 1
+1800 2024-10-25 10:00:34.671144+00 direct_edit t f 1
+1799 2024-10-25 10:00:29.962403+00 direct_edit t f 1
+1798 2024-10-25 10:00:25.456775+00 direct_edit t f 1
+1797 2024-10-25 10:00:11.325123+00 direct_edit t f 1
+1796 2024-10-25 10:00:03.757279+00 direct_edit t f 1
+1795 2024-10-25 10:00:01.296026+00 direct_edit t f 1
+1794 2024-10-25 09:59:56.994033+00 direct_edit t f 1
+1793 2024-10-25 09:59:37.327769+00 direct_edit t f 1
+1792 2024-10-25 09:59:22.991846+00 direct_edit t f 1
+1791 2024-10-25 09:58:53.711551+00 direct_edit t f 1
+1790 2024-10-25 09:58:50.45456+00 direct_edit t f 1
+1789 2024-10-25 09:58:46.136691+00 direct_edit t f 1
+1788 2024-10-25 09:58:37.323695+00 direct_edit t f 1
+1787 2024-10-25 09:58:26.681188+00 direct_edit t f 1
+1786 2024-10-25 09:58:20.533115+00 direct_edit t f 1
+1785 2024-10-25 09:57:57.180209+00 direct_edit t t 1
+1784 2024-10-25 09:57:36.728002+00 direct_edit t t 1
+1783 2024-10-25 09:56:45.337499+00 direct_edit t t 1
+1782 2024-10-25 09:55:27.487324+00 direct_edit t t 1
+1781 2024-10-25 09:54:14.962113+00 direct_edit t t 1
+1780 2024-10-25 09:53:59.333346+00 direct_edit t t 1
+1779 2024-10-25 09:52:11.513594+00 direct_edit t t 1
+1778 2024-10-25 09:50:00.644331+00 direct_edit t t 1
+1777 2024-10-25 09:49:30.695085+00 direct_edit t t 1
+1776 2024-10-25 09:49:25.774557+00 direct_edit t t 1
+1775 2024-10-25 09:49:07.764364+00 direct_edit t t 1
+1774 2024-10-25 09:48:15.789307+00 direct_edit t t 1
+1821 2024-10-25 10:05:31.268637+00 direct_edit t t 1
+1823 2024-10-27 10:10:35.458945+00 changeset t f 1
+1824 2024-10-28 10:35:30.293755+00 changeset t t 1
+1826 2024-10-28 10:55:32.591081+00 changeset t f 1
+1822 2024-10-25 10:45:52.97078+00 management t t \N
+1825 2024-10-28 10:40:03.615804+00 changeset t t 1
+1827 2024-10-28 12:43:01.236283+00 management f t \N
+\.
+
+
+--
+-- Data for Name: mapdata_obstacle; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_obstacle (id, geometry, height, space_id, import_tag, altitude, group_id) FROM stdin;
+3 {"type": "Polygon", "coordinates": [[[269.82, 138.73], [269.75, 139.48], [271.81, 139.67], [271.85, 139.25], [270.21, 139.1], [270.24, 138.76], [269.82, 138.73]]]} 1.50 61 \N 0.00 \N
+1 {"type": "Polygon", "coordinates": [[[249.64, 133.38], [248.93, 133.31], [249.62, 125.73], [250.35, 125.79], [250.32, 126.22], [250.0, 126.19], [249.38, 132.93], [249.67, 132.96], [249.64, 133.38]]]} 1.50 61 \N 0.00 \N
+4 {"type": "Polygon", "coordinates": [[[252.6, 137.91], [252.66, 137.14], [253.08, 137.18], [253.05, 137.53], [257.98, 137.97], [258.02, 137.64], [258.43, 137.68], [258.37, 138.43], [252.6, 137.91]]]} 1.60 61 \N 0.00 \N
+\.
+
+
+--
+-- Data for Name: mapdata_obstaclegroup; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_obstaclegroup (id, titles, color, in_legend) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_poi; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_poi (locationslug_ptr_id, titles, can_search, can_describe, geometry, access_restriction_id, space_id, import_tag, icon, label_overrides, label_settings_id, external_url, import_block_data, import_block_geom) FROM stdin;
+73 {"en": "Main Entrance"} t t {"type": "Point", "coordinates": [241.75, 129.06]} \N 61 \N \N {} 2 \N f f
+74 {"en": "Car Entrance"} t t {"type": "Point", "coordinates": [394.5, 125.44]} \N 60 \N \N {} 2 \N f f
+128 {"en": "Restaurant Alumix"} t f {"type": "Point", "coordinates": [199.57, 114.91]} \N 127 \N \N {} \N \N f f
+145 {"en": "Car Park Payment Machine"} t f {"type": "Point", "coordinates": [284.69, 180.06]} \N 14 \N \N {} \N \N f f
+146 {"en": "Car Park Payment Machine"} t f {"type": "Point", "coordinates": [272.67, 141.97]} \N 97 \N \N {} \N \N f f
+147 {"en": "Car Park Payment Machine"} t f {"type": "Point", "coordinates": [274.29, 153.72]} \N 35 \N \N {} \N \N f f
+149 {"en": "ATM"} t f {"type": "Point", "coordinates": [272.33, 142.92]} \N 95 \N \N {} \N \N f f
+72 {"en": "Entrance (A2)"} t t {"type": "Point", "coordinates": [428.38, 200.0]} \N 61 \N \N {} 2 \N f f
+153 {"en": "Crane Hall BOF meetings"} t t {"type": "Point", "coordinates": [222.31, 217.56]} \N 36 \N \N {} 1 https://www.sfscon.it/tracks/crane-hall-bof-meetings-2024/ f f
+106 {"en": "Access to President's Office (NOI Board)"} t t {"type": "Point", "coordinates": [273.99, 200.93]} \N 105 \N \N {} \N \N f f
+\.
+
+
+--
+-- Data for Name: mapdata_poi_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_poi_groups (id, poi_id, locationgroup_id) FROM stdin;
+1 128 123
+2 145 144
+3 146 144
+4 147 144
+5 149 148
+\.
+
+
+--
+-- Data for Name: mapdata_position; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_position (id, name, secret, owner_id, coordinates_id, last_coordinates_update, timeout) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_ramp; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_ramp (id, geometry, space_id, import_tag) FROM stdin;
+4 {"type": "Polygon", "coordinates": [[[272.7, 181.71], [272.69, 185.46], [274.5, 185.46], [274.49, 181.71], [272.7, 181.71]]]} 20 \N
+3 {"type": "Polygon", "coordinates": [[[272.71, 201.56], [274.5, 201.56], [274.48, 192.1], [272.71, 192.1], [272.71, 201.56]]]} 20 \N
+2 {"type": "Polygon", "coordinates": [[[272.71, 204.02], [272.71, 211.63], [274.51, 211.63], [274.51, 204.02], [272.71, 204.02]]]} 20 \N
+1 {"type": "Polygon", "coordinates": [[[272.71, 223.13], [272.71, 213.55], [274.51, 213.55], [274.52, 223.13], [272.71, 223.13]]]} 20 \N
+7 {"type": "Polygon", "coordinates": [[[275.11, 219.93], [275.11, 205.42], [283.49, 205.42], [283.49, 219.95], [275.11, 219.93]]]} 33 \N
+8 {"type": "Polygon", "coordinates": [[[235.52, 203.75], [239.58, 203.75], [239.64, 211.51], [235.5, 211.5], [235.52, 203.75]]]} 58 \N
+\.
+
+
+--
+-- Data for Name: mapdata_rangingbeacon; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_rangingbeacon (id, import_tag, geometry, wifi_bssid, altitude, comment, space_id, bluetooth_address, ibeacon_major, ibeacon_minor, ibeacon_uuid, node_number, uwb_address) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_report; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_report (id, created, category, open, last_update, title, description, coordinates_id, origin_id, destination_id, route_options, titles, secret, assigned_to_id, author_id, location_id, import_tag) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_report_created_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_report_created_groups (id, report_id, locationgroup_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_reportupdate; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_reportupdate (id, datetime, open, comment, public, assigned_to_id, author_id, report_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_source; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_source (id, bottom, "left", top, "right", name, access_restriction_id) FROM stdin;
+2 92.00 139.00 264.73 462.13 CAMPUS-piano-1.svg \N
+3 143.11 262.78 222.44 375.05 A1-piano-2-rot_FLM-P.-2.svg \N
+4 176.92 195.00 256.25 307.27 A1-piano0-rot_FLM-A1.0.svg \N
+5 158.81 324.25 238.14 436.52 A2-piano0-rot_FLM-A2.0.svg \N
+6 158.81 326.22 238.14 438.49 A2-piano1-rot_FLM-A2.1.svg \N
+7 162.95 326.22 242.28 438.49 A2-piano2-rot_FLM-A2.2.svg \N
+8 51.99 144.42 332.66 541.43 campus-piano0-rot.svg \N
+9 109.45 239.45 157.05 306.81 FLM-A4.0-rot.svg \N
+10 177.63 196.81 256.97 309.08 FLM-A1.1-rot.svg \N
+11 179.12 197.87 258.45 310.14 FLM-A1.2-rot.svg \N
+\.
+
+
+--
+-- Data for Name: mapdata_space; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_space (locationslug_ptr_id, titles, can_search, can_describe, geometry, height, outside, enter_description_i18n, base_mapdata_accessible, access_restriction_id, level_id, import_tag, icon, label_overrides, label_settings_id, external_url, import_block_data, import_block_geom) FROM stdin;
+14 {"en": "Car Park Level -1"} t t {"type": "Polygon", "coordinates": [[[367.13, 158.06], [367.13, 180.44], [350.0, 180.44], [350.0, 183.19], [299.12, 183.19], [299.12, 180.56], [283.56, 180.56], [283.56, 183.31], [274.81, 183.31], [274.81, 179.37], [272.69, 179.37], [272.69, 173.12], [268.0, 173.12], [268.0, 156.12], [269.88, 156.12], [269.88, 153.37], [334.06, 153.37], [334.06, 158.0], [367.13, 158.06]]]} \N f {} f \N 10 carpark \N {} \N \N f f
+19 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[277.44, 206.32], [277.44, 209.11], [275.1, 209.11], [275.1, 206.31], [277.44, 206.32]]]} \N f {} f \N 10 \N \N {} \N \N f f
+31 {"en": "Main Lobby"} t t {"type": "Polygon", "coordinates": [[[300.46, 222.51], [300.46, 229.81], [283.53, 229.81], [283.53, 234.31], [272.73, 234.31], [272.73, 224.88], [271.92, 224.88], [271.96, 223.61], [272.75, 223.59], [272.73, 222.44], [300.46, 222.51]]]} \N f {} f \N 2 \N \N {} \N \N f f
+16 {"en": "Floor -1 WC Men (A1)"} t t {"type": "Polygon", "coordinates": [[[283.48, 204.37], [283.48, 209.09], [277.63, 209.09], [277.63, 204.33], [283.48, 204.37]]]} \N f {} f \N 10 \N \N {} \N \N f f
+17 {"en": "Floor -1 WC Women (A1)"} t t {"type": "Polygon", "coordinates": [[[283.41, 204.08], [277.65, 204.08], [277.65, 199.72], [283.42, 199.72], [283.41, 204.08]]]} \N f {} f \N 10 \N \N {} \N \N f f
+33 {"en": "Entrance (A1)"} t t {"type": "Polygon", "coordinates": [[[272.65, 222.5], [283.68, 222.6], [283.68, 194.29], [272.66, 194.29], [272.65, 222.5]]]} \N t {} f \N 2 \N \N {} 2 \N f f
+27 {"en": "Seminar 1"} t t {"type": "Polygon", "coordinates": [[[302.25, 223.03], [315.52, 223.03], [315.52, 199.75], [302.16, 199.75], [302.25, 223.03]]]} \N f {} f \N 10 \N \N {} \N \N f f
+25 {"en": "Seminar 4"} t t {"type": "Polygon", "coordinates": [[[280.54, 234.09], [275.09, 234.09], [275.09, 245.24], [280.56, 245.24], [280.54, 234.09]]]} \N f {} f \N 10 \N \N {} \N \N f f
+24 {"en": "Seminar 3"} t t {"type": "Polygon", "coordinates": [[[275.82, 223.08], [283.49, 223.08], [283.49, 209.71], [275.81, 209.71], [275.82, 223.08]]]} \N f {} f \N 10 \N \N {} \N \N f f
+26 {"en": "Seminar 2"} t t {"type": "Polygon", "coordinates": [[[302.23, 230.0], [315.52, 230.0], [315.52, 244.57], [302.23, 244.57], [302.23, 230.0]]]} \N f {} f \N 10 \N \N {} \N https://maps.noi.bz.it/en/?shared=A1--1-03&lang=en f f
+22 {"en": "Foyer"} t t {"type": "Polygon", "coordinates": [[[272.79, 223.14], [272.79, 234.0], [274.49, 234.0], [274.49, 233.84], [280.82, 233.84], [280.84, 240.05], [301.62, 240.06], [301.62, 229.84], [316.04, 229.84], [316.04, 223.15], [299.94, 223.15], [299.94, 222.57], [284.05, 222.57], [284.05, 223.1], [272.79, 223.14]]]} \N f {} f \N 10 \N \N {} \N \N f f
+42 {"en": "WC for Men"} t t {"type": "Polygon", "coordinates": [[[266.26, 229.52], [268.74, 229.52], [268.72, 225.16], [266.27, 225.17], [266.26, 229.52]]]} \N f {} f \N 2 \N \N {} \N \N f f
+43 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[280.8, 240.29], [280.8, 243.05], [283.45, 243.05], [283.45, 240.23], [280.8, 240.29]]]} \N f {} f \N 10 \N \N {} \N \N f f
+30 {"en": "Maker Space"} t t {"type": "Polygon", "coordinates": [[[259.45, 200.52], [240.04, 200.52], [240.04, 192.41], [259.42, 192.41], [259.45, 200.52]]]} \N f {} f \N 2 \N \N {} 1 \N f f
+29 {"en": "NOISE"} t t {"type": "Polygon", "coordinates": [[[249.11, 246.06], [249.11, 234.45], [300.43, 234.45], [300.43, 246.07], [249.11, 246.06]]]} \N f {} f \N 2 \N \N {} 1 \N f f
+44 {"en": "NOI Techpark InfoDesk"} t t {"type": "Polygon", "coordinates": [[[272.65, 225.14], [269.09, 225.14], [269.09, 229.5], [272.65, 229.5], [272.65, 225.14]]]} \N f {} f \N 2 \N \N {} \N \N f f
+47 {"en": "WC"} t t {"type": "Polygon", "coordinates": [[[344.15, 207.31], [352.44, 207.31], [352.44, 201.31], [345.35, 201.31], [345.35, 197.45], [343.69, 197.45], [343.69, 200.94], [344.15, 200.94], [344.15, 207.31]]]} \N f {} f \N 2 \N \N {} \N \N f f
+51 {"en": "Open Theather"} t t {"type": "Polygon", "coordinates": [[[284.04, 222.39], [284.04, 211.96], [301.6, 211.96], [301.6, 222.42], [284.04, 222.39]]]} \N t {} f \N 10 \N \N {} \N \N f f
+127 {"en": "Alumix entrance"} f f {"type": "Polygon", "coordinates": [[[198.82, 114.05], [198.77, 115.5], [200.53, 115.55], [200.48, 114.05], [198.82, 114.05]]]} \N f {} f \N 2 \N \N {} \N \N f f
+49 {"en": "Corridor"} f t {"type": "Polygon", "coordinates": [[[338.78, 201.23], [338.78, 190.63], [343.28, 190.63], [343.34, 190.87], [348.51, 190.87], [348.51, 188.95], [350.88, 188.95], [350.88, 195.59], [343.29, 195.59], [343.29, 201.25], [338.78, 201.23]]]} \N f {} f \N 2 \N \N {} 2 \N f f
+46 {"en": "Multimedia Center"} f t {"type": "Polygon", "coordinates": [[[342.82, 207.55], [343.83, 207.55], [343.83, 207.2], [360.03, 207.2], [360.03, 197.25], [338.99, 197.25], [338.99, 197.45], [338.62, 197.45], [338.62, 202.5], [342.78, 202.5], [342.78, 203.22], [343.57, 203.22], [343.57, 205.37], [342.83, 205.37], [342.82, 207.55]]]} \N f {} f \N 38 \N \N {} \N \N f f
+40 {"en": "WC for Men"} t t {"type": "Polygon", "coordinates": [[[267.12, 206.09], [267.11, 207.16], [266.89, 207.16], [266.9, 208.67], [270.3, 208.68], [270.3, 206.08], [267.12, 206.09]]]} \N f {} f \N 2 \N \N {} \N \N f f
+54 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[259.85, 226.99], [262.01, 226.99], [262.01, 225.12], [259.82, 225.12], [259.85, 226.99]]]} \N f {} f \N 2 \N \N {} \N \N f f
+55 {"en": "WC for Women"} t t {"type": "Polygon", "coordinates": [[[263.44, 229.52], [265.89, 229.52], [265.89, 225.16], [263.44, 225.16], [263.44, 229.52]]]} \N f {} f \N 2 \N \N {} \N \N f f
+56 {"en": "WC for Women"} t t {"type": "Polygon", "coordinates": [[[260.14, 208.71], [260.14, 206.1], [263.73, 206.1], [263.73, 207.11], [264.21, 207.11], [264.21, 208.69], [260.14, 208.71]]]} \N f {} f \N 2 \N \N {} \N \N f f
+57 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[264.39, 208.67], [264.39, 207.17], [266.72, 207.17], [266.72, 208.66], [264.39, 208.67]]]} \N f {} f \N 2 \N \N {} \N \N f f
+58 {"en": "Corridor"} f t {"type": "Polygon", "coordinates": [[[235.53, 211.57], [235.53, 203.44], [215.82, 203.44], [215.82, 201.25], [235.34, 201.25], [235.34, 198.92], [239.73, 198.92], [239.73, 201.23], [269.44, 201.23], [269.44, 203.47], [266.94, 203.47], [266.94, 206.91], [263.91, 206.91], [263.91, 203.39], [239.59, 203.39], [239.59, 211.59], [235.53, 211.57]]]} \N f {} f \N 2 \N \N {} \N \N f f
+134 {"en": "A2 - Stairs A"} f f {"type": "Polygon", "coordinates": [[[421.64, 207.7], [421.64, 201.35], [426.99, 201.35], [426.99, 207.72], [421.64, 207.7]]]} \N f {} f \N 2 \N \N {} \N \N f f
+36 {"en": "Crane Hall"} t t {"type": "Polygon", "coordinates": [[[272.22, 223.22], [272.22, 211.96], [205.64, 211.96], [205.64, 223.14], [272.22, 223.22]]]} \N f {} f \N 2 \N \N {} 1 \N f f
+59 {"en": "Corridor"} t t {"type": "Polygon", "coordinates": [[[267.32, 194.29], [268.93, 194.28], [268.92, 198.23], [270.36, 198.24], [270.36, 194.29], [270.58, 194.29], [270.62, 201.23], [269.47, 201.23], [269.46, 203.47], [270.63, 203.47], [270.66, 211.77], [272.37, 211.77], [272.37, 192.83], [267.32, 192.84], [267.32, 194.29]]]} \N f {} f \N 2 \N \N {} \N \N f f
+71 {"en": "Stairs D - Level -1 to 0"} t t {"type": "Polygon", "coordinates": [[[268.93, 198.23], [268.71, 198.23], [268.7, 195.86], [267.42, 195.86], [267.44, 199.29], [270.36, 199.3], [270.36, 194.09], [268.93, 194.09], [268.93, 198.23]]]} \N f {} f \N 11 \N \N {} \N \N f f
+60 {"en": "Car access"} t t {"type": "Polygon", "coordinates": [[[353.88, 157.08], [343.89, 157.08], [343.88, 151.12], [354.13, 151.04], [364.71, 151.88], [386.49, 153.69], [389.56, 123.88], [399.94, 124.9], [396.01, 161.16], [353.88, 157.08]]]} \N t {} f \N 2 \N \N {} \N \N f f
+52 {"en": "Corridor"} t t {"type": "Polygon", "coordinates": [[[270.54, 192.77], [267.23, 192.76], [267.23, 195.92], [268.71, 195.91], [268.7, 194.21], [268.95, 194.23], [268.94, 194.87], [270.32, 194.87], [270.33, 194.29], [270.57, 194.28], [270.55, 207.92], [272.15, 207.92], [272.15, 191.91], [272.36, 191.91], [272.36, 184.39], [270.52, 184.39], [270.54, 192.77]]]} \N f {} f \N 10 \N \N {} \N \N f f
+64 {"en": "Stairs B"} t t {"type": "Polygon", "coordinates": [[[338.21, 201.08], [338.21, 207.65], [343.99, 207.64], [343.99, 201.08], [338.21, 201.08]]]} \N f {} f \N 2 \N \N {} \N \N f f
+89 {"en": "WC for Men"} t t {"type": "Polygon", "coordinates": [[[277.11, 120.32], [277.53, 115.88], [280.1, 116.13], [279.71, 120.55], [277.11, 120.32]]]} \N f {} f \N 2 \N \N {} \N \N f f
+98 {"en": "Mezzanine"} f f {"type": "Polygon", "coordinates": [[[272.11, 138.78], [274.29, 138.99], [274.02, 141.39], [276.48, 141.61], [276.85, 137.9], [278.21, 137.99], [278.53, 134.67], [272.53, 134.17], [272.11, 138.78]]]} \N f {} f \N 10 \N \N {} \N \N f f
+101 {"en": "Stairs B - Level -1 to 0"} t t {"type": "Polygon", "coordinates": [[[266.97, 233.92], [272.74, 233.92], [272.73, 232.33], [268.76, 232.33], [268.77, 231.89], [272.73, 231.89], [272.73, 230.31], [266.97, 230.31], [266.97, 233.92]]]} \N f {} f \N 11 \N \N {} \N \N f f
+103 {"en": "Stairs B - Level 0 to 1"} f f {"type": "Polygon", "coordinates": [[[266.97, 233.92], [272.74, 233.92], [272.73, 232.33], [268.76, 232.33], [268.77, 231.89], [272.73, 231.89], [272.73, 230.31], [266.97, 230.31], [266.97, 233.92]]]} \N f {} f \N 85 \N \N {} \N \N f f
+78 {"en": "Stairs D - Level -2 to -1"} t t {"type": "Polygon", "coordinates": [[[268.93, 198.23], [268.7, 198.23], [268.7, 196.11], [267.42, 196.11], [267.44, 199.29], [270.36, 199.3], [270.36, 195.22], [268.93, 195.22], [268.93, 198.23]]]} \N f {} f \N 77 \N \N {} \N \N f f
+20 {"en": "Corridor Car Park - Foyer"} f t {"type": "Polygon", "coordinates": [[[274.5, 203.23], [275.11, 203.2], [275.12, 206.09], [277.41, 206.11], [277.41, 199.69], [275.08, 199.68], [275.07, 201.79], [274.49, 201.83], [274.46, 179.37], [272.72, 179.37], [272.72, 223.14], [274.51, 223.14], [274.5, 203.23]]]} \N f {} f \N 10 \N \N {} \N \N f f
+75 {"en": "Corridor"} t t {"type": "Polygon", "coordinates": [[[274.54, 179.59], [274.54, 189.16], [272.22, 189.16], [272.21, 205.58], [270.75, 205.58], [270.65, 183.96], [272.76, 183.96], [272.76, 179.58], [274.54, 179.59]]]} \N f {} f \N 34 \N \N {} \N \N f f
+79 {"en": "Stairs D - Level -2"} t t {"type": "Polygon", "coordinates": [[[267.38, 197.91], [268.69, 197.91], [268.71, 194.37], [270.37, 194.36], [270.37, 192.56], [267.36, 192.56], [267.38, 197.91]]]} \N f {} f \N 34 \N \N {} \N \N f f
+104 {"en": "Corridor"} f f {"type": "Polygon", "coordinates": [[[272.65, 233.99], [283.6, 233.99], [283.6, 230.01], [272.65, 230.01], [272.65, 233.99]]]} \N f {} f \N 37 \N \N {} \N \N f f
+92 {"en": "Corridor"} f f {"type": "Polygon", "coordinates": [[[272.34, 137.49], [273.65, 122.59], [275.72, 122.77], [275.97, 120.33], [278.29, 120.53], [278.08, 123.02], [280.09, 123.21], [278.73, 138.08], [272.34, 137.49]]]} \N f {} f \N 2 \N \N {} \N \N f f
+105 {"en": "Corridor"} f f {"type": "Polygon", "coordinates": [[[272.62, 233.99], [283.48, 233.99], [283.48, 229.98], [274.53, 229.98], [274.53, 222.42], [274.66, 222.42], [274.66, 212.02], [274.47, 212.02], [274.47, 199.25], [272.71, 199.25], [272.62, 233.99]]]} \N f {} f \N 38 \N \N {} \N \N f f
+107 {"en": "Stairs B"} f f {"type": "Polygon", "coordinates": [[[266.97, 233.92], [272.74, 233.92], [272.73, 232.33], [268.76, 232.33], [268.77, 231.89], [272.73, 231.89], [272.73, 230.31], [266.97, 230.31], [266.97, 233.92]]]} \N f {} f \N 82 \N \N {} \N \N f f
+102 {} f f {"type": "Polygon", "coordinates": [[[266.97, 233.94], [272.75, 233.94], [272.75, 230.34], [266.97, 230.34], [266.97, 233.94]]]} \N f {} f \N 38 \N \N {} \N \N f f
+35 {"en": "Car Park Level -2"} t t {"type": "Polygon", "coordinates": [[[367.13, 157.98], [367.13, 180.44], [350.0, 180.44], [350.0, 183.19], [299.12, 183.19], [299.12, 180.56], [283.56, 180.56], [283.56, 183.31], [274.81, 183.31], [274.81, 179.37], [272.69, 179.37], [272.69, 173.12], [268.0, 173.12], [268.0, 156.12], [269.88, 156.12], [269.88, 153.37], [334.06, 153.37], [334.06, 157.98], [367.13, 157.98]]]} \N f {} f \N 34 carpark \N {} \N \N f f
+32 {"en": "Corridor Main Lobby - Crane Hall"} f t {"type": "Polygon", "coordinates": [[[271.86, 224.91], [259.65, 224.91], [259.65, 223.58], [271.86, 223.58], [271.86, 224.91]]]} \N f {} f \N 2 \N \N {} \N \N f f
+93 {"en": "Noisteria Bar"} t t {"type": "Polygon", "coordinates": [[[272.35, 137.07], [251.29, 135.14], [252.34, 124.92], [252.79, 124.22], [253.29, 123.74], [253.85, 123.36], [254.68, 122.99], [264.98, 123.97], [265.19, 121.84], [273.66, 122.61], [272.35, 137.07]]]} \N f {} f \N 2 \N \N {} \N \N f f
+80 {"en": "Car Ramp"} t t {"type": "Polygon", "coordinates": [[[335.8, 155.2], [335.2, 156.29], [334.55, 157.98], [341.05, 157.98], [341.05, 157.78], [342.07, 157.07], [343.12, 156.77], [350.82, 156.73], [353.91, 157.02], [354.92, 157.34], [355.44, 157.62], [355.84, 157.94], [355.84, 158.02], [362.3, 158.03], [361.84, 156.82], [361.26, 155.68], [360.56, 154.73], [359.63, 153.73], [358.53, 152.9], [357.19, 152.16], [355.89, 151.67], [354.83, 151.42], [351.13, 151.08], [343.14, 151.06], [341.79, 151.23], [340.49, 151.57], [339.46, 152.06], [338.54, 152.56], [336.83, 153.94], [335.8, 155.2]]]} \N f {} f \N 77 \N \N {} \N \N f f
+81 {"en": "Car Ramp"} t t {"type": "Polygon", "coordinates": [[[335.8, 155.2], [335.2, 156.29], [334.55, 157.98], [341.05, 157.98], [341.05, 157.78], [342.07, 157.07], [343.12, 156.77], [350.82, 156.73], [353.91, 157.02], [364.32, 158.05], [364.86, 152.13], [354.29, 151.1], [351.13, 151.08], [343.15, 151.04], [341.79, 151.23], [340.49, 151.57], [339.46, 152.06], [338.54, 152.56], [336.83, 153.94], [335.8, 155.2]]]} \N f {} f \N 11 \N \N {} \N \N f f
+86 {"en": "Stairs B"} t t {"type": "Polygon", "coordinates": [[[338.52, 203.55], [339.8, 203.55], [339.8, 206.23], [342.86, 206.24], [342.86, 207.6], [338.52, 207.6], [338.52, 203.55]]]} \N f {} f \N 85 \N \N {} \N \N f f
+84 {"en": "A2 - Stairs B"} f f {"type": "Polygon", "coordinates": [[[338.21, 201.08], [338.21, 207.65], [343.99, 207.64], [343.99, 201.08], [338.21, 201.08]]]} \N f {} f \N 37 \N \N {} \N \N f f
+87 {"en": "Stairs B"} f f {"type": "Polygon", "coordinates": [[[338.62, 202.49], [338.62, 207.6], [342.8, 207.6], [342.8, 205.38], [343.57, 205.38], [343.57, 203.28], [342.82, 203.28], [342.82, 202.52], [338.62, 202.49]]]} \N f {} f \N 38 \N \N {} \N \N f f
+91 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[273.72, 122.27], [273.93, 120.14], [275.85, 120.31], [275.64, 122.43], [273.72, 122.27]]]} \N f {} f \N 2 \N \N {} \N \N f f
+90 {"en": "WC for Women"} t t {"type": "Polygon", "coordinates": [[[273.92, 120.01], [274.35, 115.6], [277.36, 115.87], [276.97, 120.3], [273.92, 120.01]]]} \N f {} f \N 2 \N \N {} \N \N f f
+109 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[283.95, 231.93], [283.95, 230.23], [285.79, 230.23], [285.79, 231.93], [283.95, 231.93]]]} \N f {} f \N 11 \N elevator {} \N \N f f
+97 {"en": "Corridor Car Park (A4)"} f f {"type": "Polygon", "coordinates": [[[268.01, 155.99], [267.97, 149.0], [271.18, 148.99], [271.9, 141.19], [276.49, 141.59], [276.35, 143.25], [273.93, 143.04], [273.21, 150.85], [270.11, 150.87], [270.12, 153.04], [269.81, 153.04], [269.81, 155.98], [268.01, 155.99]]]} \N f {} f \N 10 \N \N {} \N \N f f
+99 {"en": "Stairs"} t t {"type": "Polygon", "coordinates": [[[277.05, 137.98], [278.0, 138.08], [277.59, 142.39], [276.64, 142.29], [277.05, 137.98]]]} \N f {} f \N 11 \N \N {} \N \N f f
+114 {"en": "WC for Women"} t t {"type": "Polygon", "coordinates": [[[260.14, 208.71], [260.14, 206.1], [263.73, 206.1], [263.73, 207.11], [264.21, 207.11], [264.21, 208.69], [260.14, 208.71]]]} \N f {} f \N 38 \N \N {} \N \N f f
+115 {"en": "Barrier Free WC"} t t {"type": "Polygon", "coordinates": [[[264.39, 208.67], [264.39, 207.17], [266.72, 207.17], [266.72, 208.66], [264.39, 208.67]]]} \N f {} f \N 38 \N \N {} \N \N f f
+116 {"en": "WC for Men"} t t {"type": "Polygon", "coordinates": [[[267.12, 206.09], [267.11, 207.16], [266.89, 207.16], [266.9, 208.67], [270.3, 208.68], [270.3, 206.08], [267.12, 206.09]]]} \N f {} f \N 38 \N \N {} \N \N f f
+118 {"en": "Open Theather Steps"} t t {"type": "Polygon", "coordinates": [[[284.05, 212.09], [284.05, 194.38], [301.53, 194.38], [301.53, 212.09], [284.05, 212.09]]]} \N f {} f \N 11 \N \N {} \N \N f f
+117 {"en": "Corridor"} f f {"type": "Polygon", "coordinates": [[[263.85, 207.03], [263.82, 201.33], [270.54, 201.3], [270.54, 199.69], [272.73, 199.69], [272.73, 203.64], [272.43, 203.64], [272.43, 205.89], [270.62, 205.89], [270.62, 203.47], [266.91, 203.47], [266.91, 207.0], [263.85, 207.03]]]} \N f {} f \N 38 \N \N {} \N \N f f
+94 {"en": "Noisteria Restaurant"} t t {"type": "Polygon", "coordinates": [[[277.93, 143.73], [278.45, 138.26], [278.8, 138.32], [280.22, 123.24], [300.23, 125.07], [298.3, 145.79], [277.93, 143.73]]]} \N f {} f \N 2 \N \N {} \N \N f f
+95 {"en": "Entrance"} f f {"type": "Polygon", "coordinates": [[[277.46, 143.69], [271.82, 143.16], [271.97, 141.6], [274.01, 141.78], [274.22, 139.46], [272.17, 139.25], [272.35, 137.59], [274.34, 137.77], [276.8, 138.01], [276.39, 142.09], [276.65, 142.12], [277.04, 137.98], [278.01, 138.07], [277.46, 143.69]]]} \N f {} f \N 2 \N \N {} \N \N f f
+135 {"en": "A2 - Corridor West"} f f {"type": "Polygon", "coordinates": [[[414.02, 190.85], [414.03, 189.37], [411.87, 189.36], [411.81, 195.58], [421.62, 195.58], [421.63, 200.44], [421.91, 200.44], [421.91, 201.15], [426.57, 201.15], [426.56, 190.86], [414.02, 190.85]]]} \N f {} f \N 2 \N \N {} \N \N f f
+48 {"en": "WC"} t t {"type": "Polygon", "coordinates": [[[419.81, 201.18], [412.0, 201.22], [412.0, 207.34], [420.99, 207.34], [420.99, 201.31], [420.77, 201.31], [420.77, 200.51], [421.34, 200.51], [421.34, 197.36], [419.78, 197.36], [419.81, 201.18]]]} \N f {} f \N 2 \N \N {} \N \N f f
+83 {"en": "A2 - Stairs B Floor 1 to 2"} f f {"type": "Polygon", "coordinates": [[[338.52, 201.23], [342.83, 201.23], [342.83, 202.48], [339.8, 202.47], [339.8, 206.23], [342.88, 206.24], [342.88, 207.6], [338.52, 207.6], [338.52, 201.23]]]} \N f {} f \N 82 \N \N {} \N \N f f
+139 {"en": "A2 - Stairs A"} f f {"type": "Polygon", "coordinates": [[[422.85, 207.52], [422.82, 205.37], [422.08, 205.35], [422.1, 203.22], [422.8, 203.16], [422.86, 202.42], [427.08, 202.42], [427.08, 207.54], [422.85, 207.52]]]} \N f {} f \N 38 \N \N {} \N \N f f
+39 {"en": "Auditorium"} t t {"type": "Polygon", "coordinates": [[[403.54, 197.3], [403.68, 207.16], [422.38, 207.2], [422.38, 207.52], [422.85, 207.52], [422.82, 205.38], [422.08, 205.35], [422.1, 203.22], [422.8, 203.16], [422.86, 202.42], [427.08, 202.42], [427.08, 197.3], [403.54, 197.3]]]} \N f {} f \N 38 \N \N {} 1 \N f f
+136 {"en": "A2 - Stairs A Floor 0 to 1"} f f {"type": "Polygon", "coordinates": [[[425.75, 203.58], [425.75, 206.55], [423.63, 206.54], [423.63, 207.68], [426.91, 207.68], [426.91, 203.58], [425.75, 203.58]]]} \N f {} f \N 85 \N \N {} \N \N f f
+137 {"en": "A2 - Stairs A"} f f {"type": "Polygon", "coordinates": [[[421.64, 207.7], [421.64, 201.35], [426.99, 201.35], [426.99, 207.72], [421.64, 207.7]]]} \N f {} f \N 37 \N \N {} \N \N f f
+138 {"en": "A2 - Stairs A Floor 1 to 2"} t t {"type": "Polygon", "coordinates": [[[426.91, 207.68], [422.6, 207.68], [422.6, 206.43], [425.63, 206.44], [425.63, 202.68], [422.57, 202.67], [422.57, 201.31], [426.91, 201.31], [426.91, 207.68]]]} \N f {} f \N 82 \N \N {} \N \N f f
+5 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[283.95, 231.93], [283.95, 230.23], [285.79, 230.23], [285.79, 231.93], [283.95, 231.93]]]} \N f {} f \N 85 \N elevator {} \N \N f f
+4 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0], [285.79, 234.0]]]} \N f {} f \N 85 \N elevator {} \N \N f f
+41 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[267.26, 205.83], [267.26, 203.71], [270.4, 203.71], [270.4, 205.8], [267.26, 205.83]]]} \N f {} f \N 2 \N elevator {} \N \N f f
+50 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[346.42, 190.69], [346.42, 188.99], [348.27, 188.99], [348.27, 190.69], [346.42, 190.69]]]} \N f {} f \N 85 \N elevator {} \N \N f f
+100 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[272.01, 140.98], [272.17, 139.27], [273.94, 139.44], [273.77, 141.14], [272.01, 140.98]]]} \N f {} f \N 11 \N elevator {} \N \N f f
+96 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[272.01, 141.37], [272.17, 139.5], [273.93, 139.67], [273.77, 141.54], [272.01, 141.37]]]} \N f {} f \N 2 \N elevator {} \N \N f f
+110 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0], [285.79, 234.0]]]} \N f {} f \N 82 \N elevator {} \N \N f f
+108 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0], [285.79, 234.0]]]} \N f {} f \N 11 \N elevator {} \N \N f f
+76 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[267.36, 205.58], [270.36, 205.58], [270.36, 203.59], [267.36, 203.59], [267.36, 205.58]]]} \N f {} f \N 77 \N elevator {} \N \N f f
+88 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[346.42, 190.69], [346.42, 188.99], [348.27, 188.99], [348.27, 190.69], [346.42, 190.69]]]} \N f {} f \N 38 \N elevator {} \N \N f f
+111 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[283.95, 231.93], [283.95, 230.23], [285.79, 230.23], [285.79, 231.93], [283.95, 231.93]]]} \N f {} f \N 82 \N elevator {} \N \N f f
+113 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[283.95, 231.93], [283.95, 230.23], [285.79, 230.23], [285.79, 231.93], [283.95, 231.93]]]} \N f {} f \N 38 \N elevator {} \N \N f f
+112 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[285.79, 234.0], [285.79, 232.3], [283.95, 232.3], [283.95, 234.0], [285.79, 234.0]]]} \N f {} f \N 38 \N elevator {} \N \N f f
+142 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[267.36, 205.58], [270.36, 205.58], [270.36, 203.59], [267.36, 203.59], [267.36, 205.58]]]} \N f {} f \N 11 \N elevator {} \N \N f f
+61 {"en": "Piazza"} t t {"type": "Polygon", "coordinates": [[[271.2, 143.67], [271.9, 138.0], [250.26, 135.96], [250.89, 129.75], [231.46, 127.99], [231.31, 139.99], [229.09, 144.68], [225.1, 149.11], [218.76, 151.9], [210.52, 151.46], [210.71, 194.43], [302.38, 194.13], [302.41, 200.83], [338.25, 200.75], [338.25, 185.5], [352.38, 185.5], [352.38, 180.37], [422.1, 180.52], [422.1, 184.79], [427.34, 184.8], [427.5, 201.0], [440.17, 201.0], [440.19, 164.3], [353.88, 157.25], [343.62, 157.25], [343.62, 150.0], [298.72, 146.28], [271.2, 143.67]]]} \N t {} f \N 2 \N \N {} \N \N f f
+150 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[411.86, 189.21], [411.86, 186.02], [414.01, 186.02], [414.01, 189.21], [411.86, 189.21]]]} \N f {} f \N 2 \N \N {} \N \N f f
+151 {"en": "Elevator"} t f {"type": "Polygon", "coordinates": [[[411.86, 189.21], [411.86, 186.02], [414.01, 186.02], [414.01, 189.21], [411.86, 189.21]]]} \N f {} f \N 38 \N \N {} \N \N f f
+45 {"en": "Corridor"} t t {"type": "Polygon", "coordinates": [[[422.17, 197.1], [426.54, 197.11], [426.53, 195.42], [427.24, 195.42], [427.24, 190.83], [414.01, 190.8], [414.01, 189.46], [411.87, 189.46], [411.87, 190.78], [350.56, 190.78], [350.58, 189.04], [348.54, 189.04], [348.54, 190.64], [349.83, 190.64], [349.83, 190.78], [339.26, 190.78], [339.29, 197.11], [343.46, 197.11], [343.48, 195.47], [422.14, 195.49], [422.17, 197.1]]]} \N f {} f \N 38 \N \N {} \N \N f f
+\.
+
+
+--
+-- Data for Name: mapdata_space_groups; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_space_groups (id, space_id, locationgroup_id) FROM stdin;
+1 4 3
+2 5 3
+3 14 13
+4 16 9
+5 16 7
+6 17 8
+7 17 9
+8 19 9
+9 19 18
+10 22 21
+11 24 23
+12 25 23
+13 26 23
+15 29 28
+16 30 28
+17 35 13
+18 39 23
+19 40 9
+20 40 7
+21 41 3
+22 42 9
+23 42 7
+24 43 9
+25 43 18
+27 27 23
+28 47 8
+29 47 9
+30 47 18
+31 47 7
+32 48 8
+33 48 9
+34 48 18
+35 48 7
+36 50 3
+38 54 9
+39 54 18
+40 55 8
+41 55 9
+42 56 8
+43 56 9
+44 57 9
+45 57 18
+14 89 7
+26 90 9
+37 89 9
+46 91 9
+47 91 18
+48 90 8
+49 100 3
+50 109 3
+51 108 3
+52 110 3
+53 111 3
+54 112 3
+55 113 3
+56 114 8
+57 114 9
+58 115 9
+59 115 18
+60 116 9
+61 116 7
+62 94 123
+63 93 123
+64 36 21
+65 27 21
+66 26 21
+67 25 21
+68 24 21
+69 39 21
+70 142 3
+71 76 3
+73 150 3
+74 151 3
+75 88 3
+\.
+
+
+--
+-- Data for Name: mapdata_stair; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_stair (id, geometry, space_id, import_tag) FROM stdin;
+108 {"type": "LineString", "coordinates": [[267.2, 198.2], [268.73, 198.2]]} 71 \N
+109 {"type": "LineString", "coordinates": [[267.2, 197.9], [268.73, 197.9]]} 71 \N
+12 {"type": "LineString", "coordinates": [[267.4, 197], [268.73, 197]]} 78 \N
+13 {"type": "LineString", "coordinates": [[267.4, 197.3], [268.73, 197.3]]} 78 \N
+110 {"type": "LineString", "coordinates": [[267.2, 197.6], [268.73, 197.6]]} 71 \N
+14 {"type": "LineString", "coordinates": [[267.4, 197.6], [268.73, 197.6]]} 78 \N
+111 {"type": "LineString", "coordinates": [[267.2, 197.3], [268.73, 197.3]]} 71 \N
+112 {"type": "LineString", "coordinates": [[267.2, 197], [268.73, 197]]} 71 \N
+113 {"type": "LineString", "coordinates": [[267.2, 196.7], [268.73, 196.7]]} 71 \N
+114 {"type": "LineString", "coordinates": [[267.2, 196.4], [268.73, 196.4]]} 71 \N
+15 {"type": "LineString", "coordinates": [[267.4, 197.9], [268.73, 197.9]]} 78 \N
+115 {"type": "LineString", "coordinates": [[267.2, 196.1], [268.73, 196.1]]} 71 \N
+121 {"type": "LineString", "coordinates": [[268.93, 198.2], [270.38, 198.2]]} 78 \N
+122 {"type": "LineString", "coordinates": [[268.93, 197.9], [270.38, 197.9]]} 78 \N
+123 {"type": "LineString", "coordinates": [[268.93, 197.6], [270.38, 197.6]]} 78 \N
+124 {"type": "LineString", "coordinates": [[268.93, 197.3], [270.38, 197.3]]} 78 \N
+125 {"type": "LineString", "coordinates": [[268.93, 197], [270.38, 197]]} 78 \N
+10 {"type": "LineString", "coordinates": [[267.4, 196.4], [268.73, 196.4]]} 78 \N
+11 {"type": "LineString", "coordinates": [[267.4, 196.7], [268.73, 196.7]]} 78 \N
+126 {"type": "LineString", "coordinates": [[268.93, 196.7], [270.38, 196.7]]} 78 \N
+127 {"type": "LineString", "coordinates": [[268.93, 196.4], [270.38, 196.4]]} 78 \N
+128 {"type": "LineString", "coordinates": [[268.93, 196.1], [270.38, 196.1]]} 78 \N
+129 {"type": "LineString", "coordinates": [[268.93, 195.8], [270.38, 195.8]]} 78 \N
+130 {"type": "LineString", "coordinates": [[268.93, 195.5], [270.38, 195.5]]} 78 \N
+215 {"type": "LineString", "coordinates": [[276.88, 139.57], [277.86, 139.66]]} 99 \N
+167 {"type": "LineString", "coordinates": [[342.12, 207.62], [342.12, 206.19]]} 83 \N
+168 {"type": "LineString", "coordinates": [[342.43, 207.62], [342.43, 206.19]]} 83 \N
+169 {"type": "LineString", "coordinates": [[342.75, 207.62], [342.75, 206.19]]} 83 \N
+199 {"type": "LineString", "coordinates": [[274.02, 141.24], [276.51, 141.47]]} 98 \N
+201 {"type": "LineString", "coordinates": [[274.08, 140.68], [276.57, 140.91]]} 98 \N
+203 {"type": "LineString", "coordinates": [[274.14, 140.12], [276.62, 140.35]]} 98 \N
+205 {"type": "LineString", "coordinates": [[274.19, 139.55], [276.68, 139.78]]} 98 \N
+207 {"type": "LineString", "coordinates": [[274.24, 138.99], [276.74, 139.22]]} 98 \N
+209 {"type": "LineString", "coordinates": [[276.68, 141.73], [277.67, 141.82]]} 99 \N
+211 {"type": "LineString", "coordinates": [[276.74, 141.18], [277.71, 141.28]]} 99 \N
+213 {"type": "LineString", "coordinates": [[276.78, 140.65], [277.76, 140.74]]} 99 \N
+217 {"type": "LineString", "coordinates": [[276.93, 139.03], [277.92, 139.12]]} 99 \N
+219 {"type": "LineString", "coordinates": [[276.99, 138.49], [277.96, 138.59]]} 99 \N
+226 {"type": "LineString", "coordinates": [[258.39, 137.74], [269.85, 138.8]]} 61 \N
+195 {"type": "LineString", "coordinates": [[274.09, 140.47], [276.56, 140.7]]} 95 \N
+2 {"type": "LineString", "coordinates": [[272.64, 207.92], [274.61, 207.93]]} 33 \N
+1 {"type": "LineString", "coordinates": [[274.58, 211.98], [272.63, 211.99]]} 33 \N
+197 {"type": "LineString", "coordinates": [[274.04, 141.01], [276.51, 141.24]]} 95 \N
+200 {"type": "LineString", "coordinates": [[274.05, 140.96], [276.54, 141.19]]} 98 \N
+174 {"type": "LineString", "coordinates": [[338.5, 203.83], [339.83, 203.83]]} 86 \N
+175 {"type": "LineString", "coordinates": [[338.5, 204.12], [339.83, 204.12]]} 86 \N
+176 {"type": "LineString", "coordinates": [[338.5, 204.41], [339.83, 204.41]]} 86 \N
+177 {"type": "LineString", "coordinates": [[338.5, 204.69], [339.83, 204.69]]} 86 \N
+178 {"type": "LineString", "coordinates": [[338.5, 204.98], [339.83, 204.98]]} 86 \N
+179 {"type": "LineString", "coordinates": [[338.5, 205.27], [339.83, 205.27]]} 86 \N
+180 {"type": "LineString", "coordinates": [[338.5, 205.56], [339.83, 205.56]]} 86 \N
+181 {"type": "LineString", "coordinates": [[338.5, 205.84], [339.83, 205.84]]} 86 \N
+182 {"type": "LineString", "coordinates": [[338.5, 206.13], [339.83, 206.13]]} 86 \N
+183 {"type": "LineString", "coordinates": [[339.9, 207.62], [339.9, 206.19]]} 86 \N
+184 {"type": "LineString", "coordinates": [[340.22, 207.62], [340.22, 206.19]]} 86 \N
+185 {"type": "LineString", "coordinates": [[340.53, 207.62], [340.53, 206.19]]} 86 \N
+186 {"type": "LineString", "coordinates": [[340.85, 207.62], [340.85, 206.19]]} 86 \N
+187 {"type": "LineString", "coordinates": [[341.17, 207.62], [341.17, 206.19]]} 86 \N
+188 {"type": "LineString", "coordinates": [[341.48, 207.62], [341.48, 206.19]]} 86 \N
+189 {"type": "LineString", "coordinates": [[341.8, 207.62], [341.8, 206.19]]} 86 \N
+190 {"type": "LineString", "coordinates": [[342.12, 207.62], [342.12, 206.19]]} 86 \N
+191 {"type": "LineString", "coordinates": [[342.43, 207.62], [342.43, 206.19]]} 86 \N
+192 {"type": "LineString", "coordinates": [[342.75, 207.62], [342.75, 206.19]]} 86 \N
+202 {"type": "LineString", "coordinates": [[274.1, 140.4], [276.59, 140.63]]} 98 \N
+204 {"type": "LineString", "coordinates": [[274.16, 139.83], [276.65, 140.06]]} 98 \N
+206 {"type": "LineString", "coordinates": [[274.23, 139.27], [276.71, 139.5]]} 98 \N
+208 {"type": "LineString", "coordinates": [[276.66, 142.0], [277.64, 142.09]]} 99 \N
+210 {"type": "LineString", "coordinates": [[276.71, 141.46], [277.69, 141.55]]} 99 \N
+212 {"type": "LineString", "coordinates": [[276.76, 140.92], [277.75, 141.02]]} 99 \N
+214 {"type": "LineString", "coordinates": [[276.85, 139.85], [277.86, 139.94]]} 99 \N
+216 {"type": "LineString", "coordinates": [[276.91, 139.3], [277.89, 139.39]]} 99 \N
+218 {"type": "LineString", "coordinates": [[276.96, 138.77], [277.94, 138.86]]} 99 \N
+225 {"type": "LineString", "coordinates": [[249.58, 133.34], [249.25, 136.9], [252.69, 137.21]]} 61 \N
+227 {"type": "LineString", "coordinates": [[258.38, 138.01], [269.85, 139.08]]} 61 \N
+228 {"type": "LineString", "coordinates": [[258.34, 138.29], [269.88, 139.34]]} 61 \N
+229 {"type": "LineString", "coordinates": [[258.05, 138.37], [258.04, 138.53], [269.97, 139.65], [269.99, 139.43]]} 61 \N
+230 {"type": "LineString", "coordinates": [[270.27, 139.44], [270.22, 139.92], [257.73, 138.78], [257.77, 138.34]]} 61 \N
+231 {"type": "LineString", "coordinates": [[257.51, 138.32], [257.45, 139.03], [270.48, 140.23], [270.54, 139.49]]} 61 \N
+193 {"type": "LineString", "coordinates": [[274.09, 139.92], [276.64, 140.15]]} 95 \N
+194 {"type": "LineString", "coordinates": [[274.11, 140.19], [276.6, 140.42]]} 95 \N
+196 {"type": "LineString", "coordinates": [[274.07, 140.74], [276.54, 140.97]]} 95 \N
+198 {"type": "LineString", "coordinates": [[274.02, 141.28], [276.46, 141.51]]} 95 \N
+94 {"type": "LineString", "coordinates": [[268.93, 198.2], [270.38, 198.2]]} 71 \N
+95 {"type": "LineString", "coordinates": [[268.93, 197.9], [270.38, 197.9]]} 71 \N
+96 {"type": "LineString", "coordinates": [[268.93, 197.6], [270.38, 197.6]]} 71 \N
+97 {"type": "LineString", "coordinates": [[268.93, 197.3], [270.38, 197.3]]} 71 \N
+98 {"type": "LineString", "coordinates": [[268.93, 197], [270.38, 197]]} 71 \N
+99 {"type": "LineString", "coordinates": [[268.93, 196.7], [270.38, 196.7]]} 71 \N
+100 {"type": "LineString", "coordinates": [[268.93, 196.4], [270.38, 196.4]]} 71 \N
+101 {"type": "LineString", "coordinates": [[268.93, 196.1], [270.38, 196.1]]} 71 \N
+102 {"type": "LineString", "coordinates": [[268.93, 195.8], [270.38, 195.8]]} 71 \N
+103 {"type": "LineString", "coordinates": [[268.93, 195.5], [270.38, 195.5]]} 71 \N
+104 {"type": "LineString", "coordinates": [[268.93, 195.2], [270.38, 195.2]]} 71 \N
+105 {"type": "LineString", "coordinates": [[268.93, 194.9], [270.38, 194.9]]} 71 \N
+106 {"type": "LineString", "coordinates": [[268.93, 194.6], [270.38, 194.6]]} 71 \N
+107 {"type": "LineString", "coordinates": [[268.93, 194.3], [270.38, 194.3]]} 71 \N
+138 {"type": "LineString", "coordinates": [[342.64, 202.49], [342.64, 201.22]]} 83 \N
+139 {"type": "LineString", "coordinates": [[342.35, 202.49], [342.35, 201.22]]} 83 \N
+140 {"type": "LineString", "coordinates": [[342.06, 202.49], [342.06, 201.22]]} 83 \N
+141 {"type": "LineString", "coordinates": [[341.77, 202.49], [341.77, 201.22]]} 83 \N
+142 {"type": "LineString", "coordinates": [[341.48, 202.49], [341.48, 201.22]]} 83 \N
+143 {"type": "LineString", "coordinates": [[341.18, 202.49], [341.18, 201.22]]} 83 \N
+144 {"type": "LineString", "coordinates": [[340.89, 202.49], [340.89, 201.22]]} 83 \N
+145 {"type": "LineString", "coordinates": [[340.6, 202.49], [340.6, 201.22]]} 83 \N
+146 {"type": "LineString", "coordinates": [[340.31, 202.49], [340.31, 201.22]]} 83 \N
+147 {"type": "LineString", "coordinates": [[338.5, 202.68], [339.83, 202.68]]} 83 \N
+148 {"type": "LineString", "coordinates": [[338.5, 202.97], [339.83, 202.97]]} 83 \N
+149 {"type": "LineString", "coordinates": [[338.5, 203.26], [339.83, 203.26]]} 83 \N
+150 {"type": "LineString", "coordinates": [[338.5, 203.54], [339.83, 203.54]]} 83 \N
+151 {"type": "LineString", "coordinates": [[338.5, 203.83], [339.83, 203.83]]} 83 \N
+152 {"type": "LineString", "coordinates": [[338.5, 204.12], [339.83, 204.12]]} 83 \N
+153 {"type": "LineString", "coordinates": [[338.5, 204.41], [339.83, 204.41]]} 83 \N
+154 {"type": "LineString", "coordinates": [[338.5, 204.69], [339.83, 204.69]]} 83 \N
+155 {"type": "LineString", "coordinates": [[338.5, 204.98], [339.83, 204.98]]} 83 \N
+156 {"type": "LineString", "coordinates": [[338.5, 205.27], [339.83, 205.27]]} 83 \N
+157 {"type": "LineString", "coordinates": [[338.5, 205.56], [339.83, 205.56]]} 83 \N
+158 {"type": "LineString", "coordinates": [[338.5, 205.84], [339.83, 205.84]]} 83 \N
+159 {"type": "LineString", "coordinates": [[338.5, 206.13], [339.83, 206.13]]} 83 \N
+160 {"type": "LineString", "coordinates": [[339.9, 207.62], [339.9, 206.19]]} 83 \N
+161 {"type": "LineString", "coordinates": [[340.22, 207.62], [340.22, 206.19]]} 83 \N
+162 {"type": "LineString", "coordinates": [[340.53, 207.62], [340.53, 206.19]]} 83 \N
+163 {"type": "LineString", "coordinates": [[340.85, 207.62], [340.85, 206.19]]} 83 \N
+164 {"type": "LineString", "coordinates": [[341.17, 207.62], [341.17, 206.19]]} 83 \N
+165 {"type": "LineString", "coordinates": [[341.48, 207.62], [341.48, 206.19]]} 83 \N
+166 {"type": "LineString", "coordinates": [[341.8, 207.62], [341.8, 206.19]]} 83 \N
+232 {"type": "LineString", "coordinates": [[272.63, 211.71], [274.58, 211.71]]} 33 \N
+233 {"type": "LineString", "coordinates": [[272.64, 211.43], [274.56, 211.43]]} 33 \N
+234 {"type": "LineString", "coordinates": [[272.64, 207.65], [274.59, 207.65]]} 33 \N
+235 {"type": "LineString", "coordinates": [[272.64, 207.36], [274.59, 207.36]]} 33 \N
+240 {"type": "LineString", "coordinates": [[269.03, 231.92], [269.03, 230.29]]} 101 \N
+241 {"type": "LineString", "coordinates": [[269.31, 231.92], [269.31, 230.29]]} 101 \N
+242 {"type": "LineString", "coordinates": [[269.59, 231.92], [269.59, 230.29]]} 101 \N
+243 {"type": "LineString", "coordinates": [[269.87, 231.92], [269.87, 230.29]]} 101 \N
+244 {"type": "LineString", "coordinates": [[270.15, 231.92], [270.15, 230.29]]} 101 \N
+245 {"type": "LineString", "coordinates": [[270.43, 231.92], [270.43, 230.29]]} 101 \N
+246 {"type": "LineString", "coordinates": [[270.71, 231.92], [270.71, 230.29]]} 101 \N
+247 {"type": "LineString", "coordinates": [[270.99, 231.92], [270.99, 230.29]]} 101 \N
+248 {"type": "LineString", "coordinates": [[271.27, 231.92], [271.27, 230.29]]} 101 \N
+249 {"type": "LineString", "coordinates": [[271.55, 231.92], [271.55, 230.29]]} 101 \N
+250 {"type": "LineString", "coordinates": [[271.83, 231.92], [271.83, 230.29]]} 101 \N
+251 {"type": "LineString", "coordinates": [[272.11, 231.92], [272.11, 230.29]]} 101 \N
+252 {"type": "LineString", "coordinates": [[272.39, 231.92], [272.39, 230.29]]} 101 \N
+253 {"type": "LineString", "coordinates": [[269.03, 233.94], [269.03, 232.3]]} 101 \N
+254 {"type": "LineString", "coordinates": [[269.31, 233.94], [269.31, 232.3]]} 101 \N
+255 {"type": "LineString", "coordinates": [[269.59, 233.94], [269.59, 232.3]]} 101 \N
+256 {"type": "LineString", "coordinates": [[269.87, 233.94], [269.87, 232.3]]} 101 \N
+257 {"type": "LineString", "coordinates": [[270.15, 233.94], [270.15, 232.3]]} 101 \N
+258 {"type": "LineString", "coordinates": [[270.43, 233.94], [270.43, 232.3]]} 101 \N
+259 {"type": "LineString", "coordinates": [[270.71, 233.94], [270.71, 232.3]]} 101 \N
+260 {"type": "LineString", "coordinates": [[270.99, 233.94], [270.99, 232.3]]} 101 \N
+261 {"type": "LineString", "coordinates": [[271.27, 233.94], [271.27, 232.3]]} 101 \N
+262 {"type": "LineString", "coordinates": [[271.55, 233.94], [271.55, 232.3]]} 101 \N
+263 {"type": "LineString", "coordinates": [[271.83, 233.94], [271.83, 232.3]]} 101 \N
+264 {"type": "LineString", "coordinates": [[272.11, 233.94], [272.11, 232.3]]} 101 \N
+265 {"type": "LineString", "coordinates": [[272.39, 233.94], [272.39, 232.3]]} 101 \N
+266 {"type": "LineString", "coordinates": [[272.67, 233.94], [272.67, 232.3]]} 101 \N
+267 {"type": "LineString", "coordinates": [[269.03, 231.92], [269.03, 230.29]]} 103 \N
+268 {"type": "LineString", "coordinates": [[269.31, 231.92], [269.31, 230.29]]} 103 \N
+269 {"type": "LineString", "coordinates": [[269.59, 231.92], [269.59, 230.29]]} 103 \N
+270 {"type": "LineString", "coordinates": [[269.87, 231.92], [269.87, 230.29]]} 103 \N
+271 {"type": "LineString", "coordinates": [[270.15, 231.92], [270.15, 230.29]]} 103 \N
+272 {"type": "LineString", "coordinates": [[270.43, 231.92], [270.43, 230.29]]} 103 \N
+273 {"type": "LineString", "coordinates": [[270.71, 231.92], [270.71, 230.29]]} 103 \N
+274 {"type": "LineString", "coordinates": [[270.99, 231.92], [270.99, 230.29]]} 103 \N
+275 {"type": "LineString", "coordinates": [[271.27, 231.92], [271.27, 230.29]]} 103 \N
+276 {"type": "LineString", "coordinates": [[271.55, 231.92], [271.55, 230.29]]} 103 \N
+277 {"type": "LineString", "coordinates": [[271.83, 231.92], [271.83, 230.29]]} 103 \N
+278 {"type": "LineString", "coordinates": [[272.11, 231.92], [272.11, 230.29]]} 103 \N
+279 {"type": "LineString", "coordinates": [[272.39, 231.92], [272.39, 230.29]]} 103 \N
+280 {"type": "LineString", "coordinates": [[269.03, 233.94], [269.03, 232.3]]} 103 \N
+281 {"type": "LineString", "coordinates": [[269.31, 233.94], [269.31, 232.3]]} 103 \N
+282 {"type": "LineString", "coordinates": [[269.59, 233.94], [269.59, 232.3]]} 103 \N
+283 {"type": "LineString", "coordinates": [[269.87, 233.94], [269.87, 232.3]]} 103 \N
+284 {"type": "LineString", "coordinates": [[270.15, 233.94], [270.15, 232.3]]} 103 \N
+285 {"type": "LineString", "coordinates": [[270.43, 233.94], [270.43, 232.3]]} 103 \N
+286 {"type": "LineString", "coordinates": [[270.71, 233.94], [270.71, 232.3]]} 103 \N
+287 {"type": "LineString", "coordinates": [[270.99, 233.94], [270.99, 232.3]]} 103 \N
+288 {"type": "LineString", "coordinates": [[271.27, 233.94], [271.27, 232.3]]} 103 \N
+289 {"type": "LineString", "coordinates": [[271.55, 233.94], [271.55, 232.3]]} 103 \N
+290 {"type": "LineString", "coordinates": [[271.83, 233.94], [271.83, 232.3]]} 103 \N
+291 {"type": "LineString", "coordinates": [[272.11, 233.94], [272.11, 232.3]]} 103 \N
+292 {"type": "LineString", "coordinates": [[272.39, 233.94], [272.39, 232.3]]} 103 \N
+293 {"type": "LineString", "coordinates": [[272.67, 233.94], [272.67, 232.3]]} 103 \N
+294 {"type": "LineString", "coordinates": [[269.03, 231.92], [269.03, 230.29]]} 107 \N
+295 {"type": "LineString", "coordinates": [[269.31, 231.92], [269.31, 230.29]]} 107 \N
+296 {"type": "LineString", "coordinates": [[269.59, 231.92], [269.59, 230.29]]} 107 \N
+297 {"type": "LineString", "coordinates": [[269.87, 231.92], [269.87, 230.29]]} 107 \N
+298 {"type": "LineString", "coordinates": [[270.15, 231.92], [270.15, 230.29]]} 107 \N
+299 {"type": "LineString", "coordinates": [[270.43, 231.92], [270.43, 230.29]]} 107 \N
+300 {"type": "LineString", "coordinates": [[270.71, 231.92], [270.71, 230.29]]} 107 \N
+301 {"type": "LineString", "coordinates": [[270.99, 231.92], [270.99, 230.29]]} 107 \N
+302 {"type": "LineString", "coordinates": [[271.27, 231.92], [271.27, 230.29]]} 107 \N
+303 {"type": "LineString", "coordinates": [[271.55, 231.92], [271.55, 230.29]]} 107 \N
+304 {"type": "LineString", "coordinates": [[271.83, 231.92], [271.83, 230.29]]} 107 \N
+305 {"type": "LineString", "coordinates": [[272.11, 231.92], [272.11, 230.29]]} 107 \N
+306 {"type": "LineString", "coordinates": [[272.39, 231.92], [272.39, 230.29]]} 107 \N
+307 {"type": "LineString", "coordinates": [[269.03, 233.94], [269.03, 232.3]]} 107 \N
+308 {"type": "LineString", "coordinates": [[269.31, 233.94], [269.31, 232.3]]} 107 \N
+309 {"type": "LineString", "coordinates": [[269.59, 233.94], [269.59, 232.3]]} 107 \N
+310 {"type": "LineString", "coordinates": [[269.87, 233.94], [269.87, 232.3]]} 107 \N
+311 {"type": "LineString", "coordinates": [[270.15, 233.94], [270.15, 232.3]]} 107 \N
+312 {"type": "LineString", "coordinates": [[270.43, 233.94], [270.43, 232.3]]} 107 \N
+313 {"type": "LineString", "coordinates": [[270.71, 233.94], [270.71, 232.3]]} 107 \N
+314 {"type": "LineString", "coordinates": [[270.99, 233.94], [270.99, 232.3]]} 107 \N
+315 {"type": "LineString", "coordinates": [[271.27, 233.94], [271.27, 232.3]]} 107 \N
+316 {"type": "LineString", "coordinates": [[271.55, 233.94], [271.55, 232.3]]} 107 \N
+317 {"type": "LineString", "coordinates": [[271.83, 233.94], [271.83, 232.3]]} 107 \N
+318 {"type": "LineString", "coordinates": [[272.11, 233.94], [272.11, 232.3]]} 107 \N
+319 {"type": "LineString", "coordinates": [[272.39, 233.94], [272.39, 232.3]]} 107 \N
+320 {"type": "LineString", "coordinates": [[272.67, 233.94], [272.67, 232.3]]} 107 \N
+323 {"type": "LineString", "coordinates": [[284.02, 195.77], [301.55, 195.77]]} 118 \N
+324 {"type": "LineString", "coordinates": [[284.02, 197.12], [301.55, 197.12]]} 118 \N
+325 {"type": "LineString", "coordinates": [[284.02, 198.48], [301.55, 198.48]]} 118 \N
+326 {"type": "LineString", "coordinates": [[284.02, 199.83], [301.55, 199.83]]} 118 \N
+327 {"type": "LineString", "coordinates": [[284.02, 201.19], [301.55, 201.19]]} 118 \N
+328 {"type": "LineString", "coordinates": [[284.02, 202.54], [301.55, 202.54]]} 118 \N
+329 {"type": "LineString", "coordinates": [[284.02, 203.9], [301.55, 203.9]]} 118 \N
+330 {"type": "LineString", "coordinates": [[284.02, 205.25], [301.55, 205.25]]} 118 \N
+331 {"type": "LineString", "coordinates": [[284.02, 206.6], [301.55, 206.6]]} 118 \N
+332 {"type": "LineString", "coordinates": [[284.02, 207.96], [301.55, 207.96]]} 118 \N
+333 {"type": "LineString", "coordinates": [[284.02, 209.31], [301.55, 209.31]]} 118 \N
+334 {"type": "LineString", "coordinates": [[284.02, 210.67], [301.55, 210.67]]} 118 \N
+335 {"type": "LineString", "coordinates": [[284.02, 212.02], [301.55, 212.02]]} 118 \N
+336 {"type": "LineString", "coordinates": [[270.62, 207.07], [272.39, 207.07]]} 59 \N
+337 {"type": "LineString", "coordinates": [[270.63, 206.76], [272.4, 206.76]]} 59 \N
+338 {"type": "LineString", "coordinates": [[270.63, 206.46], [272.39, 206.46]]} 59 \N
+339 {"type": "LineString", "coordinates": [[270.63, 206.15], [272.39, 206.15]]} 59 \N
+340 {"type": "LineString", "coordinates": [[249.04, 133.31], [248.66, 137.4], [252.63, 137.77]]} 61 \N
+341 {"type": "LineString", "coordinates": [[249.3, 133.32], [248.95, 137.15], [252.64, 137.5]]} 61 \N
+342 {"type": "LineString", "coordinates": [[248.98, 133.05], [248.79, 133.04], [248.37, 137.64], [252.89, 138.06], [252.91, 137.9]]} 61 \N
+343 {"type": "LineString", "coordinates": [[248.99, 132.78], [248.55, 132.74], [248.07, 137.88], [253.14, 138.35], [253.18, 137.95]]} 61 \N
+344 {"type": "LineString", "coordinates": [[249.02, 132.51], [248.29, 132.44], [247.78, 138.13], [253.37, 138.64], [253.44, 137.96]]} 61 \N
+352 {"type": "LineString", "coordinates": [[423.79, 207.72], [423.79, 206.48]]} 136 \N
+353 {"type": "LineString", "coordinates": [[425.71, 207.73], [425.71, 206.46]]} 136 \N
+356 {"type": "LineString", "coordinates": [[426.95, 203.7], [425.67, 203.7]]} 136 \N
+357 {"type": "LineString", "coordinates": [[426.95, 204.04], [425.67, 204.04]]} 136 \N
+358 {"type": "LineString", "coordinates": [[426.95, 204.38], [425.67, 204.38]]} 136 \N
+359 {"type": "LineString", "coordinates": [[426.95, 204.71], [425.67, 204.71]]} 136 \N
+360 {"type": "LineString", "coordinates": [[426.95, 205.05], [425.67, 205.05]]} 136 \N
+361 {"type": "LineString", "coordinates": [[426.95, 205.39], [425.67, 205.39]]} 136 \N
+362 {"type": "LineString", "coordinates": [[426.95, 205.73], [425.67, 205.73]]} 136 \N
+363 {"type": "LineString", "coordinates": [[426.95, 206.06], [425.67, 206.06]]} 136 \N
+364 {"type": "LineString", "coordinates": [[426.95, 206.4], [425.67, 206.4]]} 136 \N
+365 {"type": "LineString", "coordinates": [[424, 207.73], [424, 206.46]]} 136 \N
+366 {"type": "LineString", "coordinates": [[424.22, 207.73], [424.22, 206.46]]} 136 \N
+367 {"type": "LineString", "coordinates": [[424.43, 207.73], [424.43, 206.46]]} 136 \N
+368 {"type": "LineString", "coordinates": [[424.64, 207.73], [424.64, 206.46]]} 136 \N
+369 {"type": "LineString", "coordinates": [[424.86, 207.73], [424.86, 206.46]]} 136 \N
+370 {"type": "LineString", "coordinates": [[425.07, 207.73], [425.07, 206.46]]} 136 \N
+371 {"type": "LineString", "coordinates": [[425.28, 207.73], [425.28, 206.46]]} 136 \N
+372 {"type": "LineString", "coordinates": [[425.5, 207.73], [425.5, 206.46]]} 136 \N
+379 {"type": "LineString", "coordinates": [[422.78, 202.7], [422.78, 201.24]]} 138 \N
+380 {"type": "LineString", "coordinates": [[423.06, 202.7], [423.06, 201.24]]} 138 \N
+381 {"type": "LineString", "coordinates": [[423.34, 202.7], [423.34, 201.24]]} 138 \N
+382 {"type": "LineString", "coordinates": [[423.62, 202.7], [423.62, 201.24]]} 138 \N
+383 {"type": "LineString", "coordinates": [[423.9, 202.7], [423.9, 201.24]]} 138 \N
+384 {"type": "LineString", "coordinates": [[424.17, 202.7], [424.17, 201.24]]} 138 \N
+385 {"type": "LineString", "coordinates": [[424.45, 202.7], [424.45, 201.24]]} 138 \N
+386 {"type": "LineString", "coordinates": [[424.73, 202.7], [424.73, 201.24]]} 138 \N
+387 {"type": "LineString", "coordinates": [[425.01, 202.7], [425.01, 201.24]]} 138 \N
+388 {"type": "LineString", "coordinates": [[425.61, 202.72], [426.94, 202.72]]} 138 \N
+389 {"type": "LineString", "coordinates": [[425.61, 203.01], [426.94, 203.01]]} 138 \N
+390 {"type": "LineString", "coordinates": [[425.61, 203.3], [426.94, 203.3]]} 138 \N
+391 {"type": "LineString", "coordinates": [[425.61, 203.59], [426.94, 203.59]]} 138 \N
+392 {"type": "LineString", "coordinates": [[425.61, 203.88], [426.94, 203.88]]} 138 \N
+393 {"type": "LineString", "coordinates": [[425.61, 204.17], [426.94, 204.17]]} 138 \N
+394 {"type": "LineString", "coordinates": [[425.61, 204.46], [426.94, 204.46]]} 138 \N
+395 {"type": "LineString", "coordinates": [[425.61, 204.74], [426.94, 204.74]]} 138 \N
+396 {"type": "LineString", "coordinates": [[425.61, 205.03], [426.94, 205.03]]} 138 \N
+397 {"type": "LineString", "coordinates": [[425.61, 205.32], [426.94, 205.32]]} 138 \N
+398 {"type": "LineString", "coordinates": [[425.61, 205.61], [426.94, 205.61]]} 138 \N
+399 {"type": "LineString", "coordinates": [[425.61, 205.9], [426.94, 205.9]]} 138 \N
+400 {"type": "LineString", "coordinates": [[425.61, 206.19], [426.94, 206.19]]} 138 \N
+401 {"type": "LineString", "coordinates": [[425.55, 206.39], [425.55, 207.71]]} 138 \N
+402 {"type": "LineString", "coordinates": [[425.23, 206.39], [425.23, 207.71]]} 138 \N
+403 {"type": "LineString", "coordinates": [[424.91, 206.39], [424.91, 207.71]]} 138 \N
+404 {"type": "LineString", "coordinates": [[424.6, 206.39], [424.6, 207.71]]} 138 \N
+405 {"type": "LineString", "coordinates": [[424.28, 206.39], [424.28, 207.71]]} 138 \N
+406 {"type": "LineString", "coordinates": [[423.96, 206.39], [423.96, 207.71]]} 138 \N
+407 {"type": "LineString", "coordinates": [[423.64, 206.39], [423.64, 207.71]]} 138 \N
+408 {"type": "LineString", "coordinates": [[423.33, 206.39], [423.33, 207.71]]} 138 \N
+409 {"type": "LineString", "coordinates": [[423.01, 206.39], [423.01, 207.71]]} 138 \N
+410 {"type": "LineString", "coordinates": [[422.69, 206.39], [422.69, 207.71]]} 138 \N
+\.
+
+
+--
+-- Data for Name: mapdata_theme; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_theme (id, titles, description, public, color_background, color_wall_fill, color_wall_border, color_door_fill, color_ground_fill, color_obstacles_default_fill, color_obstacles_default_border, last_updated, color_css_grid, color_css_header_background, color_css_header_text, color_css_header_text_hover, color_css_initial, color_css_modal_backdrop, color_css_overlay_background, color_css_primary, color_css_quaternary, color_css_quinary, color_css_route_dots_shadow, color_css_secondary, color_css_shadow, color_css_tertiary, color_logo, dark, "default", extra_css, funky, high_contrast, randomize_primary_color, icon_path, leaflet_marker_config) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_themelocationgroupbackgroundcolor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_themelocationgroupbackgroundcolor (id, fill_color, border_color, location_group_id, theme_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_themeobstaclegroupbackgroundcolor; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_themeobstaclegroupbackgroundcolor (id, fill_color, border_color, obstacle_group_id, theme_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mapdata_waytype; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mapdata_waytype (id, titles, titles_plural, join_edges, up_separate, walk, color, icon_name, extra_seconds, speed, description_i18n, speed_up, description_up_i18n, level_change_description_i18n) FROM stdin;
+1 {"en": "Stairway"} {"en": "Stairways"} t t t #acea52 stairs 0 1.0 {"en": "Take the stairs downwards"} 1.0 {"en": "Take the stairs upwards"} {"en": "Level change description"}
+2 {"en": "Elevator"} {"en": "Elevators"} t t f #ffffcc elevator 0 1.0 {"en": "Take the elevator and {level_change_description}"} 1.0 {"en": "Take the elevator and {level_change_description}"} {"en": "go to {level}"}
+\.
+
+
+--
+-- Data for Name: mesh_firmwarebuild; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_firmwarebuild (id, variant, chip, sha256_hash, project_description, "binary", version_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_firmwarebuildboard; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_firmwarebuildboard (id, board, build_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_firmwareversion; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_firmwareversion (id, project_name, version, idf_version, created, uploader_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_meshnode; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_meshnode (address, first_seen, last_signin, uplink_id, upstream_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_meshuplink; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_meshuplink (id, name, started, last_ping, end_reason, node_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_nodemessage; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_nodemessage (id, datetime, data, src_node_id, message_type, uplink_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_otaupdate; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_otaupdate (id, created, build_id) FROM stdin;
+\.
+
+
+--
+-- Data for Name: mesh_otaupdaterecipient; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.mesh_otaupdaterecipient (id, node_id, update_id, status) FROM stdin;
+\.
+
+
+--
+-- Data for Name: routing_routeoptions; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.routing_routeoptions (user_id, data) FROM stdin;
+1 {"mode": "fastest", "waytype_1": "avoid", "waytype_2": "allow", "walk_speed": "slow", "restrictions": "normal"}
+\.
+
+
+--
+-- Data for Name: site_announcement; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.site_announcement (id, created, active_until, active, author_id, text_i18n) FROM stdin;
+\.
+
+
+--
+-- Data for Name: site_siteupdate; Type: TABLE DATA; Schema: public; Owner: -
+--
+
+COPY public.site_siteupdate (id, created) FROM stdin;
+1 2024-09-24 09:23:14.436108+00
+\.
+
+
+--
+-- Name: api_secret_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.api_secret_id_seq', 1, false);
+
+
+--
+-- Name: api_token_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.api_token_id_seq', 1, false);
+
+
+--
+-- Name: auth_group_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.auth_group_id_seq', 1, false);
+
+
+--
+-- Name: auth_group_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false);
+
+
+--
+-- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.auth_permission_id_seq', 264, true);
+
+
+--
+-- Name: auth_user_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.auth_user_groups_id_seq', 1, false);
+
+
+--
+-- Name: auth_user_user_permissions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.auth_user_user_permissions_id_seq', 1, false);
+
+
+--
+-- Name: control_userpermissions_review_group_reports_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.control_userpermissions_review_group_reports_id_seq', 1, false);
+
+
+--
+-- Name: control_userspaceaccess_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.control_userspaceaccess_id_seq', 1, false);
+
+
+--
+-- Name: django_admin_log_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.django_admin_log_id_seq', 1, false);
+
+
+--
+-- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.django_content_type_id_seq', 66, true);
+
+
+--
+-- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.django_migrations_id_seq', 201, true);
+
+
+--
+-- Name: editor_changedobject_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.editor_changedobject_id_seq', 28, true);
+
+
+--
+-- Name: editor_changeset_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.editor_changeset_id_seq', 8, true);
+
+
+--
+-- Name: editor_changesetupdate_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.editor_changesetupdate_id_seq', 31, true);
+
+
+--
+-- Name: mapdata_accesspermission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accesspermission_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accesspermissionssogrant_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accesspermissiontoken_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_accessrestriction_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accessrestriction_groups_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_accessrestriction_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accessrestriction_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_accessrestrictiongroup_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_accessrestrictiongroup_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_altitudearea_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_altitudearea_id_seq', 364, true);
+
+
+--
+-- Name: mapdata_altitudemarker_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_altitudemarker_id_seq', 63, true);
+
+
+--
+-- Name: mapdata_area_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_area_groups_id_seq', 8, true);
+
+
+--
+-- Name: mapdata_building_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_building_id_seq', 16, true);
+
+
+--
+-- Name: mapdata_column_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_column_id_seq', 40, true);
+
+
+--
+-- Name: mapdata_crossdescription_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_crossdescription_id_seq', 1, true);
+
+
+--
+-- Name: mapdata_door_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_door_id_seq', 69, true);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_dynamiclocation_groups_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_graphedge_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_graphedge_id_seq', 618, true);
+
+
+--
+-- Name: mapdata_graphnode_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_graphnode_id_seq', 234, true);
+
+
+--
+-- Name: mapdata_groundaltitude_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_groundaltitude_id_seq', 14, true);
+
+
+--
+-- Name: mapdata_hole_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_hole_id_seq', 11, true);
+
+
+--
+-- Name: mapdata_labelsettings_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_labelsettings_id_seq', 3, true);
+
+
+--
+-- Name: mapdata_leavedescription_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_leavedescription_id_seq', 1, true);
+
+
+--
+-- Name: mapdata_level_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_level_groups_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_lineobstacle_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_lineobstacle_id_seq', 9, true);
+
+
+--
+-- Name: mapdata_locationgroupcategory_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_locationgroupcategory_id_seq', 5, true);
+
+
+--
+-- Name: mapdata_locationslug_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_locationslug_id_seq', 153, true);
+
+
+--
+-- Name: mapdata_mapupdate_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_mapupdate_id_seq', 1827, true);
+
+
+--
+-- Name: mapdata_obstacle_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_obstacle_id_seq', 5, true);
+
+
+--
+-- Name: mapdata_obstaclegroup_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_obstaclegroup_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_poi_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_poi_groups_id_seq', 5, true);
+
+
+--
+-- Name: mapdata_position_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_position_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_ramp_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_ramp_id_seq', 9, true);
+
+
+--
+-- Name: mapdata_rangingbeacon_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_rangingbeacon_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_report_created_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_report_created_groups_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_report_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_report_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_reportupdate_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_reportupdate_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_source_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_source_id_seq', 11, true);
+
+
+--
+-- Name: mapdata_space_groups_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_space_groups_id_seq', 75, true);
+
+
+--
+-- Name: mapdata_stair_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_stair_id_seq', 410, true);
+
+
+--
+-- Name: mapdata_theme_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_theme_id_seq', 1, true);
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_themelocationgroupbackgroundcolor_id_seq', 8, true);
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_themeobstaclegroupbackgroundcolor_id_seq', 1, false);
+
+
+--
+-- Name: mapdata_waytype_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_waytype_id_seq', 2, true);
+
+
+--
+-- Name: mapdata_wifimeasurement_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mapdata_wifimeasurement_id_seq', 1, false);
+
+
+--
+-- Name: mesh_firmwarebuild_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_firmwarebuild_id_seq', 1, false);
+
+
+--
+-- Name: mesh_firmwarebuildboard_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_firmwarebuildboard_id_seq', 1, false);
+
+
+--
+-- Name: mesh_firmwareversion_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_firmwareversion_id_seq', 1, false);
+
+
+--
+-- Name: mesh_meshuplink_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_meshuplink_id_seq', 1, false);
+
+
+--
+-- Name: mesh_nodemessage_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_nodemessage_id_seq', 1, false);
+
+
+--
+-- Name: mesh_otaupdate_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_otaupdate_id_seq', 1, false);
+
+
+--
+-- Name: mesh_otaupdaterecipient_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.mesh_otaupdaterecipient_id_seq', 1, false);
+
+
+--
+-- Name: site_announcement_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.site_announcement_id_seq', 1, false);
+
+
+--
+-- Name: site_siteupdate_id_seq; Type: SEQUENCE SET; Schema: public; Owner: -
+--
+
+SELECT pg_catalog.setval('public.site_siteupdate_id_seq', 1, true);
+
+
+--
+-- Name: api_secret api_secret_api_secret_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_secret
+ ADD CONSTRAINT api_secret_api_secret_key UNIQUE (api_secret);
+
+
+--
+-- Name: api_secret api_secret_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_secret
+ ADD CONSTRAINT api_secret_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: api_secret api_secret_user_id_name_21b4a70e_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_secret
+ ADD CONSTRAINT api_secret_user_id_name_21b4a70e_uniq UNIQUE (user_id, name);
+
+
+--
+-- Name: api_logintoken api_token_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_logintoken
+ ADD CONSTRAINT api_token_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_group auth_group_name_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group
+ ADD CONSTRAINT auth_group_name_key UNIQUE (name);
+
+
+--
+-- Name: auth_group_permissions auth_group_permissions_group_id_permission_id_0cd325b0_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group_permissions
+ ADD CONSTRAINT auth_group_permissions_group_id_permission_id_0cd325b0_uniq UNIQUE (group_id, permission_id);
+
+
+--
+-- Name: auth_group_permissions auth_group_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group_permissions
+ ADD CONSTRAINT auth_group_permissions_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_group auth_group_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group
+ ADD CONSTRAINT auth_group_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_permission auth_permission_content_type_id_codename_01ab375a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_permission
+ ADD CONSTRAINT auth_permission_content_type_id_codename_01ab375a_uniq UNIQUE (content_type_id, codename);
+
+
+--
+-- Name: auth_permission auth_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_permission
+ ADD CONSTRAINT auth_permission_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_user_groups auth_user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_groups
+ ADD CONSTRAINT auth_user_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_user_groups auth_user_groups_user_id_group_id_94350c0c_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_groups
+ ADD CONSTRAINT auth_user_groups_user_id_group_id_94350c0c_uniq UNIQUE (user_id, group_id);
+
+
+--
+-- Name: auth_user_user_permissions auth_user_user_permissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_user_permissions
+ ADD CONSTRAINT auth_user_user_permissions_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: auth_user_user_permissions auth_user_user_permissions_user_id_permission_id_14a6b632_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_user_permissions
+ ADD CONSTRAINT auth_user_user_permissions_user_id_permission_id_14a6b632_uniq UNIQUE (user_id, permission_id);
+
+
+--
+-- Name: control_userpermissions_review_group_reports control_userpermissions__userpermissions_id_locat_17cbbd3d_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions_review_group_reports
+ ADD CONSTRAINT control_userpermissions__userpermissions_id_locat_17cbbd3d_uniq UNIQUE (userpermissions_id, locationgroup_id);
+
+
+--
+-- Name: control_userpermissions control_userpermissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions
+ ADD CONSTRAINT control_userpermissions_pkey PRIMARY KEY (user_id);
+
+
+--
+-- Name: control_userpermissions_review_group_reports control_userpermissions_review_group_reports_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions_review_group_reports
+ ADD CONSTRAINT control_userpermissions_review_group_reports_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: control_userspaceaccess control_userspaceaccess_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userspaceaccess
+ ADD CONSTRAINT control_userspaceaccess_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: control_userspaceaccess control_userspaceaccess_user_id_space_id_224c3409_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userspaceaccess
+ ADD CONSTRAINT control_userspaceaccess_user_id_space_id_224c3409_uniq UNIQUE (user_id, space_id);
+
+
+--
+-- Name: django_admin_log django_admin_log_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_admin_log
+ ADD CONSTRAINT django_admin_log_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: django_content_type django_content_type_app_label_model_76bd3d3b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_content_type
+ ADD CONSTRAINT django_content_type_app_label_model_76bd3d3b_uniq UNIQUE (app_label, model);
+
+
+--
+-- Name: django_content_type django_content_type_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_content_type
+ ADD CONSTRAINT django_content_type_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: django_migrations django_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_migrations
+ ADD CONSTRAINT django_migrations_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: django_session django_session_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_session
+ ADD CONSTRAINT django_session_pkey PRIMARY KEY (session_key);
+
+
+--
+-- Name: editor_changedobject editor_changedobject_changeset_id_content_typ_30a7cdb1_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changedobject
+ ADD CONSTRAINT editor_changedobject_changeset_id_content_typ_30a7cdb1_uniq UNIQUE (changeset_id, content_type_id, existing_object_pk);
+
+
+--
+-- Name: editor_changedobject editor_changedobject_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changedobject
+ ADD CONSTRAINT editor_changedobject_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: editor_changeset editor_changeset_map_update_id_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_map_update_id_key UNIQUE (map_update_id);
+
+
+--
+-- Name: editor_changeset editor_changeset_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: editor_changesetupdate editor_changesetupdate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changesetupdate
+ ADD CONSTRAINT editor_changesetupdate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermission_author_id_unique_key_0644d161_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermission_author_id_unique_key_0644d161_uniq UNIQUE (author_id, unique_key);
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermission_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermission_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant mapdata_accesspermission_provider_group_access_re_bf15c068_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissionssogrant
+ ADD CONSTRAINT mapdata_accesspermission_provider_group_access_re_bf15c068_uniq UNIQUE (provider, "group", access_restriction_id, access_restriction_group_id);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant mapdata_accesspermissionssogrant_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissionssogrant
+ ADD CONSTRAINT mapdata_accesspermissionssogrant_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accesspermissiontoken mapdata_accesspermissiontoken_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissiontoken
+ ADD CONSTRAINT mapdata_accesspermissiontoken_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accesspermissiontoken mapdata_accesspermissiontoken_token_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissiontoken
+ ADD CONSTRAINT mapdata_accesspermissiontoken_token_key UNIQUE (token);
+
+
+--
+-- Name: mapdata_accessrestriction_groups mapdata_accessrestrictio_accessrestriction_id_acc_1dbcda69_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestriction_groups
+ ADD CONSTRAINT mapdata_accessrestrictio_accessrestriction_id_acc_1dbcda69_uniq UNIQUE (accessrestriction_id, accessrestrictiongroup_id);
+
+
+--
+-- Name: mapdata_accessrestriction_groups mapdata_accessrestriction_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestriction_groups
+ ADD CONSTRAINT mapdata_accessrestriction_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accessrestriction mapdata_accessrestriction_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestriction
+ ADD CONSTRAINT mapdata_accessrestriction_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_accessrestrictiongroup mapdata_accessrestrictiongroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestrictiongroup
+ ADD CONSTRAINT mapdata_accessrestrictiongroup_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_altitudearea mapdata_altitudearea_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_altitudearea
+ ADD CONSTRAINT mapdata_altitudearea_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_altitudemarker mapdata_altitudemarker_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_altitudemarker
+ ADD CONSTRAINT mapdata_altitudemarker_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_area_groups mapdata_area_groups_area_id_locationgroup_id_573c1a07_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area_groups
+ ADD CONSTRAINT mapdata_area_groups_area_id_locationgroup_id_573c1a07_uniq UNIQUE (area_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_area_groups mapdata_area_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area_groups
+ ADD CONSTRAINT mapdata_area_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_area mapdata_area_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area
+ ADD CONSTRAINT mapdata_area_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_building mapdata_building_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_building
+ ADD CONSTRAINT mapdata_building_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_column mapdata_column_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_column
+ ADD CONSTRAINT mapdata_column_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_crossdescription mapdata_crossdescription_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_crossdescription
+ ADD CONSTRAINT mapdata_crossdescription_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_crossdescription mapdata_crossdescription_space_id_origin_space_id_0efa52a4_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_crossdescription
+ ADD CONSTRAINT mapdata_crossdescription_space_id_origin_space_id_0efa52a4_uniq UNIQUE (space_id, origin_space_id, target_space_id);
+
+
+--
+-- Name: mapdata_door mapdata_door_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_door
+ ADD CONSTRAINT mapdata_door_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups mapdata_dynamiclocation__dynamiclocation_id_locat_d1a2f283_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation_groups
+ ADD CONSTRAINT mapdata_dynamiclocation__dynamiclocation_id_locat_d1a2f283_uniq UNIQUE (dynamiclocation_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups mapdata_dynamiclocation_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation_groups
+ ADD CONSTRAINT mapdata_dynamiclocation_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_dynamiclocation mapdata_dynamiclocation_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation
+ ADD CONSTRAINT mapdata_dynamiclocation_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_from_node_id_to_node_id_69dfc18a_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_from_node_id_to_node_id_69dfc18a_uniq UNIQUE (from_node_id, to_node_id);
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_graphnode mapdata_graphnode_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphnode
+ ADD CONSTRAINT mapdata_graphnode_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_groundaltitude mapdata_groundaltitude_name_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_groundaltitude
+ ADD CONSTRAINT mapdata_groundaltitude_name_key UNIQUE (name);
+
+
+--
+-- Name: mapdata_groundaltitude mapdata_groundaltitude_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_groundaltitude
+ ADD CONSTRAINT mapdata_groundaltitude_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_hole mapdata_hole_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_hole
+ ADD CONSTRAINT mapdata_hole_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_labelsettings mapdata_labelsettings_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_labelsettings
+ ADD CONSTRAINT mapdata_labelsettings_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_leavedescription mapdata_leavedescription_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_leavedescription
+ ADD CONSTRAINT mapdata_leavedescription_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_leavedescription mapdata_leavedescription_space_id_target_space_id_91b3fce3_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_leavedescription
+ ADD CONSTRAINT mapdata_leavedescription_space_id_target_space_id_91b3fce3_uniq UNIQUE (space_id, target_space_id);
+
+
+--
+-- Name: mapdata_level mapdata_level_base_altitude_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_base_altitude_key UNIQUE (base_altitude);
+
+
+--
+-- Name: mapdata_level_groups mapdata_level_groups_level_id_locationgroup_id_a6e17493_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level_groups
+ ADD CONSTRAINT mapdata_level_groups_level_id_locationgroup_id_a6e17493_uniq UNIQUE (level_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_level_groups mapdata_level_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level_groups
+ ADD CONSTRAINT mapdata_level_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_level mapdata_level_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_level mapdata_level_short_label_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_short_label_key UNIQUE (short_label);
+
+
+--
+-- Name: mapdata_lineobstacle mapdata_lineobstacle_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_lineobstacle
+ ADD CONSTRAINT mapdata_lineobstacle_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgroup_hub_import_type_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgroup_hub_import_type_key UNIQUE (hub_import_type);
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgroup_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_locationgroupcategory mapdata_locationgroupcategory_name_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroupcategory
+ ADD CONSTRAINT mapdata_locationgroupcategory_name_key UNIQUE (name);
+
+
+--
+-- Name: mapdata_locationgroupcategory mapdata_locationgroupcategory_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroupcategory
+ ADD CONSTRAINT mapdata_locationgroupcategory_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_locationredirect mapdata_locationredirect_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationredirect
+ ADD CONSTRAINT mapdata_locationredirect_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_locationslug mapdata_locationslug_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationslug
+ ADD CONSTRAINT mapdata_locationslug_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_locationslug mapdata_locationslug_slug_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationslug
+ ADD CONSTRAINT mapdata_locationslug_slug_key UNIQUE (slug);
+
+
+--
+-- Name: mapdata_mapupdate mapdata_mapupdate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_mapupdate
+ ADD CONSTRAINT mapdata_mapupdate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_obstacle mapdata_obstacle_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_obstacle
+ ADD CONSTRAINT mapdata_obstacle_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_obstaclegroup mapdata_obstaclegroup_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_obstaclegroup
+ ADD CONSTRAINT mapdata_obstaclegroup_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_poi_groups mapdata_poi_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi_groups
+ ADD CONSTRAINT mapdata_poi_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_poi_groups mapdata_poi_groups_poi_id_locationgroup_id_e97cd00b_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi_groups
+ ADD CONSTRAINT mapdata_poi_groups_poi_id_locationgroup_id_e97cd00b_uniq UNIQUE (poi_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_poi mapdata_poi_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi
+ ADD CONSTRAINT mapdata_poi_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_position mapdata_position_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_position
+ ADD CONSTRAINT mapdata_position_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_position mapdata_position_secret_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_position
+ ADD CONSTRAINT mapdata_position_secret_key UNIQUE (secret);
+
+
+--
+-- Name: mapdata_ramp mapdata_ramp_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_ramp
+ ADD CONSTRAINT mapdata_ramp_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeacon_bluetooth_address_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeacon_bluetooth_address_key UNIQUE (bluetooth_address);
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeacon_bssid_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeacon_bssid_key UNIQUE (wifi_bssid);
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeacon_node_number_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeacon_node_number_key UNIQUE (node_number);
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeacon_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeacon_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeacon_uwb_address_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeacon_uwb_address_key UNIQUE (uwb_address);
+
+
+--
+-- Name: mapdata_report_created_groups mapdata_report_created_g_report_id_locationgroup__27469fb6_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report_created_groups
+ ADD CONSTRAINT mapdata_report_created_g_report_id_locationgroup__27469fb6_uniq UNIQUE (report_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_report_created_groups mapdata_report_created_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report_created_groups
+ ADD CONSTRAINT mapdata_report_created_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_report mapdata_report_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report
+ ADD CONSTRAINT mapdata_report_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_reportupdate mapdata_reportupdate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_reportupdate
+ ADD CONSTRAINT mapdata_reportupdate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_source mapdata_source_name_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_source
+ ADD CONSTRAINT mapdata_source_name_key UNIQUE (name);
+
+
+--
+-- Name: mapdata_source mapdata_source_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_source
+ ADD CONSTRAINT mapdata_source_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_space_groups mapdata_space_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space_groups
+ ADD CONSTRAINT mapdata_space_groups_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_space_groups mapdata_space_groups_space_id_locationgroup_id_170f4e14_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space_groups
+ ADD CONSTRAINT mapdata_space_groups_space_id_locationgroup_id_170f4e14_uniq UNIQUE (space_id, locationgroup_id);
+
+
+--
+-- Name: mapdata_space mapdata_space_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space
+ ADD CONSTRAINT mapdata_space_pkey PRIMARY KEY (locationslug_ptr_id);
+
+
+--
+-- Name: mapdata_stair mapdata_stair_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_stair
+ ADD CONSTRAINT mapdata_stair_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_theme mapdata_theme_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_theme
+ ADD CONSTRAINT mapdata_theme_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor mapdata_themelocationgroupbackgroundcolor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themelocationgroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themelocationgroupbackgroundcolor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor mapdata_themeobstaclegroupbackgroundcolor_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themeobstaclegroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themeobstaclegroupbackgroundcolor_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_waytype mapdata_waytype_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_waytype
+ ADD CONSTRAINT mapdata_waytype_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mapdata_beaconmeasurement mapdata_wifimeasurement_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_beaconmeasurement
+ ADD CONSTRAINT mapdata_wifimeasurement_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_firmwarebuild mesh_firmwarebuild_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuild
+ ADD CONSTRAINT mesh_firmwarebuild_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_firmwarebuild mesh_firmwarebuild_sha256_hash_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuild
+ ADD CONSTRAINT mesh_firmwarebuild_sha256_hash_key UNIQUE (sha256_hash);
+
+
+--
+-- Name: mesh_firmwarebuild mesh_firmwarebuild_version_id_variant_0930ed52_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuild
+ ADD CONSTRAINT mesh_firmwarebuild_version_id_variant_0930ed52_uniq UNIQUE (version_id, variant);
+
+
+--
+-- Name: mesh_firmwarebuildboard mesh_firmwarebuildboard_build_id_board_e38ac95f_uniq; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuildboard
+ ADD CONSTRAINT mesh_firmwarebuildboard_build_id_board_e38ac95f_uniq UNIQUE (build_id, board);
+
+
+--
+-- Name: mesh_firmwarebuildboard mesh_firmwarebuildboard_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuildboard
+ ADD CONSTRAINT mesh_firmwarebuildboard_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_firmwareversion mesh_firmwareversion_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwareversion
+ ADD CONSTRAINT mesh_firmwareversion_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_firmwareversion mesh_firmwareversion_version_key; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwareversion
+ ADD CONSTRAINT mesh_firmwareversion_version_key UNIQUE (version);
+
+
+--
+-- Name: mesh_meshnode mesh_meshnode_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_meshnode
+ ADD CONSTRAINT mesh_meshnode_pkey PRIMARY KEY (address);
+
+
+--
+-- Name: mesh_meshuplink mesh_meshuplink_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_meshuplink
+ ADD CONSTRAINT mesh_meshuplink_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_nodemessage mesh_nodemessage_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_nodemessage
+ ADD CONSTRAINT mesh_nodemessage_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_otaupdate mesh_otaupdate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_otaupdate
+ ADD CONSTRAINT mesh_otaupdate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: mesh_otaupdaterecipient mesh_otaupdaterecipient_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_otaupdaterecipient
+ ADD CONSTRAINT mesh_otaupdaterecipient_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: routing_routeoptions routing_routeoptions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.routing_routeoptions
+ ADD CONSTRAINT routing_routeoptions_pkey PRIMARY KEY (user_id);
+
+
+--
+-- Name: site_announcement site_announcement_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.site_announcement
+ ADD CONSTRAINT site_announcement_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: site_siteupdate site_siteupdate_pkey; Type: CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.site_siteupdate
+ ADD CONSTRAINT site_siteupdate_pkey PRIMARY KEY (id);
+
+
+--
+-- Name: api_secret_api_secret_e655122c_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX api_secret_api_secret_e655122c_like ON public.api_secret USING btree (api_secret varchar_pattern_ops);
+
+
+--
+-- Name: api_secret_user_id_74e5b7a6; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX api_secret_user_id_74e5b7a6 ON public.api_secret USING btree (user_id);
+
+
+--
+-- Name: api_token_user_id_b646d2e7; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX api_token_user_id_b646d2e7 ON public.api_logintoken USING btree (user_id);
+
+
+--
+-- Name: auth_group_name_a6ea08ec_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_group_name_a6ea08ec_like ON public.auth_group USING btree (name varchar_pattern_ops);
+
+
+--
+-- Name: auth_group_permissions_group_id_b120cbf9; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_group_permissions_group_id_b120cbf9 ON public.auth_group_permissions USING btree (group_id);
+
+
+--
+-- Name: auth_group_permissions_permission_id_84c5c92e; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_group_permissions_permission_id_84c5c92e ON public.auth_group_permissions USING btree (permission_id);
+
+
+--
+-- Name: auth_permission_content_type_id_2f476e4b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_permission_content_type_id_2f476e4b ON public.auth_permission USING btree (content_type_id);
+
+
+--
+-- Name: auth_user_groups_group_id_97559544; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_user_groups_group_id_97559544 ON public.auth_user_groups USING btree (group_id);
+
+
+--
+-- Name: auth_user_groups_user_id_6a12ed8b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_user_groups_user_id_6a12ed8b ON public.auth_user_groups USING btree (user_id);
+
+
+--
+-- Name: auth_user_user_permissions_permission_id_1fbb5f2c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_user_user_permissions_permission_id_1fbb5f2c ON public.auth_user_user_permissions USING btree (permission_id);
+
+
+--
+-- Name: auth_user_user_permissions_user_id_a95ead1b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX auth_user_user_permissions_user_id_a95ead1b ON public.auth_user_user_permissions USING btree (user_id);
+
+
+--
+-- Name: control_userpermissions_re_locationgroup_id_96a3102b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX control_userpermissions_re_locationgroup_id_96a3102b ON public.control_userpermissions_review_group_reports USING btree (locationgroup_id);
+
+
+--
+-- Name: control_userpermissions_re_userpermissions_id_3d2fb35b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX control_userpermissions_re_userpermissions_id_3d2fb35b ON public.control_userpermissions_review_group_reports USING btree (userpermissions_id);
+
+
+--
+-- Name: control_userspaceaccess_space_id_c22914b2; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX control_userspaceaccess_space_id_c22914b2 ON public.control_userspaceaccess USING btree (space_id);
+
+
+--
+-- Name: control_userspaceaccess_user_id_4ad6da16; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX control_userspaceaccess_user_id_4ad6da16 ON public.control_userspaceaccess USING btree (user_id);
+
+
+--
+-- Name: django_admin_log_content_type_id_c4bce8eb; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX django_admin_log_content_type_id_c4bce8eb ON public.django_admin_log USING btree (content_type_id);
+
+
+--
+-- Name: django_admin_log_user_id_c564eba6; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX django_admin_log_user_id_c564eba6 ON public.django_admin_log USING btree (user_id);
+
+
+--
+-- Name: django_session_expire_date_a5c62663; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX django_session_expire_date_a5c62663 ON public.django_session USING btree (expire_date);
+
+
+--
+-- Name: django_session_session_key_c0390e0f_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX django_session_session_key_c0390e0f_like ON public.django_session USING btree (session_key varchar_pattern_ops);
+
+
+--
+-- Name: editor_changedobject_changeset_id_0692bc40; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changedobject_changeset_id_0692bc40 ON public.editor_changedobject USING btree (changeset_id);
+
+
+--
+-- Name: editor_changedobject_content_type_id_aa981231; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changedobject_content_type_id_aa981231 ON public.editor_changedobject USING btree (content_type_id);
+
+
+--
+-- Name: editor_changeset_assigned_to_id_3afcfbb7; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_assigned_to_id_3afcfbb7 ON public.editor_changeset USING btree (assigned_to_id);
+
+
+--
+-- Name: editor_changeset_author_id_f4bf3c7f; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_author_id_f4bf3c7f ON public.editor_changeset USING btree (author_id);
+
+
+--
+-- Name: editor_changeset_last_change_id_5be51ccf; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_last_change_id_5be51ccf ON public.editor_changeset USING btree (last_change_id);
+
+
+--
+-- Name: editor_changeset_last_cleaned_with_id_d5214743; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_last_cleaned_with_id_d5214743 ON public.editor_changeset USING btree (last_cleaned_with_id);
+
+
+--
+-- Name: editor_changeset_last_state_update_id_292a8530; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_last_state_update_id_292a8530 ON public.editor_changeset USING btree (last_state_update_id);
+
+
+--
+-- Name: editor_changeset_last_update_id_e0d77297; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_last_update_id_e0d77297 ON public.editor_changeset USING btree (last_update_id);
+
+
+--
+-- Name: editor_changeset_state_5a7a590f; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_state_5a7a590f ON public.editor_changeset USING btree (state);
+
+
+--
+-- Name: editor_changeset_state_5a7a590f_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changeset_state_5a7a590f_like ON public.editor_changeset USING btree (state varchar_pattern_ops);
+
+
+--
+-- Name: editor_changesetupdate_assigned_to_id_373deb2a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changesetupdate_assigned_to_id_373deb2a ON public.editor_changesetupdate USING btree (assigned_to_id);
+
+
+--
+-- Name: editor_changesetupdate_changeset_id_aedbc5fb; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changesetupdate_changeset_id_aedbc5fb ON public.editor_changesetupdate USING btree (changeset_id);
+
+
+--
+-- Name: editor_changesetupdate_state_ed535412; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changesetupdate_state_ed535412 ON public.editor_changesetupdate USING btree (state);
+
+
+--
+-- Name: editor_changesetupdate_state_ed535412_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changesetupdate_state_ed535412_like ON public.editor_changesetupdate USING btree (state varchar_pattern_ops);
+
+
+--
+-- Name: editor_changesetupdate_user_id_cd2202c2; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX editor_changesetupdate_user_id_cd2202c2 ON public.editor_changesetupdate USING btree (user_id);
+
+
+--
+-- Name: mapdata_accesspermission_access_restriction_group_id_194c451d; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_access_restriction_group_id_194c451d ON public.mapdata_accesspermission USING btree (access_restriction_group_id);
+
+
+--
+-- Name: mapdata_accesspermission_access_restriction_id_6cf436d8; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_access_restriction_id_6cf436d8 ON public.mapdata_accesspermission USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_accesspermission_author_id_f42ef447; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_author_id_f42ef447 ON public.mapdata_accesspermission USING btree (author_id);
+
+
+--
+-- Name: mapdata_accesspermission_sso_grant_id_425b2515; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_sso_grant_id_425b2515 ON public.mapdata_accesspermission USING btree (sso_grant_id);
+
+
+--
+-- Name: mapdata_accesspermission_token_id_e3647d7b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_token_id_e3647d7b ON public.mapdata_accesspermission USING btree (token_id);
+
+
+--
+-- Name: mapdata_accesspermission_user_id_0160fe04; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermission_user_id_0160fe04 ON public.mapdata_accesspermission USING btree (user_id);
+
+
+--
+-- Name: mapdata_accesspermissionss_access_restriction_group_i_960b8494; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissionss_access_restriction_group_i_960b8494 ON public.mapdata_accesspermissionssogrant USING btree (access_restriction_group_id);
+
+
+--
+-- Name: mapdata_accesspermissionssogrant_access_restriction_id_d94eb926; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissionssogrant_access_restriction_id_d94eb926 ON public.mapdata_accesspermissionssogrant USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_author_id_4ae5d792; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissiontoken_author_id_4ae5d792 ON public.mapdata_accesspermissiontoken USING btree (author_id);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_can_grant_9d37516f; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissiontoken_can_grant_9d37516f ON public.mapdata_accesspermissiontoken USING btree (can_grant);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_redeemed_d5cc5d44; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissiontoken_redeemed_d5cc5d44 ON public.mapdata_accesspermissiontoken USING btree (redeemed);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_unlimited_2f438422; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissiontoken_unlimited_2f438422 ON public.mapdata_accesspermissiontoken USING btree (unlimited);
+
+
+--
+-- Name: mapdata_accesspermissiontoken_valid_until_beec34ec; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accesspermissiontoken_valid_until_beec34ec ON public.mapdata_accesspermissiontoken USING btree (valid_until);
+
+
+--
+-- Name: mapdata_accessrestriction__accessrestrictiongroup_id_fcb1eea5; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accessrestriction__accessrestrictiongroup_id_fcb1eea5 ON public.mapdata_accessrestriction_groups USING btree (accessrestrictiongroup_id);
+
+
+--
+-- Name: mapdata_accessrestriction_groups_accessrestriction_id_c6318580; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_accessrestriction_groups_accessrestriction_id_c6318580 ON public.mapdata_accessrestriction_groups USING btree (accessrestriction_id);
+
+
+--
+-- Name: mapdata_altitudearea_level_id_b1320e34; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_altitudearea_level_id_b1320e34 ON public.mapdata_altitudearea USING btree (level_id);
+
+
+--
+-- Name: mapdata_altitudemarker_groundaltitude_id_13c52aa1; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_altitudemarker_groundaltitude_id_13c52aa1 ON public.mapdata_altitudemarker USING btree (groundaltitude_id);
+
+
+--
+-- Name: mapdata_altitudemarker_space_id_cea7cf47; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_altitudemarker_space_id_cea7cf47 ON public.mapdata_altitudemarker USING btree (space_id);
+
+
+--
+-- Name: mapdata_area_access_restriction_id_a549eda1; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_area_access_restriction_id_a549eda1 ON public.mapdata_area USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_area_groups_area_id_68ea7b48; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_area_groups_area_id_68ea7b48 ON public.mapdata_area_groups USING btree (area_id);
+
+
+--
+-- Name: mapdata_area_groups_locationgroup_id_8cc32166; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_area_groups_locationgroup_id_8cc32166 ON public.mapdata_area_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_area_label_settings_id_7ccf6168; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_area_label_settings_id_7ccf6168 ON public.mapdata_area USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_area_space_id_c0461a4c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_area_space_id_c0461a4c ON public.mapdata_area USING btree (space_id);
+
+
+--
+-- Name: mapdata_building_level_id_0e322f7a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_building_level_id_0e322f7a ON public.mapdata_building USING btree (level_id);
+
+
+--
+-- Name: mapdata_column_access_restriction_id_e09dd08f; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_column_access_restriction_id_e09dd08f ON public.mapdata_column USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_column_space_id_4f64c0d4; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_column_space_id_4f64c0d4 ON public.mapdata_column USING btree (space_id);
+
+
+--
+-- Name: mapdata_crossdescription_origin_space_id_88f8ef46; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_crossdescription_origin_space_id_88f8ef46 ON public.mapdata_crossdescription USING btree (origin_space_id);
+
+
+--
+-- Name: mapdata_crossdescription_space_id_5b117c2d; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_crossdescription_space_id_5b117c2d ON public.mapdata_crossdescription USING btree (space_id);
+
+
+--
+-- Name: mapdata_crossdescription_target_space_id_8f82991b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_crossdescription_target_space_id_8f82991b ON public.mapdata_crossdescription USING btree (target_space_id);
+
+
+--
+-- Name: mapdata_door_access_restriction_id_2bfd4081; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_door_access_restriction_id_2bfd4081 ON public.mapdata_door USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_door_level_id_f6d894b2; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_door_level_id_f6d894b2 ON public.mapdata_door USING btree (level_id);
+
+
+--
+-- Name: mapdata_dynamiclocation_access_restriction_id_aadb0fd6; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_dynamiclocation_access_restriction_id_aadb0fd6 ON public.mapdata_dynamiclocation USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups_dynamiclocation_id_e7af76aa; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_dynamiclocation_groups_dynamiclocation_id_e7af76aa ON public.mapdata_dynamiclocation_groups USING btree (dynamiclocation_id);
+
+
+--
+-- Name: mapdata_dynamiclocation_groups_locationgroup_id_3212157f; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_dynamiclocation_groups_locationgroup_id_3212157f ON public.mapdata_dynamiclocation_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_dynamiclocation_label_settings_id_3ae9d026; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_dynamiclocation_label_settings_id_3ae9d026 ON public.mapdata_dynamiclocation USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_graphedge_access_restriction_id_cccddf9b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_graphedge_access_restriction_id_cccddf9b ON public.mapdata_graphedge USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_graphedge_from_node_id_98a76645; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_graphedge_from_node_id_98a76645 ON public.mapdata_graphedge USING btree (from_node_id);
+
+
+--
+-- Name: mapdata_graphedge_to_node_id_ba97ebb9; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_graphedge_to_node_id_ba97ebb9 ON public.mapdata_graphedge USING btree (to_node_id);
+
+
+--
+-- Name: mapdata_graphedge_waytype_id_2f0d449d; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_graphedge_waytype_id_2f0d449d ON public.mapdata_graphedge USING btree (waytype_id);
+
+
+--
+-- Name: mapdata_graphnode_space_id_6c55bd00; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_graphnode_space_id_6c55bd00 ON public.mapdata_graphnode USING btree (space_id);
+
+
+--
+-- Name: mapdata_groundaltitude_name_cf324830_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_groundaltitude_name_cf324830_like ON public.mapdata_groundaltitude USING btree (name varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_hole_space_id_20336b94; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_hole_space_id_20336b94 ON public.mapdata_hole USING btree (space_id);
+
+
+--
+-- Name: mapdata_leavedescription_space_id_33695534; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_leavedescription_space_id_33695534 ON public.mapdata_leavedescription USING btree (space_id);
+
+
+--
+-- Name: mapdata_leavedescription_target_space_id_31053028; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_leavedescription_target_space_id_31053028 ON public.mapdata_leavedescription USING btree (target_space_id);
+
+
+--
+-- Name: mapdata_level_access_restriction_id_22d67a77; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_access_restriction_id_22d67a77 ON public.mapdata_level USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_level_groups_level_id_e60fa7db; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_groups_level_id_e60fa7db ON public.mapdata_level_groups USING btree (level_id);
+
+
+--
+-- Name: mapdata_level_groups_locationgroup_id_b712e10d; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_groups_locationgroup_id_b712e10d ON public.mapdata_level_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_level_label_settings_id_6617bb7b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_label_settings_id_6617bb7b ON public.mapdata_level USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_level_on_top_of_id_10a0cb32; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_on_top_of_id_10a0cb32 ON public.mapdata_level USING btree (on_top_of_id);
+
+
+--
+-- Name: mapdata_level_short_label_4b45d051_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_level_short_label_4b45d051_like ON public.mapdata_level USING btree (short_label varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_lineobstacle_group_id_62d35458; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_lineobstacle_group_id_62d35458 ON public.mapdata_lineobstacle USING btree (group_id);
+
+
+--
+-- Name: mapdata_lineobstacle_space_id_b9ab6bf6; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_lineobstacle_space_id_b9ab6bf6 ON public.mapdata_lineobstacle USING btree (space_id);
+
+
+--
+-- Name: mapdata_locationgroup_access_restriction_id_0f7d4828; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_access_restriction_id_0f7d4828 ON public.mapdata_locationgroup USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_locationgroup_category_id_96775229; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_category_id_96775229 ON public.mapdata_locationgroup USING btree (category_id);
+
+
+--
+-- Name: mapdata_locationgroup_hierarchy_accf714c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_hierarchy_accf714c ON public.mapdata_locationgroup USING btree (hierarchy);
+
+
+--
+-- Name: mapdata_locationgroup_hub_import_type_4926843d_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_hub_import_type_4926843d_like ON public.mapdata_locationgroup USING btree (hub_import_type varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_locationgroup_label_settings_id_bc60e3cf; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_label_settings_id_bc60e3cf ON public.mapdata_locationgroup USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_locationgroup_priority_44e13f62; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroup_priority_44e13f62 ON public.mapdata_locationgroup USING btree (priority);
+
+
+--
+-- Name: mapdata_locationgroupcategory_allow_areas_68afeb0a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_allow_areas_68afeb0a ON public.mapdata_locationgroupcategory USING btree (allow_areas);
+
+
+--
+-- Name: mapdata_locationgroupcategory_allow_dynamic_locations_ced914d1; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_allow_dynamic_locations_ced914d1 ON public.mapdata_locationgroupcategory USING btree (allow_dynamic_locations);
+
+
+--
+-- Name: mapdata_locationgroupcategory_allow_levels_fcf0f4ee; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_allow_levels_fcf0f4ee ON public.mapdata_locationgroupcategory USING btree (allow_levels);
+
+
+--
+-- Name: mapdata_locationgroupcategory_allow_pois_4efc5134; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_allow_pois_4efc5134 ON public.mapdata_locationgroupcategory USING btree (allow_pois);
+
+
+--
+-- Name: mapdata_locationgroupcategory_allow_spaces_1085c8dd; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_allow_spaces_1085c8dd ON public.mapdata_locationgroupcategory USING btree (allow_spaces);
+
+
+--
+-- Name: mapdata_locationgroupcategory_name_5b0451cf_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_name_5b0451cf_like ON public.mapdata_locationgroupcategory USING btree (name varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_locationgroupcategory_priority_a21c67cd; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationgroupcategory_priority_a21c67cd ON public.mapdata_locationgroupcategory USING btree (priority);
+
+
+--
+-- Name: mapdata_locationredirect_target_id_29d1b3d7; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationredirect_target_id_29d1b3d7 ON public.mapdata_locationredirect USING btree (target_id);
+
+
+--
+-- Name: mapdata_locationslug_slug_1c195013_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_locationslug_slug_1c195013_like ON public.mapdata_locationslug USING btree (slug varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_mapupdate_datetime_750ec913; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_mapupdate_datetime_750ec913 ON public.mapdata_mapupdate USING btree (datetime);
+
+
+--
+-- Name: mapdata_mapupdate_user_id_faec6f5a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_mapupdate_user_id_faec6f5a ON public.mapdata_mapupdate USING btree (user_id);
+
+
+--
+-- Name: mapdata_obstacle_group_id_a59d9b9b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_obstacle_group_id_a59d9b9b ON public.mapdata_obstacle USING btree (group_id);
+
+
+--
+-- Name: mapdata_obstacle_space_id_0aa1260c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_obstacle_space_id_0aa1260c ON public.mapdata_obstacle USING btree (space_id);
+
+
+--
+-- Name: mapdata_poi_access_restriction_id_a6d0faf9; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_poi_access_restriction_id_a6d0faf9 ON public.mapdata_poi USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_poi_groups_locationgroup_id_46758a1e; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_poi_groups_locationgroup_id_46758a1e ON public.mapdata_poi_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_poi_groups_poi_id_a7128a8c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_poi_groups_poi_id_a7128a8c ON public.mapdata_poi_groups USING btree (poi_id);
+
+
+--
+-- Name: mapdata_poi_label_settings_id_18a6c1cf; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_poi_label_settings_id_18a6c1cf ON public.mapdata_poi USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_poi_space_id_dcb9f571; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_poi_space_id_dcb9f571 ON public.mapdata_poi USING btree (space_id);
+
+
+--
+-- Name: mapdata_position_owner_id_8ad6b67c; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_position_owner_id_8ad6b67c ON public.mapdata_position USING btree (owner_id);
+
+
+--
+-- Name: mapdata_position_secret_fef1b916_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_position_secret_fef1b916_like ON public.mapdata_position USING btree (secret varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_ramp_space_id_e6f57e61; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_ramp_space_id_e6f57e61 ON public.mapdata_ramp USING btree (space_id);
+
+
+--
+-- Name: mapdata_rangingbeacon_bluetooth_address_20e06b93_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_rangingbeacon_bluetooth_address_20e06b93_like ON public.mapdata_rangingbeacon USING btree (bluetooth_address varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_rangingbeacon_bssid_e2cf3255_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_rangingbeacon_bssid_e2cf3255_like ON public.mapdata_rangingbeacon USING btree (wifi_bssid varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_rangingbeacon_space_id_2c6b1efe; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_rangingbeacon_space_id_2c6b1efe ON public.mapdata_rangingbeacon USING btree (space_id);
+
+
+--
+-- Name: mapdata_rangingbeacon_uwb_address_9d8771d7_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_rangingbeacon_uwb_address_9d8771d7_like ON public.mapdata_rangingbeacon USING btree (uwb_address varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_report_assigned_to_id_fd3a8aab; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_assigned_to_id_fd3a8aab ON public.mapdata_report USING btree (assigned_to_id);
+
+
+--
+-- Name: mapdata_report_author_id_1dd5fc14; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_author_id_1dd5fc14 ON public.mapdata_report USING btree (author_id);
+
+
+--
+-- Name: mapdata_report_category_b3157148; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_category_b3157148 ON public.mapdata_report USING btree (category);
+
+
+--
+-- Name: mapdata_report_category_b3157148_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_category_b3157148_like ON public.mapdata_report USING btree (category varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_report_created_groups_locationgroup_id_07a66aea; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_created_groups_locationgroup_id_07a66aea ON public.mapdata_report_created_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_report_created_groups_report_id_e8da1176; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_created_groups_report_id_e8da1176 ON public.mapdata_report_created_groups USING btree (report_id);
+
+
+--
+-- Name: mapdata_report_location_id_a1b9eef3; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_report_location_id_a1b9eef3 ON public.mapdata_report USING btree (location_id);
+
+
+--
+-- Name: mapdata_reportupdate_assigned_to_id_7af867b4; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_reportupdate_assigned_to_id_7af867b4 ON public.mapdata_reportupdate USING btree (assigned_to_id);
+
+
+--
+-- Name: mapdata_reportupdate_author_id_b0e6e04b; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_reportupdate_author_id_b0e6e04b ON public.mapdata_reportupdate USING btree (author_id);
+
+
+--
+-- Name: mapdata_reportupdate_report_id_ac2b4e37; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_reportupdate_report_id_ac2b4e37 ON public.mapdata_reportupdate USING btree (report_id);
+
+
+--
+-- Name: mapdata_source_access_restriction_id_10e0a307; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_source_access_restriction_id_10e0a307 ON public.mapdata_source USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_source_name_626b3547_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_source_name_626b3547_like ON public.mapdata_source USING btree (name varchar_pattern_ops);
+
+
+--
+-- Name: mapdata_space_access_restriction_id_c295dd70; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_space_access_restriction_id_c295dd70 ON public.mapdata_space USING btree (access_restriction_id);
+
+
+--
+-- Name: mapdata_space_groups_locationgroup_id_352f0e89; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_space_groups_locationgroup_id_352f0e89 ON public.mapdata_space_groups USING btree (locationgroup_id);
+
+
+--
+-- Name: mapdata_space_groups_space_id_d9bb3827; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_space_groups_space_id_d9bb3827 ON public.mapdata_space_groups USING btree (space_id);
+
+
+--
+-- Name: mapdata_space_label_settings_id_b26b4945; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_space_label_settings_id_b26b4945 ON public.mapdata_space USING btree (label_settings_id);
+
+
+--
+-- Name: mapdata_space_level_id_b635bbeb; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_space_level_id_b635bbeb ON public.mapdata_space USING btree (level_id);
+
+
+--
+-- Name: mapdata_stair_space_id_6dd3ccb0; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_stair_space_id_6dd3ccb0 ON public.mapdata_stair USING btree (space_id);
+
+
+--
+-- Name: mapdata_themelocationgroup_location_group_id_2b664e23; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_themelocationgroup_location_group_id_2b664e23 ON public.mapdata_themelocationgroupbackgroundcolor USING btree (location_group_id);
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor_theme_id_9baff4da; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_themelocationgroupbackgroundcolor_theme_id_9baff4da ON public.mapdata_themelocationgroupbackgroundcolor USING btree (theme_id);
+
+
+--
+-- Name: mapdata_themeobstaclegroup_obstacle_group_id_6a51b028; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_themeobstaclegroup_obstacle_group_id_6a51b028 ON public.mapdata_themeobstaclegroupbackgroundcolor USING btree (obstacle_group_id);
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor_theme_id_629c5bc7; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_themeobstaclegroupbackgroundcolor_theme_id_629c5bc7 ON public.mapdata_themeobstaclegroupbackgroundcolor USING btree (theme_id);
+
+
+--
+-- Name: mapdata_wifimeasurement_author_id_e4b5352e; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_wifimeasurement_author_id_e4b5352e ON public.mapdata_beaconmeasurement USING btree (author_id);
+
+
+--
+-- Name: mapdata_wifimeasurement_space_id_1d127e47; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mapdata_wifimeasurement_space_id_1d127e47 ON public.mapdata_beaconmeasurement USING btree (space_id);
+
+
+--
+-- Name: mesh_firmwarebuild_chip_f56e2ddf; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuild_chip_f56e2ddf ON public.mesh_firmwarebuild USING btree (chip);
+
+
+--
+-- Name: mesh_firmwarebuild_sha256_hash_627d7144_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuild_sha256_hash_627d7144_like ON public.mesh_firmwarebuild USING btree (sha256_hash varchar_pattern_ops);
+
+
+--
+-- Name: mesh_firmwarebuild_version_id_93e4b318; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuild_version_id_93e4b318 ON public.mesh_firmwarebuild USING btree (version_id);
+
+
+--
+-- Name: mesh_firmwarebuildboard_board_711484ba; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuildboard_board_711484ba ON public.mesh_firmwarebuildboard USING btree (board);
+
+
+--
+-- Name: mesh_firmwarebuildboard_board_711484ba_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuildboard_board_711484ba_like ON public.mesh_firmwarebuildboard USING btree (board varchar_pattern_ops);
+
+
+--
+-- Name: mesh_firmwarebuildboard_build_id_902517a9; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwarebuildboard_build_id_902517a9 ON public.mesh_firmwarebuildboard USING btree (build_id);
+
+
+--
+-- Name: mesh_firmwareversion_uploader_id_30c14fe3; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwareversion_uploader_id_30c14fe3 ON public.mesh_firmwareversion USING btree (uploader_id);
+
+
+--
+-- Name: mesh_firmwareversion_version_5d057b34_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_firmwareversion_version_5d057b34_like ON public.mesh_firmwareversion USING btree (version varchar_pattern_ops);
+
+
+--
+-- Name: mesh_meshnode_address_bbb2a884_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshnode_address_bbb2a884_like ON public.mesh_meshnode USING btree (address varchar_pattern_ops);
+
+
+--
+-- Name: mesh_meshnode_uplink_id_cf6b04db; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshnode_uplink_id_cf6b04db ON public.mesh_meshnode USING btree (uplink_id);
+
+
+--
+-- Name: mesh_meshnode_upstream_id_c946622a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshnode_upstream_id_c946622a ON public.mesh_meshnode USING btree (upstream_id);
+
+
+--
+-- Name: mesh_meshnode_upstream_id_c946622a_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshnode_upstream_id_c946622a_like ON public.mesh_meshnode USING btree (upstream_id varchar_pattern_ops);
+
+
+--
+-- Name: mesh_meshuplink_node_id_e0c94b45; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshuplink_node_id_e0c94b45 ON public.mesh_meshuplink USING btree (node_id);
+
+
+--
+-- Name: mesh_meshuplink_node_id_e0c94b45_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_meshuplink_node_id_e0c94b45_like ON public.mesh_meshuplink USING btree (node_id varchar_pattern_ops);
+
+
+--
+-- Name: mesh_nodemessage_datetime_5b8e7dce; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_datetime_5b8e7dce ON public.mesh_nodemessage USING btree (datetime);
+
+
+--
+-- Name: mesh_nodemessage_message_type_17e37336; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_message_type_17e37336 ON public.mesh_nodemessage USING btree (message_type);
+
+
+--
+-- Name: mesh_nodemessage_message_type_17e37336_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_message_type_17e37336_like ON public.mesh_nodemessage USING btree (message_type varchar_pattern_ops);
+
+
+--
+-- Name: mesh_nodemessage_src_node_id_2754ac40; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_src_node_id_2754ac40 ON public.mesh_nodemessage USING btree (src_node_id);
+
+
+--
+-- Name: mesh_nodemessage_src_node_id_2754ac40_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_src_node_id_2754ac40_like ON public.mesh_nodemessage USING btree (src_node_id varchar_pattern_ops);
+
+
+--
+-- Name: mesh_nodemessage_uplink_id_22f38887; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_nodemessage_uplink_id_22f38887 ON public.mesh_nodemessage USING btree (uplink_id);
+
+
+--
+-- Name: mesh_otaupdate_build_id_af114c77; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_otaupdate_build_id_af114c77 ON public.mesh_otaupdate USING btree (build_id);
+
+
+--
+-- Name: mesh_otaupdaterecipient_node_id_0fd5e307; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_otaupdaterecipient_node_id_0fd5e307 ON public.mesh_otaupdaterecipient USING btree (node_id);
+
+
+--
+-- Name: mesh_otaupdaterecipient_node_id_0fd5e307_like; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_otaupdaterecipient_node_id_0fd5e307_like ON public.mesh_otaupdaterecipient USING btree (node_id varchar_pattern_ops);
+
+
+--
+-- Name: mesh_otaupdaterecipient_update_id_95637e8a; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX mesh_otaupdaterecipient_update_id_95637e8a ON public.mesh_otaupdaterecipient USING btree (update_id);
+
+
+--
+-- Name: only_one_active_ota; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX only_one_active_ota ON public.mesh_otaupdaterecipient USING btree (node_id) WHERE ((status)::text = 'running'::text);
+
+
+--
+-- Name: only_one_active_uplink; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE UNIQUE INDEX only_one_active_uplink ON public.mesh_meshuplink USING btree (node_id) WHERE (end_reason IS NULL);
+
+
+--
+-- Name: site_announcement_author_id_136858c5; Type: INDEX; Schema: public; Owner: -
+--
+
+CREATE INDEX site_announcement_author_id_136858c5 ON public.site_announcement USING btree (author_id);
+
+
+--
+-- Name: api_secret api_secret_user_id_74e5b7a6_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_secret
+ ADD CONSTRAINT api_secret_user_id_74e5b7a6_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: api_logintoken api_token_user_id_b646d2e7_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.api_logintoken
+ ADD CONSTRAINT api_token_user_id_b646d2e7_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_group_permissions auth_group_permissio_permission_id_84c5c92e_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group_permissions
+ ADD CONSTRAINT auth_group_permissio_permission_id_84c5c92e_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_group_permissions auth_group_permissions_group_id_b120cbf9_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_group_permissions
+ ADD CONSTRAINT auth_group_permissions_group_id_b120cbf9_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_permission auth_permission_content_type_id_2f476e4b_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_permission
+ ADD CONSTRAINT auth_permission_content_type_id_2f476e4b_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_user_groups auth_user_groups_group_id_97559544_fk_auth_group_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_groups
+ ADD CONSTRAINT auth_user_groups_group_id_97559544_fk_auth_group_id FOREIGN KEY (group_id) REFERENCES public.auth_group(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_user_groups auth_user_groups_user_id_6a12ed8b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_groups
+ ADD CONSTRAINT auth_user_groups_user_id_6a12ed8b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_user_user_permissions auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_user_permissions
+ ADD CONSTRAINT auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm FOREIGN KEY (permission_id) REFERENCES public.auth_permission(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: auth_user_user_permissions auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.auth_user_user_permissions
+ ADD CONSTRAINT auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: control_userpermissions_review_group_reports control_userpermissi_locationgroup_id_96a3102b_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions_review_group_reports
+ ADD CONSTRAINT control_userpermissi_locationgroup_id_96a3102b_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: control_userpermissions_review_group_reports control_userpermissi_userpermissions_id_3d2fb35b_fk_control_u; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions_review_group_reports
+ ADD CONSTRAINT control_userpermissi_userpermissions_id_3d2fb35b_fk_control_u FOREIGN KEY (userpermissions_id) REFERENCES public.control_userpermissions(user_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: control_userpermissions control_userpermissions_user_id_6003ff4e_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userpermissions
+ ADD CONSTRAINT control_userpermissions_user_id_6003ff4e_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: control_userspaceaccess control_userspaceacc_space_id_c22914b2_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userspaceaccess
+ ADD CONSTRAINT control_userspaceacc_space_id_c22914b2_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: control_userspaceaccess control_userspaceaccess_user_id_4ad6da16_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.control_userspaceaccess
+ ADD CONSTRAINT control_userspaceaccess_user_id_4ad6da16_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: django_admin_log django_admin_log_content_type_id_c4bce8eb_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_admin_log
+ ADD CONSTRAINT django_admin_log_content_type_id_c4bce8eb_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: django_admin_log django_admin_log_user_id_c564eba6_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.django_admin_log
+ ADD CONSTRAINT django_admin_log_user_id_c564eba6_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changedobject editor_changedobject_changeset_id_0692bc40_fk_editor_ch; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changedobject
+ ADD CONSTRAINT editor_changedobject_changeset_id_0692bc40_fk_editor_ch FOREIGN KEY (changeset_id) REFERENCES public.editor_changeset(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changedobject editor_changedobject_content_type_id_aa981231_fk_django_co; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changedobject
+ ADD CONSTRAINT editor_changedobject_content_type_id_aa981231_fk_django_co FOREIGN KEY (content_type_id) REFERENCES public.django_content_type(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_assigned_to_id_3afcfbb7_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_assigned_to_id_3afcfbb7_fk_auth_user_id FOREIGN KEY (assigned_to_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_author_id_f4bf3c7f_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_author_id_f4bf3c7f_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_last_change_id_5be51ccf_fk_editor_ch; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_last_change_id_5be51ccf_fk_editor_ch FOREIGN KEY (last_change_id) REFERENCES public.editor_changesetupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_last_cleaned_with_id_d5214743_fk_mapdata_m; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_last_cleaned_with_id_d5214743_fk_mapdata_m FOREIGN KEY (last_cleaned_with_id) REFERENCES public.mapdata_mapupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_last_state_update_id_292a8530_fk_editor_ch; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_last_state_update_id_292a8530_fk_editor_ch FOREIGN KEY (last_state_update_id) REFERENCES public.editor_changesetupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_last_update_id_e0d77297_fk_editor_ch; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_last_update_id_e0d77297_fk_editor_ch FOREIGN KEY (last_update_id) REFERENCES public.editor_changesetupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changeset editor_changeset_map_update_id_aaecae3b_fk_mapdata_mapupdate_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changeset
+ ADD CONSTRAINT editor_changeset_map_update_id_aaecae3b_fk_mapdata_mapupdate_id FOREIGN KEY (map_update_id) REFERENCES public.mapdata_mapupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changesetupdate editor_changesetupda_changeset_id_aedbc5fb_fk_editor_ch; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changesetupdate
+ ADD CONSTRAINT editor_changesetupda_changeset_id_aedbc5fb_fk_editor_ch FOREIGN KEY (changeset_id) REFERENCES public.editor_changeset(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changesetupdate editor_changesetupdate_assigned_to_id_373deb2a_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changesetupdate
+ ADD CONSTRAINT editor_changesetupdate_assigned_to_id_373deb2a_fk_auth_user_id FOREIGN KEY (assigned_to_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: editor_changesetupdate editor_changesetupdate_user_id_cd2202c2_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.editor_changesetupdate
+ ADD CONSTRAINT editor_changesetupdate_user_id_cd2202c2_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermis_access_restriction_g_194c451d_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermis_access_restriction_g_194c451d_fk_mapdata_a FOREIGN KEY (access_restriction_group_id) REFERENCES public.mapdata_accessrestrictiongroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermissionssogrant mapdata_accesspermis_access_restriction_g_960b8494_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissionssogrant
+ ADD CONSTRAINT mapdata_accesspermis_access_restriction_g_960b8494_fk_mapdata_a FOREIGN KEY (access_restriction_group_id) REFERENCES public.mapdata_accessrestrictiongroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermis_access_restriction_i_6cf436d8_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermis_access_restriction_i_6cf436d8_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermissionssogrant mapdata_accesspermis_access_restriction_i_d94eb926_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissionssogrant
+ ADD CONSTRAINT mapdata_accesspermis_access_restriction_i_d94eb926_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermissiontoken mapdata_accesspermis_author_id_4ae5d792_fk_auth_user; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermissiontoken
+ ADD CONSTRAINT mapdata_accesspermis_author_id_4ae5d792_fk_auth_user FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermis_sso_grant_id_425b2515_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermis_sso_grant_id_425b2515_fk_mapdata_a FOREIGN KEY (sso_grant_id) REFERENCES public.mapdata_accesspermissionssogrant(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermis_token_id_e3647d7b_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermis_token_id_e3647d7b_fk_mapdata_a FOREIGN KEY (token_id) REFERENCES public.mapdata_accesspermissiontoken(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermission_author_id_f42ef447_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermission_author_id_f42ef447_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accesspermission mapdata_accesspermission_user_id_0160fe04_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accesspermission
+ ADD CONSTRAINT mapdata_accesspermission_user_id_0160fe04_fk_auth_user_id FOREIGN KEY (user_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accessrestriction_groups mapdata_accessrestri_accessrestriction_id_c6318580_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestriction_groups
+ ADD CONSTRAINT mapdata_accessrestri_accessrestriction_id_c6318580_fk_mapdata_a FOREIGN KEY (accessrestriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_accessrestriction_groups mapdata_accessrestri_accessrestrictiongro_fcb1eea5_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_accessrestriction_groups
+ ADD CONSTRAINT mapdata_accessrestri_accessrestrictiongro_fcb1eea5_fk_mapdata_a FOREIGN KEY (accessrestrictiongroup_id) REFERENCES public.mapdata_accessrestrictiongroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_altitudearea mapdata_altitudearea_level_id_b1320e34_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_altitudearea
+ ADD CONSTRAINT mapdata_altitudearea_level_id_b1320e34_fk_mapdata_l FOREIGN KEY (level_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_altitudemarker mapdata_altitudemark_groundaltitude_id_13c52aa1_fk_mapdata_g; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_altitudemarker
+ ADD CONSTRAINT mapdata_altitudemark_groundaltitude_id_13c52aa1_fk_mapdata_g FOREIGN KEY (groundaltitude_id) REFERENCES public.mapdata_groundaltitude(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_altitudemarker mapdata_altitudemark_space_id_cea7cf47_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_altitudemarker
+ ADD CONSTRAINT mapdata_altitudemark_space_id_cea7cf47_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area mapdata_area_access_restriction_i_a549eda1_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area
+ ADD CONSTRAINT mapdata_area_access_restriction_i_a549eda1_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area_groups mapdata_area_groups_area_id_68ea7b48_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area_groups
+ ADD CONSTRAINT mapdata_area_groups_area_id_68ea7b48_fk_mapdata_a FOREIGN KEY (area_id) REFERENCES public.mapdata_area(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area_groups mapdata_area_groups_locationgroup_id_8cc32166_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area_groups
+ ADD CONSTRAINT mapdata_area_groups_locationgroup_id_8cc32166_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area mapdata_area_label_settings_id_7ccf6168_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area
+ ADD CONSTRAINT mapdata_area_label_settings_id_7ccf6168_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area mapdata_area_locationslug_ptr_id_41901eb8_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area
+ ADD CONSTRAINT mapdata_area_locationslug_ptr_id_41901eb8_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_area mapdata_area_space_id_c0461a4c_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_area
+ ADD CONSTRAINT mapdata_area_space_id_c0461a4c_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_building mapdata_building_level_id_0e322f7a_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_building
+ ADD CONSTRAINT mapdata_building_level_id_0e322f7a_fk_mapdata_l FOREIGN KEY (level_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_column mapdata_column_access_restriction_i_e09dd08f_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_column
+ ADD CONSTRAINT mapdata_column_access_restriction_i_e09dd08f_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_column mapdata_column_space_id_4f64c0d4_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_column
+ ADD CONSTRAINT mapdata_column_space_id_4f64c0d4_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_crossdescription mapdata_crossdescrip_origin_space_id_88f8ef46_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_crossdescription
+ ADD CONSTRAINT mapdata_crossdescrip_origin_space_id_88f8ef46_fk_mapdata_s FOREIGN KEY (origin_space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_crossdescription mapdata_crossdescrip_space_id_5b117c2d_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_crossdescription
+ ADD CONSTRAINT mapdata_crossdescrip_space_id_5b117c2d_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_crossdescription mapdata_crossdescrip_target_space_id_8f82991b_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_crossdescription
+ ADD CONSTRAINT mapdata_crossdescrip_target_space_id_8f82991b_fk_mapdata_s FOREIGN KEY (target_space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_door mapdata_door_access_restriction_i_2bfd4081_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_door
+ ADD CONSTRAINT mapdata_door_access_restriction_i_2bfd4081_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_door mapdata_door_level_id_f6d894b2_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_door
+ ADD CONSTRAINT mapdata_door_level_id_f6d894b2_fk_mapdata_l FOREIGN KEY (level_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_dynamiclocation mapdata_dynamiclocat_access_restriction_i_aadb0fd6_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation
+ ADD CONSTRAINT mapdata_dynamiclocat_access_restriction_i_aadb0fd6_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_dynamiclocation_groups mapdata_dynamiclocat_dynamiclocation_id_e7af76aa_fk_mapdata_d; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation_groups
+ ADD CONSTRAINT mapdata_dynamiclocat_dynamiclocation_id_e7af76aa_fk_mapdata_d FOREIGN KEY (dynamiclocation_id) REFERENCES public.mapdata_dynamiclocation(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_dynamiclocation mapdata_dynamiclocat_label_settings_id_3ae9d026_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation
+ ADD CONSTRAINT mapdata_dynamiclocat_label_settings_id_3ae9d026_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_dynamiclocation_groups mapdata_dynamiclocat_locationgroup_id_3212157f_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation_groups
+ ADD CONSTRAINT mapdata_dynamiclocat_locationgroup_id_3212157f_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_dynamiclocation mapdata_dynamiclocat_locationslug_ptr_id_d18ebf9f_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_dynamiclocation
+ ADD CONSTRAINT mapdata_dynamiclocat_locationslug_ptr_id_d18ebf9f_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_access_restriction_i_cccddf9b_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_access_restriction_i_cccddf9b_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_from_node_id_98a76645_fk_mapdata_graphnode_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_from_node_id_98a76645_fk_mapdata_graphnode_id FOREIGN KEY (from_node_id) REFERENCES public.mapdata_graphnode(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_to_node_id_ba97ebb9_fk_mapdata_graphnode_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_to_node_id_ba97ebb9_fk_mapdata_graphnode_id FOREIGN KEY (to_node_id) REFERENCES public.mapdata_graphnode(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_graphedge mapdata_graphedge_waytype_id_2f0d449d_fk_mapdata_waytype_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphedge
+ ADD CONSTRAINT mapdata_graphedge_waytype_id_2f0d449d_fk_mapdata_waytype_id FOREIGN KEY (waytype_id) REFERENCES public.mapdata_waytype(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_graphnode mapdata_graphnode_space_id_6c55bd00_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_graphnode
+ ADD CONSTRAINT mapdata_graphnode_space_id_6c55bd00_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_hole mapdata_hole_space_id_20336b94_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_hole
+ ADD CONSTRAINT mapdata_hole_space_id_20336b94_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_leavedescription mapdata_leavedescrip_space_id_33695534_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_leavedescription
+ ADD CONSTRAINT mapdata_leavedescrip_space_id_33695534_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_leavedescription mapdata_leavedescrip_target_space_id_31053028_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_leavedescription
+ ADD CONSTRAINT mapdata_leavedescrip_target_space_id_31053028_fk_mapdata_s FOREIGN KEY (target_space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level mapdata_level_access_restriction_i_22d67a77_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_access_restriction_i_22d67a77_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level_groups mapdata_level_groups_level_id_e60fa7db_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level_groups
+ ADD CONSTRAINT mapdata_level_groups_level_id_e60fa7db_fk_mapdata_l FOREIGN KEY (level_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level_groups mapdata_level_groups_locationgroup_id_b712e10d_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level_groups
+ ADD CONSTRAINT mapdata_level_groups_locationgroup_id_b712e10d_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level mapdata_level_label_settings_id_6617bb7b_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_label_settings_id_6617bb7b_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level mapdata_level_locationslug_ptr_id_ba5858ed_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_locationslug_ptr_id_ba5858ed_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_level mapdata_level_on_top_of_id_10a0cb32_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_level
+ ADD CONSTRAINT mapdata_level_on_top_of_id_10a0cb32_fk_mapdata_l FOREIGN KEY (on_top_of_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_lineobstacle mapdata_lineobstacle_group_id_62d35458_fk_mapdata_o; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_lineobstacle
+ ADD CONSTRAINT mapdata_lineobstacle_group_id_62d35458_fk_mapdata_o FOREIGN KEY (group_id) REFERENCES public.mapdata_obstaclegroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_lineobstacle mapdata_lineobstacle_space_id_b9ab6bf6_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_lineobstacle
+ ADD CONSTRAINT mapdata_lineobstacle_space_id_b9ab6bf6_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgrou_access_restriction_i_0f7d4828_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgrou_access_restriction_i_0f7d4828_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgrou_category_id_96775229_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgrou_category_id_96775229_fk_mapdata_l FOREIGN KEY (category_id) REFERENCES public.mapdata_locationgroupcategory(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgrou_label_settings_id_bc60e3cf_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgrou_label_settings_id_bc60e3cf_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationgroup mapdata_locationgrou_locationslug_ptr_id_5f0e4ebb_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationgroup
+ ADD CONSTRAINT mapdata_locationgrou_locationslug_ptr_id_5f0e4ebb_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationredirect mapdata_locationredi_locationslug_ptr_id_81cda0c9_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationredirect
+ ADD CONSTRAINT mapdata_locationredi_locationslug_ptr_id_81cda0c9_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_locationredirect mapdata_locationredi_target_id_29d1b3d7_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_locationredirect
+ ADD CONSTRAINT mapdata_locationredi_target_id_29d1b3d7_fk_mapdata_l FOREIGN KEY (target_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_obstacle mapdata_obstacle_group_id_a59d9b9b_fk_mapdata_obstaclegroup_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_obstacle
+ ADD CONSTRAINT mapdata_obstacle_group_id_a59d9b9b_fk_mapdata_obstaclegroup_id FOREIGN KEY (group_id) REFERENCES public.mapdata_obstaclegroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_obstacle mapdata_obstacle_space_id_0aa1260c_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_obstacle
+ ADD CONSTRAINT mapdata_obstacle_space_id_0aa1260c_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi mapdata_poi_access_restriction_i_a6d0faf9_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi
+ ADD CONSTRAINT mapdata_poi_access_restriction_i_a6d0faf9_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi_groups mapdata_poi_groups_locationgroup_id_46758a1e_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi_groups
+ ADD CONSTRAINT mapdata_poi_groups_locationgroup_id_46758a1e_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi_groups mapdata_poi_groups_poi_id_a7128a8c_fk_mapdata_p; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi_groups
+ ADD CONSTRAINT mapdata_poi_groups_poi_id_a7128a8c_fk_mapdata_p FOREIGN KEY (poi_id) REFERENCES public.mapdata_poi(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi mapdata_poi_label_settings_id_18a6c1cf_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi
+ ADD CONSTRAINT mapdata_poi_label_settings_id_18a6c1cf_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi mapdata_poi_locationslug_ptr_id_22498ca8_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi
+ ADD CONSTRAINT mapdata_poi_locationslug_ptr_id_22498ca8_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_poi mapdata_poi_space_id_dcb9f571_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_poi
+ ADD CONSTRAINT mapdata_poi_space_id_dcb9f571_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_position mapdata_position_owner_id_8ad6b67c_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_position
+ ADD CONSTRAINT mapdata_position_owner_id_8ad6b67c_fk_auth_user_id FOREIGN KEY (owner_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_ramp mapdata_ramp_space_id_e6f57e61_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_ramp
+ ADD CONSTRAINT mapdata_ramp_space_id_e6f57e61_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_rangingbeacon mapdata_rangingbeaco_space_id_2c6b1efe_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_rangingbeacon
+ ADD CONSTRAINT mapdata_rangingbeaco_space_id_2c6b1efe_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_report mapdata_report_assigned_to_id_fd3a8aab_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report
+ ADD CONSTRAINT mapdata_report_assigned_to_id_fd3a8aab_fk_auth_user_id FOREIGN KEY (assigned_to_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_report mapdata_report_author_id_1dd5fc14_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report
+ ADD CONSTRAINT mapdata_report_author_id_1dd5fc14_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_report_created_groups mapdata_report_creat_locationgroup_id_07a66aea_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report_created_groups
+ ADD CONSTRAINT mapdata_report_creat_locationgroup_id_07a66aea_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_report_created_groups mapdata_report_creat_report_id_e8da1176_fk_mapdata_r; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report_created_groups
+ ADD CONSTRAINT mapdata_report_creat_report_id_e8da1176_fk_mapdata_r FOREIGN KEY (report_id) REFERENCES public.mapdata_report(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_report mapdata_report_location_id_a1b9eef3_fk_mapdata_locationslug_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_report
+ ADD CONSTRAINT mapdata_report_location_id_a1b9eef3_fk_mapdata_locationslug_id FOREIGN KEY (location_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_reportupdate mapdata_reportupdate_assigned_to_id_7af867b4_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_reportupdate
+ ADD CONSTRAINT mapdata_reportupdate_assigned_to_id_7af867b4_fk_auth_user_id FOREIGN KEY (assigned_to_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_reportupdate mapdata_reportupdate_author_id_b0e6e04b_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_reportupdate
+ ADD CONSTRAINT mapdata_reportupdate_author_id_b0e6e04b_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_reportupdate mapdata_reportupdate_report_id_ac2b4e37_fk_mapdata_report_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_reportupdate
+ ADD CONSTRAINT mapdata_reportupdate_report_id_ac2b4e37_fk_mapdata_report_id FOREIGN KEY (report_id) REFERENCES public.mapdata_report(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_source mapdata_source_access_restriction_i_10e0a307_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_source
+ ADD CONSTRAINT mapdata_source_access_restriction_i_10e0a307_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space mapdata_space_access_restriction_i_c295dd70_fk_mapdata_a; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space
+ ADD CONSTRAINT mapdata_space_access_restriction_i_c295dd70_fk_mapdata_a FOREIGN KEY (access_restriction_id) REFERENCES public.mapdata_accessrestriction(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space_groups mapdata_space_groups_locationgroup_id_352f0e89_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space_groups
+ ADD CONSTRAINT mapdata_space_groups_locationgroup_id_352f0e89_fk_mapdata_l FOREIGN KEY (locationgroup_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space_groups mapdata_space_groups_space_id_d9bb3827_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space_groups
+ ADD CONSTRAINT mapdata_space_groups_space_id_d9bb3827_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space mapdata_space_label_settings_id_b26b4945_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space
+ ADD CONSTRAINT mapdata_space_label_settings_id_b26b4945_fk_mapdata_l FOREIGN KEY (label_settings_id) REFERENCES public.mapdata_labelsettings(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space mapdata_space_level_id_b635bbeb_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space
+ ADD CONSTRAINT mapdata_space_level_id_b635bbeb_fk_mapdata_l FOREIGN KEY (level_id) REFERENCES public.mapdata_level(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_space mapdata_space_locationslug_ptr_id_228ac56f_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_space
+ ADD CONSTRAINT mapdata_space_locationslug_ptr_id_228ac56f_fk_mapdata_l FOREIGN KEY (locationslug_ptr_id) REFERENCES public.mapdata_locationslug(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_stair mapdata_stair_space_id_6dd3ccb0_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_stair
+ ADD CONSTRAINT mapdata_stair_space_id_6dd3ccb0_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor mapdata_themelocatio_location_group_id_2b664e23_fk_mapdata_l; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themelocationgroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themelocatio_location_group_id_2b664e23_fk_mapdata_l FOREIGN KEY (location_group_id) REFERENCES public.mapdata_locationgroup(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_themelocationgroupbackgroundcolor mapdata_themelocatio_theme_id_9baff4da_fk_mapdata_t; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themelocationgroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themelocatio_theme_id_9baff4da_fk_mapdata_t FOREIGN KEY (theme_id) REFERENCES public.mapdata_theme(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor mapdata_themeobstacl_obstacle_group_id_6a51b028_fk_mapdata_o; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themeobstaclegroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themeobstacl_obstacle_group_id_6a51b028_fk_mapdata_o FOREIGN KEY (obstacle_group_id) REFERENCES public.mapdata_obstaclegroup(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_themeobstaclegroupbackgroundcolor mapdata_themeobstacl_theme_id_629c5bc7_fk_mapdata_t; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_themeobstaclegroupbackgroundcolor
+ ADD CONSTRAINT mapdata_themeobstacl_theme_id_629c5bc7_fk_mapdata_t FOREIGN KEY (theme_id) REFERENCES public.mapdata_theme(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_beaconmeasurement mapdata_wifimeasurem_space_id_1d127e47_fk_mapdata_s; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_beaconmeasurement
+ ADD CONSTRAINT mapdata_wifimeasurem_space_id_1d127e47_fk_mapdata_s FOREIGN KEY (space_id) REFERENCES public.mapdata_space(locationslug_ptr_id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mapdata_beaconmeasurement mapdata_wifimeasurement_author_id_e4b5352e_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mapdata_beaconmeasurement
+ ADD CONSTRAINT mapdata_wifimeasurement_author_id_e4b5352e_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_firmwarebuild mesh_firmwarebuild_version_id_93e4b318_fk_mesh_firm; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuild
+ ADD CONSTRAINT mesh_firmwarebuild_version_id_93e4b318_fk_mesh_firm FOREIGN KEY (version_id) REFERENCES public.mesh_firmwareversion(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_firmwarebuildboard mesh_firmwarebuildbo_build_id_902517a9_fk_mesh_firm; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwarebuildboard
+ ADD CONSTRAINT mesh_firmwarebuildbo_build_id_902517a9_fk_mesh_firm FOREIGN KEY (build_id) REFERENCES public.mesh_firmwarebuild(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_firmwareversion mesh_firmwareversion_uploader_id_30c14fe3_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_firmwareversion
+ ADD CONSTRAINT mesh_firmwareversion_uploader_id_30c14fe3_fk_auth_user_id FOREIGN KEY (uploader_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_meshnode mesh_meshnode_uplink_id_cf6b04db_fk_mesh_meshuplink_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_meshnode
+ ADD CONSTRAINT mesh_meshnode_uplink_id_cf6b04db_fk_mesh_meshuplink_id FOREIGN KEY (uplink_id) REFERENCES public.mesh_meshuplink(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_meshnode mesh_meshnode_upstream_id_c946622a_fk_mesh_meshnode_address; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_meshnode
+ ADD CONSTRAINT mesh_meshnode_upstream_id_c946622a_fk_mesh_meshnode_address FOREIGN KEY (upstream_id) REFERENCES public.mesh_meshnode(address) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_meshuplink mesh_meshuplink_node_id_e0c94b45_fk_mesh_meshnode_address; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_meshuplink
+ ADD CONSTRAINT mesh_meshuplink_node_id_e0c94b45_fk_mesh_meshnode_address FOREIGN KEY (node_id) REFERENCES public.mesh_meshnode(address) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_nodemessage mesh_nodemessage_src_node_id_2754ac40_fk_mesh_meshnode_address; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_nodemessage
+ ADD CONSTRAINT mesh_nodemessage_src_node_id_2754ac40_fk_mesh_meshnode_address FOREIGN KEY (src_node_id) REFERENCES public.mesh_meshnode(address) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_nodemessage mesh_nodemessage_uplink_id_22f38887_fk_mesh_meshuplink_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_nodemessage
+ ADD CONSTRAINT mesh_nodemessage_uplink_id_22f38887_fk_mesh_meshuplink_id FOREIGN KEY (uplink_id) REFERENCES public.mesh_meshuplink(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_otaupdate mesh_otaupdate_build_id_af114c77_fk_mesh_firmwarebuild_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_otaupdate
+ ADD CONSTRAINT mesh_otaupdate_build_id_af114c77_fk_mesh_firmwarebuild_id FOREIGN KEY (build_id) REFERENCES public.mesh_firmwarebuild(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_otaupdaterecipient mesh_otaupdaterecipi_node_id_0fd5e307_fk_mesh_mesh; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_otaupdaterecipient
+ ADD CONSTRAINT mesh_otaupdaterecipi_node_id_0fd5e307_fk_mesh_mesh FOREIGN KEY (node_id) REFERENCES public.mesh_meshnode(address) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: mesh_otaupdaterecipient mesh_otaupdaterecipient_update_id_95637e8a_fk_mesh_otaupdate_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.mesh_otaupdaterecipient
+ ADD CONSTRAINT mesh_otaupdaterecipient_update_id_95637e8a_fk_mesh_otaupdate_id FOREIGN KEY (update_id) REFERENCES public.mesh_otaupdate(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: site_announcement site_announcement_author_id_136858c5_fk_auth_user_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.site_announcement
+ ADD CONSTRAINT site_announcement_author_id_136858c5_fk_auth_user_id FOREIGN KEY (author_id) REFERENCES public.auth_user(id) DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/local_run/db/restore.sh b/local_run/db/restore.sh
new file mode 100644
index 00000000..d20c7931
--- /dev/null
+++ b/local_run/db/restore.sh
@@ -0,0 +1,6 @@
+# SPDX-FileCopyrightText: 2024 NOI Techpark
+#
+# SPDX-License-Identifier: CC0-1.0
+
+#/bin/bash
+cat dump.sql | docker exec -i c3nav-postgres-1 su - postgres -c 'psql c3nav'
\ No newline at end of file
diff --git a/local_run/manage_noi_sensors.sh b/local_run/manage_noi_sensors.sh
new file mode 100755
index 00000000..d6c23b0a
--- /dev/null
+++ b/local_run/manage_noi_sensors.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Helper script to manage NOI sensors
+# Usage: ./manage_noi_sensors.sh [add|list|scrape] [args...]
+
+COMPOSE_EXEC="docker compose exec -T c3nav-core python manage.py"
+
+case "$1" in
+ "add")
+ if [ $# -lt 6 ]; then
+ echo "Usage: $0 add "
+ echo "Example: $0 add 'NOI:MyNewSensor' 'My New Sensor' 300.0 250.0 floor1"
+ exit 1
+ fi
+ SENSOR_ID="$2"
+ NAME="$3"
+ X="$4"
+ Y="$5"
+ LEVEL="$6"
+ echo "Adding sensor: $NAME ($SENSOR_ID) at ($X, $Y) on $LEVEL"
+ $COMPOSE_EXEC add_sensor --overlay-id 1 --sensor-id "$SENSOR_ID" --name "$NAME" --x "$X" --y "$Y" --level "$LEVEL"
+ ;;
+ "list")
+ echo "Listing all sensors in overlay 1:"
+ $COMPOSE_EXEC list_sensors --overlay-id 1
+ ;;
+ "scrape")
+ echo "Scraping data for all sensors in overlay 1:"
+ $COMPOSE_EXEC manage_sensors --scrape-data --overlay-id 1
+ ;;
+ *)
+ echo "NOI Sensor Management Helper"
+ echo "Usage: $0 [add|list|scrape] [args...]"
+ echo ""
+ echo "Commands:"
+ echo " add - Add a new sensor"
+ echo " list - List all sensors"
+ echo " scrape - Scrape data for all sensors"
+ echo ""
+ echo "Examples:"
+ echo " $0 add 'NOI:NewSensor' 'My Sensor' 300.0 250.0 floor1"
+ echo " $0 list"
+ echo " $0 scrape"
+ exit 1
+ ;;
+esac
diff --git a/local_run/up.sh b/local_run/up.sh
new file mode 100755
index 00000000..a1c3e0e6
--- /dev/null
+++ b/local_run/up.sh
@@ -0,0 +1,117 @@
+
+docker compose down --remove-orphans
+rm -rf data || true
+cp -r data-copy data
+chmod 777 data
+docker volume rm c3nav-postgres c3nav-redis || true
+docker volume create c3nav-postgres
+docker volume create c3nav-redis
+
+# Start only postgres and redis first (no build since we pre-built)
+docker compose up -d postgres redis
+
+sleep 10
+cat ./db/auth_user.sql | docker exec -i local_run-postgres-1 su - postgres -c 'psql c3nav'
+
+
+# Load database dump before starting the main app
+cat ./db/dump.sql | docker exec -i local_run-postgres-1 su - postgres -c 'psql c3nav' > /dev/null
+
+# Fix geometry access permissions for anonymous users
+ docker exec -i local_run-postgres-1 psql -U postgres -d c3nav -c "UPDATE mapdata_space SET base_mapdata_accessible = true;"
+
+# Now start the main services (no build since we pre-built)
+docker compose up --build -d
+echo "Creating Django superuser"
+# docker exec -i local_run-c3nav-core-1 sh -c "echo \"from django.contrib.auth.models import User; [0].set_password('admin'); User.objects.get(username='admin').save()\" | /app/env/bin/python manage.py shell"
+ docker exec -i local_run-c3nav-core-1 sh -c "echo \"
+from django.contrib.auth.models import User
+user = User.objects.get_or_create(username='admin', defaults={'email': 'admin@example.com', 'is_superuser': True, 'is_staff': True})[0]
+user.set_password('admin')
+user.save()
+print('Password set successfully for user:', user.username)
+\" | /app/env/bin/python manage.py shell"
+
+
+# Apply migrations after loading dump
+echo "Applying migrations..."
+ docker exec -i local_run-c3nav-core-1 sh -c '/app/env/bin/python manage.py migrate --fake'
+echo "Creating new migrations for sensor_data field..."
+ docker exec -i local_run-c3nav-core-1 sh -c '/app/env/bin/python manage.py makemigrations mapdata'
+echo "Applying new migrations..."
+ docker exec -i local_run-c3nav-core-1 sh -c '/app/env/bin/python manage.py migrate mapdata'
+
+ docker compose ps -a
+ docker exec -i local_run-c3nav-core-1 sh -c '/app/env/bin/python manage.py clearmapcache --include-history --include-geometries && /app/env/bin/python manage.py collectstatic -l --no-input'
+
+# Fix NumPy compatibility issue
+echo "Applying NumPy compatibility fix..."
+ docker exec -i local_run-c3nav-core-1 sed -i 's/np\.fromstring(/np.frombuffer(/g' /app/c3nav/mapdata/utils/cache/indexed.py
+
+# Process map updates to rebuild cache with NumPy fix
+echo "Processing map updates to rebuild cache..."
+ docker exec -i local_run-c3nav-core-1 sh -c '/app/env/bin/python manage.py processupdates'
+
+# Setup sensor overlays
+echo "Setting up sensor overlays..."
+docker compose exec -T c3nav-core python manage.py shell << 'EOF'
+from c3nav.mapdata.models import DataOverlay, DataOverlayFeature
+
+# Clear old overlays to avoid conflicts
+DataOverlay.objects.filter(titles__en__icontains='Environmental').delete()
+DataOverlay.objects.filter(titles__en__icontains='Temperature').delete()
+
+# Create single NOI environmental sensor overlay with multiple sensors configuration
+overlay = DataOverlay.objects.create(
+ titles={'en': 'NOI Environmental Sensors'},
+ description='Real-time CO2 and temperature sensors from NOI Open Data Hub - displays current readings with values and units',
+ default_geomtype='point',
+ data_source_url='https://mobility.api.opendatahub.com/v2/flat/IndoorStation/*/latest',
+ sensor_config={
+ 'data_path': 'data',
+ 'mappings': {
+ 'id_field': 'scode',
+ 'name_field': 'sname',
+ 'x_field': 'scoordinate.x',
+ 'y_field': 'scoordinate.y'
+ },
+ 'sensors': [
+ {
+ 'id': 'NOI:FreeSoftwareLab-Temperature',
+ 'coordinates': {'x': 291.0, 'y': 241.0},
+ 'level': 'floor1'
+ },
+ {
+ 'id': 'NOI:NOI-A1-Floor1-CO2',
+ 'coordinates': {'x': 270.0, 'y': 241.0},
+ 'level': 'floor1'
+ }
+ ]
+ },
+ update_interval=120
+)
+print(f"NOI sensor overlay created with ID {overlay.id}")
+
+EOF
+
+# Scrape real NOI sensor data
+echo "Scraping NOI sensor data..."
+# Give the database a moment to settle after overlay creation
+sleep 2
+
+# Scrape the overlay data (should automatically discover all configured sensors)
+echo "Scraping overlay data (ID: 1)..."
+docker compose exec -T c3nav-core python manage.py manage_sensors --scrape-data --overlay-id 1
+
+# List all sensors to verify setup
+echo "Listing all sensors in the overlay..."
+docker compose exec -T c3nav-core python manage.py list_sensors --overlay-id 1
+
+echo "Sensor setup completed!"
+echo ""
+echo "To add a new sensor to the overlay, use:"
+echo "docker compose exec -T c3nav-core python manage.py add_sensor --overlay-id 1 --sensor-id 'NOI:YourSensorID' --name 'Your Sensor Name' --x 300.0 --y 250.0 --level floor1"
+echo ""
+echo "To scrape data for all sensors:"
+echo "docker compose exec -T c3nav-core python manage.py manage_sensors --scrape-data --overlay-id 1"
+
diff --git a/src/c3nav/editor/api/endpoints.py b/src/c3nav/editor/api/endpoints.py
index bbe77bbe..dcc1576e 100644
--- a/src/c3nav/editor/api/endpoints.py
+++ b/src/c3nav/editor/api/endpoints.py
@@ -8,7 +8,7 @@ from c3nav.api.exceptions import API404
from c3nav.editor.api.base import api_etag_with_update_cache_key
from c3nav.editor.api.geometries import get_level_geometries_result, get_space_geometries_result
from c3nav.editor.api.schemas import EditorGeometriesElemSchema, EditorID, GeometryStylesSchema, UpdateCacheKey, \
- EditorBeaconsLookup
+ EditorBeaconsLookup, CloneFloorRequestSchema, CloneFloorResponseSchema
from c3nav.editor.views.base import editor_etag_func, accesses_mapdata
from c3nav.mapdata.api.base import api_etag
from c3nav.mapdata.models import Source
@@ -42,7 +42,6 @@ def geometrystyles(request):
'door': '#ffffff',
'area': '#55aaff',
'stair': '#a000a0',
- 'stairway': '#b000b0',
'ramp': 'rgba(160, 0, 160, 0.2)',
'obstacle': '#999999',
'lineobstacle': '#999999',
@@ -146,4 +145,29 @@ def beacons_lookup(request):
return EditorBeaconsLookup(
wifi_beacons=wifi_beacons,
ibeacons=ibeacons,
- ).model_dump(mode="json")
\ No newline at end of file
+ ).model_dump(mode="json")
+
+
+@editor_api_router.post('/clone-floor/', summary="clone floor items",
+ description="clone selected map items from one floor to another",
+ response={200: CloneFloorResponseSchema, **API404.dict(),
+ **auth_permission_responses},
+ openapi_extra={"security": [{"APIKeyAuth": ["editor_access", "write"]}]})
+def clone_floor(request, data: CloneFloorRequestSchema):
+ from c3nav.editor.utils import clone_level_items
+
+ try:
+ result = clone_level_items(
+ request=request,
+ source_level_id=data.source_level_id,
+ target_level_id=data.target_level_id,
+ items=data.items,
+ keep_sync=data.keep_sync
+ )
+ return result
+ except Exception as e:
+ return CloneFloorResponseSchema(
+ success=False,
+ cloned_items=[],
+ message=f"Error cloning items: {str(e)}"
+ ).model_dump(mode="json")
\ No newline at end of file
diff --git a/src/c3nav/editor/api/schemas.py b/src/c3nav/editor/api/schemas.py
index e7abacc0..ace9bbcf 100644
--- a/src/c3nav/editor/api/schemas.py
+++ b/src/c3nav/editor/api/schemas.py
@@ -124,4 +124,28 @@ class EditorBeaconsLookup(BaseSchema):
EditorBeacon
]
]
- ]
\ No newline at end of file
+ ]
+
+
+class CloneItemSchema(BaseSchema):
+ item_type: Annotated[str, APIField(title="geometry type (e.g., 'area', 'obstacle', 'space')")]
+ item_id: EditorID
+
+
+class CloneFloorRequestSchema(BaseSchema):
+ source_level_id: EditorID
+ target_level_id: EditorID
+ items: list[CloneItemSchema]
+ keep_sync: Annotated[bool, APIField(default=False, title="keep cloned items synchronized across levels")]
+
+
+class ClonedItemResult(BaseSchema):
+ item_type: str
+ original_id: EditorID
+ cloned_id: EditorID
+
+
+class CloneFloorResponseSchema(BaseSchema):
+ success: bool
+ cloned_items: list[ClonedItemResult]
+ message: str
\ No newline at end of file
diff --git a/src/c3nav/editor/forms.py b/src/c3nav/editor/forms.py
index dc44af1a..8deafd06 100644
--- a/src/c3nav/editor/forms.py
+++ b/src/c3nav/editor/forms.py
@@ -402,7 +402,7 @@ def create_editor_form(editor_model):
'stroke_opacity', 'fill_color', 'fill_opacity', 'interactive', 'point_icon', 'extra_data', 'show_label',
'show_geometry', 'show_label', 'show_geometry', 'default_geomtype', 'cluster_points', 'update_interval',
'load_group_display', 'load_group_contribute',
- 'altitude_quest', 'fill_quest', 'stair_count', 'stair_width',
+ 'altitude_quest', 'fill_quest',
]
field_names = [field.name for field in editor_model._meta.get_fields()
if not field.one_to_many and not isinstance(field, ManyToManyRel)]
diff --git a/src/c3nav/editor/static/editor/css/editor.scss b/src/c3nav/editor/static/editor/css/editor.scss
index 4fa3d652..93705fff 100644
--- a/src/c3nav/editor/static/editor/css/editor.scss
+++ b/src/c3nav/editor/static/editor/css/editor.scss
@@ -567,210 +567,83 @@ label.theme-color-label {
.leaflet-control-snap {
background-color: white;
border-radius: 4px;
- border: 2px solid rgba(0,0,0,0.2);
background-clip: padding-box;
-
- .snap-toggle {
+
+
+ /* watchout for leaflet.css trying to override a:hover with a different height/width */
+ a.snap-toggle, a.snap-to-original-toggle, a.snap-to-90-toggle {
+ background-size: 30px 30px;
display: block;
- width: 30px;
+ width: 30px;
height: 30px;
- line-height: 26px;
- text-align: center;
- text-decoration: none;
- font-size: 18px;
background-color: white;
color: #666;
- border-radius: 2px;
- transition: all 0.2s ease;
-
+ border-radius: 4px;
+
&:hover {
- background-color: #f4f4f4;
- color: #333;
+ background-color: #a7a7a7;
}
-
+
&.active {
- background-color: #4CAF50;
+ background-color: #b0ecb2;
+ border: 2px solid green;
color: white;
&:hover {
- background-color: #45a049;
+ background-color: #7ac27d;
}
}
}
+
+ a.snap-to-90-toggle {
+ background-color: yellow !important;
+ }
+
+ /* icons */
+ a.snap-toggle {
+ background-image: url("/static/img/snap-to-edges-icon.svg");
+ }
+ a.snap-to-original-toggle {
+ background-image: url("/static/img/snap-to-original-icon.svg");
+ }
+ a.snap-to-90-toggle {
+ background-image: url("/static/img/snap-to-90-icon.svg");
+ }
}
/* Snap indicator styles */
.snap-indicator {
+ transform: scale(11.6);
+ transform-box: fill-box;
+ transform-origin: center;
z-index: 1000;
pointer-events: none;
- animation: snap-pulse 1s infinite;
}
-@keyframes snap-pulse {
- 0% {
- opacity: 0.8;
- transform: scale(1);
- }
- 50% {
- opacity: 1;
- transform: scale(1.2);
- }
- 100% {
- opacity: 0.8;
- transform: scale(1);
- }
-}
-/* Stairway Creator control styles */
-.leaflet-control-stairway {
- background-color: white;
- border-radius: 4px;
- border: 2px solid rgba(0,0,0,0.2);
- background-clip: padding-box;
- margin-top: 45px; // Position below snap control
-
- .stairway-toggle {
- display: block;
- width: 30px;
- height: 30px;
- line-height: 26px;
- text-align: center;
- text-decoration: none;
- font-size: 18px;
- background-color: white;
- color: #666;
- border-radius: 2px;
- transition: all 0.2s ease;
-
- &:hover {
- background-color: #f4f4f4;
- color: #333;
- }
-
- &.active {
- background-color: #FF9800;
- color: white;
-
- &:hover {
- background-color: #F57C00;
- }
- }
- }
-}
-
-/* Stairway Creator configuration panel */
-#stairway-config {
- background-color: #f8f9fa;
- border: 1px solid #dee2e6;
- border-radius: 5px;
- padding: 15px;
- margin-bottom: 15px;
-
- h4 {
- margin-top: 0;
- margin-bottom: 15px;
- color: #FF9800;
- font-weight: bold;
- }
-
- .form-group {
- margin-bottom: 12px;
-
- label {
- font-weight: 600;
- color: #495057;
- margin-bottom: 5px;
- }
-
- .form-control {
- border: 1px solid #ced4da;
- border-radius: 3px;
-
- &:focus {
- border-color: #FF9800;
- box-shadow: 0 0 0 0.2rem rgba(255, 152, 0, 0.25);
- }
- }
- }
-
- .btn-group {
- margin-top: 15px;
-
- .btn {
- margin-right: 10px;
- }
-
- .btn-primary {
- background-color: #FF9800;
- border-color: #FF9800;
-
- &:hover {
- background-color: #F57C00;
- border-color: #F57C00;
- }
-
- &:disabled {
- background-color: #6c757d;
- border-color: #6c757d;
- }
- }
- }
-}
-
-/* Stairway Creator instructions */
-#stairway-instructions {
- border-left: 4px solid #FF9800;
- background-color: #fff3cd;
- border-color: #ffeaa7;
- color: #856404;
- margin-bottom: 15px;
-
- strong {
- color: #FF9800;
- }
-}
-
-/* Stairway preview elements */
-.stairway-point-label {
- background-color: #ff6b6b;
- color: white;
- border-radius: 50%;
- text-align: center;
- font-weight: bold;
- font-size: 12px;
- line-height: 20px;
- border: 2px solid white;
- box-shadow: 0 2px 4px rgba(0,0,0,0.3);
-}
-
-.stairway-step-label {
- background-color: #4CAF50;
- color: white;
- border-radius: 50%;
- text-align: center;
- font-weight: bold;
- font-size: 10px;
- line-height: 16px;
- border: 1px solid white;
- box-shadow: 0 1px 2px rgba(0,0,0,0.3);
-}
-
-/* Stairway step preview lines */
-.stairway-step-preview {
+/* Edge highlight styles for snap-to-edges */
+.edge-highlight {
+ z-index: 999;
pointer-events: none;
- z-index: 500;
}
-/* Alert styles for stairway creator */
-.alert {
- padding: 12px;
- margin-bottom: 15px;
- border: 1px solid transparent;
- border-radius: 4px;
-
- &.alert-info {
- color: #0c5460;
- background-color: #d1ecf1;
- border-color: #bee5eb;
- }
-}
\ No newline at end of file
+.original-edge-highlight {
+ z-index: 1000;
+ pointer-events: none;
+}
+
+/* Right-angle snap indicators */
+.right-angle-reference {
+ z-index: 998;
+ pointer-events: none;
+}
+
+.right-angle-line {
+ z-index: 1001;
+ pointer-events: none;
+}
+
+.right-angle-square {
+ z-index: 1002;
+ pointer-events: none;
+}
diff --git a/src/c3nav/editor/static/editor/js/editor.js b/src/c3nav/editor/static/editor/js/editor.js
index 4d0e69ba..4533f057 100644
--- a/src/c3nav/editor/static/editor/js/editor.js
+++ b/src/c3nav/editor/static/editor/js/editor.js
@@ -163,6 +163,7 @@ editor = {
},
_sidebar_unload: function () {
// unload the sidebar. called on sidebar_get and form submit.
+ editor._hide_original_geometry();
editor._level_control.disable();
editor._sublevel_control.disable();
@@ -186,8 +187,7 @@ editor = {
// Clear snap indicators when unloading
editor._clear_snap_indicators();
- // Clear stairway creator state when unloading
- editor._clear_stairway_creator_state();
+ editor._destroy_staircase_editing();
},
_fill_level_control: function (level_control, level_list, geometryURLs) {
var levels = level_list.find('a');
@@ -502,6 +502,10 @@ editor = {
// listener for form submits in the sidebar.
e.preventDefault();
if (editor._loading_geometry || $(this).is('.creation-lock') || $(this).is('.scan-lock')) return;
+ if (editor._staircase_layer) {
+ editor._staircase_submit($(this))
+ return
+ }
var data = $(this).serialize();
var btn = $(this).data('btn');
if (btn !== undefined && btn !== null) {
@@ -734,7 +738,6 @@ editor = {
_orig_vertex_pos: null,
_max_bounds: null,
_creating_type: null,
- _creating_model_type: null,
_shift_pressed: false,
init_geometries: function () {
// init geometries and edit listeners
@@ -825,9 +828,6 @@ editor = {
// Initialize snap-to-edges functionality
editor.init_snap_to_edges();
- // Initialize stairway creator functionality
- editor.init_stairway_creator();
-
c3nav_api.get('editor/geometrystyles')
.then(geometrystyles => {
editor.geometrystyles = geometrystyles;
@@ -947,6 +947,12 @@ editor = {
editor._geometries_layer.addTo(editor.map);
editor._highlight_layer.addTo(editor.map);
editor._loading_geometry = false;
+
+ // Initialize clone floor functionality now that geometries are loaded
+ if (editor.cloneFloor && editor.cloneFloor.init) {
+ editor.cloneFloor.init();
+ }
+
if (editor._bounds_layer === null && editor._geometries_layer.getLayers().length) editor._bounds_layer = editor._geometries_layer;
if (editor._next_zoom && editor._bounds_layer !== null) {
editor.map.flyToBounds((editor._bounds_layer.getBounds !== undefined) ? editor._bounds_layer.getBounds() : [editor._bounds_layer.getLatLng(), editor._bounds_layer.getLatLng()], {
@@ -1372,7 +1378,7 @@ editor = {
} else if (mapitem_type) {
// creating a new geometry, already drawn but form was rejected
options = editor._get_mapitem_type_style(mapitem_type);
- if (mapitem_type === 'area') {
+ if (mapitem_type === 'area' || mapitem_type === 'staircase') {
options.fillOpacity = 0.5;
}
}
@@ -1392,7 +1398,7 @@ editor = {
} else if (form.is('[data-new]')) {
// create new geometry
options = editor._get_mapitem_type_style(mapitem_type);
- if (mapitem_type === 'area') {
+ if (mapitem_type === 'area' || mapitem_type === 'staircase') {
options.fillOpacity = 0.5;
}
form.addClass('creation-lock');
@@ -1402,16 +1408,6 @@ editor = {
const startGeomEditing = (geomtype) => {
editor._creating_type = geomtype;
editor._creating = true;
- // Store the current model type for business logic
- editor._creating_model_type = form.attr('data-new') || null;
-
- // Auto-activate stairway creator for Stairway type
- if (editor._creating_model_type === 'stairway') {
- setTimeout(() => {
- editor._activate_stairway_creator();
- }, 100); // Small delay to ensure geometry creation is fully initialized
- }
-
if (editor._current_editing_shape) {
editor._current_editing_shape.remove();
}
@@ -1451,13 +1447,16 @@ editor = {
}
startGeomEditing(selected_geomtype);
}
+
+ if (mapitem_type === 'staircase') {
+ editor._setup_staircase_editing()
+ }
}
},
_cancel_editing: function () {
// called on sidebar unload. cancel all editing and creating.
if (editor._creating) {
editor._creating = false;
- editor._creating_model_type = null;
editor.map.editTools.stopDrawing();
}
editor._graph_editing = false;
@@ -1469,9 +1468,6 @@ editor = {
// Clear snap indicators when canceling editing
editor._clear_snap_indicators();
-
- // Clear stairway creator state when canceling editing
- editor._clear_stairway_creator_state();
},
_canceled_creating: function (e) {
// called after we canceled creating so we can remove the temporary layer.
@@ -1485,7 +1481,6 @@ editor = {
if (editor._creating_type !== 'multipoint') {
// multipoints can always accept more points so they are always in "creating" mode
editor._creating = false;
- editor._creating_model_type = null;
}
var layer = e.layer;
if (editor._creating_type === 'point' && layer._latlng !== undefined) {
@@ -1686,31 +1681,33 @@ editor = {
},
// Snap-to-edges functionality
- _snap_enabled: true,
- _snap_distance: 15, // pixels
+ _snap_enabled: false,
+ _snap_to_original_enabled: false,
+ _snap_to_90_enable: false,
+ _snap_distance: 30, // pixels
+ _extension_area_multiplier: 4, // Extension area = snap_distance * this multiplier
_snap_to_base_map: false,
_snap_indicator: null,
_snap_candidates: [],
init_snap_to_edges: function() {
- // Initialize snap indicator layer
editor._snap_indicator = L.layerGroup().addTo(editor.map);
- // Override existing drawing event handlers to include snapping
editor.map.on('editable:drawing:move', editor._handle_snap_during_draw);
editor.map.on('editable:vertex:drag', editor._handle_snap_during_vertex_drag);
- // Add snap toggle to UI
editor._add_snap_controls();
},
+
_add_snap_controls: function() {
- // Add snap toggle control to the map
+
+ // add snap to edge toggle
var snapControl = L.control({position: 'topleft'});
snapControl.onAdd = function() {
var container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-snap');
container.innerHTML = '⚡ ';
+ (editor._snap_enabled ? 'active' : '') + '"';
L.DomEvent.on(container.querySelector('.snap-toggle'), 'click', function(e) {
e.preventDefault();
@@ -1721,18 +1718,110 @@ editor = {
return container;
};
snapControl.addTo(editor.map);
+
+ // add snap to "original edited geometry" toggle
+ var snapToOriginalControl = L.control({position: 'topleft'});
+ snapToOriginalControl.onAdd = function() {
+ var container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-snap');
+ container.innerHTML = ' ';
+
+ L.DomEvent.on(container.querySelector('.snap-to-original-toggle'), 'click', function(e) {
+ e.preventDefault();
+ editor._toggle_snap_to_original();
+ });
+
+ L.DomEvent.disableClickPropagation(container);
+ return container;
+ };
+ snapToOriginalControl.addTo(editor.map);
+
+ // add snap to 90° toggle
+ var snapTo90Control = L.control({position: 'topleft'});
+ snapTo90Control.onAdd = function() {
+ var container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-snap');
+ container.innerHTML = ' ';
+
+ L.DomEvent.on(container.querySelector('.snap-to-90-toggle'), 'click', function(e) {
+ e.preventDefault();
+ editor._toggle_snap_to_90();
+ });
+
+ L.DomEvent.disableClickPropagation(container);
+ return container;
+ };
+ snapTo90Control.addTo(editor.map);
},
+
_toggle_snap: function() {
editor._snap_enabled = !editor._snap_enabled;
var toggle = document.querySelector('.snap-toggle');
if (toggle) {
toggle.classList.toggle('active', editor._snap_enabled);
}
- // Clear any existing snap indicators
+
editor._clear_snap_indicators();
},
+ _toggle_snap_to_original: function() {
+ editor._snap_to_original_enabled = !editor._snap_to_original_enabled;
+ var toggle = document.querySelector('.snap-to-original-toggle');
+ if (toggle) {
+ toggle.classList.toggle('active', editor._snap_to_original_enabled);
+ }
+
+ // Show/hide original geometry
+ if (editor._snap_to_original_enabled) {
+ editor._show_original_geometry();
+ } else {
+ editor._hide_original_geometry();
+ }
+ },
+
+ _toggle_snap_to_90: function() {
+ editor._snap_to_90_enabled = !editor._snap_to_90_enabled;
+ var toggle = document.querySelector('.snap-to-90-toggle');
+ if (toggle) {
+ toggle.classList.toggle('active', editor._snap_to_90_enabled);
+ }
+
+ editor._clear_snap_indicators();
+ },
+
+ _show_original_geometry: function() {
+ if (!editor._bounds_layer || editor._original_geometry_layer) return;
+
+ // Create a copy of the original geometry with different styling
+ var originalFeature = editor._bounds_layer.feature;
+ if (!originalFeature) return;
+
+ editor._original_geometry_layer = L.geoJSON(originalFeature, {
+ style: function() {
+ return {
+ stroke: true,
+ color: '#888888',
+ weight: 2,
+ opacity: 0.7,
+ fill: false,
+ dashArray: '5, 5',
+ className: 'original-geometry'
+ };
+ },
+ pointToLayer: editor._point_to_layer
+ });
+
+ editor._original_geometry_layer.addTo(editor.map);
+ },
+
+ _hide_original_geometry: function() {
+ if (editor._original_geometry_layer) {
+ editor.map.removeLayer(editor._original_geometry_layer);
+ editor._original_geometry_layer = null;
+ }
+ },
+
_handle_snap_during_draw: function(e) {
if (!editor._snap_enabled || !editor._creating) return;
@@ -1742,7 +1831,7 @@ editor = {
e.latlng.lng = snapped.lng;
}
- // Apply existing rounding
+ // Apply rounding
e.latlng.lat = Math.round(e.latlng.lat * 100) / 100;
e.latlng.lng = Math.round(e.latlng.lng * 100) / 100;
},
@@ -1750,39 +1839,80 @@ editor = {
_handle_snap_during_vertex_drag: function(e) {
if (!editor._snap_enabled) return;
- var snapped = editor._find_and_apply_snap(e.latlng, e.vertex);
+ var snapped = editor._find_and_apply_snap(e.latlng);
if (snapped) {
e.latlng.lat = snapped.lat;
e.latlng.lng = snapped.lng;
}
- // Apply existing rounding and other constraints
e.vertex.setLatLng([Math.round(e.latlng.lat * 100) / 100, Math.round(e.latlng.lng * 100) / 100]);
},
- _find_and_apply_snap: function(latlng, currentVertex) {
+ _find_and_apply_snap: function(latlng) {
if (!editor._geometries_layer) return null;
var mapPoint = editor.map.latLngToContainerPoint(latlng);
var candidates = [];
- // Find snap candidates from existing geometries
- editor._geometries_layer.eachLayer(function(layer) {
- // if (layer === editor._editing_layer) return; // Don't snap to self
-
- var snapPoint = editor._find_closest_point_on_geometry(layer, latlng, mapPoint, currentVertex);
- if (snapPoint && snapPoint.distance < editor._snap_distance) {
- candidates.push(snapPoint);
+ // ADD THIS: check for 90° axis snap
+ if (editor._snap_to_90_enabled) {
+ var ninetyDegreeSnap = editor._find_90_degree_snap(latlng, mapPoint);
+ if (ninetyDegreeSnap) {
+ candidates.push(ninetyDegreeSnap);
}
+ }
+
+ // find snap candidates from existing geometries with area-limited infinite extension
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer === editor._bounds_layer && !editor._snap_to_original_enabled) return; //don't snap to original if not toggled.
+ if (layer === editor._editing_layer) return; // don't snap to self
+
+ // check if layer is within the area limit for infinite extension
+ var allowInfiniteExtension = editor._is_layer_in_extension_area(layer, latlng, mapPoint);
+
+ var snapPoints = editor._find_closest_point_on_geometry(layer, latlng, mapPoint, allowInfiniteExtension);
+ candidates.push(...snapPoints);
});
- // Find the closest candidate
+ // check current editing shape with infinite extension enabled
+ if (editor._current_editing_shape) {
+ var currentShapeSnapPoints = editor._find_closest_point_on_geometry(
+ editor._current_editing_shape, latlng, mapPoint, true // Always enable infinite extension for current shape
+ );
+ candidates.push(...currentShapeSnapPoints);
+ }
+
+ // find closest candidate
if (candidates.length > 0) {
candidates.sort(function(a, b) { return a.distance - b.distance; });
var best = candidates[0];
- // Show snap indicator
- // editor._show_snap_indicator(best.latlng);
+ // see if we can snap to a corner, i.e. an edge intersection
+ if (candidates.length >= 2 && candidates[0].isLine && candidates[1].isLine) {
+ console.log(candidates.slice(0,2))
+ var inters = editor._intersect_infinite(
+ [candidates[0].edgeStart, candidates[0].edgeEnd],
+ [candidates[1].edgeStart, candidates[1].edgeEnd]
+ )
+ if (inters) {
+ intersMap = editor.map.latLngToContainerPoint(inters)
+ var distance = Math.sqrt(
+ Math.pow(intersMap.x - mapPoint.x, 2) +
+ Math.pow(intersMap.y - mapPoint.y, 2)
+ )
+ if (distance < editor._snap_distance) {
+ best = {
+ latlng: inters,
+ distance: distance,
+ referenceVertex: inters,
+ }
+ }
+ }
+ }
+
+
+ // show snap indicator with edge highlighting
+ editor._show_snap_indicator(best.latlng, best);
return best.latlng;
} else {
@@ -1791,78 +1921,269 @@ editor = {
}
},
- _find_closest_point_on_geometry: function(layer, targetLatLng, targetMapPoint) {
- if (!layer.getLatLngs) return null;
+ _intersect_infinite: function(line1, line2) {
+ const [p1, p2] = line1;
+ const [p3, p4] = line2;
- var closestPoint = null;
- var closestDistance = Infinity;
+ const x1 = p1.lng, y1 = p1.lat;
+ const x2 = p2.lng, y2 = p2.lat;
+ const x3 = p3.lng, y3 = p3.lat;
+ const x4 = p4.lng, y4 = p4.lat;
+
+ const denom = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4);
+ if (denom === 0) return null; // parallel
+
+ const px = ((x1*y2 - y1*x2)*(x3-x4) - (x1-x2)*(x3*y4 - y3*x4)) / denom;
+ const py = ((x1*y2 - y1*x2)*(y3-y4) - (y1-y2)*(x3*y4 - y3*x4)) / denom;
+
+ return {lng: px, lat: py};
+ },
+
+ _is_layer_in_extension_area: function(layer, targetLatLng, targetMapPoint) {
+ if (!layer.getLatLngs) return false;
+
+ // skip circles entirely for infinite extension
+ if (layer instanceof L.Circle || layer instanceof L.CircleMarker) {
+ return false;
+ }
try {
var coordinates = [];
- // Handle different geometry types
+ if (layer instanceof L.Polygon || layer instanceof L.Polyline) {
+ coordinates = layer.getLatLngs();
+ if (coordinates[0] && Array.isArray(coordinates[0])) {
+ coordinates = coordinates[0];
+ }
+ }
+
+ if (coordinates.length === 0) return false;
+
+ // extension area radius (in pixels)
+ var extensionAreaRadius = editor._snap_distance * editor._extension_area_multiplier;
+
+ // check if any vertex of the layer is within the extension area
+ for (var i = 0; i < coordinates.length; i++) {
+ var vertexMapPoint = editor.map.latLngToContainerPoint(coordinates[i]);
+ var distanceToVertex = vertexMapPoint.distanceTo(targetMapPoint);
+
+ if (distanceToVertex <= extensionAreaRadius) {
+ return true;
+ }
+ }
+
+ for (var i = 0; i < coordinates.length; i++) {
+ var p1 = coordinates[i];
+ var p2 = coordinates[(i + 1) % coordinates.length];
+
+ if (editor._edge_intersects_circle(p1, p2, targetLatLng, targetMapPoint, extensionAreaRadius)) {
+ return true;
+ }
+ }
+
+ return false;
+
+ } catch (error) {
+ return false;
+ }
+ },
+
+ _edge_intersects_circle: function(edgeStart, edgeEnd, circleCenter, circleCenterMap, radius) {
+ var p1Map = editor.map.latLngToContainerPoint(edgeStart);
+ var p2Map = editor.map.latLngToContainerPoint(edgeEnd);
+
+ // find closest point on edge to circle center
+ var dx = p2Map.x - p1Map.x;
+ var dy = p2Map.y - p1Map.y;
+ var length = Math.sqrt(dx * dx + dy * dy);
+
+ if (length === 0) {
+ return p1Map.distanceTo(circleCenterMap) <= radius;
+ }
+
+ var t = Math.max(0, Math.min(1,
+ ((circleCenterMap.x - p1Map.x) * dx + (circleCenterMap.y - p1Map.y) * dy) / (length * length)
+ ));
+
+ var closestPoint = {
+ x: p1Map.x + t * dx,
+ y: p1Map.y + t * dy
+ };
+
+ var distance = Math.sqrt(
+ Math.pow(closestPoint.x - circleCenterMap.x, 2) +
+ Math.pow(closestPoint.y - circleCenterMap.y, 2)
+ );
+
+ return distance <= radius;
+ },
+
+ _find_90_degree_snap: function(targetLatLng, targetMapPoint) {
+ if (!editor._geometries_layer) return null;
+
+ var bestSnap = null;
+ var closestDistance = Infinity;
+
+ // Check all geometry vertices for 90° alignment
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer === editor._editing_layer) return; // don't snap to self
+ if (!layer.getLatLngs) return;
+
+ try {
+ var coordinates = [];
+ if (layer instanceof L.Polygon || layer instanceof L.Polyline) {
+ coordinates = layer.getLatLngs();
+ if (coordinates[0] && Array.isArray(coordinates[0])) {
+ coordinates = coordinates[0];
+ }
+ } else if (layer instanceof L.Circle || layer instanceof L.CircleMarker) {
+ coordinates = [layer.getLatLng()];
+ }
+
+ // Check each vertex for 90° alignment
+ for (var i = 0; i < coordinates.length; i++) {
+ var vertex = coordinates[i];
+ var vertexMapPoint = editor.map.latLngToContainerPoint(vertex);
+
+ // Calculate horizontal and vertical snap points
+ var horizontalSnap = {
+ x: targetMapPoint.x,
+ y: vertexMapPoint.y
+ };
+ var verticalSnap = {
+ x: vertexMapPoint.x,
+ y: targetMapPoint.y
+ };
+
+ // Check horizontal alignment
+ var horizontalDistance = Math.abs(targetMapPoint.y - vertexMapPoint.y);
+ if (horizontalDistance < editor._snap_distance) {
+ var horizontalLatLng = editor.map.containerPointToLatLng(horizontalSnap);
+ var totalDistance = targetMapPoint.distanceTo(horizontalSnap);
+
+ if (totalDistance < closestDistance && totalDistance < editor._snap_distance) {
+ closestDistance = totalDistance;
+ bestSnap = {
+ latlng: horizontalLatLng,
+ distance: totalDistance,
+ snapType: 'horizontal',
+ referenceVertex: vertex,
+ isRightAngle: false,
+ is90Degree: true
+ };
+ }
+ }
+
+ // Check vertical alignment
+ var verticalDistance = Math.abs(targetMapPoint.x - vertexMapPoint.x);
+ if (verticalDistance < editor._snap_distance) {
+ var verticalLatLng = editor.map.containerPointToLatLng(verticalSnap);
+ var totalDistance = targetMapPoint.distanceTo(verticalSnap);
+
+ if (totalDistance < closestDistance && totalDistance < editor._snap_distance) {
+ closestDistance = totalDistance;
+ bestSnap = {
+ latlng: verticalLatLng,
+ distance: totalDistance,
+ snapType: 'vertical',
+ referenceVertex: vertex,
+ isRightAngle: false,
+ is90Degree: true
+ };
+ }
+ }
+ }
+ } catch (error) {
+ // Skip problematic layers
+ }
+ });
+
+ return bestSnap;
+ },
+
+ _find_closest_point_on_geometry: function(layer, targetLatLng, targetMapPoint, allowInfiniteExtension) {
+ if (!layer.getLatLngs) return [];
+
+ var closestPoints = [];
+
+ try {
+ var coordinates = [];
+
+ // handle different geometry types
if (layer instanceof L.Polygon || layer instanceof L.Polyline) {
coordinates = layer.getLatLngs();
if (coordinates[0] && Array.isArray(coordinates[0])) {
coordinates = coordinates[0]; // Handle polygon with holes
}
} else if (layer instanceof L.Circle || layer instanceof L.CircleMarker) {
- // For circles, snap to center
var center = layer.getLatLng();
var centerMapPoint = editor.map.latLngToContainerPoint(center);
var distance = centerMapPoint.distanceTo(targetMapPoint);
if (distance < editor._snap_distance) {
- return {
+ return [{
latlng: center,
- distance: distance
- };
+ distance: distance,
+ edgeStart: center,
+ edgeEnd: center,
+ isInfiniteExtension: false,
+ isRightAngle: false
+ }];
}
- return null;
+ return [];
}
- // Check each edge of the geometry
+ // check each edge of the geometry
for (var i = 0; i < coordinates.length; i++) {
+
var p1 = coordinates[i];
var p2 = coordinates[(i + 1) % coordinates.length];
- var snapPoint = editor._find_closest_point_on_edge(p1, p2, targetLatLng, targetMapPoint);
- if (snapPoint && snapPoint.distance < closestDistance) {
- closestDistance = snapPoint.distance;
- closestPoint = snapPoint;
- }
+ var snapPoint = editor._find_closest_point_on_edge(p1, p2, targetLatLng, targetMapPoint, allowInfiniteExtension);
+ if (snapPoint && snapPoint.distance < editor._snap_distance) {
+ closestPoints.push(snapPoint);
+ }
}
} catch (error) {
- // Silently handle geometry access errors
- return null;
+ return [];
}
- return closestPoint;
+ return closestPoints;
},
- _find_closest_point_on_edge: function(p1, p2, targetLatLng, targetMapPoint) {
+ _find_closest_point_on_edge: function(p1, p2, targetLatLng, targetMapPoint, allowInfiniteExtension) {
var p1Map = editor.map.latLngToContainerPoint(p1);
var p2Map = editor.map.latLngToContainerPoint(p2);
- // Find closest point on line segment
+ // find closest point on line (infinite or segment based on allowInfiniteExtension)
var dx = p2Map.x - p1Map.x;
var dy = p2Map.y - p1Map.y;
var length = Math.sqrt(dx * dx + dy * dy);
if (length === 0) {
- // Points are the same, snap to the point
+ // points are the same, snap to the point
var distance = p1Map.distanceTo(targetMapPoint);
return {
latlng: p1,
- distance: distance
+ distance: distance,
+ edgeStart: p1,
+ edgeEnd: p2,
+ isLine: true,
+ isInfiniteExtension: false,
+ isRightAngle: false
};
}
- // Calculate parameter t for closest point on line
+ // calculate parameter t for closest point on line
var t = ((targetMapPoint.x - p1Map.x) * dx + (targetMapPoint.y - p1Map.y) * dy) / (length * length);
- t = Math.max(0, Math.min(1, t)); // Clamp to line segment
- // Calculate closest point
+ // clamp t based on allowInfiniteExtension
+ var originalT = t;
+ if (!allowInfiniteExtension) {
+ t = Math.max(0, Math.min(1, t)); // Clamp to line segment
+ }
+
+ // calculate closest point
var closestMapPoint = {
x: p1Map.x + t * dx,
y: p1Map.y + t * dy
@@ -1873,594 +2194,322 @@ editor = {
Math.pow(closestMapPoint.y - targetMapPoint.y, 2)
);
- // Convert back to lat/lng
var closestLatLng = editor.map.containerPointToLatLng(closestMapPoint);
+ // determine if this is an infinite extension
+ var isInfiniteExtension = allowInfiniteExtension && (originalT < 0 || originalT > 1);
+
return {
latlng: closestLatLng,
- distance: distance
+ distance: distance,
+ edgeStart: p1,
+ edgeEnd: p2,
+ isLine: true,
+ isInfiniteExtension: isInfiniteExtension,
+ isRightAngle: false,
+ t: originalT
};
},
-
- _show_snap_indicator: function(latlng) {
+
+ _show_snap_indicator: function(latlng, snapInfo) {
editor._clear_snap_indicators();
- var indicator = L.circleMarker(latlng, {
- radius: 4,
- color: '#ff6b6b',
- fillColor: '#ff6b6b',
- fillOpacity: 0.8,
+ var size = 0.001;
+ var bounds = [
+ [latlng.lat - size, latlng.lng - size],
+ [latlng.lat + size, latlng.lng + size]
+ ];
+ var indicator = L.rectangle(bounds, {
+ color: '#666',
weight: 2,
- className: 'snap-indicator'
- });
+ lineCap: "square",
+ fillOpacity: 1.,
+ className: 'snap-indicator'
+ });
editor._snap_indicator.addLayer(indicator);
+
+ if (snapInfo && snapInfo.is90Degree) {
+ editor._show_90_degree_highlight(snapInfo);
+ } else if (snapInfo && snapInfo.edgeStart && snapInfo.edgeEnd) {
+ editor._show_edge_highlight(snapInfo);
+ } else if (snapInfo && snapInfo.referenceVertex) {
+ editor._show_intersect_highlight(snapInfo);
+ }
},
+ _show_intersect_highlight: function(snapInfo) {
+ var referenceVertex = snapInfo.referenceVertex;
+ var snapPoint = snapInfo.latlng;
+
+ // Draw line from reference vertex to snap point
+ var guideLine = L.polyline([referenceVertex, snapPoint], {
+ color: '#00aaff',
+ weight: 2,
+ opacity: 0.8,
+ dashArray: '4, 4',
+ className: '90-degree-guide'
+ });
+ editor._snap_indicator.addLayer(guideLine);
+ },
+
+ _show_90_degree_highlight: function(snapInfo) {
+ var referenceVertex = snapInfo.referenceVertex;
+ var snapPoint = snapInfo.latlng;
+
+ // Draw line from reference vertex to snap point
+ var guideLine = L.polyline([referenceVertex, snapPoint], {
+ color: '#00aaff',
+ weight: 2,
+ opacity: 0.8,
+ dashArray: '4, 4',
+ className: '90-degree-guide'
+ });
+ editor._snap_indicator.addLayer(guideLine);
+
+ // Highlight the reference vertex
+ var vertexHighlight = L.circle(referenceVertex, {
+ radius: 0.05,
+ color: '#00aaff',
+ weight: 2,
+ opacity: 0.8,
+ fillOpacity: 0.3,
+ className: '90-degree-vertex'
+ });
+ editor._snap_indicator.addLayer(vertexHighlight);
+
+ // Add axis indicator
+ var referenceMap = editor.map.latLngToContainerPoint(referenceVertex);
+ var snapMap = editor.map.latLngToContainerPoint(snapPoint);
+
+ var axisText = snapInfo.snapType === 'horizontal' ? '─' : '│';
+ var midPoint = editor.map.containerPointToLatLng({
+ x: (referenceMap.x + snapMap.x) / 2,
+ y: (referenceMap.y + snapMap.y) / 2
+ });
+
+ // Create a small text indicator (you might need to style this with CSS)
+ var textMarker = L.marker(midPoint, {
+ icon: L.divIcon({
+ html: '' + axisText + '
',
+ className: '90-degree-axis-indicator',
+ iconSize: [20, 20],
+ iconAnchor: [10, 10]
+ })
+ });
+ editor._snap_indicator.addLayer(textMarker);
+ },
+
+ _show_edge_highlight: function(snapInfo) {
+ if (!snapInfo.edgeStart || !snapInfo.edgeEnd) return;
+ var startPoint = snapInfo.edgeStart;
+ var endPoint = snapInfo.edgeEnd;
+ var extendedStart, extendedEnd;
+
+ if (snapInfo.isInfiniteExtension && snapInfo.t !== undefined) {
+ // Extend the line significantly beyond the original edge
+ var startMap = editor.map.latLngToContainerPoint(startPoint);
+ var endMap = editor.map.latLngToContainerPoint(endPoint);
+
+ var dx = endMap.x - startMap.x;
+ var dy = endMap.y - startMap.y;
+ var length = Math.sqrt(dx * dx + dy * dy);
+
+ if (length > 0) {
+ dx /= length;
+ dy /= length;
+
+ var extensionDistance = 1000;
+ var extStartMap = {
+ x: startMap.x - dx * extensionDistance,
+ y: startMap.y - dy * extensionDistance
+ };
+ var extEndMap = {
+ x: endMap.x + dx * extensionDistance,
+ y: endMap.y + dy * extensionDistance
+ };
+
+ extendedStart = editor.map.containerPointToLatLng(extStartMap);
+ extendedEnd = editor.map.containerPointToLatLng(extEndMap);
+ } else {
+ extendedStart = startPoint;
+ extendedEnd = endPoint;
+ }
+ } else {
+ extendedStart = startPoint;
+ extendedEnd = endPoint;
+ }
+
+ // create edge highlight line
+ var edgeHighlight = L.polyline([extendedStart, extendedEnd], {
+ color: snapInfo.isInfiniteExtension ? '#ffaa00' : '#66dd66', // Orange for infinite, green for original edge
+ weight: snapInfo.isInfiniteExtension ? 2 : 3,
+ opacity: snapInfo.isInfiniteExtension ? 0.4 : 0.6,
+ dashArray: snapInfo.isInfiniteExtension ? '8, 4' : null, // Dashed for infinite extension
+ className: 'edge-highlight'
+ });
+
+ editor._snap_indicator.addLayer(edgeHighlight);
+
+ // if it's an infinite extension, also show the original edge segment more prominently
+ if (snapInfo.isInfiniteExtension) {
+ var originalEdge = L.polyline([startPoint, endPoint], {
+ color: '#66dd66',
+ weight: 3,
+ opacity: 0.8,
+ className: 'original-edge-highlight'
+ });
+ editor._snap_indicator.addLayer(originalEdge);
+ }
+ },
_clear_snap_indicators: function() {
if (editor._snap_indicator) {
editor._snap_indicator.clearLayers();
}
},
- // Stairway Creator functionality
- _stairway_creator_active: false,
- _stairway_type: 'straight', // 'straight', 'u-shaped', 'c-shaped'
- _stairway_step_width: 0.3,
- _stairway_step_depth: 0.25,
- _stairway_steps_count: 10,
- _stairway_points: [],
- _stairway_preview_layer: null,
- _stairway_control: null,
-
- init_stairway_creator: function() {
- // Initialize stairway creator preview layer
- editor._stairway_preview_layer = L.layerGroup().addTo(editor.map);
-
- // Add stairway creator control
- editor._add_stairway_controls();
- },
-
- _add_stairway_controls: function() {
- // Add stairway creator control to the map
- var stairwayControl = L.control({position: 'topleft'});
- stairwayControl.onAdd = function() {
- var container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-stairway');
- container.innerHTML = '🏗️ ';
-
- L.DomEvent.on(container.querySelector('.stairway-toggle'), 'click', function(e) {
- e.preventDefault();
- editor._toggle_stairway_creator();
- });
-
- L.DomEvent.disableClickPropagation(container);
- return container;
- };
- editor._stairway_control = stairwayControl.addTo(editor.map);
- },
-
- _toggle_stairway_creator: function() {
- if (editor._stairway_creator_active) {
- editor._deactivate_stairway_creator();
- } else {
- editor._activate_stairway_creator();
- }
- },
-
- _activate_stairway_creator: function() {
- // Activate for any geometry creation to help with stair drawing
- if (!editor._creating) {
- alert('Please start creating a geometry first.');
- return;
- }
-
- editor._stairway_creator_active = true;
- editor._stairway_points = [];
-
- // Update UI
- var toggle = document.querySelector('.stairway-toggle');
- if (toggle) {
- toggle.classList.add('active');
- }
-
- // Add stairway configuration panel to sidebar
- editor._add_stairway_config_panel();
-
- // Override map click handler for stairway creation
- editor.map.off('click', editor._original_map_click);
- editor.map.on('click', editor._handle_stairway_click);
-
- // Show instructions
- editor._show_stairway_instructions();
- },
-
- _deactivate_stairway_creator: function() {
- editor._stairway_creator_active = false;
- editor._stairway_points = [];
-
- // Update UI
- var toggle = document.querySelector('.stairway-toggle');
- if (toggle) {
- toggle.classList.remove('active');
- }
-
- // Remove configuration panel
- editor._remove_stairway_config_panel();
-
- // Clear preview
- editor._clear_stairway_preview();
-
- // Restore original map click handler
- editor.map.off('click', editor._handle_stairway_click);
- // Note: Let the normal creation process handle clicks
-
- // Hide instructions
- editor._hide_stairway_instructions();
- },
-
- _add_stairway_config_panel: function() {
- var sidebar = $('#sidebar .content');
- var configHtml = `
-
- `;
-
- sidebar.prepend(configHtml);
-
- // Bind events
- $('#stairway-type').on('change', function() {
- editor._stairway_type = $(this).val();
- editor._update_stairway_preview();
- });
-
+ _setup_staircase_editing: function() {
+ editor._staircase_steps_count = 10
+ editor._staircase_layer = L.layerGroup().addTo(editor.map);
$('#stairway-steps').on('input', function() {
- editor._stairway_steps_count = parseInt($(this).val()) || 10;
- if (editor._stairway_points.length >= 2) {
- editor._update_stairway_preview();
- }
+ editor._staircase_steps_count = parseInt($(this).val()) || 10;
+ editor._update_staircase_preview();
});
- $('#stairway-step-width').on('input', function() {
- editor._stairway_step_width = parseFloat($(this).val()) || 0.3;
- if (editor._stairway_points.length >= 2) {
- editor._update_stairway_preview();
- }
- });
-
- $('#stairway-step-depth').on('input', function() {
- editor._stairway_step_depth = parseFloat($(this).val()) || 0.25;
- if (editor._stairway_points.length >= 2) {
- editor._update_stairway_preview();
- }
- });
-
- $('#generate-stairway').on('click', editor._generate_stairway);
- $('#cancel-stairway').on('click', editor._deactivate_stairway_creator);
+ editor.map.on('editable:editing', editor._update_staircase_preview);
},
- _remove_stairway_config_panel: function() {
- $('#stairway-config').remove();
- },
-
- _show_stairway_instructions: function() {
- var instructions = `
-
- Stairway Creator Instructions:
- Click two points to define the start and end of the straight stairway.
- Individual step geometries will be created perpendicular to this path.
-
- `;
- $('#sidebar .content').prepend(instructions);
- },
-
- _hide_stairway_instructions: function() {
- $('#stairway-instructions').remove();
- },
-
- _handle_stairway_click: function(e) {
- if (!editor._stairway_creator_active) return;
-
- editor._stairway_points.push([e.latlng.lat, e.latlng.lng]);
-
- var requiredPoints = 2; // Always 2 points for straight stairs
-
- if (editor._stairway_points.length === requiredPoints) {
- editor._update_stairway_preview();
- $('#generate-stairway').prop('disabled', false);
- } else if (editor._stairway_points.length < requiredPoints) {
- // Show preview point
- editor._show_stairway_point_preview();
- $('#generate-stairway').prop('disabled', true);
+ _destroy_staircase_editing: function() {
+ if (editor._staircase_layer) {
+ editor.map.removeLayer(editor._staircase_layer)
+ editor._staircase_layer = null
}
+ editor.map.off('editable:editing', editor._update_staircase_preview)
+ if (editor._current_editing_shape && editor._current_editing_shape.editor) {
+ editor._current_editing_shape.editor.cancelDrawing()
+ editor._current_editing_shape.remove()
+ editor._current_editing_shape = null
+ }
+ },
- // Update instructions
- var remaining = requiredPoints - editor._stairway_points.length;
- if (remaining > 0) {
- $('#stairway-instructions').html(`
- Stairway Creator:
- Click ${remaining} more point${remaining > 1 ? 's' : ''} to complete the stairway path.
- `);
+ _transform_point_for_staircase: function(p, p0, cos_a, sin_a) {
+ return {
+ x: + (p.x - p0.x) * cos_a + (p.y - p0.y) * sin_a + p0.x,
+ y: - (p.x - p0.x) * sin_a + (p.y - p0.y) * cos_a + p0.y,
+ }
+ },
+
+ _transform_for_staircase: function(xs, ys, num_stairs) {
+ let base_length = Math.sqrt((xs[1]-xs[0])**2 + (ys[1]-ys[0])**2)
+ let cos_a = (xs[1] - xs[0]) / base_length
+ let sin_a = (ys[1] - ys[0]) / base_length
+ let p0 = { x: xs[0], y: ys[0] }
+
+ xs = points.map(p => editor._transform_point_for_staircase(p, p0, cos_a, sin_a).x)
+ ys = points.map(p => editor._transform_point_for_staircase(p, p0, cos_a, sin_a).y)
+ n = xs.length
+
+ if (Math.abs(Math.max(...ys) - ys[0]) > Math.abs(Math.min(...ys) - ys[0])) {
+ height = Math.max(...ys) - ys[0]
} else {
- $('#stairway-instructions').html(`
- Stairway Creator:
- Path complete! Adjust settings and click "Generate Stairs".
- `);
- }
- },
-
- _show_stairway_point_preview: function() {
- editor._clear_stairway_preview();
-
- // Show clicked points
- editor._stairway_points.forEach(function(point, index) {
- var marker = L.circleMarker([point[0], point[1]], {
- radius: 6,
- color: '#ff6b6b',
- fillColor: '#ff6b6b',
- fillOpacity: 0.8,
- weight: 2
- }).addTo(editor._stairway_preview_layer);
-
- // Add point labels
- var label = L.marker([point[0], point[1]], {
- icon: L.divIcon({
- html: String(index + 1),
- className: 'stairway-point-label',
- iconSize: [20, 20]
- })
- }).addTo(editor._stairway_preview_layer);
- });
- },
-
- _update_stairway_preview: function() {
- if (editor._stairway_points.length === 0) return;
-
- editor._clear_stairway_preview();
- editor._show_stairway_point_preview();
-
- var requiredPoints = 2; // Always 2 points for straight stairs
- if (editor._stairway_points.length < requiredPoints) return;
-
- // Generate and show step preview
- var steps = editor._calculate_stairway_steps();
-
- steps.forEach(function(step, index) {
- var stepLine = L.polyline(step, {
- color: '#4CAF50',
- weight: 3,
- opacity: 0.7,
- className: 'stairway-step-preview'
- }).addTo(editor._stairway_preview_layer);
-
- // Add step number
- var midPoint = editor._getMidPoint(step[0], step[1]);
- var stepLabel = L.marker(midPoint, {
- icon: L.divIcon({
- html: String(index + 1),
- className: 'stairway-step-label',
- iconSize: [16, 16]
- })
- }).addTo(editor._stairway_preview_layer);
- });
- },
-
- _calculate_stairway_steps: function() {
- var steps = [];
- var points = editor._stairway_points;
-
- if (editor._stairway_type === 'straight') {
- steps = editor._calculate_straight_stairs(points[0], points[1]);
- } else if (editor._stairway_type === 'u-shaped') {
- steps = editor._calculate_u_shaped_stairs(points[0], points[1], points[2]);
- } else if (editor._stairway_type === 'c-shaped') {
- steps = editor._calculate_c_shaped_stairs(points[0], points[1], points[2]);
+ height = Math.min(...ys) - ys[0]
}
- return steps;
- },
-
- _calculate_straight_stairs: function(start, end) {
- var steps = [];
- var stepCount = editor._stairway_steps_count;
- var stepWidth = editor._stairway_step_width;
-
- // Calculate direction vector
- var dx = end[1] - start[1];
- var dy = end[0] - start[0];
- var length = Math.sqrt(dx * dx + dy * dy);
-
- // Normalize direction
- var dirX = dx / length;
- var dirY = dy / length;
-
- // Calculate perpendicular vector for step width
- var perpX = -dirY * stepWidth / 111320; // Approximate meters to degrees
- var perpY = dirX * stepWidth / (111320 * Math.cos(start[0] * Math.PI / 180));
-
- // Calculate step positions along the path
- for (var i = 0; i < stepCount; i++) {
- var t = i / (stepCount - 1);
- var centerLat = start[0] + t * dy;
- var centerLng = start[1] + t * dx;
-
- // Create step line perpendicular to path
- var stepStart = [centerLat + perpY / 2, centerLng + perpX / 2];
- var stepEnd = [centerLat - perpY / 2, centerLng - perpX / 2];
-
- steps.push([stepStart, stepEnd]);
- }
-
- return steps;
- },
-
- _calculate_u_shaped_stairs: function(start, turn, end) {
- var steps = [];
- var stepCount = editor._stairway_steps_count;
- var stepsPerSegment = Math.floor(stepCount / 2);
-
- // First segment: start to turn
- var segment1Steps = editor._calculate_straight_stairs(start, turn);
- steps = steps.concat(segment1Steps.slice(0, stepsPerSegment));
-
- // Second segment: turn to end
- var segment2Steps = editor._calculate_straight_stairs(turn, end);
- steps = steps.concat(segment2Steps.slice(0, stepCount - stepsPerSegment));
-
- return steps;
- },
-
- _calculate_c_shaped_stairs: function(start, center, end) {
- var steps = [];
- var stepCount = editor._stairway_steps_count;
- var stepWidth = editor._stairway_step_width;
-
- // Calculate radius and angles for curved path
- var radius = editor._distance(center, start);
- var startAngle = Math.atan2(start[0] - center[0], start[1] - center[1]);
- var endAngle = Math.atan2(end[0] - center[0], end[1] - center[1]);
-
- // Ensure we go the shorter way around
- var angleDiff = endAngle - startAngle;
- if (angleDiff > Math.PI) angleDiff -= 2 * Math.PI;
- if (angleDiff < -Math.PI) angleDiff += 2 * Math.PI;
-
- for (var i = 0; i < stepCount; i++) {
- var t = i / (stepCount - 1);
- var angle = startAngle + t * angleDiff;
-
- // Point on the curve
- var curveLat = center[0] + radius * Math.sin(angle);
- var curveLng = center[1] + radius * Math.cos(angle);
-
- // Calculate tangent direction
- var tangentAngle = angle + Math.PI / 2;
- var perpLat = stepWidth * Math.cos(tangentAngle) / 111320;
- var perpLng = stepWidth * Math.sin(tangentAngle) / (111320 * Math.cos(curveLat * Math.PI / 180));
-
- // Create step line
- var stepStart = [curveLat + perpLat / 2, curveLng + perpLng / 2];
- var stepEnd = [curveLat - perpLat / 2, curveLng - perpLng / 2];
-
- steps.push([stepStart, stepEnd]);
- }
-
- return steps;
- },
-
- _generate_stairway: function() {
- if (editor._stairway_points.length < 2) {
- alert('Please click two points to define the stairway path.');
- return;
- }
-
- // Calculate step positions
- var steps = editor._calculate_straight_stairs(
- editor._stairway_points[0],
- editor._stairway_points[1]
- );
-
- if (steps.length === 0) {
- alert('Could not generate step positions. Please try different points.');
- return;
- }
-
- // Create individual Stair database objects instead of visual lines
- editor._create_individual_stairs(steps);
-
- // Deactivate stairway creator
- editor._deactivate_stairway_creator();
- },
-
- _create_individual_stairs: function(steps) {
- // Get current space ID from the form
- var spaceId = $('#sidebar form').attr('data-space-id') || editor._current_space_id;
- if (!spaceId) {
- alert('Could not determine current space ID. Please try again.');
- return;
- }
-
- // Create individual Stair objects via sequential API calls
- var createdStairs = 0;
- var totalStairs = steps.length;
-
- function createNextStair(index) {
- if (index >= totalStairs) {
- // All stairs created, refresh the view
- alert(`Successfully created ${createdStairs} individual stairs. Refreshing view...`);
- window.location.reload();
- return;
- }
-
- var step = steps[index];
- var lineStringGeometry = {
- type: 'LineString',
- coordinates: step.map(function(point) {
- return [point[1], point[0]]; // Convert lat,lng to lng,lat for GeoJSON
- })
- };
-
- // Create the Stair object
- var stairData = {
- space: spaceId,
- geometry: lineStringGeometry
- };
-
- // Make API call to create individual Stair
- fetch('/editor/stair/create/', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'X-CSRFToken': $('[name=csrfmiddlewaretoken]').val()
- },
- body: JSON.stringify(stairData)
- })
- .then(response => {
- if (response.ok) {
- createdStairs++;
- } else {
- console.error(`Failed to create stair ${index + 1}:`, response.statusText);
+ lines = [{p1: { x: xs[0], y: ys[0] }, p2: { x: xs[1], y: ys[1] }}]
+ for (i = 1; i < num_stairs; ++i) {
+ // intersect line y=y0+height/num_stairs*i with all transformed (xs,ys)
+ y = ys[0] + height/num_stairs*i
+ inters_xs = []
+ for (j = 0; j < n; ++j) {
+ y1 = ys[j]
+ y2 = ys[(j+1)%n]
+ x1 = xs[j]
+ x2 = xs[(j+1)%n]
+ if ((y1 > y && y2 > y) || (y1 < y && y2 < y)) {
+ continue
}
- // Continue with next stair
- createNextStair(index + 1);
- })
- .catch(error => {
- console.error(`Error creating stair ${index + 1}:`, error);
- // Continue with next stair even if this one failed
- createNextStair(index + 1);
- });
- }
- // Start creating stairs
- createNextStair(0);
- },
+ if (Math.abs(x2 - x1) < 0.0001) {
+ // vertical line, m would be infinity
+ inters_xs.push(x1)
+ continue
+ }
- _update_geometry_form_with_steps: function(steps) {
- // Create a MultiLineString geometry containing all steps
- var coordinates = steps.map(function(step) {
- return step.map(function(point) {
- return [point[1], point[0]]; // Convert [lat, lng] to [lng, lat] for GeoJSON
- });
- });
-
- var geometry = {
- type: "MultiLineString",
- coordinates: coordinates
- };
-
- // Update the form
- $('#id_geometry').val(JSON.stringify(geometry));
- },
-
- _clear_stairway_preview: function() {
- if (editor._stairway_preview_layer) {
- editor._stairway_preview_layer.clearLayers();
- }
- },
-
- _clear_stairway_creator_state: function() {
- if (editor._stairway_creator_active) {
- editor._deactivate_stairway_creator();
- }
- },
-
- // Helper functions for stairway calculations
- _getMidPoint: function(point1, point2) {
- return [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2];
- },
-
- _distance: function(point1, point2) {
- var dx = point2[1] - point1[1];
- var dy = point2[0] - point1[0];
- return Math.sqrt(dx * dx + dy * dy);
- },
-
- _is_creating_stair: function() {
- // Primary method: Check stored model type (most reliable)
- if (editor._creating_model_type === 'stair') {
- return true;
- }
-
- // Fallback methods for robustness
-
- // Method 1: Check form data-new attribute
- var form = $('#sidebar form[data-new]');
- if (form.length && form.attr('data-new') === 'stair') {
- return true;
- }
-
- // Method 2: Check URL path
- var path = window.location.pathname;
- if (path.indexOf('/stairs/') !== -1 && path.indexOf('/create') !== -1) {
- return true;
- }
-
- // Method 3: Check if we're in a stairs context by looking at the page title or headers
- var pageTitle = $('#sidebar h3, #sidebar h4').text().toLowerCase();
- if (pageTitle.indexOf('stair') !== -1) {
- return true;
- }
-
- return false;
- },
-
- _get_current_space_id: function() {
- // Multiple methods to get the current space ID
-
- // Method 1: Check URL path for space ID
- var path = window.location.pathname;
- var spaceMatch = path.match(/\/space\/(\d+)\//);
- if (spaceMatch) {
- return parseInt(spaceMatch[1]);
- }
-
- // Method 2: Check form or data attributes
- var spaceInput = $('#sidebar').find('input[name="space"]');
- if (spaceInput.length && spaceInput.val()) {
- return parseInt(spaceInput.val());
- }
-
- // Method 3: Check if there's a space context in the page
- var spaceId = $('#sidebar').find('[data-space-id]').attr('data-space-id');
- if (spaceId) {
- return parseInt(spaceId);
- }
-
- // Method 4: Extract from current geometry URL
- if (editor._last_geometry_url && editor._last_geometry_url.indexOf('/space/') !== -1) {
- var urlMatch = editor._last_geometry_url.match(/\/space\/(\d+)\//);
- if (urlMatch) {
- return parseInt(urlMatch[1]);
+ m = (y2 - y1) / (x2 - x1)
+ q = y2 - m * x2
+ inters_xs.push((y - q) / m)
}
+
+ if (inters_xs.length < 2) {
+ continue
+ }
+
+ min_xs = Math.min(...inters_xs)
+ max_xs = Math.max(...inters_xs)
+ lines.push({p1: {x: min_xs-2, y: y}, p2: {x: max_xs+2, y: y}})
}
- return null;
+ lines = lines.map(l => ({
+ p1: editor._transform_point_for_staircase(l.p1, p0, cos_a, -sin_a),
+ p2: editor._transform_point_for_staircase(l.p2, p0, cos_a, -sin_a),
+ }))
+
+ return lines
+ },
+
+ _get_staircase_lines: function() {
+ if (!editor._current_editing_shape || !editor._current_editing_shape._parts) {
+ return []
+ }
+ points = editor._current_editing_shape._parts[0] || []
+ if (points.length < 3) {
+ return []
+ }
+
+ xs = points.map(p => p.x)
+ ys = points.map(p => p.y)
+ lines = editor._transform_for_staircase(xs, ys, editor._staircase_steps_count)
+ lines = lines.map(l => [
+ editor.map.layerPointToLatLng([l.p1.x, l.p1.y]),
+ editor.map.layerPointToLatLng([l.p2.x, l.p2.y]),
+ ])
+ return lines
+ },
+
+ _update_staircase_preview: function(e = null) {
+ if (editor._staircase_layer) {
+ editor._staircase_layer.clearLayers()
+ }
+ lines = editor._get_staircase_lines()
+ lines.forEach(l => {
+ L.polyline(l, {color: "red"}).addTo(editor._staircase_layer);
+ })
+ },
+
+ _staircase_submit: function(form) {
+ csrfmiddlewaretoken = form.find('input[name=csrfmiddlewaretoken]').attr('value')
+ import_tag = form.find('input[name=import_tag]').val()
+ space = form.attr('space')
+ lines = editor._get_staircase_lines()
+
+ Promise.all(lines.map(l =>
+ fetch("/editor/spaces/" + space + "/stairs/create", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
+ "X-Requested-With": "XMLHttpRequest",
+ },
+ body: "csrfmiddlewaretoken=" + encodeURIComponent(csrfmiddlewaretoken) +
+ "&geometry=" + encodeURIComponent(JSON.stringify({
+ type: "LineString",
+ coordinates: [[l[0]["lng"], l[0]["lat"]], [l[1]["lng"], l[1]["lat"]]]
+ })) +
+ "&import_tag=" + encodeURIComponent(import_tag)
+ })
+ )).then(() => {
+ form.remove()
+ window.location.href = "/editor/spaces/" + space + "/stairs"
+ })
}
};
@@ -2746,6 +2795,354 @@ OverlayControl = L.Control.extend({
},
});
+// Clone Floor Functionality
+editor.cloneFloor = {
+ selectedItems: [],
+ isSelectionMode: false,
+
+ init: function() {
+ // This will be called after geometries are loaded
+ // Check if clone floor elements exist in the template
+ if ($('#clone-floor-btn').length > 0) {
+ // Unbind any existing handlers first
+ $('#clone-floor-btn').off('click');
+ $('#execute-clone-btn').off('click');
+ $('#cancel-clone-btn').off('click');
+ $('#select-all-btn').off('click');
+ $('#clear-selection-btn').off('click');
+
+ // Bind click event to the button that's already in the template
+ $('#clone-floor-btn').click(editor.cloneFloor.toggleSelectionMode);
+
+ // Bind events to the selector elements that are already in the template
+ $('#execute-clone-btn').click(editor.cloneFloor.executeClone);
+ $('#cancel-clone-btn').click(editor.cloneFloor.cancelSelection);
+ $('#select-all-btn').click(editor.cloneFloor.selectAllItems);
+ $('#clear-selection-btn').click(editor.cloneFloor.clearSelection);
+
+ console.log('Clone floor functionality initialized');
+ } else {
+ console.log('Clone floor button not found in template');
+ }
+ },
+
+ toggleSelectionMode: function() {
+ if (editor.cloneFloor.isSelectionMode) {
+ editor.cloneFloor.cancelSelection();
+ } else {
+ editor.cloneFloor.startSelection();
+ }
+ },
+
+ startSelection: function() {
+ editor.cloneFloor.isSelectionMode = true;
+ editor.cloneFloor.selectedItems = [];
+
+ console.log('Clone floor: Starting selection mode');
+
+ $('#clone-floor-btn').html(' Cancel Selection').removeClass('btn-info').addClass('btn-warning');
+ $('#clone-floor-selector').show();
+ editor.cloneFloor.updateSelectedCount();
+
+ // Define supported item types that can be cloned
+ var supportedTypes = ['area', 'obstacle', 'lineobstacle', 'stair', 'ramp', 'hole', 'column', 'poi', 'altitudemarker', 'space', 'building', 'door'];
+
+ // Add click handlers directly to geometry layers
+ if (editor._geometries_layer) {
+ var layerCount = 0;
+ var supportedCount = 0;
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer.feature && layer.feature.properties) {
+ layerCount++;
+ var itemType = layer.feature.properties.type;
+
+ // Only make supported types selectable
+ if (supportedTypes.indexOf(itemType.toLowerCase()) >= 0) {
+ // Add click handler for selection
+ layer.on('click', editor.cloneFloor.onItemClick);
+
+ // Make layer visually selectable
+ var currentStyle = layer.options || {};
+ layer.setStyle(Object.assign({}, currentStyle, {
+ cursor: 'pointer',
+ opacity: Math.max(currentStyle.opacity || 0, 0.5)
+ }));
+ supportedCount++;
+ }
+ }
+ });
+ console.log('Clone floor: Made', supportedCount, 'out of', layerCount, 'geometries selectable (supported types only)');
+ } else {
+ console.log('Clone floor: No geometries layer found');
+ }
+
+ // Disable map editing
+ editor.map.doubleClickZoom.disable();
+ },
+
+ cancelSelection: function() {
+ editor.cloneFloor.isSelectionMode = false;
+ editor.cloneFloor.selectedItems = [];
+
+ $('#clone-floor-btn').html(' Clone to Floor').removeClass('btn-warning').addClass('btn-info');
+ $('#clone-floor-selector').hide();
+
+ // Remove click handlers and reset styles for all geometry layers
+ if (editor._geometries_layer) {
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer.feature && layer.feature.properties) {
+ // Remove click handler
+ layer.off('click', editor.cloneFloor.onItemClick);
+
+ // Reset to original style
+ layer.setStyle(editor._get_geometry_style(layer.feature));
+ }
+ });
+ }
+
+ // Re-enable map editing
+ editor.map.doubleClickZoom.enable();
+ },
+
+ onItemClick: function(e) {
+ if (!editor.cloneFloor.isSelectionMode) return;
+
+ // Prevent default behavior and stop propagation
+ if (e.originalEvent) {
+ e.originalEvent.stopPropagation();
+ e.originalEvent.preventDefault();
+ }
+ L.DomEvent.stopPropagation(e);
+ L.DomEvent.preventDefault(e);
+
+ var layer = e.target;
+ var feature = layer.feature;
+
+ console.log('Clone floor: Item clicked', feature);
+
+ if (!feature || !feature.properties) {
+ console.log('Clone floor: No feature or properties found');
+ return false;
+ }
+
+ var itemId = feature.properties.id;
+ var itemType = feature.properties.type;
+
+ console.log('Clone floor: Item ID:', itemId, 'Type:', itemType);
+ console.log('Clone floor: Full feature properties:', JSON.stringify(feature.properties, null, 2));
+
+ // Define supported item types that can be cloned
+ var supportedTypes = ['area', 'obstacle', 'lineobstacle', 'stair', 'ramp', 'hole', 'column', 'poi', 'altitudemarker', 'space', 'building', 'door'];
+
+ if (supportedTypes.indexOf(itemType.toLowerCase()) === -1) {
+ console.log('Clone floor: Item type "' + itemType + '" is not supported for cloning. Supported types:', supportedTypes);
+ return false;
+ }
+
+ // Check if item is already selected
+ var existingIndex = editor.cloneFloor.selectedItems.findIndex(
+ function(item) { return item.item_id === itemId && item.item_type === itemType; }
+ );
+
+ if (existingIndex >= 0) {
+ // Deselect item
+ editor.cloneFloor.selectedItems.splice(existingIndex, 1);
+ console.log('Clone floor: Item deselected');
+ } else {
+ // Select item
+ editor.cloneFloor.selectedItems.push({
+ item_id: itemId,
+ item_type: itemType
+ });
+ console.log('Clone floor: Item selected');
+ }
+
+ editor.cloneFloor.updateSelectedCount();
+ editor.cloneFloor.updateVisualSelection();
+
+ return false; // Prevent further event propagation
+ },
+
+ updateSelectedCount: function() {
+ $('#selected-count').text(editor.cloneFloor.selectedItems.length);
+ },
+
+ selectAllItems: function() {
+ if (!editor.cloneFloor.isSelectionMode) {
+ console.log('Clone floor: Select all called but not in selection mode');
+ return;
+ }
+
+ // Clear current selection
+ editor.cloneFloor.selectedItems = [];
+
+ // Define supported item types that can be cloned
+ var supportedTypes = ['area', 'obstacle', 'lineobstacle', 'stair', 'ramp', 'hole', 'column', 'poi', 'altitudemarker', 'space', 'building', 'door'];
+
+ if (editor._geometries_layer) {
+ var selectedCount = 0;
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer.feature && layer.feature.properties) {
+ var itemType = layer.feature.properties.type;
+ var itemId = layer.feature.properties.id;
+
+ // Only select supported types
+ if (supportedTypes.indexOf(itemType.toLowerCase()) >= 0) {
+ editor.cloneFloor.selectedItems.push({
+ item_id: itemId,
+ item_type: itemType
+ });
+ selectedCount++;
+ }
+ }
+ });
+ console.log('Clone floor: Selected all', selectedCount, 'supported items');
+ }
+
+ editor.cloneFloor.updateSelectedCount();
+ editor.cloneFloor.updateVisualSelection();
+ },
+
+ clearSelection: function() {
+ if (!editor.cloneFloor.isSelectionMode) {
+ console.log('Clone floor: Clear selection called but not in selection mode');
+ return;
+ }
+
+ // Clear current selection
+ editor.cloneFloor.selectedItems = [];
+ console.log('Clone floor: Cleared all selected items');
+
+ editor.cloneFloor.updateSelectedCount();
+ editor.cloneFloor.updateVisualSelection();
+ },
+
+ updateVisualSelection: function() {
+ if (!editor._geometries_layer) return;
+
+ // Reset all styles first
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer.feature && layer.feature.properties) {
+ layer.setStyle(editor._get_geometry_style(layer.feature));
+ }
+ });
+
+ // Highlight selected items
+ editor._geometries_layer.eachLayer(function(layer) {
+ if (layer.feature && layer.feature.properties) {
+ var isSelected = false;
+ for (var i = 0; i < editor.cloneFloor.selectedItems.length; i++) {
+ var item = editor.cloneFloor.selectedItems[i];
+ if (item.item_id === layer.feature.properties.id &&
+ item.item_type === layer.feature.properties.type) {
+ isSelected = true;
+ break;
+ }
+ }
+
+ if (isSelected) {
+ layer.setStyle({
+ stroke: true,
+ color: '#ff0000',
+ weight: 4,
+ opacity: 1,
+ fillOpacity: 0.7,
+ fillColor: '#ff0000'
+ });
+ }
+ }
+ });
+ },
+
+
+ executeClone: function() {
+ var targetLevelId = $('#target-level-select').val();
+ var keepSync = $('#keep-sync-checkbox').is(':checked');
+
+ if (!targetLevelId) {
+ alert('Please select a target level');
+ return;
+ }
+
+ if (editor.cloneFloor.selectedItems.length === 0) {
+ alert('Please select items to clone');
+ return;
+ }
+
+ // Get current level ID
+ var currentLevelId = editor._level_control.current_level_id;
+
+ if (currentLevelId === parseInt(targetLevelId)) {
+ alert('Source and target levels cannot be the same');
+ return;
+ }
+
+ // Show loading state
+ $('#execute-clone-btn').prop('disabled', true).html(' Cloning...');
+
+ // Prepare request data
+ var requestData = {
+ source_level_id: currentLevelId,
+ target_level_id: parseInt(targetLevelId),
+ items: editor.cloneFloor.selectedItems,
+ keep_sync: keepSync
+ };
+
+ // Debug: Log detailed request data
+ console.log('Clone floor: Making API call with data:', requestData);
+ console.log('Clone floor: Selected items details:', JSON.stringify(editor.cloneFloor.selectedItems, null, 2));
+ console.log('Clone floor: Source level ID:', currentLevelId);
+ console.log('Clone floor: Target level ID:', parseInt(targetLevelId));
+
+ // Use the raw fetch API with better error handling
+ c3nav_api.authenticated().then(function() {
+ return fetch(c3nav_api.make_url('editor/clone-floor/'), {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-API-Key': c3nav_api.key,
+ 'Accept': 'application/json'
+ },
+ body: JSON.stringify(requestData)
+ });
+ })
+ .then(function(response) {
+ console.log('Clone floor: API response status:', response.status);
+
+ if (!response.ok) {
+ // Log the actual response text for debugging
+ return response.text().then(function(text) {
+ console.error('Clone floor: API error response:', text);
+ throw new Error('HTTP ' + response.status + ': ' + response.statusText);
+ });
+ }
+
+ return response.json();
+ })
+ .then(function(data) {
+ console.log('Clone floor: API response data:', data);
+ console.log('Clone floor: API response type:', typeof data);
+ console.log('Clone floor: API response keys:', Object.keys(data));
+
+ if (data.success) {
+ var clonedCount = data.cloned_items ? data.cloned_items.length : 0;
+ alert('Successfully cloned ' + clonedCount + ' items: ' + data.message);
+ editor.cloneFloor.cancelSelection();
+ } else {
+ alert('Clone failed: ' + data.message);
+ }
+ })
+ .catch(function(error) {
+ console.error('Clone floor: Error details:', error);
+ alert('Clone failed: ' + error.message);
+ })
+ .finally(function() {
+ $('#execute-clone-btn').prop('disabled', false).html(' Clone Items');
+ });
+ }
+};
+
if ($('#sidebar').length) {
editor.init();
}
diff --git a/src/c3nav/editor/templates/editor/create_staircase.html b/src/c3nav/editor/templates/editor/create_staircase.html
new file mode 100644
index 00000000..0c3937ea
--- /dev/null
+++ b/src/c3nav/editor/templates/editor/create_staircase.html
@@ -0,0 +1,40 @@
+{% load bootstrap3 %}
+{% load i18n %}
+
+{% include 'editor/fragment_levels.html' %}
+
+
+ {% blocktrans %}Add staircase{% endblocktrans %}
+
+{% bootstrap_messages %}
+
+
diff --git a/src/c3nav/editor/templates/editor/level.html b/src/c3nav/editor/templates/editor/level.html
index fdd08ee3..0082939f 100644
--- a/src/c3nav/editor/templates/editor/level.html
+++ b/src/c3nav/editor/templates/editor/level.html
@@ -16,6 +16,9 @@
{% trans 'Level' as model_title %}
{% blocktrans %}Edit {{ model_title }}{% endblocktrans %}
+
+ Clone to Floor
+
{% if level.on_top_of == None %}
@@ -25,6 +28,45 @@
{% endif %}
+
+
+
Clone Selected Items
+
+ Target Level:
+
+ Select target level...
+ {% for l in levels %}
+ {% if l.pk != level.pk %}
+ {{ l.title }}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+ Keep items synchronized across levels
+
+
+
+
+ Clone Items
+
+
+ Select All
+
+
+ Clear Selection
+
+
+ Cancel
+
+
+
+
Selected Items: 0
+
Click on map items to select them for cloning. Selected items will be highlighted in red.
+
+
+
{% url 'editor.levels.graph' level=level.pk as graph_url %}
{% url 'editor.levels.overlays' level=level.pk as overlays_url %}
{% include 'editor/fragment_child_models.html' with graph_url=graph_url overlays_url=overlays_url %}
diff --git a/src/c3nav/editor/templates/editor/list.html b/src/c3nav/editor/templates/editor/list.html
index fc923038..1bd75d0a 100644
--- a/src/c3nav/editor/templates/editor/list.html
+++ b/src/c3nav/editor/templates/editor/list.html
@@ -20,6 +20,11 @@
{% blocktrans %}New {{ model_title }}{% endblocktrans %}
+ {% if model_title == "Stair" %}
+
+ {% blocktrans %}New staircase{% endblocktrans %}
+
+ {% endif %}
{% endif %}
{% if explicit_edit %}
diff --git a/src/c3nav/editor/urls.py b/src/c3nav/editor/urls.py
index fe4f50ef..4c987ea1 100644
--- a/src/c3nav/editor/urls.py
+++ b/src/c3nav/editor/urls.py
@@ -4,7 +4,7 @@ from django.views.generic import TemplateView
from c3nav.editor.views.account import change_password_view, login_view, logout_view, register_view
from c3nav.editor.views.changes import changeset_detail, changeset_edit, changeset_redirect
-from c3nav.editor.views.edit import edit, graph_edit, level_detail, list_objects, main_index, sourceimage, space_detail
+from c3nav.editor.views.edit import edit, graph_edit, level_detail, list_objects, main_index, staircase_edit, sourceimage, space_detail
from c3nav.editor.views.overlays import overlays_list, overlay_features, overlay_feature_edit
from c3nav.editor.views.quest import QuestFormView
from c3nav.editor.views.users import user_detail, user_redirect
@@ -33,7 +33,6 @@ def add_editor_urls(model_name, parent_model_name=None, with_list=True, explicit
])
return result
-
# todo: custom path converters
urlpatterns = [
path('levels//', level_detail, name='editor.levels.detail'),
@@ -91,3 +90,4 @@ urlpatterns.extend(add_editor_urls('LeaveDescription', 'Space'))
urlpatterns.extend(add_editor_urls('CrossDescription', 'Space'))
urlpatterns.extend(add_editor_urls('BeaconMeasurement', 'Space'))
urlpatterns.extend(add_editor_urls('RangingBeacon', 'Space'))
+urlpatterns.append(path('spaces//staircase', edit, name='editor.stairs.staircase', kwargs={'model': apps.get_model('mapdata', 'Stair')}))
diff --git a/src/c3nav/editor/utils.py b/src/c3nav/editor/utils.py
index 7c846405..6fdb30c8 100644
--- a/src/c3nav/editor/utils.py
+++ b/src/c3nav/editor/utils.py
@@ -55,3 +55,274 @@ class SpaceChildEditUtils(DefaultEditUtils):
@property
def _geometry_url(self):
return '/api/v2/editor/geometries/space/'+str(self.space.pk) # todo: resolve correctly
+
+
+def clone_level_items(request, source_level_id, target_level_id, items, keep_sync=False):
+ """
+ Clone selected map items from one level to another.
+
+ Args:
+ request: Django request object
+ source_level_id: ID of the source level
+ target_level_id: ID of the target level
+ items: List of items to clone (each with item_type and item_id)
+ keep_sync: Whether to keep cloned items synchronized
+
+ Returns:
+ Dictionary with success status, cloned items list, and message
+ """
+ from django.apps import apps
+ from django.contrib.contenttypes.models import ContentType
+ from c3nav.mapdata.models import Level
+ from c3nav.mapdata.models.sync import ClonedItemSync
+ from c3nav.editor.api.schemas import CloneFloorResponseSchema
+
+ # Get the source and target levels
+ try:
+ source_level = Level.objects.get(pk=source_level_id)
+ target_level = Level.objects.get(pk=target_level_id)
+ except Level.DoesNotExist:
+ return CloneFloorResponseSchema(
+ success=False,
+ cloned_items=[],
+ message="Source or target level not found"
+ ).model_dump(mode="json")
+
+ # Check if user has editor permissions (simplified check for API)
+ if not hasattr(request, 'user') or not request.user.is_authenticated:
+ return CloneFloorResponseSchema(
+ success=False,
+ cloned_items=[],
+ message="Authentication required"
+ ).model_dump(mode="json")
+
+ cloned_items = []
+
+ # Define supported item types and their model mappings
+ SUPPORTED_TYPES = {
+ 'area': 'Area',
+ 'obstacle': 'Obstacle',
+ 'lineobstacle': 'LineObstacle',
+ 'stair': 'Stair',
+ 'ramp': 'Ramp',
+ 'hole': 'Hole',
+ 'column': 'Column',
+ 'poi': 'POI',
+ 'altitudemarker': 'AltitudeMarker',
+ 'space': 'Space',
+ 'building': 'Building',
+ 'door': 'Door'
+ }
+
+ try:
+ print(f"Starting to process {len(items)} items")
+
+ for i, item in enumerate(items):
+ item_type = item.item_type.lower()
+ item_id = item.item_id
+
+ print(f"Processing item {i+1}/{len(items)}: {item_type} with ID {item_id}")
+
+ if item_type not in SUPPORTED_TYPES:
+ print(f"Item type '{item_type}' not supported. Supported types: {list(SUPPORTED_TYPES.keys())}")
+ continue
+
+ model_name = SUPPORTED_TYPES[item_type]
+ Model = apps.get_model('mapdata', model_name)
+
+ print(f"Looking for {model_name} with ID {item_id}")
+
+ # Get the original item
+ try:
+ original_item = Model.objects.get(pk=item_id)
+ print(f"Found original item: {original_item}")
+ except Model.DoesNotExist:
+ print(f"{model_name} with ID {item_id} not found")
+ continue
+
+ # Prepare the clone data
+ clone_data = {}
+ print(f"Model fields: {[f.name for f in Model._meta.fields]}")
+
+ # Handle different item types differently
+ if item_type == 'space':
+ # For spaces, we need level but no space reference
+ print(f"Processing space item with fields: {[f.name for f in Model._meta.fields]}")
+ for field in Model._meta.fields:
+ if field.name in ['id', 'pk']:
+ continue
+
+ # Skip auto fields and read-only fields
+ if (hasattr(field, 'auto_created') and field.auto_created) or \
+ (hasattr(field, 'editable') and not field.editable):
+ print(f"Skipping field {field.name}: auto_created={getattr(field, 'auto_created', False)}, editable={getattr(field, 'editable', True)}")
+ continue
+
+ try:
+ field_value = getattr(original_item, field.name)
+ print(f"Field {field.name}: {field_value} (type: {type(field_value)})")
+ except (AttributeError, ValueError) as e:
+ print(f"Could not get field {field.name}: {e}")
+ continue
+
+ # Handle level reference
+ if field.name == 'level':
+ clone_data[field.name] = target_level
+ print(f"Set level to target_level: {target_level}")
+ else:
+ # Copy other fields - but check for special fields that shouldn't be copied
+ if field.name in ['slug']:
+ # Don't copy slug directly as it needs to be unique
+ # Instead, create a new unique slug based on the original
+ if field_value:
+ import re
+ base_slug = re.sub(r'-\d+$', '', field_value) # Remove trailing numbers
+ new_slug = f"{base_slug}-clone"
+ # Make sure the new slug is unique
+ counter = 1
+ test_slug = new_slug
+ while Model.objects.filter(slug=test_slug).exists():
+ test_slug = f"{new_slug}-{counter}"
+ counter += 1
+ clone_data[field.name] = test_slug
+ print(f"Generated unique slug: {test_slug}")
+ continue
+ if field_value is not None:
+ clone_data[field.name] = field_value
+ print(f"Copied field {field.name}: {field_value}")
+
+ print(f"Final space clone data: {clone_data}")
+ else:
+ # For space-related items (areas, obstacles, etc.)
+ space_found = False
+ for field in Model._meta.fields:
+ if field.name in ['id', 'pk']:
+ continue
+
+ # Skip auto fields and read-only fields
+ if (hasattr(field, 'auto_created') and field.auto_created) or \
+ (hasattr(field, 'editable') and not field.editable):
+ continue
+
+ try:
+ field_value = getattr(original_item, field.name)
+ except (AttributeError, ValueError):
+ continue
+
+ # Handle level reference
+ if field.name == 'level':
+ clone_data[field.name] = target_level
+ # Handle space reference - need to find equivalent space on target level
+ elif field.name == 'space':
+ if hasattr(original_item, 'space') and original_item.space:
+ original_space = original_item.space
+ # Try to find a space with the same slug/title on target level
+ try:
+ target_space = target_level.spaces.filter(
+ title=original_space.title
+ ).first()
+ if target_space:
+ clone_data[field.name] = target_space
+ space_found = True
+ print(f"Found target space: {target_space}")
+ else:
+ print(f"No equivalent space found for '{original_space.title}' on target level")
+ except Exception as e:
+ print(f"Error finding target space: {e}")
+ else:
+ # Copy other fields
+ if field_value is not None:
+ clone_data[field.name] = field_value
+
+ # Skip space-related items if no equivalent space found
+ if 'space' in [f.name for f in Model._meta.fields] and not space_found:
+ print(f"Skipping {item_type} {item_id} because no equivalent space found")
+ continue
+
+ print(f"Clone data for {item_type} {item_id}: {clone_data}")
+
+ # Create the cloned item
+ try:
+ print(f"Attempting to clone {model_name} with data: {clone_data}")
+ print(f"Creating {model_name} object...")
+ cloned_item = Model(**clone_data)
+ print(f"Created object, now saving...")
+ cloned_item.save()
+ print(f"Successfully created cloned item with ID: {cloned_item.pk}")
+ except Exception as create_error:
+ print(f"Error creating {model_name}: {create_error}")
+ print(f"Error type: {type(create_error)}")
+ print(f"Clone data was: {clone_data}")
+
+ # Try a different approach - create empty object and set fields one by one
+ try:
+ print("Trying field-by-field approach...")
+ cloned_item = Model()
+ for field_name, field_value in clone_data.items():
+ try:
+ setattr(cloned_item, field_name, field_value)
+ print(f"Set {field_name} = {field_value}")
+ except Exception as field_error:
+ print(f"Could not set {field_name}={field_value}: {field_error}")
+ cloned_item.save()
+ print(f"Successfully created item using setattr approach with ID: {cloned_item.pk}")
+ except Exception as setattr_error:
+ print(f"Setattr approach also failed: {setattr_error}")
+ continue # Skip this item
+
+ # Create sync relationship if requested
+ if keep_sync:
+ try:
+ original_ct = ContentType.objects.get_for_model(Model)
+ cloned_ct = ContentType.objects.get_for_model(Model)
+
+ # Define fields that should be synchronized for each model type
+ sync_field_map = {
+ 'Area': ['title', 'access_restriction', 'slow_down_factor'],
+ 'Obstacle': ['height', 'altitude'],
+ 'LineObstacle': ['width', 'height', 'altitude'],
+ 'Stair': [], # Geometry-only, no additional fields to sync
+ 'Ramp': [],
+ 'Hole': [],
+ 'Column': ['access_restriction'],
+ 'POI': ['title', 'access_restriction'],
+ 'AltitudeMarker': ['groundaltitude'],
+ 'Space': ['title', 'access_restriction', 'outside'],
+ 'Building': ['title'],
+ 'Door': ['access_restriction']
+ }
+
+ sync_fields = sync_field_map.get(model_name, [])
+
+ ClonedItemSync.objects.create(
+ original_content_type=original_ct,
+ original_object_id=original_item.pk,
+ cloned_content_type=cloned_ct,
+ cloned_object_id=cloned_item.pk,
+ sync_fields=sync_fields
+ )
+ except Exception as sync_error:
+ # Don't fail the entire operation if sync setup fails
+ print(f"Warning: Could not create sync relationship: {sync_error}")
+
+ cloned_items.append({
+ 'item_type': item_type,
+ 'original_id': item_id,
+ 'cloned_id': cloned_item.pk
+ })
+
+ print(f"Successfully added item {i+1} to cloned_items list")
+
+ print(f"Finished processing. Total cloned items: {len(cloned_items)}")
+ return CloneFloorResponseSchema(
+ success=True,
+ cloned_items=cloned_items,
+ message=f"Successfully cloned {len(cloned_items)} items"
+ ).model_dump(mode="json")
+
+ except Exception as e:
+ return CloneFloorResponseSchema(
+ success=False,
+ cloned_items=cloned_items,
+ message=f"Error during cloning: {str(e)}"
+ ).model_dump(mode="json")
diff --git a/src/c3nav/editor/views/edit.py b/src/c3nav/editor/views/edit.py
index fc3060c0..3b7aa8c7 100644
--- a/src/c3nav/editor/views/edit.py
+++ b/src/c3nav/editor/views/edit.py
@@ -70,6 +70,12 @@ def main_index(request):
})
+@etag(editor_etag_func)
+@accesses_mapdata
+@sidebar_view
+def staircase_edit(request, space):
+ return render(request, "editor/create_staircase.html")
+
@etag(editor_etag_func)
@accesses_mapdata
@sidebar_view
@@ -405,7 +411,11 @@ def edit(request, pk=None, model=None, level=None, space=None, on_top_of=None, e
"access_restriction_select": True,
})
- return render(request, 'editor/edit.html', ctx)
+ if request.path.endswith("staircase"):
+ ctx["space"] = space_id
+ return render(request, 'editor/create_staircase.html', ctx)
+ else:
+ return render(request, 'editor/edit.html', ctx)
def get_visible_spaces(request):
diff --git a/src/c3nav/mapdata/api/updates.py b/src/c3nav/mapdata/api/updates.py
index b7801e8c..541677fb 100644
--- a/src/c3nav/mapdata/api/updates.py
+++ b/src/c3nav/mapdata/api/updates.py
@@ -125,7 +125,7 @@ def fetch_updates(request, response: HttpResponse):
}
if cross_origin is None:
result.update({
- 'user_data': request.user_data,
+ 'user_data': dict(request.user_data),
})
if cross_origin is not None:
diff --git a/src/c3nav/mapdata/apps.py b/src/c3nav/mapdata/apps.py
index 5d47afa1..6bb6e524 100644
--- a/src/c3nav/mapdata/apps.py
+++ b/src/c3nav/mapdata/apps.py
@@ -8,3 +8,4 @@ class MapdataConfig(AppConfig):
from c3nav.mapdata.utils.cache.changes import register_signals
register_signals()
import c3nav.mapdata.metrics # noqa
+ import c3nav.mapdata.signals.sync # noqa
diff --git a/src/c3nav/mapdata/management/commands/add_sensor.py b/src/c3nav/mapdata/management/commands/add_sensor.py
new file mode 100644
index 00000000..829f8d68
--- /dev/null
+++ b/src/c3nav/mapdata/management/commands/add_sensor.py
@@ -0,0 +1,141 @@
+import json
+from django.core.management.base import BaseCommand
+from django.utils import timezone
+from shapely.geometry import Point
+
+from c3nav.mapdata.models import DataOverlay, DataOverlayFeature, Level
+
+
+class Command(BaseCommand):
+ help = 'Add a new sensor to an existing overlay'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--overlay-id',
+ type=int,
+ required=True,
+ help='ID of the overlay to add the sensor to',
+ )
+ parser.add_argument(
+ '--sensor-id',
+ type=str,
+ required=True,
+ help='Unique ID for the sensor (e.g., NOI:Sensor-ID)',
+ )
+ parser.add_argument(
+ '--name',
+ type=str,
+ required=True,
+ help='Display name for the sensor',
+ )
+ parser.add_argument(
+ '--x',
+ type=float,
+ required=True,
+ help='X coordinate in c3nav coordinate system',
+ )
+ parser.add_argument(
+ '--y',
+ type=float,
+ required=True,
+ help='Y coordinate in c3nav coordinate system',
+ )
+ parser.add_argument(
+ '--level',
+ type=str,
+ default='floor0',
+ help='Level/floor where the sensor is located (default: floor0)',
+ )
+ parser.add_argument(
+ '--sensor-type',
+ type=str,
+ default='environmental',
+ help='Type of sensor (default: environmental)',
+ )
+
+ def handle(self, *args, **options):
+ try:
+ overlay = DataOverlay.objects.get(id=options['overlay_id'])
+ except DataOverlay.DoesNotExist:
+ self.stderr.write(f'Overlay with ID {options["overlay_id"]} not found')
+ return
+
+ try:
+ level = Level.objects.get(short_label=options['level'])
+ except Level.DoesNotExist:
+ self.stderr.write(f'Level "{options["level"]}" not found')
+ return
+
+ # Update overlay configuration to include the new sensor
+ sensor_config = overlay.sensor_config or {}
+ if 'sensors' not in sensor_config:
+ sensor_config['sensors'] = []
+
+ # Check if sensor already exists in config
+ existing_sensor = None
+ for i, sensor in enumerate(sensor_config['sensors']):
+ if sensor['id'] == options['sensor_id']:
+ existing_sensor = i
+ break
+
+ new_sensor_config = {
+ 'id': options['sensor_id'],
+ 'coordinates': {'x': options['x'], 'y': options['y']},
+ 'level': options['level']
+ }
+
+ if existing_sensor is not None:
+ sensor_config['sensors'][existing_sensor] = new_sensor_config
+ self.stdout.write(f'Updated sensor configuration for {options["sensor_id"]}')
+ else:
+ sensor_config['sensors'].append(new_sensor_config)
+ self.stdout.write(f'Added sensor configuration for {options["sensor_id"]}')
+
+ overlay.sensor_config = sensor_config
+ overlay.save()
+
+ # Create the sensor feature (or update if it exists)
+ point = Point(options['x'], options['y'])
+
+ feature, created = DataOverlayFeature.objects.update_or_create(
+ overlay=overlay,
+ sensor_id=options['sensor_id'],
+ defaults={
+ 'titles': {'en': options['name']},
+ 'geometry': point,
+ 'level': level,
+ 'sensor_type': options['sensor_type'],
+ 'coordinates_x': options['x'],
+ 'coordinates_y': options['y'],
+ 'fill_color': '#95A5A6', # Default gray
+ 'stroke_color': '#95A5A6',
+ 'stroke_width': 2,
+ 'fill_opacity': 0.8,
+ 'show_label': True,
+ 'show_geometry': True,
+ 'interactive': True,
+ 'point_icon': 'sensors',
+ 'last_updated': timezone.now(),
+ 'extra_data': {
+ 'Status': 'No data yet',
+ 'Last Updated': timezone.now().strftime('%Y-%m-%d %H:%M:%S'),
+ 'Data Source': 'Manual configuration',
+ 'Station ID': options['sensor_id']
+ }
+ }
+ )
+
+ action = 'Created' if created else 'Updated'
+ self.stdout.write(
+ self.style.SUCCESS(
+ f'{action} sensor "{options["name"]}" (ID: {options["sensor_id"]}) '
+ f'at coordinates ({options["x"]}, {options["y"]}) on level {options["level"]}'
+ )
+ )
+
+ self.stdout.write(
+ 'You can now run the scrape command to fetch data for this sensor:'
+ )
+ self.stdout.write(
+ f'python manage.py manage_sensors --scrape-data --overlay-id {options["overlay_id"]}'
+ )
diff --git a/src/c3nav/mapdata/management/commands/list_sensors.py b/src/c3nav/mapdata/management/commands/list_sensors.py
new file mode 100644
index 00000000..75d1e6b8
--- /dev/null
+++ b/src/c3nav/mapdata/management/commands/list_sensors.py
@@ -0,0 +1,60 @@
+from django.core.management.base import BaseCommand
+from c3nav.mapdata.models import DataOverlay, DataOverlayFeature
+
+
+class Command(BaseCommand):
+ help = 'List all sensors in overlays'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--overlay-id',
+ type=int,
+ help='ID of a specific overlay to list sensors for',
+ )
+
+ def handle(self, *args, **options):
+ if options['overlay_id']:
+ try:
+ overlay = DataOverlay.objects.get(id=options['overlay_id'])
+ overlays = [overlay]
+ except DataOverlay.DoesNotExist:
+ self.stderr.write(f'Overlay with ID {options["overlay_id"]} not found')
+ return
+ else:
+ overlays = DataOverlay.objects.all()
+
+ for overlay in overlays:
+ self.stdout.write(f'\n=== Overlay {overlay.id}: {overlay.titles.get("en", "Unknown")} ===')
+
+ # Show overlay configuration
+ sensor_config = overlay.sensor_config or {}
+ configured_sensors = sensor_config.get('sensors', [])
+ if configured_sensors:
+ self.stdout.write('Configured sensors:')
+ for sensor in configured_sensors:
+ self.stdout.write(f' - {sensor["id"]} at ({sensor["coordinates"]["x"]}, {sensor["coordinates"]["y"]}) on level {sensor.get("level", "default")}')
+
+ # Show actual sensor features in database
+ features = DataOverlayFeature.objects.filter(overlay=overlay)
+ if features:
+ self.stdout.write(f'\nSensor features in database ({features.count()}):')
+ for feature in features:
+ title = feature.titles.get('en', 'Unknown') if feature.titles else 'Unknown'
+ level_name = feature.level.short_label if feature.level else 'No level'
+ coords = f'({feature.coordinates_x}, {feature.coordinates_y})' if feature.coordinates_x is not None else 'No coords'
+ last_updated = feature.last_updated.strftime('%Y-%m-%d %H:%M:%S') if feature.last_updated else 'Never'
+
+ self.stdout.write(f' - {feature.sensor_id}: {title}')
+ self.stdout.write(f' Level: {level_name}, Coords: {coords}')
+ self.stdout.write(f' Type: {feature.sensor_type or "Unknown"}, Last updated: {last_updated}')
+
+ if feature.extra_data:
+ readings = [f'{k}: {v}' for k, v in feature.extra_data.items()
+ if k not in ['Last Updated', 'Data Source', 'Station ID']]
+ if readings:
+ self.stdout.write(f' Readings: {", ".join(readings)}')
+ else:
+ self.stdout.write('No sensor features found in database')
+
+ if not overlays:
+ self.stdout.write('No overlays found')
diff --git a/src/c3nav/mapdata/management/commands/manage_sensors.py b/src/c3nav/mapdata/management/commands/manage_sensors.py
new file mode 100644
index 00000000..8996d06c
--- /dev/null
+++ b/src/c3nav/mapdata/management/commands/manage_sensors.py
@@ -0,0 +1,461 @@
+import json
+import requests
+from django.core.management.base import BaseCommand
+from django.utils import timezone
+from shapely.geometry import Point
+
+from c3nav.mapdata.models import DataOverlay, DataOverlayFeature, Level
+
+class Command(BaseCommand):
+ help = 'Setup and manage sensor overlays with generic sensor data'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--create-overlay',
+ type=str,
+ help='Create a new sensor overlay with given name',
+ )
+ parser.add_argument(
+ '--data-source-url',
+ type=str,
+ help='URL to scrape sensor data from',
+ )
+ parser.add_argument(
+ '--sensor-config',
+ type=str,
+ help='JSON configuration for sensor data mapping',
+ )
+ parser.add_argument(
+ '--add-sensor',
+ action='store_true',
+ help='Add sensors manually with provided coordinates',
+ )
+ parser.add_argument(
+ '--scrape-data',
+ action='store_true',
+ help='Scrape data from configured data sources',
+ )
+ parser.add_argument(
+ '--overlay-id',
+ type=int,
+ help='ID of the overlay to work with',
+ )
+
+ def handle(self, *args, **options):
+ if options['create_overlay']:
+ self.create_overlay(options)
+ elif options['add_sensor']:
+ self.add_sensors_manually(options)
+ elif options['scrape_data']:
+ self.scrape_sensor_data(options)
+ else:
+ self.stdout.write('Please specify an action: --create-overlay, --add-sensor, or --scrape-data')
+
+ def create_overlay(self, options):
+ """Create a new sensor overlay"""
+ name = options['create_overlay']
+
+ # Parse sensor configuration
+ sensor_config = {}
+ if options['sensor_config']:
+ try:
+ sensor_config = json.loads(options['sensor_config'])
+ except json.JSONDecodeError:
+ self.stderr.write('Invalid JSON in sensor_config')
+ return
+
+ overlay = DataOverlay.objects.create(
+ titles={'en': name},
+ description=f'Sensor overlay for {name}',
+ default_geomtype=DataOverlay.GeometryType.POINT,
+ data_source_url=options['data_source_url'],
+ sensor_config=sensor_config,
+ update_interval=30, # Update every 30 seconds
+ )
+
+ self.stdout.write(
+ self.style.SUCCESS(f'Created overlay "{name}" with ID {overlay.id}')
+ )
+
+ def add_sensors_manually(self, options):
+ """Add sensors manually with coordinates"""
+ if not options['overlay_id']:
+ self.stderr.write('--overlay-id required when adding sensors manually')
+ return
+
+ try:
+ overlay = DataOverlay.objects.get(id=options['overlay_id'])
+ except DataOverlay.DoesNotExist:
+ self.stderr.write(f'Overlay with ID {options["overlay_id"]} not found')
+ return
+
+ # Get the ground floor level (floor0)
+ try:
+ level = Level.objects.get(short_label='floor0')
+ except Level.DoesNotExist:
+ level = Level.objects.first() # Fallback to first level
+ if not level:
+ self.stderr.write('No levels found in database')
+ return
+
+ # Example sensors - this should be configurable via command line or config file
+ sensors = [
+ {
+ 'sensor_id': 'temp_001',
+ 'sensor_type': 'temperature',
+ 'name': 'Meeting Room A1 - Temperature',
+ 'coordinates_x': 500,
+ 'coordinates_y': 300,
+ 'value': 22.5,
+ 'unit': '°C'
+ },
+ {
+ 'sensor_id': 'hum_001',
+ 'sensor_type': 'humidity',
+ 'name': 'Meeting Room A1 - Humidity',
+ 'coordinates_x': 500,
+ 'coordinates_y': 300,
+ 'value': 55.0,
+ 'unit': '%'
+ },
+ {
+ 'sensor_id': 'temp_002',
+ 'sensor_type': 'temperature',
+ 'name': 'Server Room - Temperature',
+ 'coordinates_x': 750,
+ 'coordinates_y': 400,
+ 'value': 18.2,
+ 'unit': '°C'
+ },
+ {
+ 'sensor_id': 'co2_001',
+ 'sensor_type': 'co2',
+ 'name': 'Office Space - CO2',
+ 'coordinates_x': 300,
+ 'coordinates_y': 600,
+ 'value': 450,
+ 'unit': 'ppm'
+ }
+ ]
+
+ for sensor_item in sensors:
+ # Create geometry from c3nav coordinates
+ point = Point(sensor_item['coordinates_x'], sensor_item['coordinates_y'])
+
+ # Get color based on sensor type and value
+ color = self.get_sensor_color(sensor_item['sensor_type'], sensor_item['value'])
+
+ feature = DataOverlayFeature.objects.create(
+ overlay=overlay,
+ titles={'en': sensor_item['name']},
+ geometry=point,
+ level=level,
+ sensor_id=sensor_item['sensor_id'],
+ sensor_type=sensor_item['sensor_type'],
+ sensor_value=sensor_item['value'],
+ sensor_unit=sensor_item['unit'],
+ coordinates_x=sensor_item['coordinates_x'],
+ coordinates_y=sensor_item['coordinates_y'],
+ fill_color=color,
+ stroke_color=color,
+ stroke_width=2,
+ fill_opacity=0.8,
+ show_label=True,
+ show_geometry=True,
+ interactive=True,
+ point_icon=self.get_sensor_icon(sensor_item['sensor_type']),
+ last_updated=timezone.now(),
+ extra_data={
+ 'value': str(sensor_item['value']),
+ 'unit': sensor_item['unit'],
+ 'sensor_type': sensor_item['sensor_type']
+ }
+ )
+
+ self.stdout.write(
+ f'Created sensor {sensor_item["sensor_id"]}: {sensor_item["name"]} '
+ f'({sensor_item["value"]}{sensor_item["unit"]}) at ({sensor_item["coordinates_x"]}, {sensor_item["coordinates_y"]})'
+ )
+
+ def scrape_sensor_data(self, options):
+ """Scrape sensor data from configured data sources"""
+ overlays = DataOverlay.objects.filter(data_source_url__isnull=False)
+
+ if options['overlay_id']:
+ overlays = overlays.filter(id=options['overlay_id'])
+
+ for overlay in overlays:
+ self.stdout.write(f'Scraping data for overlay: {overlay.titles.get("en", "Unknown")}')
+
+ try:
+ # Fetch data from the source URL
+ response = requests.get(overlay.data_source_url, timeout=30)
+ response.raise_for_status()
+ data = response.json()
+
+ # Process data using sensor configuration
+ self.process_scraped_data(overlay, data)
+
+ except requests.RequestException as e:
+ self.stderr.write(f'Error fetching data from {overlay.data_source_url}: {e}')
+ except json.JSONDecodeError as e:
+ self.stderr.write(f'Error parsing JSON from {overlay.data_source_url}: {e}')
+ except Exception as e:
+ self.stderr.write(f'Error processing data for overlay {overlay.id}: {e}')
+
+ def process_scraped_data(self, overlay, data):
+ """Process scraped data according to overlay configuration"""
+ sensor_config = overlay.sensor_config or {}
+
+ # Default configuration for NOI Open Data Hub
+ default_config = {
+ "data_path": "data",
+ "mappings": {
+ "id_field": "scode",
+ "name_field": "sname",
+ "x_field": "scoordinate.x",
+ "y_field": "scoordinate.y"
+ },
+ "sensors": [] # List of specific sensors to process
+ }
+
+ config = {**default_config, **sensor_config}
+
+ # Extract sensor data array
+ api_data = data
+ if config.get("data_path"):
+ for path_part in config["data_path"].split("."):
+ api_data = api_data.get(path_part, [])
+
+ updated_count = 0
+ created_count = 0
+
+ # Group measurements by station (scode) first and discover sensor types dynamically
+ stations = {}
+ for item in api_data:
+ station_id = self.get_nested_field(item, config["mappings"]["id_field"])
+ station_name = self.get_nested_field(item, config["mappings"]["name_field"])
+ measurement_type = self.get_nested_field(item, "tname")
+
+ if not station_id or not measurement_type:
+ continue
+
+ if station_id not in stations:
+ stations[station_id] = {
+ 'name': station_name,
+ 'measurements': {}
+ }
+
+ stations[station_id]['measurements'][measurement_type] = item
+
+ # If specific sensors are configured, only process those
+ configured_sensors = config.get('sensors', [])
+ sensor_configs = {s['id']: s for s in configured_sensors} if configured_sensors else {}
+
+ # Process each station and its measurements
+ for station_id, station_data in stations.items():
+ # Skip if we have specific sensors configured and this isn't one of them
+ if sensor_configs and station_id not in sensor_configs:
+ continue
+
+ # Get sensor-specific configuration
+ sensor_specific_config = sensor_configs.get(station_id, {})
+
+ # Determine coordinates and level for this sensor
+ if sensor_specific_config.get('coordinates'):
+ # Use sensor-specific coordinates
+ x_coord = sensor_specific_config['coordinates']['x']
+ y_coord = sensor_specific_config['coordinates']['y']
+ else:
+ # Get coordinates from measurement data
+ first_measurement = next(iter(station_data['measurements'].values()))
+ x_coord = self.get_nested_field(first_measurement, config["mappings"]["x_field"])
+ y_coord = self.get_nested_field(first_measurement, config["mappings"]["y_field"])
+
+ if x_coord is None or y_coord is None:
+ continue
+
+ # Convert coordinates if needed
+ x_coord = float(x_coord)
+ y_coord = float(y_coord)
+
+ # Determine level for this sensor
+ level_name = sensor_specific_config.get('level', config.get('level', 'floor0'))
+ try:
+ level = Level.objects.get(short_label=level_name)
+ except Level.DoesNotExist:
+ self.stderr.write(f'Level "{level_name}" not found for sensor {station_id}, using ground floor')
+ try:
+ level = Level.objects.get(short_label='floor0')
+ except Level.DoesNotExist:
+ level = Level.objects.first() # Final fallback
+ if not level:
+ self.stderr.write(f'No levels found in database for sensor {station_id}')
+ continue
+
+ # Collect all sensor data for this station in one feature
+ sensor_readings = {}
+ raw_measurements = {}
+
+ # Process ALL measurements found in the API response (dynamically discovered)
+ for measurement_type, measurement in station_data['measurements'].items():
+ # Extract values dynamically from the API response
+ sensor_value = self.get_nested_field(measurement, "mvalue")
+ sensor_unit = self.get_nested_field(measurement, "tunit")
+ sensor_name = self.get_nested_field(measurement, "tname")
+ sensor_description = self.get_nested_field(measurement, "tdescription")
+
+ if sensor_value is None:
+ continue # Skip if no value
+
+ # Convert sensor value to float
+ try:
+ sensor_value = float(sensor_value)
+ except (ValueError, TypeError):
+ continue
+
+ # Store this measurement for the combined sensor
+ display_name = sensor_description or sensor_name or measurement_type
+ unit_str = f" {sensor_unit}" if sensor_unit else ""
+ sensor_readings[display_name] = f"{sensor_value}{unit_str}"
+ raw_measurements[measurement_type] = measurement
+
+ if not sensor_readings:
+ continue # Skip if no valid measurements
+
+ # Create a single sensor feature with all measurements
+ sensor_id = station_id # Use station ID as sensor ID
+ display_name = f"{station_data['name']} - Environmental Sensor"
+
+ # Determine primary color based on the most critical measurement
+ # Priority: CO2 > Temperature > Humidity
+ primary_color = '#95A5A6' # Default gray
+
+ # Look for CO2 measurements (various naming conventions)
+ co2_measurement = None
+ for mtype, measurement in raw_measurements.items():
+ if any(keyword in mtype.lower() for keyword in ['co2', 'carbon']):
+ co2_measurement = measurement
+ break
+
+ if co2_measurement:
+ co2_value = self.get_nested_field(co2_measurement, "mvalue")
+ if co2_value:
+ primary_color = self.get_sensor_color('co2', float(co2_value))
+ else:
+ # Look for temperature measurements
+ temp_measurement = None
+ for mtype, measurement in raw_measurements.items():
+ if any(keyword in mtype.lower() for keyword in ['temperature', 'temp']):
+ temp_measurement = measurement
+ break
+
+ if temp_measurement:
+ temp_value = self.get_nested_field(temp_measurement, "mvalue")
+ if temp_value:
+ primary_color = self.get_sensor_color('temperature', float(temp_value))
+
+ # Create geometry
+ point = Point(x_coord, y_coord)
+
+ feature, created = DataOverlayFeature.objects.update_or_create(
+ overlay=overlay,
+ sensor_id=sensor_id,
+ defaults={
+ 'titles': {'en': display_name},
+ 'geometry': point,
+ 'level': level,
+ 'sensor_type': 'environmental', # Combined sensor type
+ 'sensor_value': None, # No single value for combined sensor
+ 'sensor_unit': None, # No single unit for combined sensor
+ 'coordinates_x': x_coord,
+ 'coordinates_y': y_coord,
+ 'fill_color': primary_color,
+ 'stroke_color': primary_color,
+ 'stroke_width': 2,
+ 'fill_opacity': 0.8,
+ 'show_label': True,
+ 'show_geometry': True,
+ 'interactive': True,
+ 'point_icon': 'sensors', # Generic sensor icon
+ 'last_updated': timezone.now(),
+ 'sensor_data': raw_measurements, # Store all raw measurements
+ 'extra_data': {
+ **sensor_readings, # All sensor readings as separate entries
+ 'Last Updated': timezone.now().strftime('%Y-%m-%d %H:%M:%S'),
+ 'Data Source': 'NOI Open Data Hub',
+ 'Station ID': station_id
+ }
+ }
+ )
+
+ if created:
+ created_count += 1
+ readings_str = ', '.join([f"{k}: {v}" for k, v in sensor_readings.items()])
+ self.stdout.write(f'Created sensor {sensor_id} on level {level.short_label}: {readings_str}')
+ else:
+ updated_count += 1
+ readings_str = ', '.join([f"{k}: {v}" for k, v in sensor_readings.items()])
+ self.stdout.write(f'Updated sensor {sensor_id} on level {level.short_label}: {readings_str}')
+
+ self.stdout.write(
+ f'Processed overlay {overlay.id}: {created_count} created, {updated_count} updated'
+ )
+
+ def get_nested_field(self, data, field_path):
+ """Get value from nested field path like 'scoordinate.x'"""
+ try:
+ value = data
+ for part in field_path.split('.'):
+ value = value[part]
+ return value
+ except (KeyError, TypeError):
+ return None
+
+ def get_sensor_color(self, sensor_type, value):
+ """Get color based on sensor type and value"""
+ sensor_type_lower = sensor_type.lower()
+
+ if any(keyword in sensor_type_lower for keyword in ['temperature', 'temp']):
+ if value < 15:
+ return '#0066CC' # Cold - blue
+ elif value < 18:
+ return '#00AAFF' # Cool - light blue
+ elif value < 22:
+ return '#00CC66' # Comfortable - green
+ elif value < 25:
+ return '#FFAA00' # Warm - orange
+ else:
+ return '#FF3333' # Hot - red
+ elif any(keyword in sensor_type_lower for keyword in ['humidity', 'humid']):
+ if value < 30:
+ return '#FF6B6B' # Too dry - red
+ elif value < 60:
+ return '#4ECDC4' # Good - teal
+ else:
+ return '#45B7D1' # Too humid - blue
+ elif any(keyword in sensor_type_lower for keyword in ['co2', 'carbon']):
+ if value < 400:
+ return '#2ECC71' # Excellent - green
+ elif value < 800:
+ return '#F39C12' # Good - orange
+ elif value < 1200:
+ return '#E74C3C' # Poor - red
+ else:
+ return '#8E44AD' # Very poor - purple
+ else:
+ return '#95A5A6' # Default - gray
+
+ def get_sensor_icon(self, sensor_type):
+ """Get icon based on sensor type"""
+ icons = {
+ 'air-temperature': 'thermostat',
+ 'air-humidity': 'water_drop',
+ 'co2-ppm': 'air',
+ 'temperature': 'thermostat',
+ 'humidity': 'water_drop',
+ 'co2': 'air',
+ 'pressure': 'compress',
+ 'light': 'light_mode'
+ }
+ return icons.get(sensor_type, 'sensors')
diff --git a/src/c3nav/mapdata/management/commands/pulloverlaydata.py b/src/c3nav/mapdata/management/commands/pulloverlaydata.py
new file mode 100644
index 00000000..80c3d810
--- /dev/null
+++ b/src/c3nav/mapdata/management/commands/pulloverlaydata.py
@@ -0,0 +1,187 @@
+import logging
+import requests
+from django.core.management.base import BaseCommand
+from c3nav.mapdata.models import DataOverlay, DataOverlayFeature, MapUpdate, Level
+from shapely.geometry import Point
+import json
+import traceback
+
+logger = logging.getLogger(__name__)
+
+class Command(BaseCommand):
+ help = 'Pull overlay data from external APIs'
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--force',
+ action='store_true',
+ help='Force update even if not enough time has passed',
+ )
+
+ def handle(self, *args, **options):
+ overlays = DataOverlay.objects.all()
+ for overlay in overlays:
+ self.stdout.write(f"Processing overlay: {overlay.title}")
+ try:
+ self.update_overlay(overlay, force=options['force'])
+ except Exception as e:
+ logger.error(f"Error updating overlay {overlay.id}: {e}")
+ logger.error(traceback.format_exc())
+ self.stderr.write(f"Error updating overlay {overlay.id}: {e}")
+
+ def update_overlay(self, overlay, force=False):
+ """Update a single overlay from its API URL"""
+
+ if not overlay.pull_url:
+ self.stdout.write(f"No API URL configured for overlay {overlay.id}")
+ return
+
+ try:
+ self.stdout.write(f"Fetching data from: {overlay.pull_url}")
+ response = requests.get(overlay.pull_url, timeout=30)
+ response.raise_for_status()
+ data = response.json()
+
+ self.stdout.write(f"Received {len(data)} items from API")
+
+ # Process the data based on overlay type
+ if hasattr(overlay, 'description') and overlay.description and 'temperature' in overlay.description.lower():
+ self.process_temperature_data(overlay, data)
+ else:
+ self.stdout.write(f"Unknown overlay type for overlay {overlay.id}")
+
+ except requests.RequestException as e:
+ logger.error(f"HTTP error fetching {overlay.pull_url}: {e}")
+ self.stderr.write(f"HTTP error: {e}")
+ except Exception as e:
+ logger.error(f"Error processing overlay {overlay.id}: {e}")
+ logger.error(traceback.format_exc())
+ self.stderr.write(f"Error: {e}")
+
+ def process_temperature_data(self, overlay, data):
+ """Process temperature sensor data from NOI Open Data Hub"""
+
+ # Clear existing features for this overlay
+ DataOverlayFeature.objects.filter(overlay=overlay).delete()
+ self.stdout.write(f"Cleared existing features for overlay {overlay.id}")
+
+ # Group measurements by station
+ stations = {}
+ for item in data:
+ scode = item.get('scode')
+ if scode:
+ if scode not in stations:
+ stations[scode] = {
+ 'sname': item.get('sname'),
+ 'scoordinate': item.get('scoordinate'),
+ 'measurements': []
+ }
+ stations[scode]['measurements'].append(item)
+
+ self.stdout.write(f"Found {len(stations)} stations")
+
+ for scode, station_data in stations.items():
+ try:
+ self.create_temperature_feature(overlay, scode, station_data)
+ except Exception as e:
+ logger.error(f"Error creating feature for station {scode}: {e}")
+ logger.error(traceback.format_exc())
+ self.stderr.write(f"Error creating feature for {scode}: {e}")
+
+ def create_temperature_feature(self, overlay, scode, station_data):
+ """Create a DataOverlayFeature for a temperature station"""
+
+ # Extract coordinates from scoordinate object
+ scoordinate = station_data.get('scoordinate')
+ if not scoordinate:
+ self.stdout.write(f"No coordinates for station {scode}")
+ return
+
+ # scoordinate is a dict with x, y coordinates
+ x = scoordinate.get('x')
+ y = scoordinate.get('y')
+
+ if x is None or y is None:
+ self.stdout.write(f"Invalid coordinates for station {scode}: {scoordinate}")
+ return
+
+ self.stdout.write(f"Station {scode} coordinates: x={x}, y={y}")
+
+ # Create point geometry (assuming WGS84/EPSG:4326)
+ point = Point(x, y)
+
+ # Find temperature measurement
+ temperature = None
+ humidity = None
+
+ for measurement in station_data['measurements']:
+ tname = measurement.get('tname', '').lower()
+ if 'temperature' in tname:
+ temperature = measurement.get('mvalue')
+ elif 'humidity' in tname:
+ humidity = measurement.get('mvalue')
+
+ self.stdout.write(f"Station {scode}: temp={temperature}, humidity={humidity}")
+
+ if temperature is None:
+ self.stdout.write(f"No temperature data for station {scode}")
+ return
+
+ # Determine color based on temperature
+ color = self.get_temperature_color(temperature)
+
+ # Try to find appropriate level (ground floor by default)
+ level = None
+ try:
+ # Look for ground floor or level 0
+ level = Level.objects.filter(
+ short_label__in=['0', 'EG', 'Ground', 'G']
+ ).first()
+
+ if not level:
+ # Fallback to any level
+ level = Level.objects.first()
+
+ except Exception as e:
+ logger.warning(f"Could not determine level: {e}")
+
+ if not level:
+ self.stdout.write(f"No level found for station {scode}")
+ return
+
+ self.stdout.write(f"Using level: {level.short_label} for station {scode}")
+
+ # Create the feature
+ title = f"{station_data.get('sname', scode)} ({temperature}°C)"
+
+ feature = DataOverlayFeature.objects.create(
+ overlay=overlay,
+ level=level,
+ geometry=point.wkt,
+ title=title,
+ color=color,
+ opacity=0.8,
+ icon='thermometer'
+ )
+
+ self.stdout.write(f"Created feature {feature.id} for station {scode}")
+
+ def get_temperature_color(self, temperature):
+ """Get color based on temperature value"""
+ try:
+ temp = float(temperature)
+ except (ValueError, TypeError):
+ return '#808080' # Gray for invalid values
+
+ if temp < 10:
+ return '#0000FF' # Blue for very cold
+ elif temp < 15:
+ return '#00BFFF' # Light blue for cold
+ elif temp < 20:
+ return '#00FF00' # Green for cool
+ elif temp < 25:
+ return '#FFFF00' # Yellow for comfortable
+ elif temp < 30:
+ return '#FFA500' # Orange for warm
+ else:
+ return '#FF0000' # Red for hot
\ No newline at end of file
diff --git a/src/c3nav/mapdata/migrations/0139_add_last_pull_time.py b/src/c3nav/mapdata/migrations/0139_add_last_pull_time.py
new file mode 100644
index 00000000..ef731e36
--- /dev/null
+++ b/src/c3nav/mapdata/migrations/0139_add_last_pull_time.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.5 on 2025-08-02 06:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mapdata', '0138_rangingbeacon_max_observed_num_clients_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='dataoverlay',
+ name='last_pull_time',
+ field=models.DateTimeField(blank=True, null=True, verbose_name='last pull time'),
+ ),
+ ]
diff --git a/src/c3nav/mapdata/migrations/0139_stairway.py b/src/c3nav/mapdata/migrations/0139_stairway.py
deleted file mode 100644
index 4c0d28fa..00000000
--- a/src/c3nav/mapdata/migrations/0139_stairway.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generated by Django 5.1.5 on 2025-08-01 21:38
-
-import c3nav.mapdata.fields
-import django.core.validators
-import django.db.models.deletion
-from decimal import Decimal
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('mapdata', '0138_rangingbeacon_max_observed_num_clients_and_more'),
- ]
-
- operations = [
- migrations.CreateModel(
- name='Stairway',
- fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('import_tag', models.CharField(blank=True, max_length=64, null=True, verbose_name='import tag')),
- ('geometry', c3nav.mapdata.fields.GeometryField(default=None, geomtype='polygon', help_text=None)),
- ('stair_count', models.PositiveIntegerField(default=5, validators=[django.core.validators.MinValueValidator(1)], verbose_name='number of stairs')),
- ('stair_width', models.DecimalField(decimal_places=2, default=0.3, max_digits=4, validators=[django.core.validators.MinValueValidator(Decimal('0.1'))], verbose_name='stair width')),
- ('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mapdata.space', verbose_name='space')),
- ],
- options={
- 'verbose_name': 'Stairway',
- 'verbose_name_plural': 'Stairways',
- 'default_related_name': 'stairways',
- },
- ),
- ]
diff --git a/src/c3nav/mapdata/migrations/0140_add_temperature_fields.py b/src/c3nav/mapdata/migrations/0140_add_temperature_fields.py
new file mode 100644
index 00000000..0ad4b9a2
--- /dev/null
+++ b/src/c3nav/mapdata/migrations/0140_add_temperature_fields.py
@@ -0,0 +1,73 @@
+# Generated by Django 5.1.5 on 2025-08-02 07:18
+
+from django.db import migrations, models
+import django_pydantic_field
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mapdata', '0139_add_last_pull_time'),
+ ]
+
+ operations = [
+ # Add data source URL to DataOverlay
+ migrations.AddField(
+ model_name='dataoverlay',
+ name='data_source_url',
+ field=models.URLField(blank=True, null=True, verbose_name='Data Source URL',
+ help_text='URL to scrape sensor data from'),
+ ),
+
+ # Add sensor configuration to DataOverlay
+ migrations.AddField(
+ model_name='dataoverlay',
+ name='sensor_config',
+ field=django_pydantic_field.SchemaField(
+ schema=dict, blank=True, null=True,
+ verbose_name='Sensor Configuration',
+ help_text='JSON configuration for sensor data mapping and processing'
+ ),
+ ),
+
+ # Add generic sensor fields to DataOverlayFeature
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='sensor_id',
+ field=models.CharField(max_length=100, blank=True, null=True, verbose_name='Sensor ID'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='sensor_type',
+ field=models.CharField(max_length=50, blank=True, null=True, verbose_name='Sensor Type',
+ help_text='Type of sensor: temperature, humidity, co2, etc.'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='sensor_value',
+ field=models.FloatField(blank=True, null=True, verbose_name='Sensor Value'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='sensor_unit',
+ field=models.CharField(max_length=20, blank=True, null=True, verbose_name='Sensor Unit',
+ help_text='Unit of measurement: °C, %, ppm, etc.'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='coordinates_x',
+ field=models.FloatField(blank=True, null=True, verbose_name='X Coordinate',
+ help_text='X coordinate in c3nav coordinate system'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='coordinates_y',
+ field=models.FloatField(blank=True, null=True, verbose_name='Y Coordinate',
+ help_text='Y coordinate in c3nav coordinate system'),
+ ),
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='last_updated',
+ field=models.DateTimeField(blank=True, null=True, verbose_name='Last Updated'),
+ ),
+ ]
diff --git a/src/c3nav/mapdata/migrations/0141_add_sensor_data_field.py b/src/c3nav/mapdata/migrations/0141_add_sensor_data_field.py
new file mode 100644
index 00000000..392b5921
--- /dev/null
+++ b/src/c3nav/mapdata/migrations/0141_add_sensor_data_field.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.1.5 on 2025-08-02 12:00
+
+from django.db import migrations
+import django_pydantic_field
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mapdata', '0140_add_temperature_fields'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='dataoverlayfeature',
+ name='sensor_data',
+ field=django_pydantic_field.SchemaField(
+ schema=dict, blank=True, null=True,
+ verbose_name='Raw Sensor Data',
+ help_text='Raw data from sensor for debugging and additional info'
+ ),
+ ),
+ ]
diff --git a/src/c3nav/mapdata/migrations/0142_add_cloned_item_sync.py b/src/c3nav/mapdata/migrations/0142_add_cloned_item_sync.py
new file mode 100644
index 00000000..215b3ae1
--- /dev/null
+++ b/src/c3nav/mapdata/migrations/0142_add_cloned_item_sync.py
@@ -0,0 +1,35 @@
+# Generated by Django 5.1.5 on 2025-08-02 00:38
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('contenttypes', '0002_remove_content_type_name'),
+ ('mapdata', '0138_rangingbeacon_max_observed_num_clients_and_more'),
+ ('mapdata', '0141_add_sensor_data_field')
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ClonedItemSync',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('original_object_id', models.PositiveIntegerField()),
+ ('cloned_object_id', models.PositiveIntegerField()),
+ ('created_at', models.DateTimeField(auto_now_add=True)),
+ ('is_active', models.BooleanField(default=True)),
+ ('sync_fields', models.JSONField(default=list, help_text='List of field names to keep synchronized')),
+ ('cloned_content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cloned_synced_items', to='contenttypes.contenttype')),
+ ('original_content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='original_synced_items', to='contenttypes.contenttype')),
+ ],
+ options={
+ 'verbose_name': 'Cloned Item Sync',
+ 'verbose_name_plural': 'Cloned Item Syncs',
+ 'indexes': [models.Index(fields=['original_content_type', 'original_object_id'], name='mapdata_clo_origina_62f4ee_idx'), models.Index(fields=['cloned_content_type', 'cloned_object_id'], name='mapdata_clo_cloned__027e07_idx')],
+ 'unique_together': {('original_content_type', 'original_object_id', 'cloned_content_type', 'cloned_object_id')},
+ },
+ ),
+ ]
diff --git a/src/c3nav/mapdata/models/__init__.py b/src/c3nav/mapdata/models/__init__.py
index 8d0b9dc7..34c5cf02 100644
--- a/src/c3nav/mapdata/models/__init__.py
+++ b/src/c3nav/mapdata/models/__init__.py
@@ -3,9 +3,10 @@ from c3nav.mapdata.models.access import AccessRestriction # noqa
from c3nav.mapdata.models.altitudes import GroundAltitude # noqa
from c3nav.mapdata.models.level import Level # noqa
from c3nav.mapdata.models.geometry.level import Building, Space, Door, AltitudeArea # noqa
-from c3nav.mapdata.models.geometry.space import Area, Stair, Stairway, Obstacle, LineObstacle, Hole, AltitudeMarker # noqa
+from c3nav.mapdata.models.geometry.space import Area, Stair, Obstacle, LineObstacle, Hole, AltitudeMarker # noqa
from c3nav.mapdata.models.locations import Location, LocationSlug, LocationGroup, LocationGroupCategory # noqa
from c3nav.mapdata.models.source import Source # noqa
from c3nav.mapdata.models.graph import GraphNode, WayType, GraphEdge # noqa
from c3nav.mapdata.models.theme import Theme # noqa
-from c3nav.mapdata.models.overlay import DataOverlay, DataOverlayFeature # noqa
\ No newline at end of file
+from c3nav.mapdata.models.overlay import DataOverlay, DataOverlayFeature # noqa
+from c3nav.mapdata.models.sync import ClonedItemSync # noqa
\ No newline at end of file
diff --git a/src/c3nav/mapdata/models/geometry/space.py b/src/c3nav/mapdata/models/geometry/space.py
index b9315150..7684c6b6 100644
--- a/src/c3nav/mapdata/models/geometry/space.py
+++ b/src/c3nav/mapdata/models/geometry/space.py
@@ -172,22 +172,6 @@ class Stair(SpaceGeometryMixin, models.Model):
default_related_name = 'stairs'
-class Stairway(SpaceGeometryMixin, models.Model):
- """
- A stairway area that can generate individual stairs
- """
- geometry = GeometryField('polygon')
- stair_count = models.PositiveIntegerField(_('number of stairs'), default=5,
- validators=[MinValueValidator(1)])
- stair_width = models.DecimalField(_('stair width'), max_digits=4, decimal_places=2, default=0.3,
- validators=[MinValueValidator(Decimal('0.1'))])
-
- class Meta:
- verbose_name = _('Stairway')
- verbose_name_plural = _('Stairways')
- default_related_name = 'stairways'
-
-
class Ramp(SpaceGeometryMixin, models.Model):
"""
A ramp
diff --git a/src/c3nav/mapdata/models/overlay.py b/src/c3nav/mapdata/models/overlay.py
index a66da733..3920bcd1 100644
--- a/src/c3nav/mapdata/models/overlay.py
+++ b/src/c3nav/mapdata/models/overlay.py
@@ -44,6 +44,13 @@ class DataOverlay(TitledMixin, AccessRestrictionMixin, models.Model):
verbose_name=_('Editor Access Restriction'),
on_delete=models.PROTECT)
+ # Generic sensor data configuration
+ data_source_url = models.URLField(blank=True, null=True, verbose_name=_('Data Source URL'),
+ help_text=_('URL to scrape sensor data from'))
+ sensor_config: Optional[dict] = SchemaField(schema=dict, blank=True, null=True,
+ verbose_name=_('Sensor Configuration'),
+ help_text=_('JSON configuration for sensor data mapping and processing'))
+
class Meta:
verbose_name = _('Data Overlay')
verbose_name_plural = _('Data Overlays')
@@ -72,6 +79,22 @@ class DataOverlayFeature(TitledMixin, LevelGeometryMixin, models.Model):
null=True,
default=None,
verbose_name=_('extra data (JSON object)'))
+
+ # Generic sensor fields
+ sensor_id = models.CharField(max_length=100, blank=True, null=True, verbose_name=_('Sensor ID'))
+ sensor_type = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Sensor Type'),
+ help_text=_('Type of sensor: temperature, humidity, co2, etc.'))
+ sensor_value = models.FloatField(blank=True, null=True, verbose_name=_('Sensor Value'))
+ sensor_unit = models.CharField(max_length=20, blank=True, null=True, verbose_name=_('Sensor Unit'),
+ help_text=_('Unit of measurement: °C, %, ppm, etc.'))
+ coordinates_x = models.FloatField(blank=True, null=True, verbose_name=_('X Coordinate'),
+ help_text=_('X coordinate in c3nav coordinate system'))
+ coordinates_y = models.FloatField(blank=True, null=True, verbose_name=_('Y Coordinate'),
+ help_text=_('Y coordinate in c3nav coordinate system'))
+ last_updated = models.DateTimeField(blank=True, null=True, verbose_name=_('Last Updated'))
+ sensor_data: Optional[dict] = SchemaField(schema=dict, blank=True, null=True,
+ verbose_name=_('Raw Sensor Data'),
+ help_text=_('Raw data from sensor for debugging and additional info'))
def to_geojson(self, instance=None) -> dict:
result = {
diff --git a/src/c3nav/mapdata/models/sync.py b/src/c3nav/mapdata/models/sync.py
new file mode 100644
index 00000000..01966cfa
--- /dev/null
+++ b/src/c3nav/mapdata/models/sync.py
@@ -0,0 +1,47 @@
+from django.db import models
+from django.utils.translation import gettext_lazy as _
+
+
+class ClonedItemSync(models.Model):
+ """
+ Tracks relationships between cloned items across different levels
+ to keep them synchronized when one is modified.
+ """
+ # The original item
+ original_content_type = models.ForeignKey(
+ 'contenttypes.ContentType',
+ on_delete=models.CASCADE,
+ related_name='original_synced_items'
+ )
+ original_object_id = models.PositiveIntegerField()
+
+ # The cloned item
+ cloned_content_type = models.ForeignKey(
+ 'contenttypes.ContentType',
+ on_delete=models.CASCADE,
+ related_name='cloned_synced_items'
+ )
+ cloned_object_id = models.PositiveIntegerField()
+
+ # Metadata
+ created_at = models.DateTimeField(auto_now_add=True)
+ is_active = models.BooleanField(default=True)
+
+ # Fields to sync (JSON field storing field names to keep in sync)
+ sync_fields = models.JSONField(
+ default=list,
+ help_text=_('List of field names to keep synchronized')
+ )
+
+ class Meta:
+ verbose_name = _('Cloned Item Sync')
+ verbose_name_plural = _('Cloned Item Syncs')
+ unique_together = ('original_content_type', 'original_object_id',
+ 'cloned_content_type', 'cloned_object_id')
+ indexes = [
+ models.Index(fields=['original_content_type', 'original_object_id']),
+ models.Index(fields=['cloned_content_type', 'cloned_object_id']),
+ ]
+
+ def __str__(self):
+ return f"Sync: {self.original_content_type.model}#{self.original_object_id} -> {self.cloned_content_type.model}#{self.cloned_object_id}"
\ No newline at end of file
diff --git a/src/c3nav/mapdata/signals/sync.py b/src/c3nav/mapdata/signals/sync.py
new file mode 100644
index 00000000..80fa92c2
--- /dev/null
+++ b/src/c3nav/mapdata/signals/sync.py
@@ -0,0 +1,95 @@
+from django.db.models.signals import post_save, post_delete
+from django.dispatch import receiver
+from django.contrib.contenttypes.models import ContentType
+
+from c3nav.mapdata.models.sync import ClonedItemSync
+
+
+@receiver(post_save)
+def sync_cloned_items_on_save(sender, instance, created, **kwargs):
+ """
+ When a model instance is saved, update any cloned items that should be synchronized.
+ """
+ if created:
+ return # Only sync on updates, not creation
+
+ # Check if ClonedItemSync table exists (avoid errors during migrations)
+ try:
+ from django.db import connection
+ with connection.cursor() as cursor:
+ cursor.execute("SELECT 1 FROM information_schema.tables WHERE table_name = 'mapdata_cloneditemsync' LIMIT 1")
+ if not cursor.fetchone():
+ return # Table doesn't exist yet, skip sync
+ except Exception:
+ return # Any database error, skip sync
+
+ content_type = ContentType.objects.get_for_model(sender)
+
+ # Find all sync relationships where this item is the original
+ try:
+ sync_relationships = ClonedItemSync.objects.filter(
+ original_content_type=content_type,
+ original_object_id=instance.pk,
+ is_active=True
+ )
+ except Exception:
+ return # ClonedItemSync model not available, skip sync
+
+ for sync_rel in sync_relationships:
+ try:
+ # Get the cloned item
+ cloned_model = sync_rel.cloned_content_type.model_class()
+ cloned_item = cloned_model.objects.get(pk=sync_rel.cloned_object_id)
+
+ # Update synchronized fields
+ updated = False
+ for field_name in sync_rel.sync_fields:
+ if hasattr(instance, field_name) and hasattr(cloned_item, field_name):
+ original_value = getattr(instance, field_name)
+ current_value = getattr(cloned_item, field_name)
+
+ if original_value != current_value:
+ setattr(cloned_item, field_name, original_value)
+ updated = True
+
+ if updated:
+ cloned_item.save()
+
+ except Exception as e:
+ # Log error but don't break the original save operation
+ print(f"Error syncing cloned item: {e}")
+ # Optionally deactivate the sync relationship if it's broken
+ sync_rel.is_active = False
+ sync_rel.save()
+
+
+@receiver(post_delete)
+def cleanup_sync_on_delete(sender, instance, **kwargs):
+ """
+ When a model instance is deleted, clean up any sync relationships.
+ """
+ # Check if ClonedItemSync table exists (avoid errors during migrations)
+ try:
+ from django.db import connection
+ with connection.cursor() as cursor:
+ cursor.execute("SELECT 1 FROM information_schema.tables WHERE table_name = 'mapdata_cloneditemsync' LIMIT 1")
+ if not cursor.fetchone():
+ return # Table doesn't exist yet, skip cleanup
+ except Exception:
+ return # Any database error, skip cleanup
+
+ try:
+ content_type = ContentType.objects.get_for_model(sender)
+
+ # Clean up sync relationships where this item is either original or cloned
+ ClonedItemSync.objects.filter(
+ original_content_type=content_type,
+ original_object_id=instance.pk
+ ).delete()
+
+ ClonedItemSync.objects.filter(
+ cloned_content_type=content_type,
+ cloned_object_id=instance.pk
+ ).delete()
+ except Exception:
+ pass # ClonedItemSync model not available, skip cleanup
\ No newline at end of file
diff --git a/src/c3nav/mapdata/tasks.py b/src/c3nav/mapdata/tasks.py
index 2897c29a..5d486bbe 100644
--- a/src/c3nav/mapdata/tasks.py
+++ b/src/c3nav/mapdata/tasks.py
@@ -82,3 +82,76 @@ def update_ap_names_bssid_mapping(self, map_name, user_id):
with changeset.lock_to_edit() as locked_changeset:
locked_changeset.title = 'passive update bssids'
locked_changeset.apply(user)
+
+
+@app.task(bind=True, max_retries=3)
+def pull_overlay_data(self, overlay_id=None):
+ """
+ Celery task to pull data overlay features from external URLs.
+
+ Args:
+ overlay_id (int, optional): Specific overlay ID to update.
+ If None, updates all overlays with pull_url.
+ """
+ logger.info('Starting overlay data pull task...')
+
+ from django.core.management import call_command
+ from io import StringIO
+
+ try:
+ # Capture output from the management command
+ output = StringIO()
+
+ if overlay_id:
+ call_command('pulloverlaydata', overlay=overlay_id, stdout=output)
+ else:
+ call_command('pulloverlaydata', stdout=output)
+
+ result = output.getvalue()
+ logger.info(f'Overlay data pull completed: {result}')
+ return result
+
+ except Exception as e:
+ logger.error(f'Overlay data pull failed: {e}')
+ if self.request.retries < self.max_retries:
+ logger.info(f'Retrying in 60 seconds... (attempt {self.request.retries + 1}/{self.max_retries})')
+ raise self.retry(countdown=60, exc=e)
+ else:
+ logger.error('Max retries exceeded for overlay data pull')
+ raise
+
+
+@app.task(bind=True)
+def schedule_overlay_data_pulls(self):
+ """
+ Periodic task to schedule individual overlay data pulls based on their intervals.
+ This should be called every minute by a periodic task scheduler.
+ """
+ from c3nav.mapdata.models import DataOverlay
+ from django.utils import timezone
+
+ logger.info('Checking overlays for scheduled pulls...')
+
+ overlays = DataOverlay.objects.exclude(pull_url__isnull=True).exclude(pull_url='').exclude(pull_interval__isnull=True)
+
+ scheduled_count = 0
+ for overlay in overlays:
+ # Check if it's time to update this overlay
+ should_pull = False
+
+ if overlay.last_pull_time is None:
+ # Never pulled before
+ should_pull = True
+ else:
+ # Check if enough time has passed since last pull
+ next_pull_time = overlay.last_pull_time + overlay.pull_interval
+ should_pull = timezone.now() >= next_pull_time
+
+ if should_pull:
+ # Schedule the pull
+ pull_overlay_data.delay(overlay.pk)
+ scheduled_count += 1
+ logger.info(f'Scheduled pull for overlay: {overlay.title}')
+
+ logger.info(f'Scheduled {scheduled_count} overlay pulls')
+ return scheduled_count
diff --git a/src/c3nav/mapdata/utils/cache/local.py b/src/c3nav/mapdata/utils/cache/local.py
index 32df7fb6..a8f4a910 100644
--- a/src/c3nav/mapdata/utils/cache/local.py
+++ b/src/c3nav/mapdata/utils/cache/local.py
@@ -32,7 +32,6 @@ class LocalCacheProxy:
# not in our cache
result = cache.get(key, default=NoneFromCache)
if result is not NoneFromCache:
- print("result", result, result is NoneFromCache)
if self._items.get(None) is None:
self._items.set(OrderedDict())
self._items.get()[key] = result
diff --git a/src/c3nav/mesh/migrations/0015_alter_nodemessage_message_type.py b/src/c3nav/mesh/migrations/0015_alter_nodemessage_message_type.py
index 1d3d0c04..90726685 100644
--- a/src/c3nav/mesh/migrations/0015_alter_nodemessage_message_type.py
+++ b/src/c3nav/mesh/migrations/0015_alter_nodemessage_message_type.py
@@ -1,4 +1,4 @@
-# Generated by Django 5.1.5 on 2025-08-01 21:38
+# Generated by Django 5.1.5 on 2025-08-02 00:51
from django.db import migrations, models
diff --git a/src/c3nav/static/img/snap-to-90-icon.svg b/src/c3nav/static/img/snap-to-90-icon.svg
new file mode 100644
index 00000000..e54076c8
--- /dev/null
+++ b/src/c3nav/static/img/snap-to-90-icon.svg
@@ -0,0 +1,3 @@
+
+
+90°
\ No newline at end of file
diff --git a/src/c3nav/static/img/snap-to-edges-icon.svg b/src/c3nav/static/img/snap-to-edges-icon.svg
new file mode 100644
index 00000000..2bc7039c
--- /dev/null
+++ b/src/c3nav/static/img/snap-to-edges-icon.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/c3nav/static/img/snap-to-original-icon.svg b/src/c3nav/static/img/snap-to-original-icon.svg
new file mode 100644
index 00000000..938f3d3a
--- /dev/null
+++ b/src/c3nav/static/img/snap-to-original-icon.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/manage.py b/src/manage.py
index 005d7dbf..e7892355 100755
--- a/src/manage.py
+++ b/src/manage.py
@@ -8,3 +8,7 @@ if __name__ == "__main__":
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
+
+
+
+
diff --git a/stairway_creator_final.md b/stairway_creator_final.md
deleted file mode 100644
index 6d522199..00000000
--- a/stairway_creator_final.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# ✅ Stairway Creator - Final Correct Implementation
-
-## Understanding the Requirement
-
-You wanted a tool that helps **draw individual step lines quickly** within the current editor workflow:
-
-> "if I set a start and end points, stairs get generated in between as straight lines (like in the example). Then, the number of stairs on this staircase should be configurable and the changes should be seen immediately"
-
-## ✅ Correct Implementation
-
-### **What It Does**
-- **Click 2 Points**: Define start and end of stairway path
-- **Generate Step Lines**: Creates individual straight lines perpendicular to the path
-- **Real-time Preview**: See changes immediately as you adjust step count/width
-- **Individual Editing**: Each step line can be edited separately after generation
-- **Integrated Workflow**: Works within the current geometry editing system
-
-### **User Workflow**
-1. **Start Geometry Creation**: Begin creating any geometry type
-2. **Activate Stairway Creator**: Click 🏗️ button
-3. **Place Points**: Click start point, then end point
-4. **Configure**: Adjust number of steps (3-50) and step width (0.1-2.0m)
-5. **Real-time Preview**: See step positions update immediately
-6. **Generate**: Click "Generate Stairs" to create individual step lines
-7. **Edit**: Each step line becomes individually editable
-
-### **Technical Implementation**
-
-**Frontend Only** (`editor.js`):
-- **Point Collection**: Click-based point placement system
-- **Real-time Calculation**: Live preview updates as parameters change
-- **Step Generation**: Creates individual Leaflet polylines
-- **Geometry Integration**: Updates form with MultiLineString geometry
-- **Individual Editing**: Each step line is separately editable
-
-**Key Functions**:
-```javascript
-_calculate_straight_stairs(start, end) {
- // Calculate perpendicular step positions
- // Between start and end points
- // With configurable count and width
-}
-
-_draw_step_lines(steps) {
- // Create individual editable polylines
- // Group them for collective editing
- // Update geometry form
-}
-```
-
-### **Visual Preview System**
-- **Point Markers**: Red numbered circles show clicked points
-- **Step Preview**: Green lines show where steps will be placed
-- **Real-time Updates**: Preview updates as you change:
- - Number of steps (slider/input)
- - Step width (affects line length)
- - Immediate visual feedback
-
-### **Geometry Output**
-- **MultiLineString**: Single geometry containing all step lines
-- **Individual Components**: Each step is a separate line within the MultiLineString
-- **Editable**: Each step line can be modified individually after creation
-- **Properly Formatted**: Compatible with c3nav's geometry system
-
-## 🎯 **Benefits**
-
-✅ **Speed**: Generate 10+ step lines in seconds vs minutes of manual drawing
-✅ **Precision**: Perfect perpendicular alignment and equal spacing
-✅ **Flexibility**: Configurable step count and width
-✅ **Real-time**: Immediate visual feedback as you adjust parameters
-✅ **Integration**: Works within existing editor workflow
-✅ **Editability**: Each generated step remains individually editable
-
-## 🧪 **Testing Process**
-
-1. **Start geometry creation** (any type)
-2. **Click 🏗️ button** to activate stairway creator
-3. **Click start point** on the map
-4. **Click end point** to define the stairway path
-5. **Adjust step count** (see preview update in real-time)
-6. **Adjust step width** (see line lengths change)
-7. **Click "Generate Stairs"** to create the step lines
-8. **Verify individual editing** - each step line should be separately editable
-
-## 🎉 **Result**
-
-This implementation provides exactly what you requested:
-- **Quick step generation** between two points
-- **Individual step lines** that can be edited separately
-- **Real-time configuration** with immediate visual feedback
-- **Straight line steps** perpendicular to the defined path
-- **Integrated workflow** within the existing editor
-
-The tool transforms the tedious process of manually drawing each step line into a quick, configurable, visual workflow that generates properly aligned individual step geometries!
\ No newline at end of file
diff --git a/start_db.sh b/start_db.sh
index 7a588491..a509b94c 100755
--- a/start_db.sh
+++ b/start_db.sh
@@ -12,6 +12,8 @@ if [[ $# == 1 ]] && [[ $1 == "stop" ]]; then
echo "Stopped the postgres container"
elif [[ $# == 1 ]] && [[ $1 == "db" ]]; then
echo "Setting up database"
+ sudo docker stop postgres
+ sudo docker container rm -f postgres
sudo docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=test -e POSTGRES_USER=mindshub postgres
until psql "postgres://mindshub:test@localhost:5432" <<< "CREATE DATABASE insignorocketdb;"; do
sleep 0.5;
@@ -29,6 +31,16 @@ elif [[ $# == 1 ]] && [[ $1 == "run" ]]; then
python manage.py processupdates
python manage.py runserver
popd
+elif [[ $# == 1 ]] && [[ $1 == "run_without_output" ]]; then
+ echo "Processing updates and running server without output"
+ pushd src 2>&1 > /dev/null
+ python manage.py processupdates 2>&1 | (grep -vE '^(INFO|DEBUG)|__debug__' || true)
+ python manage.py runserver 2>&1 | (grep -vE '^(INFO|DEBUG)|__debug__' || true)
+ popd 2>&1 > /dev/null
+elif [[ $# > 0 ]] && [[ $1 == "manage" ]]; then
+ pushd src
+ python manage.py "${@:2}"
+ popd
else
- echo "Usage: $0 [stop|db|run]"
+ echo "Usage: $0 [stop|db|run|run_without_output|manage]"
fi