From f3b7e588e127774e85ebe244ca6ae22d8a8b25e5 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 8 May 2008 16:07:00 +0000 Subject: [PATCH] * WTF SVN oO --- modules/freifunk/Makefile | 2 - modules/freifunk/root/etc/config/freifunk | 25 -- .../freifunk/root/etc/init.d/luci_freifunk | 91 ------ .../src/controller/admin/index/wizard.lua | 171 ----------- .../freifunk/src/controller/public/index.lua | 1 - .../freifunk/src/controller/public/olsr.lua | 137 --------- .../freifunk/src/controller/public/status.lua | 21 -- .../freifunk/src/controller/rpc/luciinfo.lua | 41 --- .../freifunk/src/controller/sudo/status.lua | 1 - .../freifunk/src/i18n/admin_index_contact.en | 11 - .../src/model/cbi/admin_index/contact.lua | 18 -- .../src/model/cbi/admin_index/freifunk.lua | 23 -- .../freifunk/src/model/menu/10freifunk.lua | 18 -- .../src/view/public_index/contact.htm | 13 - .../freifunk/src/view/public_index/index.htm | 11 - .../src/view/public_olsr/error_olsr.htm | 6 - modules/freifunk/src/view/public_olsr/hna.htm | 17 -- .../freifunk/src/view/public_olsr/index.htm | 43 --- modules/freifunk/src/view/public_olsr/mid.htm | 17 -- .../freifunk/src/view/public_olsr/routes.htm | 36 --- .../src/view/public_olsr/topology.htm | 23 -- .../freifunk/src/view/public_status/index.htm | 59 ---- .../src/view/public_status/iwscan.htm | 21 -- .../src/view/public_status/routes.htm | 28 -- .../src/view/sudo_status/iwconfig.htm | 21 -- .../freifunk/src/view/sudo_status/iwscan.htm | 22 -- themes/fledermaus/Makefile | 2 - .../root/www/ffluci/media/cascade.css | 274 ------------------ .../fledermaus/root/www/ffluci/media/cbi.js | 42 --- .../fledermaus/root/www/ffluci/media/logo.png | Bin 4002 -> 0 bytes 30 files changed, 1195 deletions(-) delete mode 100644 modules/freifunk/Makefile delete mode 100644 modules/freifunk/root/etc/config/freifunk delete mode 100644 modules/freifunk/root/etc/init.d/luci_freifunk delete mode 100644 modules/freifunk/src/controller/admin/index/wizard.lua delete mode 100644 modules/freifunk/src/controller/public/index.lua delete mode 100644 modules/freifunk/src/controller/public/olsr.lua delete mode 100644 modules/freifunk/src/controller/public/status.lua delete mode 100644 modules/freifunk/src/controller/rpc/luciinfo.lua delete mode 100644 modules/freifunk/src/controller/sudo/status.lua delete mode 100644 modules/freifunk/src/i18n/admin_index_contact.en delete mode 100644 modules/freifunk/src/model/cbi/admin_index/contact.lua delete mode 100644 modules/freifunk/src/model/cbi/admin_index/freifunk.lua delete mode 100644 modules/freifunk/src/model/menu/10freifunk.lua delete mode 100644 modules/freifunk/src/view/public_index/contact.htm delete mode 100644 modules/freifunk/src/view/public_index/index.htm delete mode 100644 modules/freifunk/src/view/public_olsr/error_olsr.htm delete mode 100644 modules/freifunk/src/view/public_olsr/hna.htm delete mode 100644 modules/freifunk/src/view/public_olsr/index.htm delete mode 100644 modules/freifunk/src/view/public_olsr/mid.htm delete mode 100644 modules/freifunk/src/view/public_olsr/routes.htm delete mode 100644 modules/freifunk/src/view/public_olsr/topology.htm delete mode 100644 modules/freifunk/src/view/public_status/index.htm delete mode 100644 modules/freifunk/src/view/public_status/iwscan.htm delete mode 100644 modules/freifunk/src/view/public_status/routes.htm delete mode 100644 modules/freifunk/src/view/sudo_status/iwconfig.htm delete mode 100644 modules/freifunk/src/view/sudo_status/iwscan.htm delete mode 100644 themes/fledermaus/Makefile delete mode 100644 themes/fledermaus/root/www/ffluci/media/cascade.css delete mode 100644 themes/fledermaus/root/www/ffluci/media/cbi.js delete mode 100644 themes/fledermaus/root/www/ffluci/media/logo.png diff --git a/modules/freifunk/Makefile b/modules/freifunk/Makefile deleted file mode 100644 index 81a96f6a8..000000000 --- a/modules/freifunk/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -include ../../build/config.mk -include ../../build/module.mk \ No newline at end of file diff --git a/modules/freifunk/root/etc/config/freifunk b/modules/freifunk/root/etc/config/freifunk deleted file mode 100644 index 01b83f2c7..000000000 --- a/modules/freifunk/root/etc/config/freifunk +++ /dev/null @@ -1,25 +0,0 @@ -config public contact - option nickname - option name - option mail - option phone - option location - option geo - option note - -config public community - option name "Freifunk Halle" - option homepage http://halle.freifunk.net - option essid halle.freifunk.net - option bssid 02:CA:FF:EE:BA:BE - option realm netz.freifunk-halle.net - option channel 1 - option net 104.0.0.0 - option mask 255.0.0.0 - option dhcp 10.0.0.0 - option dhcpmask 255.255.255.0 - option dns "88.198.178.18 141.54.1.1 212.204.49.83 208.67.220.220 208.67.222.222" - -config settings routing - option internal 0 - option internet 0 diff --git a/modules/freifunk/root/etc/init.d/luci_freifunk b/modules/freifunk/root/etc/init.d/luci_freifunk deleted file mode 100644 index 38779cb8b..000000000 --- a/modules/freifunk/root/etc/init.d/luci_freifunk +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/sh /etc/rc.common -START=70 - -start() { - include /lib/network - scan_interfaces - - - ### Read interface names - config_get wanif wan ifname - config_get lanif lan ifname - config_get ffif ff ifname - config_get ffdif ffdhcp ifname - - config_get lanip lan ipaddr - config_get lanmask lan netmask - - config_get ffip ff ipaddr - config_get ffmask ff netmask - - config_get ffdip ffdhcp ipaddr - config_get ffdmask ffdhcp netmask - - [ -n "$ffif" ] || return 0 - - - ### Creating chains - iptables -N luci_freifunk_forwarding - iptables -t nat -N luci_freifunk_postrouting - - - ### Read from config - config_load freifunk - - config_get_bool internal routing internal - [ -n "$wanif" ] && config_get_bool internet routing internet - - - ### Freifunk to Freifunk - [ "$internal" -gt 0 ] && { - iptables -A luci_freifunk_forwarding -i "$ffif" -o "$ffif" -j ACCEPT - } - - ### Freifunk DHCP to Freifunk - [ "$internal" -gt 0 -a -n "$ffdif" ] && { - eval "$(ipcalc.sh $ffdip $ffdmask)" - - iptables -t nat -A luci_freifunk_postrouting -s "$NETWORK/$PREFIX" -o "$ffif" -j MASQUERADE - } - - ### Lan to Freifunk - [ -n "$lanif" ] && { - eval "$(ipcalc.sh $lanip $lanmask)" - - iptables -A luci_freifunk_forwarding -i "$lanif" -o "$ffif" -j ACCEPT - iptables -t nat -A luci_freifunk_postrouting -s "$NETWORK/$PREFIX" -o "$ffif" -j MASQUERADE - } - - ### Freifunk to Wan - [ "$internet" -gt 0 ] && { - eval "$(ipcalc.sh $ffip $ffmask)" - - iptables -A luci_freifunk_forwarding -i "$ffif" -o "$wanif" -j ACCEPT - iptables -t nat -A luci_freifunk_postrouting -s "$NETWORK/$PREFIX" -o "$wanif" -j MASQUERADE - } - - ### Freifunk DHCP to Wan - [ "$internet" -gt 0 -a -n "$ffdif" ] && { - eval "$(ipcalc.sh $ffdip $ffdmask)" - - iptables -t nat -A luci_freifunk_postrouting -s "$NETWORK/$PREFIX" -o "$wanif" -j MASQUERADE - } - - ### Hook in the chains - iptables -A forwarding_rule -j luci_freifunk_forwarding - iptables -t nat -A postrouting_rule -j luci_freifunk_postrouting -} - -stop() { - ### Hook out the chains - iptables -D forwarding_rule -j luci_freifunk_forwarding - iptables -t nat -D postrouting_rule -j luci_freifunk_postrouting - - ### Clear the chains - iptables -F luci_freifunk_forwarding - iptables -t nat -F luci_freifunk_postrouting - - ### Delete chains - iptables -X luci_freifunk_forwarding - iptables -t nat -X luci_freifunk_postrouting -} diff --git a/modules/freifunk/src/controller/admin/index/wizard.lua b/modules/freifunk/src/controller/admin/index/wizard.lua deleted file mode 100644 index c7064bb1b..000000000 --- a/modules/freifunk/src/controller/admin/index/wizard.lua +++ /dev/null @@ -1,171 +0,0 @@ -module("ffluci.controller.admin.index.wizard", package.seeall) - -function action() - if ffluci.http.formvalue("ip") then - return configure_freifunk() - end - - local ifaces = {} - local wldevs = ffluci.model.uci.sections("wireless") - - if wldevs then - for k, v in pairs(wldevs) do - if v[".type"] == "wifi-device" then - table.insert(ifaces, k) - end - end - end - - ffluci.template.render("admin_index/wizard", {ifaces=ifaces}) -end - -function configure_freifunk() - local ip = ffluci.http.formvalue("ip") - local uci = ffluci.model.uci.Session() - - -- Load UCI - uci:t_load("network") - uci:t_load("dhcp") - uci:t_load("freifunk") - uci:t_load("luci_splash") - uci:t_load("olsr") - uci:t_load("wireless") - - - -- Configure FF-Interface - uci:t_del("network", "ff") - uci:t_del("network", "ffdhcp") - - uci:t_set("network", "ff", nil, "interface") - uci:t_set("network", "ff", "type", "bridge") - uci:t_set("network", "ff", "proto", "static") - uci:t_set("network", "ff", "ipaddr", ip) - uci:t_set("network", "ff", "netmask", uci:t_get("freifunk", "community", "mask")) - uci:t_set("network", "ff", "dns", uci:t_get("freifunk", "community", "dns")) - - -- Enable internal routing - uci:t_set("freifunk", "routing", "internal", "1") - - -- Enable internet routing - if ffluci.http.formvalue("shareinet") then - uci:t_set("freifunk", "routing", "internet", "1") - else - uci:t_set("freifunk", "routing", "internet", "0") - end - - -- Configure DHCP - if ffluci.http.formvalue("dhcp") then - local dhcpnet = uci:t_get("freifunk", "community", "dhcp"):match("^([0-9]+)") - local dhcpip = ip:gsub("^[0-9]+", dhcpnet) - - uci:t_set("network", "ffdhcp", nil, "interface") - uci:t_set("network", "ffdhcp", "proto", "static") - uci:t_set("network", "ffdhcp", "ifname", "br-ff:dhcp") - uci:t_set("network", "ffdhcp", "ipaddr", dhcpip) - uci:t_set("network", "ffdhcp", "netmask", uci:t_get("freifunk", "community", "dhcpmask")) - - local dhcp = uci:t_sections("dhcp") - if dhcp then - for k, v in pairs(dhcp) do - if v[".type"] == "dhcp" and v.interface == "ffdhcp" then - uci:t_del("dhcp", k) - end - end - - local dhcpbeg = 48 + tonumber(ip:match("[0-9]+$")) * 4 - - local sk = uci:t_add("dhcp", "dhcp") - uci:t_set("dhcp", sk, "interface", "ffdhcp") - uci:t_set("dhcp", sk, "start", dhcpbeg) - uci:t_set("dhcp", sk, "limit", (dhcpbeg < 252) and 3 or 2) - uci:t_set("dhcp", sk, "leasetime", "30m") - end - - local splash = uci:t_sections("luci_splash") - if splash then - for k, v in pairs(splash) do - if v[".type"] == "iface" then - uci:t_del("luci_splash", k) - end - end - - local sk = uci:t_add("luci_splash", "iface") - uci:t_set("luci_splash", sk, "network", "ffdhcp") - end - end - - -- Configure OLSR - if ffluci.http.formvalue("olsr") and uci:t_sections("olsr") then - for k, v in pairs(uci:t_sections("olsr")) do - if v[".type"] == "Interface" or v[".type"] == "LoadPlugin" then - uci:t_del("olsr", k) - end - end - - if ffluci.http.formvalue("shareinet") then - uci:t_set("olsr", "dyn_gw", nil, "LoadPlugin") - uci:t_set("olsr", "dyn_gw", "Library", "olsrd_dyn_gw.so.0.4") - end - - uci:t_set("olsr", "nameservice", nil, "LoadPlugin") - uci:t_set("olsr", "nameservice", "Library", "olsrd_nameservice.so.0.3") - uci:t_set("olsr", "nameservice", "name", ip:gsub("%.", "-")) - uci:t_set("olsr", "nameservice", "hosts_file", "/var/etc/hosts") - uci:t_set("olsr", "nameservice", "suffix", ".olsr") - uci:t_set("olsr", "nameservice", "latlon_infile", "/tmp/latlon.txt") - - uci:t_set("olsr", "txtinfo", nil, "LoadPlugin") - uci:t_set("olsr", "txtinfo", "Library", "olsrd_txtinfo.so.0.1") - uci:t_set("olsr", "txtinfo", "Accept", "127.0.0.1") - - local oif = uci:t_add("olsr", "Interface") - uci:t_set("olsr", oif, "Interface", "ff") - uci:t_set("olsr", oif, "HelloInterval", "6.0") - uci:t_set("olsr", oif, "HelloValidityTime", "108.0") - uci:t_set("olsr", oif, "TcInterval", "4.0") - uci:t_set("olsr", oif, "TcValidityTime", "324.0") - uci:t_set("olsr", oif, "MidInterval", "18.0") - uci:t_set("olsr", oif, "MidValidityTime", "324.0") - uci:t_set("olsr", oif, "HnaInterval", "18.0") - uci:t_set("olsr", oif, "HnaValidityTime", "108.0") - end - - -- Configure Wifi - local wcfg = uci:t_sections("wireless") - if wcfg then - for iface, v in pairs(wcfg) do - if v[".type"] == "wifi-device" and ffluci.http.formvalue("wifi."..iface) then - -- Cleanup - for k, j in pairs(wcfg) do - if j[".type"] == "wifi-iface" and j.device == iface then - uci:t_del("wireless", k) - end - end - - uci:t_set("wireless", iface, "disabled", "0") - uci:t_set("wireless", iface, "mode", "11g") - uci:t_set("wireless", iface, "txantenna", 1) - uci:t_set("wireless", iface, "rxantenna", 1) - uci:t_set("wireless", iface, "channel", uci:t_get("freifunk", "community", "channel")) - - local wif = uci:t_add("wireless", "wifi-iface") - uci:t_set("wireless", wif, "device", iface) - uci:t_set("wireless", wif, "network", "ff") - uci:t_set("wireless", wif, "mode", "adhoc") - uci:t_set("wireless", wif, "ssid", uci:t_get("freifunk", "community", "essid")) - uci:t_set("wireless", wif, "bssid", uci:t_get("freifunk", "community", "bssid")) - uci:t_set("wireless", wif, "txpower", 13) - end - end - end - - -- Save UCI - uci:t_save("network") - uci:t_save("dhcp") - uci:t_save("freifunk") - uci:t_save("luci_splash") - uci:t_save("olsr") - uci:t_save("wireless") - - ffluci.http.redirect(ffluci.dispatcher.build_url("admin", "uci", "changes")) -end \ No newline at end of file diff --git a/modules/freifunk/src/controller/public/index.lua b/modules/freifunk/src/controller/public/index.lua deleted file mode 100644 index f65478c05..000000000 --- a/modules/freifunk/src/controller/public/index.lua +++ /dev/null @@ -1 +0,0 @@ -module("ffluci.controller.public.index", package.seeall) \ No newline at end of file diff --git a/modules/freifunk/src/controller/public/olsr.lua b/modules/freifunk/src/controller/public/olsr.lua deleted file mode 100644 index d41f5ed41..000000000 --- a/modules/freifunk/src/controller/public/olsr.lua +++ /dev/null @@ -1,137 +0,0 @@ -module("ffluci.controller.public.olsr", package.seeall) -require("ffluci.sys") - -function action_index() - local data = fetch_txtinfo("links") - - if not data or not data.Links then - ffluci.template.render("public_olsr/error_olsr") - return nil - end - - local function compare(a, b) - if tonumber(a.ETX) == 0 then - return false - end - - if tonumber(b.ETX) == 0 then - return true - end - - return tonumber(a.ETX) < tonumber(b.ETX) - end - - table.sort(data.Links, compare) - - ffluci.template.render("public_olsr/index", {links=data.Links}) -end - -function action_routes() - local data = fetch_txtinfo("routes") - - if not data or not data.Routes then - ffluci.template.render("public_olsr/error_olsr") - return nil - end - - local function compare(a, b) - if tonumber(a.ETX) == 0 then - return false - end - - if tonumber(b.ETX) == 0 then - return true - end - - return tonumber(a.ETX) < tonumber(b.ETX) - end - - table.sort(data.Routes, compare) - - ffluci.template.render("public_olsr/routes", {routes=data.Routes}) -end - -function action_topology() - local data = fetch_txtinfo("topology") - - if not data or not data.Topology then - ffluci.template.render("public_olsr/error_olsr") - return nil - end - - local function compare(a, b) - return a["Destination IP"] < b["Destination IP"] - end - - table.sort(data.Topology, compare) - - ffluci.template.render("public_olsr/topology", {routes=data.Topology}) -end - -function action_hna() - local data = fetch_txtinfo("hna") - - if not data or not data.HNA then - ffluci.template.render("public_olsr/error_olsr") - return nil - end - - local function compare(a, b) - return a.Network < b.Network - end - - table.sort(data.HNA, compare) - - ffluci.template.render("public_olsr/hna", {routes=data.HNA}) -end - -function action_mid() - local data = fetch_txtinfo("mid") - - if not data or not data.MID then - ffluci.template.render("public_olsr/error_olsr") - return nil - end - - local function compare(a, b) - return a.IP < b.IP - end - - table.sort(data.MID, compare) - - ffluci.template.render("public_olsr/mid", {mids=data.MID}) -end - - --- Internal -function fetch_txtinfo(otable) - otable = otable or "" - local rawdata = ffluci.sys.httpget("http://127.0.0.1:2006/"..otable) - - if #rawdata == 0 then - return nil - end - - local data = {} - - local tables = ffluci.util.split(ffluci.util.trim(rawdata), "\n\n") - - - for i, tbl in ipairs(tables) do - local lines = ffluci.util.split(tbl, "\n") - local name = table.remove(lines, 1):sub(8) - local keys = ffluci.util.split(table.remove(lines, 1), "\t") - - data[name] = {} - - for j, line in ipairs(lines) do - local fields = ffluci.util.split(line, "\t") - data[name][j] = {} - for k, key in pairs(keys) do - data[name][j][key] = fields[k] - end - end - end - - return data -end \ No newline at end of file diff --git a/modules/freifunk/src/controller/public/status.lua b/modules/freifunk/src/controller/public/status.lua deleted file mode 100644 index 8d2f7a303..000000000 --- a/modules/freifunk/src/controller/public/status.lua +++ /dev/null @@ -1,21 +0,0 @@ -module("ffluci.controller.public.status", package.seeall) - -function action_index() - local data = {} - - data.s, data.m, data.r = ffluci.sys.sysinfo() - - data.wifi = ffluci.sys.wifi.getiwconfig() - - data.routes = {} - for i, r in pairs(ffluci.sys.net.routes()) do - if r.Destination == "00000000" then - table.insert(data.routes, r) - end - end - - - ffluci.template.render("public_status/index", data) -end - - diff --git a/modules/freifunk/src/controller/rpc/luciinfo.lua b/modules/freifunk/src/controller/rpc/luciinfo.lua deleted file mode 100644 index 611423fbb..000000000 --- a/modules/freifunk/src/controller/rpc/luciinfo.lua +++ /dev/null @@ -1,41 +0,0 @@ -module("ffluci.controller.rpc.luciinfo", package.seeall) - -function action_index() - local uci = ffluci.model.uci.StateSession() - - ffluci.http.prepare_content("text/plain") - - -- General - print("luciinfo.api=1") - print("luciinfo.version=" .. tostring(ffluci.__version__)) - - -- Sysinfo - local s, m, r = ffluci.sys.sysinfo() - local dr = ffluci.sys.net.defaultroute() - dr = dr and ffluci.sys.net.hexip4(dr.Gateway) or "" - local l1, l5, l15 = ffluci.sys.loadavg() - - print("sysinfo.system=" .. sanitize(s)) - print("sysinfo.cpu=" .. sanitize(m)) - print("sysinfo.ram=" .. sanitize(r)) - print("sysinfo.hostname=" .. sanitize(ffluci.sys.hostname())) - print("sysinfo.load1=" .. tostring(l1)) - print("sysinfo.load5=" .. tostring(l5)) - print("sysinfo.load15=" .. tostring(l15)) - print("sysinfo.defaultgw=" .. dr) - - - -- Freifunk - local ff = uci:sections("freifunk") or {} - for k, v in pairs(ff) do - if k:sub(1, 1) ~= "." then - for i, j in pairs(v) do - print("freifunk." .. k .. "." .. i .. "=" .. j) - end - end - end -end - -function sanitize(val) - return val:gsub("\n", "\t") -end \ No newline at end of file diff --git a/modules/freifunk/src/controller/sudo/status.lua b/modules/freifunk/src/controller/sudo/status.lua deleted file mode 100644 index fd5127d2c..000000000 --- a/modules/freifunk/src/controller/sudo/status.lua +++ /dev/null @@ -1 +0,0 @@ -module("ffluci.controller.sudo.status", package.seeall) \ No newline at end of file diff --git a/modules/freifunk/src/i18n/admin_index_contact.en b/modules/freifunk/src/i18n/admin_index_contact.en deleted file mode 100644 index e2402e91f..000000000 --- a/modules/freifunk/src/i18n/admin_index_contact.en +++ /dev/null @@ -1,11 +0,0 @@ -contact1 = [[This information will be available on the public contact page. -As stated in the Picopeering Agreement you should at least enter your e-mail address. -To display your router on any topography map, please enter your geographical coordinates or at least -your street and house number in the location field.]] -nickname = "Nickname" -mail1 = "This field is essential!" -phone = "Phone" -location = "Location" -coord = "Coordinates" -coord1 = "Latitude;Longitude (e.g. 51.5;12.9)" -note = "Note" \ No newline at end of file diff --git a/modules/freifunk/src/model/cbi/admin_index/contact.lua b/modules/freifunk/src/model/cbi/admin_index/contact.lua deleted file mode 100644 index 66a1ec4bd..000000000 --- a/modules/freifunk/src/model/cbi/admin_index/contact.lua +++ /dev/null @@ -1,18 +0,0 @@ --- Todo: Translate -m = Map("freifunk", translate("contact", "Kontakt"), translate("contact1", [[Diese Daten sind -auf der öffentlichen Kontaktseite sichtbar. Bitte gib an, wie man dich am besten kontaktieren kann. -Diese Informationen sollten nach der Picopeering Vereinbarung mindestens deine E-Mail-Adresse enthalten. -Damit dein Knoten durch Topographieprogramme erfasst werden kann, gib bitte deine Geokoordinaten oder -zumindest deine Straße und Hausnummer unter Standort an.]])) - -c = m:section(NamedSection, "contact", "public") - -c:option(Value, "nickname", translate("nickname", "Pseudonym")) -c:option(Value, "name", translate("name", "Name")) -c:option(Value, "mail", translate("mail", "E-Mail"), translate("mail1", "Bitte unbedingt angeben!")) -c:option(Value, "phone", translate("phone", "Telefon")) -c:option(Value, "location", translate("location", "Standort")) -c:option(Value, "geo", translate("coord", "Koordinaten"), translate("coord1", "Bitte als Breite;Länge (z.B: 51.5;12.9) angeben")) -c:option(Value, "note", translate("note", "Notiz")) - -return m \ No newline at end of file diff --git a/modules/freifunk/src/model/cbi/admin_index/freifunk.lua b/modules/freifunk/src/model/cbi/admin_index/freifunk.lua deleted file mode 100644 index ec4d100b8..000000000 --- a/modules/freifunk/src/model/cbi/admin_index/freifunk.lua +++ /dev/null @@ -1,23 +0,0 @@ --- Todo: Translate -m = Map("freifunk", "Freifunk") - -s = m:section(NamedSection, "routing", "settings", "Netzverkehr") -s:option(Flag, "internal", "Freifunk zulassen", "immer aktivieren!") -s:option(Flag, "internet", "Internet zulassen") - -c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen -für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration -des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]]) -c:option(Value, "name", "Gemeinschaft") -c:option(Value, "homepage", "Webseite") -c:option(Value, "essid", "ESSID") -c:option(Value, "bssid", "BSSID") -c:option(Value, "channel", "Funkkanal") -c:option(Value, "realm", "Realm") -c:option(Value, "net", "Adressbereich") -c:option(Value, "mask", "Netzmaske") -c:option(Value, "dns", "DNS-Server") -c:option(Value, "dhcp", "DHCP-Bereich") -c:option(Value, "dhcpmask", "DHCP-Maske") - -return m \ No newline at end of file diff --git a/modules/freifunk/src/model/menu/10freifunk.lua b/modules/freifunk/src/model/menu/10freifunk.lua deleted file mode 100644 index 3adbe8985..000000000 --- a/modules/freifunk/src/model/menu/10freifunk.lua +++ /dev/null @@ -1,18 +0,0 @@ -add("public", "index", "Übersicht", 10) -act("contact", "Kontakt") - -add("public", "status", "Status", 20) -act("routes", "Routingtabelle") -act("iwscan", "WLAN-Scan") - -add("public", "olsr", "OLSR", 30) -act("routes", "Routen") -act("topology", "Topologie") -act("hna", "HNA") -act("mid", "MID") - - -sel("admin", "index") -act("wizard", "Freifunkassistent") -act("contact", "Kontakt") -act("freifunk", "Freifunk") \ No newline at end of file diff --git a/modules/freifunk/src/view/public_index/contact.htm b/modules/freifunk/src/view/public_index/contact.htm deleted file mode 100644 index 221dc89cc..000000000 --- a/modules/freifunk/src/view/public_index/contact.htm +++ /dev/null @@ -1,13 +0,0 @@ -<%+header%> -<% local contact = ffluci.model.uci.sections("freifunk").contact %> -

<%:contact Kontakt%>

- - - - - - - - -
<%:nickname Pseudonym%>:<%=contact.nickname%>
<%:name Name%>:<%=contact.name%>
<%:mail E-Mail%>:<%=contact.mail%>
<%:phone Telefon%>:<%=contact.phone%>
<%:location Standort%>:<%=contact.location%>
<%:geocoord Geokoordinaten%>:<%=contact.geo%>
<%:note Notiz%>:<%=contact.note%>
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_index/index.htm b/modules/freifunk/src/view/public_index/index.htm deleted file mode 100644 index 6c7fe8588..000000000 --- a/modules/freifunk/src/view/public_index/index.htm +++ /dev/null @@ -1,11 +0,0 @@ -<%+header%> -<% local ff = ffluci.model.uci.sections("freifunk") %> -

<%:hellonet Hallo und willkommen im Netz von%> <%=ff.community.name%>!

-

<%:public1 Wir sind eine Initiative zur Schaffung eines freien, offenen und unabhängigen Funknetzwerks auf WLAN-Basis.%>
-<%:public2 Dies ist der Zugangspunkt %><%=ffluci.sys.hostname()%>. <%:public3 Er wird betrieben von %> -<%=ff.contact.nickname%>.

-

<%:public4 Weitere Informationen zur globalen Freifunkinitiative findest du unter%> Freifunk.net.
-<%:public5 Hast du Interesse an diesem Projekt, dann wende dich an deine lokale Gemeinschaft%> <%=ff.community.name%>.

-

<%:note Hinweis%>: <%:public6 Der Internetzugang über das experimentelle Freifunknetz ist an technische und organisatorische Bedingungen geknüpft und deshalb möglicherweise -nicht (immer) gewährleistet.%>

-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/error_olsr.htm b/modules/freifunk/src/view/public_olsr/error_olsr.htm deleted file mode 100644 index 25426f50d..000000000 --- a/modules/freifunk/src/view/public_olsr/error_olsr.htm +++ /dev/null @@ -1,6 +0,0 @@ -<%+header%> -

<%:olsr OLSR%>

-

<%:olsrerror1 Es konnte keine Verbindung zum OLSR-Daemon hergestellt werden!%>

-

<%:olsrerror2 Um die Statusinformationen abfragen zu können muss der OLSR-Daemon gestartet -und das Plugin "txtinfo" geladen sein.%>

-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/hna.htm b/modules/freifunk/src/view/public_olsr/hna.htm deleted file mode 100644 index c13369f42..000000000 --- a/modules/freifunk/src/view/public_olsr/hna.htm +++ /dev/null @@ -1,17 +0,0 @@ -<%+header%> -

<%:olsrhna OLSR-HNA%>

-
- - - - - -<% for k, route in ipairs(routes) do %> - - - - -<% end %> -
<%:destination Ziel%><%:gateway Gateway%>
<%=route.Network%>/<%=route.Netmask%><%=route.Gateway%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/index.htm b/modules/freifunk/src/view/public_olsr/index.htm deleted file mode 100644 index 0633d1f45..000000000 --- a/modules/freifunk/src/view/public_olsr/index.htm +++ /dev/null @@ -1,43 +0,0 @@ -<%+header%> -

<%:olsrlinks OLSR-Verbindungen%>

-

<%:olsrlinks1 Übersicht über aktuell bestehende OLSR-Verbindungen%>

-
- - - - - - - - -<% for k, link in ipairs(links) do - local color = "#bb3333" - - link.ETX = tonumber(link.ETX) - if link.ETX == 0 then - color = "#bb3333" - elseif link.ETX < 4 then - color = "#00cc00" - elseif link.ETX < 10 then - color = "#ffcb05" - elseif link.ETX < 100 then - color = "#ff6600" - end -%> - - - - - - - -<% end %> -
<%:destination Ziel%><%:local Lokal%>LQNLQETX
"><%=link["remote IP"]%><%=link["Local IP"]%><%=link.LinkQuality%><%=link.NLQ%><%=link.ETX%>
-
-

<%:legend Legende%>:

- -<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/mid.htm b/modules/freifunk/src/view/public_olsr/mid.htm deleted file mode 100644 index 6553237ea..000000000 --- a/modules/freifunk/src/view/public_olsr/mid.htm +++ /dev/null @@ -1,17 +0,0 @@ -<%+header%> -

<%:olsrmid OLSR-MID%>

-
- - - - - -<% for k, mid in ipairs(mids) do %> - - - - -<% end %> -
<%:node Knoten%><%:aliases Aliasse%>
<%=mid.IP%><%=mid.Aliases%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/routes.htm b/modules/freifunk/src/view/public_olsr/routes.htm deleted file mode 100644 index f3a0fd336..000000000 --- a/modules/freifunk/src/view/public_olsr/routes.htm +++ /dev/null @@ -1,36 +0,0 @@ -<%+header%> -

<%:olsrlinks OLSR-Routen%>

-
- - - - - - - - -<% for k, route in ipairs(routes) do - local color = "#bb3333" - - route.ETX = tonumber(route.ETX) - if route.ETX == 0 then - color = "#bb3333" - elseif route.ETX < 4 then - color = "#00cc00" - elseif route.ETX < 10 then - color = "#ffcb05" - elseif route.ETX < 100 then - color = "#ff6600" - end -%> - - - - - - - -<% end %> -
<%:destination Ziel%><%:gateway Gateway%><%:interface Schnittstelle%><%:metric Metrik%>ETX
<%=route.Destination%><%=route.Gateway%><%=route.Interface%><%=route.Metric%><%=route.ETX%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_olsr/topology.htm b/modules/freifunk/src/view/public_olsr/topology.htm deleted file mode 100644 index c622026d4..000000000 --- a/modules/freifunk/src/view/public_olsr/topology.htm +++ /dev/null @@ -1,23 +0,0 @@ -<%+header%> -

<%:olsrtopo OLSR-Topologie%>

-
- - - - - - - - -<% for k, route in ipairs(routes) do %> - - - - - - - -<% end %> -
<%:destination Ziel%><%:lasthop Letzter Router%>LQILQETX
"><%=route["Destination IP"]%>"><%=route["Last hop IP"]%><%=route.LQ%><%=route.ILQ%><%=route.ETX%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_status/index.htm b/modules/freifunk/src/view/public_status/index.htm deleted file mode 100644 index be0b96888..000000000 --- a/modules/freifunk/src/view/public_status/index.htm +++ /dev/null @@ -1,59 +0,0 @@ -<%+header%> -

<%:status Status%>

-

<%:system System%>

- -
- - - - - - - - - - - - - -
<%:system_type Systemtyp%>:<%=s%>
<%:cpu Prozessor%>:<%=m%>
<%:ram Hauptspeicher%>:<%=r%>
-

- -

<%:wifi Drahtlos%>

-
- - - - - - - - - - - - - -<%=ffluci.sys.httpget("http://127.0.0.1" .. controller .. "/sudo/status/iwconfig")%> -
<%:name Name%><%:protocol Protokoll%><%:frequency Frequenz%><%:power Leistung%><%:bitrate Bitrate%><%:rts RTS%><%:frag Frag.%><%:link Verb.%><%:signal Signal%><%:noise Rausch%>
-
-
-

<%:defroutes Standardrouten%>

-
- - - - - - -<% -for i, rt in pairs(routes) do -%> - - -<% end %> -
<%:gateway Gateway%><%:metric Metrik%><%:iface Schnittstelle%>
<%=ffluci.sys.net.hexip4(rt.Gateway)%> -<%=rt.Metric%> -<%=rt.Iface%> -
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_status/iwscan.htm b/modules/freifunk/src/view/public_status/iwscan.htm deleted file mode 100644 index a8924c892..000000000 --- a/modules/freifunk/src/view/public_status/iwscan.htm +++ /dev/null @@ -1,21 +0,0 @@ -<%+header%> -

<%:iwscan WLAN-Scan%>

-

<%:iwscan1 Drahtlosnetzwerke in der lokalen Umgebung des Routers:%>

- -
- - - - - - - - - - - - -<%=ffluci.sys.httpget("http://127.0.0.1" .. controller .. "/sudo/status/iwscan")%> -
<%:interface Schnittstelle%><%:essid ESSID%><%:bssid BSSID%><%:mode Modus%><%:channel Kanal%><%:encr Vers.%><%:link Verb.%><%:signal Signal%><%:noise Rausch%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/public_status/routes.htm b/modules/freifunk/src/view/public_status/routes.htm deleted file mode 100644 index 85b02212d..000000000 --- a/modules/freifunk/src/view/public_status/routes.htm +++ /dev/null @@ -1,28 +0,0 @@ -<%+header%> -

<%:routes Routen%>

- -
- - - - - - - - -<% -local routes = ffluci.sys.net.routes() - -for i, r in pairs(routes) do -%> - - - - - - - -<% end %> -
<%:target Ziel%><%:netmask Netzmaske%><%:gateway Gateway%><%:metric Metrik%><%:iface Schnittstelle%>
<%=ffluci.sys.net.hexip4(r.Destination)%><%=ffluci.sys.net.hexip4(r.Mask)%><%=ffluci.sys.net.hexip4(r.Gateway)%><%=r.Metric%><%=r.Iface%>
-
-<%+footer%> \ No newline at end of file diff --git a/modules/freifunk/src/view/sudo_status/iwconfig.htm b/modules/freifunk/src/view/sudo_status/iwconfig.htm deleted file mode 100644 index 6f5dede70..000000000 --- a/modules/freifunk/src/view/sudo_status/iwconfig.htm +++ /dev/null @@ -1,21 +0,0 @@ -<% -ffluci.http.prepare_content("text/plain") -for k, v in pairs(ffluci.sys.wifi.getiwconfig()) do -%> - -<%=k%> -<%=v[1]%> -<%=v.Frequency%> -<%=v["Tx-Power"]%> -<%=v["Bit Rate"]%> -<%=v["RTS thr"]%> -<%=v["Fragment thr"]%> -<%=v["Link Quality"]%> -<%=v["Signal level"]%> -<%=v["Noise level"]%> - - -ESSID: <%=v.ESSID%> -BSSID: <%=(v.Cell or v["Access Point"])%> - -<%end%> diff --git a/modules/freifunk/src/view/sudo_status/iwscan.htm b/modules/freifunk/src/view/sudo_status/iwscan.htm deleted file mode 100644 index 6f321ae9e..000000000 --- a/modules/freifunk/src/view/sudo_status/iwscan.htm +++ /dev/null @@ -1,22 +0,0 @@ -<% -ffluci.http.prepare_content("text/plain") -for iface, cells in pairs(ffluci.sys.wifi.iwscan()) do - for i, cell in ipairs(cells) do -%> - -<%=iface%> -<%=cell.ESSID%> -<%=cell.Address%> -<%=cell.Mode%> -<%=(cell.Channel or cell.Frequency or "")%> -<%=cell["Encryption key"]%> -<%=cell.Quality%> -<%=cell["Signal level"]%> -<%=cell["Noise level"]%> - -<% - end -end -%> - - diff --git a/themes/fledermaus/Makefile b/themes/fledermaus/Makefile deleted file mode 100644 index 81a96f6a8..000000000 --- a/themes/fledermaus/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -include ../../build/config.mk -include ../../build/module.mk \ No newline at end of file diff --git a/themes/fledermaus/root/www/ffluci/media/cascade.css b/themes/fledermaus/root/www/ffluci/media/cascade.css deleted file mode 100644 index a7245ae60..000000000 --- a/themes/fledermaus/root/www/ffluci/media/cascade.css +++ /dev/null @@ -1,274 +0,0 @@ -@charset "utf-8"; - -body { - font-family: Verdana, Arial, sans-serif; - background-color: #aaaaaa; -} - -h1 { - margin: 0%; - font-size: 1.4em; - font-weight: bold; - margin-bottom: 0.5em; -} - -h2 { - margin: 0%; - font-size: 1.2em; - font-weight: bold; -} - -h3 { - margin: 0%; -} - -#header { - padding: 0.2em; - height: 4.5em; - background-color: #262626; -} - -#columns { - border-left: 10.1em solid #262626; - border-right: 10.1em solid #262626; - display: block; - background-color: white; - padding: 0.1em; -} - -#columnswrapper { - display: block; - margin-left: -10em; - margin-right: -10em; -} - -#content { - margin-left: 14em; - margin-right: 14em; - display: block; - position: relative; - padding: 2px; - font-size: 0.8em; -} - -.headerlogo { - height: 4em; - padding: 5px; -} - -.headerlogo img { - height: 100%; -} - -.headertitle { - font-size: 2.4em; - color: gray; - letter-spacing: 0.5em; - text-transform: lowercase; -} - -.separator { - padding-left: 0.25em; - font-weight: bold; - font-size: 0.8em; - line-height: 1.4em; -} - -.whitetext { - color: white; -} - -.yellowtext { - color: #ffcb05; -} - -.magentatext { - color: #dc0065; -} - -.inheritcolor { - color: inherit; -} - -.smalltext { - font-size: 0.8em; -} - -.yellow { - background-color: #ffcb05; -} - -.magenta { - background-color: #dc0065; -} - -.nodeco { - text-decoration: none; -} - -.redhover:hover { - color: red; -} - -.bold { - font-weight: bold; -} - -.sidebar { - position: relative; - padding: 0.25em; - color: gray; - width: 9em; - font-weight: bold; -} - -.separator a, .sidebar a { - color: inherit; - text-decoration: inherit; -} - -.separator a:hover, .sidebar a:hover { - color: red; -} - -.sidebar div { - padding-bottom: 0.5em; -} - -.sidebar ul { - font-size: 0.8em; - color: white; - list-style-type: none; - padding-left: 1em; - margin-top: 0%; -} - -.left { - float: left; - text-align: left; -} - -.right { - float: right; - text-align: right; -} - -.clear { - clear: both; -} - -.hidden { - display: none; -} - -.inline { - display: inline; -} - -.code { - background: #f7f7f7; - border: 1px solid #d7d7d7; - margin: 1em 1.75em; - padding: 1em; -} - -code { - display: block; - background: #f7f7f7; - border: 1px solid #d7d7d7; - margin: 1em 1.75em; - padding: 1em; - overflow: auto; - white-space: pre; -} - -table th, table, td { - vertical-align: top; - text-align: left; - border: 1px solid gray; -} - -.cbi-section { - margin-top: 1em; -} - -.cbi-section-remove { - text-align: right; -} - -.cbi-value { - display: table-row; -} - -.cbi-value-title { - display: table-cell; - line-height: 1.75em; - font-weight: bold; - padding: 0.25em; -} - -.cbi-value-field { - display: table-cell; - text-align: left; - padding: 0.25em; - line-height: 1.75em; -} - -.cbi-value-field input, .cbi-value-field select, -.cbi-optionals select, .cbi-optionals input, -.cbi-section-remove input, .cbi-section-create input { - font-size: 0.8em; - margin: 0%; -} - -.cbi-section-descr { - padding-bottom: 1em; -} - -.cbi-value-description { - display: inline; - font-style: italic; - font-size: 0.8em; - padding: 0.25em; - margin-bottom: 0.5em; -} - -.cbi-form-separator { - margin-top: 1em; -} - -.cbi-section-node { - display: table; - padding: 0.25em; - background: #f7f7f7; - border: 1px solid #d7d7d7; -} - -.cbi-section-node h3 { - margin-bottom: 0.5em; -} - -.cbi-error { - color: red; - font-weight: bold; - font-size: 0.8em; - margin-bottom: 0.75em; -} - -.cbi-optionals { - margin-top: 1em; -} - -.cbi-optionals option { - font-size: 0.8em; -} - -.error { - color: red; - font-weight: bold; -} - -.ok { - color: green; - font-weight: bold; -} \ No newline at end of file diff --git a/themes/fledermaus/root/www/ffluci/media/cbi.js b/themes/fledermaus/root/www/ffluci/media/cbi.js deleted file mode 100644 index a3a47aa45..000000000 --- a/themes/fledermaus/root/www/ffluci/media/cbi.js +++ /dev/null @@ -1,42 +0,0 @@ -var cbi_d = {}; - -function cbi_d_add(field, target, value) { - if (!cbi_d[target]) { - cbi_d[target] = {}; - } - if (!cbi_d[target][value]) { - cbi_d[target][value] = []; - } - cbi_d[target][value].push(field); -} - -function cbi_d_update(target) { - if (!cbi_d[target]) { - return; - } - - for (var x in cbi_d[target]) { - for (var i=0; iE40&9Rz zGp-fDtG4fb)1Cau&L-TzaR&mYh1an_P6wxI02Tqy0t;;4tLqvLw_&FcZs53mfyuyl zptKtvp+FTd7pSy-Z&O!HxH@1MdOX*}nIDM<>|fgc~^SVBlfk=uS?x1rQ*&lk@x+@JrkGR<(EF4kg^camNCW z0lT+j*n7Zpz(;Je2G#&;F~Z#sD8yJ0g}@-pW;n1N&-fDfsqK6J-HtIkj&K9Vy#crt zBam!J0)GeQ1M_X)ThYPiIlx%pblUcoGys!q-<#9cXKZ)j29BE#%m&VBg;argz>T)= zt?XhRjs|YW*vzfrUf`;>Y=r|EKX94td&yM8s=*V7Bpa<~5b_mn zS>3PygCiGB-P#rW)Y=pB**$-<3O4|&wNb~FET8#N8o&7%^Ke|u6khi|T zxfr|juo#kOfzxf@YhtRl)ICduhXkG|u)dqT|I$al>ki)P23@*uLtgSRREMj`_>yIn zuch&wk8vi3#ti?9?R%p$8?EkOGz%^wUa-}`xlMuxzBvg6q*VMl4!vKoRcot znlkqs;2IHYY)=aopk$f%xQd*Q=)ELp%G|F~c0-7wHW>BHX}n_Xn3+fX zy;o8tTw1)W@~=I?UldA~RsN?ScS=&8T3LF@A!%K+FSo2EllRo5{t4y5;$@Zp(L=n&qPW_-5#e=9lFu-Hd=5bP+Fu(pZt$th^K8rZmrbys#bUu}Y_ZrPl?02mOwzt4H8X505(#H5I# z(DYk-LUSuHu4g7T15;8rtB#mhh{_eJ`kN!F=QZ>IUv0u+AIw@SBDX0r?UQ4!C`jvy z)865s^U?Lf4IDSqIXEqb^rdveJ88+y2p^QZH*0QJ^VDf<*mR#jW5b4xm!+D*&F!5C zY9aj19gflmj{7}Kz+^OVAlp*f1%cykW?M@8$e1bSr~X)7Hfe7}&X=T~%Jzyp|6=lJWsI@7SBxbD-9CxuKtx>e@1QlprTs zmNh?yc87tg&IirhLt4a|Lk!F++|XZs19%ZQ%=W$Cr@MD;K$MjL@C;A}%ur<^kh5h| z?qAw5?{|AK=pE7ZS+jLpC{mG6!}^19!2N;aww4W!MpeZqpfU@^ zG={#_*ww<}j+@u6!S5b@DDX58Jx=A% zlvhpfB#Z4rlW+saJrfuJ+#F3R7Kx$5czf7TmXw#17$-9b)|tJkLdIA@>2(R z+%>s@3IH zOwkcxf991Ls1Q^hrK-ZoXpbxJ9FzK^FfnVRqAw?t$+77Kw(ot7DIPh!#ptRE2bCx2 z;nDyR84L1kM)R0RVpwSb{{*}oL(m>`Xm?t!eG6k~j}4DG0U*d95gCI>W_i;>;JAqK z>w#{oVTeLa#l*hANVSqp!VRN-nTiHx|9Zv3B-LtT=KK&75nGC>l=%Qyi3urYVh-hr z`_dc2*SR`^HV5PGnj4Ylfqu0|PCPM#ZUs?mT6tnMCfeVjI~nhSmENraK{V zTD!>hz4aDmw~Kb+$`cn-o~WQaaTMi=QpywG2Yv`_%%FUg4SnM5(#+Q=g{EcT;ANFx zqxz6q^4kpU{e-yPxIFPDDxGtcw;_qqwn)_46Y@c(D0){$jar;==Yv_Z;)R=ur^e@? zGMDDX9o1~jJ%f>p;tJ#9g!|8d<2L#ER#I<9IlSh`iD#wJ)B*d&M$0PRo{Q+st#Ex0 zRl<8&hQ5I!bD$Bl@GXmNmf141XirG0z0iRzq)0fCzvA%V(`Y^d1qpb$RLdR77iC z$m3qIvk$47hG;f-eKJX_gyC;|&agMvQJz@O5!K%^a#4L2g=oTuhfnOMs@DrTHKT_2 z_Lw1W+P=4jknyz`7cM)hDt1HVb5yPcZUClWB~J?1zgUEYbx+20pBp%Clg2b|>UAfu zTLJst9X9QU35tB3mA7y9oPY`HM7IlwA=&{vP7n#0K9sF+br zzcm-5RoSYi4ayT6fq!o|g9f)_jQvbk*#d3@P6jySqu+f~J9yIRn$*R$Ws`j1UEuRp zvmYZD)$`_vvE*)j3phA}qL92TPx93G(VRK2&8H%3OWo4tC!}tQmsY-^!Ud}O0LTf%J0i_tVh5*S5~wYqavXMW zTU&XqDVub*qF1Y>XAZ2Mk#4VFh$*^@!cFNJ8w+EG#U&EE5_bb}!IQ@W$89=>TC&W0 z9JmAYMkF$_7LD?RkLb@ayMIfFUd@v7mQG0qObMwzgvw>WfCXU<(OK>ZRwiFVMx{U)aUO-PUGH@SMJtVV#mrf zD{wBpLzG7luF9y*Jpf~3#RY(_&0M~uru5?8m|gjp^rE=#Kzqve1IO);NvT|_aL-Oz zwr~61W{mqASJTyHuzhbUrnn^22}$8J;J$FvI2CxS*!N~yR`Lg`9KSKS`-&RJbr+AC z*4e|-O{lde_r1uwP)#t+jxtYAOqH7p69$?Q2{I(Z-`v z2V+uB_rp$nR4Oc2S^_+7`(E6x-lb^6A-^raVB7c7!+SgDA-~WZnhOjJ!+qV3UFvvh z;JB{>t8Cx9Fx#N6!Y*~NI&j>BfVY6#Y~PD2{p@n=QlA6}9CtWIo5rP|vgvLFj#~-1 zZ6MvbKV}g)?pc@`+@IOL_flIY>nH-p9f7fNU&2(~{9}KHC2-txF+qr_w(s2?Nz?@h zpEC=XX8Yb9yUYiK0>>Q&{0Va`=nC8SzKA7mCqh?u8s-?l*|zV!kk+?reEKT%sb>Q} zz%2Urbmoh3VRg^1Fvp}m#1#GgZw&3O@zJ)xagW24?jMACZJ!0I(vR=AGQJeE)}04z z0&ZxlR_rpL8w?!x6pYz)5+-)~A|^|lGTy($6vP#US23p6p%4?pcoKN3o#p@O&;Q5& zP-gggj|5J@R7a+~pnjONOls#|jXC}DS_e!2v+=M)f8zE30SPdqmS-GahyVZp07*qo IM6N<$g0fW6u>b%7 -- 2.25.1