Diskussion:Nervseite: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
Zeile 29: Zeile 29:
 
** sanitizer: <inethost/> = hostname vom inet-HNA fuer nervseite
 
** sanitizer: <inethost/> = hostname vom inet-HNA fuer nervseite
 
** nervseite: wo es geht, bilder benutzen
 
** nervseite: wo es geht, bilder benutzen
** cron sauberer programmieren
+
** cron sauberer programmieren (selbstlernend,dateiname enthaelt minuten)
 
** speichersparendere und besser zu durchschauende nervseite
 
** speichersparendere und besser zu durchschauende nervseite
 +
** nervseite: nach "ich will ins internet" umleitung auf startseite inet-gateway (172.16.1.80)
  
 
====Version ??juli2006-??uhr??====
 
====Version ??juli2006-??uhr??====

Version vom 28. Juli 2006, 09:47 Uhr

Roadmap - Wohin geht die Reise?

  • momentan basierte die Software auf der FreifunkFirmware v1.2.5
  • Allgemeinere Regeln, so das die Software auch in anderen Staedten genutzt werden koennte
  • Speichersparen wo es nur geht / auf AWK verzichten
  • Die Software soll auf Geraeten mit 2mb Flash bzw. 8mb RAM laufen. Auch auf dem WRT54g v5.
  • es muss (?) zwei verschiedene Versionen geben, fuer Geraete mit viel und mit wenig Speicher
  • Mehrsprachigkeit

Was kann diese Firmware

  • sie baut auf der Freifunk-Firmware v1.2.5 auf
  • im Wiki veraenderbare Nervseite die jeder Benutzer mindestens einmal taeglich sieht
    • die Abhaengig vom Betrachter (registrierter Laptop, Laptop oder Kabelrechner) anderes aussieht
  • dezentrale Verteilung der MAC-Adressen von registrierten Laptop-Nutzern
  • integrierte grafische Statistik (Datenverkehr etc.)
  • integriertes Accounting (Datenverkehr pro IP)

ToDo fuer Bastian & die Firmwarefrickler

-trx.bin

  • Vor dem naechsten Release muss noch folgendes gemacht werden:
    • registrator: automatisches backup der registrierungsdaten per mail, nur wenn sich DB aendert.
    • registratorclient: schutz vor auslesen aus dem internet,nur 127/104/10 im ersten Remote-IP-Oktett zulassen
    • registrator+client verschmelzen
    • easyconfig: andere staedte - hinweis schreiben (soll nicht funzen)
    • easyconfig: warnung bei passwort "admin" -> nervseite
    • sanitizer: knotenbetreiber-notiz & kontaktdaten & personalisierbarer teil (=ff_adm_note) in nervseite integrieren
    • sanitizer: <inethost/> = hostname vom inet-HNA fuer nervseite
    • nervseite: wo es geht, bilder benutzen
    • cron sauberer programmieren (selbstlernend,dateiname enthaelt minuten)
    • speichersparendere und besser zu durchschauende nervseite
    • nervseite: nach "ich will ins internet" umleitung auf startseite inet-gateway (172.16.1.80)

Version ??juli2006-??uhr??

  • FERTIG , URL der Nervseite aendern
  • FERTIG , registrator: mehr logging
  • FERTIG , BUG: registrator: blockiert manchmal, weil er _denkt_ er wird gerade benutzt
  • FERTIG , KISS: infoseitengenerierung nicht ueber wget sondern direkt machen
  • FERTIG , KISS: nervseiten-vorlage aus SVN heraustrennen
  • FERTIG , KISS: nervseiten-vorlage _ungepackt_ ins firmware-image legen
  • FERTIG , accounting integrieren
  • nightly_build - 1.748.992 Bytes
  • FERTIG , ipk's, binarys und bilder aus dem SVN rausnehmen
  • FERTIG , firewall: paket mit ziel=WAN-Netz und quelle NICHT eigenes LAN = verbieten
  • FERTIG , registrator: netcat integrieren

Version 07juli2006-19uhr54

  • Download - 1.732.608 Bytes
  • FERTIG , nervseite+nervnerv joinen , nervseite holen = cgi-bin-nervseite?0
  • FERTIG , sanitizer: <walledgarden/> = Liste der freien Seiten fixen
  • FERTIG , heartbeat: fon-hack,speicherauslastung,traceroute inetgateway
  • FERTIG , domains einheitlich auf ".olsr"
  • FERTIG , maclistenverteilung: alle nachbarn probieren
  • FERTIG , nervseite: button "ich will ins internet"
  • FERTIG , registrator: mechanismus einbauen,damit nur ein nutzer gleichzeitig drauf zugreifen kann
  • FERTIG , easyconfig: knotennummer aus nvram-variable und nicht aus domain bestimmen
  • FERTIG , easyconfig: leerzeichen in kontaktdaten machten probleme
  • FERTIG , cron: skript saeubern und unnoetige /tmp/-kopie loeschen
  • FERTIG , statistik: integrieren
  • FERTIG , ipk-pakete nach /ipk und dann das verzeichnis loeschen.
  • FERTIG , BUG behoben: content-type wird immer doppelt ausgegeben,wenn man nervseite auf entfernten knoten abruft
  • FERTIG , easyconfig: wan_dns bei DSL wieder auf 141.54.1.3
  • FERTIG , easyconfig: sonderzeichen im hostnamen filtern
  • FERTIG , kleineres oder gar kein startbild

Version 30juni2006-13uhr33

  • Download - 1.531.904 Bytes
  • FERTIG , neue weimarnetzeinstellungen ab 01.07.2006: FunkKanal-5, 02:ca:ca:00:ba:be
  • nervseiten: template durch den sanitizer jagen
  • FERTIG , syslog vergroessern, logrotate auch anzeigen
  • FERTIG , funktuning auch ohne neustart
  • FERTIG , infopage: beim generieren wget nach 5 min killen
  • FERTIG , eigenes Startbild
  • FERTIG , BUG: nervseite: wenn nach dem holen dateigroesse = 0,dann verwerfen
  • FERTIG , sanitizer: adresse des geraets fuer nichtrelative links
  • FERTIG , infopage: rts_real/cts_real
  • FERTIG , walledgarden: iptables-fehlermeldungen unterdruecken
  • FERTIG , infopage: "override funkparameter_tuning"
  • FERTIG , infopage: force-11mbit
  • FERTIG , registrator: k-modus
  • FERTIG , infopage: alle adressen aus /proc/net/arp anzeigen
  • FERTIG , nervseite: bei zu vielen verbindungen,uebersicht generieren
  • FERTIG , nervseite: beim sperren anzeigen,wieviele verbindungen man offen hatte
  • FERTIG , registrierung: massenmailmodus
  • infopage: mehr logging,auch beim automatisch generieren
  • FERTIG , FON-Hack integrieren,damit billige FON-Router ganz normal weiterfunktionieren 8-)
  • FERTIG , BUG: warum leitet ausgefallener DSLer keinen DNS-inet-verkehr weiter? Auf Eselbremse darf kein DNS gestartet sein!?
  • FERTIG , batman: mehr logging
  • FERTIG , BUG: batman auf unbenutztem alias-interface starten, WIFI-DEV:2
  • FERTIG , dnsmasq: seltener hosts einlesen lassen. - alle 30min - Hostnamen werden erst nach 2 Stunden inaktivitaet geloescht
  • FERTIG , infopage: schnellmodus fuer alle netzknoten,die inet einspeisen
  • FERTIG , infopage: jens-modus (alle routen + etx)
  • FERTIG , infopage: jens2-modus (alle netzwerkverbindungen)
  • FERTIG , infopage: firmware-version auslesen
  • FERTIG , unixzeit+ 'weimarnetz' in den dateinamen/startseite integrieren
  • FERTIG , wenn viel speicher da ist,syslog vergroessern
  • FERTIG , CRON: kein cronskript mit exit verlassen!
  • FERTIG , easyconfig: Serveripadressen +1 unschön
  • FERTIG , Batman 0.06 integrieren
  • FERTIG , infopage: Baraucke-Modus um holen der macliste zu erzwingen
  • FERTIG , sanitizer: iframes ausfiltern
  • FERTIG , Nervseite: mehr logging
  • FERTIG , infopage: version/datum/zeit der macliste abfragbar
  • FERTIG , infopage: tracert zu beliebiger IP beauftragen
  • FERTIG , infopage: Speichertest nur bei Livedaten
  • FERTIG, Datumsfeld in MACadressen-liste
  • FERTIG , sanitizer "<script-tag" ueberpruefen
  • FERTIG , too_many_Verbindungen: zwischencheck mit 3mins Pause
  • FERTIG , MAC-Verteil-Mechanismus / Registrierung, siehe Fries43-ToDo
  • FERTIG , Speichercheck an kritischen stellen
  • FERTIG , neue nvram variablen fuer GPS
  • FERTIG , neue nvram variablen fuer netzknotennummer
  • FERTIG, WAN-DHCP aus,wenn kein inet zur verfuegung gestellt werden soll (speicher!)
  • FERTIG , wenn man auf entfernten router geht (und nicht auf seinen eigenen) soll keine nervseite kommen,sondern fff-startseite
  • FERTIG, sanitizer: tags auf nervseite,die script (javascript!) einschalten
  • FERTIG , wenn olsr-knoten auf router geht,soll es behandelt werden wie olsr-router und nicht wie mobiler knoten
  • FERTIG , registrierung integrieren
  • FERTIG , besseres default-template anzeigen,wenn nervseite noch nicht geladen ist
  • FERTIG , auf cron verzichten
  • FERTIG , eigene weimarnetz-firmware bauen
  • FERTIG , 10min laptops soll auf 15mins hochgesetzt werden
  • FERTIG , Namensaufloesung im internen Netz: DNSmasq soll per sigHUP alle minute /etc/hosts neu einlesen
  • FERTIG , laptops: probe_response_fix integrieren
  • FERTIG , forschung: batman2 integrieren inkl. "notaus" per WIKI
  • FERTIG , tcp-westwood integrieren

ToDo - nicht ganz so wichtig

    • dem Kunstturm eine Denkmalschutz-Plakette (emailliert) kaufen
    • registrator: BUG: massenmail manchmal ohne Absender
    • registrator: Vertrauensbaum zeichnen lassen
    • registrator: massenmail wegen falschen GPS-koords
    • easyconfig: lanifnames Problem lösen
    • easyconfig: GPS - anonym Hinweis und bessere Check auf Plausibilität
    • easyconfig: neustart sofort
    • easyconfig: rechnernamen ankuendigen / Server in /etc/local.hosts integrieren / eingabefeld ueber javascript sichtbar
    • easyconfig: jeder Router bekommt einen Standardnamen _neben_ dem persoenlichen Hostnamen
    • easyconfig: PicoPeeringAgreement abnicken - ( gesehen, gelacht, F8 )
    • easyconfig: modus um kindergarten in der shell auszufuehren
    • nervseite: dezentraler verteilmechanismus aehnlich macliste
    • nervseite: sauberes erkennen "aus welchem subnetz kommt remote-ip"
    • nervseite: extra nerv, wenn noch kein wiki-eintrag zum benutzer/knoten existiert
    • infopage: auf wunsch maschinenlesbarer output
    • infopage: funktion einbauen,um einen infopage-befehl automatisch an alle Router zu senden
    • infopage: schnell alle nachbarn anzeigen lassen
    • infopage: netzkarte mit gps-infos malen
    • infopage: umleitung der erzeugten infoseite zum httpd und /tmp/ und dann move per tee + unixtime_historie
    • weimarnetz-version beim startup aus index.html in /www/version "retten"
    • sanitizer: sms-versende-knopf
    • sanitizer: bruellbox als extra <tag>
    • sanitizer: <tag> wer/wieviel ist gerade im DC++ online
    • firewall: besseres & allgemeineres Design der Firewall/iptables/Umleitungs-Regeln
    • VPN: integrieren. server & client , client geht nur wenn man auch inet anbietet
    • VPN: Freifunk-VPN-Config integrieren
      • Ziel: nur noch vpn.ipk und vpn-zertifikate draufkopieren und fertig iss...
      • OLSR-Timing ueber VPN extra langsam und kuenstlich schlechter ETX-Wert
    • tc: trafficshaping auf wireless-ebene / level7-filter / DC++ niedrig / holm_weiss_wie
    • sendeleistung: algorithmus fuer sendeleistung/mrate finden
      • ueber entfernung zum nachbarn (GPS!) entscheiden, ob verbindung wichtig ist,oder nicht.
      • gute,bandbreitige (goodput/throughput) verbindungen wichtiger als 1mbit?
      • nachts einen messmodus einfuehren?
    • netzwerkmasken berichtigen: 104.63.0.0/16 & laptops
    • verschiedene Funktionen ueber das Wiki/nervseite ein/ausschaltbar machen:
      • mrate11,batman,txpwr,rateset,rate,selektive ausnahmen?
    • uhrzeit & nodeliste & macliste & nervseite_holen zusammenlegen
    • GPS-Daten als 1ten hostnamen und Routername als 2ten hostnamen eintragen,um GPS-Daten dezentral zu verteilen. evtl. auch an die broadcast-addy den GPS-Hostnamen vergeben. evtl. auch olsrd-service-plugin dafuer benutzen

Firmware-Experimente

  • experimente mit SSH einsparen etc.
  • Groessenvergleich der Dateien im root.tgz:
ls -lR|awk '{if($2=="")D=substr($0,2,length($0)-2);print $5,D"/"$9;m=m+$5}END{print m" Bytes"}'|sort -n

10283 /sbin/mtd
10687 /www/cgi-bin-status.html
11608 /etc/init.d/S45firewall
11772 /lib/libcrypt-0.9.28.so
12555 /sbin/wifi
12599 /www/cgi-bin/freifunk-upload
12670 /www/images/intro.jpg
14838 /www/cgi-bin/olsrd.html
15844 /www/cgi-bin/wifi.html
16750 /usr/lib/olsrd_nameservice.so.0.2
18162 /lib/ld-uClibc-0.9.28.so
20860 /www/cgi-bin/ff-web/template.pl
25016 /lib/libm-0.9.28.so
25255 /usr/sbin/brctl
28067 /bin/ipkg
28258 /usr/lib/libshared.so
30898 /usr/lib/olsrd_httpinfo.so.0.1
40176 /usr/lib/ipkg/lists/freifunk
54999 /usr/sbin/iptables
58443 /usr/sbin/tc
87907 /usr/sbin/wl
96431 /usr/sbin/dnsmasq
104759 /usr/sbin/ip
145616 /usr/sbin/olsrd
216571 /usr/bin/dropbearmulti
347960 /lib/libuClibc-0.9.28.so
492820 /bin/busybox
  • fff125-plain.trx = 1.437.696 bytes = Original
  • fff125-weimar.trx = 1.531.904 bytes = 94kb mehr
  • fff125-we_low.trx = 1.388.544 bytes = 51kb weniger
  • fff125-nixssh.trx = 1.368.064 bytes = 69kb weniger
    • (ohne ./usr/bin:/dropbearmulti)
  • fff125-mini.trx = 1.323.008 bytes = 115kb weniger
    • (ohne /lists/freifunk,dropbearmulti,/ff-web/template.pl,intro.jpg,libcrypt,ipkg,mtd,mtdkill)
  • fff13-plain.trx = 1.372.160 bytes = Original
  • fff13-nixssh.trx = 1.298.432 bytes = 74kb weniger
    • (ohne ./usr/bin:/dropbearmulti)
  • fff13-mini.trx = 1.269.760 bytes = 103kb weniger
    • (ohne /lists/freifunk,dropbearmulti,intro.jpg,libcrypt,ipkg,mtd,mtdkill)

Notizzettel zum bauen einer neuen Firmware

  • auf dem Router per SSH einloggen und alle Aenderungen machen und archiv.tar.gz erzeugen
cd /tmp/
wget -O - "http://wireless.subsignal.org/index.php/Nervseite"|sed '/-- NERVSEITE:START --/,/-- NERVSEITE_LEEREKONTAKTDATEN:END --/!d' >/tmp/nervtemp
tar cvzf /www/nervseite-vorlage.tgz nervtemp
cd /
wget http://www.stud.tu-ilmenau.de/~babi-mtr/vip-naxal/ipk.tgz
tar xvzf ipk.tgz
rm ipk.tgz
tar cvzhf www/fw.tgz usr/sbin/*weimar* etc/init.d/*weimar* www/*nerv* www/images/in* www/*info* www/*reg* www/cgi-bin/*kinder* ipk/* usr/bin/nc
usr/bin/nc
ipk/zlib_1.1.4-1_mipsel.ipk
ipk/rrdtool1_1.0.50_mipsel.ipk
ipk/rrdcollect_0.2.3_mipsel.ipk
ipk/rrdcgi1_1.0.50_mipsel.ipk
ipk/probe-response-fix_0.1_mipsel.ipk
ipk/librrd1_1.0.50_mipsel.ipk
ipk/freifunk-statistics-de_1.2.5_mipsel.ipk
ipk/batman2_0.06-1_mipsel.ipk
www/cgi-bin/kindergarten.html
www/cgi-bin/15-kindergarten
www/cgi-bin-registratorclient
www/cgi-bin-registrator.html
www/cgi-bin-info.html
www/images/intro.jpg
www/nervseite-vorlage.tgz
www/cgi-bin-nervseite
etc/init.d/S70.weimarnetz.funkparameter_tuning.sh
etc/init.d/S60.weimarnetz.webserver_einstellungen.sh
etc/init.d/S52.weimarnetz.speichersparen.sh
etc/init.d/S52.weimarnetz.crond_ersetzen.sh
etc/init.d/S51.weimarnetz.pakete_installieren.sh
etc/init.d/S51.weimarnetz.kernellog_retten.sh
etc/init.d/S51.weimarnetz.iptables_bzw_nervseite_umleitungen.sh
etc/init.d/S51.weimarnetz.hna4_ankuendigungen.sh
etc/init.d/S51.weimarnetz.dateien_anlegen.sh
usr/sbin/cron.weimarnetz.43200.3.lebenszeichen.sh
usr/sbin/cron.weimarnetz.43200.2.holen_der_nervseite.sh
usr/sbin/cron.weimarnetz.43200.1.generate_infopage.sh
usr/sbin/cron.weimarnetz.01800.3.namendienst_neuanstossen.sh
usr/sbin/cron.weimarnetz.01800.2.batman_starten.sh
usr/sbin/cron.weimarnetz.01800.1.holen_der_macliste.sh
usr/sbin/cron.weimarnetz.00060.3.wann_sehen_laptops_nervseite.sh
usr/sbin/cron.weimarnetz.00060.2.wann_sehen_lanrechner_nervseite.sh
usr/sbin/cron.weimarnetz.00060.1.check_too_many_connections.sh
  • kit von sven-ola auf eigenen Rechner herunterladen und entpacken
wget http://212.222.128.68/sven-ola/ipkg/_kit/freifunk-openwrt-kit-1.2.5-de.tgz
tar xvzf freifunk-openwrt-kit-1.2.5-de.tgz
cd freifunk-openwrt-kit-1.2.5-de
rm -fR weimar
mkdir weimar
cd weimar
tar xvzf ../root.tgz
  • nun aus dem SVN oder direkt vom Router die zusaetzlichen Dateien herunterladen und entpacken
ROUTER=$(route|awk '/default/{printf $2}')
wget "http://$ROUTER/fw.tgz"
tar xvzf fw.tgz
rm fw.tgz
  • nun alles wieder einpacken und neues firmwareimage erzeugen
tar cvzf ../root.tgz *
cd ..
X=$(date -Ih|awk -F[-T] '{print($1-1970)*31536000+$2*2592000+$3*86400+$4*3600}')
Z=$(date -R|awk -F"[, :]" '{printf("%s%s%s-%suhr%s",$3,tolower($4),$5,$6,$7)}')
N="weimarnetz-edition-$X-$Z-trx.bin"
./gen-openwrt -v $N trx >$N

* und schmalspurversion (ohne SSH und intro-bild) bauen:

cd weimar
rm usr/bin/dropbear*
rm www/images/intro.jpg
rm -fR www/cgi-bin/ff-web*
rm lib/libcrypt*
tar cvzf ../root.tgz *
cd ..
N="weimarnetz-schmalspur-edition-$X-$Z-trx.bin"
./gen-openwrt -v $N trx >$N

  • wieder fix alles loeschen
cd ..
rm -fR freifunk-openwrt-kit-1.2.5-de
rm freifunk-openwrt-kit-1.2.5-de.tgz
  • und gleich noch ins SVN hochladen
svn checkout https://svn.sourceforge.net/svnroot/weimarnetz-fw/
cd weimarnetz-fw/trunk/firmware/
rm -fR *
svn rm *
wget "http://$ROUTER/fw.tgz"
tar xvzf fw.tgz
rm fw.tgz
svn add *
svn commit -m "$X-$Z"

Arbeit,die andere dem Bastian mal abnehmen koennten

  • css von nervseite und freifunk-firmware sollte gleich sein
    • also eigene .css-Datei entwerfen, die das ff.css ersetzt
  • verschiedene nervseiten ausformulieren
  • walled garden ausbauen
    • fuer die freigeschaltete webseiten muessen die IPs rausgesucht werden
    • einfach mit einem gesperrten/unregistrierten laptop an den eigenen netzknoten gehen und mit einem kabelrechner auf der nervseite nach und nach die IPs hinzufuegen und ueber cgi-bin-nervnerv den walled garden neu einlesen lassen und mit dem schleppi testen,ob man auf die seiten kommt.
    • Achtung: viele Webseiten haben mehrere IPs

Technischer Vorschlag Feedback auf der Nervseite

ich hab mir mal überlegt wie man das machen könnte: Ein Formular ist schnell gebaut, doch das Formular muss irgendwie an einen Zentralen Rechner. Wie wärs wenn wir dazu eine PHP-Seite auf dem Weimarnetzserver legen, die die Formulardaten speichern kann und dann natürlich auch wieder ausgeben kann. Das ist ein sehr leichtes ding (ich würde das ganze auch dann gleich mal schreiben). Einbinden könnte man das ganze dann per IFRAME, ist zwar nicht ganz so optimal, aber immerhin ein erster anfang...

Das ganze ist schon geloest: Jeder Linksys stellt ueber die "infoseite" (cgi-bin-info.html?w_CHAT_IRGENDEIN_TEXT) schon die moeglichkeit zur verfuegung texte abzuspeichern. als Formularziel wird einfach der naechste DSLer genommen (http://172.16.1.80). Die Feedback-Seite wird einfach ueber die "infoseite" (cgi-bin-info.html?r_CHAT_) wieder generiert). Das laeuft dann unter "Feedback,Shoutbox oder Bruellbox". fries43 18:11, 31. Mai 2006 (CEST)

Nervseiten-Template

Wichtig: " schafft der Webserver auf den Linksys'sen irgendwie nicht. Dafür kann man aber das einfache ' verwenden.

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
   'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>

<html xmlns='http://www.w3.org/1999/xhtml' lang='de' xml:lang='de'><head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>
<title>Weimarnetz</title>

<style type='text/css'>
body {   background-color:White;   color:Black;   font-size:13px;   font-family: Lucida, Helvetica, Tahoma, sans serif;   margin:0px;   left-margin: 10px; }
a { color: #6688AA; }
h1 { margin: 0px;  font-size: 18px;  float:right;  text-align:right; }
</style>

</head>
<body>

<div style='background-color:#6688AA; padding:10px; border-bottom:1px Gray solid; margin-bottom:10px;'><h1>Willkommen im Weimarnetz<br/>Welcome at Wireless Weimar</h1><img src='http://wireless.subsignal.org/skins/common/images/wirelesslogo-transp.png' alt='Logo Weimarnetz' style='vertical-align:middle;' width='135' height='44'/></div>

<div style='float:left; width:1%'> </div>
<div style='float:left; width:35%'>GERMAN</div>
<div style='float:left; width:4%'> </div>
<div style='float:left; width:35%'>ENGLISH</div>
<div style='float:left; width:4%'> </div>
<div style='float:left; width:20%'>FEEDBACK</div>
<div style='float:left; width:1%'> </div>

<div style='clear:both; background-color:#F7F8FF; border-top:1px Gray solid; border-bottom:1px Gray solid;  padding:10px;'>Wireless Links: <a href='http://weimarnetz.de'>Weimarnetz-Wiki</a> / <a href='http://wireless.subsignal.org/index.php/Spenden'>Spenden/Donation</a> | More Links <a href='http://wikipedia.org'>Wikipedia</a> / <a href='http://www.heise.de'>Heise.de</a> / <a href='http://www.maporama.com'>Maporama.com</a> </div>


</body>
</html>