From f104007f772a95b1b75138e746f211af7e9226be Mon Sep 17 00:00:00 2001 From: muthianura Date: Thu, 11 Jun 2026 18:10:22 +0700 Subject: [PATCH] Initial commit --- SIG2_jalantanah/api.php | 180 ++ SIG2_jalantanah/assets/jalan-input.js | 407 +++ SIG2_jalantanah/assets/jalan.css | 11 + SIG2_jalantanah/db2.php | 7 + SIG2_jalantanah/includes/confirm-modal.php | 115 + SIG2_jalantanah/includes/stats.php | 14 + SIG2_jalantanah/index.php | 1416 +++++++++ SIG_miskin/gis/config.php | 14 + SIG_miskin/gis/dashboard.php | 300 ++ SIG_miskin/gis/data_ibadah.php | 175 ++ SIG_miskin/gis/data_penduduk.php | 207 ++ SIG_miskin/gis/database.sql | 63 + SIG_miskin/gis/includes/confirm-modal.php | 127 + SIG_miskin/gis/includes/user-profile.php | 46 + SIG_miskin/gis/index.php | 2711 +++++++++++++++++ SIG_miskin/gis/login.php | 200 ++ SIG_miskin/gis/logout.php | 5 + .../uploads/foto_rumah/foto_4_1779805588.png | Bin 0 -> 9228 bytes .../uploads/foto_rumah/foto_9_1779806089.jpeg | Bin 0 -> 112027 bytes SIG_spbu/api.php | 47 + SIG_spbu/assets/map-base.js | 40 + SIG_spbu/assets/spbu.css | 234 ++ SIG_spbu/db.php | 7 + SIG_spbu/includes/confirm-modal.php | 115 + SIG_spbu/includes/map-controls.php | 14 + SIG_spbu/includes/sidebar.php | 44 + SIG_spbu/includes/stats.php | 8 + SIG_spbu/index.php | 283 ++ SIG_spbu/tambah.php | 149 + index.php | 202 ++ 30 files changed, 7141 insertions(+) create mode 100644 SIG2_jalantanah/api.php create mode 100644 SIG2_jalantanah/assets/jalan-input.js create mode 100644 SIG2_jalantanah/assets/jalan.css create mode 100644 SIG2_jalantanah/db2.php create mode 100644 SIG2_jalantanah/includes/confirm-modal.php create mode 100644 SIG2_jalantanah/includes/stats.php create mode 100644 SIG2_jalantanah/index.php create mode 100644 SIG_miskin/gis/config.php create mode 100644 SIG_miskin/gis/dashboard.php create mode 100644 SIG_miskin/gis/data_ibadah.php create mode 100644 SIG_miskin/gis/data_penduduk.php create mode 100644 SIG_miskin/gis/database.sql create mode 100644 SIG_miskin/gis/includes/confirm-modal.php create mode 100644 SIG_miskin/gis/includes/user-profile.php create mode 100644 SIG_miskin/gis/index.php create mode 100644 SIG_miskin/gis/login.php create mode 100644 SIG_miskin/gis/logout.php create mode 100644 SIG_miskin/gis/uploads/foto_rumah/foto_4_1779805588.png create mode 100644 SIG_miskin/gis/uploads/foto_rumah/foto_9_1779806089.jpeg create mode 100644 SIG_spbu/api.php create mode 100644 SIG_spbu/assets/map-base.js create mode 100644 SIG_spbu/assets/spbu.css create mode 100644 SIG_spbu/db.php create mode 100644 SIG_spbu/includes/confirm-modal.php create mode 100644 SIG_spbu/includes/map-controls.php create mode 100644 SIG_spbu/includes/sidebar.php create mode 100644 SIG_spbu/includes/stats.php create mode 100644 SIG_spbu/index.php create mode 100644 SIG_spbu/tambah.php create mode 100644 index.php diff --git a/SIG2_jalantanah/api.php b/SIG2_jalantanah/api.php new file mode 100644 index 0000000..4c48c40 --- /dev/null +++ b/SIG2_jalantanah/api.php @@ -0,0 +1,180 @@ + [(float)$p[1], (float)$p[0]], $pts); + return json_encode(['type' => 'LineString', 'coordinates' => $coords]); +} +function toGeoJsonPoly($pts) { + $coords = array_map(fn($p) => [(float)$p[1], (float)$p[0]], $pts); + if (count($coords) && $coords[0] !== $coords[count($coords)-1]) $coords[] = $coords[0]; + return json_encode(['type' => 'Polygon', 'coordinates' => [$coords]]); +} +function toGeoJsonPoint($lat, $lng) { + return json_encode(['type' => 'Point', 'coordinates' => [(float)$lng, (float)$lat]]); +} + +$action = $_GET['action'] ?? $_POST['action'] ?? null; +if (!$action) return; + +header('Content-Type: application/json; charset=utf-8'); +$a = $action; + +if ($a === 'search') { + $q = '%' . $conn->real_escape_string($_GET['q'] ?? '') . '%'; + $tipe = $_GET['tipe'] ?? 'semua'; + $sf = $_GET['status_filter'] ?? ''; + $pmin = (float)($_GET['panjang_min'] ?? 0); + $pmax = (float)($_GET['panjang_max'] ?? 0); + $rusak_periode = $_GET['rusak_periode'] ?? 'semua'; + $out = []; + if ($tipe === 'semua' || $tipe === 'jalan') { + $w = "nama_jalan LIKE '$q'"; + if ($sf) $w .= " AND status_jalan='" . $conn->real_escape_string($sf) . "'"; + if ($pmin > 0) $w .= " AND panjang_meter>=$pmin"; + if ($pmax > 0) $w .= " AND panjang_meter<=$pmax"; + $rj = $conn->query("SELECT id,nama_jalan,status_jalan,panjang_meter,koordinat FROM jalan WHERE $w LIMIT 20"); + while ($row = $rj->fetch_assoc()) { $row['type'] = 'jalan'; $out[] = $row; } + } + if ($tipe === 'semua' || $tipe === 'parsil') { + $w = "(nama_parsil LIKE '$q' OR nama_pemilik LIKE '$q')"; + if ($sf) $w .= " AND status_kepemilikan='" . $conn->real_escape_string($sf) . "'"; + $rp = $conn->query("SELECT id,nama_parsil,nama_pemilik,nomor_sertifikat,status_kepemilikan,luas_m2,koordinat FROM parsil WHERE $w LIMIT 20"); + while ($row = $rp->fetch_assoc()) { $row['type'] = 'parsil'; $out[] = $row; } + } + if ($tipe === 'semua' || $tipe === 'rusak') { + $wR = "nama LIKE '$q'"; + if ($rusak_periode === '1bulan') $wR .= " AND tanggal >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)"; + elseif ($rusak_periode === '3tahun') $wR .= " AND tanggal >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)"; + $rr = $conn->query("SELECT id,nama,tanggal,latitude,longitude,keterangan,koordinat FROM jalan_rusak WHERE $wR ORDER BY tanggal DESC LIMIT 20"); + while ($row = $rr->fetch_assoc()) { $row['type'] = 'rusak'; $out[] = $row; } + } + echo json_encode($out); exit; +} + +if ($a === 'save_jalan' && isset($_GET['nama'], $_GET['status'], $_GET['ukuran'], $_GET['koordinat'])) { + $nama = $conn->real_escape_string($_GET['nama']); + $status = $conn->real_escape_string($_GET['status']); + $panjang = (float)$_GET['ukuran']; + $raw = json_decode($_GET['koordinat'], true); + $geojson = $conn->real_escape_string(toGeoJsonLine($raw)); + $r = $conn->query("INSERT INTO jalan(nama_jalan,status_jalan,panjang_meter,koordinat) VALUES('$nama','$status','$panjang','$geojson')"); + echo json_encode(array_merge(['ok' => (bool)$r, 'id' => $conn->insert_id, 'msg' => $conn->error], getStats($conn))); exit; +} +if ($a === 'save_parsil' && isset($_GET['nama'], $_GET['status'], $_GET['ukuran'], $_GET['koordinat'])) { + $nama = $conn->real_escape_string($_GET['nama']); + $pemilik = $conn->real_escape_string($_GET['pemilik'] ?? ''); + $nosert = $conn->real_escape_string($_GET['nosert'] ?? ''); + $ket = $conn->real_escape_string($_GET['keterangan'] ?? ''); + $status = $conn->real_escape_string($_GET['status']); + $luas = (float)$_GET['ukuran']; + $raw = json_decode($_GET['koordinat'], true); + $geojson = $conn->real_escape_string(toGeoJsonPoly($raw)); + $r = $conn->query("INSERT INTO parsil(nama_parsil,nama_pemilik,nomor_sertifikat,keterangan,status_kepemilikan,luas_m2,koordinat) VALUES('$nama','$pemilik','$nosert','$ket','$status','$luas','$geojson')"); + echo json_encode(array_merge(['ok' => (bool)$r, 'id' => $conn->insert_id, 'msg' => $conn->error], getStats($conn))); exit; +} +if ($a === 'save_rusak') { + $pelapor = $conn->real_escape_string($_POST['pelapor'] ?? $_GET['pelapor'] ?? '') ?: 'Anonym'; + $nama_jalan = $conn->real_escape_string($_POST['nama_jalan'] ?? $_GET['nama_jalan'] ?? ''); + $tanggal = $conn->real_escape_string($_POST['tanggal'] ?? $_GET['tanggal'] ?? date('Y-m-d')); + $lat = (float)($_POST['lat'] ?? $_GET['lat'] ?? 0); + $lng = (float)($_POST['lng'] ?? $_GET['lng'] ?? 0); + $ket = $conn->real_escape_string($_POST['keterangan'] ?? $_GET['keterangan'] ?? ''); + $foto = $conn->real_escape_string($_POST['foto'] ?? $_GET['foto'] ?? ''); + $namaFull = $conn->real_escape_string($pelapor . ($nama_jalan ? ' | Jalan: ' . $nama_jalan : '')); + $geojson = $conn->real_escape_string(toGeoJsonPoint($lat, $lng)); + $r = $conn->query("INSERT INTO jalan_rusak(nama,tanggal,latitude,longitude,keterangan,foto,koordinat) VALUES('$namaFull','$tanggal','$lat','$lng','$ket','$foto','$geojson')"); + echo json_encode(array_merge(['ok' => (bool)$r, 'id' => $conn->insert_id, 'msg' => $conn->error, 'nama' => $namaFull], getStats($conn))); exit; +} + +if ($a === 'delete_jalan' && isset($_GET['id'])) { + $conn->query("DELETE FROM jalan WHERE id=" . (int)$_GET['id']); + echo json_encode(getStats($conn)); exit; +} +if ($a === 'delete_parsil' && isset($_GET['id'])) { + $conn->query("DELETE FROM parsil WHERE id=" . (int)$_GET['id']); + echo json_encode(getStats($conn)); exit; +} +if ($a === 'delete_rusak' && isset($_GET['id'])) { + $conn->query("DELETE FROM jalan_rusak WHERE id=" . (int)$_GET['id']); + echo json_encode(getStats($conn)); exit; +} + +if ($a === 'edit_jalan' && isset($_GET['id'], $_GET['nama'], $_GET['status'])) { + $id = (int)$_GET['id']; + $n = $conn->real_escape_string($_GET['nama']); + $s = $conn->real_escape_string($_GET['status']); + $coords = $_GET['koordinat'] ?? ''; + $pjg = 0; + if ($coords) { + $g = json_decode($coords, true); + $pts = []; + if (isset($g['type']) && $g['type'] === 'LineString') foreach ($g['coordinates'] as $c) $pts[] = ['lat' => $c[1], 'lng' => $c[0]]; + else foreach (json_decode($coords, true) as $p) $pts[] = ['lat' => $p[0], 'lng' => $p[1]]; + for ($i = 0; $i < count($pts) - 1; $i++) { + $la1 = deg2rad($pts[$i]['lat']); $lo1 = deg2rad($pts[$i]['lng']); + $la2 = deg2rad($pts[$i+1]['lat']); $lo2 = deg2rad($pts[$i+1]['lng']); + $d = 2 * 6371000 * asin(sqrt(sin(($la2-$la1)/2)**2 + cos($la1)*cos($la2)*sin(($lo2-$lo1)/2)**2)); + $pjg += $d; + } + $ce = $conn->real_escape_string($coords); + $conn->query("UPDATE jalan SET nama_jalan='$n',status_jalan='$s',panjang_meter='$pjg',koordinat='$ce' WHERE id=$id"); + } else { + $conn->query("UPDATE jalan SET nama_jalan='$n',status_jalan='$s' WHERE id=$id"); + $pjg = $conn->query("SELECT panjang_meter FROM jalan WHERE id=$id")->fetch_assoc()['panjang_meter']; + } + echo json_encode(array_merge(getStats($conn), ['panjang' => round($pjg, 1)])); exit; +} + +if ($a === 'edit_parsil' && isset($_GET['id'], $_GET['nama'], $_GET['status'])) { + $id = (int)$_GET['id']; + $n = $conn->real_escape_string($_GET['nama']); + $s = $conn->real_escape_string($_GET['status']); + $pemilik = $conn->real_escape_string($_GET['pemilik'] ?? ''); + $nosert = $conn->real_escape_string($_GET['nosert'] ?? ''); + $ket = $conn->real_escape_string($_GET['keterangan'] ?? ''); + $coords = $_GET['koordinat'] ?? ''; + $luas = 0; + if ($coords) { + $g = json_decode($coords, true); + $pts = isset($g['type']) && $g['type'] === 'Polygon' + ? array_map(fn($c) => ['lat' => $c[1], 'lng' => $c[0]], $g['coordinates'][0]) + : array_map(fn($p) => ['lat' => $p[0], 'lng' => $p[1]], json_decode($coords, true)); + $R = 6371000; $n2 = count($pts); $area = 0; + for ($i = 0; $i < $n2; $i++) { + $j = ($i + 1) % $n2; + $xi = $pts[$i]['lng'] * M_PI/180 * $R * cos($pts[$i]['lat'] * M_PI/180); + $yi = $pts[$i]['lat'] * M_PI/180 * $R; + $xj = $pts[$j]['lng'] * M_PI/180 * $R * cos($pts[$j]['lat'] * M_PI/180); + $yj = $pts[$j]['lat'] * M_PI/180 * $R; + $area += ($xi * $yj - $xj * $yi); + } + $luas = abs($area / 2); + $ce = $conn->real_escape_string($coords); + $conn->query("UPDATE parsil SET nama_parsil='$n',status_kepemilikan='$s',nama_pemilik='$pemilik',nomor_sertifikat='$nosert',keterangan='$ket',luas_m2='$luas',koordinat='$ce' WHERE id=$id"); + } else { + $conn->query("UPDATE parsil SET nama_parsil='$n',status_kepemilikan='$s',nama_pemilik='$pemilik',nomor_sertifikat='$nosert',keterangan='$ket' WHERE id=$id"); + $luas = $conn->query("SELECT luas_m2 FROM parsil WHERE id=$id")->fetch_assoc()['luas_m2']; + } + echo json_encode(array_merge(getStats($conn), ['luas' => round($luas, 1)])); exit; +} + +if ($a === 'edit_rusak' && isset($_GET['id'])) { + $id = (int)$_GET['id']; + $n = $conn->real_escape_string($_POST['nama'] ?? $_GET['nama'] ?? ''); + $tgl = $conn->real_escape_string($_POST['tanggal'] ?? $_GET['tanggal'] ?? ''); + $ket = $conn->real_escape_string($_POST['keterangan'] ?? $_GET['keterangan'] ?? ''); + $foto = $conn->real_escape_string($_POST['foto'] ?? $_GET['foto'] ?? ''); + $lat = isset($_POST['latitude']) ? (float)$_POST['latitude'] : (isset($_GET['latitude']) ? (float)$_GET['latitude'] : null); + $lng = isset($_POST['longitude']) ? (float)$_POST['longitude'] : (isset($_GET['longitude']) ? (float)$_GET['longitude'] : null); + if ($lat !== null && $lng !== null) { + $geojson = $conn->real_escape_string(toGeoJsonPoint($lat, $lng)); + $conn->query("UPDATE jalan_rusak SET nama='$n',tanggal='$tgl',keterangan='$ket',foto='$foto',latitude='$lat',longitude='$lng',koordinat='$geojson' WHERE id=$id"); + } else { + $conn->query("UPDATE jalan_rusak SET nama='$n',tanggal='$tgl',keterangan='$ket',foto='$foto' WHERE id=$id"); + } + echo json_encode(array_merge(getStats($conn), ['ok' => true])); exit; +} + +echo json_encode(['error' => 'unknown']); exit; diff --git a/SIG2_jalantanah/assets/jalan-input.js b/SIG2_jalantanah/assets/jalan-input.js new file mode 100644 index 0000000..40a7c8f --- /dev/null +++ b/SIG2_jalantanah/assets/jalan-input.js @@ -0,0 +1,407 @@ +/* Input mode: draw jalan / kavling / rusak on map */ +var drawMode = null, drawing = false, points = [], previewLayer = null, tempMarkers = []; +var pendingKoord = null, pendingUkuran = 0, currentMode = null; +var pendingRusakLatLng = null, fotoBase64 = ''; + +function setMode(m) { + if (drawing) cancelDraw(); + drawMode = m; + currentMode = m; + + var bj = document.getElementById('btn-jalan'); + var bp = document.getElementById('btn-parsil'); + var br = document.getElementById('btn-rusak'); + if (bj) bj.className = m === 'jalan' ? 'active-jalan' : ''; + if (bp) bp.className = m === 'parsil' ? 'active-parsil' : ''; + if (br) br.className = m === 'rusak' ? 'active-rusak' : ''; + + var actions = document.getElementById('draw-actions'); + var hint = document.getElementById('hint'); + + if (m === 'rusak') { + drawing = false; + points = []; + if (hint) hint.textContent = 'Klik titik di peta untuk menandai jalan rusak'; + map.getContainer().style.cursor = 'crosshair'; + if (actions) actions.style.display = 'flex'; + ['undo-btn', 'finish-btn'].forEach(function (id) { + var el = document.getElementById(id); + if (el) el.style.display = 'none'; + }); + var cancel = document.getElementById('cancel-btn'); + if (cancel) cancel.style.display = 'block'; + return; + } + + drawing = true; + points = []; + if (actions) actions.style.display = 'flex'; + ['undo-btn', 'finish-btn', 'cancel-btn'].forEach(function (id) { + var el = document.getElementById(id); + if (el) el.style.display = 'block'; + }); + if (hint) { + hint.textContent = m === 'jalan' + ? 'Klik peta untuk menambah titik jalan — minimal 2 titik' + : 'Klik peta untuk menggambar area kavling — minimal 3 titik'; + } + map.getContainer().style.cursor = 'crosshair'; +} + +map.on('click', function (e) { + if (currentMode === 'rusak') { + pendingRusakLatLng = e.latlng; + openRusakModal(e.latlng); + return; + } + if (!drawing) return; + points.push(e.latlng); + var dot = L.circleMarker(e.latlng, { + radius: 5, + color: drawMode === 'jalan' ? '#2563eb' : '#7c3aed', + fillColor: '#fff', + fillOpacity: 1, + weight: 2.5 + }).addTo(map); + tempMarkers.push(dot); + redrawPreview(); +}); + +function redrawPreview() { + if (previewLayer) map.removeLayer(previewLayer); + if (points.length < 2) return; + var opts = { color: drawMode === 'jalan' ? '#2563eb' : '#7c3aed', weight: 2.5, dashArray: '7,5', opacity: 0.85 }; + previewLayer = drawMode === 'jalan' + ? L.polyline(points, opts).addTo(map) + : L.polygon(points, Object.assign({}, opts, { fillOpacity: 0.1 })).addTo(map); +} + +function undoLast() { + if (!points.length) return; + points.pop(); + var last = tempMarkers.pop(); + if (last) map.removeLayer(last); + redrawPreview(); +} + +function cancelDraw() { + drawing = false; + points = []; + if (previewLayer) { map.removeLayer(previewLayer); previewLayer = null; } + tempMarkers.forEach(function (m) { map.removeLayer(m); }); + tempMarkers = []; + map.getContainer().style.cursor = ''; + var actions = document.getElementById('draw-actions'); + if (actions) actions.style.display = 'none'; + ['btn-jalan', 'btn-parsil', 'btn-rusak'].forEach(function (id) { + var el = document.getElementById(id); + if (el) el.className = ''; + }); + var hint = document.getElementById('hint'); + if (hint) hint.textContent = 'Pilih mode input di atas'; + currentMode = null; + drawMode = null; + pendingRusakLatLng = null; +} + +function finishShape() { + if (drawMode === 'jalan' && points.length < 2) { showToast('Minimal 2 titik untuk jalan!', 'error'); return; } + if (drawMode === 'parsil' && points.length < 3) { showToast('Minimal 3 titik untuk kavling!', 'error'); return; } + drawing = false; + map.getContainer().style.cursor = ''; + + var ukuran = 0; + if (drawMode === 'jalan') { + for (var i = 0; i < points.length - 1; i++) ukuran += points[i].distanceTo(points[i + 1]); + ukuran = Math.round(ukuran * 10) / 10; + document.getElementById('inp-ukuran').value = ukuran.toFixed(1) + ' meter'; + document.getElementById('form-title').textContent = 'Simpan Data Jalan'; + document.getElementById('form-sub').textContent = 'Lengkapi informasi ruas jalan'; + document.getElementById('form-icon').textContent = '🛣'; + document.getElementById('form-icon').className = 'modal-icon jalan'; + document.getElementById('label-nama').textContent = 'Nama Jalan'; + document.getElementById('label-status').textContent = 'Status Jalan'; + document.getElementById('label-ukuran').innerHTML = 'Panjang Jalan Otomatis'; + document.getElementById('inp-nama').placeholder = 'Contoh: Jl. Ahmad Yani'; + document.getElementById('inp-status').innerHTML = + '' + + '' + + ''; + document.getElementById('parsil-extra-fields').style.display = 'none'; + } else { + ukuran = calcArea(points); + ukuran = Math.round(ukuran * 10) / 10; + document.getElementById('inp-ukuran').value = ukuran.toFixed(1) + ' m²'; + document.getElementById('form-title').textContent = 'Simpan Data Kavling'; + document.getElementById('form-sub').textContent = 'Lengkapi informasi kavling tanah'; + document.getElementById('form-icon').textContent = '🏘'; + document.getElementById('form-icon').className = 'modal-icon parsil'; + document.getElementById('label-nama').textContent = 'Nama / Nomor Parsil'; + document.getElementById('label-status').textContent = 'Status Kepemilikan'; + document.getElementById('label-ukuran').innerHTML = 'Luas Area Otomatis'; + document.getElementById('inp-nama').placeholder = 'Contoh: Parsil A-01'; + document.getElementById('inp-status').innerHTML = + '' + + '' + + '' + + ''; + document.getElementById('parsil-extra-fields').style.display = 'block'; + document.getElementById('inp-pemilik').value = ''; + document.getElementById('inp-nosert').value = ''; + document.getElementById('inp-keterangan').value = ''; + } + + pendingKoord = points.map(function (p) { return [p.lat, p.lng]; }); + pendingUkuran = ukuran; + document.getElementById('inp-nama').value = ''; + document.getElementById('form-modal').classList.add('active'); + setTimeout(function () { document.getElementById('inp-nama').focus(); }, 100); +} + +function calcArea(latlngs) { + var R = 6371000, n = latlngs.length, area = 0; + if (n < 3) return 0; + for (var i = 0; i < n; i++) { + var j = (i + 1) % n; + var xi = latlngs[i].lng * Math.PI / 180 * R * Math.cos(latlngs[i].lat * Math.PI / 180); + var yi = latlngs[i].lat * Math.PI / 180 * R; + var xj = latlngs[j].lng * Math.PI / 180 * R * Math.cos(latlngs[j].lat * Math.PI / 180); + var yj = latlngs[j].lat * Math.PI / 180 * R; + area += xi * yj - xj * yi; + } + return Math.abs(area / 2); +} + +function saveData() { + var nama = document.getElementById('inp-nama').value.trim(); + var status = document.getElementById('inp-status').value; + if (!nama) { showToast('Nama tidak boleh kosong!', 'error'); return; } + + var btn = document.querySelector('#form-modal .btn-primary'); + btn.textContent = 'Menyimpan…'; + btn.disabled = true; + + var params = { + action: currentMode === 'jalan' ? 'save_jalan' : 'save_parsil', + nama: nama, + status: status, + ukuran: pendingUkuran, + koordinat: JSON.stringify(pendingKoord) + }; + if (currentMode === 'parsil') { + params.pemilik = document.getElementById('inp-pemilik').value.trim(); + params.nosert = document.getElementById('inp-nosert').value.trim(); + params.keterangan = document.getElementById('inp-keterangan').value.trim(); + } + + fetch('api.php?' + new URLSearchParams(params)) + .then(function (r) { return r.json(); }) + .then(function (res) { + btn.textContent = 'Simpan Data'; + btn.disabled = false; + if (res.ok) { + showToast('Data berhasil disimpan!', 'success'); + closeForm(); + var id = res.id; + var ll = pendingKoord.map(function (p) { return [p[0], p[1]]; }); + if (currentMode === 'jalan') { + var layer = L.polyline(ll, { color: WARNA_JALAN[status] || '#999', weight: 5, opacity: 0.9 }).addTo(map); + layer.bindPopup(makeJalanPopup(id, nama, status, pendingUkuran.toFixed(1)), { maxWidth: 280 }); + layer.on('click', function () { lnavHighlightFromMap('jalan', id); }); + jalanLayers[id] = layer; + jalanData[id] = { id: id, nama: nama, status: status, pjg: pendingUkuran.toFixed(1), ll: ll }; + } else { + var opt = WARNA_PARSIL[status] || { color: '#999', fillColor: '#999', fillOpacity: 0.2, weight: 2 }; + var layer2 = L.polygon(ll, opt).addTo(map); + layer2.bindPopup(makeParsilPopup(id, nama, params.pemilik || '', params.nosert || '', params.keterangan || '', status, pendingUkuran.toFixed(1)), { maxWidth: 280 }); + layer2.on('click', function () { lnavHighlightFromMap('parsil', id); }); + parsilLayers[id] = layer2; + parsilData[id] = { id: id, nama: nama, pemilik: params.pemilik || '', nosert: params.nosert || '', ket: params.keterangan || '', status: status, luas: pendingUkuran.toFixed(1), ll: ll }; + } + if (res.tj !== undefined) updateStats(res); + cancelDraw(); + } else { + showToast('Gagal: ' + (res.msg || 'unknown'), 'error'); + } + }) + .catch(function () { + btn.textContent = 'Simpan Data'; + btn.disabled = false; + showToast('Koneksi gagal!', 'error'); + }); +} + +function closeForm() { + document.getElementById('form-modal').classList.remove('active'); +} + +document.getElementById('form-modal').addEventListener('click', function (e) { + if (e.target === this) closeForm(); +}); + +function openRusakModal(latlng) { + var d = new Date(); + var today = d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0'); + document.getElementById('rusak-tanggal').value = today; + document.getElementById('rusak-koordinat').value = latlng.lat.toFixed(6) + ', ' + latlng.lng.toFixed(6); + document.getElementById('rusak-sub').textContent = latlng.lat.toFixed(5) + ', ' + latlng.lng.toFixed(5); + document.getElementById('rusak-pelapor').value = ''; + document.getElementById('rusak-nama-jalan').value = 'Mencari nama jalan…'; + document.getElementById('rusak-ket').value = ''; + clearFoto(); + + fetch('https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=' + latlng.lat + '&lon=' + latlng.lng + '&zoom=17&accept-language=id') + .then(function (r) { return r.json(); }) + .then(function (geo) { + var road = geo.address && (geo.address.road || geo.address.residential || geo.address.path || geo.address.pedestrian || geo.address.footway || ''); + document.getElementById('rusak-nama-jalan').value = road || '(Jalan tidak teridentifikasi)'; + }) + .catch(function () { + document.getElementById('rusak-nama-jalan').value = '(Gagal deteksi nama jalan)'; + }); + + var badge = document.getElementById('gps-badge'); + badge.style.display = 'inline-flex'; + badge.className = 'gps-badge loading'; + badge.textContent = 'Mengambil GPS…'; + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (pos) { + badge.className = 'gps-badge'; + badge.textContent = 'GPS: ±' + Math.round(pos.coords.accuracy) + 'm akurasi'; + }, function () { + badge.className = 'gps-badge'; + badge.textContent = 'Koordinat dari klik peta'; + }, { timeout: 5000 }); + } else { + badge.className = 'gps-badge'; + badge.textContent = 'Koordinat dari klik peta'; + } + + document.getElementById('rusak-modal').classList.add('active'); + setTimeout(function () { document.getElementById('rusak-pelapor').focus(); }, 100); +} + +function closeRusakModal() { + document.getElementById('rusak-modal').classList.remove('active'); + fotoBase64 = ''; + pendingRusakLatLng = null; +} + +document.getElementById('rusak-modal').addEventListener('click', function (e) { + if (e.target === this) closeRusakModal(); +}); + +function handleFoto(input) { + var file = input.files[0]; + if (!file) return; + if (file.size > 5 * 1024 * 1024) { showToast('Foto maks 5 MB!', 'error'); return; } + + EXIF.getData(file, function() { + var lat = EXIF.getTag(this, "GPSLatitude"); + var lon = EXIF.getTag(this, "GPSLongitude"); + var latRef = EXIF.getTag(this, "GPSLatitudeRef") || "N"; + var lonRef = EXIF.getTag(this, "GPSLongitudeRef") || "E"; + if (lat && lon) { + function parseDms(dms) { + if (!dms || dms.length < 3) return null; + var d = (typeof dms[0] === 'object' && dms[0].denominator) ? dms[0].numerator / dms[0].denominator : Number(dms[0]); + var m = (typeof dms[1] === 'object' && dms[1].denominator) ? dms[1].numerator / dms[1].denominator : Number(dms[1]); + var s = (typeof dms[2] === 'object' && dms[2].denominator) ? dms[2].numerator / dms[2].denominator : Number(dms[2]); + return d + (m / 60) + (s / 3600); + } + + var latDec = parseDms(lat); + var lonDec = parseDms(lon); + + if (latDec !== null && lonDec !== null && !isNaN(latDec) && !isNaN(lonDec)) { + if (latRef === "S") latDec = -latDec; + if (lonRef === "W") lonDec = -lonDec; + pendingRusakLatLng = {lat: latDec, lng: lonDec}; + document.getElementById('rusak-koordinat').value = latDec.toFixed(6) + ', ' + lonDec.toFixed(6); + showToast('Geotagging terdeteksi!', 'success'); + + var badge = document.getElementById('gps-badge'); + if(badge) { + badge.style.display = 'inline-flex'; + badge.className = 'gps-badge'; + badge.textContent = 'GPS dari Foto'; + } + + fetch('https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=' + latDec + '&lon=' + lonDec + '&zoom=17&accept-language=id') + .then(function (r) { return r.json(); }) + .then(function (geo) { + var road = geo.address && (geo.address.road || geo.address.residential || geo.address.path || geo.address.pedestrian || geo.address.footway || ''); + document.getElementById('rusak-nama-jalan').value = road || geo.display_name || '(Jalan tidak teridentifikasi)'; + }); + } + } + }); + + var reader = new FileReader(); + reader.onload = function (e) { + fotoBase64 = e.target.result; + var preview = document.getElementById('photo-preview'); + preview.src = fotoBase64; + preview.style.display = 'block'; + document.getElementById('foto-clear-btn').style.display = 'flex'; + }; + reader.readAsDataURL(file); +} + +function clearFoto() { + fotoBase64 = ''; + document.getElementById('photo-preview').style.display = 'none'; + document.getElementById('photo-preview').src = ''; + document.getElementById('foto-clear-btn').style.display = 'none'; + document.getElementById('foto-file').value = ''; + document.getElementById('foto-cam').value = ''; +} + +function saveRusak() { + if (!pendingRusakLatLng) { showToast('Pilih titik di peta dulu!', 'error'); return; } + var pelapor = document.getElementById('rusak-pelapor').value.trim() || 'Anonym'; + var namaJalan = document.getElementById('rusak-nama-jalan').value.trim(); + var tanggal = document.getElementById('rusak-tanggal').value; + var ket = document.getElementById('rusak-ket').value.trim(); + var lat = pendingRusakLatLng.lat; + var lng = pendingRusakLatLng.lng; + + var btn = document.getElementById('rusak-save-btn'); + btn.textContent = 'Menyimpan…'; + btn.disabled = true; + + var formData = new FormData(); + formData.append('action', 'save_rusak'); + formData.append('pelapor', pelapor); + formData.append('nama_jalan', namaJalan); + formData.append('tanggal', tanggal); + formData.append('lat', lat); + formData.append('lng', lng); + formData.append('keterangan', ket); + formData.append('foto', fotoBase64); + + fetch('api.php', { method: 'POST', body: formData }) + .then(function (r) { return r.json(); }) + .then(function (res) { + btn.textContent = 'Simpan Titik'; + btn.disabled = false; + if (res.ok) { + showToast('Titik jalan rusak disimpan!', 'success'); + closeRusakModal(); + var id = res.id; + var nama = res.nama || pelapor; + var layer = makeRusakLayer(id, nama, tanggal, lat, lng, ket, fotoBase64, 'recent', false); + rusakLayers[id] = layer; + rusakData[id] = { id: id, nama: nama, tgl: tanggal, lat: lat, lng: lng, ket: ket, foto: fotoBase64, age: 'recent', recurring: false }; + if (res.tr !== undefined) updateStats(res); + cancelDraw(); + } else { + showToast('Gagal: ' + (res.msg || 'unknown'), 'error'); + } + }) + .catch(function () { + btn.textContent = 'Simpan Titik'; + btn.disabled = false; + showToast('Koneksi gagal!', 'error'); + }); +} diff --git a/SIG2_jalantanah/assets/jalan.css b/SIG2_jalantanah/assets/jalan.css new file mode 100644 index 0000000..7898d72 --- /dev/null +++ b/SIG2_jalantanah/assets/jalan.css @@ -0,0 +1,11 @@ +/* SIG Jalan Tanah — shared layout tokens (main styles in index.php) */ +:root { + --bg: #f1f5f9; + --white: #fff; + --border: #e2e8f0; + --text: #0f172a; + --text2: #475569; + --text3: #94a3b8; + --blue: #1d4ed8; + --sidebar-w: 320px; +} diff --git a/SIG2_jalantanah/db2.php b/SIG2_jalantanah/db2.php new file mode 100644 index 0000000..e254929 --- /dev/null +++ b/SIG2_jalantanah/db2.php @@ -0,0 +1,7 @@ +connect_error) { + die("Koneksi gagal: " . $conn->connect_error); +} +$conn->set_charset("utf8"); +?> \ No newline at end of file diff --git a/SIG2_jalantanah/includes/confirm-modal.php b/SIG2_jalantanah/includes/confirm-modal.php new file mode 100644 index 0000000..a3febb2 --- /dev/null +++ b/SIG2_jalantanah/includes/confirm-modal.php @@ -0,0 +1,115 @@ + + + diff --git a/SIG2_jalantanah/includes/stats.php b/SIG2_jalantanah/includes/stats.php new file mode 100644 index 0000000..1bcd45d --- /dev/null +++ b/SIG2_jalantanah/includes/stats.php @@ -0,0 +1,14 @@ +query("SELECT COUNT(*) c FROM jalan")->fetch_assoc()['c']; + $nas = $conn->query("SELECT COUNT(*) c FROM jalan WHERE status_jalan='Jalan Nasional'")->fetch_assoc()['c']; + $pro = $conn->query("SELECT COUNT(*) c FROM jalan WHERE status_jalan='Jalan Provinsi'")->fetch_assoc()['c']; + $kab = $conn->query("SELECT COUNT(*) c FROM jalan WHERE status_jalan='Jalan Kabupaten'")->fetch_assoc()['c']; + $tp = $conn->query("SELECT COUNT(*) c FROM parsil")->fetch_assoc()['c']; + $shm = $conn->query("SELECT COUNT(*) c FROM parsil WHERE status_kepemilikan='SHM'")->fetch_assoc()['c']; + $hgb = $conn->query("SELECT COUNT(*) c FROM parsil WHERE status_kepemilikan='HGB'")->fetch_assoc()['c']; + $hgu = $conn->query("SELECT COUNT(*) c FROM parsil WHERE status_kepemilikan='HGU'")->fetch_assoc()['c']; + $hp = $conn->query("SELECT COUNT(*) c FROM parsil WHERE status_kepemilikan='HP'")->fetch_assoc()['c']; + $tr = $conn->query("SELECT COUNT(*) c FROM jalan_rusak")->fetch_assoc()['c']; + return compact('tj','nas','pro','kab','tp','shm','hgb','hgu','hp','tr'); +} diff --git a/SIG2_jalantanah/index.php b/SIG2_jalantanah/index.php new file mode 100644 index 0000000..268866d --- /dev/null +++ b/SIG2_jalantanah/index.php @@ -0,0 +1,1416 @@ + + + + + + +Sistem Informasi Infrastruktur Jalan — Pontianak + + + + + + + + + +
+ + + + +
+ +
+
+ +
Peta GIS Jalan & Kavling Tanah
+
+
+ + + + Input Baru + + + + + Lihat Peta + + +
+
+ +
+ + +
+ +
+

Legenda

+
Jalan
+
Jalan Nasional
+
Jalan Provinsi
+
Jalan Kabupaten
+ +
Kavling
+
SHM
+
HGB
+
HGU
+
HP
+ +
Jalan Rusak
+
< 1 bulan
+
3-12 bulan
+
> 1 tahun
+
⚡ Berulang rusak
+
+ + +
+

Tampilkan

+ + + +
+ + +
+

Peta Dasar

+
+ + +
+
+
+
+ +
+ + +
+
+
+
🛣
+
Edit Data
+ +
+
+
📋 Data
+
📐 Geometri
+
+ +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
+ + + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SIG_miskin/gis/config.php b/SIG_miskin/gis/config.php new file mode 100644 index 0000000..31f9541 --- /dev/null +++ b/SIG_miskin/gis/config.php @@ -0,0 +1,14 @@ +set_charset('utf8mb4'); + +if ($conn->connect_error) { + http_response_code(500); + die(json_encode(['error' => 'Database connection failed: ' . $conn->connect_error])); +} \ No newline at end of file diff --git a/SIG_miskin/gis/dashboard.php b/SIG_miskin/gis/dashboard.php new file mode 100644 index 0000000..6d9b9a4 --- /dev/null +++ b/SIG_miskin/gis/dashboard.php @@ -0,0 +1,300 @@ +query("SELECT COUNT(*) c FROM penduduk_miskin")->fetch_assoc()['c']; +$total_anggota = $conn->query("SELECT SUM(jumlah_anggota) c FROM penduduk_miskin")->fetch_assoc()['c'] ?? 0; +$total_ibadah = $conn->query("SELECT COUNT(*) c FROM rumah_ibadah")->fetch_assoc()['c']; +$terdaftar = $conn->query("SELECT COUNT(*) c FROM penduduk_miskin WHERE rumah_ibadah_id IS NOT NULL")->fetch_assoc()['c']; +$belum = $total_penduduk - $terdaftar; + +$per_ibadah = $conn->query("SELECT ri.nama, COUNT(pm.id) AS jumlah FROM rumah_ibadah ri LEFT JOIN penduduk_miskin pm ON pm.rumah_ibadah_id=ri.id GROUP BY ri.id ORDER BY jumlah DESC"); +$jenis_ibadah= $conn->query("SELECT jenis, COUNT(*) c FROM rumah_ibadah GROUP BY jenis ORDER BY c DESC"); +$jenis_colors= ['Masjid'=>'blue','Gereja'=>'violet','Pura'=>'amber','Vihara'=>'green','Kelenteng'=>'cyan','Lainnya'=>'gray']; +$rows_ibadah=[]; $max=1; +while($r=$per_ibadah->fetch_assoc()){ $rows_ibadah[]=$r; if($r['jumlah']>$max) $max=$r['jumlah']; } +$rows_jenis=[]; +while($r=$jenis_ibadah->fetch_assoc()) $rows_jenis[]=$r; + +// Pagination logic for latest assistance distributions +$limit = 15; +$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1; +$offset = ($page - 1) * $limit; + +// Count total records +$total_bantuan = $conn->query("SELECT COUNT(*) c FROM riwayat_bantuan")->fetch_assoc()['c']; +$total_pages = ceil($total_bantuan / $limit); + +$recent_bantuan = $conn->query(" + SELECT rb.*, pm.nama_kk, ri.nama as nama_ibadah, ri2.nama as ibadah_terdaftar + FROM riwayat_bantuan rb + JOIN penduduk_miskin pm ON rb.penduduk_id = pm.id + LEFT JOIN rumah_ibadah ri ON rb.rumah_ibadah_id = ri.id + LEFT JOIN rumah_ibadah ri2 ON pm.rumah_ibadah_id = ri2.id + ORDER BY rb.tanggal_pemberian DESC, rb.id DESC + LIMIT $limit OFFSET $offset +"); +$current = basename($_SERVER['PHP_SELF']); +?> + + + + +Dashboard — Pemetaan Kemiskinan Terpadu + + + + + + + + +
+
+

Dashboard

+ Diperbarui WIB +
+
+
+
+
KK Penduduk Miskin
+
+
Kepala keluarga terdata
+
+
+
Total Jiwa
+
+
Anggota keluarga
+
+
+
Rumah Ibadah
+
+
Titik ibadah aktif
+
+
+
Terdaftar Radius
+
+
KK dalam cakupan
+
+
+
Belum Terdaftar
+
+
Di luar radius ibadah
+
+
+ +
+
+
+

Binaan per Rumah Ibadah

+

Jumlah KK dalam radius tiap tempat ibadah

+
+
+ 0?round($r['jumlah']/$max*100):0; ?> +
+
+
+
+
+ +
+
+
+
+

Sebaran Jenis Rumah Ibadah

+

Komposisi berdasarkan jenis bangunan

+
+
+ +
+ + tempat +
+ +
+
+
+ + + + + + +
+
+

Log Pembagian Bantuan Terbaru

+

Aktivitas penyaluran bantuan sosial kepada keluarga binaan

+
+
+ + + + + + + + + + + + num_rows > 0): ?> + fetch_assoc()): ?> + + + + + + + + + + + + + + +
Nama Kepala KeluargaLokasi Tempat IbadahJenis BantuanTanggal DiberikanKeterangan
+ + +
+ +
+ + + + + + + ❌ Belum Terdaftar + +
Belum ada riwayat pembagian bantuan.
+
+ 1): ?> + + +
+
+
+ diff --git a/SIG_miskin/gis/data_ibadah.php b/SIG_miskin/gis/data_ibadah.php new file mode 100644 index 0000000..b96ec0f --- /dev/null +++ b/SIG_miskin/gis/data_ibadah.php @@ -0,0 +1,175 @@ +real_escape_string($cari); + $where = "WHERE ri.nama LIKE '%$c%' OR ri.alamat LIKE '%$c%' OR ri.pic LIKE '%$c%' OR ri.jenis LIKE '%$c%'"; +} + +$total_rows = $conn->query("SELECT COUNT(*) c FROM rumah_ibadah ri $where")->fetch_assoc()['c']; +$total_pages = max(1, ceil($total_rows / $per_page)); +$page = min($page, $total_pages); +$offset = ($page - 1) * $per_page; + +$data = $conn->query(" + SELECT ri.*, COUNT(pm.id) AS jumlah_binaan, SUM(pm.jumlah_anggota) AS total_jiwa + FROM rumah_ibadah ri + LEFT JOIN penduduk_miskin pm ON pm.rumah_ibadah_id = ri.id + $where + GROUP BY ri.id ORDER BY ri.nama ASC + LIMIT $per_page OFFSET $offset +"); + +$all = $conn->query("SELECT ri.nama,ri.jenis,ri.alamat,ri.pic,ri.no_wa,ri.radius,COUNT(pm.id) AS jumlah_binaan,SUM(pm.jumlah_anggota) AS total_jiwa FROM rumah_ibadah ri LEFT JOIN penduduk_miskin pm ON pm.rumah_ibadah_id=ri.id GROUP BY ri.id ORDER BY ri.nama"); +$all_rows=[]; +while($r=$all->fetch_assoc()) $all_rows[]=$r; + +$jenis_colors=['Masjid'=>'blue','Gereja'=>'violet','Pura'=>'amber','Vihara'=>'green','Kelenteng'=>'cyan','Lainnya'=>'gray']; +$current = basename($_SERVER['PHP_SELF']); + +function pag_url($p,$cari){ + $q=$cari!==''?'&cari='.urlencode($cari):''; + return '?page='.$p.$q; +} +?> + + + + +Rumah Ibadah — Pemetaan Kemiskinan Terpadu + + + + + + + +
+

Rumah Ibadah

Total tempat ibadah
+
+
+
+

Daftar Rumah Ibadah

+

Halaman dari · data total

+
+ +
+ +
+
+
+
+ + +
+ + ✕ Reset +
+ dari +
+ + + + + + + fetch_assoc()): + $col=$jenis_colors[$r['jenis']]??'gray'; ?> + + + + + + + + + + + + + +
#NamaJenisAlamatPICNo. WARadiusBinaan (KK)Total Jiwa
m KK
+ + +
+
+
+ + + \ No newline at end of file diff --git a/SIG_miskin/gis/data_penduduk.php b/SIG_miskin/gis/data_penduduk.php new file mode 100644 index 0000000..8ec22b9 --- /dev/null +++ b/SIG_miskin/gis/data_penduduk.php @@ -0,0 +1,207 @@ +real_escape_string($cari); + $where = "WHERE pm.nama_kk LIKE '%$c%' OR pm.alamat LIKE '%$c%' OR ri.nama LIKE '%$c%'"; +} + +$total_rows = $conn->query("SELECT COUNT(*) c FROM penduduk_miskin pm LEFT JOIN rumah_ibadah ri ON ri.id=pm.rumah_ibadah_id $where")->fetch_assoc()['c']; +$total_pages= max(1, ceil($total_rows / $per_page)); +$page = min($page, $total_pages); +$offset = ($page - 1) * $per_page; + +$data = $conn->query(" + SELECT pm.*, ri.nama AS nama_ibadah, ri.jenis AS jenis_ibadah, + (SELECT GROUP_CONCAT(CONCAT(rb.jenis_bantuan, ' (', DATE_FORMAT(rb.tanggal_pemberian, '%d/%m/%Y'), ')') ORDER BY rb.tanggal_pemberian DESC SEPARATOR ', ') + FROM riwayat_bantuan rb WHERE rb.penduduk_id = pm.id) AS riwayat_bantuan_list + FROM penduduk_miskin pm + LEFT JOIN rumah_ibadah ri ON ri.id = pm.rumah_ibadah_id + $where + ORDER BY pm.id ASC + LIMIT $per_page OFFSET $offset +"); + +// Untuk download CSV — ambil semua tanpa limit +$all = $conn->query(" + SELECT pm.nama_kk, pm.jumlah_anggota, pm.alamat, + (SELECT GROUP_CONCAT(CONCAT(rb.jenis_bantuan, ' (', DATE_FORMAT(rb.tanggal_pemberian, '%d/%m/%Y'), ')') ORDER BY rb.tanggal_pemberian DESC SEPARATOR '; ') + FROM riwayat_bantuan rb WHERE rb.penduduk_id = pm.id) AS riwayat_bantuan_list, + ri.nama AS nama_ibadah, ri.jenis AS jenis_ibadah, pm.jarak_ke_ibadah, + IF(pm.rumah_ibadah_id IS NOT NULL,'Terdaftar','Belum Terdaftar') AS status, pm.lat, pm.lng + FROM penduduk_miskin pm + LEFT JOIN rumah_ibadah ri ON ri.id=pm.rumah_ibadah_id + ORDER BY pm.id ASC +"); +$all_rows = []; +while($r=$all->fetch_assoc()) $all_rows[]=$r; + +$jenis_colors=['Masjid'=>'blue','Gereja'=>'violet','Pura'=>'amber','Vihara'=>'green','Kelenteng'=>'cyan','Lainnya'=>'gray']; +$current = basename($_SERVER['PHP_SELF']); + +function pag_url($p, $cari) { + $q = $cari !== '' ? '&cari='.urlencode($cari) : ''; + return '?page='.$p.$q; +} +?> + + + + +Data Penduduk — Pemetaan Kemiskinan Terpadu + + + + + + + +
+

Data Penduduk Miskin

Total KK ditemukan
+
+
+
+

Daftar Penduduk Miskin

+

Menampilkan halaman dari · data total

+
+ +
+ +
+
+
+
+ + +
+ + ✕ Reset +
+ dari +
+ + + + + + + + + + + fetch_assoc()): ?> + + + + + + + + + + + + + +
#Nama KKAnggotaAlamatRiwayat BantuanRumah Ibadah TerdekatJarakStatusFoto
+ + $item): + if ($idx < 2): ?> + + + + lainnya + + + Belum ada bantuan + + Terdaftar' : 'Belum' ?>
+ + +
+
+
+ + + \ No newline at end of file diff --git a/SIG_miskin/gis/database.sql b/SIG_miskin/gis/database.sql new file mode 100644 index 0000000..f464a20 --- /dev/null +++ b/SIG_miskin/gis/database.sql @@ -0,0 +1,63 @@ +-- ============================================ +-- DATABASE: gis_penduduk_miskin +-- GIS Web App - Rumah Ibadah & Penduduk Miskin +-- ============================================ + +CREATE DATABASE IF NOT EXISTS gis_penduduk_miskin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +USE gis_penduduk_miskin; + +-- Tabel Rumah Ibadah +CREATE TABLE IF NOT EXISTS rumah_ibadah ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama VARCHAR(200) NOT NULL, + jenis ENUM('Masjid','Gereja','Pura','Vihara','Kelenteng','Lainnya') DEFAULT 'Masjid', + alamat TEXT, + pic VARCHAR(150) COMMENT 'Person In Charge', + no_wa VARCHAR(20), + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + radius INT DEFAULT 500 COMMENT 'Radius dalam meter', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); + +-- Tabel Penduduk Miskin +CREATE TABLE IF NOT EXISTS penduduk_miskin ( + id INT AUTO_INCREMENT PRIMARY KEY, + nama_kk VARCHAR(200) NOT NULL COMMENT 'Nama Kepala Keluarga', + jumlah_anggota INT NOT NULL DEFAULT 1 COMMENT 'Jumlah Anggota KK', + alamat TEXT, + lat DOUBLE NOT NULL, + lng DOUBLE NOT NULL, + rumah_ibadah_id INT NULL COMMENT 'Rumah ibadah terdekat (FK)', + jarak_ke_ibadah DOUBLE NULL COMMENT 'Jarak dalam meter ke rumah ibadah terdekat', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL +); + +-- Index untuk performa query geospasial +CREATE INDEX idx_rumah_ibadah_coords ON rumah_ibadah(lat, lng); +CREATE INDEX idx_penduduk_coords ON penduduk_miskin(lat, lng); +CREATE INDEX idx_penduduk_ibadah ON penduduk_miskin(rumah_ibadah_id); + +-- ===================== +-- DATA CONTOH (Pontianak) +-- ===================== + +INSERT INTO rumah_ibadah (nama, jenis, alamat, pic, no_wa, lat, lng, radius) VALUES +('Masjid Raya Mujahidin', 'Masjid', 'Jl. Ahmad Yani, Pontianak Selatan', 'H. Abdurrahman', '081234567890', -0.0397, 109.3319, 500), +('Masjid Jami Pontianak', 'Masjid', 'Jl. Tanjungpura, Pontianak Kota', 'H. Mukhlis', '081234567891', -0.0263, 109.3413, 500), +('GBI Pontianak', 'Gereja', 'Jl. Gajahmada, Pontianak Kota', 'Pdt. Stevanus', '081234567892', -0.0280, 109.3350, 500), +('Vihara Bodhisattva Karaniya Metta', 'Vihara', 'Jl. Khatulistiwa, Pontianak Utara', 'Bhikkhu Santoso', '081234567893', -0.0120, 109.3250, 500); + +INSERT INTO penduduk_miskin (nama_kk, jumlah_anggota, alamat, lat, lng) VALUES +('Budi Santoso', 4, 'Jl. Ahmad Yani Gg. 3, Pontianak', -0.0410, 109.3330), +('Siti Rahayu', 3, 'Jl. Ahmad Yani Gg. 5, Pontianak', -0.0380, 109.3310), +('Muhammad Amin', 5, 'Jl. Tanjungpura No. 12, Pontianak', -0.0255, 109.3420), +('Dewi Lestari', 2, 'Jl. Gajahmada No. 7, Pontianak', -0.0290, 109.3360), +('Hendra Kusuma', 6, 'Jl. Khatulistiwa Gg. 2, Pontianak', -0.0130, 109.3260), +('Yanti Wulandari', 3, 'Jl. Reformasi, Pontianak Utara', -0.0100, 109.3240), +('Agus Prasetyo', 4, 'Jl. Sultan Hamid, Pontianak Barat', -0.0450, 109.3200); + +-- Update rumah_ibadah_id dan jarak untuk data contoh (akan dihitung via PHP) diff --git a/SIG_miskin/gis/includes/confirm-modal.php b/SIG_miskin/gis/includes/confirm-modal.php new file mode 100644 index 0000000..c432368 --- /dev/null +++ b/SIG_miskin/gis/includes/confirm-modal.php @@ -0,0 +1,127 @@ + + + diff --git a/SIG_miskin/gis/includes/user-profile.php b/SIG_miskin/gis/includes/user-profile.php new file mode 100644 index 0000000..d71d56b --- /dev/null +++ b/SIG_miskin/gis/includes/user-profile.php @@ -0,0 +1,46 @@ + + +
+
+ +
diff --git a/SIG_miskin/gis/index.php b/SIG_miskin/gis/index.php new file mode 100644 index 0000000..36e9ead --- /dev/null +++ b/SIG_miskin/gis/index.php @@ -0,0 +1,2711 @@ +query("SELECT id,lat,lng,radius FROM rumah_ibadah"); + $ilist=[]; + while($r=$ib->fetch_assoc()) $ilist[]=$r; + $w=$pid?"WHERE id=".intval($pid):""; + $pd=$conn->query("SELECT id,lat,lng FROM penduduk_miskin $w"); + while($p=$pd->fetch_assoc()){ + $best=null;$bd=PHP_FLOAT_MAX; + foreach($ilist as $i){ + $d=haversine($p['lat'],$p['lng'],$i['lat'],$i['lng']); + if($d<=$i['radius']&&$d<$bd){$bd=$d;$best=$i['id'];} + } + if($best){ + $s=$conn->prepare("UPDATE penduduk_miskin SET rumah_ibadah_id=?,jarak_ke_ibadah=? WHERE id=?"); + $s->bind_param('idi',$best,$bd,$p['id']); + } else { + $s=$conn->prepare("UPDATE penduduk_miskin SET rumah_ibadah_id=NULL,jarak_ke_ibadah=NULL WHERE id=?"); + $s->bind_param('i',$p['id']); + } + $s->execute(); + } + } + + // ── GET ALL ──────────────────────────────── + if($action==='get_all'){ + $ri=[]; + $r=$conn->query("SELECT * FROM rumah_ibadah ORDER BY nama"); + while($row=$r->fetch_assoc()) $ri[]=$row; + + $pm=[]; + $r2=$conn->query("SELECT p.*,i.nama as nama_ibadah,i.jenis as jenis_ibadah + FROM penduduk_miskin p + LEFT JOIN rumah_ibadah i ON p.rumah_ibadah_id=i.id + ORDER BY p.nama_kk"); + while($row=$r2->fetch_assoc()) $pm[]=$row; + + $stats=[ + 'total_ibadah'=>(int)$conn->query("SELECT COUNT(*) c FROM rumah_ibadah")->fetch_assoc()['c'], + 'total_penduduk'=>(int)$conn->query("SELECT COUNT(*) c FROM penduduk_miskin")->fetch_assoc()['c'], + 'total_jiwa'=>(int)($conn->query("SELECT COALESCE(SUM(jumlah_anggota),0) c FROM penduduk_miskin")->fetch_assoc()['c']), + 'terdaftar'=>(int)$conn->query("SELECT COUNT(*) c FROM penduduk_miskin WHERE rumah_ibadah_id IS NOT NULL")->fetch_assoc()['c'], + 'belum'=>(int)$conn->query("SELECT COUNT(*) c FROM penduduk_miskin WHERE rumah_ibadah_id IS NULL")->fetch_assoc()['c'], + ]; + echo json_encode(['rumah_ibadah'=>$ri,'penduduk'=>$pm,'stats'=>$stats]); + exit; + } + + // ── ADD IBADAH ───────────────────────────── + if($action==='add_ibadah'&&$_SERVER['REQUEST_METHOD']==='POST'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $nama=$conn->real_escape_string($d['nama']??''); + $jenis=$conn->real_escape_string($d['jenis']??'Masjid'); + $alamat=$conn->real_escape_string($d['alamat']??''); + $pic=$conn->real_escape_string($d['pic']??''); + $no_wa=$conn->real_escape_string($d['no_wa']??''); + $lat=floatval($d['lat']??0); + $lng=floatval($d['lng']??0); + $radius=max(500,intval($d['radius']??500)); + if(!$nama||!$lat||!$lng){echo json_encode(['error'=>'Data tidak lengkap']);exit;} + $s=$conn->prepare("INSERT INTO rumah_ibadah(nama,jenis,alamat,pic,no_wa,lat,lng,radius) VALUES(?,?,?,?,?,?,?,?)"); + $s->bind_param('sssssddi',$nama,$jenis,$alamat,$pic,$no_wa,$lat,$lng,$radius); + if($s->execute()){ + $id=$conn->insert_id; + recalc($conn); + $row=$conn->query("SELECT * FROM rumah_ibadah WHERE id=$id")->fetch_assoc(); + echo json_encode(['success'=>true,'id'=>$id,'data'=>$row]); + } else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── EDIT IBADAH ──────────────────────────── + if($action==='edit_ibadah'&&$_SERVER['REQUEST_METHOD']==='POST'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $id=intval($d['id']??0); + $nama=$conn->real_escape_string($d['nama']??''); + $jenis=$conn->real_escape_string($d['jenis']??'Masjid'); + $alamat=$conn->real_escape_string($d['alamat']??''); + $pic=$conn->real_escape_string($d['pic']??''); + $no_wa=$conn->real_escape_string($d['no_wa']??''); + $lat=floatval($d['lat']??0); + $lng=floatval($d['lng']??0); + $radius=max(500,intval($d['radius']??500)); + $s=$conn->prepare("UPDATE rumah_ibadah SET nama=?,jenis=?,alamat=?,pic=?,no_wa=?,lat=?,lng=?,radius=? WHERE id=?"); + $s->bind_param('sssssddii',$nama,$jenis,$alamat,$pic,$no_wa,$lat,$lng,$radius,$id); + if($s->execute()){recalc($conn);echo json_encode(['success'=>true]);} + else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── DELETE IBADAH ────────────────────────── + if($action==='delete_ibadah'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $id=intval($d['id']??$_GET['id']??0); + $s=$conn->prepare("DELETE FROM rumah_ibadah WHERE id=?"); + $s->bind_param('i',$id); + if($s->execute()){recalc($conn);echo json_encode(['success'=>true]);} + else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── UPLOAD FOTO RUMAH ────────────────────── +if($action==='upload_foto'&&$_SERVER['REQUEST_METHOD']==='POST'){ + $id = intval($_POST['id'] ?? 0); + if(!$id || empty($_FILES['foto']['tmp_name'])){ + echo json_encode(['error'=>'Data tidak valid']); exit; + } + $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION)); + $allowed = ['jpg','jpeg','png','webp']; + if(!in_array($ext, $allowed)){ echo json_encode(['error'=>'Format tidak didukung']); exit; } + $filename = 'foto_'.$id.'_'.time().'.'.$ext; + $dest = __DIR__.'/uploads/foto_rumah/'.$filename; + if(move_uploaded_file($_FILES['foto']['tmp_name'], $dest)){ + // Hapus foto lama jika ada + $old = $conn->query("SELECT foto_rumah FROM penduduk_miskin WHERE id=$id")->fetch_assoc(); + if($old['foto_rumah'] && file_exists(__DIR__.'/'.$old['foto_rumah'])) + unlink(__DIR__.'/'.$old['foto_rumah']); + $path = 'uploads/foto_rumah/'.$filename; + $conn->query("UPDATE penduduk_miskin SET foto_rumah='$path' WHERE id=$id"); + echo json_encode(['success'=>true,'path'=>$path]); + } else echo json_encode(['error'=>'Gagal upload']); + exit; +} +//ADD PENDUDUK +if($action==='add_penduduk'&&$_SERVER['REQUEST_METHOD']==='POST'){ + // Ambil dari $_POST (bukan json), karena ada file upload + $nama_kk = $conn->real_escape_string($_POST['nama_kk'] ?? ''); + $jml = intval($_POST['jumlah_anggota'] ?? 1); + $alamat = $conn->real_escape_string($_POST['alamat'] ?? ''); + $lat = floatval($_POST['lat'] ?? 0); + $lng = floatval($_POST['lng'] ?? 0); + $jenis_bantuan = $conn->real_escape_string($_POST['jenis_bantuan'] ?? ''); + $tanggal_bantuan = $conn->real_escape_string($_POST['tanggal_bantuan'] ?? ''); + if(!$nama_kk||!$lat||!$lng){echo json_encode(['error'=>'Data tidak lengkap']);exit;} + + $s=$conn->prepare("INSERT INTO penduduk_miskin(nama_kk,jumlah_anggota,alamat,lat,lng,jenis_bantuan,tanggal_bantuan) VALUES(?,?,?,?,?,?,?)"); + $tanggal_bantuan_val = $tanggal_bantuan ? $tanggal_bantuan : null; + $s->bind_param('sisddss',$nama_kk,$jml,$alamat,$lat,$lng,$jenis_bantuan,$tanggal_bantuan_val); + if($s->execute()){ + $id=$conn->insert_id; + // Log to riwayat_bantuan if provided + if($jenis_bantuan && $tanggal_bantuan_val) { + $conn->query("INSERT INTO riwayat_bantuan (penduduk_id, jenis_bantuan, tanggal_pemberian, keterangan) VALUES ($id, '$jenis_bantuan', '$tanggal_bantuan_val', 'Bantuan pertama saat pendaftaran KK')"); + } + // Proses upload foto jika ada + if(!empty($_FILES['foto']['tmp_name'])){ + $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION)); + $allowed = ['jpg','jpeg','png','webp']; + if(in_array($ext,$allowed)){ + $filename = 'foto_'.$id.'_'.time().'.'.$ext; + $dest = __DIR__.'/uploads/foto_rumah/'.$filename; + if(move_uploaded_file($_FILES['foto']['tmp_name'],$dest)){ + $path = 'uploads/foto_rumah/'.$filename; + $conn->query("UPDATE penduduk_miskin SET foto_rumah='$path' WHERE id=$id"); + } + } + } + recalc($conn,$id); + $row=$conn->query("SELECT p.*,i.nama as nama_ibadah,i.jenis as jenis_ibadah + FROM penduduk_miskin p LEFT JOIN rumah_ibadah i ON p.rumah_ibadah_id=i.id + WHERE p.id=$id")->fetch_assoc(); + echo json_encode(['success'=>true,'id'=>$id,'data'=>$row]); + } else echo json_encode(['error'=>$conn->error]); + exit; +} + + // ── EDIT PENDUDUK ────────────────────────── + if($action==='edit_penduduk'&&$_SERVER['REQUEST_METHOD']==='POST'){ + $id=intval($_POST['id']??0); + $nama_kk=$conn->real_escape_string($_POST['nama_kk']??''); + $jml=intval($_POST['jumlah_anggota']??1); + $alamat=$conn->real_escape_string($_POST['alamat']??''); + $lat=floatval($_POST['lat']??0); + $lng=floatval($_POST['lng']??0); + $jenis_bantuan = $conn->real_escape_string($_POST['jenis_bantuan'] ?? ''); + $tanggal_bantuan = $conn->real_escape_string($_POST['tanggal_bantuan'] ?? ''); + + $s=$conn->prepare("UPDATE penduduk_miskin SET nama_kk=?,jumlah_anggota=?,alamat=?,lat=?,lng=?,jenis_bantuan=?,tanggal_bantuan=? WHERE id=?"); + $tanggal_bantuan_val = $tanggal_bantuan ? $tanggal_bantuan : null; + $s->bind_param('sisddssi',$nama_kk,$jml,$alamat,$lat,$lng,$jenis_bantuan,$tanggal_bantuan_val,$id); + + // Proses upload foto jika ada + if(!empty($_FILES['foto']['tmp_name'])){ + $ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION)); + $allowed = ['jpg','jpeg','png','webp']; + if(in_array($ext,$allowed)){ + $filename = 'foto_'.$id.'_'.time().'.'.$ext; + $dest = __DIR__.'/uploads/foto_rumah/'.$filename; + if(move_uploaded_file($_FILES['foto']['tmp_name'],$dest)){ + // Hapus foto lama jika ada + $old = $conn->query("SELECT foto_rumah FROM penduduk_miskin WHERE id=$id")->fetch_assoc(); + if($old['foto_rumah'] && file_exists(__DIR__.'/'.$old['foto_rumah'])) unlink(__DIR__.'/'.$old['foto_rumah']); + $path = 'uploads/foto_rumah/'.$filename; + $conn->query("UPDATE penduduk_miskin SET foto_rumah='$path' WHERE id=$id"); + } + } + } + if($s->execute()){ + // Log to riwayat_bantuan if new combination + if($jenis_bantuan && $tanggal_bantuan_val) { + $check = $conn->query("SELECT id FROM riwayat_bantuan WHERE penduduk_id=$id AND jenis_bantuan='$jenis_bantuan' AND tanggal_pemberian='$tanggal_bantuan_val'")->num_rows; + if ($check == 0) { + $conn->query("INSERT INTO riwayat_bantuan (penduduk_id, jenis_bantuan, tanggal_pemberian, keterangan) VALUES ($id, '$jenis_bantuan', '$tanggal_bantuan_val', 'Bantuan baru diinput lewat edit KK')"); + } + } + recalc($conn,$id); + echo json_encode(['success'=>true]); + } + else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── DELETE PENDUDUK ──────────────────────── + if($action==='delete_penduduk'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $id=intval($d['id']??$_GET['id']??0); + $s=$conn->prepare("DELETE FROM penduduk_miskin WHERE id=?"); + $s->bind_param('i',$id); + if($s->execute()) echo json_encode(['success'=>true]); + else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── RECALCULATE ──────────────────────────── + if($action==='recalculate'){ + recalc($conn); + echo json_encode(['success'=>true]); + exit; + } + + // ── ADD BANTUAN ─────────────────────────── + if($action==='add_bantuan'&&$_SERVER['REQUEST_METHOD']==='POST'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $pid=intval($d['penduduk_id']??0); + $jenis=$conn->real_escape_string($d['jenis_bantuan']??''); + $tanggal=$conn->real_escape_string($d['tanggal_pemberian']??''); + $ket=$conn->real_escape_string($d['keterangan']??''); + $ri_id=isset($d['rumah_ibadah_id']) && $d['rumah_ibadah_id'] !== '' ? intval($d['rumah_ibadah_id']) : null; + if(!$pid||!$jenis||!$tanggal){echo json_encode(['error'=>'Data tidak lengkap']);exit;} + + $s=$conn->prepare("INSERT INTO riwayat_bantuan(penduduk_id,jenis_bantuan,tanggal_pemberian,keterangan,rumah_ibadah_id) VALUES(?,?,?,?,?)"); + $s->bind_param('isssi',$pid,$jenis,$tanggal,$ket,$ri_id); + if($s->execute()){ + // Update jenis_bantuan & tanggal_bantuan di penduduk_miskin dengan yg terbaru + $conn->query("UPDATE penduduk_miskin SET jenis_bantuan='$jenis', tanggal_bantuan='$tanggal' WHERE id=$pid"); + echo json_encode(['success'=>true,'id'=>$conn->insert_id]); + } else echo json_encode(['error'=>$conn->error]); + exit; + } + + // ── GET BANTUAN (per penduduk) ──────────── + if($action==='get_bantuan'){ + $pid=intval($_GET['penduduk_id']??0); + $rows=[]; + $r=$conn->query("SELECT rb.*, ri.nama as nama_ibadah FROM riwayat_bantuan rb LEFT JOIN rumah_ibadah ri ON rb.rumah_ibadah_id=ri.id WHERE rb.penduduk_id=$pid ORDER BY rb.tanggal_pemberian DESC, rb.id DESC"); + while($row=$r->fetch_assoc()) $rows[]=$row; + echo json_encode($rows); + exit; + } + + // ── DELETE BANTUAN ──────────────────────── + if($action==='delete_bantuan'){ + $d=json_decode(file_get_contents('php://input'),true)??[]; + $id=intval($d['id']??$_GET['id']??0); + // Get penduduk_id before delete + $row=$conn->query("SELECT penduduk_id FROM riwayat_bantuan WHERE id=$id")->fetch_assoc(); + $s=$conn->prepare("DELETE FROM riwayat_bantuan WHERE id=?"); + $s->bind_param('i',$id); + if($s->execute()){ + // Update penduduk with latest remaining bantuan + if($row){ + $pid=$row['penduduk_id']; + $latest=$conn->query("SELECT jenis_bantuan,tanggal_pemberian FROM riwayat_bantuan WHERE penduduk_id=$pid ORDER BY tanggal_pemberian DESC LIMIT 1")->fetch_assoc(); + if($latest) $conn->query("UPDATE penduduk_miskin SET jenis_bantuan='".$conn->real_escape_string($latest['jenis_bantuan'])."', tanggal_bantuan='".$latest['tanggal_pemberian']."' WHERE id=$pid"); + else $conn->query("UPDATE penduduk_miskin SET jenis_bantuan=NULL, tanggal_bantuan=NULL WHERE id=$pid"); + } + echo json_encode(['success'=>true]); + } + else echo json_encode(['error'=>$conn->error]); + exit; + } + + echo json_encode(['error'=>'Action tidak dikenali']); + exit; +} +?> + + + + + +Pemetaan Kemiskinan Terpadu — Pontianak + + + + + + + + +
+ + + + +
+ +
+ +
Peta GIS Rumah Ibadah & Penduduk Miskin
+ + + +
+ + +
+
+ + +
+ + +
+ + +
+ + +
+

Radius Default

+
+ Jarak cakupan: + 500 m +
+ + +
+ + + +
+

Legenda

+
Masjid
+
Gereja
+
Pura
+
Vihara / Kelenteng
+
Penduduk — Terdaftar
+
Penduduk — Belum
+
Radius Ibadah
+
+ + +
+

Tampilkan

+ + + +
+
+ + + +
+

Edit Radius

+
+
+ Radius: + 500 m +
+ +
Min. 500 m · Geser untuk ubah ukuran lingkaran
+
+ + +
+
+ + + +
+
+

Data

+ +
+
+
Ibadah
+
Penduduk
+
+ + +
+
+
+
+
+ + + + + + + + + + + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/SIG_miskin/gis/login.php b/SIG_miskin/gis/login.php new file mode 100644 index 0000000..aac0f7a --- /dev/null +++ b/SIG_miskin/gis/login.php @@ -0,0 +1,200 @@ +real_escape_string($_POST['username'] ?? ''); + $role = $_POST['role'] ?? ''; + if ($role === 'admin') { + $row = $conn->query("SELECT * FROM users WHERE username='$u' AND role IN ('admin','user')")->fetch_assoc(); + } else { + $roleEsc = $conn->real_escape_string($role); + $row = $conn->query("SELECT * FROM users WHERE username='$u' AND role='$roleEsc'")->fetch_assoc(); + } + if ($row && password_verify($_POST['password'] ?? '', $row['password'])) { + session_regenerate_id(true); + $_SESSION['user'] = $row['id']; + $_SESSION['nama'] = $row['nama']; + $_SESSION['role'] = $row['role']; + header('Location: ' . ($row['role'] === 'superadmin' ? 'dashboard.php' : 'index.php')); + exit; + } + $err = 'Kredensial tidak valid untuk peran yang dipilih.'; +} +?> + + + + + +Masuk — Poverty Map + + + + + +
+ + + Portal WebGIS + + Poverty Map · Pontianak +
+ +
+
+
Sistem Informasi Geografis
+

Poverty Map

+

Pemetaan rumah ibadah dan penduduk miskin untuk perencanaan program binaan berbasis lokasi.

+
    +
  • Peta interaktif rumah ibadah dan kepala keluarga
  • +
  • Analisis radius cakupan binaan
  • +
  • Manajemen data untuk super admin
  • +
+
+ +
+ +
+
+ + + diff --git a/SIG_miskin/gis/logout.php b/SIG_miskin/gis/logout.php new file mode 100644 index 0000000..ee222ca --- /dev/null +++ b/SIG_miskin/gis/logout.php @@ -0,0 +1,5 @@ ++zBoLg1ft0kijjuYj6p!!3TF4G!TLYcXubaEdOrRKJ@MC zm)ob0en+BIlw>eaiBVx-U@&CAd{%qk1>ctnGSd6E3?Jj;`v&W(CL;k;GfsN=en7Am zR}_bVsY^h6Hbs0tqd0%jb%lY!?Ei1U4m zsg&>u<_F5va>38(n8z8`<->iHg0-b4D>jeOsk7HOsS7eYXHhkek#!tVRJeMZ^AD%$ zhyVF-)^&c@(Dvnv%wP$i1%M1AyJCoNwtNm8;N!EKUojCNhZATcDc^JW5H-itD9hy_TdbQ7bPF9DIL>>30r7Lu^2xCSQn#Y_aVZOK%3zbvoOU8`z^512M3Q&@jm9z@*gLP1*PaP8?bm99^J68tnM{DFiPRYOhLh|80(h zd}YOb(=172@F!x zOnEV+f<_WrN6HAAuk3e$c%~8My9^+5JHg|>Uz}HF@E2Vju;}Y#3{-$)89R|t$p$9P z17z?;25rv{CoN^T%5BKF6oaytYAb$en1f@z`3+(1YX+|H+fULVWcf)4Xj-c)G*>wz zjRxpilyFS8;WbGc4Q;}SL?&?$l0IhMkz86n{ALY5;NhhI4N1BR;zn1g^7dld!)3FJ z4xr#j|C9dOiXk0;2H%|fj2Kdl_Iv?PM;kC}#;Qa^0mvXBTy0UA$&@7ZYsRlLtFYS3 zdPHNni5+(XH-+xG0g2Bbr6n6vF<{BO zvIBnladFcn;q1OXf!0W8v1n}#wdJ%bab^P3euXS?dLHxX(NpFg0SE~;@v6y;oob88 zC+0$~qQ2R7XwyR%S7qQX^A6mi$K0Z-!T;ha*-vHlD4lARqj=_VW{Yw<;;1r;nuLi) z;Zu=n_R|Wfm$QN|O+&}Txa4D>mY|8BwC90^m${aX=wE#unyDG2JKv=(FA86w+uJ@* z5Y&r^3hF5?eqS0Onq6NvoM|-o>&!H)NU8aPY!M#*+S=@{RBw!s3lx+W1cU%jzt$!6TksUkJI1 z8=->fg~OyBVf^e{9i<3nSwfze!3n1u@C+#4CkCld&W_ZG5%(JyX?H(?hHHG>KuCH)x4a9IGP3}?dexqzymDy)+?uHp_Ow=UN*ad z$GqdMk{6^^IJtVC3Z{lY&DWj94)M>^8m@*|K0_FiJ^4^Vo^PCIE3Hw}h1gyZh?3Sv zfqT3wN@G_Lv@WsiD*YB#<-dEr{)EjEaK{#&1H%U!kFZk3!!{c?9#lqt)q%5vLn_L5 z@J#7HkTs%A+iWP67WlU^!?@0L1-CJwi~QSZ)o5o+{H~gMr8f^;uJk*t9b$=EQdhId zONOfKp=iROwQGKUD>8`=61e8>YCNq1;#7R2$B6DUNHKc(@J2`aJ-p^sgQ;iz{4P?l9p0r%VJd_ z_Pk<(jM9PrIn-bhh#xw*hgc#O^Wx zFAaedd0AV(ZbwV&m-Fg$n3NT9(M3Lrd8YO>&K&-fo8Gs7&gUA(7-1aYcW)$T;+mmE z!6}-FeKjEw_?gLrjYaV;{+u|ciitCrG&m(pNrg5d@_<1Ihc<@sUis#OE^MiVzKb~v zpXSbf@`N%|%9cv2{~U12!{bYXr&xFh{PYPa)~O9}d4zm=q;GhM+_nk1!Zs)}gBu%G zl4g^b2;DdeSqW`$#U+v4@rMwCpf5~ha%Lu>v1Zm~a69^|cJ9PXAxK&J~Q8a{}&VcVb z#VF!=i<&tyMtoo)@w8=?7$q`+KeIe>3Nh~Rw7)(ZOJnY6dr3rUK+4wKGm+D(_5i(^ zE=9kg8Ksz}1m^lBA7?+JanwMl)19D_$))Y?=F^?9=tM-LUZ_aJXXN})=&UD z83Ugs8sIl6!hY+QlcgS#`+uI!SI6fozGban&YlvKu6COw5H_)$bfUX9xqKMRl9Ji2 zUb$^7rdd(hSfEO-05B&P&31B@`f8h{?y(pxVXA$^^>V5Tq#h^U3D?ZLoK8dQNtSQo z9`+)2Nn00LCy5}uDl3XaalZIF%EY zJrDTCv!~FV6hxI@m^LqybMj*EPEY|O_K3&!O`AN;XKKtOl%)Y$iG*0pra8RkKFYv4 z6$aVBfh+V-Cq=H#5RYUV>Fpq>)ejogpt}(+DY{9iRqWVig5rjWHJS)kqm$15k%|fD-Fv?^r*s6 zh&K!{Vf?-V!#^Mgaad>F*uQh2d>9>>IB&a2Nw^At$hp!;5h~F6yn73@E}Gy?d{DF_ zHIQNF!pa0eu$@1cXp^fq* zl|%o9c#R3?gt`51`u*>aF=HnzT0+tB)z>i{i;a!JWK2yR;%791P3g&rMQ2z(aMyp8 zRn>zq3NX@2MogOoFfUWIk5D;O@<4Hs`W&S`@M_l%A622JXr|E6vjOO?U-UfH5T3k^ zvFIBnc@_$UYuFZ$J}q#fJX+lhmAs7d_ee%MNLAeXRAOUup_e?VY1CV8sxY8zk9*;2 zKS1zii-d0nyI8As0tz zf^V>sS-3>mA0S3Ljtq|W0QT$NQlg1e27fn|25vY zg_tCB;*uns4E&?_RQ0^Vva({9l3Ub!e!iaYdVAeIO$9zZ&N5Z~(T^F+=F!neMVj5h ztZ=d9PuT*P4%|d7G`j+t9hc)TKIKVrEVj7+pk1i@CYC*>pdOHXd$2a`K%^Utic+=p zXl5MuF*i@W_tb}0NSL;FM=Ga4g|f$<0%^BU1)Vh~?0TLU?DdX$AI8is7Y(ZT zr^z09nI6B$0s;N!`tkLAj%~HO@V;gucvP-}-?BMtPBbNyIt5tIRX;n%fe>i_%<8Op zgDDl}KIdOd(*1Qb}Ov- z6RqKXbGV%$&%X6quGj=V_}}(5L(edBAq7czktOaA3tjdEdlQ)*>wNkxotGQp^+s0OIkH0uC>j*UA;?j}qzpWa6XssEb||5uquNn1SO z4-a;vuxB_AF$;?~7@iClnWjqN-wmGueJex3DQJo;_BWY*a7~$(`;u{-l$v z;k43G+^0xT=3g38DjdzQV1gW0=uuIpz}R~4ucML{Jip%EJ8wO1qG?7wXJN516#_6I zDfM7X_B>zPJjvu*Xfp=@KOyx}feCNV*5W#!{k|@>g1n_3 z4(c<~VqI+cr2p3%Dv$OLFn6I^kp<+U$RwjYmq)>H@eW!;>sf?!RR=?4iV&A9&gqRm zGZiY3&@~;sWGJ-L>y6{_!Znv~r610eM1U}!TC_D3J)G`TX_WUQ%k)qL3Czia zm&4PsCPz>8H~i!2uT^`l00~ zmJ%6S@0TOZzZzO*mJ)FD@d>0Nu|wfVer;eHOfvq!@E8Jp0S@d@WshIv>k$esoMmPg zNgNksprA-w91yQ5`n!6Fe}^8&{U1+sQJbd!Q5)#@r$rU~5W)gx*>F+~5EQvNw-~{e z9l>4vX##k;-!U4kc~46luRkGK1Lw9)R&&#OWnUi>0ybW|e19^q4DQ8|v|+F6>BkJk z5P+{A-Tkg_Y%6a7N4L)ZQ2}6l2yov=iT``rKa@pm&@&xc>YC2Z=SqZo?>mCP1V(&k zh14moFj!wFr#Og#aSqzh0LOi%-q%ry`X&B2XrP|7*pWeO^s$pStGOIYl~G=`yStv& zS=ajJ@t?hc8u7ev!;nD)wMe(--Ww@(|<7@zAzhyAcChD z476j}@W%#68)v`#84nznSi_`+MjO8SDm7I>Rpp(&%ArJLdH3E|cL~zf;$Vm4zs`=8 z*t}Zyfx8dEcnCpw2+gxel#q;E9kqvjx5S+?ih!M^vzapGx{ex50ycx*$0Iw7lCo{D zZ^B01ev2Q4--}Y&|B>*XpZEpXDBcF<^ze=yn#4Hy#=Ez8((FX4nNaQz3 zh>m5p93|#2+bR3a6vv_ohGuX}5C9VxDO*-xVzq=%F@%c^oKC_s_AsNZl;>*TvZ`MMkD z;H4^`|G-s=7?YN0Bav3xPYLu?%aHHcH4}fL*v{~`j{K#HOOD0A91jAabQrxUH#RG+ zeyPWyKkvGn&q(EBVlHP3BwIc2Sm&h!o=*9MS_3F}G&OZ{vd7%DG_F2?k3~%n7*T`2 zNqkTu7Y;`&o7lR{dD7`I=ekL<5ndL$E_6d6IYO7Gt=6%knv9w zo&Cu@`iJ7ntM9c4ZlF`oOB#vKoRww4>w&6)h$je5E?HElJU_ya5dC{;n> z#1NQ|{;bQ$BtlEup<4Cdefln*5+*J@N}~0ed%$`Xc5H3NkB%1T(m9bwhFemJAMzf$ zbvgdDA&Dzhd+xLe|HO)o=NXQ1g%c8}j-1g?1@Go#cWT`o-2Vy*aUWhO{E*G>g)p2z z)_=V}(N+*HcdqFw^LI^R!%6fdG$|PFYmIJ#e!@9bu?@LSO~CQ(yqx4DEh_?8mPtj; z5M^YbZZc=mxSjMXBe$&s&3nL{gR3S&3X1wI4t}fxNN8c$jft75APDQ4BG2xZ9UrGK+y_NiKV9MNJLz!H3 zPfm00;eu*6wKP#9hhnuOfqq@MzcfcbpKq8Xc!lzeK|RQEo@d?lZ{8-xWk%u!8Br9- zSfRI~Sd*~L49Qby8nxK~;XP^w=hz*bGhk@>hZ)m_Z`lP5ln`znBEp`{F>Pv8WAR~r zgmQK8={$UIhUj+dbc0#CeeW@dSq<$NIgV0n4i1siLIqfSzO>XB$(%wB+2vEkY_*ID z?^?oT*Ut`4zQX1d)ToSMB2{8WnA8Ymd8Y$ArrNq_`Psm$g>D`cubD`VLO3 z1ZOg)S-+MOek6MRGQ!;(QUq5#WNRvwg75EWmXYd+lm?o+{aL_(EX+Ba|9XQ$x)u<) zY?eqM@_`~_>C|%~*L-P-5aM;HmB_xBw`@B}w1i`)3ZI{G3cTj&XBQSkTJ|{q{I{Oa zD}fBD5+tHBmcN^0pl}6IFh_M)!NGVTeSKD|K}ANDA~ZUP>@hTNHDnv8QPb?~{Lni^ zOaCgA2$i8P~S+6!Cc^-ow{mXs-3lK`9SS8 zZnHygy|LN#uRsJ|3~ zPPYN$h~26WXh99AbKh3v`5DK-XrmCY?(pRdW6y@mi`C6hk##eE;V& zMfs>p*j@SLX;q(79b<@lqtWhQJu7az?j~Wb0Esbk7N7-W#vhL=^A_oR^TZ7E(JesN z-*%o<6bzyObCQ%EIZUsIcl52D#aiYN=FC4*I)#8PGB*G4z&cWBO1KD-#W7IV_Q5c- ziV0LEQLK;JQk_ScmN$U6M`t~PEG5>}1>`1nw-c)W@>x7UO%F^gK9p`iekHI)0fV;uLDhQkZbkjgrG7o%!C}G0wF8xhg|`>$@yZa@U2Ig z8tq7;ooSBkFBeC?A5wX>mnGKdh<11BKABGH5Jjq%yFwToK2et`iY0Jhw<0`I+IkBa zXvf*CQQOg5skLYQ*g*Ra6%RGKD=I3Cd+Hsm`a~qw-t0t69VBjsE4n|nx@bgp?N$&9 zP9aBl{M=rY4R2UZxzH^T)-i)2BtusR3=1>VgV38@D5XneOebEuR+zf>Mbd$3b_CVB z<;7gj8{A_6`J(iVz0^vZR%ckrGNnNGV&IMRZCD?1)=J}h#;}S7yY()KV*S?WJ-c?z zrR0^R-0tgCk{0TGEMY=MCUMVlz}!Ep;MJnH*M@S>kNJ%e=#I zKN?1=Gg>@}TNcoJ+6-zgCz+J3Q*WgxlcbA<7Lj;<*UJG6 zhB;1uVh_mPw~s>@kn$T~>~gKDBC{ks`5^53k^$@J1%fj6W6U-^dd(I`q6vn5kL8B0 z*wA!#6$UCw<+R59An`l^3qE-q)0w*MauVXBBQh1z7K-Y~!sz&8`N{2zskIS~4pRRd zcv@o+C4s&6a2cLG?`F~G#Sy-~MVKe4F%kF2<}URXi{YKFKh*OF?2GzU{rX5}oh_$V#DJ9+w&wijU!Y|T zfoDRrLo9;+am2-r?LxP?;G<=%OiL1oeKfweBFn%ceNU2xN({A;mGp?|IiJrL3*8DM z*k28~2}WzVk(C%JQacg)7=ozs`PpE%Bo3G9V>wS01~gX9fY5;70c$^VWx4}(&= zz5PlIW2sT*OFxllZmwvsI(oud&05M4%v*AAUqyWTXQ7e35Y>HLD(5t!f>X$7EF0-& zDCfE=S7G~Sn9`sOpW)xSl0mjsWZQjIh}V5AOJ7`Dxb%M0@ZIsf3}}}cx&C>I#`eRr z++MGMC$8H}Uw*p)@~C~*Ip#E$Ix%vy2UZK})*1hxuOxVo(#9%W+`*kPMeU_z`>UIi z<9al$uiT8f$fz+n(k>5Gwqd=p|1XLM+P70J+vpZK^yoZ(3v>Gjv+|#(>$8Qw^_xoI z_0Rc7NtiLECsI`T8{c4R40@u?F9DUf1u}1gZX^3)*Z17&y~(>1@tkOU zhGgdpp8b;FY(dH3&m`p_Dx%+ER$9u{5)-mWG0kWp*sC!+hu$~Yq}p5Cv#B)Wj%!&x z7=9(ky=EiPzl)@?o4#>6L%{zu3oafQ++J(a|0(KB=-YhS>#5v57=}}pNS-(FZwSzQ zDxv1aT$5)%kalI4E#ga@?qu}-n~&qHi}a%Jz42zxJW;_ z5q5Z@)IgH0Ii~thl;@!I)9HmOBLQN+mp6OiM>WXH3RSj! zdnml1=l1w42@9-<{{@zB%jp30v}4NonOTXPKlmSB>Oz3CXf)HDX~2u=iKqv%FYt7@ zhHN=8Gb2`z;D__}7T%eX)HdRwzqhwx-R}aQ?;lw_$d^Ji_0c%2 zed)rh62g>sg<8`UBP5|-I{R_q-s8wRJMp34Hu?GY;=}ZzxL+#LO>XDhJ~%M;-oAA3 z|NjgGf6q>jUf-Z3IMd_wc|qbQS3JejTWSUxhHus(p#$Hc=|3aaIhaGXB3nJ#p77$_ z25OjQ#(s_tcG#CIdPz|>Z03Ff=07;h>wvFhnjK;gH39l0!KQsJphseK}i!|@N^jFCs8+*4cT)_Jy zF3n#OqR?jMnkN7Lu(vXC8!K*^r4ZPDl1OcqVlZi^ou9gY)^7CfOj&KG`9F)eQU+g` zKh?_ev9JisTXq%TA3a(cR(Et4pUORoV)x78G;a>Fgn%{n}(-+>|c$Z|z z%N#ON{Qvw(|J}=*#u$-$lf`H={*lkMLR=iCThqzyfb(}@ZfoH8Tp+k#+m)wmUJi8k z>6`NVxW;bLvqi+o<+tYmrq$5)ajUGym@zl>J9iK6x3aUJB3Lz;8>Q}je_!5HA_9OAL>7dPxv>wvf$rFp)L~>CBsQgNk*foF9OljC*-Ei)VDHeS!F)S z!@Y=*R6dy25trbj?ic3PcADC;W%Sd$)Kn?NUk!S;^?_ zTaW;5IHQ;VB!H;2z4wBF*e6C}rU5CBKN6BQ0r6ibF8v4S?)(Xd=!{M8Vh+mR8}K>^ zzGbnpaK+UeFQ=4<%~$y#-KNO>XG@WXDqk;);)IouoSzMLQb!B~O_ma1ZDhCk8*2>A|XDiMnb(jLN?T!8qT!B3hF<+>+V%aJJ$SpSRvYCPK-vu@&!;3fP(9qpV<43{aun-UzuAMHv^PCN;a zM*`}EcIjjT2BnfuzbdpqkhlzIk4rTN+#!DiosNNbwNeFxnJACKZAeDjQPic9wYZD1 z3_%wFfi`dFvjnK~Q2VOV!8QbuQ4`V`CWuw?PfYroK7MWNh+f(nG`?_w zn>qRSO2w9w?`$CXx-Rg-EP01lAT9+R_xo6^?{Ky7TprXqGgqj)5V>K%nL`tmz~(5I zYn4w*Xh-A*B9NgV1!52+bW!nXAVMP=JAPsdkXAf_Os~N#+BesO4Tlt9{d2G2!eZDu zv%*5GS{Yp}65HSJ;1uNiHN&Or^dLaVxmX?nU`9&g@0S%G;sIyK^}wVS_p4FL(x<&z z1PF5+F9i!hu^kUB@gx!GQ^6m%kUP#=4@Dj$62HXaRVEPxAhmCS)XAeNqN6sscgkhJ zv`T7ku-BB1QD1WQyA!?9HBn~FJx>oC<%z$l?v_n&UyLJs06H_LP!}xff$D6!v+R4q zR3t^Sr5X5ngIB3Uk_nJeBK6F{m5Ioh2e?HYham0FrmRSOFNmW{V{?p6B6C%z<^v^` zK9u3l$*Tieq@p%>vr{NFqdPABGY7F zPw_Jc?l=YFA>tu=sa9GM;lZbdnOYXr+VSr!o+i-SJNX9U7^L(%BphRj3W6A$MfWnC z;mTcVI}JJzqYT%w!hQ5otPaH761q4qXJ9!nfx2H22&@5wQaYa30RgKp+3jqlJL)>_ z;;4}2d~fnhYS$RS94!E(4}7YZpi3tP1OToP?k35KAxiStINn&21RA+_m3}OD=+c-# zN0`|TNMWEX&->+#AI)!Nas{V~{x9OP@#4H9s>}1h|N4zOUWsXS!mp*zXBB0gJw!U5XV?_y*i)pqEnN#c$@|dhja{5W=rn=kH<}TyEALt42s&QYpHI; zI6MlOpWV7-tR%fc5c&#@qvTbg={C?I?WUoI#3gAT(!}?LJ5JTonUso`4$NBW?=y4= z?IsiHB?!nIHM9t|2=$3bwE_HALq>q$Dv2eiKro$F?EAQFf=7-p>z3(rb7V%6Q~%Kn zZAy*$Qr}V?fbmFdO=5px1_?v>*lEMvn5b@?%XM=x zHIz7^JZETlvTWYFA;bFM}2WAy;eLxE;V34 zCPvyO={Ck2brz!_#d+@Od4AVLl6d!YbqdfV01)B-h*QZ8IDtuW1gC%qAM>Wd6FV}z zg*McQP;4b1H-Ik$hjrm0`4gLL{|AwaT*G`3nmexqDLfM&WNrB1izkyyDc%*o57l%u zj7AfwN7g)-@}VcFi6w-*osYiURB)Zrso@b^BBC|&bfnb;0dJIgO5%!<0syhhBq0;e zbJ4NScZ8cXiXZYuf42YEzJ>GLUEKqn9lI@VR zU^B$J1JEzRz|Z#v(BmkXu5T=~+A!IzHQ|Rfk))eEoy@w-Jw-YZ=3Ev4q2o}b5eVRP ztwX$uWy&G@&uLMT(}3k1w7iEhkO2gwd012HCo6ZAL@}Q~;&uWrBc>PXgERWn)ue#8YUnA*n^X6L`wN>h96R~ z$z`sD;c+?0kGurnD)}Gb{wH4m0s5q5l6WqGi;(M=)dT!+1m~DFHx6k{>}-Eodms&N!tn>khDxlV`aPSIhlC z;u<=s@E&Qw)Eq!@)$BY_RdJA2IYCV}(cWbe_4Cd2Zs1*Y(mDWyyp8uX4r;EYN5_l} zV&c!;Mr&qCTeC?cA#Ya`lBE;mkV|!hQ)INn+<5@r>z5#wA)=-*a>Y{&=VNwuD7_Yo z6(*oCr4FE*Pk(Ad3KtQsyI|)C)-?wN$5C={?VwpPUnF0W8ALV>jtz<6cyW255%!;a z3FCcGN~H<=*}2TxPyAxHXR~2gX5CQQrz=kEeRI-p@WAzPtj>{9Gn|0-fBN()4gmn< z2oOJ+{Y-`vauW|7?>>_YUaHAUBk&xo75OwCWabn`mGYpZ2B5<)B&CXcbXFUfW*}iN zZ_p{o=WY;t!?j%D6@plRFy0%5zrB~8g>>ScqF4%WcTOzp0*Ff|4k%oxyqKHqnRVu- zjLB%#Iq_5ju7D;;f^_2xNK(3r*F{mVJK|Je=U_`QzAgAOmW%~LDqC}L?>Y|TzW^0z)b z@{yGv5_aJ-8|8Gzkvk9czaiRWA0D2FKtf%fMyWS6*R>-LA)+qSHsmE`(Xc;0i5rOP zbt&DmU+tpKxLt`~s__`KMTvqiwoGMCU&peq#bKd4e&h(RVCWg=GM#XD^ifn-$cQjP z1Y0K8m@C^=tm*f5(H^;hEmN&aEb*XLCtyI}5%F@C0Q{J8WB@>x-LGp*#ufX{#DK73 zgU0WzGhQ%0t`o>j;fqe+lR4rkW5!*)dM%Y>XyWmDWbEW_+1I>{yI+wZ&}|3gN$*Y- zv7l-3ux(A8dd^ctFf1ec)BMpI?(->P&SpXwn3Pk3}W{yz!!w`3k&# zxOgi@^g7_FgWw*SDWETf-@Z4^WX_!g!5`$tI`9@e@j74=w%?uWo>(fnebajn}JAwV(ApKR!ju*C2|rekGKtDN8#;Z*qf*vJ;jBYdQo-6fax` z8gUVd%{q|E9bCThDBgHA{Qg;(H}ZZ>U6erkf41Th1;hTtvcOlM|Cn7UuG~wAp!(3{ zI^erIRk-w3a49c{Qxin_UnKtDhyi2(PEt6E+&)__@sg=+4gQk)M&r$bslHOL7P{#h^tjEeH87>)V>1FNN>G83`yreTyY*+YN@ zK@E;jygJAkk@|Mn(&?a42CIj8ImL`+IrCBK@bMKGD&QiNl-Q2o`yFHMnM)fUk^|>~ zJ296DO`4raCi#<7qo~}A-!@opiLXCB+RuNf-Yx6^bn*au`15kZX>sdt%!_0yFxFcc1oPu z4ug<+H3vsK7s2DNDhcRargT*y%-eZ8=T0_TmxrSTu$R(C9qsuIW;KonE4a5<;({1X`_p>m+A zbg9uJ>I+J_1e;e(Y1m>nmu)5<)Y$P?$OXM0VwvKgEBxEXnCW1mZs4x}l7Pml7rh7L zEJw*u#F#Y91v+k72+NHUut^e6!YZkywJQ_|U!1Sgy7$i){&r(ODU5jW;y0CU?e~Iq zqY9J!zP0T(zzVyE1eBrt_Ff`vPxZJCI9X748&G?HcbAJsF-C#0?#O zyFPF3f48CS^f6bl8>P!}5>a;^rf{Eax_~7TGwy)GVISSo+2nAFQNt=*?G1ZbODoRf zY*GUFaz{{art^<|y?iF-MF6s;0TDF{zlE;&kYbgOUxje6yxX(%r@;n?i`4W0$`)z6=ci2Z*nfdel;yIU&JG0WcR!uGR4lk490G@$CSm-`=@M z^lFXH2Z@OW%O`Vz>*+>w@n5}_%usUg9fHfh{|VWToWnaJYO>m$M--{ZY@i;K+W{6yYvnU9S>E)BNYwVWWKIFIq4D)d;) z3=B9-JMdg*o7-J!KHl*eIQJTB7WB_^|5#M3oPEDluB&1t?QnNbqky?>laj$A!)dwD z@z}9Cs(=#tN9Z8SDN2(m<3(9h@#ieeB{StquJMHbgqzuVh8@=-NA*jgILGHsT$mg?&E z+09Gt(4&v?6RroL`_-q_GKURmZrLd-UwsPWzbYrG+T06P-p1{#bSS$Xi}Ar4pSTze zKa%lW9-1xi&J4)ka^C;CKfnN0bk zv$A9(#O>DLr*od*?iB~-fe#OIFS^|!Qhl`g3e8?bToNoa8Q^)Ao7O@Dbsr$ZOZkOEIg4CIZsCC{Bkv=}zb z44to6HLGm4uzeYD|Hx0-b8kF?#sr$F^^7lD;QdhEW<}>24{w;Q?7qrY zUg=_|FzhkyOslDwiI$yB@KdRWqCd;tWA~h4%NyGu7qktR=EtTIxea`3X#))tPLtIYCD%huZpR9)76I~P2syRW($$jESz$0o zgv;8-HJkgAYnC|0vQx!L>z&H@r>o|2{>to%Skkpe97xX}kja_Mtak#I01BgwI?n z$e-^EuUQs3Wb1hDeDPQ9p($B8Y%ZX3mPfY zFus;fCeG5YWT$2e!>>EWl?t=vkT`t$*3Zg?B%8HyAa6VNw4YN|;8uH2mVdQzhjicW zK|W?zxO_T2-0DxV&XtgkSt=rpnbo6V&^k4{au#{9(+&@+u~r46TUB6|k#@&dceT4l zIgr2R<%?!^UCkmiTMBe61^ltuwS4Jmg(zE}2QE~*cc;F|W7#bl&9^R@y^4)}%R$Br zhy9Jpqmw(f&cCCL(#309O+58v#yxIfo0Y2NN2l>&iLiT18%8RAG+}9D+&`xCOr7J+ z>(wu#?25T9p|0a?<%^Eo#|@J4irNb}O%_zkaeX>tK#`K(7F?Rcn(j^U=0y#T;+ndd zZX>K#ac$0RxKmB`6WY*2xSPaMa>6nIylU`$39T$)?P6kkzwC3%iRrKVg$>!b%xsgA zn!t;ybXxFsMFPsS>yXHA&dH0cWo)klc0n@>{k7I^->E7y&)EHDhzrvl5=zVFm!jD!kyZ<*S ze5oqbx|$=iL9AAxfiaIopiw;WBwmTB2EoYfDnRNTg2@_39=GFWhmQ_9^5u{#KaGRT zKvBhwn?WI?qfyB#v2_=0Hdr+ao>KC+DE$f|XSqL>oJoadX8u zU63Dg`TMGK&Z=>00^DGD+Td_LodqR(wQDr9Z0jvGHcbo3pd}VQINXB&x)iGz+rK*5 z@$S0HHdDRd$=CRFcQN^ku`~v1U6_U5W}AmA@9?K)nD<1@3FyaC^$^)g#+%T~&N~&&&&Q z`zUhs?c8Q_R8-jaOq2Ma?;ibPQ2GV1C`-_X_GTC8)+}@a4%cK)GLHi9PiV=NEj= zo;MUN5Df8#jRj`6J)~f%^byMR zX%!Cq``oamMi^xZM-a!vR*)kQtVVVKQJT{~K>b_yjp!oWc>rI(C{N@gIJ^EGhaUP| z!Dm%mKyfXdW708!yq_Xoq54bav(i0qSb3_?vp(_9Og^6|h!f&wc@@A!8N5;tnHFM2 z(4f!nal@!=_mB@9LFeo+Sr5j*&{cAk4V`4|dcjAM@|Jv-S{K{SN9ju$8Z*zLn`=_3 zjqwR%xm;dgfQYKK>3esz=vC9sz#e*OyUKuj>$2U%-2O#!8`NN|$t4dHv|>&BkhaKB zksT~|#wd+aNTLRF11vd9jt+tVf#6WOkw3rak|1c?Cf>~X>w3Dj@9}`;)m(vxpKE#y zX$q84%hjJ7W}g1g$)AM?jDZfTEKAlz4OM9o#35uk?P!erqwDuOe-}16k5=DT#aU<8 za0%YJj~dHMy7S1$HM-3&5Q_dV;q&NLNn^fESIB-|EEXjsG%(cb$HmOeN#&PAi7$=e z6M4fh>nIfS9W`W6wY-MS`u)yN+v{(IypDS(d<-&nv!6(LiZt<*A~H=72+)>Rs;<^9 zs9$gf=_L}K`Pv8|*U==E<614!dTu?lOy`KpFWkdGYwQK@=HhmY!6TJx9MKPp$DMLj zA7uW>3SD^~>d&C_hl>GCouN12%RTc(!H71FpcFz7mke=g#C*b5OS0$ebkFlGT!ksh zS*!hZ-5JJ>@0vImHMZzDRWaY$Ftw#=S&*lZhY&eEwWS{z*+cTuM%UjyEkzJiQ9&Gt zmEC4JTH0K;JKfMCf&)^im}(^?J|b{OPAU6CQu6|xXT|S6|I+=+C2<%|1A}|dTWvyn zeR-I*jHQhAAbuo{#DGk%Z?1@YuF8*T9f(U=wsdXs%HiAjH&RC?69uX&dKItY8x~As zG9uOKn?OjC2>BizBur~)M3oAH3DfY|BpNY3GhK1m)490u%yA;Ocm`7; zF=*+aSANyt@NVa!4=h860ECE%p)A(YGZ5twB)M=)kUSpI(l(!BfV}W)LW4!qjMRt2 z9y~bm^FZMPPUOK)D2%6q-{KOTMY&*>g@;#YEy3;^4jI+syCT^4&uW$O)-2eykR(=L zC?)Jv@0R7qe}E+Wx4Yd57$TU&X_J>&YsJlQdOv&1Nvt5l6`2|-6zv~tAjMq{nlG|4 zRLclhg3C$UK4|TWl8O@|11&H-$KE-*@-PxoJn_}&W$3G5)cX9Ud;*styB@nK*jhDm zXza%lEP@OD2f&g-6_#zjbMw8u9pyqGGazwzh<(W(_ta%P5H2Y~IVAVQF3K@BMPpuG z$F%DlXHn5hKb{$Hf5%k^LCC94`VKraafeIDaY%=`cYILL2=6n(q{dL}wCZw{QGu%W z?p0xf=yMw(3_g$$?L*J|xi{8GAaCfu_ z215GU^lz}K@zsTaf`#vi2Q+hJ_dd_G87l8SIvFM1dcOn%510{YXp3?JK&5tZT61aR zMTMun@Iu>w=+%9N!qcAX@J=fXid*HAcy25)PB3aiyNaY)F)UOB){2!Gw~*`)ldO^I z2ahzhkE#YPn)_c1>gLYRPc}L4gKc1wnD+b4Pwbb>n|C{Dl$^Yi`(id zW_r|zPVV(8R+mAYPW;2_JA6M%zja>oU#go}i|#rUl|KHYdevO(Tm{Xm&LGq9eI@yL znyYkMtDhyTxa+=K&$YkhRCepNK~gL&Aw!GRzvwc$tJ9HG9L=q$%$E(=v__WH*3Y{48oPKe9HNGNj#_XB4O#0MYR*Dww zsK?c~)Wz!b&<5m>(bxA)3Z6`9&$%LH3~Dh$`%o`KmTj^`J{lf_n71^#^1-*-pKM(G z8hG)O=wr<{-twvg#hZ5XIkFMu5w|o~CaDTw7_%xrN|%li9G(79^W36sdrI`cB!iut(#0v*{G`fi#f!(3yKtOLC9oay_D( zQxm^vxvCQqy+toIOMKQ6MZKTczkkpB#jBMwwU2{Tw6!pQW9P}&PeiQA4acXZXPM=C zVdc~4z-V+ZB!iC@LW5I5-<(-Gk8HX_>?)cKI!`2KYh_j}s7G?4QF&(haA%gEPF82_ z)R-yhY-j)-MUq5@l~+S`zsvK{XS<_YGuPDfZ`s>>r);}B$om`J01X;RwlOr1#sacrxX5m3!-cVEVMiIJC zNm4SOh(?uACze*;CaQ31tn^TG7jsYtaMEBJu(zT6nhl!Inn=J*_WT2R)y~Ba4JD?> z{a9y9cW){wH?S;2-?Ij}cjeld@UzVEW|h99GON{2$-{X;$Hg=Y!ER}{YRuzzLZu^L zOG`}T@5?C(TX+@A>M-(B648O}@C^^VlNnR2=#{y0&klzKot2P140^yTIP{CeXrTj^OEHW|FZd}jnOtU`F8~f zhR~huLBDEkZT~b2H(X(#gm|{bh))Jwq~57vT{fJhwTcop8@d|0FARMhIb-7TB*=Gd z2|7a0{|0=>C)DDRz#@jh*Fz#$cQkz4%T$}r54HOkwuLYA<3(@R#Ga3j8kLT<2jR?{ zlty_oI!2ntG(6u@(0@DJR}0q7TT^`a{StmU*!VF~sN)Mo!+}*t{d!&7h)qSIk6}1M z78@fl=;%l<)Ngd{-cV_4Z`6JTS5@=o%d=&IiFQ0a92YKRt^~vKL?2d9LQ(h!UZ*T1 z&gW!a)h|Oc*8`L-oP-`)?ISx*hik((@3OIeZBkx!YA z2>9w)dbL~T+Xr#}_Ia0#wMr!?k;2Jv=!f0EBu5{qYbq=Hw^oU2p!jp3M z!$;1S!5H|7s#L^)$L@)vhMumNCusq#HBr~fx)nirTAbLOS!i4{~`xhYkugFze*4|6}*RcV{U<;9Z>NhAW6Md1GMlAjgb#c;_7HfRxN&CoiBG{k@g7Cf&&LKoRd>+j!cFod z#KkXY=&D-xzeSRFu4kC z{gMqvouX}W$lmJkuGRn9&mw1n3pPb-5XcoU9D9rVt8Dg&9&S{CMY&2|Q}jIl2lR~4 zl|Q%o^WA`q^F$0*p39%}72sU^S*rFR-C;~cD$-V!JMEx+Auz9}k2AaSjs`So+K;Pd ztNir##)7mp)Av~N@YYg|+XMti+lj{r>*IBnw{jlNk&B@f;UdmIeFHU;IFmp84!sr2 zI7%%f*-OsHQ!wtC*0*{4dhVAyX87ph^Bp?zZcVlkwM3n$fT(&hUbbsf;5P=qO0K!O zMRJyV{l4F5Y%2cj7LzN9vCHgsfgNw>ezF))J@ z)H$Q98&h#tucJznV;0X1eSvRx1vxbpXo*!F3?4uCW5axj)Rg~Lg=MoXZkpVQWOZm@ zAe7+5G8Okrus`B50WJ)GBghT6S&50IsKN-3T5k3mM#@$EZ_&^K4Eil(@9wBd)a(IV zV)UOCUJc!im_XktjtQ-nS#*u^^iT^Cx!_JEyRL2w=S($xKv#xF-ny3BJL*s@!wBvp zq&AqUUe>onKKTV)uK|&eK^cp+3d40WvaPhm;&`ULiUq0$3&DoOSt2qYM$0#ZWZ*gt zN3CDQ#&x_=pG)H1YFk22*^Gb~J@^Yz-qr4L6d7j=5PC{bLueb-Aejhk=u!!~BVJXL z8l6GqBr>y)MJJ0>6Ow#vkC{;OpwTkWndSJ3=^^*^X^RMN$JbZg;-X~g zi|aMd&Q-P4iFp|+S^fc)&LvuQ+@XSL!d@}xBYp?!WTnL28CkR!f_fn}Cg}6M-`sMa zl;TTWD5M6I;`AEd#4cXBlI0HdZgPNIQ`O17^IAAn`qTdXUi10yncqL4{SeD0MAual z5_gA;V!u;z5Agh{VHbZb=pn3#Mg9ZM!IGbmFO0&i{{fFV=|n{YmQm}R#Eq(PQL!5! zAF&5Db@Sop>l1&L&He#~R=4P~>QciiUXLLNYXYP^1&&AwJsJN2r!TwDsbu~E?|+;f zx7yijL`M43+&utpGe5yn5;!{7DN%MZf(|Jp2OrIhYAKxU5et(gY~7d`0HP7=PR7)5 zk+9|I_`v#avOl-!UtciO%SA<#d9mh|b;km+e*GRhb|tf;p~D1AwXI%+i5!vn6JjF8 z+`O@cE=6IHkwYA7cb#3jjVZ9#eWOKfTo1qTa5|~ls@a9a5Hx)pvT9bTs~i@olzyID zL_m1&-goj7z_Wts4LwZeXvBhNew2G_S#L?J6kkRBT!~{G`{A3D_MX+Q6ixCEa8Xl zS!ANS;Ge%E#fGQ0&93n+#v>8}Eh@H;|3F>INZI>mcl*CHw^&_K>EWZv6s@x|v*GSkBUCbLlors@Y zz1N<;%kPJJnq+OIMh`cTZ1+rvsC5Ae_tcbq%z+P7>q`60cocFIE`-8m{sW2vndZ*?e&$LzeZVZnInP z*EP+%FjqF&OEM{*=Q)R0BYBV7%(qu0s}_}Z(i=G&D)TGz+BvHkaMS?to?f!#yM29G zS5U~4U$QOeaQs&jS{@!EGv5a^#5uq9(tWuNW_C+~;)`*Fe1g3XmG$!${NY-kVrpI$ zc|BwMHbnN>_@Qu3oYkvb%Xs3lIB|ePEWv0o)>g{nn2b;Xc^(Uj)Xc_mSMwLMmJBj& z#1nt&Rm}|l4k;;Rc1`3NWRo>-OPUJXUn&w?j z$}cpL6vK1RvY#kD%$Z2lV%q>Hq?T=Korm@`$#@2U__+HuBNUGxVw29Cf1Qop8B;;$QZ30=^m-h(x2|@n4=HJvM zN}~zjNlf3#5V$c7LUMXXxx!u>b)!3WkYzH>#D{q-k4#ntEL(5qe!F$g|FT3&h5kh0 zBOkxtQ|IhHq10$+Q|ud;-9H=&Z1tvG!-s2$Bb=N?BtJS{@s_Id&Xw(ro?jiOAMdR^ z9&P+cNz5$8pkaWd&h0k8rQF55;qx#Ilbc_0w<-P4m!u9-uAq{r*G0KW-LN+{M2Uut z65s;$%+gw$unvb53oAw0Qpo1UJV#K`PIuw%dH&tM7AEB6Mu_MxdfLDrT@iPMzcBpr zdVMHmyLNX#g|}!C48ALYsT7wOd0E{5ihK0I0qkxR%qZ?NYQvqa9VSW@cYda!a`M{CuAt6RD>oC37^+RVF2YvLH+%a zhj&VIy?VBhJVhkCH0}0tkD9ygt!GIo4O;zgi%jkHcX52w%Nka{68M z+aoP!fDUqb^P@!Mm&C8(aR|lr2A!gn$;@+v!uD(TvKkUe&FC~M`|rl|YVz`W*<3XI z_AiOJf&!v)0M0vS&I0iu;s6#RfR9n*42_t^ymKdB8rfD{WR|nG^pS{sK*P8HDf0j0 zs)BSkUoMmc(Xow=tL@4xJ@O>xBwdy)`(O&Lvhg;4^ux-|hoguth3m*n?8& zv&fgB8LRBw?xMYVtwT=n!5Odfe_`)mjdNAkR!r+|+0jlt5cQiKC~>bLcu01!KYG8+ zFLmQoRK+cryL-Hu{u^;kWbTWb50J9pXpHU=&EFe~xE}d9pNPgOEzyCtd%ogr47^m9 zHxr>npBH~qF0UmCe-)Y#JrnG_`dUl>GDbMh#NgY{$@?j%4`MVt#khr&9xVWhYFXd4 z&Fe#T*(`Vc*H*;5LPvIPPP^*-NStaoG<79j-|fHGWvu-Ho<-{s(9(aU$W~vvY`@X{ z{gbU$Af;wKb(#RZnh?zVvajTDIcWRQ(*4pHvX;|sx*XTPq|Y@w0te-I&No`KkZ6= zz)8WZyIPv|%KE3^%eI76lI#U|;g2KcT(zpH4B9c3n;&+I>tRef>y=@s3H-i&^bg>Y z#W$9uciR4?Of|cn+xoI`bMQ23)OE~QqBi(+qGSHTS2hE>LH4#O*2SH`{fB9m)FAeK z!uDW5h#d`Qa^wUP<}ateU1MHL)7Fz7kLYUTFnC^7t%XiHP^%%6^0oz|eUo=kLM;gL zg!v^6JYvMOOHLJKuX6p@ZlvB8AzfTu0?#VKt{rzKdF2;*(rt2UEq`479;bVLpzTy4 z29B(jIY@b2IK+YAwXHZr`8yRMIePc7q6mA2P&XUwD9 z&Qn+XE4wMbe-!F+(Hy0(T^m`YKYAJ`3luC*wyR`a&|d&#FJ0c( zNY~An1J24LD@;AHDQ<$#e;-tTS}DOJ;)(CP1__4>uoKk+ePF$SHbr5 zr+zpRi?E;h4yNC%ub)kUA3r!hdBgaUk8lkwKk6`ODA{^B+RD>RuII#i^W;TuL5gIZ zEw+(j6Lqtg(z4jv|G+iW$o2h}`Jc+V6^$aZ1Gx{P4^xuWn%=%#ZYQD>#Nqg6MO=wa z-|-#0azsD{TV0Mq#^MPNwi2|?&aJ3~NM9R%nLIN7^!mDN&?Z0O(TA0p)vvK4>!6yN zXI>npmr8Jtij>M41vtmm8#MF17sbcDX>VV~M;%dx(3Kiwl@ULS)f%l^+Z26XAGboA zu$XRYq&7agdM#io7lHf~;=nT=6~DPP11Dbqdwh!N!_AUDbPd$1XtAhVxm7PE9#ixA zin>M4!)Zwfm*Sdv(=v*WM2DALk2CRi6e&JA-|M%Tl$+A#PcDoQ03GBlpl^mg(gPI9 z7aJc9X4IP=kA5TR?SE5Xltpq4ax&rKq4{Gs!g0xLE>xXx|4j;wlGP%W<`)4WbwuWN z7&u`03$4Qj@4W}z(ik2W*{=YRTE)voisxJpwVZE%Ih8wBILpjVj<93>`tdv1YAQKh8oItq?^t?uGpAESakZ>ly(MzH1`tm{R(u zXQUG>vdwkB$%*P(>=7%su@T)k!GsPDZ&Z6l*UTGLax%9ZW_Kf>{E^a85fYbs{r)2? z$SFu!{g2MJ&*LA(S{h4Lq*37_Odo%3W~sC|H?&=V6?@eB-{pjO{M@|)(bU3XRBsYx zwO1>DRD^snBKXUEIDghzLOn9s7aXBHG8Np=uEbw9ww2j^*;eMr%lt|A_#g0$OhlCh zarBpJaI_TlIwQVT=dH+Tm(!oWb{ldgfjp|`lHQQB16~SY!T^=l?i5~U0{5s7tjAQ#kYWFM2#jMv;|JmO4J0oZ0 z`SedFmTxt@^JK59Iy_LH^ayB%Hd1>|x&2Ps(?^TbD7)9rA|?Bb=cA5-L>pKI&)Z8? za+{kHZ&D?AVx0=F(t6&P>~#-?_nWAieMEcx#sQwUm*vv$SjgvN! zyY);zT77>0)B0PY)G~AmlA~z@+8hbW@jUrXFtm=ar<-9THZ->zJzwqiX>aL2Au*K{ zWjTDm;w_JBjT9Pplk^XA87qH&sd7T~e`xv&sHmRzZ%{-j>0EN@Zk813l311{1tg`B zS{jrRmTn}aJ6*b@8zrSnKpI54e6Qc%|2-_{+;i?cInSM$=X0N#yL`1z=FWdjaP1(s znoY4iPCD-9V&n<9I_tEx>#m+`VB6Xr#J zM4G?#UCx=>#mD3F_yxzt#v5{9DW&cU8W$;rI%;Y=SYWf+RSbb<2e3>PCPaIL{`m3Z zN0^V$o?!e#RsS8cK*&!(#DF0nL+?V&CkQqB0G541!uZlvPCLHKJg61`VS#Pm=;+dD z#U=u;Tlv+66AaEKle0ShqVeNzE;%&2-f;6p*s|_?jZi5kpZsZc7Q9T-M<)8kA-duV zH-n;Vu!!=)Se=M;bM5_D!VA!C4&ME@kJm5g{-QCiKWGA1M7KFuyj*j!VgLT3BS28F zK996o@T-I^Z0-#G39~8%%sY}qq>a8wLFk{u9eWir8XhNgAEv)(kxW-i)#h13dGLZt zchM9++5A(JO_%&L-V1x(e(j}W*9r&Wid#w+p4T3wAeEh7nbx_mr+cPikyBjuYN(1D zAos72WtJQ;9C=I|cO=iBe^wpu;$sl_sz!<(kz5mIs&bL7>Zd9`+fB*MehC&=n+a4~ zI;rBkR%q8dd))$B^PWt#HLCZG`crV?&6vc^iOAiwLi+z^j5aOnJF{5H`pHSSe4n*a z(pl6!f&X}L*tpQ?+dP-ea8`>Po1yL@bC%gE5yi|+YF;0z_1yG(#F`b-IMk`@VrN3H zQPqFPQ1^g|n{f&0<GMSW}6jPA&NucPEGikk{ z#S}<2)2of7nmw4z@j{g^Xo?Rs6ZX&_wUbRmP9B|P%s!yn@u_-hNhN4wRhRSGF9Z4t zO(qRyr3Pat$=~iZmag`v(7rJ0PhpsgxTwWfU2aioy{t6pHlGxe?Ew!;R9~>wI%?1A zQ?A9@F)#F`@F%yro8FQoOBirPGKVPq24m3VlqZaS;TnjHaZ_G{6(v^P`Rj+cNGF>Q$7K$E!3MH76%WW$kj2`^sNl^OjePVEhR^^|!(H0?U zxDTT#$&$X|r(E2u3qz4=r!U{BlP!Wp$#1=XYGU|8x%e*y4B-zQ8&tND|D;$d_9diG z7VuPs^W#jIFN~>QphB{mufO!iV)*LSoD6v;Oje&=PHgHMYSt$*#_uYPe<_-3VF(2O zMYA_Aj;4Kv$kVqtVnUUt`R)uN1{PH=63IOBf9d62YZ}?Dik!oL7YEUlq&!`cOyRH= z_hwu`<=8UVD~(sa7dse5o_$#4urnttv3V&98@1L0c6ntNK(jhw*RLnumFK zk-J@jc~kC*Zeq_Ed^o)(2o4Q3n|!3p@hDJU%)#R*g@T&F&F~KOuy%o)D3juY_ z+!Uq!o0`kXjc!UV{wQ;HD;%XTB`{g6USTBJM74bDT3;fDHFZ-*xcyP3mO zQYkvxgqokv-QuQDO78wrHIVI(rkj(UFx}*plm2oERx$v1c0KjVUCYV(*VIyi@i4y& zG9D?eeH0!N7HBQ65ZZk%ZFH2{Oiehe&-qp#k-L^175gJ5lKI7;ug%aeg)Da7%@Br! zBTMC9+l%qByh{-@mhkb~L%A*~O8ja<9H8B;&B@R&O>yl}d6Z@AJfWcHxc?-OEP@C3 z!Brj~9sDEA62@z8_6?2WC)Se%3sHs3gh21r@dkMqeJxX$OxinI|FwOcdiRM)ysjDn zux71zQFk#x(n?k@Sc$ZowKN_mG`S_;=vPryN%CG~c;m?E0|7sj@6`Q8+Z>G8JAog~ zN|jiCjE@6~i1K}7-pRToR}33R8a7Y3nG>qek)@x?x_DXm$U-YJ>eCVCnXj#QpX@uY zQj?T9C&F~urc@}DpaxUXhlmqcwXvqhQCpF$OQufTylPoF=8v$cdmm2tJSes@Wy`8d zBQKLAg^HVWZ5fnN$-~6b->Y+EF)39(=fxz&aQ+uf5voY$$zC6Ax3#N5809JWQ`K!D z3yJc+%i?-%&uypUzBi+?rLR-?V6x(>z%uEO{6usv|0%YMp@*@2hvddu(*_qT3*xOH zaX&FNodEN#^usAjGA`p?5XY`fCD&?%eEzQy;1j4Cjztem$x`}&iYBLnh!wd{7CJ9L$c%drHh(UIR zQi!{@s$k$Ug2!mFLZb)p_7?@2o2TinPkED=8@R^}c~W7RPb(+XxK3DWMesibF! zBdMgyICKVDa#0Gv5R59SKQ^PB4wMeUCP|gEjFo81B46ixi?w9El@`}paHeys; z%l_8>g6g~{*UltXS;}SAD|fS>`-?^pwe)$GOY|gR*{yh)y0)B2H}i9%>fT*k_D<1@ zyi6-|VMa-T!BSN*<)RAV9zl^$R4!L8R&h1JgC!YNd|r4Uz;Q@$$f4fGZ`>B&rCuGL zPbaWhl36w``lVJjdv_Vt&vHyW=X6D9J`+$a1f>A|pLCO4@T4TJ&~|UK{iHn=ll?9kU>pTKH`;G;8M`)zs!n(+XL`!y7Sw%Y zTNuhOYTGkjw^`1+|JX~(tgG=2W2ewMCTD%Y6QRovPjo(&P$f`*Qw_UzRC;yE&8#i7 zvB>CCZ{(o6@R7{9*HxlRg_mh9Qz!lF#&okEjr7!%N10Gal}5@=hLx&kEqh;|K;|JQ zQ4ez^UA441q1)kRp)54rAsHg<&h|-#l$+vrV*bb8YKoJOGTntL?3|63!+cjRF6~Dn z#QBt){v>n|jvmYO*w`nurHc-!wc^QiAcv}EQCp(m_6ctb+XoZXjM#)M2xY-=A~Z~; zpU5-;3Dr{y%4?&1rqYBO2*9pGIW#-$%?_*1ASC{5b#^nfxYMsVI2mc%lqJN9vj505 zPHZ6$s-OZ&sE1hA!ZnOi4uo%;*_{*BLELU06%a4e6E#C=!+-&$J9{{?Kj~y>Qu9&K ztjbigMv}#GnO`aoa=Nh79ey0Itx@3Ry_JXX)oxiBG*J;^E|_eVTr0PQ>6s|c*IQSF zHhZ&)9Q$)B3?yl%$Fmp0MR-y?>{Z=t%YPqUQR~>wn-L(rIi}R-%ja|>yA+FdI3-X_ zn-kjH9)hMHL@Gyyq$(j!Y9cz(pELrydb3d-6@xHn=4Og}7+q&2NTsVc5C=JtHT-6eg zdIADQI!2a-Elz`|jfTF3L(A0ORa=1^lJ&q^?Ib&IcFF2mHg-;aSd=xYY^lsCfS@x8 z_By`JDSdb?A;rl<#4Y%a&=%}qsC82>bSl?ia-*A7x|DAq<~X?$larfoT9m8J-)g*f zE#6|61JlJJM6j;YSY|eKb6gB*Bw7hgYy0Si1dhlpA-6b_W>BFL{8{pw#UM3FVwjG} zFHcvsq=_eCeNV&;$5QI!Ese66Q=AtyHVeIr*Yj{3xWYT2)2IdI%CuYjdf!BXVLI(1 z)OA#QuZM;P$ih66R3x6<-OCUa_|ao#hh3Ielw(-CR7{OK8PuZ2sOPs?Ow(Dn5Ey>e zxpm`|ac%0;tRX#$TvMn}{-|7#x#fG*V(N}OX=i`H{EHSrp?=uF1ue>39AVsf~0=w7cknfhm>trhgP0@1Lrshk!U#+85Km(RN>{n5N86 zO_#Qe8IVibW$0V5@}4`XxXKDxHBH@_tLpe*WFYc~DCU=J*N>-P)Fj?iIIUxv_&Gh9BdM(l`t{6EXYeF^VJDTFNcECqtUoj1 zl$V*=OTha_@o{N|@2?|umQT-tos@nQgi+=darq?2P9DlmKa>-F4Ma<-RGr234U|kZ z*IL+3j<{RnJ*hTc^z!V@`y=BLi=#-U888f(Eny}3U9+v{f^Rk9lO=^WR!38E=J7vO zV@8cj>Zs(pfcNtxq14j2xuhp$0zQJpM$+Stdec_2kU^hL7M> zjtzswlm_wD5UJ`Tt&P05T1mD>M?*U0Ppyw&nYC<-L0h&EZT0P~Vd7>BC!dFS# z=?$@}@oiQII>B1SW(xh$5#evu)3a{|S`_ZxG9r>h;%VvC=Sh5ZBi==nD?M3WWLORy zdTLL)Cw6E;#FbSQ`N#Da45XWQa!n|^M{p}eNo~us%`}rv+@kq?s8uGHL(xeulZ9=*p$_$P18&>a{K-US+#T z;jp~vV;>f9-&>zQ;$8-?Q?R6XEbAr&eFdcBhB(3Av%woC+vh>rs0sy$@PXcg(BUPu zMhx|^x?gG;AS@vyC+;CRGmr7icu(cr z2;cqt3AR%G_N;ct1@8Earm&fFc?I1h$z;fE$yVs;C+aU>`*!zP9*ET-ia%W;yiEm_ zmg89~M3)n>5d#`UyZyH7@t!I-WpF!Pc`KZV0jy{rNixyfyHb7$;R>z|(kqiSz zHW%{ad;mk4{&=iWSkClt$*|B4XJ$2Ylm`37C0C67zP({)CSeu3eAm&9yag{ntn$v3 z{m6eAI$xut45o$IGt>f}624R&fNMh+;wjk`RJ`SG;z66`Qj?BJrZ+AZXJhr0(p^KI zmk{Yz;KwF0854cNW0E3?^H|R$^}}9K8&V}+ZR2&bKP@FQVl{68o_*aMxVCFo*-8tA z8mc6-G8A1g(v;#%ycqHoAX$pgPUw6Tl@q)^eM=G;%~s?rw~72IKT{`mrMj_vDQ2So z$>lh}f%DqxNGL`K(L?-&<&f!n!E$&zr-V%Gk12o6@7FGz{j>DdY_}1sQ#`YZ*z8O~ zBX|;Pt}0CN9WOL!na%W&LmVfmSOS8O95Pc2-;`I9skW9dkoEp^wZVcaXQr8%2#Cuv zDo}VWYBTyUAt~D=`o_WiFPbjXRg%;Y=T)Px-le+jArTA&rMu;YqxM zc}8m75U_xWyW=j~(%gi#eDYKm(*Z2`XFh`B9$tEwd?yg%$e9fCmEJTN)Hq)xFYKUX zcgrGGA{?q^;HGp@)>JC%TY1%Q^7JI?)4vFHBS|0>f24h zu3a?$IiasG^!$=mzPJBOVI*R2o?Y$xCzp1*LKR3sI?8{@EJ@e2a0Yp*R`M6Eo;V}1 zb)u4(B&5He*-HdKdWc>vh}L4=Fo#Jw@6|ej559#vw}0eJ%8FaX+&4THKPNyn@-m;v z&OEaZQXuteO*T&o4>uGVAtR}Pszzdr(s*We^M@dHgDZzH`+qPCB=rQ z)3^MDyX()xO~?2e&tP9M<n(ng_*$D5L1`h3A)AT@*Wy(gOn>A)P7j zEp%cSRM${3h5ZPo_U7cx#=;&mdB-@r&4|kc7Qw&R0lzI$P(tyr~Ayl;# z%_>Za9Q-OY&J*`}TkN{;lFSfoSv*&=zIl`F!>8KG^G?dp=&E6k>5XorK&5 zJd?0Ql4ekAe-$ip(X)r`+*KFm$$qYtd9hZmd0V|wX{&@=(is!pw7~OjHkCSLHrc#R zD+t<|T5J#)G`kqSyZO_XxNOOrm2)sx(_?XxTK2`r_qvY>nMMf;qKbrdll4!8J(ifJ zY^xRYjbA(F5!+U2WVe*!4|B-bcYe$_-rd152a%yeiTmGdlsFMfDQpEjvG7F&lg)k3yju zlQ5uW<9pnc=nVK^({vch(#Rf#9Hu%Ic zVNv6ZJXWL4k?5%zUop*H9x?EzsdXj9+ZbEPVnug~{lcVUv!u_|YOf?&dG;n^npvvX z>%gE8Qd|4}t2xe!Fx!aD;-AcK^y$~ZUd#Yon)uokwx^#lT=dmCYy(Tl4Y%y+KQ=E^ zPWw+BlbwGjd5Yngtw8q)J(F(~-5cKz8)cTAQ7mqHE1z<`p*1|loCk0UN;S8*Fz7yk zGe6DaU*i5+sz4+6G*7;3y}@_cMW`AO=$bLk8ECp}#Zx`2hMPZ2zoK_GFmBsMl(KE2 zv&+}BX+m9%eO2uhX`>k@h6zYE$z}KG!VrjkO_mn>%5OVM7E9CH>z*4F$P{DoRCE*6 z)c|iajZmww6baMXe}BkNn{zC@7sR4IY2nO`FShkma0_p3kz=vCw|G{7U|7mquXFK! zyIq!N0y5OVe>uGJa{Gn;3eP-zFX^UVmQt>o<00o*XfKl7FQZ^!^fWU>jLqZ-gEEKB z8T0#ayW9q=)}Y4ZN7H?dl~31{Rlm(QmswtHP~b`yOKeVeG4+w5;a1}(L4wVaO-kD3 zn8VC&zV*ZX8E?isBLI#TbS~q5S=S%gR`BXdXUJU=did^@esXlgk2-<-RvBxf7asrG z=glhoOkIvSud^5IC2+`h|Mn+GcKp3HgwXsrer{mU%_wE%rQ`@E+-DTj6`vN6|2tVz zr32H#g$(ahf>Qf&#na)=I1RmwQ=Wg$Yl09rC~ECVQ%dK}M{jhsQR>8ibGUc&7dG&| zw6%4{WdQCIUt5xCP&B)A$e3`B>i_*_RXi@5Wni>3J%8|G|f6-EurX2b=xF}~vqXXmB+_C`r4ZP1` zW*2@R<@_i-hdc@2EWI^K_=`4BxC+_hbE02ltVt3#W%zD3$m5T_Ro=pwCSIor;K?LP(UbW7ZdNI=)OuR{on1#Nx|IR>8l}xSoB(C(|E&D&Sqec z&o^P(>*;+lUgh!BVi?ohHiSUt-@TA|fE0k8o^td2|J#MIpB%o8{T4150PDD8@+t55{Fjs*J!?tQU)o0Z>2qr8Grz+<`EG)FH~kgC7Y1QA)|uR zz$Ch_M*(lP@@oMemKoLnhb(AI?6{oQm!|PXl}#xv$2&U->X3kj>mdO`|EELZApu3# zg9@9Kliv6`AlD@;7p$zhHcIOD2k%n%?R)h<3D%v99V*kz8V%QCMaFgiYZv&q`FgWM zr^U@FKfzkM(J!?`wIly7bJ9qBnKizp^PMH+PwT@q=6?!*2*>d&2>G&3*`El$RaCzop$=zlgu+KWi6*T-%e)mh$VW=jV0@Ra1d3K{~ zBB5FzN>5+e&x2dJQM7g|mz+!Q{J1(n%+`I|Cw5!~Q|UHv$xfzTU#oOh_uNR_*QzFF zD?0CcnZng8ABX(jhLj-Po_8nFM?AQBop$N0?=YMjHpV!#*NmpxN{yS8NATs28rPiZ zu#_X;EzXUqvlOkrl6}dzA}o+ef2rloo{K<}|5}PcTv7fiKUv^AC*@a1lt6a0ucCb^ zhN{0<*0*sL6eS(-QvRKApc*=L20iID3nUAXWt~^%a`RB*{T$M8QRw7CipTwf6v;K$I9@YXD__7r0Rv>6z+ z@r-ti@4Lu3`r(xuZFcV+>4+{F)C zc}sruvAx1o&r;joFx13ate9z0OKEBR-fhvZi+esn9VDDI`&p-^efpInxoVqI+s`*L zN6geRcFcowuh@UrqO8qZRCo3^lSP68%jg_%5K(>6<1!U8N&MJ4&uGmx-{X&>3WLjg zUhV!|(D}N-Uc%LS$feLLk(t;a=jD(7C(GnZ9Hzen#no$7;cr+XE>}55_U7-^PELY- z^+CND!JI^SIJJ+o*9u>;5$=U*`BEB4$|PFg7(T^r?PreOlBBR~4vSW$2R2ze-+))@ z76#Xf%)OFg)GmviPyUoXOx1m}KxMZ@ST*cph+nM3U5ajHX{hgtd^QKazUF{Wlr?r&OtrEi_`COcaHcowQ8mZ z(;T*b_O{w-6-9Z5-8ADWanU=x&p1rKOrbuTOlvf1kNgrfG5Gs9P>5^P4hOSw9ehho|+N6u*2=2)P&=_ zKKeo!TCXCL5Lwgk)2pIh^vd(8K4(j1NU3gRy#;VU)faodb9L<01J9)J>J7a0%e0mh z^YYNhZKe--mNE%9ls%wCG&8UGx(@2Z7`*rd@IN_F>7f^mS2LHD2 zYu|#bdGJ&Hlw*IdzVL^lOY1|cWjTWA)AX}2BzOO5Ja+&AM%Axq-$ZP-$LfX295dht z&R4={dJ(OM{OsMXs_O8dh<-LLj(o>LwG^hV7h_!z6pkzJ0<`pE&u_n}PsUV2k-(=}cR& z7LIY4?38;V88ljd;3S9p9%;U3rY}D?(hm`c)@=CN1#eP_;&xO?LoPWMO}r|6H*5|5 z;Gs+2{6T~E6ZuS7+!QtIiX+<;DduVE8W%6B2hP=!WlfJMca=Yn0NbF6YzUA3)t zWHxQ+qv7oy#D&+7_MYLV1-}YAEzZ{zUyO|kE9w>(0P+1u`YMBT;zduhv)Z#q-M)E5 zqDW@WfYjf}G<})RILVBCM5&X-tjk34CR_zPnL}ArZbjvp9LI5$asV-F+{4R{(;pTM zE3mQ%ByUqi%tTxq%p?_WIR7xqdFBU>lP@+K}&(qK)4+`cw^O&~)s zBg}&c+xF)YFEoRWWtb7@e=?>_iW6C3RUWU-R}%-8&Vsw98l^~5j>m6`x-IxTZ0a+E zsr66q)zD=-&uM?IXu}O{%4@VRjO5M3Hl#Edu|{wrNV97nE#c}urUN^pN9*=?YdP<6 z5f#d~`EOY>p^s=5sD=%wgaqydSTjTIXnWH{t?3Bh$lO!S1p1)jklL#U;0kd(Rr>`Dx~_NA%^hk((0UzjD+o(R{wV=EJcjp7KM#DU(Bo zB|Q%JrldRlM^7!dCwyVyROCC}XJZWT_a*9Gtu>$Oeic{zzM{Au)T2$=j^ELvwqcOm zR}U;=*fYgCeiR-O<7i6EkJmm9xGYf&>S;6hqY=Ck4=d}8cI```z}dCQcxyCO_&W>g zY$8;qbZ$lTS~> z9lY5(ajHj)b^P}VK0&Ycz91qSJZ^0LtRK>?+hzIch@X3L5$P0hP)2Crs&U{|qP{}Q zLg%O7D}-(fEBE4un~geSHbhAhh84jyK(~qLU<3-&EK``_NT3&I#->#s{D%as^kz6m z`C~{Bu32}lYxIT#!*Hj%bT}5sawS=M#df+@FC5Yf?)??g&LwX0)eu%u8SY3g>*!K& z6H3Iv7{E9_*^da8<0~D|vi%&Bt~xBdm9H~pe{n25qrKiyTb6>bSn4a|#?v3wU)oYF zoLu?dQQIi_Sz+#N_(D$af{?Sy3k}=px>f-+^c4(ijBgDWO_*ji)$nt&M|!0fC2_BM z;0?@J5*Z2w8*wFh>(Ry2pJc;2ePv}*XH5h_UuDwJXRWO3D797-ZnoUwI_b?BEJnc& z%+=idAlOw1W%u_W+t|#+=SQC-<$Fl!6FJPvrtR}qx}i7L^iM3DK*k}r=%fx@V6X7? z%N)JxS9xIHuMRR1rZ*%b!b#kJ(Wt(aSP<2fRW(3Z9?9QEi^h1N+W{rg;f}ce&7w-A z8&$QTvFTt3`r(eD-*~x1D|Ab6=J$7BKciuG>rE!A>W?b$q(+=O81mbfe%vR`j1j^x zG9%s_taMTS!0(mZtAkr^<`CJcPsZO8D?&kL{O`{Nu3nSTl}k=Fy*RoqVYw-r(mYt#8AZUoamF)sNbf z+z&fnj1V4@eYV8oX!c|s6$o0X=RfM!gIz3;PIni0i=4_EZyaU?{=Q0A@^(cL`vCFdc4&yGf#&&@s{)7?tT$X7!c>1Zjc9wdB1M1DWJ-HmJMED9Os= zkbCpPvs1nuET%ERwu-MOch>ngnm5DmsS-hM!{A7^5FAQ{IC}IUTQRy-T)yPLQ zOBt?2pX9EO3*bVIg-jc5;NI};#I81lNonX7Reai`cd<6zqppv(iOsTd0SmX9x#;6z7zmR+7z%qtM16TAj19dNnXATS;~g*5uJA1CI-D8e@sGPLE{R3x9Ghdwj9Di zPu2bT*_-i`&CjH@A=W|LSOIp+{5~ey65&3Ye5(xT@5e@;y~VnS4s%1j0!6E#;}O32 z9u{<)#?BTMbQ$$NZCJ^>O4e|mut=>Wh2Zn$2S+rtKTE3Zn6TZ_-=qf?XW3?*%;Hv~ zhA;7QwHWwK$Wl`Y65benYhcul>G%^OhmPt%5SkHK(hs^azE&Mjliw|Un8R=+z-^#J z=f?cw#mw)`h)7nClJJhh5h)!l1hnH8-(ty zo8$5p&+u#lSB2<(Nw=EMiY^~k;4w=(>6u+m=L_>^y znWd@MOQRd(bP&iIuNf}a9Pvg)0==RfURFQ89HzsW9zZq|c$akGAk#G1#aDl&tQ`Oj zEz7`)>0)G0woP}^85LnXdQP@ScOPab#=#2|%P1XT$=uJa{uy#|PupY5k5;H3*&PH? zs@_Mh<-pFqjdpz(=6EE7Lbom6^H)yk4ZD04m=XxU;>rYQ=#SB#Jb8lg?0?8O8t`$u zf3P?a13v(Z|HH(=f@XZOt{+GkgD4#P#ITA$0y-(MTxXsPvJ?g3I_eOHr;HNan!d3#?nqLr3H0a_J0VA~2ui z(q!pWefwo>U04`n0_FjS!x0?mHZZ2)(wLi#+WhpQsnF+Lq$Em4Y3s!+0tRky>KP?r z=$N^)a75dzh@0_Gv8vyhKfK26+ujPVDvfzg{4u`s`w>VdyxQM-^<$EvBd+f(jJH78 zpP_sg-Jij8zti~U_@3M^YJ?Di6J(~Yev)@LD;!l}Wx+|QKim)XpO6q|*rtb>)FQ!# z5!CSvL}gjoqhsTZM6CmVjDKENo!|ZNda!Q`6kd@|KepU%-4(04(d=#Al_om2yi;or z+%P`KiSVrc-{nuBMCO?83JLtDKpvQ*mu4Yu`paV$fx;30U1p8x{LzmUhQoV~AFX@n zI6<)|2*Q=-gqD_8O5W?V<$Eh`z}nQCfa>I&7CdAT^-Q{S`Ez+NlIdvhU=<(Z^9lS)^p7 zYB`rYbO*UOJ9)J9xpcZKKszxKCrD)O3fAJ_yH}JZYvBqcPHZ9D;Av=U*ow&@zC*wP z!CZ(}P^3#cakmd!ejNeS8RLGlD^AX=OO(~bLve$++vDp2?2Ru0^e>u)9f;rQcJ;`0gYR&sq3`R=esjJVZbdXqAKD8`n zWptTda!QuCN9K57HHN-jd1mXLUd)J^CiY_Y%$SgC63NVr9-lr?`>Zkb#(&`BErEI) z=Zh;jwF0ccLy_%L{}m)1cdLem;x9V{^Mtf!6KsL-aQE<$EesIgL;vRa^AF+ z#=%Ua1a}kbkh18-it7Nv+(g&40Yp5AcZ9AA{LzVGRYElw6n7eBD6yR!t4XT}VuCYsv1z z8lw9juUUZCCUo8@^)DKWu=S|{3RZ^XQ2$xWvM25s+ZI$-eyNq=r7JC#lcV~T~p?N?%jnnFfA)- z+8DmS2%dw&=CR*;gVf0}7DH$00Jc6JPz9PWTi<|D@p9gT<-ANl{9y!y@Oy4scyS%L z)v3^Rk%6%aTwNh*oi+C}UyF{PaC#lYw!n_4 zb;CAdMtIm*4)i6rP0pZsZ27)I%`HX#ndiEifJ&b=J}Z#&T=ZNzf!0MWV@y52801LQ zO{M=un_?`wE5KMwN%y_U+oc!IGU^X<4aL&mutJ0s5|N?y)k~E%S!NtnUqM`CR}pJmt*b z+o-w?G%oETWy_tX^O9ilB_M3he^ZoO2++)~Y;HmoK=XhEZBDx6KmUB9ULt$xl##Iw zDSM}&ywGUr|3mJQ!!bl??%-Igu^H$}#S2^i3|F|t>4UF^Mwtf`wkPsDY}-3(FEd<0 z61sYDj@^o`XUVc#JHKMnKD3h;)8pPT*2=12e)`S0n3WY=yk2vNH*sCDmq{GNpt{tc zaNf$CP_kVMNiWgQ7&E7yWvOt~Uuf;mWrW6YnOWda9X~pjBKO^CooofZ6LY>o8g0Qz zsE=eSJDAZum~p~taX@%xoVFF`#f-RjjNFYQ`?j+GMNfF?l>-eAr6lVZM94bzH_z|8 zSys2j%K6BTC^oQ`;r-VY-pTD_FA3rbc&Q)HT zA-v5J>6Y+wlAymO$oQWO*Z*jE>yC3m^&5?U*bXfv#=~w~pOE$mO|$DGA#@f-12x^6 zk85Vqzsj>vG9~0Pw0?mh3 z|4&EmL2b#AD+}yHKMaMOhGuAB)P{RSq6FCs#UjX5D%dRSKTxL#L|}7!V0bw$IGw0@a7C0SrJA9}7nP*>Eg^Uct4Ih!>#_% zp;Ryu=@Eg>QK3|z;M8q!_!k|B+m>=FgBo+aHWtOv!G2%6Zf8i-C$v z1w+VF~3VNbQCe{NE13LxRJ1}LO6Vea$nGk_$| z7rxBWzBViZxnd=;E%>(9PONvy0#eWmIZK|=nPuL8G3nCc%)Ly|WJj9wO?}?g6%ey^ zccB_^@qI>i^^q?u{(?lwnZ$j0Ufh@SxvRvw&PjG5ofEnB?LBWG(;lNdRPp+*@l1BT zEO=afp6wJ6D%qJml6cvWQ5HO+jj;(`Ag8nKnMVZNK9C;y4SS;2fu22HIV9d60(vE9 zBv76Q8();64!VQG$PS)~RK5ia}Qd4hD1rlg0vff*%jC}qtT2fdBGYJ%StpUghlHgv!29$*Tlk?UVGK9}u zChz}V&N!|W;&J=@e{|QTQjw6;xOrDkolTtw*v0F@wdnqfJ<^;J?c)5)hw(o-y5oh@`|45J5 z2&z`dpp^5!F#*(HHow&fP`}tug8wsGxOuT^C!xMcdO@`ltW5Yo>@&R5j(eNpW4D&@pSROJa2ujk>?7DhJW!$#i@8W z4HoSm(%8(5?$PmRD|J`08`&x@&aWZ7oyj=hc_=uXn2@5gpgpCE3>^cAA-`&X@xCdy z3OS$8LoRd7DV?&C!7L%ascU1GRk@`G=x*G5c6Qv^bwT_`<2zuqL0ecOPI?9FmG#{* z+l+YW;F8vik<gVz@X;v0V6=@qfxQgMB<#=P%Gt zN`e07KW5o~*W6OhI{&k6hN@Uk$Ua@TjnldUi1t+}($rxPuY$zGsp7Hkc1&ZlT5F@3 zrZy}6It?4r(CA!|g3eyD1KrRY@!V0SES_w-2=Yv)vX8nCJ3h@=vn}@jSUrl> zS#~1lH}DI;aRAmqK8%0S)O(Qi$AU$DIiuH{tjQ?5Oyn5NrHA4ryO5IIxWoYFyNz&k z6xNPqI_GHGCY$GU86Q)%kWzZ{Gz4@nKL_RbRF zdU!iz08D59(y7Ixy_iPoM5JdptNa>gy}9)3oIKY@RfbQHRk=e-QqPG<(Wyxbo7^>* zi+UJX;bCY|Tt&+A2Qv8)c{I^xHt3VeroBK=79axuqK&a$K<9iZ$G>v(Fzu!{$ej7U ziq}Pn-#Y(OsbEG*;y;}Z1mSN_8Fzt44oID;eK<}2_^`_U_(iL9QppoMiaoG(_%Cx%g7y5ZdY+oP) zXZS{(?5$3IvW()*WT?h*;k?W3!MDvYE5n6Z1BO9!k}-py?$xY8$G&YrHwGI(6|<7$ z^VsflNv6z~rL^vBOTy~9iu1X&tTS7l6CdDbaffpex`T#4Jflb)-KgVdh}acgw(5$2 zBw z7~G{j5PAd2g5tk0`ABL9ScJ5Q^9|*zU_QpL`d|RT2a+7dF-wvu5y*@51Xxk8osP>3 z<40DR_=YU13+rAuOxO)5I}u;02f8d`dhqIUY~OvVO>>jsQ(=o@H&#jIf!GO)uIG=a zwtsKe!~#{cpMr%QxCas-{04Hh8@PR;k8Lt|^HDxU1`kCc+nFQ2)Kmj#GfT=Ao?iA^ zAKedXCss;&l@t^le$N#-3XR`AR~xEQsTyVBMNLe(zDY8-KGu9gvMVu8!d}%asGb~Z zBs5>E*D6hA@tB6G`6oDd!jMj{Tr!PLE>{kVLx1T96__x9Aag_AnTlt`SKiW%&8%mg zvS`s@15NZ-wko>|_8!R;RPC+6FX9d*oe}v93nkRljDSty8HYU&3*jh~Y@NCI|8aB` z4o!YvpO6}%#OUr4q(QnB7%&#JN|$tth%}5Yh0!B7LQ-kzk{U2dT3Vzsri0+me;vCZ>3XM89ZOH)yFY<=A85LI&KgU=yi=xx_Ga zAW3I?s`aiHi4QhIg>*$GPe_y@KH$#ptTD?EA?30ty2fnpF7uhM5-xlPb@C2`3#jcC zTPB9dAQnvYSknLAN{3K@-gbOf-80vNviCITx`aI-)Vnr?@;8FwOr?6qV@Pix;|S5B zz|g30DF%71kA}nDcQ|w$9b(BbjxS{gfWZ3PDJ#Ku>W?8P>PLebSyVb=lPRB zwHfT8&KK*1{-Z!jK1+%*j6QoH#m7YmWtTQi`%1s_OMkemnezR2N0*c>-}>AJW#0tr zVTW{?UM;*Ow{MZ@IEQHTWL1|Khl9X=F+I=8>q5{EWt#gJ>|8acGSm9vkzwc|^^o;} zZ7n@n7|WQcLXX>CPlDC4PRSp~s$@eJ_kkMQK8`0Hvj2NW&A(}Hc`s5R7<}I(r%NM> z+q$r!H$1r$Sj)X89U7{&!OD*cH%Ncm zQs-0g5lMO(ifBaR(E2#xjC-yIJS!z$0#N=q;d_8|kHY-pq@K9E_Q6XG$Kl1sdrZcF z+`9pqCroXr228(ngbZmtZI1YCHLF3dK2ga)!zPWH^z!NlCJMUZ!)@M=CU+5hdI z&tl&K*%`UmOfW6pQuL^yn4?$>x11;qHfHDY5|on(XzZ=xO@S0(ZFH?{C=*SQ0DlX; z3YNl?wpMv_^#MWGFX>hHe%tKEc11l>KzSH4s<{`@?To8{?JFItGWam}$6mausvp$) zKxnlz$6OX5vJ9jy9T5^U)Xq;zFv|F0n@8-aSST2+>zcA0LPOXqF-OJAq^F`3eN*$@ zrx#BzNX{(+yc{%bsNSV}^xlUB3gdZWFG@`VRtguhYa{b7D03t|VsG6?5R>UlBs46c4jA%1+p zhf2X;*`XUejrVf=Swm~=Dj8gSvGx|}uU?)e!CfCp<~4j2Y>xkS06IU%2D| z6xEEUiiico{Cb4BuoqbMif;M=aWNvkZoefhP^HV-*XnK47H2=-c_7Q4UuDgo=7u)JlO2Te`o}eW| zID>;M=R#A3%64{?R(HxL{fW;gy;Ill~D_M<{ZYL!(i& zh5`6z-~vkE9!p!qgNC<7t2K#ksV@gtJbqbE=v>Rld6M}=^s;0ps^zPFGhvbf2P=bW z9q~n&p?b#<)g*6iSOmKq_9`wxOiRrLYPBObeLF9V@hi2_H z3Y!_5EgM{GU2}VumbB0yLlE;rB707qm>d0jzOw1Z36Hrw`hpy-FXCQF%%;CLtx@&` zG5^&1!q}Dd5FWCk3weI;WOSPyiXAcm6si9RvBd=%CyB0URR^(duh9z%L6?21#%;QH zAb|kJe^#$hr-Te{nn!}S%&f&Tn%V|BoO=o$Y95~)h-8-fg+VUHV2@zEuQ2Vsa#iFe z4qtCq4d{NADaJjgcL(RLkg}7el0UL5Po8kBq;{wV!nBSL8mAKuHrB{u*Bhj!ganVO zzeA^T_TCt1@{aHG4+nK(9DhGkH! zF)4Usex`w)JYsV9`h;#rC%bf+I@-Js!l{t7$0i)0s3QUf29N6CE;@^^fKIVDMrDyk zvD4{s$=SYI8=bYy=z9FbgWlg2Uos#D6`Lj+m*e+!r5W*`vsAi`(%B+IV zV{!0ED#ExT=aT3eN2n$j<^MR>fl}%RqT{Y(ExV|`AWlUu>UKUdqqdL7BWE7LPV{Cb ztvZkWQqQm4!(OyLYJ7WVjz(n>qtZjZ=4#WYurdWdbc@A-k~*4Oix9JO20{Z-r29uD z;a2&A#!gcAm!*BAq;vaNsyCA70LV9$%hG0!Wzr1Z_gNUMut(4V{?%s9Ej_r;%q#8dIGR0b{{CfRiv&ipv z>`DlQW*ChF{wvWrk&_Xac*V(;kw9ggteNql zw(r{~3`0YfpVY^jL$l#|fBzb;(pb?XQ87&3Nf2s{Fukqg$X%3mu1)_HcFN*P)cV$^ zC$FWFbU>_#fW}AmU-nD?1J>}PHwYY0j8u8VxSeD74=Jd8Nr2XezkgE@W?1DaP= zUI||>h2!+eQ;_FkzBy)36XA&~f~pgNnv<3sS5-3zNC=wJwm;)j)DJf8XI2Y(Y?_7i zB&II$w7Q?+Mbf5_Zl};1Z-n_S%Gpn*+9K&kOsb_w@smS??J@l=?|`X5m8g%)uLb^e zGS;+Esv%gJN!SUxXfz!Q(H%l%R*S@} z*kZOT{#M2hfdDO`C-~FCr0k8rN|EVNZ9|K!(n|Kh%FYWuGgLBBWmL7sKXTiFzt_WZ zzGG6EmOs~wFUzJyvng&^GpbqO6@ozOdbL35gI*vl6cTATeGDj_)8=`Te1Ch`D#)9>u(u)|Je7 zXVy6~x)|>Ra49ag`#@`gJXz(de}M}*I`)z{a_>~=9O71Vzs_;ZnW(jC0&_h8>zdj? zdR;L^Rxt*3%L|Ax`+!F;ey!#IN3dmO!}7jkW9`YYu>euzWKZIhiH9F*GPPQB;GkY^ za>xQDXr3wkLUTUX)Q8;a)~S9%*h<(YBuDK*zsabWso>-@lPhTMRe3zDPVr6bH9G# zIMX?JNKvAtryw9+7O7=W`KjyUa<2;XWAGc%8p9&yg+KMviK$6U>;?;Al^*#ytyz?O zT+d0xR*oe|Y^yu0)IHU)Xh7phwwN$oPfLT zmc`2jNSwc*C;B0%h;A^1-~o1ADp!4 zaGx=CLgM?OjQJhbIwk*LI%a$r=}1d@-PKZQyq=iFHQ1BMcH3L}v3(&9qPLgNC**a) za|8R_bRS`@_8LDlrfBTO_0O6IO0fR&Dp?e8qVByMi8C-NTD*iL8<9NPNkx1hib61{ zfJ>EuybLvCSWDj*86)b9)j3MrHUH*4X@W3m@x(|!vBM&E?8iSMG|~oj*FmjQW##?q z0evid-^s5Ct&o(uGLvCLb_^uyTD8mUI!-$Kac|X;p=SWGM9Q5T5lspHAA|sRnJ4aHM_;n>&f>_%)mQq+uZRU?Sq)ODGfW-kQ%wt zCIUUonu8~(QYGz@?6>JknMZLN*RJht>Wd22{$K+A!If7ZnC-}Pwfh|QkbCB)F~w1c ze%s{k<(-tGki86SM&$Yr$dT#_%*u9C z=@ZjbG(Fjft0MenOW(Wc9Y5i^2WuHg72d{m_oLGqwDjCnZp(0jmiuF?}V>>BlZw&arb+S_k19)_!U^Tad*k;cOL41sPuCJl*M> zCSjipB%iHBC~PXWl}X5$XMZ(hqv0|TzY#v$;uPmsVj30*qRq^8=9j1!NMg(rO+QAc zQIKn3e}X`8C8>U;Py9z^&>b*lYVV{76QT4ED)XyRZe)G5MkjoA+I4mx==Jx(?>CFO z3PeqhZN^p2d1N6SvHnW3$IS1wgO@!(1#503Xz~Hak(4XVbRZ z;AF~CzUROp9fY8}3B+e=I9=^Yld&k770fsNs%P+&E+PMP-(f!PcVge+SOQwi_YZefu1R!Mlg8eF6E(F+Leql$|Y8H+IX?8J)Zzfh>K$aQ+#oy^xq$HsDBL|t}|H&DV1T| z&czt=YQmWR3iu#Ka!r(Q3hM`@$HQL;!gj=E&ni1C+9J$q%Ik&je*vwub)66?ACnmp z8hX5EN^qiLyeS`Z*dv^kxIU@i87PoYEgMvisIMl`62`j$Qnd}Y;_>c^2#UF#_NY}P zWg3hx&9mLTlSNk>q_?oOta;4mD0C!c{|9j zy6*SkOghJ% zPJ;H;w~d16pBs+1r2T9COf0Vr5^FH$hz@-BY|puf9rn3Xa&T5``0Rp5>P(XCO2c;9 zh)Ae2QPfhoEycoZNNFmKr^DnR9`VIw9Q?XPPKbQl8n)hh+yMOp;GVwAXI58pQkTcp z30<;BO(*ItuMzMi+us_)?PLeoj=oJ)TUoMMkwF1J$RenPbkm3j;)#m1k?e|<+4Q^A z05{5U6h%iY!^51Rwu5k-lk6a%*--DkR;OOyMhl4XKLRc&yZDT}{J~7|`d7~9t8I~E zmMiHamp>OhT%ofR398Yjlb zGUQs55*9(V=-8@_;Le zEHe2xsr8wqOMm!w0jltPw;F83DHfMF3*<2Z>dW|;70|f3$@Sl#l-FKoDiW~BPplV0 zIy{r!EbkwFpw|UJjP~=Z{*Bh0i%M($h8Bcx?XfqivDyRg9n@u?`t2axO5tIK#vN$? zoDrOI$Qt_c!VyFq<*k4}wCeiHnwn`g2G>KNi6?2B~+jaYJSDGx|%o z;k~R;O+~9UgMiv7DJmQKI)5#)&=F&IN(TX7X~dkaXUpTrb5q*sgq_+`ho9eS)VH3R z%eM~7p;{F43dAa(C@|eS;O9KFaP;ngf*fnZ{roDZ&kqvXQ^*j}6Z#71Hub-}2WRT} zE#yXW1Nw)sEOtH7dG~}d8AiG-%n)Lpyd5*m<5`-$?fS;;r!hu&;dm}sA0~w7yCvXb zBK}(3ur+K@IaWIF)_DuB1|g*eNdhs)2j7)^fxS#_kZ!vz-J?XX`N2zqy+WAFndLTT z;xs`20v?>fDKr_|_3o$58mapeO}aMse0oDG+g{TeSo!dQ4ckqVN>0X7$l~6%ukBDn_4LMUnTALI&DDGD#D z8QK`B?6_>NR;H>8=B3B#vLRSs&)qKG>c1$x%T%NNd#re)0T24S!M}nxkM3C9sqpZ7 zIJ54}CT}L9YyU86iIwEYyLA(*Kz}>(THmSokZ%`dd)G4-`-H+R1lOhn&`_ zgLVr3X@*-*0dg+(G&n+NSLAII^RiI`psr8XL+w5?w2e3VAJC)!;3vTHu2xTVhlAbw zPak|{C)e4Lu0=-3H0z+&<-3UvR0q92T1OY9erS@NkEY@qDi%G z0@}E0y7)z~!OeH70A{FPwbr$PUn1TP-=ruwo{{i*PYn7G6h9BgjCBjUdn zB?Kh?i|!nEsWvVph{pH@3*-#RDTi;+F2DVc;0NDU@JVyU1C}Z=aiE>AEXLuRL`{um zI_05M>r#Vrv8x*y`9v+9S(QLs!ruqmiW|#Cz7bno9WCiL^fa0->3hv5Uu;%EJGFac zs#S~t_llO_cwz;p=bsM2;`;Op@cB&+s`!cQFEsS9Yz`21F5dz#_=;7wN4zK20Ni^| zCZc@vGG zI4&!2(W+D6Tb(j1KvZg5WPpAE#;HP# z2qvY5p!z<4;2+*(rMeLuml+f-TIkdQUz6Dn3a_JoW99zf$XxZuf_I{m@D3C%2DcAc zg!u?6cV-O`^}lPQi;W|;h*Q@L{%$d0hdxZ22y!g!q$M%!QEVfUsBw=u0h)SJ3?$ZA za?YnA^HrJlPmUQ-zI|1_U7cpnwJR5opj@3OU3`b<3i$?(JGamIN*$t0c}5hTAN zyQLqw7eSeuqy6FcIQg^1E8F)jrxmw#6ID1R25+xOj{U%{H9LIrV6Z-S;8Bf1jtkJg zAcTjTWLjO|Dju;#tR@ndn{cjeBT*2kZzGx+|ibyB7YCS?=<#06Wd9uCBl#TLj-@ijC`CTd? z32p@Q7np}7ZaXl{<0oJS5Kb9N;#$Yj$*&hGd~RRnFS@YL`1V)G=lcY-IN5y^OAX7P zmf1S08gj_tv!_#Mly5NsIxayfQ65cxzGp@62cwktF*Ku&jR@B|aT44?;bvwwR;h=z znpB7s2W8ypGlh#AbDv->9ctTC=Dk|)qdy2NdEN00u1WgRi5cX7M=U<@`Qe3 z_8{|W%)YOx*r5}S`IN<3n!ZzmGx1=Af%k zVIsw{<3o(k=t9m_>7B$qn#h=x%Upvbfx`5_?42F@W&-qb?6iHah<2TXvn~gHs(THc zrf*WrO>d!->b)hafe?R@ zoB`Fe_|}UrEZ?sI9>SaW$~sD&3JND`>LB0zTLDIay*EdS56ZnHS|Q5cH=ensJutdt zs5{RQB5_e4C}s?)(d9e*88E^7R8GKjGGFKBYxEK&hZ~w;28EGFEvWwp$gb+g)kkzM|7Fc(=xyf@cr>f^DGZ)2 zD~GI3ZWasi{pgh85&6{ww9J&j^ok-y9+vJnis?`mxWU+5aUx?Rr`k%PRs6!X2_8i^SY3k*?&OX?i8PV(13WxK&RRu7 zywb-1L3tT_nB-1N`S%ZCzRBtLG1=;ao$+e;f~ej}>K?pY@Y8p8MsYgW;|W7;q~0q* zO|dQ|p=8nm@Z^&bshcO0B#zDmr%}hnj;5oM zv2F3UC-{LAPgTDxd?W<9t{K611^=|mrsfnR`PKT;7|-QYV32TdXXuhVE^eAU=UNUs zGG;&F{MsB`d;xA|gq_6%x@W>EIN;}EOmr~`td+bz?S&9Ob}b1J^vVJ1BFipHguS1A zb8-e|Md<%p4WV$;=L@hbSebEwk>xz|67_|nYP5iFns*9HGqzI(8*iT0k%L-V=LaX| zQk6jTU6zZ=B^M)xNTj)Ygv1`h*95aP#z6;OWPxZ=|A6)C29hsdUa}?=<*8MN*@*Ua zbHnYoz(zSBUFe<1oxr0}!S4ZJrVQjqeSH~Jb1|`d0f10RMmWl&#vH(B{s|{TZ;a3f z|M1;x0q8)kbQl$Aw^w_Dzg15X$KrU=gG_WpG`!#0YJf`5aIQ_^g5oLcfY;tByB`>Y z1@qfPhOKGSYCs)uvXLXz1Wl5q=dQuMctWM#9n+QqaH+@!@5rtvb=1)M_$`CH@mJaj z*IG*!kAtMQoI<2!9C7qwSU+RuO1&NoT;XoB z+ zJftqb1Qa}6-Y$^-`a++s=Ie9dWAP&dkYYu+|E)7QAP;6mVh^Y9n*9V0L-j%F2z5Ng}x>hrDmJbc2cl}&2shfEJ6 zhp^Mha~nDBmgB0>RLVnn?XrWSgEj*k)AI7cymDoy(NSK)n7Qm*Q^eHq`E53+f36aP zn3aZ|i%h3*kd6gevpO>bEkS(yjdCTyV?wjH z$?~y=`UM$oYy?mYkFnccy-423Ol1M0AEs2p?aY^CfL3nsjl3W?5EVgjd~FRzWt1z% z#>+Xywvhao%7Gt>h@G8-gV2t4U2VdDpH9^?#$|uknf{g4ck9+JRfeUjBkRW~_f}l8 zryi_O(wLhH=dx^zhWY})`tg6V4vr!(ZNCiK&5!2f${F*l0tr@{yO>_Qi7k)lPiCYu z(fQq`u>1+OTvrjNo`>fnR*gNbUInkJO7OiKvG<;y5!22UNPlCW9LWTu>`!Bq1n`M3 zykvE6%q+t8Z_b)BXnipD4pN$T3!rfw<`|L}K3McI{vu$6X?*w8w6xVF54@RKq2+LL zIAqAFaC%R?)+OZdq4a_V$c3T_e6+~FSL9Y2Z}yg*y>qdc+5@eUF7D+bdrCW| z{Iadkq=`u%({z7x^9F*(1gq=#>20TO9pVK!UdP(sic8=hT0rOd!$Y~V25zwm({>~fQ5$o(~Fx?y84t&5+2Pj;&tC-mEhN=kkqWSM3csVB3U+s1OSo8C2vOATm z>P#Z?cANYCbge?Dt(U%FpYG|j{YYV@+9#m<8>kH|SGMatV8*pGm;Xasc_WCq{xV$t zg&OGMrZ?No(w9J=Ax1uv7y7b0w zO@!|ORZq?5MYp+`oM2*pEWES~pwU`Uh&kll`y1!7R2bpolz)&tArrS{)W@h$Ifm^z zni?#eOSW{adq^tPVTcQ-3|X|R_hBsw^xcWJf#^LbE?nj#j`nSt=W#n_i}MUo^1<0* z{M~+#uBEi?z1Z7C1VfMJppbfzJL@~PbGtvY{&U#Y#U z2%idhbn7zc65l?imWb@t>spW{9;t4fO9;TP5jn^=P}}WO0D3=|#N|C9Ds!BxAOh8Y zvzBYoA3~xS{-r738fuFt5AUVWTDl@4-u*`qOY%H)+)%rK0OK&4(w|o(Mq!(Cou`fu zb4;&uxXHVdPMEY@PIXRYhope|th;Bb(Sefay+&muT7kqcu2fy7*{}g6y>vW0JN0dH zvGsReGFwi$w{eDlRt8NK zbx?=_3{M1Ak4&mK*PT?w9ejKJ!Gl?JySzbbFrZVdaxm-6fMC15eY$Ay->GtQ*pahUa#EN>;9)-Ig)N5r7Aq zS1NX;^?Z$6-T=EXKBZl3NTPJArfW}GEj&Yic#B2$o@djW2Zb*q_&x87b^Dzf$Yk_| z^I@OvDsO5A_wa72@I2PH*X|UbmUVH^YWRG!@F)JwmzKM^e}qJxERi1{g|yXU)d!!R zvz^@pd3+2n`!zW+cC1#aaSMX)Q$6I$Q(bSb4z4kwBr#}FnhN!!`2$KE*>L_Wwn`Gj zKD3q-`9L0^@JXX$t7(z}8Aj*TtiXUxn6x?>!S%%w~i~da4JJjz^wCro-4=Fa`Hm%>Iv2* z&m;Q%yO=|=FpcB9Er4RmTZ!Lj!#ut`5MXdSztM{Kr!_hp+}$CfKsxannqRd{vYb*^ z*Yh^}YR6mT3nFVw9l$0p**friuv34^-?5{*>#P|OOkh8WwsHdyQQxU0%mGW#Uq<+2)%Y?#R{wDCWJZ{%VM?mf&KY{P;X?@|7kxXycJ#{i-V zrGl)l1}{@SwzR#C)?yJ;4y%z0m&uZdWYn>Z`7A2bS{wFOjsOLIr~gsDb9L^;ahm-k zLeM?6Xso6w|EF28Dc&OB9xp==q=To~`L7Wdvn_fLU$dv#7p*Yj7C~GLTB!a)mP%~L zgp5!c$r|Ve^5SuiUX5q>2$d1`^VVZa4z#voA>!rZU(bed=vDyevOyukqdQB^Hs9rr zx~CGo5HV5cd^@_FwyigDV#lW3Uca^4f5I^teBbQ1*I}#6|F2ooeZTL{+pT}EBc~L8 z^K!b0f{o3;^d8@b7NQE~A{jzC981*~_>AZ(AfVM#9zo6|GdQPJs4}&n-3U1r2@KK- zJolok@`^jl>!P(Qy#|R+Z#L^}i~_xQzz>qZ0EF#GJ)3+)%fNZ;N=M&WVO-berk8k< z??GW#kVphaKA#7VO6(HxhJgs`%>!24m79`~j+JU;N9EZf2T`BUrfBN+gKJ>dI(-hn zLkaIzTkdJ$%_@k2h6(4T>M7*GED(d3ns6WxB@;UjNUe-_zOTlW{N{UWM8-es2bt@W zu?54DC*>Qe-X!KrK>^yGVQF-Qnjo$xL>p_=sWzp{+B_1AZ zaI!Y`Ky%s^dVpL|$SVAooe7=&6dB<4;q5t=wRP+V!=OZBTe&O5iSMIv?-B`E5mveN z+KZXB4piQ{_dwsfX<2XdE>skQ!5lj`FEv^CS_p=63VGeW3s(3a)AmClRzFgx$4%@rrgMYHp zCsmgc6=o~1TSqjYl^=fd`nMHGL5jwf-CcDPR;kyPcqrLMYrt{f8UtF@6_N*NR2ZCo zjPZe(QI7me>~>x>UIebofh-Glv^@GI#p(N{s=leG!whP}S-+ zMVNcFGPfspBn&H4h8etto$h3)h_y&gz68w*x%R%ODjBv`csSu%BBJqRs{;s5%@5Q z{yc`%Uk2yO13F(M2yHqF>Gz^jmF^$Re-HRtS4OsLu^uSKypyD&7?+s!lrvt!kWvtR zkIb)qX*f{$JqIXA{M>Ak51mJjs6X(r#qKrGHnKV>7^DmWAasfetO2&mh`Cs$a?+e4 z($ruQSuMSHcL{@A*2nf4G8o~q@Sw?mbtdKa-|}|qA5YxiABF|!lxygma+gp)&t+zN zcuX@Wn57pX-D1pz8jOA?J7-I8AHklLPk!fQ8lXZHURjQ!s+8rltf>x- zx%v9Yjcn*}=xIvRgKHSVBHE;ir~zxaAsk4A@E%U+|0DHTj!z(n^N5LlXo!u!o+Vk} z@fS(Jn*_`IqE|+ZY5myw>TM6j$>Dyx@Q<;a(?P2-9@ zPT6PRr4&8h?iF#87ozVOVRld>MH_ls4SFdscphuTTU(p8lUnL~&?wmDXORo5l-#?I z^sx7tkVNSP_$Ao&D*dmGM*axOy%Va@5^GT#;~G@==wx&s;t!mYb?>zLtpEEjal@K7 z(30AG_8AFV<|+FR5Y&g&J}g@6^+z}r^7+4vmN$&Df@7{h+5aARf9s8Tr2P8^!X2i% z_heeD{B6AD>N;ibZMkQ-R^|{VtFv{V{0ISC>rp=Qi?Q}Uf~~6=;$A5feHUJtodwEM zXbs{zNO@wrGxEl`?60^~XJB&h*o#=4NA4b;ukxKS0)7_JXnS=Y@@(I!Z@JP+#U{rp zIQ}3x6xJS#Mo~-=Z88NUi?yk|$F8R2-M;q~;-8{;uZqDY%PMuzdlvN5wXP^RsLbS$ z0XUz8_)#PxV{B-BbWmvx!;PXjE3fptKDpSr3~sD^r}{T>tk!;|8}y|IC4U**5R^|l zi%BTimUtmyu`)RsirNn3&spnUM~LxxZ2O&9kSJsSNbL4}@6%%aP7nB_+&$dFZRoZx z^@6l5KqS>i3-KoMz|*lsAuxtUMY7UsGEkg1iH;Ux zO3qJS`?=0Gi3V1#t%E0zFnSM_pm3>Vr_!{SPe*kSUENffgqeZ>vAczRBIgfhfOL+Uea2c0rykas)*eD3*#! zx{*I9&Oigr8f0jin5ay z*EFi68Z_`ZkvNO2h0rcg&#F>`)QNN+t4tHAMyeD{BcwAbjaPU&uwvE?rK44~28<~O z-})|WuRn1wL{<bL&<8-rg<{N~fokLFL=G?p%?|E2_0Khr?K5Jucx!BH4}Q=$EU zjl+RWrvbSoRECkN)(-{yk6#WORAU_IS5!@RK@w};=&mzzC!~aLd!3LDE1S^*&wzBb z2XY4GHU@kSWloaOoX2<>w9hcGlD3Qce!%P_!}^Rp{v#lHERKVFNR`4QzWfBp#6Prt zj#ckeJE8AK^3LJx)OrEgL`;Nz&IqYi@&(Gsj&|O(=7fKSk44t}``?5Ysgd$gXb^M? z#C{B>KUK0?vo;#JER1aOZj=F*_T*K~2*&t#WE4AGb&DutAh^3UzePxVLezGhqd3K#RQia4a$Lx3Em{&=#WRep{4N%f-{SR`L`XaN}2djaCQ}S9anQ5 zEfRl{R}5MbLbjFejU169OH?UCT=pak39Vpo#M$SnTa3ii_{=P4-6f&mQ zwMvf4ScPIXizF&w0OqI~+iDB_EmZ#>$3pEcv7=Mcu7>`U_(Q zWzhV~3$>xDUfOHD#4Sc~0XyOFcg62-OM3G%Y^wx?`F<+AHLRA?qnp!b$4M|P?f$wy zW+xz5A}-cxxcB1ST}v`{Y`KupuZtTr8uY0dSkbhvQv>zys3D1 z_{mXH4bG4fNmMx~)$^2<1v3z1c2VFHTR)PpLw~ji)1id;9KrBzlmxj1xZo7>?(*96 z5Ca;OEM2cqYJH5{0xIc29ffse{7;RRS~SYtjaXMa6e?(9LYcL#JZYgk%t=ErU0N0; zZjtn4r)k~$peY!7oq=J+adAl+r~>@iRX|ELI(EmWEFT_3V^&~XPztZ4{s4`6)A|F6 z!(g!va#`xK-Zd&geZgfr;vn?G6BB?4O6u|Zp)Q27IM7Gi#O|ahZnH`*&z49>G#DRp zwPeEZsI2lRsG4d{M%c9SplBj%2;jRN-3_Pht(-qff`EcEti*>MbjAGU1n5TN@-)dVaf7M)o4aK1@w;soa}ydL2SVHPN6VV;=WaNh ztp63W@qm71Q_P-OKoI%>MUolFU+9p)vaHP_?-3O%Vymfmqam14fCxK>0Qg*4fQR}l zx|l95A)AP`mK__ya&Mu1Trn4Dv4%}Rd7#ldkwkg-_V*7G(W9cW1#>hED{SjT55IsQ zc`>ENqCIYN4;sf zxFin1$TN|zmFE~`!nDV-_1oUPFyz#+MS;k%Ug9@*#uh-fa5d{51c@R>v`i=7gor%M zdy!NDv0j@|{Bt`GBXkd}AbPPb%qobON11Z6y(N||_){s}UP*jXLS}}vEfxUxkr?4< zL`jAZz7}3MHw2mx5+i^4fyCzdw2^!W!92{it6w%OkNcP0lI_Jax{1$+5Z#oVf2K4i z)4Rq#qb2YF6p8FHb*^~neAu0)73(meMj`SASYt%K{<(hq8Og)!Uqyr&cjIC*EJtwK zQ4#S8-!J^)>8U_1;jd*RKiOn;+eJmW%jcXG$0jPZ8qT2S7?EAthP|W$gQgKnLJKL@ zB8uS@?MINpoCi8HU_z*Yg9dZjLBUaFC3bmfe`X zO*Clbx@*O-H6*p(Pwv|}m$Fdy?Kdy7cE4}VtA=^6@e|VHyMVk%%RhOZBt|EKnMUz( zEXdtK)!?1^sQV5Z%q5Ld3}lKmILekamIJZC+)JCg{|E-T{wgS3#$JkA)8n}^$l(;o z?$8#i_zTzE5oH*=jlrp|Yg)qp0pdU%zv!HURdAe^FI3*Qy1Wr_{3+EstQ8t6mK^^8 zR0w~eP8rjRWB3)1HKwQmT$A#5q8W@O7SgCcMLk`eG+MVb?-{0WT+P-$g}BrL~BL z05ecqn(UpD?_;K^_SOv)mZ=};hGR6=VsHvL7%7sd`EXJ{ip-TM14I*#1!l9Cl^ktj zXf`cymTu@)60o(tsye%(#OGu*ObD8BRLoUoo7AAx(1LY%B5YNBL9xvOI^ z%uh5He9#LD4RO#bGXp_9Q8-6bG%81MLX8OKP(x6xtPG57y@Bl@siSmmqSVo0!rULK zV^e%0skxe`Z)S_REL;rpOnDr3d7i?2})I zE(z+Tt_ktve^nc>{M4Q%is}=!q0wnta8A~!6b(=~N(TEhRXC2D7O|mER90{@s(qRD z@SKw@(qa|L=M?8BK8e+NqCBp%ibOVPu<=SNDiwtVZD)B(Y8PM*6H6UTeV&^;xGm0=S_})*SR)a|wq% zE-2SEU1|cwA>t7z6zu##Vt36wl^B|H;t@3$RUF!cnR=pe1lQ7t>S&zq@qnF1MM&QZ zN^J@pM=glm!suf%I*F|f6dM+;(4TZ%5OD|^qNFI4O;CjQE_LwvZT2tVhJyDxfdNvP zVsrJ$3j`_sp3iaAPqRIyjtPvyF0YEJXI02#DxF>^UuS+O=&>CZB*_*u4c4eJ3`1Li zPARoNBsHp`OeIsAVi!mgs5DL-kfwzYS~JmfMCVjp#3vlr6$5PDx#*<2Jri_6IH?M8P_rA69s)fsZlN=Ddl%@NpuOUy zS**Z#j>Fgu(PW7vI>}qrl?5m*Q4Rff^itpG)GH;Ribgo zU82QQ^HvPBMB;5#Xj7Y&Q%ze=R|FJJqKWiqKsITSMq zsen;bRYjW14Nx@~6zUz&oe<`n(%ixiuJU)GMO8YK1Yf~7jl|@JiZ@~fsi1h8QBBb} zQ0!(3v%3^wN2bN4IdM_wqR|qha(-$iW|_PZQg6Gei_C7%|HJ?(5C8%K0RsdA0s{d7 z0RR910003IAu$j^Q6OP)fsvuH@G!yA@!>%K+5iXv0RRC%AxYfPzKt5%7{-Q)409EuUk7uNGF`=Q7%Ylq~ zW6;nsF$pG#6C|JG+y4N9dZ$Swk-ZxvomB zp=i@FLMOJGhB1>2i;3vO)E&VVjLh`5Ed>L*7dV%3-W}239rm5v9r4|r+25V$`KNYG zxO!nO`XosrWQ?Aq`sb*PhWai`PDDn64Gd!%AV^yf%>olWEo5jx2cpB!$On-RUV5_i zR993B_*Sw#JL-K{(tn9WuSC{}6uJ`#vM!?-^+&jtgyYC0P;D948VD*AeG*Z)6SJaG z8e2Ay(ez_QuH)OMZ{Uq&Ph04J$(k?p+| zz}aX?7z-tfMLi0%YWmkwY6~MqC^^@0^=+@M9*;;LPVFxu(efG@f`}%Ep^VH+P5olf zfqDmUD;2>lGGxLY1{Bts8;MC8EhC`O4@4wjlxRe08c$prtuI*7bwL_E9}Cy-OR3-%DNe&kI}vP-|2oS&|4Ej)$r>dO(a`sXatZXx^6k85-d_Js@jGjTtm9 ztg+$?8gFnTgU3S{#%|HHzguYf5OzdxeZk>q%w9&KZs@ipEe)?*mW;(DfiQ5h~t zkIsW_ahT}EqI#3+T^ne$S}hZ3d=1@=*&3QNq-fVg>l#SMwuPe85j0ChJZ)k`M^TSV zUWZal%n5w;BK;A`9F8-l+h59NB&NiU)}(}*A|9J-MF^oSAldXrih~%nY3rRNdhR~B z7PMkvqSCYAYWAX6M8+7#GZ&#V>z`k$93DDZ_Kmf9L2uBaELqWXY(BgYB|TBCZKBdM zq8^K?3~FxljS$774G@CLyET}d#qMM=jAmgA1G4%ZQ_ztvmHCTAVxEaG{sj8=>!Fnl zR^(=gk)l#XkG8R+jkIP4{{Vw!qS5tQszeB!42Ch7=tBFCtJRK6@1^x-N0uSx^ja{P zdN&I~8aiyD^u*}~$b$5O29YvR48Drd>my_7$kJLjYDKkMsPNWf7|b4pqc>9&h^>gK zAA>lDr{^*eo}?$DAu&mdORe-h6gz>$bTaECNY#`<8m?|AZghzZogjlF9$uU^Buh~^ zp+w1OV;+)DKZN_Td=eyQ76wU^L1aY6NxrB^Oq~!FYZ@$}nc7ycGi@3)f;7Zx<4lZX zbW+Ei7~0GdSX7|PP9zy2p!-^-OqshQ$cS;Nm@x}OFO#Z#z`f5guI5hy!1QQgsU-P| zx>*aOazBv?UY51sila7d1O5b?fi^}A%NiKVM5(=b49LX8R3!N|O0-418-pzBG3X{U zQjIPTT!Oy~k=lZHXWk4d7W zO!Y>rbVHLQLn4G_!4X;|>A+$U_O+e}c~a8+Ly^eFVWY!Lbp-vl)cId#;o%*I?0ykt zu45tgg&=F8LKc=SA6)9hq*dsn*sAa3RnA711+Rk#(Ka7h zpofPOqdF}M_*Rdiv}4jlH3-N_x*n`h_2))QfwGATwmcS3Lrp=BlMsjJYlaEVJ(E0i zNU_eMKOB$A)Z0NG4-vk@{6-I=J}Ge}gRWTJ*+rMQJ>=|$4wOL3$& zJc+D8g{skXY)+dCrqSe$A+f8yEQ8SY(T_(Hk_{K7m2xB%m9~t;!KyyH)l(quNaTtj zI2g*5PNXZPS0paaBgo6cNz>^MbLmA+wUeULafH!akmPL>$rH?sE&*OeAbM-QcZo@m z#RTzjjZ?ICG#f~4$>XfRiI287YW?ETyD&>mT@wK@BT^w95VB+P);tiHf;<`EZ?=qj zC`JdsD;+Sw91hH7lF!GX@1wR>Qyp#B(Z~(E#?FT0lir1T7BmiYlIBWx1JVc)LrDT= zY$dS_qD{$|BvQywA>^?s@+qBg(XlH>u@V->9)jymDRf04ra2yhLK2QcZ1rf4*Q2$$ zE{&NyXm6PM0|vBfSs65m>>~79tq|3UM#Ryr3q+F=E8KFMV{@?)rs5VxaMFuR>^(Lk zR-BUCMWDoDGCw<2oy_uiin$=S(Tu<$A9bfLlz;dw=g_w7mjes*WE;q|i53Iw5*Cj~ zV^x!4%O*z^$$PCbR|IMAMJv(UP&E-_p=sD;Sq8*Bl4aEwYBA z1=bF*M-W4T3`u|PjC~8y+${A5SR>292Si)mi~`QMKN>%|0pOVk(=I^Oq>fQKD>u=* zSJZVW(>(Ss(j+28POrA(~c7zEHqQk(|h)fpM5uzlPB(d|O$uE+0Pq7`$ zOgta>$SdS~D2$dUf?B~XiB3sF6H}unZ7Y(K43RX+E2J?{#I?{ap81J+^l!7s@*k0m z`~uM;*kRmxi>7>&=g^tIL!M4oJw{1ctm5n{muC_+=dkTw{> z0yMN)8YBEiA-!uO@_#p(AzRKTF+A#U9N;+j2a_n zLH_{2ryFBpd<@Bqaz271MT65aX}xV^;gF`=9EA--`LW1gHt&ukm4 z@)zal$YPct)PfjOz_>w`qZ7S1HxXQq8cbMbG)cDzn6^1FSHkxvq5l8`lrFi|X|%(l z=^SuPUqhxuh~pz3nuMjnhg}3sPJI!Mn5sx}@Ilwn7RLGdax#pO3mc{~C>iNvM54LT zB-p_#lC-q5FG(blO^AZg%9lypdp5U|m7vm8l2J!?}Oj!W0j-xzqV zdZz@V9*J@2nf7{eGmli_4j2fUM%cq_Y>|l@_$OI?32L89(TH7B(6mMZBrcREb0>bZ zJd84V40;L?^_peVw0ZhBS>!I~OCu*r+7Q%@C1`ylNk7WgHi?tfI*}-yUqq9p0cb9i zM;RfHq6~{6k{KBFv^T^NIk+JmES1R*@Iw*kgX)ZiPMH%VIsX9RNjl^_x>BB`m()I_ zU>cDkX5NmJVo7jJnIXvJa#LLTL7Jv(s&-M2M7SrxhozGv-d>H@J&z;E@*anw?9=ZeQt(bK^yQd5y%}fG2o91gbBTbR6vvfzYQLvT7=sbp3U!3=#6!5DP1GY_W-mC#)nbzsGIHU9u3f5z?K zrJ1qx&Z&zc(1oQZ(Q3AZBEt^@z6W()$&N=OndpW?Y)u$+qnArRCK263);7UDI<{I* zrw*GIKk!l(U&}wn3-os~(e zN6aysca}2FhHi>_L~tR0-Gc?t$Vu9l@BeBv-KF3|)6Qahp7!ZD>f?{7=D$O!m6ObVMTp;6g@vXbMhm8Ec+kowI~iwe9F38)(|)1LU$j7Oy;p*IBc{4J z{y8T})94HM%=JEm<*gh&i~`tNBQ!V8wQ%T~cY;nx?0$C}Kl(uq2tdS9vehW7rVY!v z7dAyz-ozH{V1!+Ssp#E}^`kz~gx#YdiT?oNU&s31Pp_ru_0L4K!Q?{G8J~S?D5JF` zBp%1T1i@%e+nP)FXa7CI`QcB z$WC=wXt15!PC6RN zfV6JoQPVyv?9D{r*k0r3k`qExI4C+gm@e z98bx^{)(~x07(cv#~Crcleu24wiionlyPJ^{{TpH@I#-1*Kad78Md9y{aio7l$^GrRCFucB&4{5x@Voiq6uewpL`nBzmhW*r?Hw1J{3QCnlBYIu7fw*LS~@I!+J zH<=rZSksTsQx}qd#)quypZ*lP_JOaD{1Rk~CIJPuxfIsQDDD#GqXho|@RuX14%UGdSCqE*reQqkp){}>0jF9SMqHR%)x>aCR$bFpo# zJUt!~akm*6K8_BB=_V3g8R~SOM<2mD@BDv%@Dt+b%SZeGva~`nMlU^NFCtg?C4Yik zjdvWzpW6#nO!Mv1uanDc8RYUUX3W9TIJ(WzH?Ct>{{U5gMh~dbkjJ-M5rE%BWK+u3 zx*?DHZC`>9nj-s-GC0Wr_87E8AB23Jx?_Sd_z-pUL5>{wF&WLZW9wlTRqDfk^?fl^ ztxFz?G+HAEL?biobUc64eR|yR^mvcK;qOiMo}}o^{U=TY_HBY(6O+LFhC^ZL!{_)G zI*fWD{{Zzgcnf?;Z0U49q+&5@Mreb}`D*WBy(8J1@wqFqT#k7q84zLb(E22@&2-W% z%PSZczo9QAcNgYl7Q7yM*_UG-c0CvW04nK17M}o_)cO{zMm-R;zgxblmj3|gkhZ~A zC)VT~t_ZQlNN4PfnUA>|2Rask2iRRH3x7f<1sK@a{{V!a`cr4+GKhK?>^IeafpysP z{{YoGBlr85JR7yXwgV2OrTHJ7Sq)9_#^(P3s>(grw#SJ4dmn=(8TheiS~tXWv*4$_ z_$_lDjNfu){)_W7==AN0;eX42Yw&_08i0=bZ*xF z0D$1sjQSbibr|)y-M$YA@IR5^uzo$At+j=x@i{d}z<$#i9{_`n_<0S3l_veh7cU8K3ZmM+(K#b$)mJ5ZWF@eP%V4=c~Z*_HLnP z5oLcu%!Ir4hTOS!cZv-w1h^_1hZ@NvSrDLijnxUqf>&_(vXL(Xtk zJf+-0q*ET~|SnOOk=nxv3XLLC?w#gqt(yRnJIL>ynDRzs#Nwob^Hnj^HNOx`unj9na&`|f_|=jFs; z{Wd5i$@uidhes&ko6z8H;_9YB^5BMk$X&6L$)97j6J;dA7|#M1wxP0Z3tl#8>=0wu zqtTHfdpDyHtXBMo5eGmrv8Q?ojih}g6T%Z3+aUzvb;e*y z3!{NmK1RWG*K)y9$-wl*LQ*u@j5R}E5c7!U2PwlQBr@tlD|qC$1U6*PVHCTb26l-a zMG|re7%9ncWziGMK`9SFk-HObEXnAh2*uFs9g4a5$cgXpB&L2aGI?#Ch-OG59~0}v zq_sTgdkU^eSL91<^fFvYK0T7-*)S-Q@Z7dmox*mcDn)2Qhrbwun6D&Om#RyRgg9jA z8>R{F=5F*$$zNkLHd!_`KCcdj^EQ^6MHN+vos`+xZ4eu={KzFf1oUf#ToTs<3 z*=W-wl91>rM7d&YD-x}Rv|0&d3ek&!BA39wp}x~C%v45_tS^XsGAT(!Jsu3exTH=@ zb_WQ0tH!o4kSffaG1%_`8E95?MkDuJYl|bt#zy}Df*s$29BrM3*B;LU8f<+@CKgdT zf!Y-l7be9e6LImEy6E!%0KrBX_9@;Sy$~U8!Eo05(6VxbhH~F_ zP7MVNw-YSJmI&a17_&KXg2B+ex)n#rU_uN9>O0 z#+Q5iJD$lHc$mCKNZ3j8ori-_5rV{p{{WD#Zkl zyCRCr-OR~^+k^F{ER;h@qDs-_B2bmMt*n*yCo?IryV(!HL~5mvfbI(5*&U`tU3`+$ zGD3qtWe7ryz$eoa>=7X=n`hcU8@r5-{{R5DM1#DDV%LH;@(GJ_J4{I^)27hqyKpb) zMz*eKPh)qJ1c}&&f~hpT2SVI%fQulB-sH3;y8~k-u^Y5E5R3=x+iM&Va=74=d5#D> zk{O@yahV`7IDB;6?M5ZrIF6TytVK=4gvj|wOC>#^K||S&*8cz_&Oh}09>tJj>|0e_ z6TU=xqHOr4Lf~#GAu9rv!d;XSB4-vBK#^oQ?TD#CCScA8Q(BJfiqF7pEEyS5P2hwM z!om^$7H))YMQ>nB35geNu!+R6N}&-A$6^Xq4O2p6%;ZfYzjSXnJm_>g2%I5K1lKyi zmQe=K-ccG{=$%0^Xn_60gilLJUs|D|i3C7+CSm%9B_-Tj3EoI4Vnk6WU#6bo7IdGc z<5lc_5BMX(O!4gS_IP_AgBs`!h*%Y{R7*A$l@v#omJ9DAbZ{%;JzfT_$wL~PY+T1! zWthb(Li!PW9I+uZvN_3OQ7zIF+Xut_kScCO_#=f3Xw&G5l;JPV=QL}X{0)++8v`s{ zoq1_KhBQt;zUSu?A?Jm~rV(+&VlC1M=M~y%X5e7?!z7k@D0*>53F((G7MxSL%EU66 z`Z6L#gm$)YCwP%5X$gqcQg|SOq)XlsI_NCnB82pBp^QL>C2EL{SvP@4kYhh}#mW&)L29L0JSP53Cr4hM4=|IUqW~%MqzKiEhk#XYf6;9PKj>-PSiQb{F@E zDlD-!+B?<~g;fk(P$8yG+Kr+{9&_Mvu8p5`N>>rMlYvcwgRXy|mR+)g)hs3)%{y#` zhWw0bkhGk{4n|c7+49U=-93|)p=3>;zDwJYtf5eFlvEKSEjVIQ{{YqTBGpV@enpB) zS~kb7Im~>5RZ`x=5oJ%{k8O35ZTD{`{{RGNtYd3rOMM3EG!%V>x*)T^`LJ?b@89NB(rNVC`fZR46ikE_Np|trgLRR~BD1;8%UUd*O zt*zvV5}64TxUL9KeQqR`yqJ`!Y()0pS>oJRi8s*MN)_JZkIXS~wo>)c-I46>WBDF_ z&m+jpe#c?xu^>;<%eT7{9jdTQ$T5Y4*xua*vkoR;Zcay8(`|17Cr|tk%_fw+4t|5^ z@(uu+wIWNUn1^;@4mEy{4kQdo~QTV@7nRk~6gIk`-AA^5^tO)lXI zsj-A=DATJjxX*vWFv=tC3op*qP9 z(ai&Ss`sp26LR2_mP0>ebM`?HKM?({!#6gM9swuYcop>(*p@Pk9kNex=!*geonr`f zXu~3y(or=cp^w<;rze3ZNhZ>lw2w$xPEq7t8H$gT-E1U{xAMnKIa{Gq!E?E}&Cso2rLLw^0r925Mv@nFC?Nl+PpKk-> zbCZX-`EJg{q?}$6%*E^y(e5!Z!%#0Iz>z~%gtTOy1lrM@Rz&4)M4CIaCR61V4aUy{ zd?Qs;Q#q0_b3|X2q~j8HB$Sh%SwHMMa5=Mg%0BA+Yp`mDXK&zV;E9mpNS9-)N)v{s zI|xZT+FM&imYQ!PWa)>tQjCQ`RzmPKPbkCuj>a(t!oy5ts3AC2{>81ov75G-tDz^_ zt=paldz=lVYbFF-@xYAD#kTdCgpiR9(Ot=&s$}6QkHkTMPWH)KSeLd2=u(La*ks@n zrV=!NHqTfmOS#FJ{s2ru8z`Abq`k%4B|JW7>I9vwA}pkJv4RBQI-1(1LJTq z4AJFTiV9C5jk~#Aj#!?=IIS5rLsZ;}6gMdLLRpf_BweQCTTih-Lpz9KNthyMnzW%3M&-Hpu*pU; z5}cA7p?!r=r!Fk-rqbQ_7HT3X%{%aToC)(;K#3GP(2a)p5}Z$f z?u!va9!cQ&2A7Cv1FRO9$+MA|=O*2I8HED#Qk4GysL<;*D9uL-=ewTkf{Fr?U;$xkIugEH7}csQDS z9zrY0TKFE5xaWQZ(^8Ki@I0Hq&3q2C_BvPgK}}?W+dK)k7LT;Q2boO-HR4R5N&;ZC zyp@&MvSJw)<#Hm{z5@qsckVq+JK$_{Tc+ZzjZM;{W&~nK1E$LaJ%y)ecC>n=SrC+4 z-X8=v$5 z(7s36<%_wR&v4gQz@+c*13=t7D;LfzMn^Wyq+?ry8RCXbG)iIIi6tP|?2d%lMwKW~ zNz)HedyAAP6K`;z6=?~!lSEoz zDY*X5)NaPHsS%ISgRwo1)ZY;ViSg{a1G60POVrb%%%p@?G;~a0ZAgbQ6tVIoiDdi~ zvSBtY%DjuYsiu~ykOXx8fPKCv_osFu(PTLECoVT&H z>^xU6DiV2;o!K&AyZ(s6OC*Q#Jv>O^Ns?i=bS`mHBg3HqE-l=4u_8z0rm)&<6CEON z1mxAsU)ZRlVsU7e8LKC1Jb^l1`csnc203E)gzXkIFlBZY75O>xG%dJD_Jxu2OzuBt zlN|p5ro_m->ve=sLG4M7jj|NT)C)n+JV%n0hmdb8f=jw2RNd6ct{)l)Wv8YR8 zKf`|dDH5gj4eFTI@%bx@TJq#$nN&Vpl#9Ta%#cUc7bH@`q@&s(bhn2Hdt}SxVxZG8 z3TTVed#olUg}H5u`J{Y~OlXSsC~<_PC9vv#(mTlfMX2_9F&5%k77{HnYBK}HC`ego zZYcS3T%xR&-{d-Fk-FUpcY+Kv zhMv${blYJKkwO_H%4GhbtfK>RE#Ooy0@Ja6Mx=sDL6jUB_DK>LjIPz$lcV_rhG54z zv6^ndWxQ8D1UJnie!@F$!4^Fb`wdKxO*gR*8kb`@W@v^ijpUhM$;b9yqrP%{5uM3M z!_n+%?&8%4e(nak8KRA$7_BfS1fdToz6P8P-LxTDJ}7~!H?5B;AK67?PAi{Cun0%7 z2!}bxEc_N_3I0(A$+jdwx!Aq*$1j@vVtxUi5*kb^?4Ng)9uY5H_&7oUC{Wu;l`QZg z1+>_klmkVil18YZFOq)#3TXR74v$V9(K>^`)f>no6hwIPa+yX}r%nsxi7G>OrM(U# ziKYDrn|zaMoD%~v0+(QgLl`1xwh?jNBG8gIPKY`21QhYyaFt2i1h$-;o0YW7*(d)1 zLH5k-@k5cauF^O%;T{P$l+h#61G#_jkN$<_{*mWzWMe<*^Zf@8eLvd|pws(U=`%*c zT5QG;M_`J2YV>ty{Y(azWKMe)``hF$YJyEAC|=P+WRRjK#FrA}cjWvak_Il|$<)G# zZZF_Zv2AiMzuw7$6sBj+!jwc>gEMY0&BJ~ZAtSE~9MKs(5qKNyYYRdm1ixnQK!_W# znfn%%nwSTH9t|Wt$sd@8PMk>GWnGWaM>-_yjpRgW(?=UmV<{~bP}&|LV<|)Sbc-J` zZ8B*0$j%332$RbYLN1ts2E?e_3o#2Z+Z}ChVVYIb!|*$H*N}>Za-O~DUb`{V+vH`( z`Z~;iq;nq`94CnJ{f-t9i2avCjSJP6yOF7IE`%HhV>%NOjG6_xd|pJog&Si{ z7$k>5mOBOHK{i`oC2VXS2z1U$)Scvo)v9oZmP-%vP4=1m8vvTNK%jbm+(H|B5~pLg zEQxV}mXZO37baf=WQh~vo)fb$8{|c{PEtc#+*Y*^Xpe$0u6lNFF@Qv#+U)xVSuD-A zoWQ_Iej*$zb{kVY5@ruXoZ%ZaK6Pp`WXXzjGP`U|1=xWm2aNFUH1^&`?D;}_qE_I9 zRAhXJE$|{Stev_??tCPZ{7WG#sn z4h%XT`pnPP2c{&`??ebYJ3{5_LI@K!{37XYdz0NG_C0|z@^E;%8Dp(1N7}|!4B>fV zq}n-wE!`sU4()>WT}ud-+2&+Q-BA>Jb}^15M$^2L4&fq>S#N<0gn3t%_7G(_nx4gS zR}daqY05D8<~K81NyzK`65_>uxPSU1B||0gW7G3~NU9WKgWXXkX}!kIa%4`{HoQY? zM4*!3M2pz11<3_9JBaR(_PIjxCx2l?cVT!FlUKMrx=DOXsD$vmkVy8V8%eUksorJq zMsxBi=lvIHzp)o1@*?DnN9?)Qh91(mol@3ktu!ZyB8jLj1@G9stsR*XO`CLDG3lbE ze2p4+v)OkoyHDg`(A-nWnNV$n`<15@FuR2#Y)Ivl#>i1pHeJ-v@YlcnE!Q--Ff(N) zweS#4NyKa^A;VaNlnk`ogTS_Jj>}Ue-SAaop^G)%kjk?L-KNOXdx;gcCD!5c8De2i z)USnvJXjra!sX#2Xh!k|gzUVDP=n3+8ulqJ5`XTiAd^cPU5w#{4SQlGr#2>)-JSUv z zuyThc)jdXvJbtP9&b{nl{uo? zXmD5Ph_=14t|6gvQwXgca%C*3X>f80tu`ls-ToFcX5*0qX>$C7XlGL3ifk!6jkLJ5 zR=Idxk{P-1j{r%!kNhzm&Ap!o$jCVy!7pL@j&*^m&{feY7_nr#kJ6Cfqee~5jSSZ> zBbfxzmb5n~Nj7;EwUIRtxh89J?)ea(b5$15$YM~Ek-n|qa-^Onr;&f6Roio=*jqGQ zv4V6_KHW3W52R7MGsAX@fca=51(<41U+s)-v9b^#mB@1i$rk6?5T@>YB;=6CMcox8 zL`X|Wa@OdS4mD(e<;abOg!D0UGa_ihY?+aA_n(o*UK$fuBU(S)Wf*IQc@zcZG2kI3 z&9}k|iWpv4*I@aHz_$H?sSgQVhjCzO+B7kHW*mcqaYp88#1LT8GJqLarPl;SmYMcO_nj6^4lgSqAJ=*khik=S7hZ11f;#NfIOM zuOVd^LQpi+c@8(fF2=wsN1sfPqFLl>eCYTI51*gVu7=>RBDQK(RYdx_g+<>fFd1Sc zP6W{=AmyoJ8Graf+g|G3GV(?L0D-X(#;&f0GFz1BRrB{3fi*8b0tMwp@v&y|GZ7(% z(UN!!KiII|Otfk?9jNk!owX&%_e4dP4e%_NFSD=}{{Url$fs&m_lkK9JfFyr?&wWP zu-yk?*UJ?NAqo)R_}@dseh&=?-I1dkp`H)O#MlutB4V02B(nmyL$Ieb_ARqDz47kM zxv@qdbwLXb43;5ijmEtk$r2&VM#r%eL~iJ*3yg>|q*e>|?k9FQ_8+w@Njv490ITRZ z$qI<)Z-g#WEFZEEwZJ+{xgkkL#{?J@fv~#^q~4#( z5ki65frwj~Swdvzjh5lC)y098g(=`zJiBF<44Yvz+k_-@!1TB!{{V!iK8bQz{OCU5 z&Wt=6v5)O4P68MAQL(Peh%%r)K}!Xcn{M_joDx|t&J*pY4$0J67bK)IE`_01;X5p9 zdGa*DV3Bq(!j+X>%M@CY8161QCJ`?jB{Wyr!6lh!u|P`qm--sm+m@C*B3l$`YjOl> zfJPCudKCu_$pzGlXWUa;bTV4tK#IgMxesC}PR#NZe?%`6x4e;KLfI4`bS!L6hDj~- zW3(_HJmo1;*o!F;yipyA-!Z&`mWHq3DJ?DIW=6kI$j)=hZ-8~ab~1|{-26yiDEg9p zow9x`6aN4Qi7pQhdK;bImmL+zhcNa!wX}}RWitW%r|fP1DjS9~$d*7&Zo=E6Fh66R zQlSf_OCi1yGb<6=VlsyrNqb{qmV6Au6hVwO)X$@6@0J10?REH~Vpe0?68E*vs6IV zJe`Bnf==4eDHCG27-@T%N66SM#78E6LkMf3i1G@MjE~3?6!v0pVt|zVp%iUgcNm=} z@aJy^LZC4(WcMKFxpB$jflaGIwk;Q5aVPK0%P>oyN0+0@N96J_8^0t-^kw_X`j_(P z$vK;O6_L=o7fU7CKFMW~DU-;MyyVO=?q!p*Ac8!Ju)00M2RRw#&A_t-t6`%t9G%Ae zqpyohH^7Nc*uhVbPZ@<~#+&E;3k#*Ufn4;JM`#H77j@`t(Gqq%pW&B&2gD5_jYf$f z^m5aek{2Scv)hN2; zH}M_KgMimg!je2n7Q~M6JAu;!M57JS8TtH)jl{kum=n))Jksqa`KW^b0D#tom1M?# z2^<_~P(!)P71U>$As~&B@HNK8z~cF|a)p>A0TP^{t&T!|Q743-HZ_7{%>GAUCfkc@ z*xQWa^D~T-NKXrxCNg%m8qK&S>ee(Mp3e6c=aHhImOF}cnX%*v<-8J@FZ><5c6rHZ zF_U`SGLA}xx9r3~pl1Sl5zCS_Ooq}ML_E$qlA;DymREu85`pDRp)%36Uz#W023HO; z%pP8d?(}&N$>d`3rHCcAB_bcQWHvKtz1@nP9>p1jHinicLV}<>ST+(ux z8sjp3kc1ahB~UMv5kyqK0@DVdQIXq5SkNRYt?!@6vfb0=8z;E}Khof7K(Q`8jZZ|R z_!J(eeIjsNjiE&9nHY+2KnZMywEGOPW#d+&3MyvzTo1~FLURTMMKICR9p%b{)wJMq8*P;q=jjruu<#L zGDDJR{^A7eNQpw5Mx36<$j)Ht2;#>$TC9%(6zE#H;TSpCn#r0YxM`&G+=7B8GAoOG znTcmGD*mI|_-IpYX3J`LF)oYl2yG2Y9h4>!#Z>wn2Cl)szi@4arI9BJL~>G8!Gbay z8)D8yCWde`CbX@f$Tr|Zea!mQmxrLfL}C(K8mV0&V_UA%zBU^>#KWiySP9e0Q}A=2 z@Q**?<~ZbjL|C8n$Glk5OsaHLuii?zq{CK2P~WP^!_*=Y!4;y>mnjK2MVElHDC!PfJ8!$C? z#mt14BATSIw2Aaf81_#hm7;BvA+5yZnD2opuLmQHUF-XdE82J-} z$E@rbpWtFKjyhJTLdidef6zKr9~dFW_(Oxheg^C}%@Z9fUgT2uF}x6v>A>bTPy3cP zbNr1qv=r41{DQk2Op}(4jLIIYQbT03LnKTPh7h-xwzwh~n(e@v8BYvK>9b}nhS-XmDNKgT#wXnqO)yH~*n5WbT0I*Xp7+n#!~`~7 ziyA$Rw{KO_kc+A3FYYSad)Rw7w_~_SbIBv@MS^z3Kb|Hj;V|MBF1@hqE_cSvF|A8^%q1Ea8JW4qP{p)M^p2 zYRNrS+#%GfFE6qZFx5|zNSoU1JHko)%>Hc*FlP4}S8)_PC4WL(5|lniiXPg^0hNr| zDJYsnM`0;#?h<8dOm`55vK$4L_sH8>4JCtP2xrE^xsfHu0)9kqqaKKoV~&;7ktImc zcsCvFR{sDBh%EmApol=M5W)6;gJOIQ*Y4Ii>_ayDyk zp&EW)3tR;7A+niwNhS_lWe@P>`OoN)9FoCfTACBgQefnf=g(K3YgV?gcvMD>1gkRz$V z2)Zlm7D^O+lAY+uCcBDicLcamJFdm4NVLf$GcRLpReUtyRB3%mW%W4u7!(;6vDe># zVid~BD9^4UDO1{qG|Oja$r|w}=&L}1xrX-4sHpPEWJ#!c{l8AM>v5`ZK+CBjhWB$%^99yB>?=n*i4P5Y4}gqmdUCS+JJH<=)!Ffl){hc+QN zfqxR!3tRf<@nm13F7L?e{SXoPBm4$fKJ)NkC2r>45aZy7l3Rh)+sLsWJtA1Mk-Jj- z5cfSzppce^j2*$;k0I!T8)%wGsuk$%rGC1lCvcrG_YH#uL?NArizDw1tL6qM0Epd3@N} zB<%>e6QqyMf%RlgRM}#Ea?vY0%oQ-A~++t!=GN}5!7~;dyU&30VG`Lr9`5tB; zk&aIz%R@f@077M=4XvP6O7HBQdvUaKN6GmR@Se}X8E{d*WMndMGPA-hrS2gbG3fKE zLhGRjMH5RT^2ogtGIGfZ!;%FxzJ?gLzbJvf&clfhD_M|HL(&{ROffn@(?$kBwH*&S z{xG#&4$Yqn{>XeYdInej07FUnA;8;c{eH*vD)3iWcpxZq9tAk z%BSFLg=f-yJNFWN?q+H<=l$OK1(C5yG9*jy!xDlo?InfdtuC=OKL16P`{Sw&yw=DetWI&t0 zF_FAmC5}l(u98_EazUlZ((@yD3_yh}e*kN5>jGrp@yQCxMoWWj+GDd6X(gmIW9Tgy z+AUCoWu^mnFe6)Lf!Qg{(=3on9=(Mm9OQe_DjH|EBV}YI0oYxXDN8=ZP{|BarJBIo zB6Lc0M9`EXOJrVPdmfo0qQ8Q)jZ~BO2yWN;5jLm&BWwPUZ#ZLzayTK*rgL^t-RwLr z;1X3TxprumjC$FoMp1!6$gT$l?qn2^=*B?xT^2A(A$;hDA%r2(irJ#)b`mHO2`n#U zdy*89stAmQ9PB?-CCNoI+qa>yE=|n3*M>uSN470_h};iO%VM6C*fr zQkP}GI%X?^*qC3mLe;p@So9$cn?f+x0me32 zWIE&Z+-R9R*x?ey^-rM+G-4%kZ7AtpUUfr4bUA_NL=$%cNhO6yjmAl*zjyl=BS@R< z$tMa=lvZJ3AT3)-)e;*pH)0+&SVBr>8$uC*MlQ%?X*yPusy@gQS&v%N=}bCX_V+%c z^7M8r+Y?Hy7fUyN8)%eIp(Lpc#|8le5t~)Wx>DGMzZ#3aSeWbPB?viF$v9OBweTF< z0!krtKsTznU@<-ibL_n13V;a#K{>aGHiSktrDx@@-1Idn@>9bM^HxNo+&_u0Xh-lczBUh>R z=q1S}!(D|TEC`Bw)}bM%+_8HRpE|7@(JdU8DMNJ$JXVyo+ZsboM&y~8z|`N1N3C7K zmVs#83re;(w$KpqqT5Jg>2r-&tqF*!Y<5mZa^MF}WL}c#TgM|{Y54{ODvN|D^Z9Zw ze&q`!l=uW?r46kXQsk43_gXira3`Re85n4mHg3d)jSQQ)Nb}H*B({kO5O7j6Iww+O zvPliH6Uxz(VkrLr)=2*D#cB9v4(2o;#*n8kdX{x`nDkm<3(Z&d6C9Ze(R+9wP_2#s z06_1)2m(R3L<-nj7$s-D3Z(|GSvW#3*TBYUaP0~%H=f#eRh22sK9`&kqzM8Liz7r& zu#64FL}uWh*(QY24T(b2$0X<;1d!xukRUmNN)g|e!D`EfBlg^h`g{q%tdbr-^)Wk3 z_zYCAh*}n_su0B6YvhQN1WXuw535p0tYHVD4Tol8`=eskR7Fhe_wYKGm$r=$N<`y` z##I&u#IP11pgL{^lev$fp?B#^5V})JUQ9G%N%#~d5YX8cNV04!z<|R~kZ9cya6Kfk zwn;3JE;L*cf=kGSmX<5Xt?Yr}h59bU5BAhZZiy+6ER((q`rK&WMjbIyexPW9p#&4y zk+asrI>@mm%Dsr>fP2n#RwsabPBdq0!jcLUB#Yxn$}V%#2q1ZMPeKW05{eQ+$ALjV zlO@oml7ls}*TCf7ff1fqV-Q4<22TgYirYkl8(2jU;AzrVqP}e*HF3WT?n1nlcYKLr zCl&tyu*(qT*$P32`8o?sUaLlwQ;fm_X2P^7WEdPT>(LS{NVjr9T))!RM5;;4vom5H zP4m0q2>S3}VbQCU-@s2R{XZj!>fQ(V9JIG!FJo=`7Ugz_ z!Eg*T(Egl@R z5<&JJTVo#NBaw8MXLL(KbV?E!lo2cX32>+MqBK3B4#WfsDH0Zmkkc~_@d{kR85Z=Q z%2Q8eSrQqzNMdEV8_b(cAYSK&==-R&FU%G2Lrym&rB{aoNpF*#7LpB=coLA%_YtTK zXoi-Ek`k1xlwjGRQ}WA#XTH6NW@J!vIru_rlG~5uOIG2KMy+Iy!WG@m?2dJq;C9vs zL(@HEkGZ4jg+^{A-^$K~#de(-81!1D=(JOuBx5MRY0jENGZe9`((=kXI|yZOmc=Zn zAtsJwN;nV_GVckGEZR&-7U(bd4=$$Lvv#ui&flOJqJ27QWIcN0$$k`Xv0)*e7{6*yf+Cy!OGgaAkSp> zz>^mG6SXIp91>R)aj`QZ-?WW)Ct;leP`(LZl2pf%GS6hNWW)>JPR1qq{tT-gU)c%x zM+Q{A@j-2y#k7=F0kQmtxhHM1hZ;X2wh=VpRAfgmA!~98MJ%E7NPMB}A~P7c43K*s z1T@hAZS8h8W6_kM$Udi)HRME_Qah9-oyfU40(lv7KxB6#xeG_5>>G)fBzaam&w|H+ z?mKIzkc(8su5$hsjC~vQi;#f45)eq$Y`HOD`Tqc+{PPE7l-XWGZ zd@*<0xHEwEB6t!C`LX2R#!kfuXl#V|db%b}^XM+gWB&kBN%v;XcU%Y-2SF`qDTp;h zB1mL?gG+)O4m9mC*01%r|(Bl>;xc42c20opF#tz$&%^YQw z4Q7~H*)b`u$af+g##_6?8k{c?jakbM+BM1=2~5Ws5;yM2{{VQj-S{qN- z3MT!+^m;CbtVwe6RL_CGEPO%mDSemm3~UskG4z1r2#W@H%oFHh$p!Y##Rqr}6No9F zh>ARrbp&MjWRnYdVlu;JYb}JX9>AWJ<;L?7*o_x}fjOZ;Jc}yMR}8UV24>8Eq4d<2 zNFI~ZWWGev4N*px>@Bx~akkrHFwmDWG(bp4rbO@{_B?2M86@c%PK;LF#Hd14&N)9( z!9rj_MM2=ch#x^4jSpVpp!=<&p#K1di8jxPtOSNB4qO%wFqssFs!BYKPF;q%OjB~< z1kJx_a!JHVA{&^LXDn?jjtF+%!+fmwCoj07QC`TilMFVw9ETNn6WSRK$y&1vp?_*b zNOZe_HN%uLj<^Iv0#MU3aQ?<7)sJ={-10Gv1n|WqYmG)dWS)hB&G9RNxMQvs!irMc zLb}MlKjL?L_*Po6esi3-w$@H0|Vw6R3fmSPYmSIOKVNEKlr-i7T5ntp^B^>&dcX}<2mKpSt9Xd;qK z^N{W~%KUaC8f|H-P<>2f%n3x2iZjsB*wBd81W@QQLmyV+rNN$|2ZKWbzo%rmqL;#i zSulu5V?~jh4@J`Q#33w<{6r^;@CiAQ0<_avEbSP>2vq(Cev~P@LOTy}8*&jQN0Mr3 zKWENDyOIa~5xhU3Lf}uaJ+#g^7{@d z5ZCRy8Nie>3ZvS}*tz^8Pl8r7t-T_b$j`w7D;A8rl2b{$5n0C#6AU))EW6r7Q0iM~ zirR-kBrjoj>?dfNdqs%Lf^uCkrojNS|W^_>Gz}ONEE`|kZAWYO-jt6fT=}P_>^P{3bLFNz=NRjJA0lGr6YP=bOgdrv<GW275p0+SJ& z{6;LWGln-5aXrEw2{#koOq5`|aBhy`;P(=m8*FNg8iq?b4JmIKOh;-G@@_5L&m)Oh zw<2sBs~yoYlvFksHJ9M|lqDq_UjY-cpQ9LKw$L+1eV*pZ zBuK4E5eS1bornqa??D}|;~P{zi1}v*VZ51+o`}-w=~^Su!{kr71Zt6QV2R1Mo5>d? zaVatiMl;!7N9kn^FeGLyJF`Ch7cwifi8fKR5U57y_6(}Pk1oPl!j!=RN+}J*M}V@Z z4c(+oRjrm3=af2vPcX!j2Ih7u8rhARyX1X>wc`RBHjqo5G}grD zR@kh25&RFxqjxDL^=6-RVA^F6$)R|U1W=fI3ef^WRiqFy{6bKQD@N@YyrZrwbF$DT z2SN)*tb}a6i9H#cdm{5JNRcvd#L|dd1lF6S!6{KckRwYtSVds=CL8q<+;a=;%=iaZ zGQH%{F`uo zO%~-q+w+8^^Fh9_Sj3^(o|0f`@+7EAVlgryiXOkHOJA%sG2O~did1Bh=*_4yk7<%A znwdyRnPX_n>!Y-6@*&BxPhu&gkMj~jZ%j=E7?)tqR-{PFu#LG=fsNSqIVABCO_%c= zr21A(G0$j|S0S>c0Wgxn`x-`G2+m_J(nd&Bk7`MFB8<7!<=+D^%&*`q$e`r1Faaec zSseb?VI;n`EFt3}?P#0D$|ee$b~)KHpemjWn+a`@Pb9J>k;w~zXGsC!GBKrnOnK=H z=({Q~WV1`|C6GnAg`+z*gDbOkKFlt-rrd%DXUdX=2VhJjV?hz*M5z#3d`7sCh~W^G zkwL(bEXEIgHX)o&MFjIASdo*YFJ=VTlI^E(oRG-P52j_@ixw33jK=`3(1cAx6*k0t z30g)L$ZOO*EsG?=_$tEpM&z)D5+YnNHIYPRQ?z636N1Rg#W56i;Mx!s9Ei@%Sk=g_ zEKX4ym#sKKWr!%H(6gaMQ9!puVe4L)a|Tw6C|L1yQX6knW8^QuJ_LEDI3ry`%H@!p zjC}40i3o~8ycPniAenkicOW+*BEn=plI)pixGHD4Fg{VRjLm|~8Q@Ho@K~}cC6WqT z!3?b@hh828WU_q7o)9io?Vx80+DNZ{#Wt#Cfm2QgF9E5^Na7zQUI=0&lG&k2G#;Um z4jbgkD9hlTnY5!9VF_y^lgackXR};A3nn7!RT&GkUbV2E0Cd_D<`O&|DG*MJUm_D) zGND3U?a>Vlnrz5G$dXk*LSoJWY;t*k%*HlT?jZnfhiT&*N(#5paC1R`BgyU}?nLNO z6E0*d)QM6NW#Ebo>H49#j2)PWE<3{+Htqz4(B^Al)3$XiCV!zc=#~`?m_RGIR$ww{ z3vO@~(85DwS_h}J2x@vDPE4TRLg{Fr#smXL-sVGw$J54ILj++834!~iD{0RRF50s;a80|5a60RR910RRypF+ovb zaS(x#p&+rr@X_J%|Jncu0RaF3KM-Rq5te*av9g?#nnSi9kfm3zgYYA+NX$#jtv+HE z4L%FgF9j@@E)jV6xJC>X47qm(Z}?mn&D#iDb1xF-GUdgVmqb}{)MDZ;BWR-b$0(11 zMYgUeA#K3Un?MVVvoebOrbH&88Dj_$A)^sti?%K$+LwyU#0zne6jZLh;mCoG|hwt>ID@C6SzT~J_ZuVIr%;@T;?Cbz6pX{STSSFRG09$#f(?r zq^4p%V)>b4=N~w&#YmLF&f);ZWeT}QSq6}mVAQ~FHV0n?G&u;;!{92vml2dRgsI@f za4zK_thsU_R>_d055ow!j)&qgy?iUVC6%#_V-5pTwUYUY0^{=pUCKhnGXa*K6E~Ea z<{O-4nd;^!tji8aEOJE~66aVaN@a{zQC5F3ES~}m{{Xkf7uW2G66~@j7)5Ic)qlPu z7xNJk>l&bKMY&bEOE-#87%fD)Yq^TdY`8kE9w7@HsZ;1j8-|5IWo--RDNIvgTWlAZ zxJEq7BNn3uSY=~e%gj6?OJbs9Vd7VJYn#-FR`cA&68nn*Ls??5W>UtHDV*4qH<(M@ zTm{{u3A^NC0Db2v{?gA7fm+1dc6<(g7!Ae(G*9j^s*a*pvf0wes+5~z8t)ciz?!wr z3T6(-2K2Re6|V`mY#S5*fL({Q+>%r7$dnYmd@#-aux0EuN0Gx1WW znkB-4PN0W1D@t3Ldpnndvk>xlT>M}b&QMpvkVb65CFOHFWZ5o05QeT3PUT-r8ro6| zoz%ZGY6!4^{3-~UkT8no8<#4fek(6BsfyxeU@_FAG1AzGl`>dimzuJ9IH^X20##kW zE)NorHHbK(qlYjirLnrWWT{^2IAwoRnMK67?TH#`g;t~2!kLUr;-w3@h}5N&F)F1@ zjM{47j%j0pr4zi$yOgn8fQA|b!c-0!!&56nPPH2K3b7cUDa^yWB2L=4XnTXx)Dc=T zok69n!7?1cIEAX43WqKrUl5!kvWVg}whx#CrV_Mf7Q9D%VkU`LSSg4JmvJm2HQb`i zD(`V29v_Qt3$|d%D&^YL3Q8iE4AjCWB0s#VyPW=3?BuRdI$jfpLpL`<@rVfeN>sEXoSVR17PF_l$NsY`}V zqOx0X*)YTzaT^lwIe_CT08%#qN^u61!Yu>?8Ez&z%n(BtBnf9^$M*_$1Neq6a|P^b z33P$^OuZS8zGM(wtGQ2|U{VY$DX!qVFm0ri8-k~%F#LyE#IG>IRHq2aXAgoIjp*fg znGp3DK(!D?A*rE_#X_-yQuk8T!~vNjS8=(3*)yAhCeqvZq}^&~txHnADz0rBnnZ+C zqFr3Eu4Cll45sbqB|wejg3RJ`3)uCWAj%ub#sCY$PCEkKd`(aydkW5?!dadRM)a}P{q2$MFh0I%**a3)Payv%hoC}GZK zR0aiN;9nAmadD$i(>9l!#M=R7>BInLF$y3=?it*wV1isV65hyMaK#kI5khmQEBTj+ zMQadhT;YjhI3p-Q%560~1RG0X!|G_42$+{H3v`VSL*Wd(R-#jGA#HAX!-ywXkmokI zHWtIMxj`0zU7ChT#$ZgfQcAud4&V!Ff4*fS%>Zedc;toLJ%QT*$*)X z5sf_NK>?wjVz-Zgc`hK--k3(m?ryOFSWJwfz+&KwL>Bp&S2Jr9d+rEcV!TASrSO+|H>e*$Id{{Sqd+UvwRxHzks2p^tv30T}opS_6D!xT#+cbb&l%3oJ7VS+ya z+9hn8ABO8N&EjY+Fx`9{->aq}-iA3crFWkk6GL~E!pqVA} z1}BVS7r9q)IGI4PGbpQ3H63m+>N}WPH5CCZbC{*8FkxUYshm_0)#&)3rw_SNm5({T zr&+(k-w$a@_Kw$sC@!pjEv@BqGb|gNnfDONb1S9zYWQNXh5W}Dh0O9m#G?|;lAP2D zO+mq^q6Y+`!pNDKycZa$x|lPQ!x182i4x6vfQDt`Y|*%22&58sls<`(YtqFXa$4b$ z%rf&i6DM#kM=`)^X7jnjGZ5zDOKF+ZX>KYhnwc4s<6>E;lcOqL(+hPF#V`fMX5hpV zl3p@B{{Vb7@q(>0TW6q{t*!AbR_+uCSYevT8MzT&LeC)6BFIlI@6mLsJn23{NC(_4tL&Ls*sKVgcq{w8p1TF%C&n zH7^wpQkh2c6reVhZGRi@h z=P7dxwNnMQE~2cBZtE~KqHhoeXpW+d=6{5!_)JSmSU~xKRS{)H22j;*RKQAbMs+uo-9IDo+S0Bi7IcBAcXmhs`xc&LRSj^0YnS~;pb18&2s50J|DIgyLqSYFZ znLVHuiEuTz0y_|RiA_O3<^ftFFA%Jfvg6<-1OxFBQ3zlvZHcO=0yB8iE|{>pIMheE zYs;t!buQ`*VRea2%0$FMqZQK4wLKwqH#Xci3e+zpP7?){9DK;WK4R!ixU9yg+J*R9 zKhG~jS(^DqCZEcMJ>>?D*(UX0`4(!X6E1OMKIJM;Gm(_xsLgIfR3OI%DyB0AUL^1{ zGha}o>6HuW9~6&q^A7pHm50hRKnGtdSL9MwneutAVMtB9@l7h%93& zFv#~%Dz_2DXk0V7TugfSFdz^?h?SHcIrum}EChVS4K*68492nu_*5nD;tGPH{GSyW zzO0V_0F>L|;x)IuYBq0=s5|C!`;}+hbsL1G!e1TXm}2FMTvn@@o10+h5-S;lh&lMh z+_KM%KsH>mpl+CpxOFb)ZMRV{T;>v*Qad*Si-;sl7YG$FZL=eUO#!2A#*+{i7Bfjp zc$9?Vb!4MtCu4}fK?9gnM=I9lE*9ePGDaDRqKQPu#b|*hHhk92ri+N)%a!9f;!-JK zl(?nYzuZ{NEXjIgz4yx>f5;Bfw@{i=y40=R@%1ZrbM~Rn!-y<Zb+>l7h^}CZ*;#fVf;QcPW(2u|z<#Hx(`%!)E0R zT|yj(P{5_sXcxGF#Bp~5GUydKyW0lbKsk+z{>BPta2=#|hQ2OV0T8R2ON1HR7w{Ak z@cDW=Q*5?c8Rv0hSnIi?i0bh!{4H}L_-;(v^x>t=Kg%_oyhU)L`j0|Y#8X{rRT+aE zMBl)LRx04rQ!H9#UdgY_%>lRwaKlmVLk%M>-8v!$XNRpMIK;(2GZ zHO^Qvxmd#Ex_FQ5e}BbgPNFW3MiNDEOtb^1j8_g z$)AF}M9jr0h$80H64eibQ7S8tZKTY|jE(Uv+$vcOLmf<%b1oK`xZoEU5Jf8C`H;~) z%AJ>Kn(+V<+5Ey4bBY4+##PME-5LbC#eTENV*dcQ@^sKynAd_9`G+P4h}U%WG3cbh z#qi!!3Wrj`)Q}IR6h-*DsIHGc5*n7uuo8j0frlRy%Sy!i*((Xm03~^tA~=bdvyp{_ zQNsvp#$a4ZCjlZK1Z=uyFv6}DtVgKd!-D&UNN$d0Lk3`923?bvf}lQS=8R0H8=X3_ zQlkZ3adMO+25cl_D+aPn#vWEaM7|E?!+bk>@f|Eb>@d^Ua=Z~^Jj*p2%;V`l)4M0OxU))!1%?!=3 zftrCt-8U^v-XVLrvrrE{N0Vn0BO6JIVpqmMo90)46p8}NMpYNg6)#a=0AoUcaReDm6~xLiz05bbxR;#D1G$c1RiGP+S(L?Z z7EIFass=9N)y?jrr%*pHf>~07_x*gRlyi${CTD!PKpo}WHXGyHD&SzwTdYH6QN^yIbysV4$~wmIw!mHeO+K+_?iCm&Q6{&JW?6|ixWo4uFXH^h z#&W8>n1aB4!p0aX;i*Kl)@3r)$^m$uU=R-CRoMj$F6@ObrdefNa?A!b+_VYB#6=+4 z(jk@8dWINH*CR<3_#J!%KnC82BM;vZF}Yx&zNPe8k!3d zR5qU9*T~KkAH+ecz03_CZ~)vdF`PFzjmLlyNO6k9!W^kqaHfP{n z+o?;z91bBFyu|xOu7kJ$96OeaEi~c_FqkzIrVyl47FK}Gpu4G(n0;09X;RYd4)lRK z!OXR~oy%pYtm0{@L7AoyW|ll1MTX3i8wdD-Yx2~wf4;t>8|&Zs3xEAf8md+whp2DS zESYf*F8=_sP}jqCMzTh)GRLMM60*Q47^>}#%axmh_+jQ2x|S1&R0I}bUgfzOdWtU+ zxfxBPQi_$BUlA>hCN~*;xQfD3rIOTK#JB2R?#SfHQ8Uy}F(Q{9W^b8#Dw9Sc(`PKk zWzkt;uQ1xO#%nUwFttN&CKp01%pPLeqRTa`*0pTJDr}ZhJ03nmDY!3gTtVc5m-#c^ z3+AVia&A5ln@U*KW7Y|i`DEb@bCSq z{{V;=Vzlbv?D%ykF8SsRRAIgIhsYyFo|4GSit2O(-*6CVNVLU~yv`uBWxY$%syKbl z8vbRoF>u-Lc(?932$UY^KAVA}A=d_7%uA$5t1%mf;zBnQK)B&zMOZh@z>w9o#2#>T zB7&E2*srElbyaZ}1KyzEY22#Xh_^xkeM_jgDzb`}P|g7ryJ90Tsx=TfmMCR8S|wJz z!CkqO;%+`6tA{gmRon79Qk(oo$TjsY$K}LAmVwJIw-0ez$VJUdOvWmrxM;eJONBr- z*%U$(_}pW5OID6JToHwfPcEYjG{s^B7@1+Y_!#9|gI$F^k;zlQC05!omSym?aLiQ5 z%6D>;Y{g!tYW9LOvdTP=S2D!7xpl-cu!}<3Ef;0tSkgl#VP=S+SZuaZx26R+#HzZf zU5T>uiHM>tNMo3b!bFU$n&LK4<5A13_YW+pm!4)~a!aE$68mDIQl0e(r%|r2;d1H* z8DioBvzwXxLxJL4M;I7N$|zQv+^lcmc+Q{87P5G=UsHE=^)O-0mvA-ro0qV`X>8nB zd_k`atBjF~t&~5BR*P#>0#$r5E!CZbpqAh)&8bs=Rts@ogRgoGr&5afFiZ{*N;s83 zyOcF>;`0Hvr8Jt28;GKdfG+Jn7@ICRn7l)4E$xn(V(K(=9aeE1f0@xR7^Y$>;8nWM zz|tUGM%48a3Yu9&(;5J`G)5BXgtRb4TRSCUXxczb-_*%pvj8qOwPa|; zqX-l-h9y3R8fAulXU5?Szr@_)m|G3X=LxdF>h&nRnQ3uRIcn5v5uWZ+wKAKEXdS~=EDZ!s zG+fh*n&Ut-!1{n7m{m0xCMDd&P0PLa6Ej#QH8=bG&@yj=CudGLj>u`=qqfa<;Dm^4 zmHkJwj0>-W&(j75Vq=+zTD%x!{w*)h9m`B3X~_*8P6=C{C05TfM0YQUx%p06nFoUf z{u0d%MtID$Js=~5CIZ=DW2vpnP7KTnn2l>Qj>s5SMk1>#86OoA7nll6rE*N1M~Kq~ z++tq1YF6T);s(f^Mz(0gs^B)FMwFLh5wHssAm(w00{E4b!;nl1by3Rm6@F?rUw;&Z z7^DkY#K_d7ti){D8mFmMvRaB2Q4G{8hcFZ~V_CVHCWOYngPp)NKN0+<)L)47uDD_> z@O*I>NZy|@+v2px=)_?t?Sk*Y`4SKf6A$9D#l1(Ny5ak|e3WuyRXQyj`DM2i__xr` z#uTZCgJDwyMC3IQ5Qny48o5of%jZ}KwhuD$SB}*D>PgU zo3AleEqS&XULqKRNCX|K?gXK|WeWYSsv-`nB(PJ&bYq;bZL6jvTd09DE@7vvMlzvs z0Wjj=m5TI_cLmjmU8yiC+lD?LxVXy2UQ;x7+h9bvi|@P!wyd1vL>sa z`x$U-+GcTc>ZP(O8J<_%B7G0D|I--cgO%v&%Fxtp3qeX%L(Ud^Gq zl)3q@HJ0wwj@Gf{wfEx&~pti zbvLeULT49GJVR-{{07qH;q=F4+%MUPHbraNyf7=`qpA}HQxooGHDMQIZ04e&tGn@W zvt+D6#a)nLRb&7cyOx@{V*=p3%!@N|Z9g4Uw#&>hgr*E3MdBfnIGT!X+1hh(SU@pw z45lNwccNbHi_~5VnhZqU%spJbz9`Mqzn4U*P@-;2{YS(%aivf0gEyDTt^spY$J-Sb zpGKbJql5YhXIGruRwHg^aYajJ7=9cv4Pq*q0j;RU;ru~{jkQbsjYn<+Tt9ajiTbrN zU>x;T6<^vD#mm$jH`FO~vx|?YY`8gi8NV8ry>T$S#5Po>RB**%shp5gd_*gpGVbay z<*iGo1+j99rkJjkNJLqHSU|g$t8o`C_=Dk=68TmuYlj5b=3g)?`!MlvwQ!j( zFRXByd{%~P%ciA-HqY@9syAnH_gdwgD&TxV-PM&|-f&rYmkwjk+@c3{OF6j0B{@5V zY>9Ic5lW_SGNg*GtAltWbzqcgY!dFS8w*yCY{Kcg zDt-nZGmBOcEMegpb&GGvvp3yS0 z)d`?-R4rdbHH)l&8Uk6n4q-Y{x#H$^R*ym~i)rQyw|GCn+m*g7!i-@U16gt5_&bnd z8g(|zt%5n0tkQBjB_*+Wma}Q@54gmkF)+q?f=i{hKL;6;nMu1$BdV<-9&=ij{j9~4 z9{~nzmqY^iV8)pHn5c=)CLBQS8K}!J9|_X}Q9^mP7Xweh6K}-*FN3QUqes>C&MlkoksC+6}H7EZ7>KgtpgX*s3Xs)W}$L- zhsPu#&)mjqEGvjxE-P%5jT`}NVx?@1O$e8UrMqGl673KPcP{Z2?pX#6xpzL|J}yvW zP|8Q)9Fo#3rHh!g1gn?4%?Z@QpMojGDT!5xicJK#0o1jF`yjDP^A<^m)SbvKZ8jyY z`KEBLyMtkCwjs-dDqb#jzzXCPgjYlG!@$3&J_?peJcIqq)1TvE7KNKOuY{K` z3`_XTv}S4_3>^F*J_{`>I@gHOshA4uFr7xVHAKx&Pkh&zCO9A)Fm!q znP)MeP~#GdQVhxwY243n@=WTbm_VOVA>zJK>L5!*pr_)#1l2IPKPEVfSNoT6740$N z;0a^ITNilu8ob3`VpG%=#JH=>Va1r7%#dniJ;C@V>q2b{WCNnVC0AfP1{WlIFhVPf zpQ0Qp7q%Clw=-J0g77d}X0si54B8Vc#<^L^pNoL3pXc!kHDBfo)dM@hmKx=V3v9Ev z$r$cF=JB6NX6&{piHnyq2P< z*D$K6p^UvtT*GLGxn^bNUS;(c%zh4~Z>encU(*#jF>`-`2{KF8W+r)M%dUPOfu;&hh%)mX3dP^Tnap={65zh?{Xj15qxPac zrXz^C+!#Rw?iiC-mNJNBdiiT)QIVUaz~kSB@$_I-Xl`kb9c-PJk@+gmTfhdOSm|hmdnI+++%+jxcQed9_8#)hY4|f zN8^~wJ`XHXJJf81;!^Jq?o-G0MiAO9d|4>`a|R7jaC37sF~m4T)Hw!N48(WxxT9@2 z`(|i}r40cPlts$5UZ%3D_!H4HX#3_MY%2c%GNvniOabOErX$?H(lXF2CF{t#fCP2? z5DLQ7ZJoi)tn#_UO?uzC#;y?1+N1m&VsCGWt~!#|H8VXy`6a1XvH;UH`1NHmDhY9n z0T!YqRlzZA`O-s8ZR|2&UDM-kd+Lei%G^>qmm-x5G2Rs zmLmK^X`3~whWvrfs#|DqMJ5lvW^+z?<^yGKG(ZEWRppwdGF(CnDM5$=bbkc_ShJ6I z?pLovxLX9XlnKSb4$NF>_Z{NGF*595Q4hdwB`X&*MUF&T<~J0{E+Dy#Rwn&2#3GoQ zRlqlic$SNZEyNjzsdPnopL25Q+{-&-G4N_;XDt4{8kkbC#wHo(%+%3dzrBwxEiL(A zw$0E-;Wr$R_)3%Zd#TvT(wjaHRa~2qOj>sL{@lL49)98JK~-y zd%NOh5L@__6KyU`68h5`e~U)c$)&{S9JN<*HAy$6+`(JaHMGcmGdV&2M(5)!!MeP^F*d;xx6j2l-e>9w_gq*w-(=%82S854kIms(easQ7@psSC{vZ( z0>(Ry?>{#aasL2!7;`E9*|RNgzlN(&i#eRa>rByd-(;*>1(@65I&LrKY-3v-v6`q< zQEQc|i)!ie^-~hFt@8&T{V>{e;D*-ulzTwq9~IUjv@Xg0FW}u`0MkogO#|eZYpC-<&PvBkzd0$TNps;fk<CT?{hbqMMBZsw1?{13)=@mYg60cVVUqkzu;06uZ~ zcqN0VmGA=u)O#lf!&S^P*UYS-vfW^LDxrFPr9VVAy2Z5qlQmUCAY0t2SPk(z0^t|O zLE|r(rgiEjo1$0TZqltS*YOsAQrTLm%d5F!^~*(F%ymsQTvvB7I_X#l>@YWReEr!e!<##Bv`M za;{M-VxE7bQx767$CuQ4mJgLsK$gr>vp;MZ`ri*Ta#(TM{=RgSM$7LN>I44(ZQ1G) zlJ{GU0pE?i%b(DeWWeiDmfUsdM;Qr7`UCyWtz-C*XIHZgaPl(20gr&K`+z}wI9+|s zN2V*osH4KP_If8fk&c*kl=T>T?KGBDpWn5KeyE(|T7xI>Ar zr^OA;$VOlKe6bJ|cN?6k#lNY!O!@whGVM@;^S6U@sq`oOaVvnD-Jj|jl_M!zszYHw zKZ+WoqHpmsfSwJnxbRh5Lw}i7X}k_20uzYT-RXi{vtFRJ;#w~4xXgUhM9fFlmG%=vRxUSjH9r=`1hcp_Phy3+FrI$)03~d>y zDO_%R=3K|njXlt%EK=gb2zT%nG!TB{75vLdL`8KivRR3(rQ$cZYB=xW<->B$rQTqP z@Z4_ZZ(j-$zx>C4hsT$QtKg~d7C;%oahZGJ{o}xl#Mt)$KmDQd0$K_HarG-Kty->Y z!~u44I7nf&^g*z<93SjDtzAnDwa*fp*>^GX!0Ii|ZelTkENYyxAIAk2T8*L^6?8w8 z7RHWg{mZmA<48nl$E`(_zuG#2+G;_MNJXE<-)S3Y+G+T1=2#nehqyybDR(lmu@+y8 zyg>qWw~xm}^%A!i20Qp_d|M#N%S)IP zXIcLM9bAhBW|Em9f&HTz<;VLN#Xhz7HI}`4)L7;?e&%BqQ0iU-pOMV6Tj@vnCU@M) zWo}&|7F=NzB4xt9L<><;(xzhIGcPbDT&mm|aeJ4EvU6msWhBkR{{X2*0H60n2&wU7 z)U^qBxH*9@9mZbrU_Fr#LM&nv=lvfhiv_&ODyU}*m(&@8@-s7~+2xq?!OpI#UvydL zF}s1?DgOWtAqv7(OO$ntuoSVc@eKf~$VPiOqZUR>TAdH~4Q}lgs}%#uZyvQV6Ax?~ zg=f^%i|C7~8;t8SaR#l!i{+RYVJ)aFW57wHGLV;^7|8oG%Kypp98;syL%!I^uf?GVuqg}{}6 z!Gq?8TD@Li#=|TnuTUeIi-T__xNcb0t#D$eJhk*jjqA8+Wj^2a2}>Bu_ymuZ2gCT# z6O_@pld_B(`(R`(v4a)vX128ORZYadUZ#(^`>}N{cqi`0QQTOQh%~{6#;_BbBy7bq zdzh@h5{oVvH7Y7zV;v)WlQB@tzA>qI3-}`qM<5WLd}itmSkJ_~m6+0o2`&)r`~JLP z&OfGV%ovzT;EiIIOYqND)g=MGk8c>6}vMeuBi=lZDI z)x`e*>5WLk+y0=;m);*B`2Ldn zm|4ta{{R~%9!Lbop#4o*ThwE!rI6105G#{S@WMPmgpNyM=9BUcv*{K)ezA7UNWQ6<==pScahF30?s-6cRBbbAI=B0mmzG*Ju3lU>Gf#vifuesLLcH+>m2i4~ zV6ux`l8Bp2UAmOsT3KiBLs2TRDJ8E62tBRpuW7 zoky>SQrqST%w{LSrsH1&@T)IVP+?M_R#;O^2jZjLS&MT202wK2IKP!fS&_eVx^64D z?rER*yZLn(9guDEGAO(V!g6>(!N35m%Wab6&804x-~; zOPeEK6;}y%)V6mnJC=M2ak+5RGW=fP*Ac}<`Mc$u{{S)n0FL5hjhKjfgPB(@6E`pM ze||5*_3^6ppY;6T6!RF>(rsL13yzEm+S$7O ztNp~U)&4c4tJe(6DlLw#`;{&Ya@5G*JpTZY4dCy4COh(($zop&z+-1v_~KtzFX6cy zA-ckoM>E?#02%zueF_`iWCA&pV-cxCV4Vt4(l0FDVZE;87*&M^2p zipf)XoL?_8^2ao0LSjBw<^1sRUw=tR737uuqiox;{ie}kFmdi2+pdjEOTTC>4)44yT2zWiA=BMGqBIO<$kdHVPkV*VEjrr(8_GkHq-V!w27!H<;x0JYoX&>%VQ>M(NPv2)xt z8ZluH3t?1z3#@YvSUztAHgbx;v4~yNaqkkCfS1IF{{T_a%lObyl;*$K@UhMT{NXf; zISc}s4OO3{0N&3J>LPf5vK02m1Z6vkW!X{S%y))gzzZg zN77Kc^X!qugMp@NWkMuAZa+A5ib#(>*V-8 zAK*p!B0BRi7{YZ7*(wt6_d?Iqt)gvl{t{`1rt|ve?M2jF%_2ib@YhMJqFiH`ma6!* zp5yV!#)rA8hnECxfN0>yx{J``v{@Ksnfw0$?iibp3}$a6QI3`0@zP?vUTUlInRza^ zW)K@};?=~uK?d`GBjE@YLfQjr<&=a;W$veC99lWfk#%7j*IVVK&X_ zH}y80CAag;Cn<-5GZL+4tTabbC|*A$`lucCS}F<2dC=$X6?qo;YE;N^vBX|^g>hC6x zab~EM+NRc_jOL|lavE@GfIuy=yQEsGwy$t97GMR+@hYiS&vD2~YsoL|293pt3R;V4 zD`_a8EY1EQQ%7UX#$a_Gg^ImZ?bLkQ=qv1uY=F5~sZ!gddYS`bMS`?XW>W#S9RWq2 z2)h@cAheo*Pn?k|W|}L=*vsBBXEjelKzU=Xb_k#}BQ?$B!*CbC*2e05&@A3%O88aE z-eYZ%(2gIYs}=X8DOiEhz9o&32VX&PhR8D?Vr6Mfx-}190O~3o##Tz>k;t)27vfk{ zQyFT}%tEy>qi=}3uQN$NxmtUIzv;)yDWi_J34hi7;x>2F&)l*BZ|HbnUY<~f@b|>s zbnTXSvx5Hs;kF=U5;%qhUN6AMExxE%`z4~!^~%J%7x7_ZwJjq-?q(_0Esw;>=Amte z#YDocOx@fq9YDpq!7Vshi!!TniMT+3j4~}9EWS00M=1O{P=)7EH3|ZS@{t)fxFhTa zF>T7`4<6t6Of&;&cTM)mkS3CDaY$H)k~!4Vb(STg;VQ2%*b8VKurL8=s{9Kqu6B#Y zl;EMg{YI1Mtv-sWaIba_*%EIBmrWk<(dY^lVC7PNwHYNw`>dc+%|q6+ZyQ5PG>3)1{Lzc z;jYQKo*T#UB0+QP97{J^{2x-TQaJC_9YXsVgFpfWrQ+qF9*hyKeeVQ%g0#>(YF_PY zP~2Uz7#+IJXCmVE9vI#|JG6`=hxs}j~oUeVB27v#+; z_-w&g$&&eDt+R)N`(! zB$uOh#BhnrR}$qOyOa}diIp=FHVZ7T`^$h+0>mJUk{qV$qY2s3zMIoA9!x&MEE)0M zkt1}2?dl0S@bRcHAzw)>T}I+c<0!FbekUeP$-!7LDbijMjMfJDza-!zvrRWH1Qehv z$qc%P1-4w)iC+asD!gyRC01t|yk=)~lB|@-S`~08dI-8b677d^=W%t1%N+RIVK*b; zs^Nq=BGzR?Q8_w_&!#(oj?yFTAr|>m5|`HF1KzN|Xc)owaqea?+Up-^LSu~|;$Cs~ z)Ly>lh^~Ig{{RoRW*)Pei;noVy;B?l1E|yoOXpC)6#%uEf&y+`U;hARDh<0ofZdng zBNF*#+y#tU?Qygm?`Bz)!=;;9nv4Lg5V_+txXD0_IXN(5+6itbl}7XzN2|6W*r0{p zI*O+;EI(0THPdXy(9u;#pmwu6{)Y7O#@i)S6>LUQyZR7*@RUT2w%-gc)M{LafIjyV zCoCl#uoAGZBpYgOKI51hi~-vhrcGm0iVK~HLr1dI$ctjibO$vXUC^1yen@+viUc}h z_1lX@1{jci1%QM1@1 zQ8;ecZc?)mezK&vyc6DjI!Z77)8ysVakv`WWtc_%&6jM^V-J~jYVw>K_&-`vxhguRZKsBfn+U^>HMn}S{D0h3&e)<@zHL(w$)eh_17wx^cA5hlaV zR=$x_7VCE+x~==Mrg1qfdLaUJG3Z<25zY?^N^j627)Cxy#<3WRtxRSOm|*yB8TYa^O(k@g5L-uavt+f3;XuCDCB;tD9^0Tm@)SN&rcf`bQ_6Eg(wsQFw02afmfl5{>m`5#2qYq*+Fr?9z7vgXAE`-Xbg#DPo-M=XzyLF+aZ3}G* zPjU0IT_`=k#fTY01aAKTG*-7~mNeR1wg3X|jr*Kvq&Z6_Y^G3^V|~U7>n>p4C3!z^ z(iOA+0760r)svrfbI4r;nF<;I0EBj4_qvDmd@!15@(H9+VQ7xN3v>+5<#GvjgH7RQ zG&24tP2aXAU?@46Xq*@2QO|xU&HNgdRc)uZ#R&%h3I_JV9>l}smK{ZoZ&Mn8p%h1| zLA0V>qGLcKeWDi+xnU5Ti-=%JT-0+?-F{$b_yTF*qu6Fh&X_7_+m_tESTT?{O+RJQx%Ki`7zRng1`f6%+~vX;X?{cUO<0I5}UTC zmm4Ac>DGqUFzTa9zGy=gJCriA@U)ps&FrO_mwl0Isy#;IDK378GwQ>_L2q3x$g*nt z(=I$C${P_(<_|Q26;nVi(j0|oJX0vJpi!x5SNV!q+xJ&9L<&_jNZx_Uq)`rXD+vj_ zUBbJD9kSx;h+En65*_*wzsi9N?Q#0`*Lb;sC0R(4;pBiTj)+a|v<1Y}!CnMy7ZM=MM?QkVkGw$KWajH6pj9G&U`d`$AQ$zit?57YRcP?Po^T13x9&QD)DhX{oYbmPQ zr36f)0Or?nxc3+Z_QN&~o*{Xeu48947i(NYw%5#ZGmc;s+l%mb0%Y|mT*yUB(hFmz z1G~T1hE}Jh))v17%2K#TYXrFl?t#o0zy)H+Jg}Jd>R9c)5W*$J;6!bfW!;+q z4=^{Cmg~DAOCe3RtU_xZC96?2$0z8NNjf|b)a-Ea*)@z#=b%M2G*Y8KYaF(W$e9ua z8{JbZ*7M6dOVtZuvNlXaLSfia;K0)ClLEU`Ax^ASM{KTfT?|%?%t`nmP*8GQUzjdw zng|rvF+$4Q&v8CqzoT;a5CE66IhAKlj-X^4gI?;*zyo2VIzACzmO`Mhj(EsWWsikFV*?nDQNA3wxf*Y5b0vHIfKM4 z#5O0FQJ^U~97Q(EIl&9!;gc}2>^ThFL#Vxy^TPH$gED`WKpU^J3LA_fE^{xqh83hT zUQ+>RTrcd}in=%siRgl@6AU2xt^x!V>2LPMKD6?oXy#9XNq|XB%+m5PJ&5tnrSEXr z`+-b?t9XaUOHf+@3*c*Sxay%TGPfg;hPLYs6{1fYQ;ZucrXS5mcS5D%aAlWF#aJJ; z!|I27)saPKbWQUPPKu^%;i$@L%J8!DA_YcnzY^N@5zRXxB|(_#{iTw~^d^Yyfwb!b zb_>C^2*%Q02;&mEGl=SJPi4+U z=acSrYv%_%uZTJ`)m2MVRk^CEYp|tp{{SXMtydVz;l_5$4yI-E10=82{ShLz89o(; zyH~#g7bc(WA{SD?7R}T;5flrJ*_L2clE^(7PYjZmV%H0zKT;$dusMVY9*{Suw%#D% z;9gezMl#A@nMhr!3x>dSs!DrJy~oj4Df)(z14hVy0vu(`Uy!xh@1@bicUr1eN1_}m zXI-;q0xSw_yDgHZ616-BV~l61W^4$G@WVNndeV)FKy+MgMtzzDsVXW%fs1g47j9M9 zV6eupD6BwPRExWDQjw+{Shygoijvr9UPuNmnL#aboV})P@jAtKb56bt6)V{%L|uLhynTCFVQJmLesp3|W~tX>$Y zvTcpaLkj{9GM6f;T)I35xb)4Dx~~03#N4__2%ZFGN4 z&3SZ1h0lR!1^uz;^`IBTohB_Zw?HjY9ZUpo5ri>BvaQ}1rs8c@0D!rGL6BEv+bUj( zYy{N9+^)N2!HD7%L21Y^ECL0qw%n`fmO5?;loYNdO+!=7zz=eqH2`iDg9vgsTow6V zV*sxVGWvR0{{RbPM57-GFp`0zoE1}1ZAe6@j}o|kYFN6JHPEoA&|Dm@qI#_lNAVHo z{l5~@aKn8txl4EUe28;7=U-gKx4!mR@c#)V5yfQ0+8wWrD2m z{{YlMbZbFHon1?mBEKU0W%Dl20;XI?P-(_$5z$J|agY+5V&VV^YzqsmJ%iLS-b3y$ z%ad*kUaD-4#uu9e^OPoFSiLrnwo`H~XyYbK%zKk&Sj<-NvYJ7s?QlxPm9_^(Y?y;+ zQz*pIa}}=7LP6p-qukgS@+C@S!>BT^L;~vz*Zy(EN^8+2^4q6t7@IH`>yZV~D^YAN z6u>zRZf(_XdzM+TV$UWmYb*+C5JPfWtTrP_3z6HX6adP+Sh(6s1A!Wdjln*uUQ!!_ zNgg$%x(SkoHW(;dx6~a}zL+2ZysT6r+Aw}m4k=mrm4#E=4{$3X&DV0(k99P}Et*I1P=E^tM}3>_OdcP*_xcW7fX zVL7rC5Y=fBvy&W61+O)TR2EpA^(IouF6NlY5Vu3X)H_GJ6D59Y^r@vEa7QU`o=)DXg77WyKE@*tI$uBy<0C?CHi(Q_~cF^v|4uhhohrH^cR@G%8 z84|=+$7F~Ap9-y7Yk}p5t^)0j%46lKaml;L$0D%8x1;DKMkOfz8|EJGG=!t8CFt~! z6QvH!51aQ;3`4P%C#aSaV(_&~rt*1|&}kFyJYi+Wsap3O2ASD(w!u+u4P;&k{%>Zk z;OiU0RC?cqz@)O9^2%#4gnzLx{4R5TE{H5_QRfv8G}|u7OtQzZ;-JR2k0t}h$(5AG zIcBpFeV!?|{{Ucw05CM!2n$Q*VImvOXK+_#3a5!hc;;q8rH7xk8?TVqIe7~vlK?!-g%=3v?0}0GBFtqwh_-TR4%yWVx%(YbachnMeX_{ ztx-H$hph6inu7q zwuP--$yiW@l1cCja?2^418VB7D-PtwK(sINOGAgT^DW9|E~}bi^P62!Q3Kz`&=*;X z*3hiK7Q*<6Q~vMzM-cV38y?7nT%+KYgZnh1+9Z5{wU5DL|Xu zT%(5p=`11TKyzJ1b`}+Jg)Lfg#ajcXW1h&KYSk#5^oYHq(y@{Ssb_u%WWT2yr-1}p zU_K?~UPxheduYOFB3PX=+<+;xI|RN^tZ^(Txn*fRO1QQa+wlTGi}s4;i*c3r6-bL( za`!6`a1CZr{{XuP9@ttviqvU&fYcbzAY$-rDvKesxv|tI1Adr%W@v0`4CH&3E0%9~ zAxX)Wj2GHq<#N5TQwpeJdefw~X=P2hnfxoWa5~&&^Hs73Su*y_d=lkD zSZ`H~l-k3*D=#Z!B(@@!8hx>R_84=57;F>H9UwC(dOp68TGiYpuW(Wfe z#Z{}mBUt@0K$^4|{{VVH+ftjki%uO9>0FHBnqtB^uzO;Z5fHwiAs4D$3lLZ~lr@)8 z&wo?UssgOSo=oDC5S+^_bYZ%d?5sjI-AjhLx{n0|+@=D`=B-k+#9Owp-D=hO#C2}k zyt8iQi^ejDf{uWcZbey&N_x009$Vyh%oDlR6vaA2$1C6#u^7N)&$@?+o_TLuh$I!= zdZ?Zy0Cg7KQX5XDIGUgL28g*8UMUz{v47GfVGz2xW{Xq>T)Xii*IVWh`+!>*_T4T9 zSgO!fMr=B`3p@u4jZZTwrArG%G|OTatn2CtKX3n&+&BEJvlfOBw+EFvlY09Av@L{lR3 z5#yftJw|rCI?5GZVG_^-nSv@#c@lOpAC$2fvu|}NkAs51_<$;hf;iDF!3Z9ZR1L+O zIAu-}op{i4y|8B=CBZXByAlvNHL*-&<1+Xm3 z2Z7)y4a@GW@skz}kUHCD06?nEcXU>-@d99%uziGUi3M5$7i9@-;T6V+JS~|UB07)? zF-ZfF1$PC?Z(mSnQ=`i?QxFSY%DaJBCTa5m-b(;qBoTP*3hs+U4&OlqSX)m`0IE8d zHLOtKina54Wu&UN6zqm021i)b?Dge@Qgl;z;^IM8?V{WTvHe>K5U}gGd_|?kb(kPb zj3vbb)T-L^0c=h5I}Qs|44|%M4oQ|10Sq|@Ot&Z$Z-gk85R7cw02t2Kx+RTtqLrC{ zISan!m6?*C_rh&1I=UcpxHl^sD{!7|`i(N8KIpbkcF*^WB|Fq{eS0cToUUAPVp2*=7bw02Mk-sF1q@giP8oZd z0=bn;MoQHq#gh3io2r#NhGpDC6{>~OEPqiHmSCgGNOCWsF4*Bt{;Ded3>^_wymZ#%+ec6aV}n(yVmdl(fLGBWzR@iz&W1dp+X|A=9jOAp zN#zocA$<2RDpQORj$;F<6$X?c0e9>y%X8>LO2c_-t;VLYviO$OiU_gjC7M9S97Grf zEJv|}3$@fY(T_k!S2<@F3^8r=%1oX)V_+BPr*PxPcfm%gm9Z6alEC4p@f>ztLhEiC z*tGi<1T;%_4o!hx8N&&@*KVEl6}iO@x2km=yuQyz;m2By~<)@ABmrY2ZOuCSx|LuaUUmFzd+fz3UAPRUHhtv>M3 zjmpVQaA2i4CDRb=VXX%o?2a%SY+U2Hw7{WPMow_U5wrt$c|QcATwS2`mWY|8+d%!O zmtf>a`mrotNmVn!ZjfF|#xo9~09Y+$@I)`1++~ND6vsr<3agq8eUb1fe-XLK8tpxrfsfAl4>3 zZs5615RUnY7f5KP8v-`((+-l&cEbHGeZBxxZC5Z*XpV};tmwAwH0d94c4vT|Ll_l_ zb#+#ZOIh@?tnxxXA8bgowBKOuS$^*A0D7nhwu`6yOH>AMe^2uiE?td`Ll}ZtOEnIL zhV8=8T%Fs6JFX>_3K$h2go)6;2!);E1arB8Z&N$EL#%pfD+jBYw?ju2PNmTRJ?`Zl z&~zGp#H$b^?KZ?emahkH1Uhbhw;P5D2_0O(fD~`gB^Q&cHIAaYEFRc3g%pyA8U@Z!sm_NYqOgm$e>!qKQn` z=!iEGu5KIR0CgX{D$5}ag{8`#i2w_$L&q*q*E z{{SM*a=?49RRH3LGWl2wr6%TFRW*}K0~_vCycJ$3!C+2fb<}C0?#l2HI$5nM(>h^E z76|&^5}BYw9>Rx+hiev|AyCjuikFvEAdj0K4G^WoW0u96f8b?g4WhWap(Jacx zgFt$R0PY3jM5IBK@x^>o7cKa)PBM(iUk^Hdq8nB(EBZ`}Zo8H&A%;+4b8OUH3^~@P ziMG8<{{YvxxF%RuRy!R)9pty^CR6~aM7eOYW&n23rdxX{a8(x=w9_$or~tZ`pr|NJ z8Yanb6LHtcIDo4_ z{gSp+z}vV(hLaJxQIS32`eZ(g9_gIp_}Asq}fR+OsC~bG$nu<``Nj39t&~ z#NkD;SUG!MFk;Zz3{|?Tk0~^KMr}L*uj*0lj|d*zc|fc_E;3EYh+~K004!|0rezxf zV6?AyFkb%v0W1)uvDJq%%1KkOXn0_1m<8p#BZ*_02Cg+o1+jT0#3Kb_#YHUVZp)7P zOFL*;w1(U;maifuN-$Y}@R_+x?xR07Q0(99aTo6u{>lc!c&$rh-J-wwvmT>d*TyEu z)7E}zcIqzW`IYH|`X*gDC5Cot>{Ga`10)-IiZRlM~0@hD;2&ondf`(WK_;f>pF$UZ`Mi~^Xo~Cm* zZ{A>nDdkaj?k$~hFOsDSpqU(` zV}bkl0ePOxL&oluvLB>QqoGa(6)}g*rKroO0CAS{P4fon+)E#wPp7T zy5K)yFX>Ox)snWhhhMdG5^f%0yly=qhU>MwTzZ*??d3m62JAOem>-7W8q%6;{fKe+ zYAib2P+U_OJfPABC7{dy0Gb;L=6!rv61N{L8uC@#!?Os0ErWug?nu|NDMUJ4I6{$1 zNpzH^EL5_|Mlc1Bd8wwL$e~6q5%#zJm6=P7vCg`Jr4e;dBx=U^S53CWHRYcxBgNM@&*@D$y+Wu2qO=DL8@jv8Cu;pv?78F=bA zm>xZ14DKdjtWq8kcT@r%2u^)nQ~`JjEV3=_NlE6EU4ikK=c~lK!i;Oe?5=6oD>^h)yAbHB zgPmquO;mZF1R(M$kZv#&7yh8Rss?o>2pJ}ewQ&n;;_$8gL#yXPuiED^pGN-U3>UYL z_CBADN*>Hg{r>=BH|KDC6qkE6`kLG1%H`ki1A@kIaY#{Wipl+OLs-8Y_H2koa_@>~ z8)|7Km?mP#c!QGV(nl|a$h!g3WM){Pn2E6Z{{Z6*m6c+gGJ*EWL6g92cDq;Y&__^k!JA(~`8OAFoGk`(+1x6`rOoVJT-LA)#4ltAAkIlH;tAGUD z{$Z>xV^&HF<_A72nV20eFe?`sEiw$kwVQtut${h7JVqzn3Y94CqGES#T;oxT!y5F| zV)%0eYE>!a9Rk@{=z}j*0b^=IcNFz!1W^XtID{9bGpRsc`-3^qv0ldsuz=D8C>pwI zC&6}N+1)b5LZD?PhzvY$n4$qH42 zqi7v{GXbdKAt(ib2GXUPNAU@S&&*Z7PLiYz99@23&7iY?Y^GiH4ket%#%C1jI%-OD%kuw2jMFdv5@tEc;QYUhbYyxROxQ^F67O5fCTh0s4zFdHJ`RQj2^fp583 zc3W882QnH)oSel9DTGlfB&gs5Gav(z9;n&oEKF(vaZmZ#jBtmZ}SEuhuFhBfr=s z@m6vvq+zfU%Pk>bCWP0>;4;io!L*H6F;eI{cwrSPRTAzf)TlU?GWAdiMso6DN$(ZA z75xi^0GG%Ggy_V=^KqF{FX4^XQ#++xBr*-3w7mmNSXhOlSz>P*SKKc}%tKgh=%|CI zkZ>l0T(bsSsE{rWZf>z#K+2_PUgH;>CH^3?st&J7C<633?DcSVvZ+F;+bKoI?69>& z!n^o*xmC(rR-F$})KiV(oy>hgLFj<9Gew0bZ>~BhA@~&!AXX{>I2dxujV`!rn7mf> zY@1np=D3@GZXge1KOg(p<*7uWrdFDa%ZMcr3ls%_wGbJ_{{U=8@rYTh{u-6elCVmR znGGh-VX2nXXkQMlY6_GKSf@wV5$nhVCD?AEhndo9&uH^g6EMtWOYl z1{DwsywSx&s0QL3ituO&aDj^cc6aU|;@Ng66CP}-?UXKtdm)VC{{Y!HhlQ0#zc6|| z8uGCBrL;2UIEIm3R1vC$aPgXa7$dbnbp^a3U{P2CiI=Mi&0HYYG|F!uLl!YBN2W1y znovv_33vn^2q_Am7L=*hNtO72bcRxas(?t4ilWP|lJfTU6QtVuqVy$9(f)J!%NiXu~Vdxl|+^?^3T7@`A9hDu`OiYtF)(oIU zP=+-EFY=+^648L8rJn4}bmQPe?!4PA2*!X~Qrg368Y$Z|IHgxC{$sm?;B^p(M7-3!T5jIqzMNWN6!YN+In~U~UzTkju zrd_#)RMyiEtBQ3jES7!PBIc1qQ7jb3b2zz6X6zn9hyrf8_bdn$ENaV@=UPMpioCR< zNgcp#xH5iVjXZ@io+5X^_3eZWqZMRHM)rmle{$$JK(|EA%sqt?)`!}lLj-G8a0A5@ zTy6-CVNPqhgfqP(3Se)D30T_6;M|>5Tf_}kt%e%{*zS;ofhPN5hY*Q0r(i?7Lj7{+US)LcG?j@U-4{?T1d6q=v@e`OF zMlZ0d2Smv3V+UkMMOx^Y2+R|Uj}K8=)L}y5DXV}tH8V``Icu zzkH>^24)6?Xo85{aBN~iGHc7~JvD8P^2B-7+#C-v_Bz+BGTu>J(T`b68cSbLlT^c& z{{S$pn)dv{lr63`QrBb;0Om6kwomw2p5oMI%&|Z73Da_~^AA5Qm{7s2qNQUHGXcPB zwqg+2^^Bpy(Qiy#&5;Smpz2WKI^(ECCcV=Z|f}WX*_9yK! z9UqTyva*%SXxgv%`HLdAP?wA2RTYZ9V|UUu_Ktt$T+0*-g~DY{!hJ>~SW>{v!ncwj zRv_S)nPqKR+TM*60y7aRX@M`;D7APg3f zQ+eMH#@KpYE;W^*x1(~=`t^&2Wr(G>Mwx?QG}MVbCi4+DIRm&rRStbA&h`cer2XJC7)t9s|sA3-gMU@Mdb8i(j$Dm`fwFl}xjZ0h@ zcOAyTqudPK6txJ47%0CCDO{Cu*23ca4H2Ki?XP+{5bcJfLn<$v55#bN})-9b5+US)+}>q)BS z-Fi&P{+{Cd^Wr%pz*Ny5G?XyjY z1B#8~jh8jxBLSsqpxI$VvJ*ra7YkcVnB26YjA+p|+l8|v-zM2&_Uz`+x@T_XzLHAW z@L81tlCsorE`KvXuv&3(w0QoQ-FTKVl^_1Am9msFwiSnqt`#%O?JV_(UI;?Ez{(K$ zB8tQqXEV+J06Bq(!erAf+kRpeFxD_H+?H=8Q`}01+=XEeB;gbugD@6czYrMCLaDxQ z75@M-g;K?9cRFsL_{*-VUxaBXX^SRWcM`z+it2`T?g(m^0H|b{h>AqNYUMjT~qn$y^kAntp z3d3$-(kfK2*BO9v(nbAn=hP8F$~p{y?96b@pSgOgAxL%Wy-1=b}_65bT>$Dx~I zjLMZF;vVLq)eq_;B(=PyP>cYEjmPTLA(+dmXPW% z#E8vTi-x&?_CvP2jVOe0fe)erKkUftlrrM3<_BDQd%1#x>#1|kJe5;1hW5;ZSgpjK zGG1S7OTaB6&51^(MCuzaqv-{Ui^-L%P^|{&YOWicqX=;t5-D{9)CS8ieqo#VIjA{` z#Kgwlf1&{7q;0j&swH@V7gXDJV2*8U3z5_-fo!=(x0oOf1-w+O@FiAf)sF)$25VYF zpkQ>|G+LBDF?RHo4WhRSgKkd3+Vb2>fMU-CEH%-!nRe5u=A~OKknijz&F&4F-Tn}o zI9xEHXqI?FyKK&gFRM~0X5%@%YcydmoUF3GSO7cBQLd}^4cth;qS;S;V7YA#7Rr!g z3)I)K8cH!9rVY)N4Sgb^NSc_4rLM@s;rO}(AfgTzON3cauM+q{;ZRh*$VFak3MOe) zFGeFGXuLMO4a2gbT%fSbuTRXSyMrmp_RKN0ea^=zPzX}NdEBjuNY73qE4UhE3%VnX zqsB;jAaDiY6OchkQmcq=s&xPt@ub>1V&iZ#xUPvE~a;^sy< zulEUt9D`SI!Xi%!@k9_2K(1}L>q-wu_Nf^~5zP<-$hevoIdJ*7xk1uj-Pwyd{k@PT z+dL`~NSs!SELEDYJS&GS_rze%n}wic0T#vd(HFNBE{d@-L(Bvzl2$-+^pUZ;y)dc< z9WM;bdtsIZ{Tz~}qto1}4fwQXHfIIX$=JY@#G28#2J)<0ei-_NQM9|86H7Ca6m5jZ z#Z6^uCBaZX(I6;FQ^dRajkGxXnO?128xQ<_M69+RVjRmdy zg@C&I%*`ET!G76;g8j^5t+j&Q@IqAq{W(`M>UpvEhN&V}w}_ISKtXI@u>ngB)W6~a z0-jn=5Z&{G$-B|yc%^OS+V z(JW#!pcJ~K)HC?9Qwb{PGN6HA@!c%QlR(X#F7s4Np8`sozJ@Yib z-r`Rc_cA*Z{{RRKR0Bwbk2#ea3uIM_xHLY*tmoBzu)u^OGzB5OaVjGX37JJe?>`Pq zMDbGO#2{!+Vkkrq63)&_I1NtB@NbEZ!H>y){6lFKf#eKLI0#(RbH@Q9UPfS6<#As735kxEtT5*^k zt%sZ}2f#qeI4e$;pdB2tgJV3O3UoIvPND-+it%i9?vCPZi6<}gNt+S(EkfDB++1Sh zE`*AS1sqf?PHRZAuPH`6RKe^tdYt@_TnuC3=`6dK1l0T?Wfh>ybbip;Ypp;9e{Fq2 zIc4YkfH7~q%1>V5tP0okN>Vpl_*B?eyhL$OJooEn_T&*@S6-qDJj&Xg&1&u(GG&u1q&>5B`4y8}R-XNo7K*Zcyn_NgD#9MbCgRB@vEMG*~ zmy$4+{g|Fy3PdG4(_BOqwV1XpCIIl1Lx)6nEPM(R<$gADkmRfxc!0rBH;c>i%p|iD zS&xvIT)6yRCP0YgOk<*8VM5zn+ssxajs;1X8$fh0cA4yh=H!@QE*sFjzzpqhL**fQncG?=B)er2 zO;ZtA1*n$67cGQ9Evsb0LLN{UWOt!8agxV^s%$8TmF=*DuPWw`Y$p{Zi@JH4zQ(-N z0e1m70a(Jl#|7*3Mo{Ly2j$GE4epwTn4VB5JE>D_s^)zq5o29KXr>6}swxawRDldo zH04xL8pVzc17El`;RjG%69p;+Tm>w7n@OV>X~EqqXSxJTsc{Q#<=|*2gjBWp8G%rQ zzl%Z&aq6x8g~;o?uAvMZ*)8aDFG#G=yU$Yob9~J;g?-G)c#m%%(=dW!Uk({;7{PZ~ z0lqFl(U)>SKvVUlNR}tsSjVnA!ABFFb*S92whMFIwVLsG?Uytz)frUA-%+Y;Viwrk z49PJtpi&|#2NJ14Qxgjejw3=&D;{ClsA0l3o6E=@`o5D$oLRbakQcU8sdk*NZB4Mchrz#r zH@H6uaYTf6ox@qDj#qg>ZC$^zb1N?f**D&$)?B>n>QLo#+-tL~b2kp9N^WCF(Rnb+ zt|+a`E>%bW02!kFAK&;2h%)A-)A)s}6&kcfu~=`lrV+Yg5&YUM?o^~pL8>T<389LL zDmOwfN0U`8>MfoiR26Qn@KmefN9Dg>J_@L%FUq1=<2;?jtz2sZ3dA7d8K_Kyg5h|~ zwa>JfmR2bPCMUFt{H<{Xue{}R6th%qnvceH(EjYfqC2tzjj%c{k_i`CrhvKOX^U&7 z10pTf4#FJNr{TrMxk5(lEk~8b%}S^t$Sb(H-TlO{0E&uZxlu)L2(saTjoA}IJsezE zhVG-d_}T|w0sPI9qb$PUW;GMrmj?B6iL?~<1Kgu*U^#nKu}RB(KBHP=6|N0xHE~l7 zd}W==$%uxvaT7u-Y_F%4Jp@*)BV>z-els;YGRGo*W94t>Fx(9|2*sE-hg94TMA|`v zx{b{m)2qU_TrKUG4VJ37S%ak-c!dK*QZ2Vz5vGRJ*_v=cR;&~qI?EmOF}r9&H4y5eP*g#q3CPz92?`(y+*bJKbb-RTbr9O3fnT& zuhL`P6Hx#i+N~jrAsI<;YIjT|S+wq=6Oa9=pKJQ$8B;X8K!c6(l4vm%lDvik=$DIS zo*=SbQrImvR9wfCxC5_q8@EmzPC>?uq0t{pa0$15VigUtx*J(R0nJ5>7CK!TQ{|0y>c876S$4caP3@?d-D7a6xu_?b zgl5TgeC{poNmyQOna9O&>c#;Lb~^alQsFBkA}$ZDVzuSAYl)myN2Dd%td8PaD@}r?QKA&K zoyN5lLo6ePx^JxB7FiXksIltSz&IILzE#wuykGd8Kp@@uWoot~oV3mDeh^Y_R3W$d zV+Je{YLYa>979A=m9`(7n8Qwso9&hG^-7^^A`6R&Zcxx)#p*W%VBE_JM)ZSeSe4k6 zTqTN@X;0z+M7ByJhe!jKZW?~+5u)o)q14JzGtE_gZdmL3Xxg5B6{>1b!+JdvK>G;A zmo!V-AP|31ij#(7DySVn%r+-UdQV{VJSTgtg$IU(g0jWSrEW_W4wIg(B+7g{V z$$HsVRuPuo$yJP2X?21n)8cI&rC>DLV!{Pih(XL2U%bi+GFITIUX0yA;Bu-*vTc_y zV|6;*DWKGC63?IrbS^)`i_A;e5;qTvCYEM4HBePCHDRu!HS^(60#Mut1*|S%H5IN1 zgrf#iZhyAG0!XA_Igw-YhA>cRb&!U;NR&eb&4?|o<@mi!LN{0}>UqT`W&Z$TQs#)# z2olEP^%x*d;^2j4kYdC{j|ZCm$bofUB_A~}F#+;QIX5Z%YvW1R!JdTTm^wfp$(Qd6 z9@uqKm)ZQiRBel0ZZ+vB*IC70C3BmYf6@_^HRMcJ*kN)mOL|=Y~6zHh;IpQ zN^omA~FiW6v zq;B9$yi%}IV;o9dk8sJL3@E!4z1f!W=oJGM0mKu#NV2fIZZ5P4$Plv6CLM;H)@5d1WoKyJt`Sg7C}!%@qK#3IE;6{y0N{GS=b zC2W@}=I9y30)@qDt&or(<3IU}96sZ=xO#wtge{A#w$r+p9Ol@_UjG15-4%b^QQ`G6 zF4z$dCvT`R?$GM5D1QF{Oqm8pFy3#_tN#EZ({Mplx(_VMmf~3H zj77@SzYyPY_RO1$F`kj!GTa!SD~J=iK?ii?m#Q>%YVKa%N1I1qLdrdQ^@L#ygiOfQMn@<(`&>!@G&Dya zQ#?bm?1Og`R55!()hs5|BPF?qK$z5K1fUu@W0A$<;h8lNS}92?3_pjw=TM_BA5l<= zv8yhr4P`Id5W`C4)BZt~w^4a(VZ>p@*dN@qXe`Df-tk{iWa$`mf95+rqeaB4*@R%R zBnznfHCe3gFDQ!2opApE-XO}Y`pofgNk;24s)c`Wl&meC!mv?PcX7e-Fl(r3NbUsV zP{blWC}7s!32;`tqRNe+#8#&tiL^4*Mo8U23av*n-qCpht|1NsPFA2+0;s+qhPERL zZImrOJsW)#_P7;!iQV~8vg#VHV1ly$PKz?i{0J<{V`0?NSBjJofej-noKWTz z+U<_7W)Te_p951Jc0?C&VQmwxUR(J-2jg`Mo(MrAmD-6-=EKDwaIzxS2<3;6{m$-n za?6uGV>+tC`5>W&*&ucvq5hmq#`c!SOb|PO({jq6qGMAwG5eJ6Q&@}XqAh5ZysfOY zQM(LvG;uJ=3(F8F9_0arTosrup>q0}I*4FHQo}A5*ldh(*T-_>)Z@4%?a^oTIgyy8 zOY1NTbi?j&5;*iMCY1^e(=q~%GhqG@7>@3zX>Zw;RoKfG^^mXx0E&rP#6A$hzTF?Mf>yT^t7Yu-2`@w7Au1B*f{<64Lu5O|ESZjR zY3sq37u^nV4KPRGk1$cp#IIk_n)*O%7-goj=2nRa-e~ILAnI9lu>7J}x4DQha2t|; zb{~ZNp5||87Zpi@94cCbMylnvG9QS{-NM(xs?4!PnT*8daqtWsz@aqU1BO=xMN*h{ zxxk%wc(O7i?+wj7N;va>7KNUa3W5v@fXNq7-%PY(?hz%9+VqnA;;nNGJ z_^L!N5I!LU+H|PW1^)oqf*lbuyQr%uC%$eLsXx%gz0JT)-QqFESEeLde?y{ZVdinPiw@ia&y^(`bgMO4yH(A*z5&GSzuQX?FM0@ z>SXE_W@MZu4tj>ki1i7(DL$A(GWQZyzf<*f124g9g5uG03$K+IGS>ypr33C&RvAPw zCe~$xl|^2k^i8p1y-KQH;wW4cy_NfCpMa<$uqRB-wm&c*xZSgu#Ju6-;;FHSnu<7? zxcn)*)GDzqS?07xu)}1r7+OV2xqFA0fvviyH`G6#ZJ`?V2&ktV^WV1EnqH*l$;z(EV9P4D1KMP z)KJzDA}SdjL%D)tHjFaW$B>Sl%QEU^%sjH~8tySnEred&zG!0$3z&Ayek`$xY)7_R zWuFEPBfRUWP{X<0;}Gp~#?irSC5X()h?|Rz#q|`fqcFI)SHLbH)l&=JCi5DaVh=#7 zhQ4NeNBkyQVK^CXrGT_FSDBU;&MxCd*cTGqGX1Edt!Tgi!F6mP#r7E(g#dIt%t*^fG&2~kVi8Gc zR>i2>%u_JjOc2Zw%~)ASm00PUulgY7r)jUpJ2%4Lg+&~&P&@6E_;BfFf$pdBj#x_cvl;8Y~(92$Z6+(l+0yE~NLUS>W8*VIDRuM&+`367$+)wC~* zpsq=A6%y?&Zd{LziNWw0_*Kh}1WVI2u>t212j~==B)zPoKzV}TBg9JvU@>Yii@D%) z{17CHWrdWM55|bGJbV)Mc~6dn`7Hr~EVtqZ%TgHCw-M2k;D+T)F5-}6m6APRT`(my z{nKVHh!*E!PzN%`06*uHaZc=8T42 z(iwmbs`wQie8BkUh=OJzp&7voWL@`!F%4>B@GDrfjyAWAmE3PD>7R|LqVWtvEb{=t ziA*O@?c?BLv#9cvF)D2IFZzvtDxsP#MN0!YmK8Ehqm&UhD&<%($8gIGK?o7mOfWiz zgOuq+2B=G{4tOc-_y{n-w$X_pvi*^&c@zj7!>mfEHG&1WV0oN10!%;cniK%^6$&#O zo2a_W5p`^`FwEh_{6w){K!PbX+8F-;Aco<1sL%fZ8Hr=~{Ss=v;u-Z6G}lniw{dM! zBMuu+!JOiZQ5dE8n`huN@E9gCsPz~HbMBaJg6j8(2q>uh@WBsj2x2N0R02Fo#6`xd za=3`OgB}qau7E)*?Y~eZA=Y6bGJ#m3`<0}rmdDt@a2X}ujIpS9GYS^muIS@|g%vR3 zUv|G4o>--B67epuF<}Y}7XZ`(wE_%6YCI*19jw)HRW}>CGdkP5MTbHa`iSU1qchFmKfD+Q z6*zX_J6?&3O8)>sgT-!y>u@-a5#{bWxrp`{@8I04H;4i^T}I%U5TL5~j)jS$x=a56 zW~(y8gL^}3qsMr5Nrf@0fO@ziDBHdDYoNK?boo3gkwOh%Tq6Ngq4Gb_AtkU zNs{GfaHe2{P}RhmVyq>LSJKNBc*Gn<`~}>S$R8wNff33RdMvq#y@P+O5QQ`+QC|?# zW}+*vG|C_;j>Hseb^N)Px6!_|hubQ3kB%v{w!Q+YRLk(CMQ)pZg_Z=30D3VT#LJL5 zaTJUrX?yL3hprd-fj`bIclhCe00Z*;!DClU9FAQ?M;@htZ4g!R7gFv12&BGHn7mJsDd|bBH%Um=?qAy#QghLHj*Z!ud zUBy=%Ob|-T04osF5l8_mIfB%?X-VY~j@(Q}skt2H!U?G$E{LB2TV4Eim)DxMQ6?+1Q z?jjKvD*ymWRZg32^>c}!QS}3yS4>?dDPZC@%3q6p$~#4iSi=kN<`(aA=cci$+8)g# zI8WRN9t^k({)S$PdFF>Hw)0gB;r!E5jY zG0DuK=ScjYAU^S&kxf71^$HO=L0^b|AeIVvazck5LLpanOLEza%9^E)hW`Ml-akM_ zl^lkUuK~lqjx*V;CO+VAzZZrKBVzCoFg0};%4W6JGZLmzr!_6KeFqZ2m@dM!;UE=+ z-OlJR7J$Hczo|g)NN_kVr4WM`9AgV+rapF&!6?1yxMO2n)sfzy?8NVkX3w%>Gx<4$ zRvD}K?~2a0ibamR#Z0iX5P#Qx-c-v3z3|Y2G8^o+J_2!xhVT6*@kI{TQBtZdbD4dy znamps#q5g}8!j3?1(B&6jhy!ZZZipF1R!=p`INg=3{V%T$sj2O0S4D5H91R76jucX{d(%4kkj}Q!DFJh9vN^!j>b9){{Tq1 zaAjMjB^$~45ZNi>B8gd>@_FK_HX!7!#f>T(bsVacUST1oW)0Lw1TDCPKxlkhGUgIk zi*a00aHnjc?*aEjcFlk6qD9!^0-F)|@Upec6=@ILC{;zu;yOqNh$^K{qYeej9nLCm zRbGbWrrPcTs6+wW-Z5}=br3xGl!~#M;$EPO!T_1+wPx7NI`V#V3c-zxBPC!Tc0(@w zU_9BT5qoPC4=YfoPyi{_%uEP#0pco=Qx#QNhnrj_&l`r#MKqI;4U(3aS@0UdIjb2W zm_)tHR4&WA)A?pu&nkid6+=k>0Cq-{W`%E1^K4N2)Le8708(Dn$qF1Ts)}K!6$%Hs z8L~MNl&3P9)N8~eK-MHI%y=gejIAA|#6XBATucRFf@}&w>917t1!r9qu{`0J#}Tli zTTXCI>;x9OvgH^ls(*2K>#T({bHOCi*e2A;GcgVuV^-qDM6ZR#mWufIIhhQ_N~>1{ zLV2)89&Qm+Yx!|f!EmZ`pVq-${<81C{Y*t1cMD@HFcm3+{SwrIb2wncvMY$78o0#^ zm@QVBsY=sm$~5o{w<*rpU*P2k;MBQ%0w%g(yBV={XcC}0jn%%DrX(%3cL~~+kb=dP zuQ^^|%c(`HUIZsaw+WP?2+%u+H~yDDIkf~}SHsI7s(+#kHMN{Ftn?2XLp+fXS*_L+zZTgIn$ zgtP``;BR#ftfH1>nKwv>Qo|F8hrtVO3U?_{PLVTn7JL%oRx+FxqV`@OZoI|74xHJG zs%868<>nn)UK@p!4jeXf0b8|}a}qdxF| zm2M3VOuSSLP*TeS7BIG|lr93gE+q*K*3s?)Ms&z=#BwkCg-A}egsxLcfz=pA->5Lc z&{e#UH=m>86oKFbdYCqfcsyJk?lPQ3YL3-6Ql0X{$UJvPnMR|QfF~nJQZna{Z`>`_ zGJvP?7`wk9p;1K*5cV|2v<#%HA9*ER$$ZIG-c7dFwO@Gq6kF{xCln`j#Lgg3YB*^++~qS6s03VIF1yL5H3%I^9Yz+ zgA$hmJ|P+z-XZvYA?t^sC^(66M^d^(FH)5d8yj#fFn}>|MpcuMd2xu{2j@v@xPmq6 zW|2+Y+tsh`5VD|cFuRp)MMS6&xDZhFD=cv=IpEEL3hM4JCUi$-Dy$^H{j)4pvRkot z8IG;xHvMx2qbt+sLG5+bQ2SU&zAyH$@oIF#KEuF~+b5OgW-9puFjQ*JGiejWwpy|Z zC|dOyl^|VyWkFt+pfT8D&l`&CT_c+AWq#NrfYLJx0zIes5iRaE$tNYR(JTrh0Z-gq z9Reu(?l}r>qC>mmrcUnU}hRz$)zO~Kw8H(>Sc%~Q<-whY&i1( zm0`*kV9Ch+2rZgMom&%@IzutcBgqo?l@o@N5&HylJ2Nn4--Gb7KNL<8bU~>>mU79A zy%St!@3}=U7c^Z;l%Ze9gjUV@SP>b!e+NFJbX*Cv)GbO2As7MaaRdzjSBU9IXoPU~ z@Dl^PF4Vpm`y)&$5#{=hVMH))vdWn4<=F=1db%Y>%ZnIf$#0SgE}5rG61qGsBSN_D zoWoOCZq&rERUB#-Rq!1}QVsKd2&^-iagK=lE$O*JG1YC9arsZ?V1k;+{6aj+6Tpe2xM^y4h_ibOA#T-nVRsN!3;&F*%j9FQ0%|BOneJeblhE_VK{?JV82md zQz@13R0U`zaf2q(qZ0yxSjt-AxA&=uia|!^EUWnRnfsMe*`7>GaC{$xW_~(F3U&oS z>j_?uhBpYS0r{GMzF@ngnlbkaOuA)vZqRqw4AU#0f zO&5ol^Z_~-7bMQU2q}?{5PWx*i-V$bpxn3nb;`SzGT`EsalH_!OL7^7zAQ0ZpN{>p z4aV6>q-X`pn6=XGAhBJ%6KUlIO%9+eX$&t=SQ#By)J>vUjxrz|tGw{Bk{uIi zEi9H)E)5jeEWc6KuT%TUO|f=^@Wu*dU2Xf7*6Lxw$A%0fHNlh&8Hvd&QFsxiVg8J^ z7ykf?#VQkIMhF>*n=?v;IYz2=B6S<$4J9>avoja^5Q$LP5flW|-5T_PK<<{dz@ScBl@O%0 zOqc!4h>Tw;Yw7^F0tLkI@#!hmP!57VD{Kp~S~`pGa;rKP88f4nQm;^6)uT`lwBs}k z&~Vfc5hsuP7fZFE+%)REIbo{hg&0=Xt07=MOD=5yW6Ysw%d9w_Q{1Z!Rgo%^xi1pY zcCB1G!V=9;)g|0^iwh~C_RB^27*_M ziY72FAy#%)M)eL&#+t(6fKc+Xk#zD*;NHhl=MXf@)pQO?QVW?nAS7Ib1zgeiluHF0 zBJvr`(jB0o$tA#bK*t4#+m%`2b$Lgz+?hq;i5SeW}o+eu>G=1|@^ zO8^5LVitI+&rGF@pqL;R6lL(y_z056x+-}}*^8s#l$g(43UNo)|W)*fVW) z?gO)ATFg_7!zQ!v;k%dxF~e9GxWPFVi-2F2HE|FupW_b^Fqf5=ET!_BhQ*_ZIm1ax z1V&I=;VZc39G}3yDtvrjQ^veOP;`n8ngsgat zL-IVv&{vYLGmbODQ5U5YFMs4xw{FUUTeA)(8(o6SH<-nMU6Ye?p5@R>7hp=8w)XlU zMWa#&8a9(2-%jhvI8Bo6N8em7P~ujpvI4V#>SV+6w09VsLy<6Cv>D}i^4XKgD3~!3 z5VEll5|5bny*C?y4<+FhqMbvs16IW1u#7xIxxp5urU1Yo0fUkx%+{)i3b`9AF&c$-fDK%5 zGOF7%yuhG|h1U>VPsgSRLVx;1*g9bXHjzu|B;X?#mA%54v33ZZrR4trN!Q2%y(T{C6(;87e`_v}seJs6jqx@NDO-Dio#tn76%Md>bL_jL_!r>;f zorHwx10&p|d#|+1SRw%jG#>5vgK^w95{RQ|RydBHi#>meRKf!)}GLV4$Y!GWDtq)X$hhy2L7ihF`3< zUkpl})Jlc$AX*Zt-?SmTcU-TT;lu^T%VBjPMMtsfKD;uSNE29``;@e${eEH~WBTzH znGH!&;n2vLwHtQv1o17;fz86L2Y%9!mhFqw54kd0eH;Yi!z>B^0Ms7j!KOJv^C)G= zN_iW~(8%kH9ll>r;we~3{P z2(232JfZ3k1)w6hU}jLmk*Hy?76xIBFi02=%EV@sadItKx`-K4xNQTqp4zdQ7P78b zVmc25RTzbKW!->F`bJrfBF`@ntmgXh3SindHEiWrKneEdt`srV5=(-h4|GRKsu6 z3J6<0q(^kgOiT2E7r9(tOwTy=6(KqnEekJ|!?kY5MpAG~vYwa*v2=SzQPhIgo_mT~ z`N9P2YE~`JWKc7nBH`TP#0}IIU=D1N2MKCm zQ`;Yn5Du%iXHZ~LF3Od(2Z&2(q|d7iw^@MDEE;3Nu$HLQ55C~}OkjxC2z?j~vUPl4 zKBaIWv(YZrhEsX-1l5Fe379(>TB{eym{Zb?6Biq#2nBd>$|ob8FrXS({DFM5VV1Nh z)Ozb3$S@mVEvOr&pCk;dwm2-jlA6FeT*cJS2)qnZD-7ds4RUgJN0lzelp1*ar%V!E zfXG1QRfEB%P$jdUQ&t0?5SL3tT3#D`bqYRdG`pDwe4ZeM10@`>nBm;5!+B;Qn3RPD5n_(N?HF)Ib0lJelHdsSFy-Zkudg>& zz;i;y!8ILSZULr^VjwrO#ayaa7;1zpi+)BXqz#V{6fK%y*Tv$LI1U+b;=Eo-lnksj z`j?|$)Uejw#hUGwJupE>9@6!T(D{ZG5;$n7)KpQ(HR>r5PHimajl|6EsW=?Oy#XLB z24SRz1-lmo)Ui`Q-A{zK=bjQ&`5A!AOIb*iMhGuP+h61W0)tT-dLOxKg#=Z1NAq@s zMaV=8r1JLv0D%yGB3Yc`9io;2C=bkDVj^)3#DW2LuEroBqm2^5MfE5fq%Dc{UCgYb zMBmH7g;o;GrZMQ6Q|O4NYX%Kfm5)H0#6)X{Qt*eyaAqf{mxFMuv+>>PD`i0O|&)_196bds9(#En>a9zqM zn8@E%6Lw^tL6*t$<(JD8mfe?qRYy)d~X74X6-n zly%b^LrHkpk;O#_8?IO#QnMHhE)*w3GW6JNAhTt73SSos$R<#+U8@BpxAw?ffOMEpgPp9l(oWLmnX_Vw{>LOsX}wiFXRY@WiSH*czz+ z01R%eaKb_>G}rLTyLoSI7~0GJV=C_IrYWOhAE0lCU^TQdx%6<`&z{)~4ivYZ}& zf|t7xb`V-72a`~32@)lRM=O4+FVaeG*51SLz9zu>fDa0wdj9I7f+ zLF#sUma>bx;RR{)ymf|agx2(zYl^Opej z%3~hRjx#;DA~QBv184DQP^k~r!FRs&FF6`Vm) z4syAI)UnGd6lo|y0;dr4C^YpDl9X8&7hfuT71avCcU=xM>k=Q=v+%zOK1-4XYHE1d#vS_@_ZC1<43@MeeF+Ksy!phL9H|CfH zuuvF|`mdx0<^Y(0UCf6RB@Cvqo2ZpY3J>5O#1hvPhlG^4Q3CLl#UgwmL^hZ{f?_Nl zWqPh8C%h55*c+3Rkoa05Hl{p>dwejdy>9Oug`iVlg+?aZyyRax00- z8MFFfiOZBRQw@^L)nQp6fyU*ZCF>3dODT!Ewxg7({F1KJ1bLUa&LS088YTt3os-2J zxH=$~A%z=K=V)ddjO2d+q76OE>yU`o#e^GwsY>DzYRo-cGjhugP{>p-K%_+cA)llC z7XA$_imgCn<~Xnf?36Gw1LW2M2eo7*50`lSJdCfKdmt`duSZjFN{cNMHr@(=S2oK~ zR1oXd7aES}f_!si3_udzCIN)1VhI9-6d0BvZaA77dPTyVmKJzhn2Tf?N%9)5mZYCd6mRcjgVB$=D7 z++r9v1?vh)gfdFx(n33EOHOLxW1RA|j2IgSPGtpB`%v=GL4;6|G!)Df8V;2gfwpl} zz@gftB4m2Q2f`XndSL|sE5brq%31={HU$)mmSOvdoF2%D)wvSo%Fs`!pkFa+*1$qi z1!b2cMGCD!Ia+fUf^smx8--mk^A(Abu#7y6;VdU#z+QwqdD#^&55OQ%gL3mT6LBs{ Oj0SK}Nr)#;;s4ptSSRBE literal 0 HcmV?d00001 diff --git a/SIG_spbu/api.php b/SIG_spbu/api.php new file mode 100644 index 0000000..a056eb5 --- /dev/null +++ b/SIG_spbu/api.php @@ -0,0 +1,47 @@ +query("DELETE FROM tempat WHERE id = $id"); + header('Location: index.php'); + exit; +} + +if (isset($_GET['action']) && $_GET['action'] === 'edit' && + isset($_GET['id'], $_GET['nama'], $_GET['nomor'], $_GET['status'])) { + $id = (int) $_GET['id']; + $nama = $conn->real_escape_string($_GET['nama']); + $nomor = $conn->real_escape_string($_GET['nomor']); + $status = $conn->real_escape_string($_GET['status']); + $conn->query("UPDATE tempat SET nama_tempat='$nama', nomor_tempat='$nomor', status='$status' WHERE id=$id"); + header('Location: index.php'); + exit; +} + +if (isset($_GET['action']) && $_GET['action'] === 'update_pos' && + isset($_GET['id'], $_GET['lat'], $_GET['lng'])) { + $id = (int) $_GET['id']; + $lat = (float) $_GET['lat']; + $lng = (float) $_GET['lng']; + $result = $conn->query("UPDATE tempat SET latitude='$lat', longitude='$lng' WHERE id=$id"); + header('Content-Type: text/plain'); + echo ($result) ? 'ok' : 'error: ' . $conn->error; + exit; +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save'])) { + $nama = $conn->real_escape_string($_POST['nama']); + $nomor = $conn->real_escape_string($_POST['nomor']); + $status = $conn->real_escape_string($_POST['status']); + $lat = (float) $_POST['lat']; + $lng = (float) $_POST['lng']; + $sql = "INSERT INTO tempat (nama_tempat, nomor_tempat, status, latitude, longitude) + VALUES ('$nama','$nomor','$status','$lat','$lng')"; + if ($conn->query($sql)) { + header('Location: index.php?saved=1'); + exit; + } + header('Location: tambah.php?err=' . urlencode($conn->error)); + exit; +} diff --git a/SIG_spbu/assets/map-base.js b/SIG_spbu/assets/map-base.js new file mode 100644 index 0000000..53eeb55 --- /dev/null +++ b/SIG_spbu/assets/map-base.js @@ -0,0 +1,40 @@ +function initBaseLayers(map) { + var baseMap = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap', maxZoom: 19 + }); + var baseSat = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { + attribution: '© Esri', maxZoom: 19 + }); + baseMap.addTo(map); + + document.getElementById('base-map').addEventListener('click', function() { + if (map.hasLayer(baseSat)) map.removeLayer(baseSat); + if (!map.hasLayer(baseMap)) baseMap.addTo(map); + this.classList.add('active'); + document.getElementById('base-sat').classList.remove('active'); + }); + document.getElementById('base-sat').addEventListener('click', function() { + if (map.hasLayer(baseMap)) map.removeLayer(baseMap); + if (!map.hasLayer(baseSat)) baseSat.addTo(map); + this.classList.add('active'); + document.getElementById('base-map').classList.remove('active'); + }); +} + +function makeSpbuIcon(color, size) { + size = size || 18; + var h = size / 2; + return L.divIcon({ + className: '', + html: '
', + iconSize: [size, size], iconAnchor: [h, h], popupAnchor: [0, -12] + }); +} + +function showToast(msg) { + var el = document.getElementById('toast'); + if (!el) return; + el.textContent = msg; + el.classList.add('show'); + setTimeout(function() { el.classList.remove('show'); }, 3000); +} diff --git a/SIG_spbu/assets/spbu.css b/SIG_spbu/assets/spbu.css new file mode 100644 index 0000000..9052219 --- /dev/null +++ b/SIG_spbu/assets/spbu.css @@ -0,0 +1,234 @@ +:root { + --bg: #f1f5f9; --white: #fff; --border: #e2e8f0; + --text: #0f172a; --text2: #475569; --text3: #94a3b8; + --blue: #1d4ed8; --blue-lt: #eff6ff; + --green: #15803d; --green-lt: #f0fdf4; + --red: #b91c1c; --red-lt: #fef2f2; + --sidebar-w: 320px; +} +* { box-sizing: border-box; margin: 0; padding: 0; } +html, body { height: 100%; font-family: 'DM Sans', sans-serif; color: var(--text); background: var(--bg); overflow: hidden; } +body { display: flex; } + +#sidebar { + width: var(--sidebar-w); min-width: var(--sidebar-w); + background: var(--white); border-right: 1px solid var(--border); + display: flex; flex-direction: column; z-index: 200; +} +.sb-head { + padding: 18px 16px 14px; border-bottom: 1px solid var(--border); + background: var(--white); color: var(--text); +} +.sb-head-top { display: flex; align-items: center; gap: 11px; margin-bottom: 12px; } +.sb-logo { + width: 38px; height: 38px; border-radius: 10px; + background: linear-gradient(135deg, var(--blue), #60a5fa); + display: flex; align-items: center; justify-content: center; flex-shrink: 0; + box-shadow: 0 2px 8px rgba(29,78,216,.25); +} +.sb-logo svg { width: 18px; height: 18px; fill: #fff; } +.sb-title h1 { font-size: 14px; font-weight: 700; color: var(--text); } +.sb-title p { font-size: 10.5px; color: var(--text3); margin-top: 2px; } +.sb-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; } +.sb-stat { + background: var(--bg); border: 1px solid var(--border); + border-radius: 8px; padding: 8px 6px; text-align: center; +} +.sb-stat b { display: block; font-size: 16px; font-weight: 800; font-family: 'DM Mono', monospace; line-height: 1; } +.sb-stat span { font-size: 8.5px; color: var(--text3); margin-top: 4px; display: block; text-transform: uppercase; letter-spacing: .3px; font-weight: 600; } +.sb-stat.total b { color: var(--blue); } +.sb-stat.open b { color: var(--green); } +.sb-stat.closed b{ color: var(--red); } + +.sb-section-lbl { + font-size: 9.5px; font-weight: 700; color: var(--text3); + text-transform: uppercase; letter-spacing: .8px; padding: 10px 8px 4px; +} +.sb-item { + display: flex; align-items: center; gap: 9px; padding: 8px 10px; + border-radius: 8px; cursor: pointer; font-size: 13px; font-weight: 500; + color: var(--text2); transition: all .15s; border: 1px solid transparent; text-decoration: none; +} +.sb-item:hover { background: var(--bg); color: var(--text); } +.sb-item.active { background: var(--blue-lt); color: var(--blue); border-color: #bfdbfe; font-weight: 600; } +.sb-item .ico { font-size: 16px; width: 20px; text-align: center; flex-shrink: 0; display: flex; align-items: center; justify-content: center; } + +.sb-body { flex: 1; overflow: hidden; display: flex; flex-direction: column; } +.sb-search { padding: 12px; border-bottom: 1px solid var(--border); } +.sb-search input { + width: 100%; padding: 9px 12px 9px 34px; + border: 1px solid var(--border); border-radius: 8px; font-size: 13px; + outline: none; font-family: inherit; background: var(--bg); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='%2394a3b8' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.099zM6.5 12a5.5 5.5 0 1 1 0-11 5.5 5.5 0 0 1 0 11z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; background-position: 11px center; +} +.sb-search input:focus { border-color: var(--blue); background-color: #fff; } + +.sb-filter { display: flex; padding: 0 12px 10px; gap: 5px; } +.sb-filter button { + flex: 1; padding: 6px 4px; font-size: 11px; font-weight: 600; + border: 1px solid var(--border); border-radius: 6px; background: var(--white); + color: var(--text2); cursor: pointer; font-family: inherit; transition: all .15s; +} +.sb-filter button.active { background: var(--blue); color: #fff; border-color: var(--blue); } + +.sb-list-head { + padding: 0 14px 8px; display: flex; justify-content: space-between; align-items: center; + font-size: 11px; color: var(--text3); font-weight: 600; text-transform: uppercase; letter-spacing: .4px; +} +.sb-list { flex: 1; overflow-y: auto; } +.sb-list::-webkit-scrollbar { width: 4px; } +.sb-list::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; } + +.spbu-item { + padding: 11px 14px; border-bottom: 1px solid #f1f5f9; cursor: pointer; + display: grid; grid-template-columns: auto 1fr auto; gap: 10px; align-items: start; + transition: background .12s; +} +.spbu-item:hover { background: #f8fafc; } +.spbu-item.active { background: var(--blue-lt); border-left: 3px solid var(--blue); padding-left: 11px; } +.spbu-dot { + width: 10px; height: 10px; border-radius: 50%; margin-top: 4px; + border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,.1); +} +.spbu-nama { font-size: 13px; font-weight: 600; line-height: 1.3; } +.spbu-meta { font-size: 11px; color: var(--text3); margin-top: 3px; font-family: 'DM Mono', monospace; } +.spbu-badge { font-size: 10px; font-weight: 700; padding: 3px 7px; border-radius: 5px; white-space: nowrap; } +.badge-green { background: var(--green-lt); color: var(--green); } +.badge-red { background: var(--red-lt); color: var(--red); } +.no-result { padding: 32px 16px; text-align: center; color: var(--text3); font-size: 13px; } + +.sb-foot { + padding: 10px 14px; border-top: 1px solid var(--border); + font-size: 11px; color: var(--text3); display: flex; justify-content: space-between; +} +.sb-foot b { color: var(--text2); } + +/* Add form in sidebar */ +.form-panel { padding: 16px; flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 0; } +.form-panel h3 { font-size: 14px; font-weight: 700; margin-bottom: 4px; } +.form-panel .form-desc { font-size: 12px; color: var(--text2); line-height: 1.5; margin-bottom: 16px; } +.form-group { margin-bottom: 14px; } +.form-group label { + display: block; font-size: 11px; font-weight: 700; color: var(--text3); + text-transform: uppercase; letter-spacing: .4px; margin-bottom: 5px; +} +.form-group input, .form-group select { + width: 100%; padding: 10px 12px; border: 1px solid var(--border); + border-radius: 8px; font-size: 14px; font-family: inherit; outline: none; background: #fff; + transition: border-color .15s, box-shadow .15s; +} +.form-group input:focus, .form-group select:focus { + border-color: var(--blue); box-shadow: 0 0 0 3px rgba(29,78,216,.1); +} +.form-group input[readonly] { background: var(--bg); color: var(--text2); font-family: 'DM Mono', monospace; font-size: 12px; } +.coord-box { + display: grid; grid-template-columns: 1fr 1fr; gap: 8px; +} +.coord-box input { text-align: center; } +.form-alert { + padding: 10px 12px; border-radius: 8px; font-size: 12px; margin-bottom: 14px; + background: var(--red-lt); color: var(--red); border: 1px solid #fecaca; +} +.form-hint { + font-size: 11px; color: var(--text3); padding: 10px 12px; + background: var(--bg); border-radius: 8px; border: 1px solid var(--border); + line-height: 1.5; margin-top: auto; +} +.form-hint.active { border-color: #93c5fd; background: var(--blue-lt); color: var(--blue); } +.form-actions { display: flex; gap: 8px; margin-top: 16px; } +.btn-primary { + flex: 1; padding: 11px; background: var(--blue); color: #fff; border: none; + border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; font-family: inherit; +} +.btn-primary:hover { background: #1e40af; } +.btn-primary:disabled { opacity: .5; cursor: not-allowed; } +.btn-secondary { + padding: 11px 14px; background: #f1f5f9; color: var(--text2); border: 1px solid var(--border); + border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; font-family: inherit; +} + +#map-area { flex: 1; position: relative; min-width: 0; display: flex; flex-direction: column; height: 100%; } +#map { flex: 1; min-height: 0; width: 100%; position: relative; } + +#map-controls { + position: absolute; top: 14px; right: 14px; z-index: 800; + background: var(--white); border: 1px solid var(--border); + border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,.1); + width: 190px; overflow: hidden; font-size: 12px; +} +.mc-section { padding: 10px 12px; border-bottom: 1px solid var(--border); } +.mc-section:last-child { border-bottom: none; } +.mc-label { + font-size: 10px; font-weight: 700; color: var(--text3); + text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px; +} +.mc-row { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; cursor: pointer; color: var(--text2); } +.mc-row:last-child { margin-bottom: 0; } +.mc-row input { accent-color: var(--blue); } +.mc-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; } +.mc-base { display: flex; gap: 5px; } +.mc-base-btn { + flex: 1; padding: 7px 4px; border: 1px solid var(--border); border-radius: 6px; + background: var(--white); font-size: 11px; font-weight: 600; color: var(--text2); + cursor: pointer; font-family: inherit; transition: all .15s; +} +.mc-base-btn.active { background: var(--blue); color: #fff; border-color: var(--blue); } + +#map-hint { + position: absolute; bottom: 24px; left: 50%; transform: translateX(-50%); + z-index: 800; background: rgba(15,23,42,.88); color: #fff; + padding: 8px 16px; border-radius: 8px; font-size: 12px; pointer-events: none; +} +#toast { + position: fixed; bottom: 20px; right: 20px; z-index: 9000; + background: #0f172a; color: #fff; padding: 11px 16px; border-radius: 8px; + font-size: 13px; display: none; box-shadow: 0 4px 16px rgba(0,0,0,.2); +} +#toast.show { display: block; } + +#edit-modal { + display: none; position: fixed; inset: 0; z-index: 9999; + background: rgba(15,23,42,.4); align-items: center; justify-content: center; padding: 20px; +} +#edit-modal.active { display: flex; } +#edit-box { + background: #fff; border-radius: 12px; padding: 24px; + width: 100%; max-width: 380px; box-shadow: 0 16px 48px rgba(0,0,0,.18); +} +#edit-box h3 { font-size: 16px; font-weight: 700; margin-bottom: 16px; } +#edit-box label { + display: block; font-size: 11px; font-weight: 700; color: var(--text3); + text-transform: uppercase; letter-spacing: .4px; margin: 12px 0 4px; +} +#edit-box input, #edit-box select { + width: 100%; padding: 9px 12px; border: 1px solid var(--border); + border-radius: 8px; font-size: 14px; font-family: inherit; outline: none; +} +#edit-box input:focus, #edit-box select:focus { border-color: var(--blue); } +.edit-btns { display: flex; gap: 8px; margin-top: 20px; } +.edit-btns button { + flex: 1; padding: 10px; border-radius: 8px; font-size: 13px; + font-weight: 600; cursor: pointer; font-family: inherit; border: none; +} +.btn-save { background: var(--blue); color: #fff; } +.btn-cancel { background: #f1f5f9; color: var(--text2); } + +.popup-wrap { font-family: 'DM Sans', sans-serif; min-width: 190px; } +.popup-title { font-size: 14px; font-weight: 700; margin-bottom: 6px; } +.popup-row { font-size: 12px; color: var(--text2); margin-bottom: 3px; } +.popup-coord { font-size: 11px; color: var(--text3); font-family: 'DM Mono', monospace; margin: 4px 0 8px; } +.popup-badge { display: inline-block; padding: 2px 8px; border-radius: 5px; font-size: 10px; font-weight: 700; } +.popup-actions { display: flex; gap: 6px; margin-top: 10px; } +.btn-edit, .btn-delete { + flex: 1; border: none; padding: 7px; border-radius: 6px; + font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit; +} +.btn-edit { background: var(--blue); color: #fff; } +.btn-delete { background: var(--red); color: #fff; } +.btn-yes, .btn-no { + border: none; padding: 7px 16px; border-radius: 6px; + font-size: 12px; font-weight: 600; cursor: pointer; margin: 3px; font-family: inherit; +} +.btn-yes { background: var(--green); color: #fff; } +.btn-no { background: #e2e8f0; color: var(--text2); } diff --git a/SIG_spbu/db.php b/SIG_spbu/db.php new file mode 100644 index 0000000..2749a38 --- /dev/null +++ b/SIG_spbu/db.php @@ -0,0 +1,7 @@ +connect_error) { + die("Koneksi gagal: " . $conn->connect_error); +} +?> \ No newline at end of file diff --git a/SIG_spbu/includes/confirm-modal.php b/SIG_spbu/includes/confirm-modal.php new file mode 100644 index 0000000..a3febb2 --- /dev/null +++ b/SIG_spbu/includes/confirm-modal.php @@ -0,0 +1,115 @@ + + + diff --git a/SIG_spbu/includes/map-controls.php b/SIG_spbu/includes/map-controls.php new file mode 100644 index 0000000..8462b64 --- /dev/null +++ b/SIG_spbu/includes/map-controls.php @@ -0,0 +1,14 @@ +
+
+
Layer SPBU
+ + +
+
+
Tampilan Peta
+
+ + +
+
+
diff --git a/SIG_spbu/includes/sidebar.php b/SIG_spbu/includes/sidebar.php new file mode 100644 index 0000000..90401dd --- /dev/null +++ b/SIG_spbu/includes/sidebar.php @@ -0,0 +1,44 @@ + + + +
+ +
+
+ +
Peta GIS Kanalisasi SPBU
+
+ +
+ +
+ +
+ +
+
+

Edit Data SPBU

+ + + + + + + +
+ + +
+
+
+ +
+ + + + + diff --git a/SIG_spbu/tambah.php b/SIG_spbu/tambah.php new file mode 100644 index 0000000..5741d77 --- /dev/null +++ b/SIG_spbu/tambah.php @@ -0,0 +1,149 @@ + + + + + + +Tambah SPBU — Sistem Informasi Geografis SPBU + + + + + + + + +
+
+

Input Data SPBU

+

Klik titik pada peta untuk menentukan koordinat, lalu lengkapi formulir di bawah.

+
+ +
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ + +
+ +
+ + +
+ +
Belum ada lokasi dipilih — klik peta di sebelah kanan
+
+
+
+
+ Operasional 24 jam: % + +
+ + + Kembali ke Portal + +
+ + +
+ +
+
+
Tambah Baru Lokasi Depot SPBU
+
+ +
+ +
+ +
Klik peta untuk menandai lokasi SPBU
+
+ +
+ + + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..cf60fa3 --- /dev/null +++ b/index.php @@ -0,0 +1,202 @@ + + + + + +WebGIS Pontianak — Portal + + + + + + + +
+
+ + Sistem Informasi Geografis +
+

Portal Terpadu WebGIS

+

Pusat akses untuk aplikasi pemetaan wilayah Pontianak, Kalimantan Barat. Pilih modul di bawah untuk membuka project yang sesuai dengan kebutuhan Anda.

+
+ +
+ +
+ + + + +