From e5968f81d53f248201ca442b3d06e6bc8cf7c61a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Sat, 18 Jul 2026 22:07:41 -0300 Subject: [PATCH] Add static Bahia municipality and territory geometries for the campaign map. Ship TopoJSON meshes, IBGE code lookups, a re-runnable build script, and evidence tests so B3 can render Leaflet surfaces without PostGIS. --- .cursor/rules/projects/nucleos-eleitorais.mdc | 1 + .gitignore | 3 + docs/plans/mapa-bahia-geometrias.md | 75 +- docs/roadmap.md | 12 +- package.json | 9 + pnpm-lock.yaml | 85 + scripts/build-bahia-geometries.mjs | 305 +++ src/lib/bahiaGeometries.ts | 76 + src/lib/bahiaMunicipalityCodes.ts | 450 +++++ .../bahia-identity-territories.topo.json | 1 + .../geometries/bahia-municipalities.topo.json | 1 + .../bahia-municipality-codes.official.json | 1689 +++++++++++++++++ tests/int/bahiaGeometries.int.spec.ts | 102 + tests/int/bahiaMunicipalityCodes.int.spec.ts | 82 + 14 files changed, 2854 insertions(+), 37 deletions(-) create mode 100644 scripts/build-bahia-geometries.mjs create mode 100644 src/lib/bahiaGeometries.ts create mode 100644 src/lib/bahiaMunicipalityCodes.ts create mode 100644 src/lib/geometries/bahia-identity-territories.topo.json create mode 100644 src/lib/geometries/bahia-municipalities.topo.json create mode 100644 tests/fixtures/bahia-municipality-codes.official.json create mode 100644 tests/int/bahiaGeometries.int.spec.ts create mode 100644 tests/int/bahiaMunicipalityCodes.int.spec.ts diff --git a/.cursor/rules/projects/nucleos-eleitorais.mdc b/.cursor/rules/projects/nucleos-eleitorais.mdc index 69f1c9f7..68950627 100644 --- a/.cursor/rules/projects/nucleos-eleitorais.mdc +++ b/.cursor/rules/projects/nucleos-eleitorais.mdc @@ -11,6 +11,7 @@ alwaysApply: false - **Ciclo 2 entregue, mesclado e deployado (2026-07-18):** A1 território multi-município/bairro, A3 baseline TSE 2022 (modelo + import), B1 overview da lista, C1 compartilhar página e D1 PWA — detalhes no item datado abaixo. - **A2 entregue e mesclado em `main` (2026-07-18):** cadastro estático município↔ZE (`bahiaTseZones`, TSE 2024) + chips opt-in no formulário (`NucleusTerritoryAndZonesFields` / `territorySuggestions`); sem migration. Plano: [`docs/plans/zonas-por-municipio.md`](../../../docs/plans/zonas-por-municipio.md). - **C3 Planos de Ação implementado (2026-07-18):** collection `actionPlan` + vertical `/campanha/planos` (lista com tabs Próximos/Todos/Realizados/Rascunhos, detalhe com tabs Visão geral/Tarefas/Atualizações, forms novo/editar), blocos "Próximos eventos" no overview de núcleos e no dashboard; `startAt` opcional só em rascunho; access por `coordinators`/`leadership`; migration `20260718_222832_add_action_plan`. +- **B2 Mapa Fase 1 (geometrias) entregue (2026-07-18):** TopoJSON estático municípios IBGE + TIs por dissolução, `bahiaMunicipalityCodes`, helpers `bahiaGeometries`, script `pnpm build:geometries`. Sem UI (B3). Plano: [`docs/plans/mapa-bahia-geometrias.md`](../../../docs/plans/mapa-bahia-geometrias.md). - **C7 registrado (2026-07-18):** débitos de escala/DRY pós-C3 do `/simplify` (território/contato compostos, helpers FormData/URL, leituras por aba, RMW/índice) — plano [`docs/plans/escala-dry-pos-c3.md`](../../../docs/plans/escala-dry-pos-c3.md); não bloqueia o MVP da agenda. - Fluxos operacionais cobertos: login isolado, CRUD/arquivo de núcleos por slug, designação de coordenador (`geral`), CRM de lideranças, estimativas sugerir/confirmar com versão UUID, feed de atualizações, convites WhatsApp (`wa.me` + hash de uso único), dashboard com agregados só de núcleos ativos. - Pendência operacional (não de código): Consent `lideranca-autopreenchimento` + lote jurídico LGPD antes de dados reais; smoke pós-deploy Vercel. Ver Onda 0 em [`docs/roadmap.md`](../../../docs/roadmap.md). diff --git a/.gitignore b/.gitignore index 940332d8..09b56eb0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,9 @@ next-env.d.ts # TSE open-data zip cache (pnpm db:seed:tse) /data/tse/ +# IBGE geometry download cache (pnpm build:geometries) +/data/geometries/ + # Playwright node_modules/ /test-results/ diff --git a/docs/plans/mapa-bahia-geometrias.md b/docs/plans/mapa-bahia-geometrias.md index 243c18a0..6295df9c 100644 --- a/docs/plans/mapa-bahia-geometrias.md +++ b/docs/plans/mapa-bahia-geometrias.md @@ -1,21 +1,23 @@ # Mapa da Bahia na campanha — geometrias estáticas + Leaflet -Status: rascunho -Atualizado em: 2026-07-17 -Item do roadmap: [docs/roadmap.md](../roadmap.md) (seção "Campanha → Próximos ciclos") +Status: Fase 1 entregue (B2); Fase 2 (B3 Leaflet) pendente +Atualizado em: 2026-07-18 +Item do roadmap: [docs/roadmap.md](../roadmap.md) — B2 (Fase 1) / B3 (Fase 2) / B4 (camada de zonas) Responsável: — ## Contexto -O roadmap (linha 52) prevê "Mapa / PostGIS: Leaflet, geometria/point, imagem Docker PostGIS; âncora `/mapa` do design-ux adiada". Este plano destrincha esse item para a vertical `/campanha`: preparar o webapp para representar o mapa da Bahia (municípios + Territórios de Identidade) e usar esse mapa para visualizar agregados da campanha de forma mais clara. +O roadmap (trilha B) prevê o mapa da Bahia na vertical `/campanha`: preparar geometrias estáticas (municípios + Territórios de Identidade) e usá-las para visualizar agregados da campanha. A âncora `/mapa` do design-ux permanece adiada. -Hoje o `electoralNucleus` (`src/collections/ElectoralNucleus.ts`) indexa território por texto (`region`/`city`/`neighborhood`/`tseZones`) e as agregações saem de queries Payload por essas chaves (`src/utilities/campaignDashboardPageData.ts`, `src/utilities/nucleusViewModels.ts`). Não há nenhuma geometria. A decisão de produto (2026-07-17) é adotar **geometrias estáticas versionadas no repo** (mesmo padrão de `src/lib/bahiaTerritories.ts`), sem PostGIS, e integrar Leaflet nas superfícies já existentes — a âncora `/mapa` do design-ux permanece adiada. +O `electoralNucleus` indexa território por texto (`regions`/`cities`/`neighborhoods`/`tseZones` — arrays `hasMany` desde A1) e as agregações saem de queries Payload por essas chaves. Não há query espacial. A decisão de produto (2026-07-17) é adotar **geometrias estáticas versionadas no repo** (mesmo padrão de `src/lib/bahiaTerritories.ts`), sem PostGIS, e integrar Leaflet nas superfícies já existentes. ## Decisões travadas (confirmadas com o usuário) - **GeoJSON/TopoJSON estático versionado no repo**, sem PostGIS. Mesmo padrão de `src/lib/bahiaTerritories.ts` (dado versionado com proveniência + fixture + teste int). -- **v1 cobre municípios (IBGE) + Territórios de Identidade (IDE Bahia).** Zonas TSE como camada ficam para um ciclo seguinte (dependem de `zonas-por-municipio`). -- **`/mapa` dedicada do design-ux permanece adiada.** v1 incorpora o mapa em superfícies já existentes: overview da lista de núcleos, detalhe do núcleo e dashboard `/campanha`. +- **v1 cobre municípios (IBGE) + Territórios de Identidade.** Zonas TSE como camada ficam para B4 (dependem de A2 ✓ + B3). +- **Territórios de Identidade por dissolução IBGE** (decisão 2026-07-18): polígonos dos TIs saem de `topojson.merge` dos municípios IBGE conforme a composição oficial em `bahiaIdentityTerritoryRecords` — não do shapefile IDE Bahia. A IDE Bahia fica como referência de validação na proveniência. Garante coerência mapa ↔ composição do app e antecipa a abordagem A do B4. +- **Extensão `*.topo.json`** (não `.topojson`) para import JSON nativo no Next/TS sem config extra. +- **`/mapa` dedicada do design-ux permanece adiada.** v1 (B3) incorpora o mapa em superfícies já existentes: overview da lista de núcleos, detalhe do núcleo e dashboard `/campanha`. - **Zona segue como granularidade eleitoral de referência** do núcleo — não mapear núcleo a seções (ver "Granularidade seção vs. zona"). - **Sem migration, sem collection, sem Consent, sem server action nova.** Só dado estático + componentes cliente + agregações já existentes. @@ -25,13 +27,13 @@ O `electoralNucleus` já indexa território por texto e as agregações saem de ## Fontes oficiais (pesquisa) -- **Municípios (BA):** IBGE Malha Municipal 2024. GeoJSON/TopoJSON via API `https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio` (resolução 1–2 ideal para web; `codarea` = código IBGE de 7 dígitos). Shapefile em `geoftp.ibge.gov.br/.../municipio_2024/UFs/BA/`. CRS SIRGAS 2000 (EPSG:4674) ≈ WGS84 para web (diferença sub-metro, irrelevante em escala municipal). -- **Territórios de Identidade:** IDE Bahia / SEI publica polígono vetorial oficial 1:100.000 (2019, EPSG:4674): `https://metadados.ide.ba.gov.br/geonetwork/srv/api/records/90b140bf-17df-496f-b048-5783fdf02864` (Shapefile + KML). Configuração vigente desde 2016 (a mesma de `bahiaTerritories.ts`). Não precisamos dissolver. -- **Zonas TSE:** o TSE **não** publica polígonos — só o cadastro tabular "Eleitorado por município e zona" (composição município→zona) e os endereços de locais de votação/seções. Polígonos só por construção derivada (aproximação; padrão da literatura). Fica fora da v1. +- **Municípios (BA):** IBGE Malhas API v3 (`qualidade=intermediaria`) + Localidades API v1 para `id`/`nome`. `codarea` = código IBGE de 7 dígitos. CRS SIRGAS 2000 (EPSG:4674) ≈ WGS84 para web. +- **Territórios de Identidade:** composição oficial em `bahiaTerritories.ts` (SECULT/SEPLAN); polígonos = dissolução dos municípios IBGE. IDE Bahia / SEI (referência de validação): `https://metadados.ide.ba.gov.br/geonetwork/srv/api/records/90b140bf-17df-496f-b048-5783fdf02864`. +- **Zonas TSE:** o TSE **não** publica polígonos — só o cadastro tabular. Polígonos só por construção derivada. Fica fora da v1 (B4). ## Granularidade seção vs. zona -Hierarquia TSE: município → (1+) zona → (muitas) seção; a relação município↔zona é muitos-para-muitos (uma cidade pode ter várias zonas; uma zona pode cobrir vários municípios pequenos). Decisão (2026-07-17): **manter zona como granularidade eleitoral de referência** do núcleo, não seções, porque: +Hierarquia TSE: município → (1+) zona → (muitas) seção; a relação município↔zona é muitos-para-muitos. Decisão (2026-07-17): **manter zona como granularidade eleitoral de referência** do núcleo, não seções, porque: 1. O núcleo é unidade operacional da campanha, não eleitoral — o coordenador pensa em bairro/município/território. 2. O cruzamento com a baseline TSE 2022 (`baseline-eleitoral-tse`) é por zona. @@ -40,64 +42,71 @@ Hierarquia TSE: município → (1+) zona → (muitas) seção; a relação munic ## Modelagem de dados -- **Arquivos de geometria** (TopoJSON, menor que GeoJSON) commitados no repo: - - `src/lib/geometries/bahia-municipalities.topojson` — uma Feature por município, `properties: { codarea, name }`. - - `src/lib/geometries/bahia-identity-territories.topojson` — uma Feature por território, `properties: { code, name }` (`code` = "01".."27", já existe em `bahiaIdentityTerritoryRecords`). +- **Arquivos de geometria** (TopoJSON) commitados no repo: + - `src/lib/geometries/bahia-municipalities.topo.json` — uma Feature por município, `properties: { codarea, name }` (name = canônico do app). + - `src/lib/geometries/bahia-identity-territories.topo.json` — uma Feature por território, `properties: { code, name }` (`code` = "01".."27"). - **Join por chave estável:** - - Municípios: o núcleo guarda `city` (nome). Precisamos de `name → codarea`. Criar `src/lib/bahiaMunicipalityCodes.ts` (record nome→código IBGE de 7 dígitos) com proveniência + fixture `tests/fixtures/bahia-municipality-codes.official.json` + teste `tests/int/bahiaMunicipalityCodes.int.spec.ts` (espelha `bahiaTerritories`). Necessário porque nomes IBGE ≠ nomes SECULT canônicos (acentos, "Dias D'Ávila", etc.) — a tabela reconcilia. + - Municípios: o núcleo guarda `cities[]` (array de nomes, desde A1). Tabela `src/lib/bahiaMunicipalityCodes.ts` (nome canônico → código IBGE de 7 dígitos) + fixture `tests/fixtures/bahia-municipality-codes.official.json` + teste `tests/int/bahiaMunicipalityCodes.int.spec.ts`. Reconciliação IBGE→canônico via `canonicalizeMunicipalityName` (`src/lib/electionResults.ts`). - Territórios: join por `code` (01–27) já presente em `bahiaIdentityTerritoryRecords`; sem tabela extra. -- **Proveniência e versionamento:** cada arquivo `.topojson` e cada tabela estática com cabeçalho/documentação de proveniência (URL, versão/ano, SHA-256 do download de origem), no estilo de `bahiaTerritories.ts`. +- **Helpers:** `src/lib/bahiaGeometries.ts` — `getMunicipalityFeature(codarea)`, `getTerritoryFeature(code)`, topologias tipadas (framework-free para B3). +- **Proveniência e versionamento:** cada artefato com cabeçalho/documentação de proveniência (URL, SHA-256 do download de origem), no estilo de `bahiaTerritories.ts` / `bahiaTseZones.ts`. ## Script de geração (one-off, re-executável) -- `scripts/build-bahia-geometries.mjs`: baixa IBGE (API) + IDE Bahia (shapefile), converte/simplifica com `topojson-server` + `topojson-simplify` (ou `@turf/simplify`), emite os `.topojson` e a tabela `bahiaMunicipalityCodes.ts`. Não roda em build/dev — só quando se atualiza a versão de origem. Mesmo guard de não-produção dos outros scripts (não toca prod). +- `scripts/build-bahia-geometries.mjs` (`pnpm build:geometries`): baixa IBGE Malhas + Localidades, reconcilia nomes, constrói topologia com `topojson-server` + `topojson-simplify` + `quantize`, dissolve territórios com `topojson-client` `merge`, emite os `*.topo.json`, `bahiaMunicipalityCodes.ts` e o fixture. Cache em `data/geometries/` (gitignored). **Não toca banco** — sem `assertLocalDatabase`. Não roda em build/dev — só quando se atualiza a versão de origem. -## Leaflet na campanha +## Leaflet na campanha (B3 — pendente) -- Dependência: `leaflet` + `topojson-client` (cliente). `react-leaflet` é opcional; preferir wrapper cliente fino com `leaflet` direto e `dynamic(() => import(...), { ssr: false })` para evitar SSR. +- Dependência: `leaflet` (+ `topojson-client` já instalado na Fase 1). `react-leaflet` é opcional; preferir wrapper cliente fino com `leaflet` direto e `dynamic(() => import(...), { ssr: false })` para evitar SSR. - **Base tiles:** OpenStreetMap raster (ou CartoDB Positron) com atribuição obrigatória; ou fundo neutro sem tiles (só coroplético) como opção mais leve. Decidir na implementação; default OSM. - **Componentes novos (todos `src/components/campaign/`, PascalCase):** - `BahiaMap.tsx` — cliente, recebe `geometry` (TopoJSON) + `values: Record` (chave→métrica) + `mode: 'municipality' | 'territory'` + `colorScale`; renderiza coroplético Leaflet. - `NucleusOverviewMap.tsx` — mapa no overview de `/campanha/nucleos`, escopado pelos mesmos filtros da lista, com toggle município/território e escolha da métrica (estimativa confirmada, nº de núcleos, baseline 2022 Solla quando disponível). - `NucleusDetailMap.tsx` — mapa pequeno no detalhe do núcleo destacando seus municípios/território (+ marcadores ponto das zonas TSE, quando a camada de zonas existir). - `DashboardMap.tsx` — coroplético por território no dashboard `/campanha`. -- **Agregação:** servidor continua a fonte. Reusar `campaignDashboardPageData` / `nucleusViewModels` e expor agregados por `codarea`/`code` de território; o cliente junta com a geometria. Sem query espacial. +- **Agregação:** servidor continua a fonte. Reusar `campaignDashboardPageData` / `nucleusViewModels` / `nucleusListOverviewPageData` e expor agregados por `codarea`/`code` de território; o cliente junta com a geometria. Sem query espacial. ## Phasing -- **Fase 1 — Fundação de geometrias:** `bahiaMunicipalityCodes.ts` + fixture + teste; `.topojson` de municípios e territórios; script de geração; helpers `getMunicipalityFeature(codarea)`, `getTerritoryFeature(code)`. -- **Fase 2 — Leaflet nas superfícies:** `BahiaMap` + `NucleusOverviewMap` + `NucleusDetailMap` + `DashboardMap`, com agregados existentes. +- **Fase 1 — Fundação de geometrias (B2) ✓ entregue 2026-07-18:** `bahiaMunicipalityCodes.ts` + fixture + teste; `*.topo.json` de municípios e territórios; script `pnpm build:geometries`; helpers em `bahiaGeometries.ts`. +- **Fase 2 — Leaflet nas superfícies (B3):** `BahiaMap` + `NucleusOverviewMap` + `NucleusDetailMap` + `DashboardMap`, com agregados existentes. -**Sequenciamento (2026-07-17):** a Fase 1 é independente e paralelizável a qualquer momento. A Fase 2 rende mais **depois** de [overview-lista-nucleos.md](overview-lista-nucleos.md) (o `NucleusOverviewMap` é um bloco daquele painel) e ganha muito valor com [baseline-eleitoral-tse.md](baseline-eleitoral-tse.md) implementado (coroplético de baseline 2022 e da classificação territorial é onde o mapa vira instrumento de decisão, não só visual). Nenhum dos dois é bloqueante — o mapa funciona só com estimativa/nº de núcleos — mas a ordem recomendada no roadmap coloca overview e baseline antes. +**Sequenciamento:** a Fase 1 é independente e paralelizável. A Fase 2 rende mais depois de B1 ✓ (overview) e ganha valor com A4 (baseline no produto). Nenhum dos dois bloqueia B3 — o mapa funciona só com estimativa/nº de núcleos. -## Ciclo seguinte — Zonas TSE como camada +## Ciclo seguinte — Zonas TSE como camada (B4) -Após `zonas-por-municipio`. Polígono por dissolução dos municípios membros (abordagem A, default) ou por geocodificação dos endereços das seções → casco convexo/côncavo (abordagem B, questão em aberto). Ponto representativo por centroide da zona. Item separado no roadmap. +Após A2 ✓ + B3. Polígono por dissolução dos municípios membros (abordagem A, default — já validada na Fase 1 para TIs) ou por geocodificação dos endereços das seções → casco (abordagem B, questão em aberto). Ponto representativo por centroide da zona. -- **(A) Dissolução dos municípios membros:** o TSE publica quais municípios compõem cada zona; como a v1 já terá os polígonos municipais (IBGE), basta dissolver os municípios de cada zona. Limpo, alinhado às divisas oficiais, sem geocodificação, sem serviço externo. Mais fiel porque usa a composição oficial. -- **(B) Geocodificar endereços das seções/locais de votação → casco:** pegar os locais de votação de cada zona, geocodificar (OSM Nominatim com rate-limit, IBGE logradouros, ou geocoder pago) e gerar o polígono. Independente do mapeamento município→zona, mas: milhares de endereços para geocodificar em batch offline, locais de votação se concentram em centros urbanos (casco irregular, áreas rurais cobertas mal), e pode divergir da composição oficial do TSE. +- **(A) Dissolução dos municípios membros:** o TSE publica quais municípios compõem cada zona (`bahiaTseZones`); com os polígonos municipais IBGE, basta dissolver. Limpo, alinhado às divisas oficiais. +- **(B) Geocodificar endereços das seções/locais de votação → casco:** milhares de endereços, casco irregular em áreas rurais, pode divergir da composição oficial. ## Não escopo - PostGIS (adiado; só se surgir query espacial real). - `/mapa` dedicada do design-ux (adiada). -- Camada de Zonas TSE — polígono ou ponto (ciclo seguinte; depende de `zonas-por-municipio`). +- Camada de Zonas TSE — polígono ou ponto (B4; depende de A2 ✓ + B3). - Mapear núcleo a seções eleitorais (zona segue como referência). - Geocodificação de endereços de apoiadores. - Outros estados (todo núcleo é BA). ## Dependências -- Reusa `bahiaIdentityTerritoryRecords`/`bahiaMunicipalities` (`src/lib/bahiaTerritories.ts`), `CitiesByState.BA` (`src/lib/cities`), `campaignDashboardPageData` / `nucleusViewModels` (agregados existentes), e o padrão de fixture/teste de `bahiaTerritories`. -- **Camada de Zonas** depende de `docs/plans/zonas-por-municipio.md`. +- Reusa `bahiaIdentityTerritoryRecords`/`bahiaMunicipalities` (`src/lib/bahiaTerritories.ts`), `canonicalizeMunicipalityName` (`src/lib/electionResults.ts`), `CitiesByState.BA` (`src/lib/cities`), `campaignDashboardPageData` / `nucleusViewModels` / `nucleusListOverviewPageData` (agregados para B3), e o padrão de fixture/teste de `bahiaTerritories`. +- **Camada de Zonas (B4)** depende de A2 (`docs/plans/zonas-por-municipio.md`) + B3. + +## Revisões + +- **2026-07-18 (auditoria pré-B2 + entrega Fase 1):** territórios por dissolução IBGE (não shapefile IDE Bahia); extensão `*.topo.json`; reuso de `canonicalizeMunicipalityName`; núcleo usa `cities[]` (A1); script sem guard de banco; referências de linha do roadmap antigas removidas; Fase 1 implementada e marcada entregue. ## Referências -- `docs/roadmap.md` (item "Mapa / PostGIS", linha 52; "Import do cadastro oficial de zonas TSE", linha 59) +- `docs/roadmap.md` (B2 / B3 / B4 na trilha B) - `src/lib/bahiaTerritories.ts` + `tests/fixtures/bahia-identity-territories.official.json` + `tests/int/bahiaTerritories.int.spec.ts` (padrão a espelhar) -- `src/collections/ElectoralNucleus.ts`, `src/utilities/campaignDashboardPageData.ts`, `src/utilities/nucleusViewModels.ts` (agregados a reusar) +- `src/lib/bahiaMunicipalityCodes.ts`, `src/lib/bahiaGeometries.ts`, `src/lib/geometries/*.topo.json` +- `scripts/build-bahia-geometries.mjs` +- `src/collections/ElectoralNucleus.ts`, `src/utilities/campaignDashboardPageData.ts`, `src/utilities/nucleusViewModels.ts`, `src/utilities/nucleusListOverviewPageData.ts` (agregados a reusar no B3) - `docs/plans/zonas-por-municipio.md` (dependência da camada de Zonas) - `docs/plans/baseline-eleitoral-tse.md` (baseline por zona, consumidor do mapa) - AGENTS.md (naming, "Bahia implícita", padrão de dado estático versionado) - IBGE — API de Malhas: https://servicodados.ibge.gov.br/api/docs/malhas -- IDE Bahia / SEI — Territórios de Identidade 1:100.000: https://metadados.ide.ba.gov.br/geonetwork/srv/api/records/90b140bf-17df-496f-b048-5783fdf02864 +- IDE Bahia / SEI — Territórios de Identidade 1:100.000 (referência): https://metadados.ide.ba.gov.br/geonetwork/srv/api/records/90b140bf-17df-496f-b048-5783fdf02864 diff --git a/docs/roadmap.md b/docs/roadmap.md index 278b3933..93b738c2 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,6 +1,6 @@ # Roadmap — Teqo -Atualizado em: 2026-07-18 (MVP + Ciclo 2 deployados; A2 entregue; C2 engenharia pronta e mesclada em `main`; C3 Planos de Ação implementado e mesclado em `main`; C6/C7 registrados — escala/DRY pós-C2 e pós-C3) +Atualizado em: 2026-07-18 (MVP + Ciclo 2 deployados; A2 entregue; C2 engenharia pronta e mesclada em `main`; C3 Planos de Ação implementado e mesclado em `main`; C6/C7 registrados — escala/DRY pós-C2 e pós-C3; B2 fundação de geometrias do mapa entregue) Registro canônico no repositório dos planos futuros e débitos conhecidos. Status operacional do ciclo atual de Núcleos fica em [`.cursor/rules/projects/nucleos-eleitorais.mdc`](../.cursor/rules/projects/nucleos-eleitorais.mdc); este arquivo lista o que ainda é futuro ou bloqueador, **em ordem de execução**, com dependências e paralelismo explícitos. @@ -60,6 +60,10 @@ MVP de território + reporte implementado e enviado (ondas 1–8 + refactors de - **A2 Zonas TSE + sugestões cruzadas** — cadastro estático `bahiaTseZones` (TSE 2024 `detalhe_votacao_munzona` BA, 417 municípios), motor puro `territorySuggestions` (inclui `outsideZones`), coordenador `NucleusTerritoryAndZonesFields` com chips `{rótulo} +` opt-in (município/TI → ZEs; irmãos do TI e cidades da ZE → Municípios), `TseZoneInput` controlado. Sem migration, sem igualdade forçada no save. [Plano](plans/zonas-por-municipio.md). +### Ciclo 2+ — B2 fundação de geometrias do mapa (2026-07-18) + +- **B2 Mapa Fase 1 (geometrias)** — TopoJSON estático de municípios IBGE (`bahia-municipalities.topo.json`) + Territórios de Identidade por dissolução (`bahia-identity-territories.topo.json`), tabela `bahiaMunicipalityCodes` (nome canônico → `codarea`), helpers `bahiaGeometries` (`getMunicipalityFeature` / `getTerritoryFeature`), script re-executável `pnpm build:geometries`. Sem migration, sem UI (Leaflet = B3). [Plano](plans/mapa-bahia-geometrias.md). + ### Ciclo 2+ — C2 e C3 mesclados em `main` (2026-07-18) - **C2 Cadastro nominal de apoiadores** — collection `supporter` (join `Contact`↔campanha, núcleo opcional), migration `20260718_222656_add_supporter` com `UNIQUE NULLS NOT DISTINCT (contact_id, nucleus_id)`, consent por chaves estáveis `apoiador-cadastro` / `apoiador-intencao-voto` via `campaignConsent.ts` genérico (`getConsentByKey` / `requireConsentByKey`, falha fechada), actions (create / intenção de voto / import CSV só `geral` / `removeSupporterData`), UI `/campanha/apoiadores` (lista+KPIs, ficha, wizard de import, kit mínimo `wa.me`). Telefone obrigatório no v1; `lideranca` sem acesso à área. Engenharia pronta e mesclada — produção com dados reais espera deploy (build Vercel aplica a migration) + Consent keys + aprovação jurídica (Onda 0). [Plano](plans/cadastro-nominal-apoiadores.md). @@ -109,7 +113,7 @@ flowchart TD subgraph TrilhaB["Trilha B — superfícies de coordenação"] B1["B1 Overview da lista de núcleos ✓"] - B2["B2 Mapa Fase 1 (geometrias)"] + B2["B2 Mapa Fase 1 (geometrias) ✓"] B3["B3 Mapa Fase 2 (Leaflet nas superfícies)"] B4["B4 Camada de zonas TSE no mapa"] end @@ -155,7 +159,7 @@ flowchart TD JUR -.chave de push.-> D2 ``` -Itens sem seta de entrada (**paralelizáveis a qualquer momento**): B2, além dos fill-ins (visitados recentemente, listas globais, reset de senha, higiene PascalCase). **Entregues e mesclados em `main` em 2026-07-18** (✓ no grafo): A1, A2, A3, B1, C1, C2, C3 e D1 — ver "Ciclo 2" e "Ciclo 2+" acima. C2 segue com produção bloqueada pelo lote jurídico (Onda 0: Consent keys `apoiador-cadastro` / `apoiador-intencao-voto` + aprovação). Destravados por eles: A4 (A2/A3 + B1 prontos), C4 (A1 + C3 prontos), C6 (merge de C2 ✓), C7 (após C3; suave: C6 F2) e D2 push (D1 pronto; falta a chave jurídica). +Itens sem seta de entrada (**paralelizáveis a qualquer momento**): fill-ins (visitados recentemente, listas globais, reset de senha, higiene PascalCase). **Entregues e mesclados em `main` em 2026-07-18** (✓ no grafo): A1, A2, A3, B1, B2, C1, C2, C3 e D1 — ver "Ciclo 2" e "Ciclo 2+" acima. C2 segue com produção bloqueada pelo lote jurídico (Onda 0: Consent keys `apoiador-cadastro` / `apoiador-intencao-voto` + aprovação). Destravados por eles: A4 (A2/A3 + B1 prontos), B3 (B1 ✓ + B2 ✓; suave: A4 para coroplético), C4 (A1 + C3 prontos), C6 (merge de C2 ✓), C7 (após C3; suave: C6 F2) e D2 push (D1 pronto; falta a chave jurídica). ### Sequência de execução por janela do calendário @@ -185,7 +189,7 @@ Itens sem seta de entrada (**paralelizáveis a qualquer momento**): B2, além do | Ordem | Item | Plano | Depende de | Paralelizável com | | ----- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | | 12 | A5 Insights derivados do baseline (5 itens, paralelizáveis entre si; conversão e classificação exigem limiares de produto) | [conversão](plans/insight-taxa-conversao.md) · [classificação](plans/insight-classificacao-territorial.md) · [alavancagem](plans/insight-alavancagem-chapa.md) · [mobilização](plans/insight-mobilizacao-brancos-nulos.md) · [competitiva](plans/insight-inteligencia-competitiva.md) | A4 | B2/B3, C4, D1 | -| 13 | B2 + B3 Mapa da Bahia (geometrias + Leaflet) | [detalhes](plans/mapa-bahia-geometrias.md) | B3 ← B1+B2 (suave: A4 para coroplético de baseline/classe) | A5, C4, D1 | +| 13 | B2 Mapa Fase 1 (geometrias) **(entregue 2026-07-18)** + B3 Leaflet nas superfícies | [detalhes](plans/mapa-bahia-geometrias.md) | B3 ← B1 ✓ + B2 ✓ (suave: A4 para coroplético de baseline/classe) | A5, C4, D1 | | 14 | C4 Demandas | [detalhes](plans/demandas-campanha.md) | A1 (suave: C3 para a relação `actionPlan`) | A5, B3, D1 | | 15 | D1 PWA `/campanha` **(entregue antecipado em 2026-07-18)** | [detalhes](plans/pwa-campanha.md) | — | tudo | | 16 | D2 Notificações (push + sino) — sino não depende do PWA; push sim | [detalhes](plans/notifications.md) | D1 ✓ (push) + chave `campanha-notificacoes-push` do lote jurídico | A5, B3, C4 | diff --git a/package.json b/package.json index c4b73605..6494f862 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "db:pull": "node scripts/db-pull.mjs", "db:seed:posts": "cross-env NODE_OPTIONS=\"--no-deprecation --import=tsx/esm --import=./scripts/seed-loader.mjs\" node scripts/seed-posts.mjs", "db:seed:tse": "cross-env NODE_OPTIONS=\"--no-deprecation --import=tsx/esm --import=./scripts/seed-loader.mjs\" node scripts/seed-tse-results.mjs", + "build:geometries": "cross-env NODE_OPTIONS=\"--no-deprecation --import=tsx/esm\" node scripts/build-bahia-geometries.mjs", "dev": "node scripts/guard-dev-db.mjs && cross-env NODE_OPTIONS=--no-deprecation next dev", "devsafe": "rm -rf .next && node scripts/guard-dev-db.mjs && cross-env NODE_OPTIONS=--no-deprecation next dev", "generate:importmap": "cross-env NODE_OPTIONS=\"--no-deprecation --conditions=react-server\" payload generate:importmap", @@ -79,6 +80,7 @@ "sonner": "^2.0.7", "tailwind-merge": "^3.4.1", "tailwindcss-animate": "^1.0.7", + "topojson-client": "^3.1.0", "tw-animate-css": "^1.4.0", "zod": "^4.3.6" }, @@ -87,9 +89,14 @@ "@playwright/test": "1.58.2", "@tailwindcss/postcss": "^4.1.18", "@testing-library/react": "16.3.0", + "@types/geojson": "^7946.0.16", "@types/node": "22.19.9", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@types/topojson-client": "^3.1.5", + "@types/topojson-server": "^3.0.4", + "@types/topojson-simplify": "^3.0.3", + "@types/topojson-specification": "^1.0.5", "@types/yauzl": "^3.4.0", "@vercel/blob": "2.3.1", "@vitejs/plugin-react": "4.5.2", @@ -103,6 +110,8 @@ "prettier": "^3.4.2", "schema-dts": "^2.0.0", "tailwindcss": "^4.1.18", + "topojson-server": "^3.0.1", + "topojson-simplify": "^3.0.3", "tsx": "4.21.0", "typescript": "5.7.3", "typescript-eslint": "^8.55.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 719916d2..924d7cb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,6 +110,9 @@ importers: tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@4.1.18) + topojson-client: + specifier: ^3.1.0 + version: 3.1.0 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -129,6 +132,9 @@ importers: '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@types/geojson': + specifier: ^7946.0.16 + version: 7946.0.16 '@types/node': specifier: 22.19.9 version: 22.19.9 @@ -138,6 +144,18 @@ importers: '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) + '@types/topojson-client': + specifier: ^3.1.5 + version: 3.1.5 + '@types/topojson-server': + specifier: ^3.0.4 + version: 3.0.4 + '@types/topojson-simplify': + specifier: ^3.0.3 + version: 3.0.3 + '@types/topojson-specification': + specifier: ^1.0.5 + version: 1.0.5 '@types/yauzl': specifier: ^3.4.0 version: 3.4.0 @@ -177,6 +195,12 @@ importers: tailwindcss: specifier: ^4.1.18 version: 4.1.18 + topojson-server: + specifier: ^3.0.1 + version: 3.0.1 + topojson-simplify: + specifier: ^3.0.3 + version: 3.0.3 tsx: specifier: 4.21.0 version: 4.21.0 @@ -2773,6 +2797,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -2816,6 +2843,18 @@ packages: '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + '@types/topojson-client@3.1.5': + resolution: {integrity: sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw==} + + '@types/topojson-server@3.0.4': + resolution: {integrity: sha512-5+ieK8ePfP+K2VH6Vgs1VCt+fO1U8XZHj0UsF+NktaF0DavAo1q3IvCBXgokk/xmtvoPltSUs6vxuR/zMdOE1g==} + + '@types/topojson-simplify@3.0.3': + resolution: {integrity: sha512-sBO5UZ0O2dB0bNwo0vut2yLHhj3neUGi9uL7/ROdm8Gs6dtt4jcB9OGDKr+M2isZwQM2RuzVmifnMZpxj4IGNw==} + + '@types/topojson-specification@1.0.5': + resolution: {integrity: sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -6021,6 +6060,18 @@ packages: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} + topojson-client@3.1.0: + resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} + hasBin: true + + topojson-server@3.0.1: + resolution: {integrity: sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==} + hasBin: true + + topojson-simplify@3.0.3: + resolution: {integrity: sha512-V+pBjLVzSQ3+hSOxBiV01OVXgFiCmMO8ia3huxKEyIMTC1ApQHBcdXdOqcQ6U2JJJD31TZduwY6KyF15R8sUgg==} + hasBin: true + tough-cookie@6.0.0: resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} @@ -9061,6 +9112,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/geojson@7946.0.16': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -9103,6 +9156,25 @@ snapshots: '@types/statuses@2.0.6': {} + '@types/topojson-client@3.1.5': + dependencies: + '@types/geojson': 7946.0.16 + '@types/topojson-specification': 1.0.5 + + '@types/topojson-server@3.0.4': + dependencies: + '@types/geojson': 7946.0.16 + '@types/topojson-specification': 1.0.5 + + '@types/topojson-simplify@3.0.3': + dependencies: + '@types/geojson': 7946.0.16 + '@types/topojson-specification': 1.0.5 + + '@types/topojson-specification@1.0.5': + dependencies: + '@types/geojson': 7946.0.16 + '@types/trusted-types@2.0.7': optional: true @@ -12744,6 +12816,19 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + topojson-client@3.1.0: + dependencies: + commander: 2.20.3 + + topojson-server@3.0.1: + dependencies: + commander: 2.20.3 + + topojson-simplify@3.0.3: + dependencies: + commander: 2.20.3 + topojson-client: 3.1.0 + tough-cookie@6.0.0: dependencies: tldts: 7.0.23 diff --git a/scripts/build-bahia-geometries.mjs b/scripts/build-bahia-geometries.mjs new file mode 100644 index 00000000..440d5684 --- /dev/null +++ b/scripts/build-bahia-geometries.mjs @@ -0,0 +1,305 @@ +/** + * Builds static Bahia municipality + identity-territory TopoJSON and the + * name→IBGE-code table for the campaign map (roadmap B2). + * + * Provenance (do not strip): + * - IBGE Malhas API v3 (UF BA=29, municipal intrarregião, qualidade intermediaria): + * https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio&qualidade=intermediaria + * - IBGE Localidades API v1 (municipality id + name for BA): + * https://servicodados.ibge.gov.br/api/v1/localidades/estados/29/municipios + * - Identity-territory composition: src/lib/bahiaTerritories.ts (SECULT/SEPLAN; + * territory polygons are dissolved from IBGE municipality meshes — decision + * 2026-07-18). IDE Bahia / SEI territory polygons remain a validation + * reference only: + * https://metadados.ide.ba.gov.br/geonetwork/srv/api/records/90b140bf-17df-496f-b048-5783fdf02864 + * + * Safety: does not touch any database — only downloads public IBGE JSON and + * writes versioned artifacts under src/lib/ and tests/fixtures/. + * + * Usage: + * pnpm build:geometries + * GEOMETRIES_CACHE_DIR=./data/geometries pnpm build:geometries + */ + +import { createHash } from 'node:crypto' +import { mkdir, readFile, writeFile, access } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { topology } from 'topojson-server' +import { merge, quantize } from 'topojson-client' +import { presimplify, simplify, quantile } from 'topojson-simplify' + +const { canonicalizeMunicipalityName, UnknownMunicipalityError } = await import( + '../src/lib/electionResults.ts' +) +const { bahiaMunicipalities, bahiaIdentityTerritoryRecords } = await import( + '../src/lib/bahiaTerritories.ts' +) +const { downloadToBuffer } = await import('../src/lib/electionResultsZip.ts') + +const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..') + +const SOURCES = { + malhas: { + key: 'bahia-malhas-municipios-intermediaria', + url: 'https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio&qualidade=intermediaria', + ext: 'geojson', + }, + localidades: { + key: 'bahia-localidades-municipios', + url: 'https://servicodados.ibge.gov.br/api/v1/localidades/estados/29/municipios', + ext: 'json', + }, +} + +/** Quantile of triangle area kept after presimplify (higher = more detail). */ +const SIMPLIFY_QUANTILE = 0.35 +/** Quantization precision for the final topology. */ +const QUANTIZE_DIGITS = 1e4 + +const die = (message) => { + console.error(`\n[build:geometries] ${message}\n`) + process.exit(1) +} + +const sha256 = (buffer) => createHash('sha256').update(buffer).digest('hex') + +const cacheDir = () => process.env.GEOMETRIES_CACHE_DIR || join(ROOT, 'data', 'geometries') + +const ensureCachedJson = async ({ key, url, ext }) => { + const dir = cacheDir() + await mkdir(dir, { recursive: true }) + const path = join(dir, `${key}.${ext}`) + try { + await access(path) + console.log(`[build:geometries] cache hit ${path}`) + const buffer = await readFile(path) + return { url, hash: sha256(buffer), json: JSON.parse(buffer.toString('utf8')) } + } catch (error) { + if (error?.code !== 'ENOENT') throw error + } + console.log(`[build:geometries] downloading ${url}`) + const buffer = await downloadToBuffer(url) + const hash = sha256(buffer) + await writeFile(path, buffer) + console.log(`[build:geometries] saved ${path} (${buffer.length} bytes, sha256=${hash})`) + return { url, hash, json: JSON.parse(buffer.toString('utf8')) } +} + +const writeJson = async (relativePath, value) => { + const path = join(ROOT, relativePath) + await mkdir(dirname(path), { recursive: true }) + const body = typeof value === 'string' ? value : `${JSON.stringify(value)}\n` + await writeFile(path, body) + console.log(`[build:geometries] wrote ${relativePath} (${Buffer.byteLength(body)} bytes)`) +} + +const simplifyTopology = (topo) => { + let next = presimplify(topo) + const minWeight = quantile(next, SIMPLIFY_QUANTILE) + next = simplify(next, minWeight) + return quantize(next, QUANTIZE_DIGITS) +} + +const buildMunicipalityCodesModule = (entries, provenance) => { + const lines = entries + .map(([name, code]) => ` ${JSON.stringify(name)}: ${JSON.stringify(code)},`) + .join('\n') + + return `/** + * Official Bahia municipality name → IBGE 7-digit code (codarea) mapping. + * + * Source (IBGE Localidades API v1 — municípios da UF BA; accessed ${provenance.accessed}): + * ${provenance.localidadesUrl} + * Download SHA-256: ${provenance.localidadesSha256} + * + * Mesh provenance (IBGE Malhas API v3 — qualidade intermediaria; accessed ${provenance.accessed}): + * ${provenance.malhasUrl} + * Download SHA-256: ${provenance.malhasSha256} + * + * Municipality spellings follow the canonical application names in bahiaTerritories. + * IBGE variants (Araçás, Iuiu, Muquém do São Francisco, Santa Terezinha) were + * reconciled via canonicalizeMunicipalityName. Coverage is independently checked + * by the official test evidence fixture. + */ + +import { isBahiaMunicipality } from '@/lib/bahiaTerritories' + +export const bahiaMunicipalityCodes: Readonly> = { +${lines} +} + +export const codeForMunicipality = (name: string): string | undefined => { + if (!isBahiaMunicipality(name)) return undefined + return bahiaMunicipalityCodes[name] +} + +const municipalityByCode = new Map( + Object.entries(bahiaMunicipalityCodes).map(([name, code]) => [code, name]), +) + +export const municipalityForCode = (codarea: string): string | undefined => + municipalityByCode.get(codarea) +` +} + +const main = async () => { + const malhas = await ensureCachedJson(SOURCES.malhas) + const localidades = await ensureCachedJson(SOURCES.localidades) + + console.log('[build:geometries] provenance:') + console.log(` - ${malhas.url}`) + console.log(` sha256=${malhas.hash}`) + console.log(` - ${localidades.url}`) + console.log(` sha256=${localidades.hash}`) + + if (!Array.isArray(localidades.json) || localidades.json.length !== 417) { + die(`Expected 417 IBGE localidades; got ${localidades.json?.length ?? 'non-array'}`) + } + if (malhas.json?.type !== 'FeatureCollection' || malhas.json.features?.length !== 417) { + die(`Expected 417 IBGE malha features; got ${malhas.json?.features?.length ?? 'invalid'}`) + } + + /** @type {Map} canonical name → IBGE codarea */ + const codeByCanonical = new Map() + /** @type {Map} IBGE codarea → canonical name */ + const canonicalByCodarea = new Map() + + for (const row of localidades.json) { + const codarea = String(row.id) + if (!/^\d{7}$/.test(codarea) || !codarea.startsWith('29')) { + die(`Unexpected IBGE municipality id: ${row.id}`) + } + let canonical + try { + canonical = canonicalizeMunicipalityName(row.nome) + } catch (error) { + if (!(error instanceof UnknownMunicipalityError)) throw error + die(`IBGE name without canonical mapping: "${row.nome}"`) + } + if (codeByCanonical.has(canonical)) { + die(`Duplicate canonical municipality from IBGE: ${canonical}`) + } + codeByCanonical.set(canonical, codarea) + canonicalByCodarea.set(codarea, canonical) + } + + const missing = bahiaMunicipalities.filter((name) => !codeByCanonical.has(name)) + if (missing.length > 0) { + die(`Canonical municipalities missing from IBGE localidades:\n - ${missing.join('\n - ')}`) + } + if (codeByCanonical.size !== 417) { + die(`Expected 417 canonical mappings; got ${codeByCanonical.size}`) + } + + const municipalityFeatures = [] + for (const feature of malhas.json.features) { + const codarea = String(feature.properties?.codarea ?? '') + const name = canonicalByCodarea.get(codarea) + if (!name) die(`Malha feature codarea not in localidades: ${codarea}`) + municipalityFeatures.push({ + type: 'Feature', + properties: { codarea, name }, + geometry: feature.geometry, + }) + } + municipalityFeatures.sort((left, right) => + left.properties.name.localeCompare(right.properties.name, 'pt-BR'), + ) + + let municipalityTopo = topology({ + municipalities: { type: 'FeatureCollection', features: municipalityFeatures }, + }) + municipalityTopo = simplifyTopology(municipalityTopo) + + const geometriesByCodarea = new Map( + municipalityTopo.objects.municipalities.geometries.map((geometry) => [ + geometry.properties.codarea, + geometry, + ]), + ) + + const territoryFeatures = bahiaIdentityTerritoryRecords.map((territory) => { + const memberGeometries = territory.municipalities.map((name) => { + const code = codeByCanonical.get(name) + const geometry = geometriesByCodarea.get(code) + if (!geometry) die(`Missing municipality geometry for ${name} (${code}) in territory ${territory.code}`) + return geometry + }) + return { + type: 'Feature', + properties: { code: territory.code, name: territory.name }, + geometry: merge(municipalityTopo, memberGeometries), + } + }) + + let territoryTopo = topology({ + territories: { type: 'FeatureCollection', features: territoryFeatures }, + }) + territoryTopo = simplifyTopology(territoryTopo) + + const accessed = new Date().toISOString().slice(0, 10) + const provenance = { + accessed, + malhasUrl: malhas.url, + malhasSha256: malhas.hash, + localidadesUrl: localidades.url, + localidadesSha256: localidades.hash, + } + + const codeEntries = [...codeByCanonical.entries()].sort(([left], [right]) => + left.localeCompare(right, 'pt-BR'), + ) + + await writeJson('src/lib/geometries/bahia-municipalities.topo.json', municipalityTopo) + await writeJson('src/lib/geometries/bahia-identity-territories.topo.json', territoryTopo) + await writeJson( + 'src/lib/bahiaMunicipalityCodes.ts', + buildMunicipalityCodesModule(codeEntries, provenance), + ) + + const assignmentRows = codeEntries + .map(([municipality, code]) => `M\t${municipality}\t${code}\n`) + .join('') + const evidenceSha256 = createHash('sha256').update(assignmentRows).digest('hex') + + const fixture = { + provenance: { + description: + 'Test-only evidence for the Bahia municipality name→IBGE-code table. Rows are the canonical application spellings paired with IBGE 7-digit codes from the Localidades API; mesh SHA-256 documents the Malhas download used to build the committed TopoJSON.', + localidadesSource: { + url: localidades.url, + downloadSha256: localidades.hash, + }, + malhasSource: { + url: malhas.url, + quality: 'intermediaria', + downloadSha256: malhas.hash, + }, + territoryComposition: + 'Identity-territory polygons are dissolved from IBGE municipality meshes using bahiaIdentityTerritoryRecords (SECULT/SEPLAN composition). IDE Bahia / SEI territory polygons are a validation reference only.', + accessed, + normalization: + 'IBGE Localidades nomes were reconciled to canonical application spellings via canonicalizeMunicipalityName (Araçás→Araças, Iuiu→Iuiú, Muquém do São Francisco→Muquém de São Francisco, Santa Terezinha→Santa Teresinha). The evidence SHA-256 covers every canonical municipality→codarea assignment.', + }, + municipalityCount: 417, + assignments: codeEntries.map(([municipality, code]) => ({ municipality, code })), + evidenceSha256, + } + + await writeJson( + 'tests/fixtures/bahia-municipality-codes.official.json', + `${JSON.stringify(fixture, null, 2)}\n`, + ) + + console.log('[build:geometries] done') + console.log(` municipalities: ${municipalityFeatures.length}`) + console.log(` territories: ${territoryFeatures.length}`) + console.log(` evidenceSha256: ${evidenceSha256}`) +} + +main().catch((error) => { + console.error(error) + process.exit(1) +}) diff --git a/src/lib/bahiaGeometries.ts b/src/lib/bahiaGeometries.ts new file mode 100644 index 00000000..c2793de8 --- /dev/null +++ b/src/lib/bahiaGeometries.ts @@ -0,0 +1,76 @@ +/** + * Static Bahia municipality and identity-territory geometries for the campaign map. + * + * TopoJSON files are generated by `pnpm build:geometries` from IBGE Malhas (municípios) + * and dissolved by the official Territórios de Identidade composition in + * bahiaTerritories. See scripts/build-bahia-geometries.mjs for full provenance. + * + * Framework-free: safe to import from client components in B3 (Leaflet surfaces). + */ + +import { feature } from 'topojson-client' +import type { Feature, MultiPolygon, Polygon } from 'geojson' +import type { GeometryCollection, Topology } from 'topojson-specification' + +import municipalityTopologyJson from '@/lib/geometries/bahia-municipalities.topo.json' +import territoryTopologyJson from '@/lib/geometries/bahia-identity-territories.topo.json' + +export type BahiaMunicipalityProperties = { + codarea: string + name: string +} + +export type BahiaTerritoryProperties = { + code: string + name: string +} + +export type BahiaMunicipalityFeature = Feature< + Polygon | MultiPolygon, + BahiaMunicipalityProperties +> +export type BahiaTerritoryFeature = Feature + +type MunicipalityTopology = Topology<{ + municipalities: GeometryCollection +}> + +type TerritoryTopology = Topology<{ + territories: GeometryCollection +}> + +export const bahiaMunicipalitiesTopology = + municipalityTopologyJson as unknown as MunicipalityTopology + +export const bahiaIdentityTerritoriesTopology = + territoryTopologyJson as unknown as TerritoryTopology + +const municipalityFeatures = feature( + bahiaMunicipalitiesTopology, + bahiaMunicipalitiesTopology.objects.municipalities, +).features as BahiaMunicipalityFeature[] + +const territoryFeatures = feature( + bahiaIdentityTerritoriesTopology, + bahiaIdentityTerritoriesTopology.objects.territories, +).features as BahiaTerritoryFeature[] + +const municipalityByCodarea = new Map( + municipalityFeatures.map((entry) => [entry.properties.codarea, entry]), +) + +const territoryByCode = new Map( + territoryFeatures.map((entry) => [entry.properties.code, entry]), +) + +export const getMunicipalityFeature = ( + codarea: string, +): BahiaMunicipalityFeature | undefined => municipalityByCodarea.get(codarea) + +export const getTerritoryFeature = (code: string): BahiaTerritoryFeature | undefined => + territoryByCode.get(code) + +export const bahiaMunicipalityFeatures: readonly BahiaMunicipalityFeature[] = + municipalityFeatures + +export const bahiaTerritoryFeatures: readonly BahiaTerritoryFeature[] = territoryFeatures diff --git a/src/lib/bahiaMunicipalityCodes.ts b/src/lib/bahiaMunicipalityCodes.ts new file mode 100644 index 00000000..8dbafce6 --- /dev/null +++ b/src/lib/bahiaMunicipalityCodes.ts @@ -0,0 +1,450 @@ +/** + * Official Bahia municipality name → IBGE 7-digit code (codarea) mapping. + * + * Source (IBGE Localidades API v1 — municípios da UF BA; accessed 2026-07-19): + * https://servicodados.ibge.gov.br/api/v1/localidades/estados/29/municipios + * Download SHA-256: ee2524f732a80d234f129b2e26a90f9bc080a52844a01e5359e789c613d7ee4f + * + * Mesh provenance (IBGE Malhas API v3 — qualidade intermediaria; accessed 2026-07-19): + * https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio&qualidade=intermediaria + * Download SHA-256: 909017a4f91e7950cea123d2601a53b64c70acdb2b256548be25ca9e703cc572 + * + * Municipality spellings follow the canonical application names in bahiaTerritories. + * IBGE variants (Araçás, Iuiu, Muquém do São Francisco, Santa Terezinha) were + * reconciled via canonicalizeMunicipalityName. Coverage is independently checked + * by the official test evidence fixture. + */ + +import { isBahiaMunicipality } from '@/lib/bahiaTerritories' + +export const bahiaMunicipalityCodes: Readonly> = { + "Abaíra": "2900108", + "Abaré": "2900207", + "Acajutiba": "2900306", + "Adustina": "2900355", + "Água Fria": "2900405", + "Aiquara": "2900603", + "Alagoinhas": "2900702", + "Alcobaça": "2900801", + "Almadina": "2900900", + "Amargosa": "2901007", + "Amélia Rodrigues": "2901106", + "América Dourada": "2901155", + "Anagé": "2901205", + "Andaraí": "2901304", + "Andorinha": "2901353", + "Angical": "2901403", + "Anguera": "2901502", + "Antas": "2901601", + "Antônio Cardoso": "2901700", + "Antônio Gonçalves": "2901809", + "Aporá": "2901908", + "Apuarema": "2901957", + "Araças": "2902054", + "Aracatu": "2902005", + "Araci": "2902104", + "Aramari": "2902203", + "Arataca": "2902252", + "Aratuípe": "2902302", + "Aurelino Leal": "2902401", + "Baianópolis": "2902500", + "Baixa Grande": "2902609", + "Banzaê": "2902658", + "Barra": "2902708", + "Barra da Estiva": "2902807", + "Barra do Choça": "2902906", + "Barra do Mendes": "2903003", + "Barra do Rocha": "2903102", + "Barreiras": "2903201", + "Barro Alto": "2903235", + "Barro Preto": "2903300", + "Barrocas": "2903276", + "Belmonte": "2903409", + "Belo Campo": "2903508", + "Biritinga": "2903607", + "Boa Nova": "2903706", + "Boa Vista do Tupim": "2903805", + "Bom Jesus da Lapa": "2903904", + "Bom Jesus da Serra": "2903953", + "Boninal": "2904001", + "Bonito": "2904050", + "Boquira": "2904100", + "Botuporã": "2904209", + "Brejões": "2904308", + "Brejolândia": "2904407", + "Brotas de Macaúbas": "2904506", + "Brumado": "2904605", + "Buerarema": "2904704", + "Buritirama": "2904753", + "Caatiba": "2904803", + "Cabaceiras do Paraguaçu": "2904852", + "Cachoeira": "2904902", + "Caculé": "2905008", + "Caém": "2905107", + "Caetanos": "2905156", + "Caetité": "2905206", + "Cafarnaum": "2905305", + "Cairu": "2905404", + "Caldeirão Grande": "2905503", + "Camacan": "2905602", + "Camaçari": "2905701", + "Camamu": "2905800", + "Campo Alegre de Lourdes": "2905909", + "Campo Formoso": "2906006", + "Canápolis": "2906105", + "Canarana": "2906204", + "Canavieiras": "2906303", + "Candeal": "2906402", + "Candeias": "2906501", + "Candiba": "2906600", + "Cândido Sales": "2906709", + "Cansanção": "2906808", + "Canudos": "2906824", + "Capela do Alto Alegre": "2906857", + "Capim Grosso": "2906873", + "Caraíbas": "2906899", + "Caravelas": "2906907", + "Cardeal da Silva": "2907004", + "Carinhanha": "2907103", + "Casa Nova": "2907202", + "Castro Alves": "2907301", + "Catolândia": "2907400", + "Catu": "2907509", + "Caturama": "2907558", + "Central": "2907608", + "Chorrochó": "2907707", + "Cícero Dantas": "2907806", + "Cipó": "2907905", + "Coaraci": "2908002", + "Cocos": "2908101", + "Conceição da Feira": "2908200", + "Conceição do Almeida": "2908309", + "Conceição do Coité": "2908408", + "Conceição do Jacuípe": "2908507", + "Conde": "2908606", + "Condeúba": "2908705", + "Contendas do Sincorá": "2908804", + "Coração de Maria": "2908903", + "Cordeiros": "2909000", + "Coribe": "2909109", + "Coronel João Sá": "2909208", + "Correntina": "2909307", + "Cotegipe": "2909406", + "Cravolândia": "2909505", + "Crisópolis": "2909604", + "Cristópolis": "2909703", + "Cruz das Almas": "2909802", + "Curaçá": "2909901", + "Dário Meira": "2910008", + "Dias d'Ávila": "2910057", + "Dom Basílio": "2910107", + "Dom Macedo Costa": "2910206", + "Elísio Medrado": "2910305", + "Encruzilhada": "2910404", + "Entre Rios": "2910503", + "Érico Cardoso": "2900504", + "Esplanada": "2910602", + "Euclides da Cunha": "2910701", + "Eunápolis": "2910727", + "Fátima": "2910750", + "Feira da Mata": "2910776", + "Feira de Santana": "2910800", + "Filadélfia": "2910859", + "Firmino Alves": "2910909", + "Floresta Azul": "2911006", + "Formosa do Rio Preto": "2911105", + "Gandu": "2911204", + "Gavião": "2911253", + "Gentio do Ouro": "2911303", + "Glória": "2911402", + "Gongogi": "2911501", + "Governador Mangabeira": "2911600", + "Guajeru": "2911659", + "Guanambi": "2911709", + "Guaratinga": "2911808", + "Heliópolis": "2911857", + "Iaçu": "2911907", + "Ibiassucê": "2912004", + "Ibicaraí": "2912103", + "Ibicoara": "2912202", + "Ibicuí": "2912301", + "Ibipeba": "2912400", + "Ibipitanga": "2912509", + "Ibiquera": "2912608", + "Ibirapitanga": "2912707", + "Ibirapuã": "2912806", + "Ibirataia": "2912905", + "Ibitiara": "2913002", + "Ibititá": "2913101", + "Ibotirama": "2913200", + "Ichu": "2913309", + "Igaporã": "2913408", + "Igrapiúna": "2913457", + "Iguaí": "2913507", + "Ilhéus": "2913606", + "Inhambupe": "2913705", + "Ipecaetá": "2913804", + "Ipiaú": "2913903", + "Ipirá": "2914000", + "Ipupiara": "2914109", + "Irajuba": "2914208", + "Iramaia": "2914307", + "Iraquara": "2914406", + "Irará": "2914505", + "Irecê": "2914604", + "Itabela": "2914653", + "Itaberaba": "2914703", + "Itabuna": "2914802", + "Itacaré": "2914901", + "Itaeté": "2915007", + "Itagi": "2915106", + "Itagibá": "2915205", + "Itagimirim": "2915304", + "Itaguaçu da Bahia": "2915353", + "Itaju do Colônia": "2915403", + "Itajuípe": "2915502", + "Itamaraju": "2915601", + "Itamari": "2915700", + "Itambé": "2915809", + "Itanagra": "2915908", + "Itanhém": "2916005", + "Itaparica": "2916104", + "Itapé": "2916203", + "Itapebi": "2916302", + "Itapetinga": "2916401", + "Itapicuru": "2916500", + "Itapitanga": "2916609", + "Itaquara": "2916708", + "Itarantim": "2916807", + "Itatim": "2916856", + "Itiruçu": "2916906", + "Itiúba": "2917003", + "Itororó": "2917102", + "Ituaçu": "2917201", + "Ituberá": "2917300", + "Iuiú": "2917334", + "Jaborandi": "2917359", + "Jacaraci": "2917409", + "Jacobina": "2917508", + "Jaguaquara": "2917607", + "Jaguarari": "2917706", + "Jaguaripe": "2917805", + "Jandaíra": "2917904", + "Jequié": "2918001", + "Jeremoabo": "2918100", + "Jiquiriçá": "2918209", + "Jitaúna": "2918308", + "João Dourado": "2918357", + "Juazeiro": "2918407", + "Jucuruçu": "2918456", + "Jussara": "2918506", + "Jussari": "2918555", + "Jussiape": "2918605", + "Lafaiete Coutinho": "2918704", + "Lagoa Real": "2918753", + "Laje": "2918803", + "Lajedão": "2918902", + "Lajedinho": "2919009", + "Lajedo do Tabocal": "2919058", + "Lamarão": "2919108", + "Lapão": "2919157", + "Lauro de Freitas": "2919207", + "Lençóis": "2919306", + "Licínio de Almeida": "2919405", + "Livramento de Nossa Senhora": "2919504", + "Luís Eduardo Magalhães": "2919553", + "Macajuba": "2919603", + "Macarani": "2919702", + "Macaúbas": "2919801", + "Macururé": "2919900", + "Madre de Deus": "2919926", + "Maetinga": "2919959", + "Maiquinique": "2920007", + "Mairi": "2920106", + "Malhada": "2920205", + "Malhada de Pedras": "2920304", + "Manoel Vitorino": "2920403", + "Mansidão": "2920452", + "Maracás": "2920502", + "Maragogipe": "2920601", + "Maraú": "2920700", + "Marcionílio Souza": "2920809", + "Mascote": "2920908", + "Mata de São João": "2921005", + "Matina": "2921054", + "Medeiros Neto": "2921104", + "Miguel Calmon": "2921203", + "Milagres": "2921302", + "Mirangaba": "2921401", + "Mirante": "2921450", + "Monte Santo": "2921500", + "Morpará": "2921609", + "Morro do Chapéu": "2921708", + "Mortugaba": "2921807", + "Mucugê": "2921906", + "Mucuri": "2922003", + "Mulungu do Morro": "2922052", + "Mundo Novo": "2922102", + "Muniz Ferreira": "2922201", + "Muquém de São Francisco": "2922250", + "Muritiba": "2922300", + "Mutuípe": "2922409", + "Nazaré": "2922508", + "Nilo Peçanha": "2922607", + "Nordestina": "2922656", + "Nova Canaã": "2922706", + "Nova Fátima": "2922730", + "Nova Ibiá": "2922755", + "Nova Itarana": "2922805", + "Nova Redenção": "2922854", + "Nova Soure": "2922904", + "Nova Viçosa": "2923001", + "Novo Horizonte": "2923035", + "Novo Triunfo": "2923050", + "Olindina": "2923100", + "Oliveira dos Brejinhos": "2923209", + "Ouriçangas": "2923308", + "Ourolândia": "2923357", + "Palmas de Monte Alto": "2923407", + "Palmeiras": "2923506", + "Paramirim": "2923605", + "Paratinga": "2923704", + "Paripiranga": "2923803", + "Pau Brasil": "2923902", + "Paulo Afonso": "2924009", + "Pé de Serra": "2924058", + "Pedrão": "2924108", + "Pedro Alexandre": "2924207", + "Piatã": "2924306", + "Pilão Arcado": "2924405", + "Pindaí": "2924504", + "Pindobaçu": "2924603", + "Pintadas": "2924652", + "Piraí do Norte": "2924678", + "Piripá": "2924702", + "Piritiba": "2924801", + "Planaltino": "2924900", + "Planalto": "2925006", + "Poções": "2925105", + "Pojuca": "2925204", + "Ponto Novo": "2925253", + "Porto Seguro": "2925303", + "Potiraguá": "2925402", + "Prado": "2925501", + "Presidente Dutra": "2925600", + "Presidente Jânio Quadros": "2925709", + "Presidente Tancredo Neves": "2925758", + "Queimadas": "2925808", + "Quijingue": "2925907", + "Quixabeira": "2925931", + "Rafael Jambeiro": "2925956", + "Remanso": "2926004", + "Retirolândia": "2926103", + "Riachão das Neves": "2926202", + "Riachão do Jacuípe": "2926301", + "Riacho de Santana": "2926400", + "Ribeira do Amparo": "2926509", + "Ribeira do Pombal": "2926608", + "Ribeirão do Largo": "2926657", + "Rio de Contas": "2926707", + "Rio do Antônio": "2926806", + "Rio do Pires": "2926905", + "Rio Real": "2927002", + "Rodelas": "2927101", + "Ruy Barbosa": "2927200", + "Salinas da Margarida": "2927309", + "Salvador": "2927408", + "Santa Bárbara": "2927507", + "Santa Brígida": "2927606", + "Santa Cruz Cabrália": "2927705", + "Santa Cruz da Vitória": "2927804", + "Santa Inês": "2927903", + "Santa Luzia": "2928059", + "Santa Maria da Vitória": "2928109", + "Santa Rita de Cássia": "2928406", + "Santa Teresinha": "2928505", + "Santaluz": "2928000", + "Santana": "2928208", + "Santanópolis": "2928307", + "Santo Amaro": "2928604", + "Santo Antônio de Jesus": "2928703", + "Santo Estêvão": "2928802", + "São Desidério": "2928901", + "São Domingos": "2928950", + "São Felipe": "2929107", + "São Félix": "2929008", + "São Félix do Coribe": "2929057", + "São Francisco do Conde": "2929206", + "São Gabriel": "2929255", + "São Gonçalo dos Campos": "2929305", + "São José da Vitória": "2929354", + "São José do Jacuípe": "2929370", + "São Miguel das Matas": "2929404", + "São Sebastião do Passé": "2929503", + "Sapeaçu": "2929602", + "Sátiro Dias": "2929701", + "Saubara": "2929750", + "Saúde": "2929800", + "Seabra": "2929909", + "Sebastião Laranjeiras": "2930006", + "Senhor do Bonfim": "2930105", + "Sento Sé": "2930204", + "Serra do Ramalho": "2930154", + "Serra Dourada": "2930303", + "Serra Preta": "2930402", + "Serrinha": "2930501", + "Serrolândia": "2930600", + "Simões Filho": "2930709", + "Sítio do Mato": "2930758", + "Sítio do Quinto": "2930766", + "Sobradinho": "2930774", + "Souto Soares": "2930808", + "Tabocas do Brejo Velho": "2930907", + "Tanhaçu": "2931004", + "Tanque Novo": "2931053", + "Tanquinho": "2931103", + "Taperoá": "2931202", + "Tapiramutá": "2931301", + "Teixeira de Freitas": "2931350", + "Teodoro Sampaio": "2931400", + "Teofilândia": "2931509", + "Teolândia": "2931608", + "Terra Nova": "2931707", + "Tremedal": "2931806", + "Tucano": "2931905", + "Uauá": "2932002", + "Ubaíra": "2932101", + "Ubaitaba": "2932200", + "Ubatã": "2932309", + "Uibaí": "2932408", + "Umburanas": "2932457", + "Una": "2932507", + "Urandi": "2932606", + "Uruçuca": "2932705", + "Utinga": "2932804", + "Valença": "2932903", + "Valente": "2933000", + "Várzea da Roça": "2933059", + "Várzea do Poço": "2933109", + "Várzea Nova": "2933158", + "Varzedo": "2933174", + "Vera Cruz": "2933208", + "Vereda": "2933257", + "Vitória da Conquista": "2933307", + "Wagner": "2933406", + "Wanderley": "2933455", + "Wenceslau Guimarães": "2933505", + "Xique-Xique": "2933604", +} + +export const codeForMunicipality = (name: string): string | undefined => { + if (!isBahiaMunicipality(name)) return undefined + return bahiaMunicipalityCodes[name] +} + +const municipalityByCode = new Map( + Object.entries(bahiaMunicipalityCodes).map(([name, code]) => [code, name]), +) + +export const municipalityForCode = (codarea: string): string | undefined => + municipalityByCode.get(codarea) diff --git a/src/lib/geometries/bahia-identity-territories.topo.json b/src/lib/geometries/bahia-identity-territories.topo.json new file mode 100644 index 00000000..c3b96ae2 --- /dev/null +++ b/src/lib/geometries/bahia-identity-territories.topo.json @@ -0,0 +1 @@ +{"type":"Topology","bbox":[-46.5768,-18.3372,-37.349412961296125,-8.5328],"transform":{"scale":[0.0009228309869690843,0.0009805380538053805],"translate":[-46.5768,-18.3372]},"objects":{"territories":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","arcs":[[[0,1,2]]],"properties":{"code":"01","name":"Irecê"}},{"type":"MultiPolygon","arcs":[[[3,4,5,6,7,-2,8,9]]],"properties":{"code":"02","name":"Velho Chico"}},{"type":"MultiPolygon","arcs":[[[10,11,12,13,14,-3,-8,15,16]]],"properties":{"code":"03","name":"Chapada Diamantina"}},{"type":"MultiPolygon","arcs":[[[17,18,19,20,21,22]]],"properties":{"code":"04","name":"Sisal"}},{"type":"MultiPolygon","arcs":[[[23,24,25,26,27]]],"properties":{"code":"05","name":"Litoral Sul"}},{"type":"MultiPolygon","arcs":[[[28,-26,29,30,31,32]]],"properties":{"code":"06","name":"Baixo Sul"}},{"type":"MultiPolygon","arcs":[[[33,34]]],"properties":{"code":"07","name":"Extremo Sul"}},{"type":"MultiPolygon","arcs":[[[35,36,-28,37,38]]],"properties":{"code":"08","name":"Médio Sudoeste da Bahia"}},{"type":"MultiPolygon","arcs":[[[39,40,-12,41,-33]]],"properties":{"code":"09","name":"Vale do Jiquiriçá"}},{"type":"MultiPolygon","arcs":[[[-9,-1,-15,42,43,-18,44,45,46,47]]],"properties":{"code":"10","name":"Sertão do São Francisco"}},{"type":"MultiPolygon","arcs":[[[48,-10,-48,49]]],"properties":{"code":"11","name":"Bacia do Rio Grande"}},{"type":"MultiPolygon","arcs":[[[-16,-7,50]]],"properties":{"code":"12","name":"Bacia do Paramirim"}},{"type":"MultiPolygon","arcs":[[[51,-17,-51,-6,52,53]]],"properties":{"code":"13","name":"Sertão Produtivo"}},{"type":"MultiPolygon","arcs":[[[54,-13,-41,55,56,57]]],"properties":{"code":"14","name":"Piemonte do Paraguaçu"}},{"type":"MultiPolygon","arcs":[[[58,-20,59,60,-58]]],"properties":{"code":"15","name":"Bacia do Jacuípe"}},{"type":"MultiPolygon","arcs":[[[-43,-14,-55,-61,61]]],"properties":{"code":"16","name":"Piemonte da Diamantina"}},{"type":"MultiPolygon","arcs":[[[62,-45,-23,63,64]]],"properties":{"code":"17","name":"Semiárido Nordeste II"}},{"type":"MultiPolygon","arcs":[[[-64,-22,65,66,67]]],"properties":{"code":"18","name":"Litoral Norte e Agreste Baiano"}},{"type":"MultiPolygon","arcs":[[[-59,-57,68,69,-66,-21]]],"properties":{"code":"19","name":"Portal do Sertão"}},{"type":"MultiPolygon","arcs":[[[-54,70,-39,71]]],"properties":{"code":"20","name":"Sudoeste Baiano"}},{"type":"MultiPolygon","arcs":[[[-56,-40,-32,72,-69]]],"properties":{"code":"21","name":"Recôncavo"}},{"type":"MultiPolygon","arcs":[[[-11,-52,-72,-38,-27,-29,-42]]],"properties":{"code":"22","name":"Médio Rio de Contas"}},{"type":"MultiPolygon","arcs":[[[73,-4,-49]]],"properties":{"code":"23","name":"Bacia do Rio Corrente"}},{"type":"MultiPolygon","arcs":[[[-63,74,-46]]],"properties":{"code":"24","name":"Itaparica"}},{"type":"MultiPolygon","arcs":[[[-62,-60,-19,-44]]],"properties":{"code":"25","name":"Piemonte Norte do Itapicuru"}},{"type":"MultiPolygon","arcs":[[[-67,-70,-73,-31,75]]],"properties":{"code":"26","name":"Metropolitano de Salvador"}},{"type":"MultiPolygon","arcs":[[[76,-34,77,-24,-37]]],"properties":{"code":"27","name":"Costa do Descobrimento"}}]}},"arcs":[[[5325,7675],[-88,106],[-27,-15],[-159,81],[-90,1],[-72,114],[-29,151],[-46,38],[-28,89],[-266,74],[1,-69],[-59,-59],[-6,-73],[-114,-90],[-53,-100]],[[4289,7923],[-46,-20],[-45,-129],[-84,-105],[-89,7],[-136,-100],[-69,-99],[-48,-21],[-58,-140],[-54,-76],[29,-80],[-55,-57],[-45,-113],[225,-46],[58,-70],[75,-32],[15,50],[72,-33],[119,-95],[-30,-106],[78,-69],[34,10],[225,-101],[234,18],[170,-244],[-1,-106]],[[4863,6166],[53,0],[-18,72],[77,-72],[19,26],[-2,177],[23,71],[-82,132],[3,79],[152,-77],[463,-212],[107,-71],[-14,87],[-95,116],[99,274],[-76,67],[-133,78],[166,115],[52,222],[-13,87],[-74,123],[-2,46],[-110,10],[-30,65],[-79,48],[-24,46]],[[2870,6215],[134,-3],[82,-66],[47,-8],[-23,-53],[166,-139],[119,-45],[-100,-88],[-15,-254],[-47,-40],[-101,-8],[5,-186],[45,-70],[-57,15],[-178,-94],[-54,-172],[13,-43],[80,-17],[-121,-170],[129,-53],[-70,-37],[-27,-54],[-109,-33],[-67,-117],[-31,30],[-14,-72],[-95,60],[-39,-17],[-50,-90],[-111,-13],[-51,-38],[-15,-109],[31,-95]],[[2346,4136],[103,42],[82,0],[118,-42],[147,16],[59,-35],[114,-12],[58,-28],[-94,-177],[-14,-142],[185,-64]],[[3104,3694],[60,45],[27,101],[-92,185],[21,43],[133,66],[5,104],[123,16],[-34,77],[48,201],[75,-85],[107,-17],[160,13],[25,50],[89,12],[178,-101],[64,-19],[313,119],[-83,88],[-22,76],[-41,17],[-85,144],[15,101],[32,25]],[[4222,4955],[-95,75],[-14,42],[-142,70],[10,138],[-77,135],[1,77],[89,64],[14,168],[-11,187],[68,-29],[202,70]],[[4267,5952],[115,-47],[217,72],[29,74],[56,-4],[-17,99],[158,34],[38,-14]],[[4289,7923],[-716,338],[-114,-3]],[[3459,8258],[9,-212],[-1,-276],[-12,-143],[-174,-12],[-228,-40],[-90,61],[-63,-7],[-61,-73],[-75,-28],[109,-129],[69,-203],[49,-107],[50,-205],[100,-211],[18,-73],[-107,-141],[31,-45],[-69,-45],[-30,-58],[-70,-24],[-44,-72]],[[6129,4534],[45,48],[243,5]],[[6417,4587],[-50,39],[-25,112],[38,84],[-8,103],[-33,78],[-61,65],[69,131],[100,58],[46,-33],[80,39],[46,65],[57,26]],[[6676,5354],[-96,145],[-77,-59],[-85,2],[-143,-44],[-110,39],[-63,-33],[-39,127],[-42,-2],[57,125],[-43,176],[47,130],[-19,33],[-111,-5],[-133,-40],[52,121],[104,103],[86,23],[-71,83],[83,53],[85,-26],[23,30],[-39,67],[10,83],[-81,91],[97,134],[39,-19],[159,233]],[[6366,6924],[-175,136],[-90,132],[-203,134],[-115,8],[-84,74],[22,71],[69,48],[-60,48],[-150,44],[-54,113],[-102,0]],[[5424,7732],[-37,-55],[-62,-2]],[[4267,5952],[-18,-19],[31,-109],[47,-56],[109,-31],[37,25],[199,-40],[57,-199],[105,-107],[13,-108],[140,-111],[68,-23],[13,-41],[-51,-40],[-23,-188]],[[4994,4905],[118,-45],[105,-91],[56,-25],[150,-200],[14,-64],[71,28],[-55,158],[-29,5],[-40,99],[350,-23],[39,-36],[99,42],[56,52],[80,-1],[-3,-156],[124,-114]],[[8010,8241],[-55,64],[-147,22],[-167,-16],[-37,83],[-31,-19],[-161,62],[3,-25]],[[7415,8412],[-3,-143],[25,-92],[-19,-93],[-78,-16],[-130,-70],[-6,-47],[-97,-81],[24,-12],[-67,-230],[54,-60],[-18,-66],[46,-173]],[[7146,7329],[31,-6],[-2,-94],[102,-65],[14,-38],[99,-73],[63,23],[111,-135],[119,-71],[134,-47],[133,-129],[-44,-60],[-17,-162]],[[7889,6472],[132,10],[59,58],[47,98],[78,17],[75,-27],[22,-63],[43,79],[140,132],[79,0]],[[8564,6776],[-117,334],[9,9]],[[8456,7119],[160,174],[16,50],[57,10],[-38,142],[-80,91],[-47,9],[-70,118],[46,58],[-8,72],[-42,43],[-174,-19],[-12,-32],[-96,24],[-239,-48],[23,61],[89,63],[9,175],[-40,131]],[[7595,2615],[-5,-22],[113,-40],[75,40],[47,-56],[74,6],[53,48],[373,31]],[[8325,2622],[-45,103],[-18,200],[-42,185],[-7,307],[-22,65],[-11,143],[-30,16],[-7,145],[66,285],[21,48],[-10,99],[39,127],[28,173],[-25,35]],[[8262,4553],[-53,-64],[-4,-99],[24,-42],[-124,-38],[-50,20],[-220,-58],[-105,-53],[-1,-42],[-77,21]],[[7652,4198],[-65,-32],[144,-53],[-23,-36],[-93,-7],[-96,81],[-40,-25],[-23,-80]],[[7456,4046],[-40,-150],[19,-63],[-41,-167],[-28,1],[-19,-145],[65,-29],[13,-55],[-94,-5],[-107,-64],[68,-283],[41,-14],[21,-101],[-55,-60],[12,-50],[127,-35],[31,-50],[119,21],[53,-20],[-12,-140],[-34,-22]],[[7437,4693],[76,45],[97,-36],[26,-79],[-28,-34],[74,-44],[-45,-36],[54,-66],[-8,-141],[-31,-104]],[[8262,4553],[-50,128],[67,91],[49,18],[-46,79],[44,104],[-13,76],[-45,-13],[-22,59],[37,122],[147,86]],[[8430,5303],[-4,77],[54,97]],[[8480,5477],[-177,36],[34,-67],[-80,-66],[-213,22],[-52,-38]],[[7992,5364],[85,-32],[-99,0],[-96,-56],[143,-71],[-53,-6],[-13,-54],[-90,88],[-35,-46],[-99,14],[12,-59],[-47,-12],[7,-62],[-113,-112],[-64,-5],[-44,-56],[-63,35],[-94,-62],[108,-175]],[[8083,1473],[-53,-37],[-135,42],[-214,-41],[-26,89],[-77,-13],[-122,127],[-136,-36],[-74,39],[-258,48],[-8,-30],[-122,-7],[-64,19]],[[6794,1673],[-18,-107],[79,-30],[-34,-71],[-90,27],[-46,-25],[-79,22],[-68,-108],[-38,-170],[33,-137],[-66,-44],[10,-66],[126,-98],[26,-83],[49,-41],[76,-6],[77,-114],[64,-26],[43,-101],[-97,-72],[45,-59],[601,-364],[35,107],[156,239],[71,66],[171,72],[11,35],[130,138],[-42,64],[-17,188],[-28,113],[6,177],[33,50],[33,174],[37,50]],[[6368,2723],[81,-52],[70,-87],[105,49],[42,-51],[95,-19],[110,21],[82,-107],[81,12],[20,-64],[68,-43],[97,2]],[[7219,2384],[78,23],[-116,83],[43,29],[81,-17],[52,73],[169,70],[69,-30]],[[7456,4046],[-101,20],[-52,-95],[-70,8],[-115,-96],[-75,-8],[-96,60]],[[6947,3935],[-41,-78],[-19,-120],[-81,11],[-26,-83],[10,-99],[31,-15],[-89,-58],[-48,61],[-28,-68],[-126,-120],[-163,-40],[-128,-129],[-30,-68],[169,29],[92,-44],[126,4],[21,-21],[-33,-118],[22,-192],[-42,-84],[-127,-9],[-69,29]],[[7992,5364],[-49,-18],[-103,35],[-65,65],[-45,4],[-35,142]],[[7695,5592],[-175,-78],[-213,112],[-65,69],[-38,-65],[32,-59],[-97,-57],[-3,-33],[-83,-30],[-83,10],[-59,-68],[-132,9],[-19,-42],[-84,-6]],[[6417,4587],[162,-48],[71,22],[-86,77],[-20,62],[69,51],[7,-39],[191,16],[104,-9],[109,26],[8,45],[107,-1],[102,-55],[46,40],[6,-68],[83,-63],[61,50]],[[5424,7732],[-21,25],[216,169],[11,48],[-99,54],[102,49],[56,63],[53,9]],[[5742,8149],[145,126],[-30,27],[2,168],[-93,59],[21,49],[55,-30],[87,43],[23,-33],[94,61],[115,-28],[65,50],[204,-23],[152,-86],[98,-2],[104,67],[33,-39],[112,60],[303,107],[6,42],[65,-89],[108,-74],[-32,-71],[10,-105],[26,-16]],[[8010,8241],[116,-126],[213,112],[325,-35],[6,81],[-171,63],[23,38],[-100,118],[-124,51],[-14,88],[77,51],[-4,44],[85,35],[2,102]],[[8444,8863],[-83,16],[-113,-8],[-157,13],[-185,-9],[-85,20],[-93,107],[37,55],[3,96],[55,76],[-16,63],[23,70],[-62,25],[-65,160],[-25,143],[128,278],[18,16]],[[7824,9984],[-103,-16],[-176,-96],[-81,-4],[17,-126],[-125,-35],[-113,-10],[20,-110],[-88,-112],[-120,-17],[-69,-48],[-118,57],[-37,-29],[-40,-196],[-51,-104],[-66,25],[-54,-69],[-47,13],[-48,-51],[-73,-26],[-156,38],[32,111],[-21,22],[75,38],[22,121],[-167,81],[-32,128],[-76,121],[-109,-8],[-16,59],[-73,5],[-9,77],[-123,1],[-58,-32],[-111,29],[-47,-97],[-93,-75],[-38,-87],[-65,4],[-128,-57],[-10,-76],[-73,-61],[-41,-97],[-90,-37],[-56,31],[-140,-34],[-148,-4],[-84,-31],[-192,-182],[-105,-4],[-32,-41],[-104,-16],[-59,-66],[-54,0],[-9,60],[-52,-1],[-81,52],[-39,111],[-58,-13],[-131,36],[-134,-42],[-199,163],[-113,-57],[-126,-106],[-105,-38],[-72,-107],[12,-77],[62,-127],[143,-83],[-61,-71],[47,-79],[-28,-84],[-74,-1],[-27,-120],[-57,-59],[0,-54],[-85,-92]],[[2884,8102],[157,0],[48,37],[71,-18],[-4,49],[87,80],[216,8]],[[398,4968],[302,173],[113,44],[104,19],[132,50],[57,-7],[120,39],[37,-15],[234,45],[276,101],[166,36],[91,-85],[90,61],[0,43],[76,29],[225,-179],[39,93],[70,76],[4,69],[61,9],[32,102],[-122,145],[34,65],[-88,48],[-17,58],[19,163],[74,43],[177,12],[34,-20],[132,30]],[[2884,8102],[-1,-34],[-121,14],[2,-64],[-50,-107],[-73,-61],[-138,17],[-52,67],[-148,-50],[-53,-44],[-84,23],[-98,-61],[-13,-82],[-116,-42],[-22,-59],[-133,-64],[-165,92],[-177,17],[-25,47],[-97,45],[-29,82],[-56,37],[-11,108],[55,66],[-37,87],[-91,71],[-57,90],[0,63],[-39,33],[-94,-49],[-10,-105],[-30,-55],[-77,-11],[-24,-135],[-260,-147],[-74,-21],[-85,-181],[-59,-14],[-7,-126],[-80,-4],[-228,-330],[-27,-81],[49,-35],[8,-89],[92,-59],[96,16],[108,-32],[45,-49],[139,-40],[-128,-24],[-49,43],[-125,-27],[56,-55],[-71,-84],[49,-5],[-56,-95],[90,-72],[-135,-93],[55,-73],[-28,-73],[29,-61],[0,-118],[87,-31],[19,-139],[80,10],[-107,-73],[-11,-62],[42,-81],[-46,-81],[40,-21],[-50,-143],[130,9],[79,35],[2,-48],[-163,-61],[-58,-82],[37,-43],[-35,-113],[38,-65],[205,61],[38,-39],[-73,-82],[-117,-49],[37,-43]],[[4222,4955],[59,75],[84,-56],[93,21],[62,-143],[51,-48],[118,15],[34,-44],[79,-18],[-12,-53],[112,22],[36,80],[-3,63],[59,36]],[[6097,4519],[32,15]],[[3104,3694],[185,-65],[12,-37],[75,70],[162,78],[148,19],[178,-51],[79,-7],[35,-54],[164,-87],[147,-95]],[[4289,3465],[65,118],[-24,55],[31,157],[-26,9],[-3,160],[84,52],[118,-27],[45,-47],[15,-151],[74,-12],[121,35],[-23,85],[117,68],[151,29],[104,-47],[153,-11],[61,-34],[112,11],[-27,19],[-12,179],[63,136],[142,70],[14,-35],[-37,-127],[116,-18],[203,-91],[17,82],[92,78],[-14,144],[45,49],[-3,79],[34,39]],[[6725,6854],[-104,15],[-61,-30],[-7,54],[-76,26],[-111,5]],[[7695,5592],[-29,42],[6,75],[67,65],[20,61],[106,70]],[[7865,5905],[-81,44],[22,69],[-26,89],[-37,21]],[[7743,6128],[-115,-13],[-140,-68],[-78,-2],[-192,-101],[-157,171],[-56,12],[-31,85],[117,76],[-51,65],[-156,11],[-119,123],[64,70],[-97,81],[11,155],[-18,61]],[[7743,6128],[25,64],[73,70],[52,10],[48,82],[37,11],[-89,107]],[[7146,7329],[-9,-12]],[[7137,7317],[-93,-34],[-74,14],[65,-71],[-26,-53],[-86,-36],[-18,-44],[10,-120],[31,-22],[-65,-44],[-73,72],[-16,60],[-81,-71],[14,-114]],[[7137,7317],[-204,58],[-228,45],[44,99],[109,55],[7,65],[-254,85],[-8,81],[-71,-16],[-214,68],[-17,41],[-187,-13],[68,107],[-76,-9],[-28,59],[-151,-15],[-81,36],[-47,-23],[-57,109]],[[9228,8923],[-67,-33],[-38,-59],[-138,-13],[-25,30],[-60,-46],[-134,-6],[-67,27],[-255,40]],[[8456,7119],[164,-55],[-46,-21],[179,-61],[54,71],[82,170],[-77,87],[8,52],[125,47],[83,154],[38,-10]],[[9066,7553],[-38,110],[31,98],[189,27],[71,-58],[181,73],[-3,180],[-50,83],[22,48],[104,44],[-5,102],[-59,128],[21,70],[-47,7],[-96,106],[-97,29],[3,91],[-48,120],[39,49],[-56,63]],[[8564,6776],[143,-63],[-39,-47],[-29,-106],[-114,-57],[-15,-53],[72,-41],[-82,-105],[81,-38],[77,-1],[65,-83],[1,-143]],[[8724,6039],[151,-15],[-3,28],[126,127],[107,18],[34,-113],[73,-87],[38,-6],[104,88],[55,-32]],[[9409,6047],[135,173],[173,288],[105,219],[171,303],[-112,-81],[-130,-29],[-58,34],[-45,-51],[-31,29],[-122,27],[-37,74],[-95,20],[-75,138],[26,89],[-71,18],[-51,82],[20,24],[-146,149]],[[7865,5905],[100,1],[22,34],[143,11],[72,-68],[105,52],[79,4],[5,148],[99,-107],[93,-11],[13,-29]],[[8596,5940],[89,92],[39,7]],[[4289,3465],[198,-88],[-7,-36],[116,-18],[76,-47],[99,40],[96,-103],[98,28],[46,-17],[87,61],[76,16],[483,-408],[27,-249],[126,8],[78,-36],[69,53],[79,6],[47,67],[66,-44],[93,45],[53,-68],[73,48]],[[6947,3935],[-282,97],[-86,47],[123,55],[-199,106],[-318,151],[-66,50],[-22,78]],[[8480,5477],[47,67],[25,221],[-36,44],[33,91],[47,40]],[[398,4968],[-41,-57],[2,-57],[89,-26],[-101,-83],[36,-82],[-59,-26],[49,-59],[-35,-101],[48,-29],[-1,-134],[37,-47],[242,-134],[62,-72],[-27,-55],[-78,-17],[-16,-47],[47,-68],[-24,-66],[-5,-196],[-38,-81],[77,-92],[-9,-73],[-75,-83],[-4,-47],[-76,-41],[43,-62],[127,124],[96,-16],[65,47],[66,-10],[84,46],[115,135],[84,-16],[86,39],[222,182],[118,-9],[71,79],[176,84],[39,96],[83,21],[206,140],[84,13],[83,48]],[[9228,8923],[68,90],[-87,60],[-83,-3],[-94,123],[-83,186],[-9,61],[40,34],[-37,59],[-86,-48],[-108,56],[-9,58],[45,60],[-109,36],[-70,-159],[-42,15],[-35,112],[-109,76],[-158,-17],[-88,69],[-211,27],[-15,75],[-48,74],[-76,17]],[[8430,5303],[167,125],[189,0],[125,59],[119,107],[212,220],[167,233]],[[7219,2384],[-23,-25],[86,-91],[-28,-83],[-58,-50],[19,-41],[-115,-74],[-60,-110],[-25,28],[-73,-90],[13,-55],[-127,6],[-34,-126]],[[8083,1473],[-27,25],[3,117],[39,57],[45,267],[57,62],[-14,92],[80,132],[5,84],[99,228],[-45,85]]]} diff --git a/src/lib/geometries/bahia-municipalities.topo.json b/src/lib/geometries/bahia-municipalities.topo.json new file mode 100644 index 00000000..c134302a --- /dev/null +++ b/src/lib/geometries/bahia-municipalities.topo.json @@ -0,0 +1 @@ +{"type":"Topology","bbox":[-46.5768,-18.3372,-37.3411,-8.5328],"transform":{"scale":[0.0009236623662366238,0.0009805380538053805],"translate":[-46.5768,-18.3372]},"objects":{"municipalities":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0,1,2,3,4]],"properties":{"codarea":"2900108","name":"Abaíra"}},{"type":"Polygon","arcs":[[5,6,7]],"properties":{"codarea":"2900207","name":"Abaré"}},{"type":"Polygon","arcs":[[8,9,10,11]],"properties":{"codarea":"2900306","name":"Acajutiba"}},{"type":"Polygon","arcs":[[12,13,14,15,16]],"properties":{"codarea":"2900355","name":"Adustina"}},{"type":"Polygon","arcs":[[17,18,19,20,21,22,23,24]],"properties":{"codarea":"2900405","name":"Água Fria"}},{"type":"Polygon","arcs":[[25,26,27,28,29]],"properties":{"codarea":"2900603","name":"Aiquara"}},{"type":"Polygon","arcs":[[30,31,32,33,34,35]],"properties":{"codarea":"2900702","name":"Alagoinhas"}},{"type":"Polygon","arcs":[[36,37,38,39]],"properties":{"codarea":"2900801","name":"Alcobaça"}},{"type":"Polygon","arcs":[[40,41,42,43]],"properties":{"codarea":"2900900","name":"Almadina"}},{"type":"Polygon","arcs":[[44,45,46,47,48,49,50]],"properties":{"codarea":"2901007","name":"Amargosa"}},{"type":"Polygon","arcs":[[51,52,53,54]],"properties":{"codarea":"2901106","name":"Amélia Rodrigues"}},{"type":"Polygon","arcs":[[55,56,57,58,59]],"properties":{"codarea":"2901155","name":"América Dourada"}},{"type":"Polygon","arcs":[[60,61,62,63,64,65,66]],"properties":{"codarea":"2901205","name":"Anagé"}},{"type":"Polygon","arcs":[[67,68,69,70,71,72]],"properties":{"codarea":"2901304","name":"Andaraí"}},{"type":"Polygon","arcs":[[73,74,75,76,77]],"properties":{"codarea":"2901353","name":"Andorinha"}},{"type":"Polygon","arcs":[[78,79,80,81,82]],"properties":{"codarea":"2901403","name":"Angical"}},{"type":"Polygon","arcs":[[83,84]],"properties":{"codarea":"2901502","name":"Anguera"}},{"type":"Polygon","arcs":[[85,86,87,88]],"properties":{"codarea":"2901601","name":"Antas"}},{"type":"Polygon","arcs":[[89,90,91,92,93,94]],"properties":{"codarea":"2901700","name":"Antônio Cardoso"}},{"type":"Polygon","arcs":[[95,96,97,98,99]],"properties":{"codarea":"2901809","name":"Antônio Gonçalves"}},{"type":"Polygon","arcs":[[-12,100,101,102,103]],"properties":{"codarea":"2901908","name":"Aporá"}},{"type":"Polygon","arcs":[[104,105,106,107,108]],"properties":{"codarea":"2901957","name":"Apuarema"}},{"type":"Polygon","arcs":[[109,-34,110,111,112]],"properties":{"codarea":"2902054","name":"Araças"}},{"type":"Polygon","arcs":[[113,114,115,116,117]],"properties":{"codarea":"2902005","name":"Aracatu"}},{"type":"Polygon","arcs":[[118,119,120,121,122,123,124,125,126]],"properties":{"codarea":"2902104","name":"Araci"}},{"type":"Polygon","arcs":[[127,-25,128,129,-31]],"properties":{"codarea":"2902203","name":"Aramari"}},{"type":"Polygon","arcs":[[130,131,132,133,134]],"properties":{"codarea":"2902252","name":"Arataca"}},{"type":"Polygon","arcs":[[135,136,137,138,139]],"properties":{"codarea":"2902302","name":"Aratuípe"}},{"type":"Polygon","arcs":[[140,141,142,143,144,145]],"properties":{"codarea":"2902401","name":"Aurelino Leal"}},{"type":"Polygon","arcs":[[146,147,148,149,150,151,152,153]],"properties":{"codarea":"2902500","name":"Baianópolis"}},{"type":"Polygon","arcs":[[154,155,156,157,158]],"properties":{"codarea":"2902609","name":"Baixa Grande"}},{"type":"Polygon","arcs":[[159,160,161,162]],"properties":{"codarea":"2902658","name":"Banzaê"}},{"type":"Polygon","arcs":[[163,164,165,166,167,168,169,170]],"properties":{"codarea":"2902708","name":"Barra"}},{"type":"Polygon","arcs":[[171,172,173,174,175,176]],"properties":{"codarea":"2902807","name":"Barra da Estiva"}},{"type":"Polygon","arcs":[[177,178,179,180]],"properties":{"codarea":"2902906","name":"Barra do Choça"}},{"type":"Polygon","arcs":[[181,182,183,184,185,186]],"properties":{"codarea":"2903003","name":"Barra do Mendes"}},{"type":"Polygon","arcs":[[187,188,189,190]],"properties":{"codarea":"2903102","name":"Barra do Rocha"}},{"type":"Polygon","arcs":[[-81,191,192,193,194,195]],"properties":{"codarea":"2903201","name":"Barreiras"}},{"type":"Polygon","arcs":[[196,197,198,199,200,-185]],"properties":{"codarea":"2903235","name":"Barro Alto"}},{"type":"Polygon","arcs":[[201,202,203,204,205]],"properties":{"codarea":"2903300","name":"Barro Preto"}},{"type":"Polygon","arcs":[[206,-124,207,208]],"properties":{"codarea":"2903276","name":"Barrocas"}},{"type":"Polygon","arcs":[[209,210,211,212,213,214]],"properties":{"codarea":"2903409","name":"Belmonte"}},{"type":"Polygon","arcs":[[215,216,-64,217,218]],"properties":{"codarea":"2903508","name":"Belo Campo"}},{"type":"Polygon","arcs":[[219,-126,220,221,222,-20]],"properties":{"codarea":"2903607","name":"Biritinga"}},{"type":"Polygon","arcs":[[223,224,225,226,227,228,229]],"properties":{"codarea":"2903706","name":"Boa Nova"}},{"type":"Polygon","arcs":[[230,231,232,233,234,235,236,237]],"properties":{"codarea":"2903805","name":"Boa Vista do Tupim"}},{"type":"Polygon","arcs":[[238,239,240,241,242,243,244]],"properties":{"codarea":"2903904","name":"Bom Jesus da Lapa"}},{"type":"Polygon","arcs":[[245,-230,246,247,-61]],"properties":{"codarea":"2903953","name":"Bom Jesus da Serra"}},{"type":"Polygon","arcs":[[248,249,250,251,252,253]],"properties":{"codarea":"2904001","name":"Boninal"}},{"type":"Polygon","arcs":[[254,255,256,257,258,259]],"properties":{"codarea":"2904050","name":"Bonito"}},{"type":"Polygon","arcs":[[260,261,262,263,264]],"properties":{"codarea":"2904100","name":"Boquira"}},{"type":"Polygon","arcs":[[265,266,267,268]],"properties":{"codarea":"2904209","name":"Botuporã"}},{"type":"Polygon","arcs":[[269,270,-51,271,272]],"properties":{"codarea":"2904308","name":"Brejões"}},{"type":"Polygon","arcs":[[273,274,275,276,277]],"properties":{"codarea":"2904407","name":"Brejolândia"}},{"type":"Polygon","arcs":[[278,279,280,-182,281,282]],"properties":{"codarea":"2904506","name":"Brotas de Macaúbas"}},{"type":"Polygon","arcs":[[283,-117,284,285,286,287,288,289,290,291]],"properties":{"codarea":"2904605","name":"Brumado"}},{"type":"Polygon","arcs":[[292,293,294,295]],"properties":{"codarea":"2904704","name":"Buerarema"}},{"type":"Polygon","arcs":[[-166,296,297,298]],"properties":{"codarea":"2904753","name":"Buritirama"}},{"type":"Polygon","arcs":[[299,300,301,302,-178]],"properties":{"codarea":"2904803","name":"Caatiba"}},{"type":"Polygon","arcs":[[303,304,-91,305,306,307,308,309]],"properties":{"codarea":"2904852","name":"Cabaceiras do Paraguaçu"}},{"type":"Polygon","arcs":[[310,311,312,313,314,315]],"properties":{"codarea":"2904902","name":"Cachoeira"}},{"type":"Polygon","arcs":[[316,317,318,319,320,321]],"properties":{"codarea":"2905008","name":"Caculé"}},{"type":"Polygon","arcs":[[322,323,324,325]],"properties":{"codarea":"2905107","name":"Caém"}},{"type":"Polygon","arcs":[[-62,-248,326,327,-115]],"properties":{"codarea":"2905156","name":"Caetanos"}},{"type":"Polygon","arcs":[[328,329,330,331,332,333,334,-319,335,336]],"properties":{"codarea":"2905206","name":"Caetité"}},{"type":"Polygon","arcs":[[337,-257,338,-60,339]],"properties":{"codarea":"2905305","name":"Cafarnaum"}},{"type":"Polygon","arcs":[[340,341,342,343]],"properties":{"codarea":"2905404","name":"Cairu"}},{"type":"Polygon","arcs":[[-323,344,345]],"properties":{"codarea":"2905503","name":"Caldeirão Grande"}},{"type":"Polygon","arcs":[[-135,346,347,348,349,350,351]],"properties":{"codarea":"2905602","name":"Camacan"}},{"type":"Polygon","arcs":[[352,353,354,355,356]],"properties":{"codarea":"2905701","name":"Camaçari"}},{"type":"Polygon","arcs":[[357,358,359,360]],"properties":{"codarea":"2905800","name":"Camamu"}},{"type":"Polygon","arcs":[[361,362,363]],"properties":{"codarea":"2905909","name":"Campo Alegre de Lourdes"}},{"type":"Polygon","arcs":[[-97,364,365,366,367,368,369,370]],"properties":{"codarea":"2906006","name":"Campo Formoso"}},{"type":"Polygon","arcs":[[371,372,-148]],"properties":{"codarea":"2906105","name":"Canápolis"}},{"type":"Polygon","arcs":[[-199,373,-340,-59,374,375]],"properties":{"codarea":"2906204","name":"Canarana"}},{"type":"Polygon","arcs":[[376,377,378,379,-210]],"properties":{"codarea":"2906303","name":"Canavieiras"}},{"type":"Polygon","arcs":[[380,381,382,383,384]],"properties":{"codarea":"2906402","name":"Candeal"}},{"type":"Polygon","arcs":[[385,386,387,388,389]],"properties":{"codarea":"2906501","name":"Candeias"}},{"type":"Polygon","arcs":[[390,391,392]],"properties":{"codarea":"2906600","name":"Candiba"}},{"type":"Polygon","arcs":[[393,394,-216,395,396]],"properties":{"codarea":"2906709","name":"Cândido Sales"}},{"type":"Polygon","arcs":[[397,398,-121,399,400,401,402]],"properties":{"codarea":"2906808","name":"Cansanção"}},{"type":"Polygon","arcs":[[403,404,405,406,407,408,409]],"properties":{"codarea":"2906824","name":"Canudos"}},{"type":"Polygon","arcs":[[410,411,412,413,414,415,416]],"properties":{"codarea":"2906857","name":"Capela do Alto Alegre"}},{"type":"Polygon","arcs":[[417,418,419,420,-326,421,422]],"properties":{"codarea":"2906873","name":"Capim Grosso"}},{"type":"Polygon","arcs":[[-218,-63,-114,423,424]],"properties":{"codarea":"2906899","name":"Caraíbas"}},{"type":"Polygon","arcs":[[425,426,-37,427,428,429,430]],"properties":{"codarea":"2906907","name":"Caravelas"}},{"type":"Polygon","arcs":[[431,432]],"properties":{"codarea":"2907004","name":"Cardeal da Silva"}},{"type":"Polygon","arcs":[[433,434,435,436,437,438]],"properties":{"codarea":"2907103","name":"Carinhanha"}},{"type":"Polygon","arcs":[[439,440,441,442]],"properties":{"codarea":"2907202","name":"Casa Nova"}},{"type":"Polygon","arcs":[[443,444,445,-307,446,447]],"properties":{"codarea":"2907301","name":"Castro Alves"}},{"type":"Polygon","arcs":[[-153,448,-82,-196,449]],"properties":{"codarea":"2907400","name":"Catolândia"}},{"type":"Polygon","arcs":[[-33,450,451,452,453,-111]],"properties":{"codarea":"2907509","name":"Catu"}},{"type":"Polygon","arcs":[[454,455,-266,456,457]],"properties":{"codarea":"2907558","name":"Caturama"}},{"type":"Polygon","arcs":[[458,459,460,461,462]],"properties":{"codarea":"2907608","name":"Central"}},{"type":"Polygon","arcs":[[-8,463,464,-406,465,466,467]],"properties":{"codarea":"2907707","name":"Chorrochó"}},{"type":"Polygon","arcs":[[468,469,470,-86,471,472,-160]],"properties":{"codarea":"2907806","name":"Cícero Dantas"}},{"type":"Polygon","arcs":[[473,474,475,476,477]],"properties":{"codarea":"2907905","name":"Cipó"}},{"type":"Polygon","arcs":[[478,479,480,481,-42,482,-206]],"properties":{"codarea":"2908002","name":"Coaraci"}},{"type":"Polygon","arcs":[[483,484,485,486]],"properties":{"codarea":"2908101","name":"Cocos"}},{"type":"Polygon","arcs":[[487,-92,-305,488,-315,489]],"properties":{"codarea":"2908200","name":"Conceição da Feira"}},{"type":"Polygon","arcs":[[490,-445,491,492,493,494]],"properties":{"codarea":"2908309","name":"Conceição do Almeida"}},{"type":"Polygon","arcs":[[-208,-123,495,496,497,498,499,500]],"properties":{"codarea":"2908408","name":"Conceição do Coité"}},{"type":"Polygon","arcs":[[-55,501,502,503,504,505]],"properties":{"codarea":"2908507","name":"Conceição do Jacuípe"}},{"type":"Polygon","arcs":[[506,507,508,509]],"properties":{"codarea":"2908606","name":"Conde"}},{"type":"Polygon","arcs":[[510,511,512,513,514,515,516]],"properties":{"codarea":"2908705","name":"Condeúba"}},{"type":"Polygon","arcs":[[517,518,519,-173,520]],"properties":{"codarea":"2908804","name":"Contendas do Sincorá"}},{"type":"Polygon","arcs":[[521,522,523,-504,524,525]],"properties":{"codarea":"2908903","name":"Coração de Maria"}},{"type":"Polygon","arcs":[[526,527,-511]],"properties":{"codarea":"2909000","name":"Cordeiros"}},{"type":"Polygon","arcs":[[-485,528,-437,529,530]],"properties":{"codarea":"2909109","name":"Coribe"}},{"type":"Polygon","arcs":[[531,-14,532,533,534,535]],"properties":{"codarea":"2909208","name":"Coronel João Sá"}},{"type":"Polygon","arcs":[[536,537,538,539]],"properties":{"codarea":"2909307","name":"Correntina"}},{"type":"Polygon","arcs":[[540,541,542,543,-79,544]],"properties":{"codarea":"2909406","name":"Cotegipe"}},{"type":"Polygon","arcs":[[545,546,547,548]],"properties":{"codarea":"2909505","name":"Cravolândia"}},{"type":"Polygon","arcs":[[549,550,551,-101,-11,552]],"properties":{"codarea":"2909604","name":"Crisópolis"}},{"type":"Polygon","arcs":[[-83,-449,-152,553,554,-545]],"properties":{"codarea":"2909703","name":"Cristópolis"}},{"type":"Polygon","arcs":[[555,-309,556,557,558]],"properties":{"codarea":"2909802","name":"Cruz das Almas"}},{"type":"Polygon","arcs":[[559,560,561,-464,-7,562]],"properties":{"codarea":"2909901","name":"Curaçá"}},{"type":"Polygon","arcs":[[563,564,-226,565,566]],"properties":{"codarea":"2910008","name":"Dário Meira"}},{"type":"Polygon","arcs":[[-356,567,568,-389,569]],"properties":{"codarea":"2910057","name":"Dias d'Ávila"}},{"type":"Polygon","arcs":[[-288,570,571]],"properties":{"codarea":"2910107","name":"Dom Basílio"}},{"type":"Polygon","arcs":[[572,573,-494]],"properties":{"codarea":"2910206","name":"Dom Macedo Costa"}},{"type":"Polygon","arcs":[[-48,574,575,576]],"properties":{"codarea":"2910305","name":"Elísio Medrado"}},{"type":"Polygon","arcs":[[577,578,-394,579,580]],"properties":{"codarea":"2910404","name":"Encruzilhada"}},{"type":"Polygon","arcs":[[581,582,583,584,-433,585,-103,586,-35,-110]],"properties":{"codarea":"2910503","name":"Entre Rios"}},{"type":"Polygon","arcs":[[587,588,589,590,-458]],"properties":{"codarea":"2900504","name":"Érico Cardoso"}},{"type":"Polygon","arcs":[[-432,-585,591,-509,592,-9,-104,-586]],"properties":{"codarea":"2910602","name":"Esplanada"}},{"type":"Polygon","arcs":[[-161,-473,593,-409,594,595]],"properties":{"codarea":"2910701","name":"Euclides da Cunha"}},{"type":"Polygon","arcs":[[596,597,598,599,600,-213,601]],"properties":{"codarea":"2910727","name":"Eunápolis"}},{"type":"Polygon","arcs":[[602,-16,-87,-471,603]],"properties":{"codarea":"2910750","name":"Fátima"}},{"type":"Polygon","arcs":[[-438,-529,-484,604]],"properties":{"codarea":"2910776","name":"Feira da Mata"}},{"type":"Polygon","arcs":[[-524,605,606,607,-385,608,-84,609,610,-94,611,612,-505]],"properties":{"codarea":"2910800","name":"Feira de Santana"}},{"type":"Polygon","arcs":[[613,614,615,-100,616]],"properties":{"codarea":"2910859","name":"Filadélfia"}},{"type":"Polygon","arcs":[[617,618,619,620]],"properties":{"codarea":"2910909","name":"Firmino Alves"}},{"type":"Polygon","arcs":[[621,622,623,624,625,-44]],"properties":{"codarea":"2911006","name":"Floresta Azul"}},{"type":"Polygon","arcs":[[626,627,628]],"properties":{"codarea":"2911105","name":"Formosa do Rio Preto"}},{"type":"Polygon","arcs":[[629,630,631,632,633]],"properties":{"codarea":"2911204","name":"Gandu"}},{"type":"Polygon","arcs":[[634,-414,635,636,637]],"properties":{"codarea":"2911253","name":"Gavião"}},{"type":"Polygon","arcs":[[638,639,640,641,642]],"properties":{"codarea":"2911303","name":"Gentio do Ouro"}},{"type":"Polygon","arcs":[[643,644,645]],"properties":{"codarea":"2911402","name":"Glória"}},{"type":"Polygon","arcs":[[-145,646,647,-190,648]],"properties":{"codarea":"2911501","name":"Gongogi"}},{"type":"Polygon","arcs":[[649,650,-316,-489,-304]],"properties":{"codarea":"2911600","name":"Governador Mangabeira"}},{"type":"Polygon","arcs":[[-514,651,652,653,-322,654]],"properties":{"codarea":"2911659","name":"Guajeru"}},{"type":"Polygon","arcs":[[-334,655,656,657,-393,658]],"properties":{"codarea":"2911709","name":"Guanambi"}},{"type":"Polygon","arcs":[[659,660,661,-598,662,663]],"properties":{"codarea":"2911808","name":"Guaratinga"}},{"type":"Polygon","arcs":[[664,-604,-470,665,666]],"properties":{"codarea":"2911857","name":"Heliópolis"}},{"type":"Polygon","arcs":[[667,-238,668,669,670,671,672,673,674]],"properties":{"codarea":"2911907","name":"Iaçu"}},{"type":"Polygon","arcs":[[675,-336,-318,676]],"properties":{"codarea":"2912004","name":"Ibiassucê"}},{"type":"Polygon","arcs":[[-202,-483,-41,-626,677]],"properties":{"codarea":"2912103","name":"Ibicaraí"}},{"type":"Polygon","arcs":[[-176,678,679,680,681]],"properties":{"codarea":"2912202","name":"Ibicoara"}},{"type":"Polygon","arcs":[[-620,682,-622,-43,-482,683,684,-567,685,686,687]],"properties":{"codarea":"2912301","name":"Ibicuí"}},{"type":"Polygon","arcs":[[-186,-201,688,689,690,-639]],"properties":{"codarea":"2912400","name":"Ibipeba"}},{"type":"Polygon","arcs":[[691,692,693,694,-262]],"properties":{"codarea":"2912509","name":"Ibipitanga"}},{"type":"Polygon","arcs":[[-234,695,-71,696]],"properties":{"codarea":"2912608","name":"Ibiquera"}},{"type":"Polygon","arcs":[[697,-361,698,699,-631,700,701,702,703]],"properties":{"codarea":"2912707","name":"Ibirapitanga"}},{"type":"Polygon","arcs":[[704,705,-431,706,707]],"properties":{"codarea":"2912806","name":"Ibirapuã"}},{"type":"Polygon","arcs":[[708,-107,709,-188,710,-702]],"properties":{"codarea":"2912905","name":"Ibirataia"}},{"type":"Polygon","arcs":[[711,-280,712,-263,-695,713,-253]],"properties":{"codarea":"2913002","name":"Ibitiara"}},{"type":"Polygon","arcs":[[-689,-200,-376,714,715,716]],"properties":{"codarea":"2913101","name":"Ibititá"}},{"type":"Polygon","arcs":[[717,-170,718,719,720]],"properties":{"codarea":"2913200","name":"Ibotirama"}},{"type":"Polygon","arcs":[[721,-500,722,-383]],"properties":{"codarea":"2913309","name":"Ichu"}},{"type":"Polygon","arcs":[[-333,723,724,725,-656]],"properties":{"codarea":"2913408","name":"Igaporã"}},{"type":"Polygon","arcs":[[726,727,-699,-360,728]],"properties":{"codarea":"2913457","name":"Igrapiúna"}},{"type":"Polygon","arcs":[[729,-686,-566,-225,730]],"properties":{"codarea":"2913507","name":"Iguaí"}},{"type":"Polygon","arcs":[[731,732,733,-141,734,-480,735,736,-293]],"properties":{"codarea":"2913606","name":"Ilhéus"}},{"type":"Polygon","arcs":[[-36,-587,-102,-552,737,738,-18,-128]],"properties":{"codarea":"2913705","name":"Inhambupe"}},{"type":"Polygon","arcs":[[-95,-611,739,740,741,742]],"properties":{"codarea":"2913804","name":"Ipecaetá"}},{"type":"Polygon","arcs":[[743,-189,-710,-106,744,745,-26]],"properties":{"codarea":"2913903","name":"Ipiaú"}},{"type":"Polygon","arcs":[[-741,746,747,748,-156,749,750,751,-675,752]],"properties":{"codarea":"2914000","name":"Ipirá"}},{"type":"Polygon","arcs":[[-282,-187,-643]],"properties":{"codarea":"2914109","name":"Ipupiara"}},{"type":"Polygon","arcs":[[753,754,755,756,757]],"properties":{"codarea":"2914208","name":"Irajuba"}},{"type":"Polygon","arcs":[[-175,758,759,760,761,-679]],"properties":{"codarea":"2914307","name":"Iramaia"}},{"type":"Polygon","arcs":[[762,763,764,765,766]],"properties":{"codarea":"2914406","name":"Iraquara"}},{"type":"Polygon","arcs":[[-522,767,768,-23,769]],"properties":{"codarea":"2914505","name":"Irará"}},{"type":"Polygon","arcs":[[770,771,772,773]],"properties":{"codarea":"2914604","name":"Irecê"}},{"type":"Polygon","arcs":[[774,775,-599,-662]],"properties":{"codarea":"2914653","name":"Itabela"}},{"type":"Polygon","arcs":[[-752,776,-231,-668]],"properties":{"codarea":"2914703","name":"Itaberaba"}},{"type":"Polygon","arcs":[[-737,777,-204,778,779,780,-294]],"properties":{"codarea":"2914802","name":"Itabuna"}},{"type":"Polygon","arcs":[[781,782,783,-143,784]],"properties":{"codarea":"2914901","name":"Itacaré"}},{"type":"Polygon","arcs":[[-236,785,-69,786,-680,-762,787]],"properties":{"codarea":"2915007","name":"Itaeté"}},{"type":"Polygon","arcs":[[788,-565,789,-29]],"properties":{"codarea":"2915106","name":"Itagi"}},{"type":"Polygon","arcs":[[-649,-744,-30,-790,-564,-685]],"properties":{"codarea":"2915205","name":"Itagibá"}},{"type":"Polygon","arcs":[[-597,790,791,792,-663]],"properties":{"codarea":"2915304","name":"Itagimirim"}},{"type":"Polygon","arcs":[[-460,793,794,795,-640,-691]],"properties":{"codarea":"2915353","name":"Itaguaçu da Bahia"}},{"type":"Polygon","arcs":[[796,797,-348,798,799,-624,800,-618,801]],"properties":{"codarea":"2915403","name":"Itaju do Colônia"}},{"type":"Polygon","arcs":[[-736,-479,-205,-778]],"properties":{"codarea":"2915502","name":"Itajuípe"}},{"type":"Polygon","arcs":[[802,803,-775,-661,804,805]],"properties":{"codarea":"2915601","name":"Itamaraju"}},{"type":"Polygon","arcs":[[-108,806,807,808]],"properties":{"codarea":"2915700","name":"Itamari"}},{"type":"Polygon","arcs":[[809,810,811,812,-300,-181,813]],"properties":{"codarea":"2915809","name":"Itambé"}},{"type":"Polygon","arcs":[[814,-582,-113,815]],"properties":{"codarea":"2915908","name":"Itanagra"}},{"type":"Polygon","arcs":[[816,817,818]],"properties":{"codarea":"2916005","name":"Itanhém"}},{"type":"Polygon","arcs":[[819,820,821]],"properties":{"codarea":"2916104","name":"Itaparica"}},{"type":"Polygon","arcs":[[-779,-203,-678,-625,-800,822]],"properties":{"codarea":"2916203","name":"Itapé"}},{"type":"Polygon","arcs":[[-791,-602,-212,823,824,825]],"properties":{"codarea":"2916302","name":"Itapebi"}},{"type":"Polygon","arcs":[[826,827,828,829,-797,830,-812]],"properties":{"codarea":"2916401","name":"Itapetinga"}},{"type":"Polygon","arcs":[[-550,831,832,833,-475,834,835]],"properties":{"codarea":"2916500","name":"Itapicuru"}},{"type":"Polygon","arcs":[[-146,-684,-481,-735]],"properties":{"codarea":"2916609","name":"Itapitanga"}},{"type":"Polygon","arcs":[[836,837,-546,838,-755]],"properties":{"codarea":"2916708","name":"Itaquara"}},{"type":"Polygon","arcs":[[-792,-826,839,-828,840,841,842]],"properties":{"codarea":"2916807","name":"Itarantim"}},{"type":"Polygon","arcs":[[843,844,845,-673]],"properties":{"codarea":"2916856","name":"Itatim"}},{"type":"Polygon","arcs":[[846,847,848]],"properties":{"codarea":"2916906","name":"Itiruçu"}},{"type":"Polygon","arcs":[[849,-402,850,-78,851,-615,852]],"properties":{"codarea":"2917003","name":"Itiúba"}},{"type":"Polygon","arcs":[[-831,-802,-621,-688,853,-301,-813]],"properties":{"codarea":"2917102","name":"Itororó"}},{"type":"Polygon","arcs":[[-521,-172,854,855,-286,856]],"properties":{"codarea":"2917201","name":"Ituaçu"}},{"type":"Polygon","arcs":[[-727,857,858,859]],"properties":{"codarea":"2917300","name":"Ituberá"}},{"type":"Polygon","arcs":[[860,861,862,863]],"properties":{"codarea":"2917334","name":"Iuiú"}},{"type":"Polygon","arcs":[[-540,864,-486,-531,865,866]],"properties":{"codarea":"2917359","name":"Jaborandi"}},{"type":"Polygon","arcs":[[867,-515,-655,-321,868,869,870]],"properties":{"codarea":"2917409","name":"Jacaraci"}},{"type":"Polygon","arcs":[[871,872,873,-422,-325,874,875,876]],"properties":{"codarea":"2917508","name":"Jacobina"}},{"type":"Polygon","arcs":[[877,-109,-809,878,-837,-754,-848]],"properties":{"codarea":"2917607","name":"Jaguaquara"}},{"type":"Polygon","arcs":[[-76,879,-561,880,-366,881]],"properties":{"codarea":"2917706","name":"Jaguarari"}},{"type":"Polygon","arcs":[[882,-140,883,884,885,886,887,888]],"properties":{"codarea":"2917805","name":"Jaguaripe"}},{"type":"Polygon","arcs":[[-507,889,890]],"properties":{"codarea":"2917904","name":"Jandaíra"}},{"type":"Polygon","arcs":[[891,-745,-105,-878,892,893,894,-227,-789,-28]],"properties":{"codarea":"2918001","name":"Jequié"}},{"type":"Polygon","arcs":[[895,896,897,-404,898,899,-536,900]],"properties":{"codarea":"2918100","name":"Jeremoabo"}},{"type":"Polygon","arcs":[[901,902,903,904]],"properties":{"codarea":"2918209","name":"Jiquiriçá"}},{"type":"Polygon","arcs":[[-27,-746,-892]],"properties":{"codarea":"2918308","name":"Jitaúna"}},{"type":"Polygon","arcs":[[-57,905,906,-772,907]],"properties":{"codarea":"2918357","name":"João Dourado"}},{"type":"Polygon","arcs":[[-367,-881,-560,908,909]],"properties":{"codarea":"2918407","name":"Juazeiro"}},{"type":"Polygon","arcs":[[-805,-660,910,911]],"properties":{"codarea":"2918456","name":"Jucuruçu"}},{"type":"Polygon","arcs":[[-459,912,913,-794]],"properties":{"codarea":"2918506","name":"Jussara"}},{"type":"Polygon","arcs":[[-823,-799,-347,-134,914,-780]],"properties":{"codarea":"2918555","name":"Jussari"}},{"type":"Polygon","arcs":[[915,-855,-177,-682,916,-2]],"properties":{"codarea":"2918605","name":"Jussiape"}},{"type":"Polygon","arcs":[[-847,917,918,-893]],"properties":{"codarea":"2918704","name":"Lafaiete Coutinho"}},{"type":"Polygon","arcs":[[919,-337,-676,920,-290]],"properties":{"codarea":"2918753","name":"Lagoa Real"}},{"type":"Polygon","arcs":[[921,-884,-139,922,923,-46,924,-905,925]],"properties":{"codarea":"2918803","name":"Laje"}},{"type":"Polygon","arcs":[[926,-707,-430,927]],"properties":{"codarea":"2918902","name":"Lajedão"}},{"type":"Polygon","arcs":[[928,929,930,-72,-696,-233]],"properties":{"codarea":"2919009","name":"Lajedinho"}},{"type":"Polygon","arcs":[[-849,931,932,-918]],"properties":{"codarea":"2919058","name":"Lajedo do Tabocal"}},{"type":"Polygon","arcs":[[933,934,-21,-223,935]],"properties":{"codarea":"2919108","name":"Lamarão"}},{"type":"Polygon","arcs":[[-715,-375,-58,-908,-771]],"properties":{"codarea":"2919157","name":"Lapão"}},{"type":"Polygon","arcs":[[936,937,-353,938]],"properties":{"codarea":"2919207","name":"Lauro de Freitas"}},{"type":"Polygon","arcs":[[939,-259,-765,940,941,-73,-931]],"properties":{"codarea":"2919306","name":"Lençóis"}},{"type":"Polygon","arcs":[[-320,942,943,-869]],"properties":{"codarea":"2919405","name":"Licínio de Almeida"}},{"type":"Polygon","arcs":[[-572,944,-589,945,-329,-920,-289]],"properties":{"codarea":"2919504","name":"Livramento de Nossa Senhora"}},{"type":"Polygon","arcs":[[-194,946,947]],"properties":{"codarea":"2919553","name":"Luís Eduardo Magalhães"}},{"type":"Polygon","arcs":[[948,-750,-155,949]],"properties":{"codarea":"2919603","name":"Macajuba"}},{"type":"Polygon","arcs":[[950,-841,-827,-811,951,-581,952]],"properties":{"codarea":"2919702","name":"Macarani"}},{"type":"Polygon","arcs":[[-267,-456,953,-692,-261,954,-240,955,956]],"properties":{"codarea":"2919801","name":"Macaúbas"}},{"type":"Polygon","arcs":[[-405,957,-466]],"properties":{"codarea":"2919900","name":"Macururé"}},{"type":"Polygon","arcs":[[958,959,960]],"properties":{"codarea":"2919926","name":"Madre de Deus"}},{"type":"Polygon","arcs":[[961,-424,-118,962]],"properties":{"codarea":"2919959","name":"Maetinga"}},{"type":"Polygon","arcs":[[-842,-951,963]],"properties":{"codarea":"2920007","name":"Maiquinique"}},{"type":"Polygon","arcs":[[-158,964,-417,965,966,967]],"properties":{"codarea":"2920106","name":"Mairi"}},{"type":"Polygon","arcs":[[-434,968,-864,969,970,-245,971]],"properties":{"codarea":"2920205","name":"Malhada"}},{"type":"Polygon","arcs":[[-653,972,-292,973]],"properties":{"codarea":"2920304","name":"Malhada de Pedras"}},{"type":"Polygon","arcs":[[-228,-895,974,-759,-174,-520,975]],"properties":{"codarea":"2920403","name":"Manoel Vitorino"}},{"type":"Polygon","arcs":[[-542,976,-167,-299,977,978]],"properties":{"codarea":"2920452","name":"Mansidão"}},{"type":"Polygon","arcs":[[979,980,-760,-975,-894,-919,-933]],"properties":{"codarea":"2920502","name":"Maracás"}},{"type":"Polygon","arcs":[[981,-889,982,983,-312,984,985]],"properties":{"codarea":"2920601","name":"Maragogipe"}},{"type":"Polygon","arcs":[[986,-358,-698,987,-783]],"properties":{"codarea":"2920700","name":"Maraú"}},{"type":"Polygon","arcs":[[-669,-237,-788,-761,-981,988]],"properties":{"codarea":"2920809","name":"Marcionílio Souza"}},{"type":"Polygon","arcs":[[-211,-380,989,-351,990,-824]],"properties":{"codarea":"2920908","name":"Mascote"}},{"type":"Polygon","arcs":[[-815,991,992,-568,-355,993,-583]],"properties":{"codarea":"2921005","name":"Mata de São João"}},{"type":"Polygon","arcs":[[-725,994,995]],"properties":{"codarea":"2921054","name":"Matina"}},{"type":"Polygon","arcs":[[-819,996,-928,-429,997,998]],"properties":{"codarea":"2921104","name":"Medeiros Neto"}},{"type":"Polygon","arcs":[[999,1000,1001,-872,1002,1003]],"properties":{"codarea":"2921203","name":"Miguel Calmon"}},{"type":"Polygon","arcs":[[1004,-272,-50,1005,-844,-672]],"properties":{"codarea":"2921302","name":"Milagres"}},{"type":"Polygon","arcs":[[-875,1006,1007,-98,-371,1008,1009]],"properties":{"codarea":"2921401","name":"Mirangaba"}},{"type":"Polygon","arcs":[[-247,-229,-976,-519,1010,-327]],"properties":{"codarea":"2921450","name":"Mirante"}},{"type":"Polygon","arcs":[[-401,1011,-595,-408,1012,-74,-851]],"properties":{"codarea":"2921500","name":"Monte Santo"}},{"type":"Polygon","arcs":[[-718,1013,-283,-642,1014,-171]],"properties":{"codarea":"2921609","name":"Morpará"}},{"type":"Polygon","arcs":[[-256,1015,1016,1017,-1004,1018,1019,1020,1021,1022,-906,-56,-339]],"properties":{"codarea":"2921708","name":"Morro do Chapéu"}},{"type":"Polygon","arcs":[[1023,-516,-868]],"properties":{"codarea":"2921807","name":"Mortugaba"}},{"type":"Polygon","arcs":[[1024,-250,1025,-3,-917,-681,-787,-68,-942]],"properties":{"codarea":"2921906","name":"Mucugê"}},{"type":"Polygon","arcs":[[1026,-705,1027]],"properties":{"codarea":"2922003","name":"Mucuri"}},{"type":"Polygon","arcs":[[1028,-766,-258,-338,-374,-198]],"properties":{"codarea":"2922052","name":"Mulungu do Morro"}},{"type":"Polygon","arcs":[[1029,1030,1031,1032,-950,-159,-968]],"properties":{"codarea":"2922102","name":"Mundo Novo"}},{"type":"Polygon","arcs":[[1033,1034,1035,-137]],"properties":{"codarea":"2922201","name":"Muniz Ferreira"}},{"type":"Polygon","arcs":[[-275,1036,1037,-719,-169,1038]],"properties":{"codarea":"2922250","name":"Muquém de São Francisco"}},{"type":"Polygon","arcs":[[-650,-310,-556,1039]],"properties":{"codarea":"2922300","name":"Muritiba"}},{"type":"Polygon","arcs":[[1040,-926,-904,1041,1042]],"properties":{"codarea":"2922409","name":"Mutuípe"}},{"type":"Polygon","arcs":[[-136,-883,-982,1043,-1034]],"properties":{"codarea":"2922508","name":"Nazaré"}},{"type":"Polygon","arcs":[[1044,1045,1046,-633,1047,-859,1048,-344]],"properties":{"codarea":"2922607","name":"Nilo Peçanha"}},{"type":"Polygon","arcs":[[1049,1050,-398]],"properties":{"codarea":"2922656","name":"Nordestina"}},{"type":"Polygon","arcs":[[-302,-854,-687,-730,1051,1052]],"properties":{"codarea":"2922706","name":"Nova Canaã"}},{"type":"Polygon","arcs":[[1053,1054,-636,-413,1055]],"properties":{"codarea":"2922730","name":"Nova Fátima"}},{"type":"Polygon","arcs":[[-709,-701,-630,1056,-807]],"properties":{"codarea":"2922755","name":"Nova Ibiá"}},{"type":"Polygon","arcs":[[-757,1057,-273,-1005,-671,1058]],"properties":{"codarea":"2922805","name":"Nova Itarana"}},{"type":"Polygon","arcs":[[-697,-70,-786,-235]],"properties":{"codarea":"2922854","name":"Nova Redenção"}},{"type":"Polygon","arcs":[[-474,1059,1060,1061,-835]],"properties":{"codarea":"2922904","name":"Nova Soure"}},{"type":"Polygon","arcs":[[-1027,1062,-426,-706]],"properties":{"codarea":"2923001","name":"Nova Viçosa"}},{"type":"Polygon","arcs":[[1063,1064,-254,-714,-694]],"properties":{"codarea":"2923035","name":"Novo Horizonte"}},{"type":"Polygon","arcs":[[-89,1065,-899,-410,-594,-472]],"properties":{"codarea":"2923050","name":"Novo Triunfo"}},{"type":"Polygon","arcs":[[-836,-1062,1066,-738,-551]],"properties":{"codarea":"2923100","name":"Olindina"}},{"type":"Polygon","arcs":[[-264,-713,-279,-1014,-721,1067]],"properties":{"codarea":"2923209","name":"Oliveira dos Brejinhos"}},{"type":"Polygon","arcs":[[1068,-129,-24,-769]],"properties":{"codarea":"2923308","name":"Ouriçangas"}},{"type":"Polygon","arcs":[[1069,-876,-1010,1070,-1020]],"properties":{"codarea":"2923357","name":"Ourolândia"}},{"type":"Polygon","arcs":[[-996,1071,-970,-863,1072,-657,-726]],"properties":{"codarea":"2923407","name":"Palmas de Monte Alto"}},{"type":"Polygon","arcs":[[-1025,-941,-764,1073,-251]],"properties":{"codarea":"2923506","name":"Palmeiras"}},{"type":"Polygon","arcs":[[-330,-946,-588,-457,-269,1074]],"properties":{"codarea":"2923605","name":"Paramirim"}},{"type":"Polygon","arcs":[[-241,-955,-265,-1068,-720,-1038]],"properties":{"codarea":"2923704","name":"Paratinga"}},{"type":"Polygon","arcs":[[-13,1075,-533]],"properties":{"codarea":"2923803","name":"Paripiranga"}},{"type":"Polygon","arcs":[[-349,-798,-830,1076]],"properties":{"codarea":"2923902","name":"Pau Brasil"}},{"type":"Polygon","arcs":[[-645,1077,-897,1078,1079]],"properties":{"codarea":"2924009","name":"Paulo Afonso"}},{"type":"Polygon","arcs":[[-748,1080,1081,-1056,-412,1082]],"properties":{"codarea":"2924058","name":"Pé de Serra"}},{"type":"Polygon","arcs":[[1083,-130,-1069,-768,-526]],"properties":{"codarea":"2924108","name":"Pedrão"}},{"type":"Polygon","arcs":[[-535,1084,1085,-901]],"properties":{"codarea":"2924207","name":"Pedro Alexandre"}},{"type":"Polygon","arcs":[[-249,-1065,1086,-4,-1026]],"properties":{"codarea":"2924306","name":"Piatã"}},{"type":"Polygon","arcs":[[-165,1087,1088,1089,-362,1090,-297]],"properties":{"codarea":"2924405","name":"Pilão Arcado"}},{"type":"Polygon","arcs":[[-943,-335,-659,-392,1091,1092]],"properties":{"codarea":"2924504","name":"Pindaí"}},{"type":"Polygon","arcs":[[1093,1094,-617,-99,-1008]],"properties":{"codarea":"2924603","name":"Pindobaçu"}},{"type":"Polygon","arcs":[[-749,-1083,-411,-965,-157]],"properties":{"codarea":"2924652","name":"Pintadas"}},{"type":"Polygon","arcs":[[-1048,-632,-700,-728,-860]],"properties":{"codarea":"2924678","name":"Piraí do Norte"}},{"type":"Polygon","arcs":[[1095,1096,-512,-528,1097]],"properties":{"codarea":"2924702","name":"Piripá"}},{"type":"Polygon","arcs":[[-1000,-1018,1098,-1030]],"properties":{"codarea":"2924801","name":"Piritiba"}},{"type":"Polygon","arcs":[[-670,-989,-980,-932,-758,-1059]],"properties":{"codarea":"2924900","name":"Planaltino"}},{"type":"Polygon","arcs":[[-179,-303,-1053,1099,-66,1100]],"properties":{"codarea":"2925006","name":"Planalto"}},{"type":"Polygon","arcs":[[-1100,-1052,-731,-224,-246,-67]],"properties":{"codarea":"2925105","name":"Poções"}},{"type":"Polygon","arcs":[[-992,-816,-112,-454,1101]],"properties":{"codarea":"2925204","name":"Pojuca"}},{"type":"Polygon","arcs":[[-345,-421,1102,-853,-614,-1095,1103]],"properties":{"codarea":"2925253","name":"Ponto Novo"}},{"type":"Polygon","arcs":[[1104,1105,-600,-776,-804,1106]],"properties":{"codarea":"2925303","name":"Porto Seguro"}},{"type":"Polygon","arcs":[[-840,-825,-991,-350,-1077,-829]],"properties":{"codarea":"2925402","name":"Potiraguá"}},{"type":"Polygon","arcs":[[-39,1107,-1107,-803,1108,1109]],"properties":{"codarea":"2925501","name":"Prado"}},{"type":"Polygon","arcs":[[1110,-716,-774,-462]],"properties":{"codarea":"2925600","name":"Presidente Dutra"}},{"type":"Polygon","arcs":[[-1097,1111,-963,-284,-973,-652,-513]],"properties":{"codarea":"2925709","name":"Presidente Jânio Quadros"}},{"type":"Polygon","arcs":[[1112,1113,1114,-1043]],"properties":{"codarea":"2925758","name":"Presidente Tancredo Neves"}},{"type":"Polygon","arcs":[[-403,-850,-1103,-420,1115,-1050]],"properties":{"codarea":"2925808","name":"Queimadas"}},{"type":"Polygon","arcs":[[1116,1117,-162,-596,-1012,-400,-120]],"properties":{"codarea":"2925907","name":"Quijingue"}},{"type":"Polygon","arcs":[[1118,1119,-423,-874,1120]],"properties":{"codarea":"2925931","name":"Quixabeira"}},{"type":"Polygon","arcs":[[1121,-447,1122,-742,-753,-674,-846]],"properties":{"codarea":"2925956","name":"Rafael Jambeiro"}},{"type":"Polygon","arcs":[[-363,-1090,1123,-441,1124]],"properties":{"codarea":"2926004","name":"Remanso"}},{"type":"Polygon","arcs":[[-498,1125,1126,1127]],"properties":{"codarea":"2926103","name":"Retirolândia"}},{"type":"Polygon","arcs":[[-192,-80,-544,1128,-628,1129]],"properties":{"codarea":"2926202","name":"Riachão das Neves"}},{"type":"Polygon","arcs":[[-384,-723,-499,-1128,1130,-1054,-1082,1131]],"properties":{"codarea":"2926301","name":"Riachão do Jacuípe"}},{"type":"Polygon","arcs":[[-724,-332,1132,-956,-239,-971,-1072,-995]],"properties":{"codarea":"2926400","name":"Riacho de Santana"}},{"type":"Polygon","arcs":[[-834,1133,-667,1134,-476]],"properties":{"codarea":"2926509","name":"Ribeira do Amparo"}},{"type":"Polygon","arcs":[[-163,-1118,1135,-477,-1135,-666,-469]],"properties":{"codarea":"2926608","name":"Ribeira do Pombal"}},{"type":"Polygon","arcs":[[-578,-952,-810,1136]],"properties":{"codarea":"2926657","name":"Ribeirão do Largo"}},{"type":"Polygon","arcs":[[-571,-287,-856,-916,-1,-590,-945]],"properties":{"codarea":"2926707","name":"Rio de Contas"}},{"type":"Polygon","arcs":[[-921,-677,-317,-654,-974,-291]],"properties":{"codarea":"2926806","name":"Rio do Antônio"}},{"type":"Polygon","arcs":[[-591,-5,-1087,-1064,-693,-954,-455]],"properties":{"codarea":"2926905","name":"Rio do Pires"}},{"type":"Polygon","arcs":[[-10,-593,-508,-891,1137,-832,-553]],"properties":{"codarea":"2927002","name":"Rio Real"}},{"type":"Polygon","arcs":[[-898,-1078,-644,1138,-467,-958]],"properties":{"codarea":"2927101","name":"Rodelas"}},{"type":"Polygon","arcs":[[-1033,1139,1140,-929,-232,-777,-751,-949]],"properties":{"codarea":"2927200","name":"Ruy Barbosa"}},{"type":"Polygon","arcs":[[-888,1141,-822,1142,-983]],"properties":{"codarea":"2927309","name":"Salinas da Margarida"}},{"type":"Polygon","arcs":[[1143,-937,1144,-387,1145,-961,1146,-821,1147]],"properties":{"codarea":"2927408","name":"Salvador"}},{"type":"Polygon","arcs":[[1148,-934,1149,1150,-607]],"properties":{"codarea":"2927507","name":"Santa Bárbara"}},{"type":"Polygon","arcs":[[-896,-1086,1151,-1079]],"properties":{"codarea":"2927606","name":"Santa Brígida"}},{"type":"Polygon","arcs":[[1152,-214,-601,-1106]],"properties":{"codarea":"2927705","name":"Santa Cruz Cabrália"}},{"type":"Polygon","arcs":[[-623,-683,-619,-801]],"properties":{"codarea":"2927804","name":"Santa Cruz da Vitória"}},{"type":"Polygon","arcs":[[1153,-270,-1058,-756,-839,-549]],"properties":{"codarea":"2927903","name":"Santa Inês"}},{"type":"Polygon","arcs":[[-990,-379,1154,-131,-352]],"properties":{"codarea":"2928059","name":"Santa Luzia"}},{"type":"Polygon","arcs":[[1155,1156,-372,-147,1157,-537,-867]],"properties":{"codarea":"2928109","name":"Santa Maria da Vitória"}},{"type":"Polygon","arcs":[[-629,-1129,-543,-979,1158]],"properties":{"codarea":"2928406","name":"Santa Rita de Cássia"}},{"type":"Polygon","arcs":[[-1122,-845,-1006,-49,-577,-448]],"properties":{"codarea":"2928505","name":"Santa Teresinha"}},{"type":"Polygon","arcs":[[-122,-399,-1051,-1116,-419,1159,-638,1160,1161,-496]],"properties":{"codarea":"2928000","name":"Santaluz"}},{"type":"Polygon","arcs":[[1162,-243,1163,1164,-149,-373,-1157,1165]],"properties":{"codarea":"2928208","name":"Santana"}},{"type":"Polygon","arcs":[[-523,-770,-22,-935,-1149,-606]],"properties":{"codarea":"2928307","name":"Santanópolis"}},{"type":"Polygon","arcs":[[1166,1167,-52,-506,-613,1168,-490,-314,1169]],"properties":{"codarea":"2928604","name":"Santo Amaro"}},{"type":"Polygon","arcs":[[1170,-923,-138,-1036,1171,-573,-493,1172]],"properties":{"codarea":"2928703","name":"Santo Antônio de Jesus"}},{"type":"Polygon","arcs":[[-306,-90,-743,-1123]],"properties":{"codarea":"2928802","name":"Santo Estêvão"}},{"type":"Polygon","arcs":[[-154,-450,-195,-948,1173,-538,-1158]],"properties":{"codarea":"2928901","name":"São Desidério"}},{"type":"Polygon","arcs":[[-1131,-1127,1174,-1161,-637,-1055]],"properties":{"codarea":"2928950","name":"São Domingos"}},{"type":"Polygon","arcs":[[-986,1175,-558,-495,-574,-1172,-1035,-1044]],"properties":{"codarea":"2929107","name":"São Felipe"}},{"type":"Polygon","arcs":[[-1040,-559,-1176,-985,-311,-651]],"properties":{"codarea":"2929008","name":"São Félix"}},{"type":"Polygon","arcs":[[-530,-436,1176,-1166,-1156,-866]],"properties":{"codarea":"2929057","name":"São Félix do Coribe"}},{"type":"Polygon","arcs":[[-959,-1146,-386,1177,-1167]],"properties":{"codarea":"2929206","name":"São Francisco do Conde"}},{"type":"Polygon","arcs":[[-913,-463,-773,-907,-1023]],"properties":{"codarea":"2929255","name":"São Gabriel"}},{"type":"Polygon","arcs":[[-488,-1169,-612,-93]],"properties":{"codarea":"2929305","name":"São Gonçalo dos Campos"}},{"type":"Polygon","arcs":[[1178,-295,-781,-915,-133]],"properties":{"codarea":"2929354","name":"São José da Vitória"}},{"type":"Polygon","arcs":[[-418,-1120,1179,-415,-635,-1160]],"properties":{"codarea":"2929370","name":"São José do Jacuípe"}},{"type":"Polygon","arcs":[[1180,-575,-47,-924,-1171]],"properties":{"codarea":"2929404","name":"São Miguel das Matas"}},{"type":"Polygon","arcs":[[-993,-1102,-453,1181,-53,-1168,-1178,-390,-569]],"properties":{"codarea":"2929503","name":"São Sebastião do Passé"}},{"type":"Polygon","arcs":[[-557,-308,-446,-491]],"properties":{"codarea":"2929602","name":"Sapeaçu"}},{"type":"Polygon","arcs":[[-739,-1067,-1061,-127,-220,-19]],"properties":{"codarea":"2929701","name":"Sátiro Dias"}},{"type":"Polygon","arcs":[[-960,-1170,-313,-984,-1143,-1147]],"properties":{"codarea":"2929750","name":"Saubara"}},{"type":"Polygon","arcs":[[-324,-346,-1104,-1094,-1007]],"properties":{"codarea":"2929800","name":"Saúde"}},{"type":"Polygon","arcs":[[-763,1182,-183,-281,-712,-252,-1074]],"properties":{"codarea":"2929909","name":"Seabra"}},{"type":"Polygon","arcs":[[-391,-658,-1073,-862,1183,1184,-1092]],"properties":{"codarea":"2930006","name":"Sebastião Laranjeiras"}},{"type":"Polygon","arcs":[[-96,-616,-852,-77,-882,-365]],"properties":{"codarea":"2930105","name":"Senhor do Bonfim"}},{"type":"Polygon","arcs":[[1185,-442,-1124,-1089,-795,-914,-1022,1186,-369]],"properties":{"codarea":"2930204","name":"Sento Sé"}},{"type":"Polygon","arcs":[[-972,-244,-1163,-1177,-435]],"properties":{"codarea":"2930154","name":"Serra do Ramalho"}},{"type":"Polygon","arcs":[[-1165,1187,-278,1188,-150]],"properties":{"codarea":"2930303","name":"Serra Dourada"}},{"type":"Polygon","arcs":[[-747,-740,-610,-85,-609,-1132,-1081]],"properties":{"codarea":"2930402","name":"Serra Preta"}},{"type":"Polygon","arcs":[[-936,-222,1189,-209,-501,-722,-382,1190,-1150]],"properties":{"codarea":"2930501","name":"Serrinha"}},{"type":"Polygon","arcs":[[-1002,1191,1192,-1121,-873]],"properties":{"codarea":"2930600","name":"Serrolândia"}},{"type":"Polygon","arcs":[[-570,-388,-1145,-939,-357]],"properties":{"codarea":"2930709","name":"Simões Filho"}},{"type":"Polygon","arcs":[[-242,-1037,-274,-1188,-1164]],"properties":{"codarea":"2930758","name":"Sítio do Mato"}},{"type":"Polygon","arcs":[[-88,-15,-532,-900,-1066]],"properties":{"codarea":"2930766","name":"Sítio do Quinto"}},{"type":"Polygon","arcs":[[1193,-443,-1186,-368,-910]],"properties":{"codarea":"2930774","name":"Sobradinho"}},{"type":"Polygon","arcs":[[-767,-1029,-197,-184,-1183]],"properties":{"codarea":"2930808","name":"Souto Soares"}},{"type":"Polygon","arcs":[[-277,-554,-151,-1189]],"properties":{"codarea":"2930907","name":"Tabocas do Brejo Velho"}},{"type":"Polygon","arcs":[[-116,-328,-1011,-518,-857,-285]],"properties":{"codarea":"2931004","name":"Tanhaçu"}},{"type":"Polygon","arcs":[[-331,-1075,-268,-957,-1133]],"properties":{"codarea":"2931053","name":"Tanque Novo"}},{"type":"Polygon","arcs":[[-608,-1151,-1191,-381]],"properties":{"codarea":"2931103","name":"Tanquinho"}},{"type":"Polygon","arcs":[[-343,1194,-1114,1195,-1045]],"properties":{"codarea":"2931202","name":"Taperoá"}},{"type":"Polygon","arcs":[[-1031,-1099,-1017]],"properties":{"codarea":"2931301","name":"Tapiramutá"}},{"type":"Polygon","arcs":[[1196,-998,-428,-40,-1110]],"properties":{"codarea":"2931350","name":"Teixeira de Freitas"}},{"type":"Polygon","arcs":[[-32,-1084,-525,-503,1197,-451]],"properties":{"codarea":"2931400","name":"Teodoro Sampaio"}},{"type":"Polygon","arcs":[[-1190,-221,-125,-207]],"properties":{"codarea":"2931509","name":"Teofilândia"}},{"type":"Polygon","arcs":[[1198,-1046,-1196,-1113,-1042,-903,1199]],"properties":{"codarea":"2931608","name":"Teolândia"}},{"type":"Polygon","arcs":[[-452,-1198,-502,-54,-1182]],"properties":{"codarea":"2931707","name":"Terra Nova"}},{"type":"Polygon","arcs":[[-425,-962,-1112,-1096,1200,-396,-219]],"properties":{"codarea":"2931806","name":"Tremedal"}},{"type":"Polygon","arcs":[[-119,-1060,-478,-1136,-1117]],"properties":{"codarea":"2931905","name":"Tucano"}},{"type":"Polygon","arcs":[[-1013,-407,-465,-562,-880,-75]],"properties":{"codarea":"2932002","name":"Uauá"}},{"type":"Polygon","arcs":[[-902,-925,-45,-271,-1154,-548,1201,-1200]],"properties":{"codarea":"2932101","name":"Ubaíra"}},{"type":"Polygon","arcs":[[-144,-784,-988,-704,1202,-647]],"properties":{"codarea":"2932200","name":"Ubaitaba"}},{"type":"Polygon","arcs":[[-703,-711,-191,-648,-1203]],"properties":{"codarea":"2932309","name":"Ubatã"}},{"type":"Polygon","arcs":[[-1111,-461,-690,-717]],"properties":{"codarea":"2932408","name":"Uibaí"}},{"type":"Polygon","arcs":[[-1009,-370,-1187,-1021,-1071]],"properties":{"codarea":"2932457","name":"Umburanas"}},{"type":"Polygon","arcs":[[-378,1203,-732,-296,-1179,-132,-1155]],"properties":{"codarea":"2932507","name":"Una"}},{"type":"Polygon","arcs":[[-944,-1093,-1185,1204,-870]],"properties":{"codarea":"2932606","name":"Urandi"}},{"type":"Polygon","arcs":[[-734,1205,-785,-142]],"properties":{"codarea":"2932705","name":"Uruçuca"}},{"type":"Polygon","arcs":[[1206,-1140,-1032,-1016,-255]],"properties":{"codarea":"2932804","name":"Utinga"}},{"type":"Polygon","arcs":[[1207,-885,-922,-1041,-1115,-1195,-342]],"properties":{"codarea":"2932903","name":"Valença"}},{"type":"Polygon","arcs":[[-1175,-1126,-497,-1162]],"properties":{"codarea":"2933000","name":"Valente"}},{"type":"Polygon","arcs":[[-966,-416,-1180,-1119,-1193,1208]],"properties":{"codarea":"2933059","name":"Várzea da Roça"}},{"type":"Polygon","arcs":[[-1192,-1001,-967,-1209]],"properties":{"codarea":"2933109","name":"Várzea do Poço"}},{"type":"Polygon","arcs":[[-1019,-1003,-877,-1070]],"properties":{"codarea":"2933158","name":"Várzea Nova"}},{"type":"Polygon","arcs":[[-1181,-1173,-492,-444,-576]],"properties":{"codarea":"2933174","name":"Varzedo"}},{"type":"Polygon","arcs":[[-820,-1142,-887,1209,-1148]],"properties":{"codarea":"2933208","name":"Vera Cruz"}},{"type":"Polygon","arcs":[[-999,-1197,-1109,-806,-912,1210,-817]],"properties":{"codarea":"2933257","name":"Vereda"}},{"type":"Polygon","arcs":[[-180,-1101,-65,-217,-395,-579,-1137,-814]],"properties":{"codarea":"2933307","name":"Vitória da Conquista"}},{"type":"Polygon","arcs":[[-930,-1141,-1207,-260,-940]],"properties":{"codarea":"2933406","name":"Wagner"}},{"type":"Polygon","arcs":[[-1039,-168,-977,-541,-555,-276]],"properties":{"codarea":"2933455","name":"Wanderley"}},{"type":"Polygon","arcs":[[-1199,-1202,-547,-838,-879,-808,-1057,-634,-1047]],"properties":{"codarea":"2933505","name":"Wenceslau Guimarães"}},{"type":"Polygon","arcs":[[-796,-1088,-164,-1015,-641]],"properties":{"codarea":"2933604","name":"Xique-Xique"}}]}},"arcs":[[[5053,5126],[43,-37],[1,-19],[83,-59],[-3,39],[52,62]],[[5229,5112],[28,-33],[23,-14],[30,18],[24,-43],[36,-32],[12,2]],[[5382,5010],[-4,100],[13,26],[-3,32],[11,3],[-10,38],[-59,62]],[[5330,5271],[-25,-11],[3,-14],[-18,-23],[-38,-20],[-10,-18],[-57,-28],[-19,15],[-33,52],[-24,26],[-18,-23],[-16,1],[-32,-39],[7,-15]],[[5050,5174],[13,-41],[-10,-7]],[[8133,9796],[-86,20],[-25,20],[-15,-14],[-51,-4],[-19,27],[4,48],[-23,22],[-25,52],[-64,6],[-12,11]],[[7817,9984],[-18,-16],[-128,-278],[25,-143],[65,-160],[62,-25]],[[7823,9362],[45,108],[32,23],[-1,16],[18,26],[-8,45],[180,99],[33,79],[11,38]],[[9214,6780],[21,10],[23,-54],[-3,-19],[18,-18],[25,32],[71,61],[12,-3]],[[9381,6789],[-26,12],[-13,24],[17,29],[-16,0],[-36,22]],[[9307,6876],[-58,-9],[-16,16],[-36,-23]],[[9197,6860],[35,-40],[-18,-40]],[[9240,7788],[28,5],[41,45],[-6,14],[71,55],[15,31],[-11,21],[3,30],[-20,7],[21,10],[-11,12],[13,27]],[[9384,8045],[-6,7]],[[9378,8052],[-25,-5],[-44,13],[-50,-17],[-32,15],[-37,-2],[-24,-13],[-43,-7]],[[9123,8036],[22,-124],[-16,-142]],[[9129,7770],[50,6],[33,-3],[28,15]],[[8639,6511],[-8,49],[17,54],[11,13],[1,39],[39,47]],[[8699,6713],[-114,66],[-29,-3]],[[8556,6776],[-79,0],[-49,-31],[-1,-10],[-44,-40]],[[8383,6695],[-38,-44]],[[8345,6651],[47,-135]],[[8392,6516],[76,7],[81,-5]],[[8549,6518],[53,13]],[[8602,6531],[37,-20]],[[7324,4319],[-21,19],[25,7],[9,18]],[[7337,4363],[-47,42],[-35,6],[-27,-16]],[[7228,4395],[-2,-21],[-38,-31]],[[7188,4343],[-6,-8],[-7,-67],[15,-22]],[[7190,4246],[17,-10],[21,13],[12,33],[32,-7],[41,42],[11,2]],[[8771,6515],[30,-54],[15,-77],[-11,-27],[-51,-24],[1,-35],[-105,-33]],[[8650,6265],[41,-52],[31,-14],[-7,-17]],[[8715,6182],[63,-10],[23,24],[15,-7],[43,20],[18,31],[24,-12]],[[8901,6228],[35,8],[2,50],[18,44],[25,-3],[7,51],[-9,45]],[[8979,6423],[11,77]],[[8990,6500],[-39,8],[-43,-14],[-27,10],[-14,28],[-26,-5],[-32,6],[-38,-18]],[[7548,795],[79,-22],[46,9],[26,-22],[5,-44],[19,-18],[51,2],[159,14],[103,-37],[18,-12]],[[8054,665],[-42,56],[-19,50],[7,11],[-5,127]],[[7995,909],[-45,13],[-22,32],[-39,37],[-47,14],[-7,21],[-18,0],[-49,35],[-6,-7],[-65,36],[-55,1],[-15,-10],[-10,18],[-19,1],[-3,-28],[-61,3],[-15,-31]],[[7519,1044],[3,-40],[24,-60],[2,-149]],[[7491,3638],[44,-19],[36,4]],[[7571,3623],[15,65],[-54,60],[-85,58],[-23,4]],[[7424,3810],[-11,-37],[-17,-21],[-8,-60]],[[7388,3692],[103,-54]],[[7442,5329],[54,3],[23,14],[36,-2],[13,-45],[13,-12],[22,12],[6,-12]],[[7609,5287],[11,30],[49,12],[25,-12]],[[7694,5317],[-11,35],[-19,22],[-15,-1],[-6,29],[-16,18]],[[7627,5420],[-15,28],[-52,57],[-31,27]],[[7529,5532],[-16,-18]],[[7513,5514],[-38,-29],[8,-15],[-26,-27],[-24,25],[-31,-35],[-67,26]],[[7335,5459],[37,-65],[62,-50],[8,-15]],[[8425,6086],[-21,-11],[27,-42],[18,-9],[33,-44],[23,-8],[70,-3],[13,-29]],[[8588,5940],[7,37]],[[8595,5977],[-42,64],[24,25],[-2,16]],[[8575,6082],[-129,10],[-21,-6]],[[5434,6913],[14,17],[38,13],[14,24],[20,-1],[10,25],[41,34],[29,3],[19,57],[-2,29],[17,31],[-6,29],[12,13],[-5,21],[17,42],[-10,15],[0,30]],[[5642,7295],[-61,-60],[-32,-1],[-49,-27],[-26,-2],[-54,-51],[-23,-38],[-15,-4],[-37,-32],[-65,-17]],[[5280,7063],[7,-68],[12,-19],[65,-62],[-1,-55]],[[5363,6859],[33,-2]],[[5396,6857],[35,41],[3,15]],[[6406,3951],[-24,21],[-25,-2],[-17,19],[-8,35],[23,29]],[[6355,4053],[-419,-80]],[[5936,3973],[27,-25],[-10,-21],[-16,-3],[-13,-42],[-23,-25],[3,-16],[-22,-17],[14,-18],[-56,-9],[-10,-36],[-41,-37],[8,-26]],[[5797,3698],[43,-34],[18,-5],[-3,-54],[7,-25],[-15,-7],[5,-20]],[[5852,3553],[225,66],[5,117],[228,-2],[145,5]],[[6455,3739],[-20,12],[-9,52],[5,30],[-11,32]],[[6420,3865],[-5,34],[-29,39],[20,13]],[[5562,5738],[31,-94],[33,-79],[26,-10],[29,-42],[32,-126],[20,-8],[28,-35],[4,-24]],[[5765,5320],[24,-9],[54,2],[31,21],[-16,32],[-28,91],[-36,51],[-8,24]],[[5786,5532],[10,22],[-20,59],[-18,32],[32,-18],[23,36],[63,40],[0,35],[111,22],[43,70]],[[6030,5830],[31,56],[1,50],[15,24],[-19,33]],[[6058,5993],[-76,-15],[-35,10],[-133,-40]],[[5814,5948],[-10,-25],[-67,-30],[-31,9],[-42,-16],[7,-56],[16,-51],[-14,-24],[-33,-13],[-11,5],[-67,-9]],[[7388,8055],[23,29],[-8,63],[27,30],[-3,42],[-30,36],[8,14],[9,116],[-6,27]],[[7408,8412],[-26,16],[-10,105]],[[7372,8533],[-17,29],[-31,-3],[14,-22],[-25,-41],[-6,-30],[-14,-10],[2,-29],[-21,-15],[-11,-44],[-74,-8],[-54,-40],[-14,-42],[-38,-27],[-25,-28],[38,-29],[-5,-16],[-33,-5]],[[7058,8173],[10,-51],[29,-19],[-3,-32],[11,-14],[-16,-10],[25,-16],[-6,-23],[41,-26],[28,-40]],[[7177,7942],[28,-8],[-7,17],[6,47],[16,-11],[6,21],[71,38],[38,-11],[-2,33],[56,-7],[-1,-6]],[[2416,6358],[-4,23],[-330,334],[-9,5]],[[2073,6720],[-26,-42],[7,-11],[-52,-31],[-2,-17],[-26,-19],[-72,-16],[-9,-28],[-28,-31],[-16,-2],[-12,-43],[-26,-26],[-27,2]],[[1784,6456],[-5,-27],[55,-18],[45,-69],[0,-28],[27,10],[19,32],[27,-10],[41,4],[20,-14],[13,-45],[73,16],[22,12],[41,-14]],[[2162,6305],[123,11]],[[2285,6316],[25,52],[106,-10]],[[7893,6282],[25,-23],[42,-18],[35,-6],[44,-41],[22,3],[59,29],[-43,43],[-76,9],[11,25],[-1,40],[-39,13],[-1,9]],[[7971,6365],[-37,-11],[-14,-16],[-27,-56]],[[8834,8052],[5,-24],[33,-1],[16,-10],[68,5],[10,-5],[50,17],[32,-17]],[[9048,8017],[13,7],[22,-12],[40,24]],[[9123,8036],[-94,79],[-17,67],[-180,7]],[[8832,8189],[86,-24],[-2,-44],[-51,-14],[17,-14],[-48,-41]],[[7955,6070],[12,-11],[25,9],[22,-41],[14,-3],[18,-39],[-5,-10],[24,-20]],[[8065,5955],[42,2]],[[8107,5957],[23,44],[16,6]],[[8146,6007],[-10,24],[10,14]],[[8146,6045],[-15,4],[-15,27],[11,20],[-43,15],[-12,35],[-31,41],[-42,-13],[-12,-12],[-41,5]],[[7946,6167],[-9,-34],[4,-42],[14,-21]],[[6946,7873],[-95,102],[-24,17]],[[6827,7992],[-15,-25],[-108,-20],[-80,-34],[-95,-86]],[[6529,7827],[-3,-38],[45,-13],[26,29],[5,-7]],[[6602,7798],[19,19],[39,6],[33,16],[4,20],[-10,37],[40,5],[29,-14],[45,-5],[15,-13]],[[6816,7869],[27,13],[38,-2],[40,-43],[25,36]],[[9197,6860],[-38,-6],[-36,7],[-12,-27],[-41,2],[-26,-7],[-25,16],[-31,-22],[-29,11]],[[8959,6834],[24,-33],[16,-42],[-14,-44],[-21,-18],[16,-21],[-13,-37],[-17,-12],[16,-28],[59,-10],[42,-16],[11,6]],[[9078,6579],[-4,48],[11,1],[-16,48],[21,8],[15,-17],[26,-3]],[[9131,6664],[4,40],[79,76]],[[7283,4718],[4,-35],[24,-4],[12,-16],[0,-39],[22,-22],[10,9],[17,-19],[-18,-15],[14,-18],[26,0],[-11,-17],[18,-11],[0,-19],[39,4]],[[7440,4516],[11,18]],[[7451,4534],[16,20]],[[7467,4554],[-24,8],[1,29],[13,28],[-14,23],[-28,15],[-14,-5]],[[7401,4652],[-32,-9],[-17,38],[-66,25],[-3,12]],[[9197,6302],[-11,12],[-50,3],[-9,18],[-56,14],[-14,62],[14,34],[-44,3],[-8,-15],[-40,-10]],[[8901,6228],[49,-19],[40,-30]],[[8990,6179],[107,18]],[[9097,6197],[58,9],[14,14],[33,-1],[-3,33],[15,21],[-17,29]],[[5567,3861],[38,-7],[16,23],[38,8],[23,26],[45,-7],[39,20],[18,-31],[37,4],[-11,15],[30,22],[24,-1],[6,-17],[28,9],[-3,41],[41,7]],[[5936,3973],[26,38],[-5,23],[-36,14]],[[5921,4048],[-203,91],[-116,18],[37,127],[-21,17],[7,18]],[[5625,4319],[-23,0],[-44,-17],[-29,-30],[-25,0],[-4,-29],[-17,6],[-20,-28],[-1,-21],[-42,-87],[16,-16],[-11,-15],[9,-120],[-2,-28],[27,-19],[-112,-11]],[[5347,3904],[220,-43]],[[8448,7119],[-33,10],[-59,-6],[-15,7],[-74,271],[-5,28],[-66,-1],[-11,22],[-33,11],[-25,-22],[-49,25]],[[8078,7464],[-50,9],[-5,-10],[-48,21]],[[7975,7484],[-23,-2],[-50,14]],[[7902,7496],[4,-36],[-39,-44],[1,-15],[54,11],[3,-87],[10,-23],[6,-52],[40,-46]],[[7981,7204],[28,4],[54,-31],[-8,-23],[18,-51],[-5,-62],[-20,-33],[3,-28]],[[8051,6980],[72,74]],[[8123,7054],[22,22],[80,-25],[124,42],[46,-32]],[[8395,7061],[44,49]],[[8439,7110],[9,9]],[[8771,6515],[-49,13],[-53,-26],[-30,9]],[[8602,6531],[26,-62],[2,-28],[21,-24],[6,-38]],[[8657,6379],[11,-43],[-20,-54],[2,-17]],[[7682,3055],[24,29],[34,-4],[-7,-16],[28,1],[13,-18],[34,-3],[43,24]],[[7851,3068],[-16,10],[7,28],[19,9],[10,23],[-2,45],[11,12],[-28,62],[-6,31]],[[7846,3288],[-41,-12],[-34,-27],[-8,18]],[[7763,3267],[-26,-27],[-23,13],[-11,-14],[2,-45],[-24,-5],[-8,-37],[-58,5],[-16,20],[-14,-10],[-2,-52],[-7,-5]],[[7576,3110],[13,-24],[11,20],[39,-9],[23,10],[16,-17],[4,-35]],[[8250,5380],[-10,17],[-31,-9],[-63,6]],[[8146,5394],[-61,10],[-19,-28],[-29,26]],[[8037,5402],[-23,-43],[-29,5]],[[7985,5364],[7,-26],[17,-4],[10,24],[12,-12],[27,4],[12,-18]],[[8070,5332],[8,-23],[27,-12],[49,10],[11,16],[28,-10],[2,27],[56,11],[-1,29]],[[7672,3995],[137,-31]],[[7809,3964],[45,-10]],[[7854,3954],[-7,27],[5,42],[-10,5],[17,39],[29,38]],[[7888,4105],[-60,-1],[-17,12],[-5,23],[-45,-32],[-8,15],[-29,-9]],[[7724,4113],[-23,-36],[-34,6],[-59,-13],[-15,10],[12,31],[-23,8],[-29,-12],[-41,44],[-40,-25],[17,-28],[-18,-5],[-10,-37],[-12,-10]],[[7449,4046],[115,-26],[59,3],[10,-20],[39,-8]],[[2194,5501],[225,-179]],[[2419,5322],[12,25],[27,20],[0,48],[24,32],[30,15]],[[2512,5462],[-3,24],[19,5],[6,43],[-14,2],[12,24],[61,9],[11,25]],[[2604,5594],[-3,32],[22,17],[2,28],[-22,13],[-7,23]],[[2596,5707],[-93,109],[34,65],[-88,48],[-17,58],[19,163]],[[2451,6150],[-90,20],[-49,-9],[-26,-12],[-34,6],[-38,-6],[-4,7],[38,80]],[[2248,6236],[-37,-23],[-9,-43],[-35,-19],[-107,-24],[-56,-77],[-13,-4]],[[1991,6046],[-4,-30],[23,-38],[-9,-11],[14,-33],[23,-11],[23,-35],[52,-9],[16,-152],[65,-226]],[[6759,6487],[7,-18],[55,-47],[11,-21],[39,-15],[7,-22],[156,-11],[10,4],[22,-22],[14,-29]],[[7080,6306],[13,85],[-4,16],[63,0],[9,33],[3,49]],[[7164,6489],[4,17],[-51,21],[-48,67],[10,22]],[[7079,6616],[-18,9],[-22,-6],[-94,-2],[-37,14],[3,7],[-112,19],[-19,-14],[-46,-6]],[[6734,6637],[8,-29],[25,-29],[35,-8],[21,-14],[-30,-53],[-34,-17]],[[8694,7927],[-26,20],[-1,17],[-45,-18],[-9,31],[-38,31]],[[8575,8008],[-25,-2],[-23,-19],[-5,-61],[-38,-42],[-37,-19]],[[8447,7865],[-3,-21],[31,7],[9,-8],[0,-48],[8,-24]],[[8492,7771],[60,-9],[12,19],[25,-11],[58,19],[16,12],[14,38],[3,53],[14,35]],[[3586,6990],[18,39],[5,27],[22,47],[27,36],[28,21],[-20,37],[4,18],[-13,25],[19,47],[35,29],[19,42],[11,46],[23,20],[5,32],[48,21],[14,38],[44,22],[13,17],[-3,22],[18,18],[24,5],[14,28],[17,11],[51,13],[12,25],[89,-7],[46,46],[38,59],[11,37],[-6,11],[40,81],[46,20]],[[4285,7923],[-715,338],[-114,-3]],[[3456,8258],[12,-28],[-1,-43],[-15,-33],[11,-62],[-7,-24],[9,-22],[-5,-139],[10,-29],[-11,-39],[6,-22],[-1,-47],[-19,-79],[7,-64],[-174,-12],[-228,-40],[-28,2],[-62,59],[-63,-7]],[[2897,7629],[-24,-23],[0,-19],[-37,-31],[-65,-14],[-9,-14],[28,-43],[43,-54],[37,-32],[19,-43],[14,-49],[36,-111],[35,-69]],[[2974,7127],[14,-38],[12,-61],[9,-13],[29,-131],[35,-90],[34,-54],[31,-67],[18,-73]],[[3156,6600],[32,-67],[131,0],[6,41],[15,38],[32,27],[1,21],[32,6],[25,18],[31,-3],[-12,53],[47,-1]],[[3496,6733],[-37,47],[-4,18],[7,44],[28,40],[21,10],[32,-2],[22,21]],[[3565,6911],[-2,13],[23,66]],[[5570,4761],[65,-3],[48,-29],[32,-3],[14,21],[39,-36],[29,24],[5,-11]],[[5802,4724],[29,10],[13,24],[23,-5],[56,52],[58,17],[22,-18],[-8,-19],[23,-27],[-11,-4],[1,-75],[-16,-18],[8,-13],[48,-13],[8,-44],[19,-5],[21,-40],[27,-12]],[[6123,4534],[17,5],[28,43],[26,-6],[71,16],[81,-7]],[[6346,4585],[-132,210],[-23,54],[-90,16],[-15,22],[-90,-11],[-197,88],[-3,-50],[-36,49]],[[5760,4963],[-58,-25],[-46,5],[-146,-34]],[[5510,4909],[17,-100],[16,-6],[14,-35],[13,-7]],[[6524,3366],[54,60],[72,60],[28,68]],[[6678,3554],[-39,46],[-88,52]],[[6551,3652],[-155,-73],[-38,-36],[-21,-35],[12,-44],[-12,-35],[-18,-26],[37,-15],[-5,-23],[10,-39]],[[6361,3326],[163,40]],[[4690,6516],[170,-244],[-11,-10],[10,-32],[0,-64]],[[4859,6166],[53,0],[-20,47],[2,25],[29,-14],[48,-58],[19,26],[-21,41],[21,2],[-2,134]],[[4988,6369],[27,13],[-41,36],[3,23],[33,-1],[-2,38],[-12,16],[-34,4],[-4,60],[-29,14],[-2,44],[20,18],[-15,17]],[[4932,6651],[40,21],[15,-7]],[[4987,6665],[4,41],[-24,19],[-52,15],[-107,-13],[-243,28]],[[4565,6755],[24,-17],[39,-54],[17,-54],[-5,-18],[50,-96]],[[7612,4464],[-11,29],[-26,-27],[17,-22],[-7,-23],[-22,-16],[2,-17],[-19,-29],[23,-16],[-18,-11],[-8,-25],[-22,-1],[-25,-17]],[[7496,4289],[-16,-30],[4,-24]],[[7484,4235],[-3,-30],[45,7],[16,-12],[37,3]],[[7579,4203],[16,70],[23,17],[-15,17],[12,57],[21,47],[-24,53]],[[1784,6456],[-40,7],[-61,87],[-78,58],[-51,8],[-27,-3],[-1,20],[-30,32],[-15,0],[-22,27],[-46,16],[-10,19],[-46,9],[-32,-6],[-61,-41],[-45,0],[-23,11],[-54,-3],[-68,-18],[-91,18],[-10,20],[-24,15],[-30,3],[-57,33],[-46,14],[-11,23],[-29,19],[-26,-3],[-42,14],[-46,8],[-112,8],[-13,-5]],[[537,6846],[-69,0],[-11,-26],[-48,2],[-43,26],[-6,17],[-46,-10],[-22,9],[-37,-3],[-47,-17],[0,-20],[27,14],[23,-10],[-5,-13],[38,-32],[-37,-52],[-38,-12],[4,-20],[33,7],[-14,-13],[30,1],[-17,-14],[7,-26],[-19,-9],[-3,-20],[-16,9],[-8,-35],[13,-23],[20,3],[30,-22],[43,-10],[37,-2],[63,17],[-4,-18],[-43,-16],[-69,-1],[-43,-18],[-30,-37],[-62,-38],[-25,2],[-37,-17],[30,-11],[67,5]],[[203,6413],[261,16],[2,19],[44,16],[30,23],[94,59],[49,55],[19,-11],[39,-6],[49,4],[26,-10],[32,19],[29,0],[43,-12],[33,-21],[38,-14],[-92,-419],[-20,-87]],[[879,6044],[50,14],[76,4],[76,-7],[41,9],[58,27],[24,-12],[24,9],[40,-3],[61,-18],[71,-34],[61,-4],[24,42],[40,16],[20,36],[26,11],[25,-14],[27,2],[38,19],[22,-5],[103,28]],[[1786,6164],[64,32],[17,1],[71,41],[39,-8],[27,8],[53,42],[23,10],[35,-5],[47,20]],[[4932,6651],[151,-77],[217,-102]],[[5300,6472],[-8,24],[10,47]],[[5302,6543],[-34,24],[-43,20],[-33,50],[-9,32],[-37,60],[-40,30]],[[5106,6759],[-39,-48],[-16,-3]],[[5051,6708],[-29,-29],[-5,-17],[-30,3]],[[7604,3629],[0,-19],[47,-3],[0,-15],[38,-19],[-2,-18]],[[7687,3555],[78,14]],[[7765,3569],[10,27],[41,48],[15,41]],[[7831,3685],[-34,22],[-26,-1],[-35,-15],[-19,-49],[-66,35],[-25,-11]],[[7626,3666],[-22,-37]],[[8180,6921],[-31,29],[-17,35],[18,45],[-27,24]],[[8051,6980],[-19,-37],[13,-9],[1,-30],[-14,-67]],[[8032,6837],[51,19],[41,-1],[44,32],[12,34]],[[8318,2622],[-230,-21],[12,-23],[-16,-16],[-33,27],[-24,2],[-9,-13],[-41,17],[-32,-4],[-53,-48],[-74,-6]],[[7818,2537],[-14,24],[-20,1],[-13,31],[-30,-9],[-9,11],[-36,-42],[-17,-5],[-5,18],[-39,3],[-52,24]],[[7583,2593],[2,-10],[54,-47],[31,-33],[-3,-14],[33,-51],[-13,-41],[29,-1],[68,-64],[-16,5],[-34,-32]],[[7734,2305],[33,-21]],[[7767,2284],[37,-26],[71,12],[25,-21],[54,42],[38,18],[34,7],[14,14],[219,-41]],[[8259,2289],[5,20],[42,105],[56,123],[-44,85]],[[5677,3274],[51,-43],[14,-21],[89,-21],[29,11]],[[5860,3200],[37,33],[15,36],[24,18],[6,74],[-40,47],[-16,33],[5,29],[-15,13],[6,24],[-10,37],[-20,9]],[[5797,3698],[2,-28],[-21,1],[-6,16],[-37,-33],[17,-27],[-6,-18]],[[5746,3609],[12,-33],[-10,-14],[-1,-35],[14,-10],[-9,-24],[27,-20],[1,-25],[14,-9],[7,-33],[-90,-27],[13,-29],[-5,-27],[-25,-19],[-17,-30]],[[8556,6776],[-117,334]],[[8395,7061],[-42,-72],[-9,-54]],[[8344,6935],[8,-49],[10,-21],[-37,-23],[16,-72]],[[8341,6770],[-1,-15],[35,-27],[8,-33]],[[6689,4021],[91,-32],[43,-21],[40,5],[51,-21],[6,-16],[21,-1]],[[6941,3935],[50,-12],[16,-31],[12,0]],[[7019,3892],[15,35],[22,0],[11,49],[12,2],[-3,49],[-29,11],[-2,64],[-31,12],[1,37]],[[7015,4151],[-17,40],[-25,-19],[-30,-7],[-19,30]],[[6924,4195],[-16,-16],[-110,-37],[-31,-7],[-29,8],[-1,-16],[-28,-10],[5,26],[-14,9]],[[6700,4152],[-4,-18],[-22,2],[-31,-11],[-70,-46]],[[6573,4079],[86,-47],[30,-11]],[[6732,5655],[-73,128],[6,27],[-33,24],[-16,37],[7,23],[-12,50],[-26,-1],[-56,42],[-20,4],[-12,27]],[[6497,6016],[-24,-15],[-96,5]],[[6377,6006],[-29,3],[-73,-6]],[[6275,6003],[7,-19],[-18,-3],[12,-35],[-3,-43],[20,-11],[-17,-26],[13,-51],[13,-18],[-23,-33],[-35,-4],[2,-9],[-39,-21],[-8,-31],[-26,-9],[-20,21],[-30,-4],[-39,-31],[-11,-22]],[[6073,5654],[-57,-125]],[[6016,5529],[42,2],[5,-14],[-19,-45],[24,8],[14,-13],[-1,-33],[16,-30],[34,10],[28,23],[56,-10],[54,-29],[38,1]],[[6307,5399],[39,26],[34,-5],[32,22],[55,3],[30,-5],[32,12],[45,47],[25,3]],[[6599,5502],[19,-8],[42,30],[5,35],[19,5],[23,25],[-10,3],[24,57],[11,6]],[[3397,4550],[214,271],[58,93],[27,79],[36,14],[14,106],[170,-11],[13,45],[38,-5]],[[3967,5142],[-11,50],[11,68]],[[3967,5260],[-1,23],[-63,63],[-42,9],[-20,-7],[-27,24],[-22,5],[-23,38],[-34,11],[1,14],[-29,27],[-13,0],[-28,54],[-36,36],[-23,-1],[-6,14],[-40,35],[75,109],[13,43],[-17,1]],[[3632,5758],[-35,-13],[-28,-40],[-27,-19],[-30,-32],[-15,-29],[1,-34],[-16,-13],[-37,-5],[-10,-23],[4,-38],[-10,-49],[4,-18],[-52,-42],[-7,-24],[8,-33],[1,-52],[-12,13],[-29,-3],[-35,7],[-25,-22],[-50,5],[-22,-8],[-8,-22],[-23,-9]],[[3179,5255],[-57,15],[-14,-18]],[[3108,5252],[1,-104],[82,22],[205,12],[8,-3],[-33,-75],[6,-44],[25,-40],[3,-33],[-20,-97]],[[3385,4890],[10,-3],[-29,-64],[-18,-51],[-16,-77],[-50,-61],[32,-1],[5,-21],[34,-18],[-3,-19],[47,-25]],[[6406,3951],[180,15],[49,-16],[18,16],[29,-2],[7,57]],[[6573,4079],[-38,21],[-50,6],[-52,12],[-45,-32],[-1,22],[-24,11]],[[6363,4119],[-8,-31],[-31,-9],[43,-23],[-12,-3]],[[4935,5590],[27,0],[17,26],[29,10],[39,2],[22,15],[38,-21],[32,11],[19,-7],[16,12],[37,-58],[69,-132]],[[5280,5448],[64,99],[21,71],[-16,48],[22,22],[11,49]],[[5382,5737],[-47,33]],[[5335,5770],[-213,3],[-56,-8],[-89,22],[-52,5]],[[4925,5792],[11,-63]],[[4936,5729],[-15,-45],[14,-66],[0,-28]],[[5790,6323],[-9,24],[21,31],[-13,5],[-2,39],[17,23],[22,6],[6,52],[-36,43]],[[5796,6546],[-33,16],[-1,28],[11,32],[-4,28],[-81,19],[-29,22],[-47,5]],[[5612,6696],[-6,-42],[-24,-57]],[[5582,6597],[-5,-67],[-25,-13],[-8,-23],[12,-17],[31,-12],[9,-51],[16,-29],[27,-7],[-4,-36],[18,-51]],[[5653,6291],[87,20]],[[5740,6311],[50,12]],[[3945,5513],[55,1],[20,-13],[24,7],[17,-13],[47,38],[67,27],[43,-15],[196,33]],[[4414,5578],[2,13],[-35,33],[21,48],[16,7],[-6,30],[-17,28]],[[4395,5737],[-16,21],[-56,10],[2,18],[-24,5],[-8,23],[-17,10],[4,20],[-35,89],[18,19]],[[4263,5952],[-143,-58],[-59,-12],[-68,29]],[[3993,5911],[11,-187],[-9,-74],[-5,-94],[-45,-43]],[[4516,5033],[-4,56],[-27,62],[16,12],[-26,43],[-1,49]],[[4474,5255],[-63,2],[-22,-39],[-94,-8],[2,-18],[-81,-23],[3,-58],[29,-9],[-25,-44],[54,-28]],[[4277,5030],[46,-36],[27,5],[11,-25],[93,21]],[[4454,4995],[62,38]],[[7204,5278],[59,-18],[4,-12],[36,-14]],[[7303,5234],[-8,15],[83,11],[15,-12],[5,31],[-15,30],[21,13],[29,-14],[9,21]],[[7335,5459],[-52,21],[-31,28],[-23,3]],[[7229,5511],[-58,-64],[-16,-43],[12,-22],[-6,-36],[43,-68]],[[3292,5813],[100,88]],[[3392,5901],[-119,45],[-136,120],[-28,5],[-2,14],[23,53],[-27,-4],[-20,12],[-8,27],[-33,4],[-16,23],[-25,12],[-17,-5],[-34,9],[-66,-15],[-17,14]],[[2867,6215],[-32,5]],[[2835,6220],[2,-29],[-34,-31],[1,-39],[-19,-13],[-16,-36],[-1,-25],[-55,-65],[-43,-9],[7,-39],[33,-26],[1,-21],[-12,-82],[17,-53],[57,2],[40,20],[27,3],[9,-33]],[[2849,5744],[124,18],[319,51]],[[4074,6523],[38,-32],[13,6],[11,-19],[-22,-13],[0,-37],[62,-82],[36,11],[19,43],[43,-19],[16,-83],[18,-12],[26,3],[-5,-26],[18,-64],[198,25],[8,-45],[16,-31],[32,-107],[-38,-6],[10,-39]],[[4573,5996],[22,-19],[13,31],[-6,17],[22,26],[56,-4],[5,19]],[[4685,6066],[-12,49],[-11,3],[1,28],[158,34],[17,-31],[21,17]],[[4690,6516],[-234,-18],[-134,57],[-91,44],[-34,-10],[-78,69],[27,80]],[[4146,6738],[-40,-15],[-83,-50],[51,-150]],[[5286,3938],[42,-15],[19,-19]],[[5625,4319],[56,9],[12,8]],[[5693,4336],[-63,41],[-36,3],[-58,43],[-18,61],[-15,24]],[[5503,4508],[-71,-28]],[[5432,4480],[-109,-58],[-62,24],[-39,-13],[-16,8]],[[5206,4441],[-18,-10],[-19,16],[-30,2],[-11,-30],[-23,-1],[-42,-49],[-82,-4],[-6,-14],[-35,0],[-56,17],[-23,-3]],[[4861,4365],[77,-63],[23,-49]],[[4961,4253],[16,-61],[12,-7]],[[4989,4185],[49,6],[85,-26],[50,-8],[38,5],[38,-150],[8,-44],[27,-11],[2,-19]],[[8027,3350],[-8,30],[-34,17],[-21,61],[10,38]],[[7974,3496],[-21,-26],[-77,5],[-5,14],[-23,-16],[-42,-46],[14,-16],[-14,-28]],[[7806,3383],[1,-13],[44,17],[19,-5],[31,-38],[-16,-14]],[[7885,3330],[34,-7],[14,25],[48,8],[46,-6]],[[3456,8258],[-90,5],[-42,-14],[-84,1],[-13,-21],[-29,-15],[-11,-21],[-19,-2],[-15,-21],[11,-20],[-7,-29],[-23,0],[-48,18],[-48,-37],[-157,0]],[[2881,8102],[-1,-34],[-22,-10],[-43,5],[-23,21],[-32,-2],[-9,-33],[11,-31],[-27,-32],[-23,-75],[-13,-9]],[[2699,7902],[28,-33],[66,-20],[8,-29],[19,-10],[34,-38],[22,-63],[15,-21],[-16,-14],[4,-25],[18,-20]],[[6524,3366],[28,1],[13,-21],[51,25],[21,-11],[24,4],[2,-27],[19,-30],[35,1],[30,-14],[16,26],[30,-7],[41,16],[14,23],[17,2],[-14,20],[46,4],[26,15],[29,0],[17,-15]],[[6969,3378],[1,17]],[[6970,3395],[-174,49],[6,27]],[[6802,3471],[-22,50],[-20,-25],[-34,-3],[-28,55],[-20,6]],[[8010,5863],[17,14],[44,19],[69,16]],[[8140,5912],[-17,39],[-16,6]],[[8065,5955],[-25,-9],[-60,-6],[-22,-34],[-36,-3],[-18,12],[-46,-10]],[[7858,5905],[28,-38],[66,-72]],[[7952,5795],[22,6]],[[7974,5801],[37,20]],[[8011,5821],[-1,42]],[[8207,5864],[37,-23],[22,-51],[4,-42]],[[8270,5748],[10,-25],[48,-30],[27,-42],[-3,-28],[18,-16]],[[8370,5607],[12,12],[18,57],[-20,46],[17,8]],[[8397,5730],[-10,15],[21,12],[-7,28],[23,16],[-8,55],[-22,29],[-29,3],[-33,42]],[[8332,5930],[-32,5],[-40,-23],[-38,-12],[3,-13],[-30,-4]],[[8195,5883],[12,-19]],[[4792,3925],[-25,82],[-62,31]],[[4705,4038],[-43,-5],[-22,6],[-33,-16],[-39,15],[-20,-14],[-39,18],[-23,19],[-32,-9],[2,13]],[[4456,4065],[-56,-30],[-12,-30]],[[4388,4005],[24,11],[38,-6],[21,-13],[59,-8],[18,-30],[27,-17],[10,-30],[-6,-16],[14,-27],[-23,-34],[27,-20],[-7,-24]],[[4590,3791],[26,-11],[48,-1],[23,23],[34,10],[23,-8],[41,10]],[[4785,3814],[2,73],[-25,12],[30,26]],[[7131,7317],[-125,33],[-79,25],[-63,11],[-41,0],[-124,34]],[[6699,7420],[-100,12]],[[6599,7432],[32,-143],[44,-28],[51,6],[21,-18],[46,27],[26,-1],[59,22],[58,-7],[28,7]],[[6964,7297],[74,-14],[37,15],[11,-4],[45,23]],[[6363,4119],[-60,19],[-79,32],[1,6],[-49,27],[-85,29],[-58,24]],[[6033,4256],[-16,-25],[13,-23],[-44,-18],[24,-19],[-22,0],[-50,-41],[3,-22],[-15,-22],[13,-13],[-18,-25]],[[4791,4565],[-24,16],[-43,-5],[-21,17],[-13,28],[-31,3],[-13,18],[-58,17],[33,21],[47,20],[47,29],[40,5]],[[4755,4734],[57,-2],[-14,25],[-36,13],[-16,-9],[-27,14],[-15,23],[-13,-3],[-6,24],[-66,10],[-4,-11],[-48,-14]],[[4567,4804],[7,-66],[-29,-9],[-38,33],[-45,3],[-16,-10],[-52,-2],[-31,29],[-13,-5],[-20,57],[-20,-14],[-11,8],[-30,-9],[-2,-11],[-39,-4],[-22,30],[-9,32],[-21,3]],[[4176,4869],[-5,-40],[21,-32]],[[4192,4797],[17,-47],[27,-22],[20,-43],[41,-17],[22,-76],[31,-22],[6,-28],[40,-21],[6,-17],[-49,-26],[-264,-93]],[[4089,4385],[18,-36],[61,-31],[14,0],[18,26],[9,-30],[65,-33],[29,0],[5,-36],[18,-25],[-12,-66],[-30,-33]],[[4284,4121],[57,-41],[25,-33],[22,-42]],[[4456,4065],[30,26],[2,22],[91,111]],[[4579,4224],[-5,102],[-26,107],[17,14],[-7,33],[17,18],[-9,17],[25,8],[63,7],[7,7],[54,-21],[45,43],[31,6]],[[5364,6634],[37,-25],[181,-12]],[[5612,6696],[13,18],[18,54],[-76,67],[-133,78]],[[5396,6857],[4,-57],[-17,-73],[-1,-33],[-18,-60]],[[8237,4758],[35,14],[20,-16],[21,8],[8,26],[-16,18],[5,21],[-35,40],[18,81],[26,23],[-14,34],[1,42],[-14,9],[-31,-22],[-5,9]],[[8256,5045],[-41,19],[-28,-2],[-29,-15],[-33,-75],[2,-26]],[[8127,4946],[-25,-50],[14,-27]],[[8116,4869],[25,-19],[59,3],[35,-63],[2,-32]],[[7131,7317],[-75,68],[-33,17],[-54,62],[-50,43],[-27,11],[-22,41],[-18,15]],[[6852,7574],[-87,-58],[-22,3],[-18,-54],[-26,-45]],[[7576,3110],[-16,15]],[[7560,3125],[-53,-6],[3,-15]],[[7510,3104],[9,-7],[7,-51],[28,-6],[-2,-23],[17,-10],[10,-38],[-40,-45],[14,-30],[22,-1],[23,-28],[-13,-16],[-52,-10],[32,-47]],[[7565,2792],[16,5],[53,-20]],[[7634,2777],[16,14],[24,45],[26,-24],[20,-2],[45,25],[-26,18],[-7,53],[17,24],[59,-8]],[[7808,2922],[-16,47],[-35,4],[-29,36],[-22,-22],[-1,44],[-23,24]],[[8926,5635],[5,-21],[23,-25],[19,0],[9,-24]],[[8982,5565],[40,29],[151,168],[61,52],[19,40]],[[9253,5854],[-18,17],[-23,45],[-6,35],[10,18],[-10,15],[-30,-14],[5,-19],[-28,-7],[-29,7],[-35,23],[10,12],[-23,15],[-34,-24],[-21,5],[-4,-27],[27,-27],[9,-43]],[[9053,5885],[17,1],[23,25],[17,-23],[26,-13],[7,-26],[-48,5],[-6,-19],[-41,-27],[-43,9],[-31,-1],[-28,12],[-39,-16],[-28,-40]],[[8879,5772],[21,-37],[11,-48],[21,-42],[-6,-10]],[[7828,4272],[90,18],[71,27],[59,13],[50,-20],[49,2],[33,10],[42,26],[-4,33],[-20,9],[20,61],[-16,38],[16,44],[37,20]],[[8255,4553],[-17,24]],[[8238,4577],[-41,-35],[-13,-22],[-28,-13],[-29,3],[-15,23],[-65,4],[-34,-12],[-9,-19],[-15,8],[-20,-19],[-32,-11],[-56,6],[-5,-15],[-29,7],[-1,-25],[-18,-30],[-10,-51]],[[7818,4376],[10,-6],[14,-50],[-17,-15],[3,-33]],[[3216,9164],[46,-36],[20,-23],[37,-20],[20,-29],[2,-24],[22,-50],[68,-96],[33,-110],[210,8],[136,-43],[152,-62],[86,83],[77,21],[53,74]],[[4178,8857],[9,69],[23,22],[-2,18]],[[4208,8966],[-32,15],[4,-24],[-45,-35],[-14,-31],[-54,0],[-9,60],[-24,9],[-28,-10],[-30,35],[-26,0],[-25,17],[-12,54],[7,19],[-17,31],[-17,7],[-57,-13],[-18,13],[-53,16],[-18,13],[-9,-13],[-33,7],[-13,-32],[-23,-11],[-16,21],[-82,-20],[-9,20],[-47,33],[-18,-1],[-25,21],[-20,35],[-47,49],[-33,6],[-31,-12],[-37,-33],[-45,-12],[-36,-36]],[[6827,7992],[28,18],[12,21],[-11,32],[-5,54],[19,7]],[[6870,8124],[-7,17],[11,45],[-30,85],[9,22],[-32,39],[-5,26],[-20,14],[-56,15],[-17,-28],[-54,29],[25,27],[5,24],[52,32],[14,18],[10,39],[-11,16],[17,33],[-3,20]],[[6778,8597],[-73,-37],[-31,-30],[-98,2],[-152,86],[-185,16]],[[6239,8634],[-4,29],[-15,-22],[-52,-30],[-13,-20],[-39,15],[-18,-15],[0,31],[-46,-14],[-11,11],[-18,-24],[-31,-18],[-13,11]],[[5979,8588],[-32,-30],[-24,7],[1,26],[-42,-14],[-14,-17],[-31,-12],[-32,2],[-6,32],[-17,-4],[-21,-49],[69,-35],[23,-4],[1,-20],[-25,-34],[14,-38],[21,-7],[-7,-21],[10,-26],[-15,-42],[30,-27],[-39,-41],[-28,-11],[-39,-35],[-1,-15],[-38,-24]],[[5737,8149],[12,1],[18,-48],[-6,-22],[33,-40],[26,4],[21,19],[81,-36],[79,18],[15,18],[17,-19],[40,-2],[4,-27],[19,-8],[5,-24],[45,-8],[17,23],[13,-6],[-25,-49],[-23,-4],[-20,-54]],[[6108,7885],[24,-2],[42,12],[62,3],[19,-15],[40,15],[17,-41],[125,-37],[38,-14],[54,21]],[[2419,5322],[61,-10],[29,-32],[22,-36],[41,-7],[54,7],[48,-35]],[[2674,5209],[10,158],[-15,35],[-21,2],[-77,51],[14,14],[-24,5],[-49,-12]],[[5302,6543],[33,37],[29,54]],[[5363,6859],[-51,-6],[-74,-48],[-40,-18]],[[5198,6787],[-22,-9],[-18,9],[-52,-28]],[[8318,2622],[-25,51],[-20,52],[-7,128],[-11,72],[-23,85]],[[8232,3010],[-25,-3],[-2,16],[-20,-18]],[[8185,3005],[-4,-47],[-25,-22],[-52,-13],[-13,-14],[-42,-9],[-35,-22],[-30,2],[41,-31],[-11,-29],[22,-1],[-6,-31],[-46,12],[-34,-30],[-31,-13]],[[7919,2757],[-39,-9],[-29,-20],[-41,-47],[-5,-31],[28,-11],[3,-25],[17,-24],[6,-28],[-41,-25]],[[8014,6482],[11,31],[48,27],[14,36],[11,3],[22,59]],[[8120,6638],[17,60]],[[8137,6698],[-170,1],[-11,-18],[-13,13]],[[7943,6694],[-44,-60],[5,-62],[-34,-48],[23,-27],[-11,-25]],[[7882,6472],[132,10]],[[8679,5820],[23,2],[-13,-18],[-7,-54],[26,-29],[-2,-11]],[[8706,5710],[29,-10],[5,-32],[14,-12],[31,0]],[[8785,5656],[46,125],[23,8]],[[8854,5789],[6,53]],[[8860,5842],[-8,10],[-32,-11],[-25,8],[-20,-7],[-20,17],[-71,-29],[-5,-10]],[[3921,4019],[28,-27],[0,-17],[41,-62],[22,-9],[39,-54]],[[4051,3850],[90,153],[46,24]],[[4187,4027],[5,24],[-13,10],[4,31],[-37,14],[-4,15],[-141,-26],[-24,-19],[-24,-1],[-32,-56]],[[5646,2899],[62,-14],[77,-6],[21,19],[43,-41],[39,1],[6,11],[38,-5],[25,26],[24,-6],[23,27],[-4,10]],[[6000,2921],[-47,14],[-21,38],[-46,20],[7,31],[-12,27],[0,42],[-15,-6],[0,46],[12,34],[-18,33]],[[5677,3274],[-7,7],[-30,-21],[-13,-24],[-37,-1],[20,-90],[11,-25],[-23,-4],[-19,-26],[9,-21],[-20,-17],[-25,-35],[1,-32]],[[5544,2985],[102,-86]],[[7569,7710],[63,0],[28,-10],[31,11],[38,28],[-7,-21],[80,4],[7,-18],[-1,-61],[-10,-23],[5,-66],[-9,-17],[30,-1],[26,-30]],[[7850,7506],[21,-13],[31,3]],[[7975,7484],[-3,29],[-20,17],[-5,47],[13,11],[-14,80],[-37,124]],[[7909,7792],[1,19],[-87,23],[-18,1],[-70,36],[-38,47],[-63,3],[-31,-12],[-43,29],[-56,11],[-133,4]],[[7371,7953],[26,-106],[51,-29],[-2,-83],[18,-13],[1,-21]],[[7465,7701],[104,9]],[[8655,8215],[7,58],[-27,7],[-75,36],[-26,-7],[-43,27],[23,38],[-34,24],[-22,36],[-17,7],[-27,51],[-54,14],[-26,30],[-22,-11],[-5,20],[-16,-2],[-14,88],[14,20],[62,31],[-4,44],[39,26],[46,9],[5,46],[9,28],[-12,28]],[[8436,8863],[-26,-8],[-57,24],[-112,-8],[-157,13],[-8,-20],[-28,-7],[-29,14]],[[8019,8871],[-45,-7]],[[7974,8864],[-25,-59],[-1,-17],[24,-46],[-9,-27],[22,-48],[-4,-24],[1,-102],[-18,-64],[-15,-6],[-31,-57],[8,-61],[-12,-47]],[[7914,8306],[34,-1],[8,-33],[27,-11],[20,-20]],[[8003,8241],[116,-126],[212,112],[325,-35]],[[8656,8192],[-1,23]],[[7219,6748],[26,-20],[48,-15],[-6,-17],[21,-17],[17,-37],[71,6],[35,-5]],[[7431,6643],[19,6],[5,30],[-6,61]],[[7449,6740],[-23,104],[-52,36]],[[7374,6880],[-44,6],[-12,-7],[-31,16],[-21,-5],[-35,26],[-5,53],[5,13]],[[7231,6982],[-36,-4],[-14,17],[-27,-13]],[[7154,6982],[9,-68],[-2,-66],[16,-37],[24,-9],[6,-20]],[[7207,6782],[12,-34]],[[7044,7040],[90,-5],[79,24],[-11,24],[17,1],[-2,28],[38,47]],[[7255,7159],[15,5]],[[7270,7164],[-101,65],[2,94],[-31,6]],[[7140,7329],[-9,-12]],[[6964,7297],[37,-65],[28,-6]],[[7029,7226],[20,21],[41,9],[6,-55],[-13,-4],[-15,-63],[-29,-13],[5,-81]],[[5567,3861],[7,-15],[-20,-29],[50,-46],[14,-42],[-7,-30],[0,-58],[-29,14],[-45,-30],[14,-13]],[[5551,3612],[27,5],[36,-9],[10,-26],[33,10],[11,18],[20,-3],[15,17],[43,-15]],[[7432,574],[31,-19],[34,-8],[25,13],[46,-9],[19,-16],[36,1],[62,-19],[41,-27],[144,3],[34,-2],[20,28]],[[7924,519],[55,55],[-1,28],[18,5],[58,50],[0,8]],[[7548,795],[-176,-71],[-183,156],[1,10]],[[7190,890],[-35,6],[-69,-20],[-39,17],[-56,14],[-40,2],[-2,9],[-65,2],[-3,27],[-39,0]],[[6842,947],[20,-140],[26,-15],[27,-3],[56,-41],[19,-37]],[[6990,711],[97,11],[17,-26],[31,-10],[61,-7],[32,-17],[11,-28],[38,-50],[32,6],[21,15],[52,-5],[50,-26]],[[9356,6321],[51,-18],[3,51],[12,20],[10,75],[-5,43],[-61,14],[-28,24]],[[9338,6530],[-30,-6],[-4,-15],[-35,-54],[7,-38],[-16,-36],[28,-15],[20,-23],[48,-22]],[[3024,4077],[93,132],[14,41],[15,81],[15,44],[4,45],[29,44],[2,41],[12,25],[-1,59],[30,32]],[[3237,4621],[-246,100]],[[2991,4721],[-26,-45],[-44,8],[-25,-17],[-2,-37],[-18,-7],[-31,10],[0,-26],[-37,-20],[-1,15],[-32,9],[-17,24]],[[2758,4635],[4,-29],[23,-9],[-9,-24],[-15,-5],[-6,-32],[-21,23],[16,-38],[-31,-41],[-31,30],[-19,-38],[5,-34]],[[2674,4438],[31,-9],[-10,-27],[63,-74],[-39,-46],[21,-148]],[[2740,4134],[53,18],[18,-16],[41,-19],[49,1],[18,-13],[47,0],[58,-28]],[[6290,9068],[2,30],[24,14],[-4,32],[10,35],[-21,22],[19,19],[21,-9],[12,19],[23,9],[-6,48],[25,46],[3,27],[-19,22],[-27,-3],[-25,17],[-27,6],[1,13],[-51,7],[-19,19],[-14,71],[-19,30],[1,27],[-17,32],[-16,8],[-16,45],[-27,36],[-27,-9],[-36,22],[-45,-21],[-11,9],[7,27],[-12,23],[-73,5],[-28,38],[19,39],[-70,-6],[-53,7],[-14,-15],[-27,-3],[-17,-14],[-60,8],[-26,21],[-25,0],[-47,-97],[-11,3],[-41,-44],[-16,-1],[-25,-33],[3,-17],[-36,-42],[-5,-28],[-21,-9],[-6,15],[-38,-2],[-30,-29],[-39,-4],[-4,-18],[-55,-6],[-7,-15],[-3,-61],[-11,-16],[-62,-45],[0,-18],[-23,-30],[-18,-49],[-18,2]],[[5112,9277],[-52,-473]],[[5060,8804],[69,-28],[168,-37],[51,54],[24,16],[60,24],[50,10],[40,-5],[82,-24],[60,11],[106,38],[37,25],[26,63],[49,66],[20,80],[9,14],[54,0],[55,20],[41,-4],[27,-10]],[[6088,9117],[98,4],[27,-30],[47,-23],[30,0]],[[7688,5592],[20,9],[33,-39],[55,-4],[27,-15]],[[7823,5543],[11,35],[-2,40],[49,7],[21,-24],[56,36]],[[7958,5637],[-23,23],[0,14],[-27,30],[20,58],[27,7],[-3,26]],[[7858,5905],[-59,-38],[-25,-11],[-22,-21],[-25,1]],[[7727,5836],[5,-62],[-34,-24],[-9,-27],[-24,-14],[-6,-75],[11,-1],[18,-41]],[[2248,6236],[37,80]],[[1786,6164],[108,-103],[50,-1],[47,-14]],[[8715,6182],[-6,-69]],[[8709,6113],[-7,-54],[14,-20]],[[8716,6039],[24,-9],[16,12],[32,-5],[15,-14],[40,9],[24,-8]],[[8867,6024],[12,23],[-15,5],[38,25],[44,42],[33,-5],[11,29],[0,36]],[[4784,5212],[-14,43],[-37,61],[-46,17],[-32,-8],[-21,-21],[-44,36],[-3,27],[-33,15]],[[4554,5382],[-23,-26],[-11,-52],[-33,-5],[-1,-27],[-12,-17]],[[4516,5033],[151,33],[-5,33],[24,14],[-10,32],[32,-7],[39,30]],[[4747,5168],[-2,23],[16,21],[23,0]],[[5035,7298],[-33,28],[-32,11],[-32,31],[-65,84]],[[4873,7452],[-14,8],[-61,-1],[-1,-24],[-47,-29],[-75,-68],[20,-122]],[[4695,7216],[97,25],[20,-4],[27,20],[57,-12]],[[4896,7245],[36,25],[86,-20]],[[5018,7250],[17,48]],[[7823,9362],[-13,-22],[3,-32],[-13,-16],[16,-63],[-11,-23],[-23,-8],[-21,-45],[7,-29],[-9,-26],[-1,-41],[-25,-1],[-12,-54],[34,-32],[9,-39],[21,2],[29,-38]],[[7814,8895],[31,21],[54,-41],[62,0],[13,-11]],[[8019,8871],[25,11],[7,27],[52,8],[23,31],[38,1],[35,-9],[15,22],[4,37],[31,51],[-46,97],[-26,15],[-12,24],[-30,99],[-13,2],[-8,30],[17,30],[1,43],[-9,35],[-30,18],[-10,18],[16,45],[123,149]],[[8222,9655],[-2,8],[35,59]],[[8255,9722],[-28,12],[-23,32],[-37,25],[-34,5]],[[8694,7927],[70,-46],[49,0],[41,-21],[30,-6]],[[8884,7854],[77,-16],[26,-20],[32,-39]],[[9019,7779],[-24,36],[-10,85],[-11,24],[4,30],[36,13],[16,34],[18,16]],[[8834,8052],[-20,-10],[-53,3],[-24,41],[4,32],[-43,32],[-39,13]],[[8659,8163],[-70,-32],[22,-85],[-10,-20],[-26,-18]],[[8618,7318],[146,-2],[23,15],[17,-21]],[[8804,7310],[9,11],[-1,41]],[[8812,7362],[-41,30],[-20,3],[-13,33],[-12,-5],[-16,24],[-28,15]],[[8682,7462],[-39,0]],[[8643,7462],[18,-42],[23,-15],[-14,-20],[11,-32],[-16,-14],[-41,4],[-6,-25]],[[7626,3666],[7,67],[13,14],[-10,16],[3,48],[11,54]],[[7650,3865],[-43,-15]],[[7607,3850],[-193,1]],[[7414,3851],[14,-18],[-4,-23]],[[7571,3623],[33,6]],[[2344,4136],[-17,4],[-26,55],[-18,7],[7,23],[23,6],[-5,48],[19,7],[9,34],[-8,20],[39,6],[12,32]],[[2379,4378],[-96,12],[-55,31],[-164,115],[-45,0],[-20,20],[-20,4],[-20,26],[-30,15]],[[1929,4601],[-42,-28],[-34,-50],[-41,-24],[-3,-51],[-11,-30],[-24,-8],[-17,-20],[-61,-14],[-41,-27],[-30,-4],[-26,-22],[-8,-21],[-31,6],[-26,-13],[-35,-2],[-7,-17],[-46,-31],[-28,-28],[-38,-7],[-34,-37],[-45,-12],[-24,-37],[-15,-5],[-23,-34],[-11,4],[-57,-31],[1,-15],[-51,-42],[-21,-31],[-26,-10],[-43,-52],[-54,-14],[-10,-29],[-48,-24],[-20,-30],[-122,-98],[-29,-36],[-53,-41],[-32,-40],[-34,-12],[-45,-53]],[[584,3531],[36,-28],[-4,-18],[45,-46],[-9,-73],[-48,-45],[-10,-34],[-17,-4],[-4,-47],[-34,-12],[-41,-29],[20,-13],[6,-31],[17,-18],[21,3],[31,62],[48,6],[26,53],[45,10],[51,-26],[41,23],[24,24],[66,-10],[32,11],[3,17],[49,18],[25,55],[28,3],[33,43],[29,23],[0,11],[34,8],[24,-17],[16,8],[10,-15],[37,12],[22,27],[27,0],[45,33],[5,19],[50,20],[17,25],[15,0],[32,39],[17,3],[41,43],[15,-5],[27,14],[33,-12],[43,-6],[34,23],[18,41],[18,15],[51,15],[4,16],[69,26],[8,17],[44,10],[22,48],[17,4],[0,44],[24,-4],[47,27],[12,-2],[47,35],[13,-5],[16,33],[29,0],[0,22],[29,8],[25,22],[11,-2],[36,27],[60,19],[24,-6],[38,17],[27,26],[18,5]],[[8336,5942],[-51,18],[-52,24],[-39,-2],[-16,30],[-32,-5]],[[8140,5912],[35,-12],[20,-17]],[[8332,5930],[4,12]],[[8046,5707],[-22,-18],[-28,5],[-31,-34],[-7,-23]],[[7823,5543],[-6,-18],[33,-59]],[[7850,5466],[9,30],[17,6],[51,-9],[6,13],[28,-1]],[[7961,5505],[-6,26],[14,7],[2,36],[32,-1],[25,24]],[[8028,5597],[13,23],[33,9],[2,20],[-27,34],[-3,24]],[[7981,7204],[-24,-36],[-8,-27],[-42,-2]],[[7907,7139],[6,-42],[-19,4]],[[7894,7101],[-66,-135],[-79,-59],[-12,-18],[-61,-19]],[[7676,6870],[134,-47],[109,-92],[10,-16]],[[7929,6715],[21,-10],[21,41],[39,38],[25,-1],[-4,40]],[[8031,6823],[1,14]],[[8575,6082],[-1,13]],[[8574,6095],[-35,59]],[[8539,6154],[-23,-9],[-14,27],[-42,-6],[-32,-22],[3,-17],[-24,-8]],[[8407,6119],[-22,-16],[-2,-16]],[[8383,6087],[42,-1]],[[9813,6727],[-25,-32],[17,62],[-15,12],[-26,-6],[-27,15],[-26,25],[-29,7],[-27,-14],[-35,15],[-24,27],[-30,3],[-7,-34]],[[9559,6807],[0,-18],[17,-29],[-7,-15],[-15,14],[-27,3],[-7,-16],[-32,-15]],[[9488,6731],[-22,-4],[-5,-19],[-28,-10],[68,-59],[7,-21],[21,-9],[40,-52],[-26,-59],[24,-9],[-9,-33],[30,-14],[-13,-20],[34,-24],[17,-36]],[[9626,6362],[82,146],[105,219]],[[4903,3229],[-24,31],[47,46],[18,4],[26,25],[13,45],[-4,31],[15,22],[33,25],[7,34],[40,18],[27,-4],[38,7]],[[5139,3513],[26,22]],[[5165,3535],[-25,79],[-42,14],[-36,42]],[[5062,3670],[-26,-2],[-1,37],[-41,-4],[-2,9],[-42,16],[7,24],[-35,-1],[-21,-11],[-4,-20]],[[4897,3718],[-16,-26],[19,-31],[-6,-34],[11,-26],[-16,-45],[-30,25],[-43,14],[-52,-10]],[[4764,3585],[2,-12],[-25,-24],[-3,-16],[-32,-40],[-10,-31],[16,-38],[15,-11],[2,-33],[-20,-22],[-56,-11],[-15,-33],[17,-27]],[[4655,3287],[13,-11],[46,26],[43,0],[10,14],[20,-12],[4,-21],[29,-17],[43,-53],[40,16]],[[5804,4515],[32,-33],[13,1],[4,-26],[25,-3],[28,-67],[58,9],[41,-23],[24,2]],[[6029,4375],[32,26],[-25,13],[19,21],[3,45],[23,9],[11,30]],[[6092,4519],[23,-13],[18,5],[-10,23]],[[5802,4724],[-15,-9],[-11,-26],[8,-52],[13,-24],[7,-98]],[[8492,6304],[-21,-9],[-12,47],[-32,11],[-52,5]],[[8375,6358],[-36,6]],[[8339,6364],[-19,-20],[9,-40],[19,-36],[29,-74],[-12,-5],[13,-41],[29,-29]],[[8539,6154],[-9,25],[21,59],[22,28]],[[8573,6266],[-81,38]],[[4903,3229],[58,12],[45,-17],[61,25],[26,36],[26,-1],[41,16]],[[5160,3300],[2,22],[-21,29],[42,11],[-50,18],[12,26],[20,-8],[20,16],[6,31],[-12,35],[-27,9],[-13,24]],[[2379,4378],[69,0],[42,13],[9,27],[20,12],[-3,22],[25,14],[-1,15],[39,17],[18,-22],[27,-2],[50,-36]],[[2758,4635],[-36,35],[-88,70],[-39,6],[-9,26],[-55,71],[-12,76],[-12,4]],[[2507,4923],[-25,-24],[-1,-22],[-32,-9],[-13,-18],[-33,-14],[-24,0],[-79,-30],[-15,-20],[-37,-13],[-2,-9],[-51,-11],[-24,3],[-30,-29],[-61,-22],[-71,-42],[-66,-23],[-18,-13],[4,-26]],[[9170,8283],[45,-21],[11,-40],[0,-53],[20,-19],[-2,-33],[40,3],[23,-26],[51,4],[-2,-14],[28,-21],[-6,-11]],[[9384,8045],[20,7],[47,-2]],[[9451,8050],[-13,16],[22,48],[43,18],[14,16],[47,10],[-2,25],[-26,25]],[[9536,8208],[-26,43],[-47,18],[-49,43],[-39,25],[-38,2],[-14,14],[-57,24],[-28,-18],[-49,-7]],[[9189,8352],[-19,-69]],[[2431,5038],[-41,0],[-24,15],[-33,-3],[-11,15],[-17,-13],[-68,11],[-14,17],[-24,6],[-14,20],[-2,56],[-25,47],[-42,48],[-33,15],[-35,39],[-23,47]],[[2025,5358],[-17,34],[-36,30],[-25,10],[-10,21],[-40,-4],[-56,-20],[-70,-12],[-55,-26],[-46,-10],[-12,-10],[-39,-6],[-53,-17],[-70,-32],[-114,-12],[-26,-13],[-48,-3],[-46,-17],[-37,15],[-50,-10],[-70,-29],[-57,7],[-65,-24],[-21,-1],[-46,-25],[-104,-19],[-43,-20],[-70,-24],[-301,-173]],[[398,4968],[-26,-16],[8,-24],[-23,-17],[10,-23],[-8,-34],[15,-6],[34,11],[37,-21],[3,-10],[-58,-33],[-43,-50],[22,-17],[-20,-34],[34,-31],[-8,-9],[-51,-17],[15,-17],[-11,-22],[24,-1],[21,-19],[-27,-40],[-8,-61],[11,-21],[37,-8],[-4,-28],[13,-7]],[[395,4413],[47,31],[51,2],[31,21],[48,5],[15,16],[27,1],[38,37],[76,25],[25,33],[60,33],[11,-3],[34,28],[75,23],[45,24],[65,-14],[17,-11],[70,-4],[57,30],[49,7],[77,-5],[29,16],[38,-14],[13,-14],[17,9],[37,-6],[92,48],[30,28],[13,-3],[242,2],[182,88],[61,50],[27,7],[25,-11],[122,22],[-5,8],[20,81],[41,15],[26,-15],[31,3],[25,18],[44,-5],[8,19]],[[2667,6416],[51,33],[17,25],[-3,17],[29,44],[13,49],[3,75],[-26,-3],[-12,37],[-13,12],[-58,7],[-7,13],[-33,6],[-17,36],[-4,53],[14,40],[41,17],[18,-21],[18,15],[-12,18],[26,24],[42,12],[10,48],[37,-5],[3,25],[50,43],[25,-8],[51,3],[0,45],[32,24],[4,23]],[[2966,7123],[-19,-13],[-26,11],[-50,-15],[-24,5],[-9,-13],[-33,-4],[13,-18],[-23,5],[7,-21],[-32,-1],[-18,-12],[5,-16],[-27,15],[-14,-12],[-57,22],[-1,-21],[-26,9],[-19,-24],[-56,-16],[-40,7],[-15,-16],[-27,6],[-11,-13],[-47,-4],[-10,46],[-26,2],[-4,28],[-39,52],[-21,-25],[-32,-5],[-9,-14],[-23,4]],[[2253,7072],[-22,-14],[-29,0],[-13,14],[-58,-6],[-83,1]],[[2048,7067],[0,-257],[11,-1],[36,-49],[-2,-18],[-20,-22]],[[2416,6358],[49,-5],[3,-17],[50,-4],[32,10],[62,40],[2,19],[34,-5],[19,20]],[[7253,5044],[34,-48],[56,-18],[25,-28],[-2,-35]],[[7366,4915],[50,15],[20,-17],[14,7]],[[7450,4920],[-37,24],[20,30],[-14,49],[-19,-1],[1,32],[-13,12]],[[7388,5066],[-29,-5],[-36,38],[-70,-55]],[[9199,7008],[-18,34],[-26,7],[-28,33],[-34,28],[-37,15]],[[9056,7125],[-29,-23],[-22,-38],[-20,-81],[-15,-98],[-11,-41]],[[8959,6844],[0,-10]],[[9307,6876],[-64,50],[-20,21],[10,29],[-34,32]],[[2451,6150],[23,2],[51,41],[177,12],[34,-20],[99,35]],[[2835,6220],[-16,8],[9,49],[-27,-8],[-3,18],[-56,-10],[-10,25],[-29,4],[2,29],[24,19],[9,31],[-40,16],[-21,-1],[-10,16]],[[8155,5801],[-31,-4],[-45,15],[-11,-7],[-57,16]],[[7974,5801],[25,-30],[51,-48],[-4,-16]],[[8046,5707],[95,11]],[[8141,5718],[8,8],[-3,37],[9,38]],[[7144,9467],[-6,-42],[15,-25],[33,10],[29,-2],[12,-19],[-7,-25],[20,-35],[22,-10],[9,-32],[-20,-39],[-8,-62],[11,-34],[13,-73],[-11,-65],[7,-29],[-14,-25],[-18,-85],[9,-39],[-14,-63],[5,-6]],[[7231,8767],[17,-5],[9,-24],[39,-60],[16,3],[29,-19]],[[7341,8662],[152,105],[-14,12],[27,23],[47,7],[261,86]],[[7817,9984],[-25,15],[-39,-9],[-21,-22],[-18,0],[-26,-30],[-46,-12],[-42,-19],[-13,-14],[-49,-21],[-81,-4],[-4,-20],[21,-66],[0,-40],[-24,-15],[-57,6],[-44,-26],[-34,6],[-79,-16],[-9,-36],[24,-38],[5,-36],[-15,-30],[-72,-82],[-25,-8]],[[7311,4033],[-28,8],[-24,-11],[-39,22],[-44,1],[-36,42],[-26,57]],[[7114,4152],[-8,-22],[-45,4],[-14,39],[-25,-34],[-7,12]],[[7019,3892],[18,-17],[75,8],[27,38],[21,10]],[[7160,3931],[44,15],[22,33],[31,3],[18,-19],[21,8],[6,50],[9,12]],[[9053,5885],[-40,-11],[-1,-23],[-28,-11],[-45,34],[-28,3],[4,31],[-39,6]],[[8876,5914],[-20,-8],[32,-45],[-28,-19]],[[8854,5789],[25,-17]],[[5432,4480],[-14,64],[-29,32],[-22,40],[-19,12],[-19,38],[-38,27],[4,20],[-27,31],[-42,25]],[[5226,4769],[-1,-42],[-28,-22],[-25,-37],[-27,5],[-21,-10],[3,-21],[-25,-41],[22,-44],[35,-2],[-13,-33],[26,-23],[34,-58]],[[7961,5505],[47,-8],[18,-17],[47,1]],[[8073,5481],[-18,58],[6,22],[-33,36]],[[7627,5420],[23,8],[9,18],[30,13],[12,32]],[[7701,5491],[1,63],[-14,38]],[[7688,5592],[-62,-29],[-62,-23],[-15,12],[-20,-20]],[[6566,2713],[-56,14],[-32,30],[-28,10],[-24,23],[-22,-6],[-23,31],[-24,12],[-37,33],[-11,55],[-25,-8],[-33,13],[-34,31],[-19,7],[0,18],[-22,8],[-22,50],[19,36],[-11,30]],[[6162,3100],[-53,-42],[9,-86],[-11,-22],[-43,-32],[-64,3]],[[5646,2899],[6,-6],[27,-249],[42,6],[26,-10],[58,12],[16,-12],[62,-24],[23,30],[25,2],[21,21],[33,-4],[13,10],[33,0],[30,27],[17,40],[52,-13],[13,-31],[23,-3],[43,12],[14,35],[13,1],[40,-33],[-7,-13],[20,-22],[33,14],[-7,17],[47,17]],[[6362,2723],[38,-10],[19,-33],[12,14],[56,-2],[4,-11],[27,18],[40,4],[8,10]],[[9197,6302],[14,21],[21,-6],[33,-41],[2,-36],[103,-47],[9,-46],[-62,-61],[29,-7]],[[9346,6079],[42,-10],[12,6],[1,-28]],[[9401,6047],[87,117],[47,56]],[[9535,6220],[9,18],[-39,32],[-43,-27],[-42,7],[-32,-14],[-27,6],[-16,18],[-3,33],[14,28]],[[9338,6530],[-10,2],[-39,58],[-32,29],[-21,-6],[-58,10],[-27,31],[-20,10]],[[9078,6579],[1,-25],[-89,-54]],[[4747,5168],[9,-27],[-7,-15],[18,-56],[-22,-10],[-20,-38],[41,-12],[13,-50],[36,-28],[38,-19],[29,-55],[29,-10],[23,-42]],[[4934,4806],[-3,63],[15,-3],[9,27],[12,-8],[23,20]],[[4990,4905],[18,31],[-18,9],[-1,24],[21,63],[2,61],[34,9],[7,24]],[[5053,5126],[-71,14],[-24,-7],[-12,17],[-26,-7],[-69,34],[-32,2],[-35,33]],[[9535,6220],[91,142]],[[9488,6731],[-42,12],[-14,42],[-32,-6],[-19,10]],[[8659,8163],[-3,29]],[[8003,8241],[18,-42],[-18,-12],[40,-77],[2,-39],[-48,-3],[37,-19],[10,-40],[-10,-74],[-27,-37],[-17,9],[-45,-35],[2,-18],[-25,-43]],[[7922,7811],[31,1],[208,47],[28,-16],[68,-8],[12,32],[173,19],[5,-21]],[[7695,2287],[-26,12],[-41,-41],[-13,7],[-57,-38],[-170,-45],[-120,-56]],[[7268,2126],[23,-43],[69,-61],[25,-40],[-19,-22],[20,-37],[36,11],[-21,-64],[46,-45]],[[7447,1825],[0,36],[51,7],[9,18],[47,28],[11,-11],[45,-7],[31,-18]],[[7641,1878],[15,53],[24,37],[28,16]],[[7708,1984],[17,67],[3,44],[47,1],[3,18],[-30,32],[19,138]],[[7734,2305],[-39,-18]],[[9064,7778],[30,5],[35,-13]],[[9019,7779],[45,-1]],[[2344,4136],[54,9],[23,24],[26,9],[15,-13],[33,7],[24,-13],[10,19],[25,-5],[57,-24],[30,5],[6,-18],[27,23],[66,-25]],[[8339,6364],[-4,24],[-21,18],[-8,29]],[[8306,6435],[-17,12],[-23,-11],[-24,8],[-18,-37],[-43,-4],[-23,6],[-23,27]],[[8135,6436],[3,-32],[-34,-12],[3,14],[-25,3],[-35,20],[-37,4],[4,49]],[[7882,6472],[10,-31],[30,-21],[49,-55]],[[7893,6282],[-7,-10]],[[7886,6272],[9,-30],[25,-18],[26,-57]],[[8146,6045],[15,-9],[31,27],[-16,38],[18,7],[13,38],[44,10],[52,-87],[75,-23]],[[8378,6046],[12,12],[-7,29]],[[6899,7668],[15,-18],[37,-23],[19,0],[18,17],[22,-10],[48,-6]],[[7058,7628],[13,58],[19,21],[-9,15],[13,57],[22,38],[-13,6],[22,35],[-24,12]],[[7101,7870],[-135,-18],[-20,21]],[[6816,7869],[-1,-53],[27,-60],[34,-7],[3,-32],[20,-49]],[[7217,3369],[28,21]],[[7245,3390],[24,36],[-21,114],[8,49]],[[7256,3589],[-27,-7],[-14,11],[-9,-33],[-21,-9],[-4,-55],[-35,-51]],[[7146,3445],[71,-76]],[[7388,3692],[-1,-26],[-34,12],[6,-11]],[[7359,3667],[-9,-40],[4,-25],[-18,-26],[4,-54],[22,-9],[7,-18],[36,-2],[13,-55],[32,1],[7,13]],[[7457,3452],[-11,18],[23,-4]],[[7469,3466],[31,8],[12,14]],[[7512,3488],[0,61],[-13,48],[-15,20],[7,21]],[[1767,7565],[-31,28],[-47,8],[-38,33],[-33,13],[-82,0],[-65,10],[-1,12],[-29,-5],[-13,11],[-12,36],[-66,21],[-31,24],[-11,53],[-18,29],[-32,7],[-24,30],[0,39],[-10,15],[8,41],[-9,13],[51,47],[4,19],[-35,32],[-2,55],[-46,45],[-45,26],[-10,47],[-47,43],[0,63],[-39,33],[-48,-20],[-46,-29],[-36,0],[23,-24],[3,-81],[-30,-55],[-77,-11],[-24,-135],[-55,-49],[-63,-18],[-49,-31],[-93,-49],[-73,-21],[-24,-16],[-12,-24],[12,-33],[-16,-31],[-30,-21],[-15,-56],[-22,15],[-37,-29],[-7,-126],[-80,-4],[-135,-198],[-93,-132],[-27,-81],[9,-30],[40,-5],[8,-89],[92,-59],[96,16],[108,-32],[45,-49],[104,-21]],[[502,6865],[4,47],[92,8],[21,-12],[13,23],[30,10],[56,-3],[43,11],[22,33],[87,29],[58,3],[66,23],[11,-6],[18,-52],[81,17],[191,95],[56,-12],[58,-2],[20,-23],[29,-2],[49,20],[35,4],[13,-13],[15,10],[52,8],[22,-7],[20,15],[11,24],[40,1]],[[1715,7114],[2,15],[35,35],[9,21],[-9,24],[-1,55],[19,14],[-38,12],[-6,30],[-28,39],[53,53],[-20,35],[9,31],[-9,50],[36,37]],[[7603,4702],[-12,-29],[38,-50],[-28,-34],[20,-25],[36,0],[18,-19]],[[7675,4545],[20,5],[23,-16]],[[7718,4534],[17,50],[-7,41],[35,38],[14,38],[15,13]],[[7792,4714],[-65,-10]],[[7727,4704],[-44,14],[-80,-16]],[[7383,7053],[-15,-46],[-48,-28],[-25,-1],[-48,14],[-16,-10]],[[7374,6880],[35,3],[64,35],[60,50]],[[7533,6968],[-38,32],[-12,27],[10,16],[-18,21],[-29,12]],[[7446,7076],[-37,-2],[-26,-21]],[[4565,6755],[20,24],[-13,15],[0,44],[26,62],[-34,92],[28,26],[17,35],[21,18],[0,59],[-15,42],[-15,-8],[2,23]],[[4602,7187],[-21,12],[-36,2],[-52,-9],[-22,27],[-4,43],[-27,39],[-12,30],[-17,-7],[-15,27],[18,34],[-13,38],[-12,4],[-3,28],[10,17],[-24,6]],[[4372,7478],[-88,-84],[-5,31],[-51,43],[-55,11],[-44,-12],[5,-29],[-35,-15],[27,-34],[-43,-51],[-18,1],[-18,-19],[7,-40],[-12,-22],[6,-52],[17,-37],[-98,31],[82,-255],[-27,-14],[-3,-59],[11,-13]],[[4030,6859],[44,-39],[10,-24],[36,-27],[29,-5],[-3,-26]],[[4146,6738],[72,11],[20,11],[21,-9],[66,4],[18,-23],[29,-4],[55,-36],[17,51],[29,-31],[29,-9],[29,12],[30,-3],[4,43]],[[8729,9563],[-25,1],[-12,-32],[-39,-47],[0,-141],[-15,-13],[6,-27],[-14,-34],[3,-18],[42,7],[-10,-33],[12,-30],[-9,-94],[-58,-47],[-9,-60],[-8,-13],[159,41]],[[8752,9023],[-17,139],[73,-61],[50,9],[34,23],[28,-7],[18,10],[43,-6],[72,33]],[[9053,9163],[-29,30],[-10,33],[-40,75],[8,16],[-9,30],[-32,32],[-3,24],[16,16],[-22,21],[40,34],[-14,34],[-23,25],[-42,-11],[-44,-37],[-50,11],[-58,45],[-12,22]],[[7724,4113],[-54,24],[-90,29],[1,20]],[[7581,4186],[-2,17]],[[7484,4235],[-26,-113],[-9,-76]],[[8010,5863],[76,-4],[54,-44],[47,19],[0,14],[26,8]],[[8213,5856],[-6,8]],[[5062,3670],[-6,8],[24,39],[9,0],[9,46],[25,73],[-31,7],[21,35],[49,2],[10,30],[-16,11],[23,25]],[[5179,3946],[-46,3],[-104,47]],[[5029,3996],[-150,-29],[-87,-42]],[[4785,3814],[42,-49],[33,-31],[31,-4],[6,-12]],[[4089,4385],[-14,19],[-50,0],[-35,28],[-29,9]],[[3961,4441],[-30,-33],[9,-90],[-37,-64],[-3,-25],[-103,-134],[23,-11]],[[3820,4084],[43,-17],[13,-17],[45,-31]],[[4187,4027],[97,94]],[[6788,1673],[20,18],[29,-5],[-6,-16],[21,-16],[39,8],[10,12],[50,0],[1,-21],[22,8],[8,30],[53,-8],[8,-25],[18,-7],[20,15],[44,-8],[21,4],[9,-23],[84,4],[6,-19],[44,-18],[24,-2],[59,31]],[[7372,1635],[19,-15],[27,5],[4,13],[27,2],[39,-53]],[[7488,1587],[-3,28],[-14,22],[9,37],[-10,21],[31,105],[-54,25]],[[7268,2126],[-27,8],[-16,-41],[-16,1]],[[7209,2094],[-36,-13],[-20,-32],[-12,17],[-47,-46],[-23,-67],[-18,-9],[-4,-27],[-15,-7],[-25,28],[-42,-62],[-31,-28],[17,-36],[-4,-19],[-77,18],[-50,-12],[-9,-32],[-32,-75],[7,-19]],[[9028,7687],[31,43],[-8,31],[13,17]],[[8884,7854],[-7,-245]],[[8877,7609],[151,78]],[[7201,5931],[-15,-29],[-36,-13],[-31,6],[-11,-11],[-39,3],[-8,-47],[-38,-27],[-33,-51],[-35,-11],[-31,0],[-2,-35],[-36,-34],[-85,20],[-53,-23],[-16,-24]],[[6599,5502],[-8,-7],[16,-42],[41,-58],[22,-41]],[[6670,5354],[16,22],[45,-19],[23,3],[-6,27],[25,15],[132,-9]],[[6905,5393],[59,68],[43,-1],[40,-9],[38,8],[45,22],[3,33],[96,57]],[[7229,5571],[-31,59],[37,65],[42,-43]],[[7277,5652],[63,92],[-10,19],[21,73],[-5,58]],[[7346,5894],[-13,21],[-24,2],[-30,23],[-43,-11],[-18,7]],[[7218,5936],[-17,-5]],[[4707,4220],[-32,5],[-29,18],[-39,3],[-28,-22]],[[4705,4038],[40,2],[-13,41],[21,76],[15,16],[-46,44],[-15,3]],[[7512,3488],[18,-11],[20,24],[41,-4],[5,-11],[36,12],[7,14],[27,-16],[27,19],[-6,40]],[[5760,4963],[21,10],[4,33],[16,-1],[32,24],[31,3],[5,26],[26,14],[6,32],[9,-8],[14,22],[-1,26]],[[5923,5144],[-22,6],[-18,-12],[-16,17],[-11,33],[-19,21]],[[5837,5209],[-114,-95],[-48,24],[-15,18],[-37,11],[-17,47],[-18,-22],[-33,-5],[-8,-46],[18,-33],[-10,-56],[-110,-43]],[[5445,5009],[18,-19],[22,-5],[12,-33],[0,-37],[13,-6]],[[7256,3589],[13,33],[34,11],[10,28],[46,6]],[[7414,3851],[-5,45],[27,66],[-7,37],[20,47]],[[7449,4046],[-51,14],[-50,6],[-37,-33]],[[7160,3931],[97,-110],[-15,-41],[-14,-16],[0,-24],[-27,-17],[-19,14],[-34,-13],[-1,-25],[-18,-16],[-33,-5],[-13,-25],[21,-33],[-10,-32]],[[7094,3588],[-23,-56],[10,-23],[-9,-54]],[[7072,3455],[55,-24],[19,14]],[[5051,6708],[-13,21],[-6,68],[-54,48],[-70,55],[-1,20]],[[4907,6920],[-24,-37],[-12,21],[-12,48],[-34,1],[-7,26],[-41,14],[5,77],[-17,8],[-6,52],[-15,5],[-49,81]],[[4695,7216],[-93,-25],[0,-4]],[[4414,5578],[8,-28],[48,-34],[3,-17],[34,-37],[-7,-2],[7,-43],[35,-23]],[[4542,5394],[29,14],[19,-9],[30,15],[24,-2],[43,54],[39,-6],[10,19],[37,5]],[[4773,5484],[-30,38],[-18,1],[-12,60],[-27,50],[6,8],[-24,81]],[[4668,5722],[-34,24],[-62,-14],[-45,20],[-58,10],[-37,-25],[-37,0]],[[6275,6003],[-203,-18],[-14,8]],[[6030,5830],[26,-82],[1,-37],[16,-57]],[[7722,4177],[1,42],[55,25],[22,1],[28,27]],[[7818,4376],[-53,23],[0,35],[14,-2],[-6,23],[23,55],[-25,6]],[[7771,4516],[-15,21],[-10,-18],[-28,15]],[[7675,4545],[-16,-25],[-29,-11]],[[7630,4509],[17,-17]],[[7647,4492],[28,-2],[-4,-40],[13,-7],[-7,-47],[-20,-14],[17,-15],[-12,-29],[31,-24],[-17,-12],[-31,-104]],[[7645,4198],[21,-18],[37,10],[19,-13]],[[6878,615],[25,-2],[31,-40],[54,-13],[59,-62]],[[7047,498],[38,-2],[44,22],[41,-5],[11,-13],[20,5],[39,-7],[34,23],[35,0],[53,18],[5,11],[40,21],[25,3]],[[6990,711],[-44,16],[-52,-20],[-15,-38],[6,-35],[-25,-20]],[[6860,614],[18,1]],[[7630,4509],[-23,-3],[-1,22],[-47,19],[0,12],[-29,10],[-10,-12],[-53,-3]],[[7451,4534],[6,-26],[-23,-26],[3,-24],[48,-41],[-19,-47],[14,-5],[2,-61],[14,-15]],[[7612,4464],[28,-6],[7,34]],[[4925,5792],[-2,40],[50,18],[-25,33],[-9,65],[-60,75],[-2,17],[-34,19],[-40,-5],[-59,24],[-59,-12]],[[4573,5996],[-19,0],[0,-24],[-18,-1],[-60,-25],[-44,-34],[-54,-7],[-33,19],[-17,0],[-11,19],[-19,-3],[-35,12]],[[4668,5722],[106,1],[77,11],[85,-5]],[[5198,6787],[5,18],[-18,41],[-59,82],[-33,52],[-53,45],[-22,34],[-1,35]],[[5017,7094],[-38,-47]],[[4979,7047],[-32,-30],[-31,-62],[-9,-35]],[[3725,6443],[-4,47],[-34,38],[7,37],[-23,10],[-11,86],[-14,-6],[-19,30],[-20,79],[21,29],[-25,20],[-34,7],[5,15],[-18,45],[9,31]],[[3496,6733],[-2,-64],[28,-38],[9,-41],[-40,-30],[-8,-59],[11,-55],[55,-40],[18,-81],[53,-37],[7,-21],[-40,-29],[4,-13],[-23,-37],[-6,-63],[7,-21],[30,-30]],[[3599,6074],[53,29],[91,25],[6,14],[30,3],[25,-36],[29,17],[69,-2]],[[3902,6124],[11,33],[-1,32],[-18,8],[3,67],[-55,32],[-5,13],[-25,-4],[-8,15],[5,47],[-17,-2],[-19,41],[-56,11],[8,26]],[[8137,6698],[-35,54],[-28,33],[-43,38]],[[7929,6715],[14,-21]],[[4192,4797],[-26,-9],[-13,12],[-33,-26],[4,-30],[-11,-13],[5,-49]],[[4118,4682],[-8,-112],[-10,-16],[11,-26],[-11,-39],[-19,-39],[-41,8],[-14,13],[-39,8],[-26,-12],[-36,0]],[[3925,4467],[36,-26]],[[8233,4584],[-45,-4],[-25,15],[-37,73],[-33,11],[-10,25],[-15,7],[-26,-35],[1,-16],[-31,-17],[-6,-16],[-79,-14],[-7,-28],[-30,-2],[-31,14]],[[7859,4597],[-42,-6],[-28,-60],[-18,-15]],[[8238,4577],[-5,7]],[[6881,3737],[15,-31],[-1,-40],[61,-22],[17,5],[26,-28],[25,18],[70,-51]],[[6941,3935],[-10,-32],[-14,-4],[-17,-42],[-10,-69],[-18,-23],[9,-28]],[[8027,3350],[39,14],[8,-19],[44,-30],[20,-24],[17,-1],[25,20],[27,7]],[[8207,3317],[-1,100],[-22,65],[-11,143],[-30,16],[-7,20],[-4,75],[4,50],[30,112]],[[8166,3898],[-8,17],[-35,-22],[-77,-10],[4,-13],[-38,-27],[-20,-42],[-84,-28],[-81,16],[-19,13],[7,31],[-16,17],[-30,6],[18,31],[-15,6],[27,41],[10,30]],[[7672,3995],[-27,-42],[5,-14],[-15,-45],[-13,-5],[-15,-39]],[[7650,3865],[66,-67],[49,-15],[10,-13],[44,-20],[5,5],[64,-38]],[[7888,3717],[32,-65],[15,-2],[8,-102],[34,14],[-16,-28],[24,-17],[-11,-21]],[[8959,6844],[-40,34],[-19,3],[-45,33]],[[8855,6914],[-30,-8],[1,-28],[-19,-13],[1,-28],[15,-18],[-8,-75],[-116,-31]],[[7886,6272],[-56,1],[4,-11],[-36,-32],[-8,-19],[-29,-19]],[[7761,6192],[12,-11],[-38,-32],[1,-21]],[[7736,6128],[10,-17],[27,-4],[17,-73],[9,-16]],[[7799,6018],[14,17],[85,27],[20,20],[37,-12]],[[7324,4319],[38,-4],[7,-17],[48,-25],[28,-5],[11,-24],[28,-9]],[[7440,4516],[-33,-23],[-28,-61]],[[7379,4432],[-35,-20],[3,-27],[-10,-22]],[[7761,6192],[-123,233],[-78,-24]],[[7560,6401],[-14,34],[-32,31],[-6,44],[-39,31],[-56,18]],[[7413,6559],[-48,-10],[-9,17],[-32,-36],[-41,-61],[-60,-35],[-17,27],[-26,9],[-16,19]],[[7080,6306],[5,-18],[-19,-25],[-25,4],[-73,-55]],[[6968,6212],[11,-30],[-3,-25],[23,-30]],[[6999,6127],[21,4],[35,-16],[36,-41],[0,-14],[44,-35],[12,-38],[39,-17],[15,-39]],[[7218,5936],[-6,8],[117,65],[28,20],[12,-5],[34,21],[78,2],[82,31],[58,37],[35,7],[46,-12],[34,18]],[[6957,5099],[32,4],[65,-10],[22,37],[47,-5],[17,-14]],[[7140,5111],[7,11]],[[7147,5122],[45,23],[22,34],[-2,21],[-31,24]],[[7181,5224],[-71,72],[-48,30],[-72,-6],[-34,14]],[[6956,5334],[13,-38],[-15,-29],[18,-62],[-1,-58],[-20,-22],[6,-26]],[[6346,4585],[23,3],[17,-12],[25,11]],[[6411,4587],[-50,39],[4,21],[-18,21],[-12,42],[1,28],[19,11],[5,55],[14,18],[3,62],[-11,41],[-43,44],[10,34],[-47,34],[-14,31]],[[6272,5068],[-19,35],[-37,18],[-29,-2],[-25,50],[-36,40]],[[6126,5209],[-99,-32],[-85,5],[10,-18],[-29,-20]],[[5161,6307],[29,-8],[15,-35],[29,-43],[-25,-36],[10,-34],[30,-65],[68,-13],[51,2],[84,24]],[[5452,6099],[25,-15],[42,1],[29,-12],[12,-31]],[[5560,6042],[18,35],[-12,25],[11,10],[-18,35],[8,46],[25,18],[-4,24],[16,24],[49,32]],[[5653,6291],[-67,24],[-56,38]],[[5530,6353],[-20,-10],[-127,-27],[-180,6],[-42,-15]],[[8492,6304],[35,17],[13,35],[34,53]],[[8574,6409],[-47,0],[-20,17],[-5,24],[16,31],[-1,22],[32,15]],[[8392,6516],[19,-28],[1,-48],[-37,-82]],[[5017,7094],[65,9],[5,11],[114,-3],[-12,-20],[41,-8]],[[5230,7083],[-4,20],[18,41],[-9,63],[13,43],[-11,5]],[[5237,7255],[-29,-4],[-69,-24],[-52,-10],[2,-9],[-71,42]],[[5018,7250],[18,-37],[-1,-16],[-49,-65],[31,-38]],[[7488,1587],[14,-4],[69,-70],[36,17],[41,-4],[-13,-27],[22,-5]],[[7657,1494],[27,42],[-7,36],[18,34],[31,18],[52,-15],[41,-25],[19,0],[-41,65],[-18,7],[-58,77],[-41,28],[10,31],[26,2],[33,24],[-37,14],[-61,35],[-10,11]],[[6999,6127],[-61,-24],[-16,33],[-24,18],[-7,21],[-102,25],[-14,-7],[-44,8],[-12,-16],[-28,7],[-41,-12],[-7,-22],[-22,-16],[-21,4],[-19,-20],[-28,-63],[-56,-47]],[[7888,3717],[-57,-32]],[[7765,3569],[3,-15],[40,1],[7,-25],[-17,-33],[-21,-66],[-28,-40]],[[7749,3391],[8,-21]],[[7757,3370],[49,13]],[[8184,3996],[18,75],[21,48],[-14,33],[6,50]],[[8215,4202],[-7,-17],[-26,4],[-9,-18],[-50,2],[-69,-13],[-25,-17],[-67,11],[-46,-27]],[[7916,4127],[-28,-22]],[[7854,3954],[206,-29],[44,58],[45,26],[8,-14],[27,1]],[[6016,5529],[-34,-9],[-24,31],[-37,6],[-135,-25]],[[5765,5320],[-32,-18],[2,-19],[29,-11],[19,5],[39,-30],[15,-38]],[[6126,5209],[-1,21],[85,72],[97,97]],[[7188,4343],[-10,11],[-48,18],[-20,-16],[-20,17],[-33,-19],[-21,-52],[-26,-16],[-12,-36],[33,-45],[-18,-31],[2,-23]],[[7114,4152],[8,-1],[15,47],[-3,22],[14,37],[42,-11]],[[7695,2287],[-19,36],[-75,28],[-57,10],[-8,15],[-145,36],[-38,4],[-31,-12],[-32,3]],[[7290,2407],[-22,-19],[-55,-4]],[[7213,2384],[-23,-25],[15,-5],[41,-38],[6,-23],[23,-25],[-29,-32],[1,-51],[-32,-16],[-25,-34],[19,-41]],[[4873,7452],[-14,99],[289,240]],[[5148,7791],[-102,56],[-89,1],[-20,17],[1,19],[-22,23],[-13,41],[-18,14],[-5,36],[-22,19],[11,19],[-16,50],[3,27],[-46,38],[1,32],[-29,57],[-266,74]],[[4516,8314],[16,-19],[8,-35],[12,-9],[4,-32],[-33,-34],[42,-34],[-7,-20],[25,-6],[-8,-11],[24,-14],[-5,-37],[22,-13],[-32,-38],[-17,-32],[3,-22],[29,-56],[-3,-62],[6,-23],[-18,-11],[-2,-49],[-21,-41],[-30,5],[-34,-8],[-108,-132],[-17,-103]],[[7233,3300],[52,-214],[41,-14],[24,-51],[24,8]],[[7374,3029],[27,-19],[24,35],[36,15],[-5,34],[29,-3],[6,23],[19,-10]],[[7560,3125],[2,38],[27,44],[-8,20],[7,25],[-19,7],[18,59],[-1,37]],[[7586,3355],[-29,58],[-52,21],[-36,32]],[[7457,3452],[1,-20],[-49,-12],[-11,7],[-26,-15],[-48,21],[-66,-46],[-13,3]],[[7217,3369],[16,-20],[0,-49]],[[7575,1177],[14,33],[-3,18],[44,15],[32,-23],[16,10],[8,32],[-15,16],[12,36],[-11,12],[1,48],[11,35],[11,3],[35,-29],[-11,30],[6,59]],[[7725,1472],[-30,-31],[-21,-4],[-12,24],[8,14],[-13,19]],[[7372,1635],[9,-28],[-15,-61],[6,-48],[-47,21],[-59,9],[-23,-8],[-32,-28],[-30,27],[-25,-25],[-28,2],[3,-23],[-23,-48],[-16,5],[-27,-15],[8,-12],[-21,-23],[4,-11],[-22,-30],[13,-52],[-10,-7]],[[7037,1280],[12,-20],[58,-48],[27,-16],[4,-23],[29,-22],[22,8],[33,-12],[5,-17],[71,-13],[19,17],[51,1],[25,17],[33,1],[24,31],[39,-6],[40,23],[22,3],[4,-20],[20,-7]],[[7467,4554],[21,23],[22,64],[21,16],[-1,13],[26,39]],[[7556,4709],[-13,17],[-37,12],[-44,-20],[-32,-25]],[[7430,4693],[-29,-41]],[[6236,3112],[15,7],[14,33],[46,-3],[61,9],[27,-28],[21,-6],[16,25],[-4,-32],[14,16],[18,-19],[47,13],[17,-17],[26,12],[36,-4],[21,-21]],[[6611,3097],[39,-17],[69,41]],[[6719,3121],[2,27],[116,76],[140,-49],[42,121]],[[7019,3296],[-19,52],[-26,11],[-5,19]],[[6361,3326],[-128,-129],[-30,-68],[33,-17]],[[9131,6084],[36,-26],[22,-32],[-9,-6],[24,-23],[38,-6],[58,50],[38,11],[8,27]],[[9097,6197],[13,-21],[25,-9],[-16,-8],[-10,-30],[22,-45]],[[6978,1112],[-8,15],[14,46],[-12,11],[-14,42],[24,21],[-1,16],[-35,-9],[-10,38],[-12,-8],[-47,44],[-3,15],[-22,3],[-29,22],[-19,-12],[-39,9],[-5,16],[-22,-5],[-17,25],[-27,3],[-26,33],[11,30]],[[6679,1467],[-79,22],[-13,-10],[-5,-31],[-20,-46],[-30,-21],[-18,-60],[-13,-24],[17,-25],[-6,-34],[-18,-27],[7,-33],[20,-7],[-6,-43],[-13,-22],[25,-32]],[[6527,1074],[130,19],[95,0],[46,6],[18,13],[69,0],[22,18],[36,-20],[35,2]],[[8503,5520],[103,-16],[11,7],[61,1]],[[8678,5512],[-30,41],[-93,48],[-26,45]],[[8529,5646],[-24,-56],[17,-16],[-3,-30],[-16,-24]],[[7586,3355],[15,-30],[22,20],[17,-19],[79,42],[30,23]],[[7583,2593],[26,3],[-21,19]],[[7588,2615],[-72,9],[3,21],[-34,-3],[-15,-19],[-41,-15],[-19,1],[-18,-23],[-42,-11],[-8,-21],[-23,-14],[2,-20],[-23,-3],[0,-15],[-26,11],[-31,-11],[-24,17]],[[7217,2519],[-18,-17],[-21,16],[-3,-28],[18,-26],[46,-37],[22,3],[29,-23]],[[6719,3121],[-2,-45],[26,-6],[-14,-24],[23,-13],[-11,-13],[38,-27],[2,-24],[19,13],[41,-2],[7,14],[39,-25],[15,2],[41,40],[-2,-25]],[[6941,2986],[22,14],[-22,25],[64,11],[15,-39],[51,11],[17,-31],[-2,-19],[19,13],[33,2],[21,-8],[1,-23],[35,14],[-14,-29],[22,3]],[[7203,2930],[23,-24],[18,-33],[60,-12]],[[7304,2861],[-12,50],[13,24],[42,36],[-1,12],[25,30],[3,16]],[[7233,3300],[-43,-6],[-36,-17],[-28,12],[-51,-12],[-45,9],[-11,10]],[[9199,7008],[0,24],[38,17],[21,27],[-12,9],[46,48]],[[9292,7133],[7,12],[-19,46],[19,15],[-7,32],[18,19],[-4,23],[-45,21],[-26,-3],[-27,39],[7,19],[-25,9],[-6,15],[20,24],[-29,33],[0,29],[-20,9],[-8,-12],[-44,30],[-19,29],[6,19],[-32,12]],[[9058,7553],[-38,10],[-83,-154],[-36,-14],[-50,-11],[-39,-22]],[[8804,7310],[39,-51],[38,-36],[1,-10]],[[8882,7213],[30,1],[41,-48],[63,-15],[40,-26]],[[7140,5111],[-15,-40],[9,-43],[-20,-68],[81,-23],[11,-25],[31,-7],[4,13],[39,-29],[42,-21]],[[7322,4868],[44,47]],[[7253,5044],[-80,67],[-26,11]],[[7217,2519],[-13,15],[0,34],[10,15],[-6,30],[10,29],[-29,60],[8,16],[43,37],[-6,21],[-43,54],[-18,-5],[-20,19],[-1,42],[51,44]],[[6941,2986],[-29,-24],[4,-42],[58,-39]],[[6974,2881],[-4,-25],[5,-61],[-39,-23],[2,-32],[-22,-59],[13,-18],[-20,-1],[-4,-33],[-36,3],[-11,-27],[7,-21]],[[6865,2584],[31,-52],[45,-14],[6,-41],[47,5],[7,-9],[27,16],[20,-64],[23,-3],[45,-40],[44,-3],[6,13],[47,-8]],[[7277,5652],[23,-26],[38,-21],[9,15],[21,-28],[47,-23],[16,15],[37,-26]],[[7468,5558],[5,135],[17,-7],[26,22],[-14,11],[-14,37],[10,26],[-21,33],[38,54]],[[7515,5869],[-30,26],[-33,-5],[-37,9],[-23,-11],[-14,15],[-32,-9]],[[6866,4898],[48,-4],[16,-30],[5,-32],[25,-40],[32,-31],[23,0]],[[7015,4761],[-18,51],[4,35],[-13,59],[18,3],[37,29],[-25,66],[-28,21],[-33,74]],[[6957,5099],[-43,-30],[-27,8],[16,-27],[-23,5],[-11,-27],[17,-23],[18,-72],[-38,-35]],[[7100,7601],[21,0],[82,-34],[23,2],[14,16],[22,-4],[47,-36],[29,0],[40,-23],[26,11],[74,4],[46,33],[1,41],[-15,32],[-27,4],[4,22],[-22,32]],[[7371,7953],[4,42],[13,60]],[[7177,7942],[-76,-72]],[[7058,7628],[32,-6],[10,-21]],[[7072,3455],[-31,-56],[-20,-11],[10,-14],[-21,-16],[-40,37]],[[5570,4761],[-46,9],[-39,-5],[-106,5]],[[5379,4770],[16,-30],[24,-69],[29,-5],[3,-41],[20,-15],[7,-53],[25,-49]],[[5693,4336],[27,-7],[14,19],[-15,50],[1,34],[17,45],[-2,28],[13,17],[26,10],[30,-17]],[[8233,4584],[-26,45],[-2,52],[11,31]],[[8216,4712],[-37,7],[-27,14],[-13,-8],[-31,30],[-49,24],[-105,-33],[-3,-14],[-44,-15],[-16,-25]],[[7891,4692],[-32,-34],[0,-61]],[[3101,3694],[-8,-15],[26,6],[42,-22],[46,-15],[31,10],[13,-15],[35,-14],[12,-37]],[[3298,3592],[119,325]],[[3417,3917],[51,137],[-90,200]],[[3378,4254],[-26,-11],[-97,-5],[-10,-57],[5,-47],[-23,-2],[-110,-64],[-21,-43],[21,-32],[29,-74],[11,-11],[8,-43],[20,-8],[3,-17],[-18,-57],[-13,-10],[4,-34],[-26,-38],[-34,-7]],[[395,4413],[-17,-35],[7,-64],[24,-20],[13,-27],[31,-8],[28,8],[23,-20],[-6,-16],[70,-16],[-9,-28],[33,-28],[37,3],[-2,-22],[36,-7],[8,-37],[16,-23],[38,-12],[-27,-55],[-47,-26],[-31,9],[4,-21],[-20,-26],[25,-17],[-9,-27],[31,-24],[-14,-11],[3,-29],[-13,-26],[14,-16],[-8,-44],[-20,0],[-19,-19],[25,-8],[9,-54],[-6,-55],[-18,-23],[-24,-9],[17,-30],[-13,-19]],[[2507,4923],[-5,42],[25,17],[-2,14],[21,11]],[[2546,5007],[-66,27],[-49,4]],[[4436,3389],[6,48],[9,10],[60,2],[32,8],[29,47],[8,33],[182,51],[2,-3]],[[4590,3791],[-28,-14],[-20,-43],[-1,-32],[-38,-17],[-5,-26],[-22,-9],[-45,22],[-8,-14],[-40,-15],[-1,-42],[-32,-18]],[[4350,3583],[-16,-51],[-16,4],[-22,-19],[-11,-52]],[[4285,3465],[18,15],[18,-7],[27,-31],[77,-39],[11,-14]],[[6334,7232],[44,35],[79,-65],[33,-34],[39,4],[43,-68],[26,-15],[29,4],[15,24],[31,-6],[21,-20]],[[6694,7091],[84,36],[-2,16],[49,-4],[69,6],[23,-8]],[[6917,7137],[86,36],[26,53]],[[6599,7432],[-52,35],[-20,-4],[-40,30],[-111,49],[-18,-11],[-20,9],[16,28],[-56,37],[-15,26],[-40,21],[-11,30],[-17,13],[-58,-11],[-44,28]],[[6113,7712],[5,-23],[19,-19],[8,-44],[24,-38],[-5,-23],[-23,-25],[6,-21],[-27,-28],[8,-32]],[[6128,7459],[125,-91],[81,-136]],[[7015,4761],[11,29],[50,7],[57,-8],[33,-32],[36,-2],[7,-18],[25,-3],[9,36],[37,4],[3,-56]],[[7430,4693],[-15,2],[-13,39],[-39,78],[-1,19],[-40,37]],[[7372,8533],[19,17],[13,54],[-10,20],[-35,10],[-18,28]],[[7231,8767],[-6,-42],[-17,-9],[-68,-14],[-217,-84],[-47,-35],[-65,-25],[-33,39]],[[6870,8124],[23,49],[10,-20],[32,-16],[38,35],[13,-20],[34,15],[38,6]],[[8296,5513],[22,-30],[11,-37],[-30,0],[2,-21],[-21,8],[-30,-53]],[[8070,5332],[-60,-8],[-39,8],[-33,-23],[-55,-11],[-8,-22],[22,-18],[35,-8],[21,-19],[25,12],[40,-38]],[[8018,5205],[30,0],[44,-25],[56,17],[25,-4],[18,18],[16,-22],[36,18],[25,26],[23,-8]],[[8291,5225],[56,28],[12,16],[63,34]],[[8422,5303],[-8,16],[4,61],[14,20],[12,43],[28,34]],[[8472,5477],[-46,18],[-19,32]],[[8407,5527],[-21,-4],[9,-27],[-55,9],[-12,-7],[-32,15]],[[9813,6727],[115,209],[62,76],[-6,18],[-42,-38],[-70,-43],[-50,-1],[-17,-25],[-63,-3],[-9,24],[-18,-12],[-31,22],[-33,-18],[-12,-33],[-27,5],[-4,24],[-29,-12],[-1,14],[-32,13],[-44,4]],[[9502,6951],[-31,-38],[7,-39],[23,-10],[12,-19],[28,-12],[18,-26]],[[7228,4395],[-7,2],[-74,85],[39,49],[75,4],[42,39],[-11,-34],[13,-7],[2,-33],[30,-20],[17,5],[25,-53]],[[7015,4761],[3,-16],[-43,-3],[-7,-12],[-35,15],[-19,-5],[-5,-21],[-47,-5],[-57,14],[-51,-6],[-13,9],[-21,-12],[-51,1],[-36,-16],[-19,8],[-7,39]],[[6607,4751],[-27,-38],[-33,-2],[-9,-11],[20,-62],[28,-29],[58,-48],[-71,-22]],[[6573,4539],[-12,-56],[7,-9],[174,-84],[33,27],[78,-37],[34,6],[11,-18],[-16,-18],[-1,-24],[11,-31],[32,3],[6,-12],[-14,-68],[8,-23]],[[9160,8583],[-19,15],[-16,-10],[-49,17],[-13,-9],[-66,49],[-72,77],[-119,88]],[[8806,8810],[-48,-14],[-67,27]],[[8691,8823],[-255,40]],[[8655,8215],[24,6],[30,-13],[12,-19],[39,-14],[8,11],[56,14]],[[8824,8200],[88,32],[38,-15],[8,23],[50,11],[40,28],[29,40],[54,-14],[-8,-23],[27,-11],[20,12]],[[9189,8352],[10,62],[-8,41],[-23,45],[9,36],[-43,27],[26,20]],[[7619,5264],[-29,-13],[-45,-2],[17,-62],[-21,-9],[6,-37],[-18,-22],[-17,-43],[9,-11],[0,-36],[-20,-43],[18,-23]],[[7519,4963],[8,-12],[28,12]],[[7555,4963],[10,45],[32,5],[18,86],[5,56],[7,8],[-10,39],[17,32],[-14,21],[14,4]],[[7634,5259],[-15,5]],[[5642,7295],[-3,42],[-29,41],[-1,26],[-13,8],[-31,48],[2,16]],[[5567,7476],[-68,-53],[-30,-34],[-43,-5],[-35,-26],[-10,-23],[-29,5],[-16,-29],[-75,-30],[-24,-26]],[[5230,7083],[-6,-22],[56,2]],[[7144,9467],[-21,-7],[-74,-2],[-12,-15],[-57,-33],[-33,2],[-39,37],[-46,18],[-37,-29],[-22,-65],[7,-40],[-25,-91],[-30,-61],[4,-16],[-25,-27],[-37,5],[-29,20],[-23,-16],[-31,-53],[-47,13],[-33,-19],[-15,-32],[-73,-26],[-63,16],[-37,19]],[[6346,9065],[-18,-13],[-12,-57],[-29,-53],[1,-83],[28,-51],[1,-21],[-22,-25],[-7,-33],[14,-22],[-33,-52],[-30,-21]],[[6788,1673],[-3,-37],[-25,-37],[10,-33],[59,6],[20,-36],[-1,-28],[-16,-2],[-17,-41],[-22,9],[-32,-16],[-36,34],[-39,-16]],[[6686,1476],[-3,-41],[8,-14],[27,2],[76,-13],[77,-18],[53,-46],[1,-27],[27,-34],[43,-4],[30,15],[12,-16]],[[5035,7298],[30,54],[46,13],[46,97],[65,82],[44,2],[55,26],[19,0],[-9,28],[-21,16],[-24,-20],[-3,26],[37,53]],[[5320,7675],[-35,19],[-20,52],[-33,35],[-27,-15],[-57,25]],[[7763,3267],[4,38],[12,18],[-18,17],[-4,30]],[[5229,5112],[5,-43],[-15,-27],[4,-19],[-24,-11],[13,-20],[20,3],[47,-35],[8,-51],[26,-4],[25,-46],[33,29],[13,-84],[-5,-34]],[[5445,5009],[-3,16],[-60,-15]],[[6866,4898],[-21,17],[-23,-39],[-103,-58],[-62,14],[-13,16]],[[6644,4848],[21,-35],[-29,-14],[-4,-25],[-26,14],[-27,-11],[28,-26]],[[4861,4365],[-22,42],[-24,25],[-2,23],[-23,42],[1,68]],[[4707,4220],[9,28],[38,-1],[44,13],[163,-7]],[[7728,5201],[24,-5],[38,10],[37,-19],[14,34],[-4,18],[25,-6],[49,-58],[24,-3],[17,-27],[30,7],[-16,23],[-1,24],[18,18],[13,-18],[22,6]],[[7985,5364],[-30,-19],[-19,1],[-10,26]],[[7926,5372],[-22,0],[-50,-25],[-21,1],[-36,-18],[-60,-7],[-5,7],[-38,-13]],[[7609,5287],[10,-23]],[[7634,5259],[39,5],[25,-25],[21,14],[11,-25],[-2,-27]],[[6597,866],[-6,-32],[32,-51],[15,-10],[19,13],[15,-8],[0,-36],[19,-16],[27,13],[11,-25],[19,22],[22,-26],[1,-21],[26,-13],[28,-54],[18,8],[17,-16]],[[6842,947],[-11,-8],[-50,1],[-28,9],[-15,-44],[-42,-4],[-24,-12],[-9,-20],[-19,2],[-25,-17],[-22,12]],[[6377,6006],[-84,70],[-15,-3],[-62,85],[-44,35],[-75,4],[-41,-2]],[[6056,6195],[-85,-3],[-1,-20],[-104,-103]],[[5866,6069],[15,-7],[-27,-56],[-38,-30],[-2,-28]],[[6957,5099],[-39,8],[-21,18],[-20,-2],[-28,32],[-21,-7],[-17,-27],[9,-30]],[[6820,5091],[-14,-11],[-8,-60],[-16,-23],[-15,-44],[-36,-29],[-47,-66],[-25,-16],[-15,6]],[[8227,6651],[46,-23],[22,-63]],[[8295,6565],[16,19],[26,60],[8,7]],[[8341,6770],[-19,2],[-9,-26],[-39,-8],[-1,-10],[-55,-14],[9,-63]],[[8881,5622],[22,-15],[-2,-56],[55,-17]],[[8956,5534],[26,31]],[[8926,5635],[-22,1],[-23,-14]],[[5866,6069],[-24,0],[-30,48],[-15,56],[-29,46],[-28,92]],[[5560,6042],[-1,-24],[-17,-9],[16,-25],[-45,-20],[-1,-26],[18,-22],[-11,-13],[9,-36],[28,-39],[-37,-21],[29,-31],[14,-37]],[[5562,5739],[0,-1]],[[4388,4005],[-26,1],[3,-16],[-19,-28],[-18,2],[-7,-60],[17,-5]],[[4338,3899],[6,-30],[-19,-7],[-1,-42],[7,-16],[26,-9],[-7,-56],[-16,-34],[0,-43],[-8,-24],[24,-55]],[[5226,4769],[-14,0],[-50,49],[-30,12],[-25,30],[-51,24],[-24,-5],[-42,26]],[[4934,4806],[-32,-14],[-8,-47],[4,-19],[-19,-12],[-48,-10],[-17,10],[-28,-10],[-31,30]],[[203,6413],[6,-35],[-16,-6],[30,-11],[-28,-73],[17,-10],[12,-51],[-20,-18],[19,-22],[-15,-24],[39,-5],[-23,-49],[27,-19],[18,9],[30,-7],[12,-14],[-36,-29],[-19,-47],[18,-13],[36,48],[22,-14],[-12,-10],[22,-33],[-12,-41],[64,14],[16,-4]],[[410,5949],[49,-2],[12,-26],[45,4],[206,69],[40,31],[35,11],[82,8]],[[6627,6350],[1,-17],[33,-4],[-3,-13],[29,-13],[-6,-22],[21,-12],[49,0],[34,-15],[8,-16],[18,4],[75,-6],[17,6],[8,-16],[24,7],[16,-24],[17,3]],[[6759,6487],[-56,-53],[-75,-10],[-9,-31],[21,-27],[-13,-16]],[[6633,2627],[16,6],[18,-21],[20,13],[43,4],[-4,27],[-15,21],[25,11],[10,26],[-14,17],[28,30],[-16,25],[-2,32],[29,-9],[8,-28],[33,14],[16,84],[2,35],[18,-2],[18,-44],[36,-19],[33,-1],[6,16],[33,17]],[[6611,3097],[-33,-118],[22,-192],[-12,-37],[-22,-37]],[[6362,2723],[21,-33],[21,-7],[18,-23],[21,11],[27,-26],[10,-29],[26,-6],[7,-26],[45,6],[14,31],[24,-9],[22,21],[15,-6]],[[4554,5382],[-12,12]],[[3945,5513],[-44,-21],[-8,-19],[7,-58],[42,-51],[11,-53],[24,-31],[-10,-20]],[[3967,5142],[142,-70],[14,-42],[31,-3],[-8,-11],[32,-12],[34,-32],[6,-17]],[[4218,4955],[59,75]],[[8436,8863],[0,111],[69,58],[5,22],[25,13],[11,20],[-26,39],[26,35],[39,32],[-30,31],[-9,78],[-173,181],[-151,172]],[[8649,5715],[-24,7],[-83,0]],[[8542,5722],[-9,-28]],[[8533,5694],[116,0],[0,21]],[[5447,3593],[26,10],[13,-20],[28,14],[7,16],[30,-1]],[[5347,3904],[-16,-6],[-13,-30],[10,-34],[49,-33],[25,-87],[2,-34],[22,-58],[13,-4],[8,-25]],[[6633,2627],[19,-18],[8,-27],[51,-13],[23,5],[21,-11],[58,16],[52,5]],[[7079,6616],[0,18],[25,3],[-4,24],[24,5],[-2,22],[30,24],[67,36]],[[7207,6782],[-17,-10],[-80,-4],[-32,4],[-34,35],[-73,20],[-43,1],[-58,38]],[[6870,6866],[-99,-6],[-8,12],[-44,-18]],[[6719,6854],[8,-54],[10,-7],[-5,-68],[-12,-16],[6,-71],[8,-1]],[[3024,4077],[-40,-53],[-12,-53],[-42,-71],[-18,-74],[11,-5],[3,-47],[-10,-16],[26,-22],[14,2],[98,-29],[32,2],[15,-17]],[[3378,4254],[-34,77],[48,201]],[[3392,4532],[5,18]],[[3385,4890],[-23,-27],[-41,-7],[-51,-70],[-5,-15],[14,-54],[-11,-25],[-37,-27],[6,-44]],[[5179,3946],[107,-8]],[[4989,4185],[-19,-22],[6,-32],[14,-6],[18,-81],[-2,-18],[23,-30]],[[6573,4539],[-26,1],[-6,20],[-44,-6],[-37,7],[-7,10],[-42,16]],[[6092,4519],[4,-50],[17,-28],[44,-2],[19,-14],[13,-28],[-10,-6],[197,-89],[10,-27],[29,6],[82,-41],[49,-16],[45,-7],[-3,-25],[23,-10],[5,-29],[16,8],[47,-17],[21,8]],[[2966,7123],[8,4]],[[2699,7902],[-29,-8],[-31,-44],[-28,-3]],[[2611,7847],[41,-107],[21,-62],[-29,-21],[-16,-69],[3,-26],[-36,-61],[-42,-49],[-7,-36],[7,-22],[-32,-49],[-25,-29],[-82,-62],[-161,-182]],[[6820,5091],[-139,56],[-129,109]],[[6552,5256],[-65,-32],[-46,33],[-100,-58],[-5,-38],[-64,-93]],[[8174,5505],[-10,61],[-14,6],[-3,37],[58,1],[52,-52],[4,-14],[30,-14],[5,-17]],[[8407,5527],[-9,29],[20,37],[-1,15]],[[8417,5608],[-18,-13],[-29,12]],[[8270,5748],[-29,6],[-47,-16],[1,-19],[-41,-5]],[[8154,5714],[-6,-18],[5,-41],[-23,-21],[-8,-40],[22,-30],[30,-59]],[[8215,4202],[-2,16],[39,127],[12,81],[17,59],[-1,33],[-25,35]],[[7722,4177],[34,5],[97,-18],[6,-25],[16,12],[41,-24]],[[6552,5256],[15,7],[46,65],[57,26]],[[7919,2757],[-50,22],[-25,-15],[-14,10],[40,22],[32,39],[-30,9],[2,17],[-65,46],[-1,15]],[[7634,2777],[-13,-11],[-7,-42],[9,-15],[-1,-72],[-34,-22]],[[9131,6084],[-38,-38],[-13,6],[-41,-13],[-37,-1],[-28,-31],[-37,-10],[5,23],[-22,-17]],[[8920,6003],[-51,-32],[18,-41],[-11,-16]],[[9253,5854],[31,20],[31,58],[86,115]],[[4118,4682],[-185,-7],[-92,19],[-45,-41],[-34,-20],[-40,-51],[6,-44],[31,-45]],[[3759,4493],[40,4],[17,11],[32,-3],[32,-24],[45,-14]],[[6527,1074],[-26,-11],[-25,-29],[-15,-4],[18,-19],[-8,-47],[-25,-12],[27,-17],[22,7],[25,-23],[38,-12],[-2,-11],[28,-29],[13,-1]],[[7190,890],[2,31],[-42,55],[-15,2],[-24,28],[-6,22],[-34,20],[-20,47]],[[7051,1095],[-14,-10],[-59,27]],[[6360,6924],[39,-14],[72,9],[47,-26],[29,0],[7,-54],[26,-1],[35,31],[22,-16],[49,4],[17,13],[16,-16]],[[6719,6854],[-14,114],[16,23],[65,48]],[[6786,7039],[-81,35],[-11,17]],[[6334,7232],[-21,-21],[-89,7],[-68,-6],[-60,-20]],[[6096,7192],[89,-132],[71,-64],[66,-27],[11,-29],[27,-16]],[[7229,5571],[0,-60]],[[7513,5514],[-31,15],[-14,29]],[[6599,7432],[26,93],[-17,-4],[-19,21],[18,31],[13,45],[19,42],[-15,4],[14,72]],[[6638,7736],[-33,-12],[-6,19],[10,25],[-7,30]],[[6108,7885],[-7,4],[-183,-57],[-6,-16],[39,-3],[1,-16],[-24,-22]],[[5928,7775],[103,-17],[82,-46]],[[6029,4375],[8,-22],[-21,-1],[-5,-51],[11,-12],[-26,-11],[-2,-17],[39,-5]],[[7909,7792],[13,19]],[[7914,8306],[-62,5],[2,-9],[-53,25],[-90,0],[-77,-16],[-17,40],[-14,-3],[-6,46],[-31,-19],[-52,4],[-19,22],[-67,33],[-23,3],[3,-25]],[[3725,6443],[206,44],[48,14],[31,-1],[64,23]],[[4030,6859],[-18,-1],[-54,34],[-20,-7],[5,-43],[-36,14],[-14,18],[-24,0],[-18,27],[-28,18],[-11,-6],[-1,31],[-182,30],[-43,16]],[[5796,6546],[123,-29],[25,28],[26,-14],[15,-37],[26,-33],[56,-15],[57,2],[25,25]],[[6149,6473],[-3,12],[-80,91],[16,47],[18,25],[44,8],[18,54],[39,-19],[52,34]],[[6253,6725],[9,50],[71,130],[27,19]],[[6096,7192],[-203,134],[-115,8],[-21,26],[-38,5],[-25,43],[5,33],[17,38],[22,16],[39,-4],[8,36]],[[5785,7527],[-60,48],[-150,44],[-37,36],[20,30]],[[5558,7685],[-37,47],[-61,20],[-41,-20]],[[5419,7732],[-4,-24],[-33,-31],[-62,-2]],[[5320,7675],[6,-27],[18,-19],[56,-28],[23,-20],[7,-38],[23,-27],[34,-2],[29,-19],[22,12],[25,-1],[4,-30]],[[4436,3389],[47,-12],[-7,-36],[45,-16],[31,3],[19,-25],[21,20],[13,-15],[50,-21]],[[5562,5739],[-180,-2]],[[5280,5448],[39,-77],[16,-11],[25,-49],[-10,-29],[-20,-11]],[[7671,346],[-24,14],[-67,7],[-67,-24],[-79,3],[-32,9],[-292,2],[-25,16],[3,13],[-36,7],[-5,105]],[[6878,615],[11,-19],[-5,-44],[15,-10],[0,-23],[25,-8],[8,-16],[-41,-44],[-56,-28],[4,-18],[36,-19],[5,-22],[174,-105],[403,-242],[23,-17],[35,107],[51,83],[43,50],[9,27],[53,79]],[[5300,6472],[32,-23],[23,1],[191,-88],[-16,-9]],[[6719,6854],[-14,-26],[-19,-6],[-39,-44],[-14,-8],[18,-49],[-41,-57],[-17,-2],[3,-20],[-142,-11],[-10,-11]],[[6444,6620],[27,-39],[24,-14],[-101,-40],[-58,-53],[-23,-12],[-28,7],[-24,31],[-65,0],[-47,-27]],[[6149,6473],[-13,-71],[39,-67]],[[6175,6335],[102,15],[59,4],[151,24],[39,-11],[25,3],[43,-16],[33,-4]],[[8146,5394],[5,34],[24,32],[-17,33]],[[8158,5493],[-20,4],[-61,-10],[3,-12]],[[8080,5475],[5,-28],[-25,9],[-16,-14],[-7,-40]],[[3392,5901],[222,-81],[10,-56],[8,-6]],[[3632,5758],[22,18],[15,55],[-20,30],[-1,48],[-55,115],[6,50]],[[3156,6600],[-54,-5],[21,-38],[-52,-43],[1,-22],[-23,-33],[40,-12],[-9,-33],[-69,-45],[-2,-20],[-29,-14],[1,-24],[-27,-16],[-18,4],[-25,-12],[3,-12],[-28,-21],[9,-7],[-28,-32]],[[8155,5801],[27,13],[52,4],[-21,38]],[[7700,5068],[-16,30],[13,9],[-4,23],[29,19],[18,-7],[2,30],[-14,29]],[[7555,4963],[32,-7]],[[7587,4956],[30,39],[41,20],[20,40],[22,13]],[[8174,5505],[-16,-12]],[[8116,4869],[-6,-39],[-33,6],[-71,-22],[-36,-39],[-31,12],[-27,-49],[-27,17],[-66,7]],[[7819,4762],[-40,23]],[[7779,4785],[-30,-4],[-30,-41],[8,-36]],[[7792,4714],[17,-19],[49,7],[33,-10]],[[8216,4712],[27,31],[-6,15]],[[7569,7710],[-6,-18],[13,-24],[46,-43],[7,-29],[-5,-26],[18,-31],[41,-5],[21,-42],[-2,-17],[24,11],[28,-11]],[[7754,7475],[63,17],[14,20],[19,-6]],[[6881,3737],[-28,10],[-53,1],[-7,-32],[10,-30],[-7,-22],[-22,1]],[[6774,3665],[5,-45],[-8,-15],[13,-39],[31,-15],[5,-46],[-18,-34]],[[7509,6744],[91,49],[1,26],[14,13],[-12,21],[0,27],[19,3],[-1,27]],[[7621,6910],[-22,18],[-42,13],[-24,27]],[[7449,6740],[60,4]],[[7603,4702],[-47,7]],[[7181,5224],[10,16],[-13,34],[26,4]],[[6905,5393],[23,-16],[28,-43]],[[8618,7318],[-10,-25],[-160,-174]],[[8448,7119],[164,-55],[-23,0],[-23,-21],[102,-33],[0,-29],[15,8],[62,-7]],[[8745,6982],[10,43],[44,28],[18,26],[-5,24],[27,60],[41,37],[2,13]],[[7671,346],[34,36],[37,30],[72,32],[-6,11],[51,0],[54,29],[11,35]],[[4773,5484],[-1,-23],[23,-33],[24,-4]],[[4819,5424],[2,19],[31,-2],[4,23],[18,1],[9,27],[18,9],[-6,28],[45,-4],[-12,31],[7,34]],[[8832,8189],[-8,11]],[[8745,6982],[78,-54],[25,8],[7,-22]],[[3902,6124],[11,-27],[-9,-17],[47,-74],[-28,-23],[15,-34],[30,-30],[25,-8]],[[8574,6409],[58,-30],[25,0]],[[5785,7527],[108,-40],[33,-29],[16,7],[186,-6]],[[5928,7775],[-40,-10],[-41,0],[-21,27],[17,49],[-14,4],[-96,2],[-28,-39],[29,-58],[-176,-65]],[[3759,4493],[-25,-50],[-38,6],[-40,-10],[-82,-9],[-107,17],[-2,18],[-34,20],[-7,25],[-32,22]],[[3417,3917],[171,41],[16,-13],[73,24],[5,10],[44,9],[16,26],[20,10],[10,21],[48,39]],[[5452,6099],[-26,-16],[-1,-16],[-24,-9],[7,-19],[-23,-10],[-17,-28],[-71,-85],[23,-16],[7,-34],[-24,-42],[18,-42],[14,-12]],[[4454,4995],[13,-3],[-2,-27],[14,-22],[5,-35],[22,-13],[10,-43],[33,-9],[17,-17],[1,-22]],[[9240,7788],[18,-25],[53,-33],[34,1],[39,42],[67,16],[18,18],[22,-4],[7,35],[-14,21],[11,31],[-26,16],[-1,34],[20,43],[-9,27],[-28,40]],[[7304,2861],[43,-10],[20,-25],[23,11],[41,-11],[-1,-24],[32,-26],[-6,-21],[42,46],[18,-28],[19,-2],[30,21]],[[8752,9023],[2,-41],[-10,-23],[-9,-79],[-25,-20],[-19,-37]],[[8806,8810],[86,-8],[13,28],[47,18],[25,-30],[65,17],[53,5],[20,-9],[10,29],[24,4],[4,26],[67,33]],[[9220,8923],[25,7],[18,19],[-2,22],[27,42],[-26,30],[-51,14],[-10,16],[-38,5],[-45,-8],[-52,24],[9,26],[-22,43]],[[7560,6401],[18,22],[44,14]],[[7622,6437],[-24,16],[10,20],[43,50],[5,41],[41,29],[-18,22],[-38,27],[-16,-8],[-8,76],[-108,34]],[[7431,6643],[-30,-19],[-7,-53],[19,-12]],[[8573,6266],[28,24],[40,-27],[9,2]],[[9536,8208],[20,0],[1,25],[-18,13],[20,14],[-20,43],[-19,17],[10,35],[-30,33],[21,70],[-9,11],[-38,-4],[-28,47],[-12,2],[-55,57],[2,15],[-35,-25],[-33,6],[-31,33]],[[9282,8600],[-29,-3],[-57,11],[-21,13],[-15,-38]],[[4819,5424],[11,-8],[14,-42],[-1,-66],[32,-19],[16,-31],[30,4],[62,-65],[67,-23]],[[4285,7923],[34,24],[19,76],[114,90],[11,39],[-5,34],[24,39],[35,20],[-1,69]],[[4516,8314],[-13,35],[-19,21],[22,52],[23,28],[42,20],[67,-22],[38,-1],[34,26]],[[4710,8473],[-94,87],[-36,20],[-10,14],[-41,-4],[-12,19],[-52,24],[-25,-5],[-34,19],[-17,47],[-73,69],[-31,24],[-48,-14],[0,21],[-24,56],[-23,14],[-12,-7]],[[3216,9164],[-17,-20],[-73,-50],[-67,-14],[-38,-24],[-56,-69],[-16,-38],[12,-24],[0,-53],[14,-10],[37,-58],[-3,-24],[14,-35],[23,-14],[71,-29],[36,-20],[13,-20],[-27,-44],[-34,-27],[20,-29],[-7,-33],[34,-17],[-4,-41],[-23,-14],[-1,-29],[-74,-1],[-15,-25],[8,-22],[-4,-32],[-16,-41],[-57,-59],[0,-54],[-63,-53],[-22,-39]],[[4051,3850],[38,-33],[7,-32],[-13,-32]],[[4083,3753],[19,0],[25,45],[23,-2],[15,23],[64,1],[33,21],[13,31],[45,4],[18,23]],[[6638,7736],[39,-45],[67,-14],[37,-15],[31,11],[-4,-22],[32,-18],[19,6]],[[6859,7639],[40,29]],[[5215,3263],[34,25],[24,-3],[16,20],[56,3],[43,33],[20,41],[-18,36],[-22,15],[8,10],[-47,44]],[[5329,3487],[-35,5],[-38,24],[-23,24],[-30,-17],[-38,12]],[[5160,3300],[9,1],[46,-38]],[[6253,6725],[4,-21],[107,-35],[36,3],[23,-47],[21,-5]],[[6774,3665],[-13,16],[-2,49],[-38,18],[-76,60],[-25,26],[-29,8],[-46,31],[-7,-10],[-37,7],[-63,-21],[-18,16]],[[6455,3739],[96,-87]],[[8867,6024],[25,-17],[28,-4]],[[7140,7329],[-46,173],[18,66],[-12,33]],[[6859,7639],[-7,-65]],[[8076,1473],[-27,25],[-4,61],[7,56],[39,57],[3,39],[11,32],[5,75],[26,83],[0,38],[37,55],[20,7],[0,30]],[[8193,2031],[-114,-17],[-56,-26],[-31,-8],[-50,22],[-72,1],[-26,-13],[-74,-3],[-42,5],[-20,-8]],[[7725,1472],[0,-11],[40,-11],[27,3],[43,18],[53,7],[56,-31],[58,-1],[21,-10],[53,37]],[[7995,909],[-28,113],[-2,71],[8,26],[0,80],[16,35],[17,15],[11,77],[0,24],[18,34],[4,39],[37,50]],[[7575,1177],[-42,-44],[-18,-44],[3,-45]],[[7518,1044],[1,0]],[[4896,7245],[-5,-26],[11,-74],[25,-57],[52,-41]],[[5329,3487],[32,27],[5,28],[12,-10],[44,19],[1,22],[24,20]],[[7587,4956],[0,-28],[20,10],[12,-18],[25,8],[23,-27],[28,3],[27,19],[40,-15],[16,-17],[17,10],[3,-52],[27,9]],[[7825,4858],[8,36],[42,54]],[[7875,4948],[-3,21],[-20,26],[13,49],[18,15],[-54,5],[-17,17],[10,17],[-37,-5],[-27,17],[-38,-42],[-20,0]],[[7270,7164],[24,6],[17,17],[88,40],[43,28],[44,12],[30,31],[68,50],[85,38],[18,26],[37,29],[35,13],[-5,21]],[[8078,7464],[163,183],[4,28],[-14,26],[36,12],[31,-4],[30,29],[43,18],[45,3],[24,11],[15,-29]],[[8455,7741],[37,30]],[[6940,6951],[38,6],[27,-24],[32,11]],[[7037,6944],[-9,33],[5,49],[11,14]],[[6917,7137],[-18,-44],[13,-55],[-3,-65],[31,-22]],[[7515,5869],[17,-16],[14,23],[32,26],[33,-10],[19,-26],[47,-11],[50,-19]],[[7858,5905],[-28,17],[-21,-12],[-32,39],[22,69]],[[4710,8473],[29,58],[40,32],[4,18],[43,36],[24,55],[24,31],[-6,71],[43,65],[52,4],[32,-22],[34,-2],[31,-15]],[[5112,9277],[-17,3],[-55,-42],[-55,31],[-30,-18],[-20,16],[-55,-7],[-35,-25],[-36,-5],[-48,2],[-29,-8],[-35,7],[-33,-25],[-51,-6],[-11,-17],[-33,-20],[-9,-30],[-58,-28],[-18,-42],[-21,-12],[-29,4],[-13,-37],[-23,-7],[-82,3],[-32,-41],[-76,-7]],[[7894,7101],[-6,3],[-117,-87],[-47,-5],[-51,-15]],[[7673,6997],[13,-9],[-64,-86]],[[7622,6902],[29,-7],[25,-25]],[[2048,7067],[-30,11],[-63,-25],[-23,5],[-29,33],[-22,-1],[-36,40],[-39,-8],[-39,13],[-41,-43],[-11,22]],[[502,6865],[35,-19]],[[7622,6902],[-1,8]],[[7622,6437],[134,23],[26,11],[31,26],[23,0],[46,-25]],[[4176,4869],[10,61],[32,25]],[[9058,7553],[-19,17],[-9,33],[4,42],[-14,18],[8,24]],[[8877,7609],[-36,-4],[1,-38],[-35,7],[-29,-29],[-67,-21],[1,-18],[-30,-44]],[[8455,7741],[-9,-28],[70,-118],[47,-9],[46,-42],[34,-49],[0,-33]],[[6236,3112],[-4,-19],[-16,7],[-54,0]],[[9502,6951],[-16,8],[7,18],[-60,30],[16,26],[-34,10],[-18,-7],[-14,28],[-19,9],[-9,-20],[-49,36],[14,6],[-20,39],[-8,-1]],[[8729,9563],[3,36],[35,24],[10,36],[-12,17],[-34,19],[-43,8],[-20,-8],[-40,-64],[-3,-65],[-27,-30],[-42,15],[-21,37],[0,33],[-14,42],[-36,18],[-73,58],[-66,4],[-91,-21]],[[6175,6335],[-23,-30],[-84,26],[-27,-20],[-48,1]],[[5993,6312],[-8,-34],[9,-30],[27,-32],[35,-21]],[[8472,5477],[31,43]],[[8529,5646],[-112,-38]],[[8652,5430],[62,3],[64,-5],[91,60],[34,-1],[53,47]],[[8881,5622],[-15,-10],[-16,-39],[-42,34],[-25,10],[2,39]],[[8706,5710],[-57,5]],[[8533,5694],[-4,-48]],[[8678,5512],[-4,-34],[-22,-48]],[[8306,6435],[8,51],[-19,79]],[[8227,6651],[-29,4],[-66,-18]],[[8132,6637],[10,-19],[33,-21],[12,-44],[-31,-23],[-17,-43],[5,-29],[-9,-22]],[[9282,8600],[12,10],[-16,26],[13,24],[-6,31],[-19,13],[-2,25],[-14,8],[-13,74],[14,38],[25,11],[-33,22],[-14,-5],[-9,46]],[[8193,2031],[-12,22],[-2,40],[12,40],[43,48],[25,44],[-8,20],[8,44]],[[7388,5066],[28,0],[6,26],[-8,32],[-31,45],[-2,22],[-44,11],[-34,32]],[[8185,3005],[-68,27],[-57,-10],[-35,0],[-79,20],[-18,13],[-23,-9],[-19,20],[5,16],[-29,7],[-11,-21]],[[2546,5007],[25,9],[8,25],[49,0],[37,25],[46,8],[14,18],[35,8],[-5,19],[34,4]],[[2789,5123],[-7,19],[16,43],[-54,31],[-37,10],[-33,-17]],[[2194,5501],[-20,-34],[-35,17],[-21,-12],[0,-43],[-32,-31],[-58,-30],[-3,-10]],[[2611,7847],[-47,28],[-40,-13],[-23,5],[-52,67],[-20,9],[-23,-9],[-41,-44],[-39,-12],[-25,6],[-23,-29],[-30,-15],[-29,3],[-21,17],[-34,3],[-53,-49],[-45,-12],[8,-44],[-6,-29],[-15,-9],[-37,6],[-46,-27],[-1,-16],[-32,-5],[-25,-39],[3,-20],[-42,-35],[-9,17],[-46,-19],[-36,-27],[-15,10]],[[7255,7159],[14,-1],[15,-32],[67,-56],[32,-17]],[[7446,7076],[98,54]],[[7544,7130],[118,57],[23,-9],[159,-43],[22,-27],[41,31]],[[2944,5176],[58,43],[34,1],[39,12],[5,15],[28,5]],[[3179,5255],[6,13],[-13,35],[-38,22],[-5,186]],[[3129,5511],[-84,-28],[-18,-12],[-41,-4],[-13,-10],[-51,20],[-7,18],[-26,21],[-22,37],[-45,16],[-35,24],[-48,-10],[-20,-12],[-63,29],[-52,-6]],[[2789,5123],[30,7],[18,-12],[17,16],[32,9],[31,-9],[7,27],[20,15]],[[8542,5722],[2,43],[-36,44],[9,47],[14,4],[10,40],[39,-2]],[[8580,5898],[8,42]],[[8378,6046],[-15,-76],[19,-10],[-4,-21],[-42,3]],[[8397,5730],[44,-8],[14,11],[87,-11]],[[7895,5383],[31,-11]],[[8080,5475],[-7,6]],[[7850,5466],[14,-18],[4,-32],[-11,-16],[38,-17]],[[410,5949],[-29,-25],[-49,-23],[-2,-19],[-27,-6],[23,-19],[-34,-43],[35,-7],[7,-24],[-37,-18],[11,-24],[26,-8],[-7,-25],[-20,-10],[-2,-23],[-17,-23],[40,-21],[-2,-25],[-27,-17],[11,-44],[-23,-10],[4,-32],[-13,-15],[34,4],[26,13],[26,-9],[44,1],[35,19],[25,-3],[19,19],[24,-12],[-22,-36],[-74,-38],[-89,-23],[-6,-26],[-22,-30],[-30,-26],[37,-43],[-23,-42],[13,-23],[-25,-48],[24,1],[6,-31],[-20,-23],[28,-12],[78,22],[49,19],[78,20],[38,-39],[-6,-16],[-67,-66],[-26,-6],[-35,-29],[-56,-14],[-6,-13],[28,-4],[15,-26]],[[7673,6997],[0,37],[-81,40],[-48,56]],[[8154,5714],[-13,4]],[[2991,4721],[-129,53],[18,22],[41,30],[-2,18],[24,24],[25,43],[22,-3],[10,22],[-17,14],[-80,17],[-13,43],[17,51],[-1,16],[31,62],[7,43]],[[8679,5820],[-21,-1],[-44,79],[-23,-17],[-11,17]],[[7846,3288],[37,26],[2,16]],[[7037,6944],[52,6],[0,12],[65,20]],[[7895,5383],[-62,-2],[-55,47],[-10,18],[-45,4],[-22,41]],[[8716,6039],[-39,-7],[-53,-76],[-29,21]],[[5161,6307],[-86,30],[-29,17],[-22,-5],[-36,20]],[[3298,3592],[21,19],[46,12],[-14,17],[20,2],[2,20],[40,27],[8,-4],[48,25],[20,1],[46,29],[15,-6],[57,20],[41,-2],[35,7],[25,-15],[47,-7],[27,-26],[17,18],[34,-2],[28,-19],[36,3],[42,-10],[2,-14],[33,-40],[37,-4]],[[4011,3643],[22,1],[50,109]],[[5979,8588],[-2,30],[-11,8],[9,27],[32,33],[-3,17],[38,27],[31,41],[-8,131],[-10,21],[21,36],[-43,62],[-3,24],[58,72]],[[5419,7732],[-21,25],[36,29],[11,36],[16,-12],[26,9],[14,19],[-8,20],[34,4],[10,26],[36,15],[2,12],[39,11],[-6,16],[17,32],[-75,30],[-24,24],[28,24],[74,25],[26,30],[-8,18],[29,-8],[9,23],[42,20],[11,-11]],[[3129,5511],[29,-4],[12,13],[60,-1],[24,11],[23,29],[-2,24],[17,230]],[[2849,5744],[-73,-40],[-10,-11],[-33,-3],[-31,-13],[-106,30]],[[8344,6935],[-16,13],[-81,-36],[-67,9]],[[8120,6638],[12,-1]],[[6786,7039],[14,-18],[2,-42],[44,-56],[29,-16]],[[6875,6907],[65,44]],[[6346,9065],[-56,3]],[[8127,4946],[-25,13],[-24,-10],[-29,10],[-25,-9],[-26,-29],[-22,11],[-1,-18],[-60,-3],[5,8],[-19,39],[-26,-10]],[[7825,4858],[-12,-51],[6,-45]],[[7518,1044],[-24,10],[-20,26],[-28,7],[-24,-9],[-45,14],[-16,-9],[-20,14],[-47,4],[11,-49],[-9,-26],[-17,-4],[-6,-28],[-88,14],[-11,52],[8,29],[-68,38],[-21,-2],[-25,-33],[-17,3]],[[8574,6095],[16,1],[25,42],[20,-6],[35,16],[6,-23],[33,-12]],[[7479,4895],[52,-23],[133,-28],[1,-14],[26,-14],[52,19],[35,-28],[1,-22]],[[7519,4963],[4,-12],[-44,-56]],[[5215,3263],[282,-240],[47,-38]],[[7450,4920],[29,-25]],[[7645,4198],[-33,11],[-12,-24],[-19,1]],[[8232,3010],[-19,100],[-6,70],[0,137]],[[4011,3643],[0,-11],[83,-63],[44,-9],[8,-22],[26,-18],[18,5],[63,-50],[32,-10]],[[8166,3898],[18,98]],[[5790,6323],[117,24],[86,-35]],[[8256,5045],[-17,50],[2,47],[9,32],[26,43],[15,8]],[[6875,6907],[-5,-41]],[[8422,5303],[38,19],[18,28],[36,31],[62,29],[13,18],[63,2]],[[6686,1476],[-7,-9]]]} diff --git a/tests/fixtures/bahia-municipality-codes.official.json b/tests/fixtures/bahia-municipality-codes.official.json new file mode 100644 index 00000000..aa111ea5 --- /dev/null +++ b/tests/fixtures/bahia-municipality-codes.official.json @@ -0,0 +1,1689 @@ +{ + "provenance": { + "description": "Test-only evidence for the Bahia municipality name→IBGE-code table. Rows are the canonical application spellings paired with IBGE 7-digit codes from the Localidades API; mesh SHA-256 documents the Malhas download used to build the committed TopoJSON.", + "localidadesSource": { + "url": "https://servicodados.ibge.gov.br/api/v1/localidades/estados/29/municipios", + "downloadSha256": "ee2524f732a80d234f129b2e26a90f9bc080a52844a01e5359e789c613d7ee4f" + }, + "malhasSource": { + "url": "https://servicodados.ibge.gov.br/api/v3/malhas/estados/29?formato=application/vnd.geo+json&intrarregiao=municipio&qualidade=intermediaria", + "quality": "intermediaria", + "downloadSha256": "909017a4f91e7950cea123d2601a53b64c70acdb2b256548be25ca9e703cc572" + }, + "territoryComposition": "Identity-territory polygons are dissolved from IBGE municipality meshes using bahiaIdentityTerritoryRecords (SECULT/SEPLAN composition). IDE Bahia / SEI territory polygons are a validation reference only.", + "accessed": "2026-07-19", + "normalization": "IBGE Localidades nomes were reconciled to canonical application spellings via canonicalizeMunicipalityName (Araçás→Araças, Iuiu→Iuiú, Muquém do São Francisco→Muquém de São Francisco, Santa Terezinha→Santa Teresinha). The evidence SHA-256 covers every canonical municipality→codarea assignment." + }, + "municipalityCount": 417, + "assignments": [ + { + "municipality": "Abaíra", + "code": "2900108" + }, + { + "municipality": "Abaré", + "code": "2900207" + }, + { + "municipality": "Acajutiba", + "code": "2900306" + }, + { + "municipality": "Adustina", + "code": "2900355" + }, + { + "municipality": "Água Fria", + "code": "2900405" + }, + { + "municipality": "Aiquara", + "code": "2900603" + }, + { + "municipality": "Alagoinhas", + "code": "2900702" + }, + { + "municipality": "Alcobaça", + "code": "2900801" + }, + { + "municipality": "Almadina", + "code": "2900900" + }, + { + "municipality": "Amargosa", + "code": "2901007" + }, + { + "municipality": "Amélia Rodrigues", + "code": "2901106" + }, + { + "municipality": "América Dourada", + "code": "2901155" + }, + { + "municipality": "Anagé", + "code": "2901205" + }, + { + "municipality": "Andaraí", + "code": "2901304" + }, + { + "municipality": "Andorinha", + "code": "2901353" + }, + { + "municipality": "Angical", + "code": "2901403" + }, + { + "municipality": "Anguera", + "code": "2901502" + }, + { + "municipality": "Antas", + "code": "2901601" + }, + { + "municipality": "Antônio Cardoso", + "code": "2901700" + }, + { + "municipality": "Antônio Gonçalves", + "code": "2901809" + }, + { + "municipality": "Aporá", + "code": "2901908" + }, + { + "municipality": "Apuarema", + "code": "2901957" + }, + { + "municipality": "Araças", + "code": "2902054" + }, + { + "municipality": "Aracatu", + "code": "2902005" + }, + { + "municipality": "Araci", + "code": "2902104" + }, + { + "municipality": "Aramari", + "code": "2902203" + }, + { + "municipality": "Arataca", + "code": "2902252" + }, + { + "municipality": "Aratuípe", + "code": "2902302" + }, + { + "municipality": "Aurelino Leal", + "code": "2902401" + }, + { + "municipality": "Baianópolis", + "code": "2902500" + }, + { + "municipality": "Baixa Grande", + "code": "2902609" + }, + { + "municipality": "Banzaê", + "code": "2902658" + }, + { + "municipality": "Barra", + "code": "2902708" + }, + { + "municipality": "Barra da Estiva", + "code": "2902807" + }, + { + "municipality": "Barra do Choça", + "code": "2902906" + }, + { + "municipality": "Barra do Mendes", + "code": "2903003" + }, + { + "municipality": "Barra do Rocha", + "code": "2903102" + }, + { + "municipality": "Barreiras", + "code": "2903201" + }, + { + "municipality": "Barro Alto", + "code": "2903235" + }, + { + "municipality": "Barro Preto", + "code": "2903300" + }, + { + "municipality": "Barrocas", + "code": "2903276" + }, + { + "municipality": "Belmonte", + "code": "2903409" + }, + { + "municipality": "Belo Campo", + "code": "2903508" + }, + { + "municipality": "Biritinga", + "code": "2903607" + }, + { + "municipality": "Boa Nova", + "code": "2903706" + }, + { + "municipality": "Boa Vista do Tupim", + "code": "2903805" + }, + { + "municipality": "Bom Jesus da Lapa", + "code": "2903904" + }, + { + "municipality": "Bom Jesus da Serra", + "code": "2903953" + }, + { + "municipality": "Boninal", + "code": "2904001" + }, + { + "municipality": "Bonito", + "code": "2904050" + }, + { + "municipality": "Boquira", + "code": "2904100" + }, + { + "municipality": "Botuporã", + "code": "2904209" + }, + { + "municipality": "Brejões", + "code": "2904308" + }, + { + "municipality": "Brejolândia", + "code": "2904407" + }, + { + "municipality": "Brotas de Macaúbas", + "code": "2904506" + }, + { + "municipality": "Brumado", + "code": "2904605" + }, + { + "municipality": "Buerarema", + "code": "2904704" + }, + { + "municipality": "Buritirama", + "code": "2904753" + }, + { + "municipality": "Caatiba", + "code": "2904803" + }, + { + "municipality": "Cabaceiras do Paraguaçu", + "code": "2904852" + }, + { + "municipality": "Cachoeira", + "code": "2904902" + }, + { + "municipality": "Caculé", + "code": "2905008" + }, + { + "municipality": "Caém", + "code": "2905107" + }, + { + "municipality": "Caetanos", + "code": "2905156" + }, + { + "municipality": "Caetité", + "code": "2905206" + }, + { + "municipality": "Cafarnaum", + "code": "2905305" + }, + { + "municipality": "Cairu", + "code": "2905404" + }, + { + "municipality": "Caldeirão Grande", + "code": "2905503" + }, + { + "municipality": "Camacan", + "code": "2905602" + }, + { + "municipality": "Camaçari", + "code": "2905701" + }, + { + "municipality": "Camamu", + "code": "2905800" + }, + { + "municipality": "Campo Alegre de Lourdes", + "code": "2905909" + }, + { + "municipality": "Campo Formoso", + "code": "2906006" + }, + { + "municipality": "Canápolis", + "code": "2906105" + }, + { + "municipality": "Canarana", + "code": "2906204" + }, + { + "municipality": "Canavieiras", + "code": "2906303" + }, + { + "municipality": "Candeal", + "code": "2906402" + }, + { + "municipality": "Candeias", + "code": "2906501" + }, + { + "municipality": "Candiba", + "code": "2906600" + }, + { + "municipality": "Cândido Sales", + "code": "2906709" + }, + { + "municipality": "Cansanção", + "code": "2906808" + }, + { + "municipality": "Canudos", + "code": "2906824" + }, + { + "municipality": "Capela do Alto Alegre", + "code": "2906857" + }, + { + "municipality": "Capim Grosso", + "code": "2906873" + }, + { + "municipality": "Caraíbas", + "code": "2906899" + }, + { + "municipality": "Caravelas", + "code": "2906907" + }, + { + "municipality": "Cardeal da Silva", + "code": "2907004" + }, + { + "municipality": "Carinhanha", + "code": "2907103" + }, + { + "municipality": "Casa Nova", + "code": "2907202" + }, + { + "municipality": "Castro Alves", + "code": "2907301" + }, + { + "municipality": "Catolândia", + "code": "2907400" + }, + { + "municipality": "Catu", + "code": "2907509" + }, + { + "municipality": "Caturama", + "code": "2907558" + }, + { + "municipality": "Central", + "code": "2907608" + }, + { + "municipality": "Chorrochó", + "code": "2907707" + }, + { + "municipality": "Cícero Dantas", + "code": "2907806" + }, + { + "municipality": "Cipó", + "code": "2907905" + }, + { + "municipality": "Coaraci", + "code": "2908002" + }, + { + "municipality": "Cocos", + "code": "2908101" + }, + { + "municipality": "Conceição da Feira", + "code": "2908200" + }, + { + "municipality": "Conceição do Almeida", + "code": "2908309" + }, + { + "municipality": "Conceição do Coité", + "code": "2908408" + }, + { + "municipality": "Conceição do Jacuípe", + "code": "2908507" + }, + { + "municipality": "Conde", + "code": "2908606" + }, + { + "municipality": "Condeúba", + "code": "2908705" + }, + { + "municipality": "Contendas do Sincorá", + "code": "2908804" + }, + { + "municipality": "Coração de Maria", + "code": "2908903" + }, + { + "municipality": "Cordeiros", + "code": "2909000" + }, + { + "municipality": "Coribe", + "code": "2909109" + }, + { + "municipality": "Coronel João Sá", + "code": "2909208" + }, + { + "municipality": "Correntina", + "code": "2909307" + }, + { + "municipality": "Cotegipe", + "code": "2909406" + }, + { + "municipality": "Cravolândia", + "code": "2909505" + }, + { + "municipality": "Crisópolis", + "code": "2909604" + }, + { + "municipality": "Cristópolis", + "code": "2909703" + }, + { + "municipality": "Cruz das Almas", + "code": "2909802" + }, + { + "municipality": "Curaçá", + "code": "2909901" + }, + { + "municipality": "Dário Meira", + "code": "2910008" + }, + { + "municipality": "Dias d'Ávila", + "code": "2910057" + }, + { + "municipality": "Dom Basílio", + "code": "2910107" + }, + { + "municipality": "Dom Macedo Costa", + "code": "2910206" + }, + { + "municipality": "Elísio Medrado", + "code": "2910305" + }, + { + "municipality": "Encruzilhada", + "code": "2910404" + }, + { + "municipality": "Entre Rios", + "code": "2910503" + }, + { + "municipality": "Érico Cardoso", + "code": "2900504" + }, + { + "municipality": "Esplanada", + "code": "2910602" + }, + { + "municipality": "Euclides da Cunha", + "code": "2910701" + }, + { + "municipality": "Eunápolis", + "code": "2910727" + }, + { + "municipality": "Fátima", + "code": "2910750" + }, + { + "municipality": "Feira da Mata", + "code": "2910776" + }, + { + "municipality": "Feira de Santana", + "code": "2910800" + }, + { + "municipality": "Filadélfia", + "code": "2910859" + }, + { + "municipality": "Firmino Alves", + "code": "2910909" + }, + { + "municipality": "Floresta Azul", + "code": "2911006" + }, + { + "municipality": "Formosa do Rio Preto", + "code": "2911105" + }, + { + "municipality": "Gandu", + "code": "2911204" + }, + { + "municipality": "Gavião", + "code": "2911253" + }, + { + "municipality": "Gentio do Ouro", + "code": "2911303" + }, + { + "municipality": "Glória", + "code": "2911402" + }, + { + "municipality": "Gongogi", + "code": "2911501" + }, + { + "municipality": "Governador Mangabeira", + "code": "2911600" + }, + { + "municipality": "Guajeru", + "code": "2911659" + }, + { + "municipality": "Guanambi", + "code": "2911709" + }, + { + "municipality": "Guaratinga", + "code": "2911808" + }, + { + "municipality": "Heliópolis", + "code": "2911857" + }, + { + "municipality": "Iaçu", + "code": "2911907" + }, + { + "municipality": "Ibiassucê", + "code": "2912004" + }, + { + "municipality": "Ibicaraí", + "code": "2912103" + }, + { + "municipality": "Ibicoara", + "code": "2912202" + }, + { + "municipality": "Ibicuí", + "code": "2912301" + }, + { + "municipality": "Ibipeba", + "code": "2912400" + }, + { + "municipality": "Ibipitanga", + "code": "2912509" + }, + { + "municipality": "Ibiquera", + "code": "2912608" + }, + { + "municipality": "Ibirapitanga", + "code": "2912707" + }, + { + "municipality": "Ibirapuã", + "code": "2912806" + }, + { + "municipality": "Ibirataia", + "code": "2912905" + }, + { + "municipality": "Ibitiara", + "code": "2913002" + }, + { + "municipality": "Ibititá", + "code": "2913101" + }, + { + "municipality": "Ibotirama", + "code": "2913200" + }, + { + "municipality": "Ichu", + "code": "2913309" + }, + { + "municipality": "Igaporã", + "code": "2913408" + }, + { + "municipality": "Igrapiúna", + "code": "2913457" + }, + { + "municipality": "Iguaí", + "code": "2913507" + }, + { + "municipality": "Ilhéus", + "code": "2913606" + }, + { + "municipality": "Inhambupe", + "code": "2913705" + }, + { + "municipality": "Ipecaetá", + "code": "2913804" + }, + { + "municipality": "Ipiaú", + "code": "2913903" + }, + { + "municipality": "Ipirá", + "code": "2914000" + }, + { + "municipality": "Ipupiara", + "code": "2914109" + }, + { + "municipality": "Irajuba", + "code": "2914208" + }, + { + "municipality": "Iramaia", + "code": "2914307" + }, + { + "municipality": "Iraquara", + "code": "2914406" + }, + { + "municipality": "Irará", + "code": "2914505" + }, + { + "municipality": "Irecê", + "code": "2914604" + }, + { + "municipality": "Itabela", + "code": "2914653" + }, + { + "municipality": "Itaberaba", + "code": "2914703" + }, + { + "municipality": "Itabuna", + "code": "2914802" + }, + { + "municipality": "Itacaré", + "code": "2914901" + }, + { + "municipality": "Itaeté", + "code": "2915007" + }, + { + "municipality": "Itagi", + "code": "2915106" + }, + { + "municipality": "Itagibá", + "code": "2915205" + }, + { + "municipality": "Itagimirim", + "code": "2915304" + }, + { + "municipality": "Itaguaçu da Bahia", + "code": "2915353" + }, + { + "municipality": "Itaju do Colônia", + "code": "2915403" + }, + { + "municipality": "Itajuípe", + "code": "2915502" + }, + { + "municipality": "Itamaraju", + "code": "2915601" + }, + { + "municipality": "Itamari", + "code": "2915700" + }, + { + "municipality": "Itambé", + "code": "2915809" + }, + { + "municipality": "Itanagra", + "code": "2915908" + }, + { + "municipality": "Itanhém", + "code": "2916005" + }, + { + "municipality": "Itaparica", + "code": "2916104" + }, + { + "municipality": "Itapé", + "code": "2916203" + }, + { + "municipality": "Itapebi", + "code": "2916302" + }, + { + "municipality": "Itapetinga", + "code": "2916401" + }, + { + "municipality": "Itapicuru", + "code": "2916500" + }, + { + "municipality": "Itapitanga", + "code": "2916609" + }, + { + "municipality": "Itaquara", + "code": "2916708" + }, + { + "municipality": "Itarantim", + "code": "2916807" + }, + { + "municipality": "Itatim", + "code": "2916856" + }, + { + "municipality": "Itiruçu", + "code": "2916906" + }, + { + "municipality": "Itiúba", + "code": "2917003" + }, + { + "municipality": "Itororó", + "code": "2917102" + }, + { + "municipality": "Ituaçu", + "code": "2917201" + }, + { + "municipality": "Ituberá", + "code": "2917300" + }, + { + "municipality": "Iuiú", + "code": "2917334" + }, + { + "municipality": "Jaborandi", + "code": "2917359" + }, + { + "municipality": "Jacaraci", + "code": "2917409" + }, + { + "municipality": "Jacobina", + "code": "2917508" + }, + { + "municipality": "Jaguaquara", + "code": "2917607" + }, + { + "municipality": "Jaguarari", + "code": "2917706" + }, + { + "municipality": "Jaguaripe", + "code": "2917805" + }, + { + "municipality": "Jandaíra", + "code": "2917904" + }, + { + "municipality": "Jequié", + "code": "2918001" + }, + { + "municipality": "Jeremoabo", + "code": "2918100" + }, + { + "municipality": "Jiquiriçá", + "code": "2918209" + }, + { + "municipality": "Jitaúna", + "code": "2918308" + }, + { + "municipality": "João Dourado", + "code": "2918357" + }, + { + "municipality": "Juazeiro", + "code": "2918407" + }, + { + "municipality": "Jucuruçu", + "code": "2918456" + }, + { + "municipality": "Jussara", + "code": "2918506" + }, + { + "municipality": "Jussari", + "code": "2918555" + }, + { + "municipality": "Jussiape", + "code": "2918605" + }, + { + "municipality": "Lafaiete Coutinho", + "code": "2918704" + }, + { + "municipality": "Lagoa Real", + "code": "2918753" + }, + { + "municipality": "Laje", + "code": "2918803" + }, + { + "municipality": "Lajedão", + "code": "2918902" + }, + { + "municipality": "Lajedinho", + "code": "2919009" + }, + { + "municipality": "Lajedo do Tabocal", + "code": "2919058" + }, + { + "municipality": "Lamarão", + "code": "2919108" + }, + { + "municipality": "Lapão", + "code": "2919157" + }, + { + "municipality": "Lauro de Freitas", + "code": "2919207" + }, + { + "municipality": "Lençóis", + "code": "2919306" + }, + { + "municipality": "Licínio de Almeida", + "code": "2919405" + }, + { + "municipality": "Livramento de Nossa Senhora", + "code": "2919504" + }, + { + "municipality": "Luís Eduardo Magalhães", + "code": "2919553" + }, + { + "municipality": "Macajuba", + "code": "2919603" + }, + { + "municipality": "Macarani", + "code": "2919702" + }, + { + "municipality": "Macaúbas", + "code": "2919801" + }, + { + "municipality": "Macururé", + "code": "2919900" + }, + { + "municipality": "Madre de Deus", + "code": "2919926" + }, + { + "municipality": "Maetinga", + "code": "2919959" + }, + { + "municipality": "Maiquinique", + "code": "2920007" + }, + { + "municipality": "Mairi", + "code": "2920106" + }, + { + "municipality": "Malhada", + "code": "2920205" + }, + { + "municipality": "Malhada de Pedras", + "code": "2920304" + }, + { + "municipality": "Manoel Vitorino", + "code": "2920403" + }, + { + "municipality": "Mansidão", + "code": "2920452" + }, + { + "municipality": "Maracás", + "code": "2920502" + }, + { + "municipality": "Maragogipe", + "code": "2920601" + }, + { + "municipality": "Maraú", + "code": "2920700" + }, + { + "municipality": "Marcionílio Souza", + "code": "2920809" + }, + { + "municipality": "Mascote", + "code": "2920908" + }, + { + "municipality": "Mata de São João", + "code": "2921005" + }, + { + "municipality": "Matina", + "code": "2921054" + }, + { + "municipality": "Medeiros Neto", + "code": "2921104" + }, + { + "municipality": "Miguel Calmon", + "code": "2921203" + }, + { + "municipality": "Milagres", + "code": "2921302" + }, + { + "municipality": "Mirangaba", + "code": "2921401" + }, + { + "municipality": "Mirante", + "code": "2921450" + }, + { + "municipality": "Monte Santo", + "code": "2921500" + }, + { + "municipality": "Morpará", + "code": "2921609" + }, + { + "municipality": "Morro do Chapéu", + "code": "2921708" + }, + { + "municipality": "Mortugaba", + "code": "2921807" + }, + { + "municipality": "Mucugê", + "code": "2921906" + }, + { + "municipality": "Mucuri", + "code": "2922003" + }, + { + "municipality": "Mulungu do Morro", + "code": "2922052" + }, + { + "municipality": "Mundo Novo", + "code": "2922102" + }, + { + "municipality": "Muniz Ferreira", + "code": "2922201" + }, + { + "municipality": "Muquém de São Francisco", + "code": "2922250" + }, + { + "municipality": "Muritiba", + "code": "2922300" + }, + { + "municipality": "Mutuípe", + "code": "2922409" + }, + { + "municipality": "Nazaré", + "code": "2922508" + }, + { + "municipality": "Nilo Peçanha", + "code": "2922607" + }, + { + "municipality": "Nordestina", + "code": "2922656" + }, + { + "municipality": "Nova Canaã", + "code": "2922706" + }, + { + "municipality": "Nova Fátima", + "code": "2922730" + }, + { + "municipality": "Nova Ibiá", + "code": "2922755" + }, + { + "municipality": "Nova Itarana", + "code": "2922805" + }, + { + "municipality": "Nova Redenção", + "code": "2922854" + }, + { + "municipality": "Nova Soure", + "code": "2922904" + }, + { + "municipality": "Nova Viçosa", + "code": "2923001" + }, + { + "municipality": "Novo Horizonte", + "code": "2923035" + }, + { + "municipality": "Novo Triunfo", + "code": "2923050" + }, + { + "municipality": "Olindina", + "code": "2923100" + }, + { + "municipality": "Oliveira dos Brejinhos", + "code": "2923209" + }, + { + "municipality": "Ouriçangas", + "code": "2923308" + }, + { + "municipality": "Ourolândia", + "code": "2923357" + }, + { + "municipality": "Palmas de Monte Alto", + "code": "2923407" + }, + { + "municipality": "Palmeiras", + "code": "2923506" + }, + { + "municipality": "Paramirim", + "code": "2923605" + }, + { + "municipality": "Paratinga", + "code": "2923704" + }, + { + "municipality": "Paripiranga", + "code": "2923803" + }, + { + "municipality": "Pau Brasil", + "code": "2923902" + }, + { + "municipality": "Paulo Afonso", + "code": "2924009" + }, + { + "municipality": "Pé de Serra", + "code": "2924058" + }, + { + "municipality": "Pedrão", + "code": "2924108" + }, + { + "municipality": "Pedro Alexandre", + "code": "2924207" + }, + { + "municipality": "Piatã", + "code": "2924306" + }, + { + "municipality": "Pilão Arcado", + "code": "2924405" + }, + { + "municipality": "Pindaí", + "code": "2924504" + }, + { + "municipality": "Pindobaçu", + "code": "2924603" + }, + { + "municipality": "Pintadas", + "code": "2924652" + }, + { + "municipality": "Piraí do Norte", + "code": "2924678" + }, + { + "municipality": "Piripá", + "code": "2924702" + }, + { + "municipality": "Piritiba", + "code": "2924801" + }, + { + "municipality": "Planaltino", + "code": "2924900" + }, + { + "municipality": "Planalto", + "code": "2925006" + }, + { + "municipality": "Poções", + "code": "2925105" + }, + { + "municipality": "Pojuca", + "code": "2925204" + }, + { + "municipality": "Ponto Novo", + "code": "2925253" + }, + { + "municipality": "Porto Seguro", + "code": "2925303" + }, + { + "municipality": "Potiraguá", + "code": "2925402" + }, + { + "municipality": "Prado", + "code": "2925501" + }, + { + "municipality": "Presidente Dutra", + "code": "2925600" + }, + { + "municipality": "Presidente Jânio Quadros", + "code": "2925709" + }, + { + "municipality": "Presidente Tancredo Neves", + "code": "2925758" + }, + { + "municipality": "Queimadas", + "code": "2925808" + }, + { + "municipality": "Quijingue", + "code": "2925907" + }, + { + "municipality": "Quixabeira", + "code": "2925931" + }, + { + "municipality": "Rafael Jambeiro", + "code": "2925956" + }, + { + "municipality": "Remanso", + "code": "2926004" + }, + { + "municipality": "Retirolândia", + "code": "2926103" + }, + { + "municipality": "Riachão das Neves", + "code": "2926202" + }, + { + "municipality": "Riachão do Jacuípe", + "code": "2926301" + }, + { + "municipality": "Riacho de Santana", + "code": "2926400" + }, + { + "municipality": "Ribeira do Amparo", + "code": "2926509" + }, + { + "municipality": "Ribeira do Pombal", + "code": "2926608" + }, + { + "municipality": "Ribeirão do Largo", + "code": "2926657" + }, + { + "municipality": "Rio de Contas", + "code": "2926707" + }, + { + "municipality": "Rio do Antônio", + "code": "2926806" + }, + { + "municipality": "Rio do Pires", + "code": "2926905" + }, + { + "municipality": "Rio Real", + "code": "2927002" + }, + { + "municipality": "Rodelas", + "code": "2927101" + }, + { + "municipality": "Ruy Barbosa", + "code": "2927200" + }, + { + "municipality": "Salinas da Margarida", + "code": "2927309" + }, + { + "municipality": "Salvador", + "code": "2927408" + }, + { + "municipality": "Santa Bárbara", + "code": "2927507" + }, + { + "municipality": "Santa Brígida", + "code": "2927606" + }, + { + "municipality": "Santa Cruz Cabrália", + "code": "2927705" + }, + { + "municipality": "Santa Cruz da Vitória", + "code": "2927804" + }, + { + "municipality": "Santa Inês", + "code": "2927903" + }, + { + "municipality": "Santa Luzia", + "code": "2928059" + }, + { + "municipality": "Santa Maria da Vitória", + "code": "2928109" + }, + { + "municipality": "Santa Rita de Cássia", + "code": "2928406" + }, + { + "municipality": "Santa Teresinha", + "code": "2928505" + }, + { + "municipality": "Santaluz", + "code": "2928000" + }, + { + "municipality": "Santana", + "code": "2928208" + }, + { + "municipality": "Santanópolis", + "code": "2928307" + }, + { + "municipality": "Santo Amaro", + "code": "2928604" + }, + { + "municipality": "Santo Antônio de Jesus", + "code": "2928703" + }, + { + "municipality": "Santo Estêvão", + "code": "2928802" + }, + { + "municipality": "São Desidério", + "code": "2928901" + }, + { + "municipality": "São Domingos", + "code": "2928950" + }, + { + "municipality": "São Felipe", + "code": "2929107" + }, + { + "municipality": "São Félix", + "code": "2929008" + }, + { + "municipality": "São Félix do Coribe", + "code": "2929057" + }, + { + "municipality": "São Francisco do Conde", + "code": "2929206" + }, + { + "municipality": "São Gabriel", + "code": "2929255" + }, + { + "municipality": "São Gonçalo dos Campos", + "code": "2929305" + }, + { + "municipality": "São José da Vitória", + "code": "2929354" + }, + { + "municipality": "São José do Jacuípe", + "code": "2929370" + }, + { + "municipality": "São Miguel das Matas", + "code": "2929404" + }, + { + "municipality": "São Sebastião do Passé", + "code": "2929503" + }, + { + "municipality": "Sapeaçu", + "code": "2929602" + }, + { + "municipality": "Sátiro Dias", + "code": "2929701" + }, + { + "municipality": "Saubara", + "code": "2929750" + }, + { + "municipality": "Saúde", + "code": "2929800" + }, + { + "municipality": "Seabra", + "code": "2929909" + }, + { + "municipality": "Sebastião Laranjeiras", + "code": "2930006" + }, + { + "municipality": "Senhor do Bonfim", + "code": "2930105" + }, + { + "municipality": "Sento Sé", + "code": "2930204" + }, + { + "municipality": "Serra do Ramalho", + "code": "2930154" + }, + { + "municipality": "Serra Dourada", + "code": "2930303" + }, + { + "municipality": "Serra Preta", + "code": "2930402" + }, + { + "municipality": "Serrinha", + "code": "2930501" + }, + { + "municipality": "Serrolândia", + "code": "2930600" + }, + { + "municipality": "Simões Filho", + "code": "2930709" + }, + { + "municipality": "Sítio do Mato", + "code": "2930758" + }, + { + "municipality": "Sítio do Quinto", + "code": "2930766" + }, + { + "municipality": "Sobradinho", + "code": "2930774" + }, + { + "municipality": "Souto Soares", + "code": "2930808" + }, + { + "municipality": "Tabocas do Brejo Velho", + "code": "2930907" + }, + { + "municipality": "Tanhaçu", + "code": "2931004" + }, + { + "municipality": "Tanque Novo", + "code": "2931053" + }, + { + "municipality": "Tanquinho", + "code": "2931103" + }, + { + "municipality": "Taperoá", + "code": "2931202" + }, + { + "municipality": "Tapiramutá", + "code": "2931301" + }, + { + "municipality": "Teixeira de Freitas", + "code": "2931350" + }, + { + "municipality": "Teodoro Sampaio", + "code": "2931400" + }, + { + "municipality": "Teofilândia", + "code": "2931509" + }, + { + "municipality": "Teolândia", + "code": "2931608" + }, + { + "municipality": "Terra Nova", + "code": "2931707" + }, + { + "municipality": "Tremedal", + "code": "2931806" + }, + { + "municipality": "Tucano", + "code": "2931905" + }, + { + "municipality": "Uauá", + "code": "2932002" + }, + { + "municipality": "Ubaíra", + "code": "2932101" + }, + { + "municipality": "Ubaitaba", + "code": "2932200" + }, + { + "municipality": "Ubatã", + "code": "2932309" + }, + { + "municipality": "Uibaí", + "code": "2932408" + }, + { + "municipality": "Umburanas", + "code": "2932457" + }, + { + "municipality": "Una", + "code": "2932507" + }, + { + "municipality": "Urandi", + "code": "2932606" + }, + { + "municipality": "Uruçuca", + "code": "2932705" + }, + { + "municipality": "Utinga", + "code": "2932804" + }, + { + "municipality": "Valença", + "code": "2932903" + }, + { + "municipality": "Valente", + "code": "2933000" + }, + { + "municipality": "Várzea da Roça", + "code": "2933059" + }, + { + "municipality": "Várzea do Poço", + "code": "2933109" + }, + { + "municipality": "Várzea Nova", + "code": "2933158" + }, + { + "municipality": "Varzedo", + "code": "2933174" + }, + { + "municipality": "Vera Cruz", + "code": "2933208" + }, + { + "municipality": "Vereda", + "code": "2933257" + }, + { + "municipality": "Vitória da Conquista", + "code": "2933307" + }, + { + "municipality": "Wagner", + "code": "2933406" + }, + { + "municipality": "Wanderley", + "code": "2933455" + }, + { + "municipality": "Wenceslau Guimarães", + "code": "2933505" + }, + { + "municipality": "Xique-Xique", + "code": "2933604" + } + ], + "evidenceSha256": "9c13a0457130c7be42ecf3907ce811d9fe8fb877498b307bf6aa6527a4fa9601" +} diff --git a/tests/int/bahiaGeometries.int.spec.ts b/tests/int/bahiaGeometries.int.spec.ts new file mode 100644 index 00000000..55e95398 --- /dev/null +++ b/tests/int/bahiaGeometries.int.spec.ts @@ -0,0 +1,102 @@ +// @vitest-environment node + +import { statSync } from 'node:fs' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { describe, expect, it } from 'vitest' + +import { + bahiaIdentityTerritoriesTopology, + bahiaMunicipalitiesTopology, + bahiaMunicipalityFeatures, + bahiaTerritoryFeatures, + getMunicipalityFeature, + getTerritoryFeature, +} from '@/lib/bahiaGeometries' +import { bahiaMunicipalityCodes } from '@/lib/bahiaMunicipalityCodes' +import { bahiaIdentityTerritoryRecords } from '@/lib/bahiaTerritories' + +/** Soft ceiling against accidental unsimplified meshes (plan target ≤ ~600 KB). */ +const MAX_TOPO_BYTES = 600 * 1024 + +const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '../..') + +const hasNonEmptyGeometry = ( + geometry: { type: string; coordinates?: unknown } | null | undefined, +): boolean => { + if (!geometry || geometry.type === 'GeometryCollection') return false + if (!Array.isArray(geometry.coordinates) || geometry.coordinates.length === 0) return false + return true +} + +describe('Bahia static geometries', () => { + it('keeps committed TopoJSON under the size budget', () => { + const municipalityBytes = statSync( + join(repoRoot, 'src/lib/geometries/bahia-municipalities.topo.json'), + ).size + const territoryBytes = statSync( + join(repoRoot, 'src/lib/geometries/bahia-identity-territories.topo.json'), + ).size + + expect(municipalityBytes).toBeGreaterThan(10_000) + expect(territoryBytes).toBeGreaterThan(1_000) + expect(municipalityBytes).toBeLessThanOrEqual(MAX_TOPO_BYTES) + expect(territoryBytes).toBeLessThanOrEqual(MAX_TOPO_BYTES) + }) + + it('exposes 417 municipality features whose codarea set matches the code table', () => { + expect(bahiaMunicipalitiesTopology.objects.municipalities.geometries).toHaveLength(417) + expect(bahiaMunicipalityFeatures).toHaveLength(417) + + const featureCodes = new Set( + bahiaMunicipalityFeatures.map((entry) => entry.properties.codarea), + ) + const tableCodes = new Set(Object.values(bahiaMunicipalityCodes)) + expect(featureCodes).toEqual(tableCodes) + + for (const entry of bahiaMunicipalityFeatures) { + expect(entry.properties.codarea).toMatch(/^29\d{5}$/) + expect(bahiaMunicipalityCodes[entry.properties.name]).toBe(entry.properties.codarea) + expect(hasNonEmptyGeometry(entry.geometry)).toBe(true) + } + }) + + it('exposes 27 territory features whose codes match bahiaIdentityTerritoryRecords', () => { + expect(bahiaIdentityTerritoriesTopology.objects.territories.geometries).toHaveLength(27) + expect(bahiaTerritoryFeatures).toHaveLength(27) + + const featureCodes = bahiaTerritoryFeatures + .map((entry) => entry.properties.code) + .sort() + const recordCodes = bahiaIdentityTerritoryRecords.map((entry) => entry.code).sort() + expect(featureCodes).toEqual(recordCodes) + + for (const record of bahiaIdentityTerritoryRecords) { + const feature = getTerritoryFeature(record.code) + expect(feature, record.code).toBeDefined() + expect(feature?.properties.name).toBe(record.name) + expect(hasNonEmptyGeometry(feature?.geometry)).toBe(true) + } + }) + + it('looks up municipality and territory features by stable keys', () => { + const salvador = getMunicipalityFeature('2927408') + expect(salvador?.properties.name).toBe('Salvador') + expect(hasNonEmptyGeometry(salvador?.geometry)).toBe(true) + + const irece = getTerritoryFeature('01') + expect(irece?.properties.name).toBe('Irecê') + expect(hasNonEmptyGeometry(irece?.geometry)).toBe(true) + + expect(getMunicipalityFeature('0000000')).toBeUndefined() + expect(getTerritoryFeature('99')).toBeUndefined() + }) + + it('exposes TopoJSON object names expected by consumers', () => { + expect(bahiaMunicipalitiesTopology.type).toBe('Topology') + expect(bahiaIdentityTerritoriesTopology.type).toBe('Topology') + expect(Object.keys(bahiaMunicipalitiesTopology.objects)).toEqual(['municipalities']) + expect(Object.keys(bahiaIdentityTerritoriesTopology.objects)).toEqual(['territories']) + }) +}) diff --git a/tests/int/bahiaMunicipalityCodes.int.spec.ts b/tests/int/bahiaMunicipalityCodes.int.spec.ts new file mode 100644 index 00000000..db791b63 --- /dev/null +++ b/tests/int/bahiaMunicipalityCodes.int.spec.ts @@ -0,0 +1,82 @@ +// @vitest-environment node + +import { createHash } from 'node:crypto' +import { readFileSync } from 'node:fs' + +import { describe, expect, it } from 'vitest' + +import { + bahiaMunicipalityCodes, + codeForMunicipality, + municipalityForCode, +} from '@/lib/bahiaMunicipalityCodes' +import { bahiaMunicipalities } from '@/lib/bahiaTerritories' + +type OfficialEvidence = { + municipalityCount: number + assignments: Array<{ municipality: string; code: string }> + evidenceSha256: string +} + +const officialEvidence = JSON.parse( + readFileSync( + new URL('../fixtures/bahia-municipality-codes.official.json', import.meta.url), + 'utf8', + ), +) as OfficialEvidence + +describe('Bahia municipality name → IBGE code mapping', () => { + it('covers all 417 Bahia municipalities with 7-digit BA codes', () => { + expect(Object.keys(bahiaMunicipalityCodes)).toHaveLength(417) + expect(bahiaMunicipalities).toHaveLength(417) + expect(new Set(Object.keys(bahiaMunicipalityCodes))).toHaveLength(417) + expect(new Set(Object.values(bahiaMunicipalityCodes))).toHaveLength(417) + + for (const city of bahiaMunicipalities) { + const code = bahiaMunicipalityCodes[city] + expect(code, city).toBeDefined() + expect(code).toMatch(/^29\d{5}$/) + } + }) + + it('is a bijection with the canonical bahiaMunicipalities set', () => { + expect(Object.keys(bahiaMunicipalityCodes).sort((left, right) => left.localeCompare(right, 'pt-BR'))).toEqual( + [...bahiaMunicipalities].sort((left, right) => left.localeCompare(right, 'pt-BR')), + ) + }) + + it('matches the independently downloaded official municipality→code evidence', () => { + expect(officialEvidence.municipalityCount).toBe(417) + expect( + officialEvidence.assignments.map(({ municipality, code }) => ({ municipality, code })), + ).toEqual( + Object.entries(bahiaMunicipalityCodes) + .sort(([left], [right]) => left.localeCompare(right, 'pt-BR')) + .map(([municipality, code]) => ({ municipality, code })), + ) + }) + + it('matches every official assignment by a fixed evidence checksum', () => { + const assignmentRows = Object.entries(bahiaMunicipalityCodes) + .sort(([left], [right]) => left.localeCompare(right, 'pt-BR')) + .map(([municipality, code]) => `M\t${municipality}\t${code}\n`) + .join('') + + expect(createHash('sha256').update(assignmentRows).digest('hex')).toBe( + officialEvidence.evidenceSha256, + ) + }) + + it('supports bidirectional lookups', () => { + expect(codeForMunicipality('Salvador')).toBe('2927408') + expect(codeForMunicipality('Feira de Santana')).toBe('2910800') + expect(codeForMunicipality("Dias d'Ávila")).toBe('2910057') + expect(codeForMunicipality('Araças')).toBe('2902054') + expect(codeForMunicipality('Município inexistente')).toBeUndefined() + expect(codeForMunicipality('')).toBeUndefined() + + expect(municipalityForCode('2927408')).toBe('Salvador') + expect(municipalityForCode('2910800')).toBe('Feira de Santana') + expect(municipalityForCode('0000000')).toBeUndefined() + }) +})