From a933fcfd3e6e817b8072a92f2e48f52a83727621 Mon Sep 17 00:00:00 2001 From: frisco <> Date: Sat, 18 Jul 2009 04:12:08 +0000 Subject: [PATCH] Created tag for v0.3.5 release --- v0.3.5/LICENSE | 340 + v0.3.5/MANIFEST.in | 15 + v0.3.5/README | 199 + v0.3.5/README.davfs | 47 + v0.3.5/README.proxy | 66 + v0.3.5/README.samba | 31 + v0.3.5/README.ssl | 113 + v0.3.5/bin/CryptoBoxRootActions | 555 + v0.3.5/bin/CryptoBoxWebserver | 401 + v0.3.5/bin/cryptobox-unittests.conf | 100 + v0.3.5/bin/cryptobox.conf | 1 + v0.3.5/bin/do_pylint.sh | 35 + v0.3.5/bin/do_unittests.sh | 112 + v0.3.5/bin/run_webserver.sh | 58 + v0.3.5/bin/uml-setup.sh | 42 + v0.3.5/changelog | 87 + v0.3.5/conf-examples/apache2_dav.conf | 13 + v0.3.5/conf-examples/apache_proxypass.conf | 25 + v0.3.5/conf-examples/cryptobox.conf | 97 + v0.3.5/conf-examples/openssl.cnf | 65 + v0.3.5/conf-examples/start_stunnel.sh | 42 + v0.3.5/conf-examples/super.tab-example | 9 + v0.3.5/copyright | 32 + v0.3.5/copyright.graphics | 158 + v0.3.5/debian/README.Debian | 32 + v0.3.5/debian/changelog | 137 + v0.3.5/debian/compat | 1 + v0.3.5/debian/control | 22 + v0.3.5/debian/copyright | 27 + v0.3.5/debian/cryptobox-server.default | 20 + v0.3.5/debian/cryptobox-server.dirs | 4 + v0.3.5/debian/cryptobox-server.docs | 9 + v0.3.5/debian/cryptobox-server.examples | 1 + v0.3.5/debian/cryptobox-server.init | 117 + v0.3.5/debian/cryptobox-server.lintian | 1 + v0.3.5/debian/cryptobox-server.logrotate | 6 + v0.3.5/debian/cryptobox-server.manpages | 2 + v0.3.5/debian/cryptobox-server.postinst | 78 + v0.3.5/debian/cryptobox-server.postrm | 65 + v0.3.5/debian/cryptobox-server.preinst | 4 + v0.3.5/debian/cryptobox-server.prerm | 4 + v0.3.5/debian/patches/00list | 0 v0.3.5/debian/pycompat | 1 + v0.3.5/debian/rules | 97 + v0.3.5/design/cd-cover.svg | 317 + v0.3.5/design/cd-label.png | Bin 0 -> 696450 bytes v0.3.5/design/cd-label.xcf | Bin 0 -> 2294291 bytes v0.3.5/design/cryptobox_backgrounds.svg | 806 + .../icons/applications-system_tango.svg | 245 + v0.3.5/design/icons/computer_tango.svg | 738 + v0.3.5/design/icons/dialog-error_tango.svg | 316 + .../design/icons/dialog-information_tango.svg | 1145 + v0.3.5/design/icons/dialog-warning_tango.svg | 290 + v0.3.5/design/icons/drive-cdrom_tango.svg | 444 + v0.3.5/design/icons/drive-harddisk_tango.svg | 469 + .../icons/drive-removable-media_tango.svg | 390 + v0.3.5/design/icons/face_smile_big.svg | 257 + v0.3.5/design/icons/globe-lips.svg | 525 + .../icons/gnome-dev-removable-usb_nuvola.svg | 1004 + v0.3.5/design/icons/gnome-globe_nuvola.svg | 1195 + v0.3.5/design/icons/go-down_tango.svg | 199 + v0.3.5/design/icons/go-up_tango.svg | 195 + v0.3.5/design/icons/gtk-ok_nuvola.svg | 364 + v0.3.5/design/icons/gtk-stop_nuvola.svg | 669 + v0.3.5/design/icons/gtk-zoom-in_nuvola.svg | 433 + v0.3.5/design/icons/help_browser.svg | 213 + v0.3.5/design/icons/help_browser_disable.svg | 253 + .../inaccessible_tango_emblem-unreadable.svg | 357 + .../icons/locked_tango-emblem-readonly.svg | 298 + .../icons/multimedia-dell-dj-pocket_tango.svg | 4405 ++++ ...multimedia-player-ipod-mini-blue_tango.svg | 4126 +++ .../multimedia-player-motorola-rokr_tango.svg | 1025 + .../icons/network-transmit-receive_design.svg | 1041 + .../design/icons/package-x-generic_tango.svg | 483 + v0.3.5/design/icons/pile_of_devices.svg | 21822 ++++++++++++++++ .../design/icons/preferences-system_tango.svg | 396 + .../design/icons/redhat-config-users_wasp.svg | 1904 ++ v0.3.5/design/icons/system-log-out_tango.svg | 362 + v0.3.5/design/icons/unlocked-device_tango.svg | 1198 + v0.3.5/design/logo/ameisenkopp.svg | 3280 +++ v0.3.5/design/logo/boesetest.svg | 429 + v0.3.5/design/logo/bubblebutton.svg | 811 + v0.3.5/design/logo/cbnas_logo.svg | 2590 ++ v0.3.5/design/logo/cbx_logo1.png | Bin 0 -> 40890 bytes v0.3.5/design/logo/cbx_logo1.xcf | Bin 0 -> 1073889 bytes v0.3.5/design/logo/cnas-logo-flat.png | Bin 0 -> 10262 bytes v0.3.5/design/logo/cryptobox_cd-cover_de.jpg | Bin 0 -> 373563 bytes v0.3.5/design/logo/cryptobox_cd-cover_de.svg | 242 + v0.3.5/design/logo/cryptobox_cd-cover_en.jpg | Bin 0 -> 372308 bytes v0.3.5/design/logo/cryptobox_cd-cover_en.svg | 232 + v0.3.5/design/logo/cryptoboxlogogebastel.svg | 154 + .../cryptoboxlogogebastelhintergrundbild.svg | 194 + v0.3.5/design/logo/drachen2.jpg | Bin 0 -> 20533 bytes v0.3.5/design/logo/dragon.png | Bin 0 -> 43023 bytes v0.3.5/design/logo/entwurf.svg | 982 + v0.3.5/design/logo/evil_stick.svg | 848 + v0.3.5/design/logo/evil_stick2.svg | 857 + v0.3.5/design/logo/evil_stick3.svg | 946 + v0.3.5/design/logo/goodtime.ttf | Bin 0 -> 41416 bytes v0.3.5/design/logo/neuropol.ttf | Bin 0 -> 53616 bytes v0.3.5/design/logo/syslinux-splash.xcf | Bin 0 -> 271456 bytes v0.3.5/design/logo/website_header.xcf | Bin 0 -> 519031 bytes v0.3.5/design/what_is_cryptobox.svg | 15724 +++++++++++ v0.3.5/doc/html/de/CryptoBox.html | 132 + v0.3.5/doc/html/de/CryptoBoxDev.html | 94 + .../doc/html/de/CryptoBoxDevBackground.html | 64 + .../doc/html/de/CryptoBoxDevCustomBuild.html | 85 + .../html/de/CryptoBoxDevCustomConfigure.html | 60 + .../html/de/CryptoBoxDevKnownProblems.html | 46 + .../doc/html/de/CryptoBoxDevPreparation.html | 77 + .../doc/html/de/CryptoBoxDevValidation.html | 78 + v0.3.5/doc/html/de/CryptoBoxDevWorkFlow.html | 156 + v0.3.5/doc/html/de/CryptoBoxUser.html | 59 + .../html/de/CryptoBoxUserConfiguration.html | 125 + v0.3.5/doc/html/de/CryptoBoxUserDailyUse.html | 139 + .../html/de/CryptoBoxUserGettingStarted.html | 76 + v0.3.5/doc/html/en/CryptoBox.html | 154 + v0.3.5/doc/html/en/CryptoBoxDev.html | 94 + .../doc/html/en/CryptoBoxDevBackground.html | 64 + .../doc/html/en/CryptoBoxDevCustomBuild.html | 85 + .../html/en/CryptoBoxDevCustomConfigure.html | 60 + .../html/en/CryptoBoxDevKnownProblems.html | 46 + .../doc/html/en/CryptoBoxDevPreparation.html | 77 + .../doc/html/en/CryptoBoxDevValidation.html | 78 + v0.3.5/doc/html/en/CryptoBoxDevWorkFlow.html | 156 + v0.3.5/doc/html/en/CryptoBoxUser.html | 60 + .../html/en/CryptoBoxUserConfiguration.html | 125 + v0.3.5/doc/html/en/CryptoBoxUserDailyUse.html | 138 + .../html/en/CryptoBoxUserGettingStarted.html | 83 + v0.3.5/event-scripts/README | 35 + v0.3.5/event-scripts/_event_scripts_ | 6 + v0.3.5/event-scripts/apache2_dav | 118 + v0.3.5/event-scripts/samba | 127 + v0.3.5/intl/cryptobox-server.pot | 156 + v0.3.5/intl/cs/cryptobox-server.po | 171 + v0.3.5/intl/da/cryptobox-server.po | 171 + v0.3.5/intl/de/cryptobox-server.po | 190 + v0.3.5/intl/en/cryptobox-server.po | 178 + v0.3.5/intl/es/cryptobox-server.po | 186 + v0.3.5/intl/et/cryptobox-server.po | 171 + v0.3.5/intl/fi/cryptobox-server.po | 171 + v0.3.5/intl/fr/cryptobox-server.po | 190 + v0.3.5/intl/hr/cryptobox-server.po | 171 + v0.3.5/intl/hu/cryptobox-server.po | 171 + v0.3.5/intl/it/cryptobox-server.po | 185 + v0.3.5/intl/ja/cryptobox-server.po | 180 + v0.3.5/intl/nl/cryptobox-server.po | 186 + v0.3.5/intl/pl/cryptobox-server.po | 187 + v0.3.5/intl/pt/cryptobox-server.po | 171 + v0.3.5/intl/ru/cryptobox-server.po | 187 + v0.3.5/intl/sl/cryptobox-server.po | 184 + v0.3.5/intl/sv/cryptobox-server.po | 171 + v0.3.5/intl/ur/cryptobox-server.po | 171 + v0.3.5/man/CryptoBoxRootActions.8 | 105 + v0.3.5/man/CryptoBoxWebserver.8 | 63 + v0.3.5/package.exclude | 4 + v0.3.5/plugins/date/date.py | 116 + v0.3.5/plugins/date/form_date.cs | 51 + .../intl/cryptobox-server-feature-date.pot | 97 + .../intl/cs/cryptobox-server-feature-date.po | 112 + .../intl/da/cryptobox-server-feature-date.po | 112 + .../intl/de/cryptobox-server-feature-date.po | 117 + .../intl/en/cryptobox-server-feature-date.po | 107 + .../intl/es/cryptobox-server-feature-date.po | 115 + .../intl/et/cryptobox-server-feature-date.po | 112 + .../intl/fi/cryptobox-server-feature-date.po | 112 + .../intl/fr/cryptobox-server-feature-date.po | 112 + .../intl/hr/cryptobox-server-feature-date.po | 112 + .../intl/hu/cryptobox-server-feature-date.po | 112 + .../intl/it/cryptobox-server-feature-date.po | 116 + .../intl/ja/cryptobox-server-feature-date.po | 113 + .../intl/nl/cryptobox-server-feature-date.po | 112 + .../intl/pl/cryptobox-server-feature-date.po | 115 + .../intl/pt/cryptobox-server-feature-date.po | 112 + .../intl/ru/cryptobox-server-feature-date.po | 112 + .../intl/sl/cryptobox-server-feature-date.po | 115 + .../intl/sv/cryptobox-server-feature-date.po | 116 + .../intl/ur/cryptobox-server-feature-date.po | 112 + v0.3.5/plugins/date/language.hdf | 47 + v0.3.5/plugins/date/plugin_icon.gif | Bin 0 -> 2116 bytes v0.3.5/plugins/date/plugin_icon.png | Bin 0 -> 3285 bytes v0.3.5/plugins/date/root_action.py | 58 + v0.3.5/plugins/date/unittests.py | 97 + v0.3.5/plugins/disks/disks.cs | 60 + v0.3.5/plugins/disks/disks.css | 7 + v0.3.5/plugins/disks/disks.py | 48 + .../intl/cryptobox-server-feature-disks.pot | 48 + .../intl/cs/cryptobox-server-feature-disks.po | 63 + .../intl/da/cryptobox-server-feature-disks.po | 63 + .../intl/de/cryptobox-server-feature-disks.po | 62 + .../intl/en/cryptobox-server-feature-disks.po | 68 + .../intl/es/cryptobox-server-feature-disks.po | 67 + .../intl/et/cryptobox-server-feature-disks.po | 63 + .../intl/fi/cryptobox-server-feature-disks.po | 63 + .../intl/fr/cryptobox-server-feature-disks.po | 63 + .../intl/hr/cryptobox-server-feature-disks.po | 63 + .../intl/hu/cryptobox-server-feature-disks.po | 63 + .../intl/it/cryptobox-server-feature-disks.po | 81 + .../intl/ja/cryptobox-server-feature-disks.po | 62 + .../intl/nl/cryptobox-server-feature-disks.po | 63 + .../intl/pl/cryptobox-server-feature-disks.po | 77 + .../intl/pt/cryptobox-server-feature-disks.po | 63 + .../intl/ru/cryptobox-server-feature-disks.po | 63 + .../intl/sl/cryptobox-server-feature-disks.po | 77 + .../intl/sv/cryptobox-server-feature-disks.po | 76 + .../intl/ur/cryptobox-server-feature-disks.po | 63 + v0.3.5/plugins/disks/language.hdf | 17 + v0.3.5/plugins/disks/plugin_icon.gif | Bin 0 -> 3359 bytes v0.3.5/plugins/disks/plugin_icon.png | Bin 0 -> 6279 bytes v0.3.5/plugins/disks/unittests.py | 43 + .../encrypted_webinterface.py | 266 + ...-server-feature-encrypted_webinterface.pot | 40 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 62 + ...x-server-feature-encrypted_webinterface.po | 53 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 63 + ...x-server-feature-encrypted_webinterface.po | 58 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 61 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 55 + ...x-server-feature-encrypted_webinterface.po | 61 + ...x-server-feature-encrypted_webinterface.po | 61 + ...x-server-feature-encrypted_webinterface.po | 55 + .../encrypted_webinterface/language.hdf | 26 + .../encrypted_webinterface/root_action.py | 100 + .../encrypted_webinterface/unittests.py | 34 + v0.3.5/plugins/help/doc.cs | 9 + v0.3.5/plugins/help/help.py | 81 + .../intl/cryptobox-server-feature-help.pot | 7 + .../intl/cs/cryptobox-server-feature-help.po | 22 + .../intl/da/cryptobox-server-feature-help.po | 22 + .../intl/de/cryptobox-server-feature-help.po | 21 + .../intl/en/cryptobox-server-feature-help.po | 13 + .../intl/es/cryptobox-server-feature-help.po | 22 + .../intl/et/cryptobox-server-feature-help.po | 22 + .../intl/fi/cryptobox-server-feature-help.po | 22 + .../intl/fr/cryptobox-server-feature-help.po | 22 + .../intl/hr/cryptobox-server-feature-help.po | 22 + .../intl/hu/cryptobox-server-feature-help.po | 22 + .../intl/it/cryptobox-server-feature-help.po | 21 + .../intl/ja/cryptobox-server-feature-help.po | 21 + .../intl/nl/cryptobox-server-feature-help.po | 22 + .../intl/pl/cryptobox-server-feature-help.po | 21 + .../intl/pt/cryptobox-server-feature-help.po | 22 + .../intl/ru/cryptobox-server-feature-help.po | 22 + .../intl/sl/cryptobox-server-feature-help.po | 21 + .../intl/sv/cryptobox-server-feature-help.po | 21 + .../intl/ur/cryptobox-server-feature-help.po | 22 + v0.3.5/plugins/help/language.hdf | 5 + v0.3.5/plugins/help/plugin_icon.gif | Bin 0 -> 3461 bytes v0.3.5/plugins/help/plugin_icon.png | Bin 0 -> 5072 bytes v0.3.5/plugins/help/unittests.py | 94 + ...obox-server-feature-language_selection.pot | 17 + ...tobox-server-feature-language_selection.po | 31 + ...tobox-server-feature-language_selection.po | 31 + ...tobox-server-feature-language_selection.po | 33 + ...tobox-server-feature-language_selection.po | 25 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 33 + ...tobox-server-feature-language_selection.po | 31 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 33 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 32 + ...tobox-server-feature-language_selection.po | 33 + ...tobox-server-feature-language_selection.po | 33 + ...tobox-server-feature-language_selection.po | 32 + .../plugins/language_selection/language.hdf | 8 + .../language_selection/language_selection.cs | 25 + .../language_selection/language_selection.py | 48 + .../language_selection/list_marker_tango.gif | Bin 0 -> 1165 bytes .../language_selection/plugin_icon.gif | Bin 0 -> 2910 bytes .../language_selection/plugin_icon.png | Bin 0 -> 5442 bytes .../plugins/language_selection/unittests.py | 46 + .../intl/cryptobox-server-feature-logs.pot | 67 + .../intl/cs/cryptobox-server-feature-logs.po | 82 + .../intl/da/cryptobox-server-feature-logs.po | 82 + .../intl/de/cryptobox-server-feature-logs.po | 94 + .../intl/en/cryptobox-server-feature-logs.po | 83 + .../intl/es/cryptobox-server-feature-logs.po | 81 + .../intl/et/cryptobox-server-feature-logs.po | 82 + .../intl/fi/cryptobox-server-feature-logs.po | 82 + .../intl/fr/cryptobox-server-feature-logs.po | 82 + .../intl/hr/cryptobox-server-feature-logs.po | 82 + .../intl/hu/cryptobox-server-feature-logs.po | 82 + .../intl/it/cryptobox-server-feature-logs.po | 93 + .../intl/ja/cryptobox-server-feature-logs.po | 86 + .../intl/nl/cryptobox-server-feature-logs.po | 82 + .../intl/pl/cryptobox-server-feature-logs.po | 91 + .../intl/pt/cryptobox-server-feature-logs.po | 82 + .../intl/ru/cryptobox-server-feature-logs.po | 82 + .../intl/sl/cryptobox-server-feature-logs.po | 91 + .../intl/sv/cryptobox-server-feature-logs.po | 84 + .../intl/ur/cryptobox-server-feature-logs.po | 82 + v0.3.5/plugins/logs/language.hdf | 31 + v0.3.5/plugins/logs/logs.css | 15 + v0.3.5/plugins/logs/logs.py | 226 + v0.3.5/plugins/logs/plugin_icon.gif | Bin 0 -> 2932 bytes v0.3.5/plugins/logs/plugin_icon.png | Bin 0 -> 6663 bytes v0.3.5/plugins/logs/show_log.cs | 81 + v0.3.5/plugins/logs/unittests.py | 65 + v0.3.5/plugins/network/form_network.cs | 110 + .../intl/cryptobox-server-feature-network.pot | 179 + .../cs/cryptobox-server-feature-network.po | 194 + .../da/cryptobox-server-feature-network.po | 194 + .../de/cryptobox-server-feature-network.po | 222 + .../en/cryptobox-server-feature-network.po | 223 + .../es/cryptobox-server-feature-network.po | 194 + .../et/cryptobox-server-feature-network.po | 194 + .../fi/cryptobox-server-feature-network.po | 194 + .../fr/cryptobox-server-feature-network.po | 194 + .../hr/cryptobox-server-feature-network.po | 194 + .../hu/cryptobox-server-feature-network.po | 194 + .../it/cryptobox-server-feature-network.po | 223 + .../ja/cryptobox-server-feature-network.po | 210 + .../nl/cryptobox-server-feature-network.po | 194 + .../pl/cryptobox-server-feature-network.po | 221 + .../pt/cryptobox-server-feature-network.po | 194 + .../ru/cryptobox-server-feature-network.po | 194 + .../sl/cryptobox-server-feature-network.po | 222 + .../sv/cryptobox-server-feature-network.po | 222 + .../ur/cryptobox-server-feature-network.po | 194 + v0.3.5/plugins/network/language.hdf | 96 + v0.3.5/plugins/network/network.css | 8 + v0.3.5/plugins/network/network.py | 434 + v0.3.5/plugins/network/plugin_icon.gif | Bin 0 -> 3876 bytes v0.3.5/plugins/network/plugin_icon.png | Bin 0 -> 5281 bytes v0.3.5/plugins/network/root_action.py | 121 + v0.3.5/plugins/network/unittests.py | 87 + .../partition/current_partition_info.cs | 14 + .../cryptobox-server-feature-partition.pot | 248 + .../cs/cryptobox-server-feature-partition.po | 263 + .../da/cryptobox-server-feature-partition.po | 263 + .../de/cryptobox-server-feature-partition.po | 301 + .../en/cryptobox-server-feature-partition.po | 290 + .../es/cryptobox-server-feature-partition.po | 263 + .../et/cryptobox-server-feature-partition.po | 263 + .../fi/cryptobox-server-feature-partition.po | 263 + .../fr/cryptobox-server-feature-partition.po | 263 + .../hr/cryptobox-server-feature-partition.po | 263 + .../hu/cryptobox-server-feature-partition.po | 263 + .../it/cryptobox-server-feature-partition.po | 298 + .../ja/cryptobox-server-feature-partition.po | 272 + .../nl/cryptobox-server-feature-partition.po | 263 + .../pl/cryptobox-server-feature-partition.po | 296 + .../pt/cryptobox-server-feature-partition.po | 263 + .../ru/cryptobox-server-feature-partition.po | 263 + .../sl/cryptobox-server-feature-partition.po | 294 + .../sv/cryptobox-server-feature-partition.po | 263 + .../ur/cryptobox-server-feature-partition.po | 263 + v0.3.5/plugins/partition/language.hdf | 138 + v0.3.5/plugins/partition/partition.css | 4 + v0.3.5/plugins/partition/partition.py | 596 + v0.3.5/plugins/partition/plugin_icon.gif | Bin 0 -> 2210 bytes v0.3.5/plugins/partition/plugin_icon.png | Bin 0 -> 2943 bytes v0.3.5/plugins/partition/root_action.py | 134 + v0.3.5/plugins/partition/select_device.cs | 50 + v0.3.5/plugins/partition/set_partitions.cs | 103 + v0.3.5/plugins/partition/unittests.py | 35 + v0.3.5/plugins/plugin-interface.txt | 84 + v0.3.5/plugins/plugin_icon_unknown.gif | Bin 0 -> 3160 bytes v0.3.5/plugins/plugin_icon_unknown.png | Bin 0 -> 6304 bytes ...ryptobox-server-feature-plugin_manager.pot | 91 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 126 + ...cryptobox-server-feature-plugin_manager.po | 118 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 106 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 106 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 123 + ...cryptobox-server-feature-plugin_manager.po | 116 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 123 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 124 + ...cryptobox-server-feature-plugin_manager.po | 105 + ...cryptobox-server-feature-plugin_manager.po | 106 + v0.3.5/plugins/plugin_manager/language.hdf | 32 + v0.3.5/plugins/plugin_manager/plugin_icon.gif | Bin 0 -> 2570 bytes v0.3.5/plugins/plugin_manager/plugin_icon.png | Bin 0 -> 2753 bytes v0.3.5/plugins/plugin_manager/plugin_list.cs | 142 + .../plugins/plugin_manager/plugin_manager.css | 28 + .../plugins/plugin_manager/plugin_manager.py | 149 + .../plugins/plugin_manager/tango-go-down.png | Bin 0 -> 883 bytes v0.3.5/plugins/plugin_manager/tango-go-up.png | Bin 0 -> 850 bytes v0.3.5/plugins/plugin_manager/unittests.py | 92 + .../plugin_template/form_plugin_template.cs | 16 + v0.3.5/plugins/plugin_template/language.hdf | 31 + .../plugins/plugin_template/plugin_icon.gif | Bin 0 -> 3160 bytes .../plugins/plugin_template/plugin_icon.png | Bin 0 -> 6304 bytes .../plugin_template/plugin_template.py | 71 + v0.3.5/plugins/plugin_template/unittests.py | 31 + v0.3.5/plugins/shutdown/form_shutdown.cs | 23 + v0.3.5/plugins/shutdown/gnome-reboot.gif | Bin 0 -> 2225 bytes v0.3.5/plugins/shutdown/gnome-reboot.png | Bin 0 -> 3752 bytes v0.3.5/plugins/shutdown/gnome-shutdown.gif | Bin 0 -> 2285 bytes v0.3.5/plugins/shutdown/gnome-shutdown.png | Bin 0 -> 4532 bytes .../cryptobox-server-feature-shutdown.pot | 67 + .../cs/cryptobox-server-feature-shutdown.po | 82 + .../da/cryptobox-server-feature-shutdown.po | 82 + .../de/cryptobox-server-feature-shutdown.po | 88 + .../en/cryptobox-server-feature-shutdown.po | 80 + .../es/cryptobox-server-feature-shutdown.po | 82 + .../et/cryptobox-server-feature-shutdown.po | 82 + .../fi/cryptobox-server-feature-shutdown.po | 82 + .../fr/cryptobox-server-feature-shutdown.po | 81 + .../hr/cryptobox-server-feature-shutdown.po | 82 + .../hu/cryptobox-server-feature-shutdown.po | 82 + .../it/cryptobox-server-feature-shutdown.po | 90 + .../ja/cryptobox-server-feature-shutdown.po | 84 + .../nl/cryptobox-server-feature-shutdown.po | 82 + .../pl/cryptobox-server-feature-shutdown.po | 88 + .../pt/cryptobox-server-feature-shutdown.po | 82 + .../ru/cryptobox-server-feature-shutdown.po | 82 + .../sl/cryptobox-server-feature-shutdown.po | 88 + .../sv/cryptobox-server-feature-shutdown.po | 82 + .../ur/cryptobox-server-feature-shutdown.po | 82 + v0.3.5/plugins/shutdown/language.hdf | 39 + v0.3.5/plugins/shutdown/plugin_icon.gif | Bin 0 -> 3196 bytes v0.3.5/plugins/shutdown/plugin_icon.png | Bin 0 -> 3290 bytes v0.3.5/plugins/shutdown/progress_reboot.cs | 6 + v0.3.5/plugins/shutdown/progress_shutdown.cs | 6 + v0.3.5/plugins/shutdown/root_action.py | 70 + v0.3.5/plugins/shutdown/shutdown.py | 74 + v0.3.5/plugins/shutdown/unittests.py | 35 + ...obox-server-feature-system_preferences.pot | 20 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 32 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + ...tobox-server-feature-system_preferences.po | 35 + .../plugins/system_preferences/language.hdf | 7 + .../system_preferences/plugin_icon.gif | Bin 0 -> 2432 bytes .../system_preferences/plugin_icon.png | Bin 0 -> 5570 bytes .../system_preferences/show_plugins.cs | 28 + .../system_preferences/system_preferences.py | 40 + .../plugins/system_preferences/unittests.py | 38 + .../cryptobox-server-feature-user_manager.pot | 107 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 139 + .../cryptobox-server-feature-user_manager.po | 125 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 139 + .../cryptobox-server-feature-user_manager.po | 127 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 136 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 136 + .../cryptobox-server-feature-user_manager.po | 122 + .../cryptobox-server-feature-user_manager.po | 122 + v0.3.5/plugins/user_manager/language.hdf | 65 + v0.3.5/plugins/user_manager/plugin_icon.gif | Bin 0 -> 2902 bytes v0.3.5/plugins/user_manager/plugin_icon.png | Bin 0 -> 4227 bytes v0.3.5/plugins/user_manager/unittests.py | 196 + v0.3.5/plugins/user_manager/user_list.cs | 82 + v0.3.5/plugins/user_manager/user_manager.css | 6 + v0.3.5/plugins/user_manager/user_manager.py | 106 + ...ptobox-server-feature-volume_automount.pot | 49 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 71 + ...yptobox-server-feature-volume_automount.po | 60 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 66 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 67 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 66 + ...yptobox-server-feature-volume_automount.po | 64 + ...yptobox-server-feature-volume_automount.po | 64 + v0.3.5/plugins/volume_automount/language.hdf | 41 + v0.3.5/plugins/volume_automount/unittests.py | 56 + .../volume_automount/volume_automount.cs | 30 + .../volume_automount/volume_automount.py | 120 + v0.3.5/plugins/volume_check_fs/language.hdf | 31 + v0.3.5/plugins/volume_check_fs/unittests.py | 31 + .../volume_check_fs/volume_check_fs.py | 97 + ...yptobox-server-feature-volume_chpasswd.pot | 50 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 70 + ...ryptobox-server-feature-volume_chpasswd.po | 64 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 71 + ...ryptobox-server-feature-volume_chpasswd.po | 67 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 71 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 72 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + ...ryptobox-server-feature-volume_chpasswd.po | 65 + v0.3.5/plugins/volume_chpasswd/language.hdf | 39 + v0.3.5/plugins/volume_chpasswd/unittests.py | 33 + .../volume_chpasswd/volume_chpasswd.cs | 41 + .../volume_chpasswd/volume_chpasswd.py | 91 + ...ryptobox-server-feature-volume_details.pot | 61 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 77 + ...cryptobox-server-feature-volume_details.po | 69 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 77 + ...cryptobox-server-feature-volume_details.po | 75 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 77 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 77 + ...cryptobox-server-feature-volume_details.po | 76 + ...cryptobox-server-feature-volume_details.po | 76 + v0.3.5/plugins/volume_details/language.hdf | 23 + v0.3.5/plugins/volume_details/plugin_icon.gif | Bin 0 -> 1401 bytes v0.3.5/plugins/volume_details/plugin_icon.png | Bin 0 -> 1972 bytes v0.3.5/plugins/volume_details/unittests.py | 32 + .../plugins/volume_details/volume_details.cs | 25 + .../plugins/volume_details/volume_details.py | 41 + ...ptobox-server-feature-volume_format_fs.pot | 119 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 157 + ...yptobox-server-feature-volume_format_fs.po | 146 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 156 + ...yptobox-server-feature-volume_format_fs.po | 142 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 154 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 156 + ...yptobox-server-feature-volume_format_fs.po | 134 + ...yptobox-server-feature-volume_format_fs.po | 134 + v0.3.5/plugins/volume_format_fs/language.hdf | 64 + .../plugins/volume_format_fs/plugin_icon.gif | Bin 0 -> 1312 bytes .../plugins/volume_format_fs/plugin_icon.png | Bin 0 -> 1189 bytes v0.3.5/plugins/volume_format_fs/unittests.py | 101 + .../plugins/volume_format_fs/volume_format.cs | 59 + .../volume_format_fs/volume_format_fs.py | 137 + .../volume_format_fs/volume_format_luks.cs | 37 + .../cryptobox-server-feature-volume_mount.pot | 108 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 133 + .../cryptobox-server-feature-volume_mount.po | 127 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 132 + .../cryptobox-server-feature-volume_mount.po | 126 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 132 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 130 + .../cryptobox-server-feature-volume_mount.po | 123 + .../cryptobox-server-feature-volume_mount.po | 123 + v0.3.5/plugins/volume_mount/language.hdf | 76 + v0.3.5/plugins/volume_mount/plugin_icon.gif | Bin 0 -> 1400 bytes v0.3.5/plugins/volume_mount/plugin_icon.png | Bin 0 -> 984 bytes v0.3.5/plugins/volume_mount/unittests.py | 189 + v0.3.5/plugins/volume_mount/volume_mount.cs | 38 + v0.3.5/plugins/volume_mount/volume_mount.py | 135 + v0.3.5/plugins/volume_mount/volume_status.cs | 6 + v0.3.5/plugins/volume_mount/volume_umount.cs | 18 + .../cryptobox-server-feature-volume_props.pot | 11 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 17 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 25 + .../cryptobox-server-feature-volume_props.po | 26 + .../cryptobox-server-feature-volume_props.po | 26 + v0.3.5/plugins/volume_props/language.hdf | 13 + v0.3.5/plugins/volume_props/plugin_icon.gif | Bin 0 -> 2432 bytes v0.3.5/plugins/volume_props/plugin_icon.png | Bin 0 -> 5570 bytes v0.3.5/plugins/volume_props/unittests.py | 32 + .../plugins/volume_props/volume_properties.cs | 15 + v0.3.5/plugins/volume_props/volume_props.py | 90 + ...cryptobox-server-feature-volume_rename.pot | 64 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 87 + .../cryptobox-server-feature-volume_rename.po | 75 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 83 + .../cryptobox-server-feature-volume_rename.po | 80 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 84 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 83 + .../cryptobox-server-feature-volume_rename.po | 79 + .../cryptobox-server-feature-volume_rename.po | 79 + v0.3.5/plugins/volume_rename/language.hdf | 57 + v0.3.5/plugins/volume_rename/unittests.py | 161 + v0.3.5/plugins/volume_rename/volume_rename.cs | 32 + v0.3.5/plugins/volume_rename/volume_rename.py | 75 + v0.3.5/scripts/fetch_po_files.sh | 88 + v0.3.5/scripts/mk_pydoc.sh | 99 + v0.3.5/scripts/show_TODO.sh | 9 + v0.3.5/scripts/update_po_files.py | 207 + v0.3.5/scripts/userdocexport.sh | 135 + v0.3.5/setup.py | 151 + v0.3.5/src/cryptobox/__init__.py | 14 + v0.3.5/src/cryptobox/core/__init__.py | 7 + v0.3.5/src/cryptobox/core/blockdevice.py | 1069 + v0.3.5/src/cryptobox/core/container.py | 828 + v0.3.5/src/cryptobox/core/exceptions.py | 168 + v0.3.5/src/cryptobox/core/main.py | 304 + v0.3.5/src/cryptobox/core/settings.py | 863 + v0.3.5/src/cryptobox/plugins/__init__.py | 7 + v0.3.5/src/cryptobox/plugins/base.py | 313 + v0.3.5/src/cryptobox/plugins/manage.py | 107 + v0.3.5/src/cryptobox/tests/__init__.py | 8 + v0.3.5/src/cryptobox/tests/base.py | 161 + .../cryptobox/tests/test.core.blockdevice.py | 82 + v0.3.5/src/cryptobox/tests/test.cryptobox.py | 192 + v0.3.5/src/cryptobox/tests/test.plugins.py | 56 + v0.3.5/src/cryptobox/tests/test.websites.py | 62 + v0.3.5/src/cryptobox/tests/tools.py | 152 + v0.3.5/src/cryptobox/web/__init__.py | 7 + v0.3.5/src/cryptobox/web/dataset.py | 229 + v0.3.5/src/cryptobox/web/languages.py | 51 + v0.3.5/src/cryptobox/web/sites.py | 678 + v0.3.5/src/pylintrc | 44 + v0.3.5/stuff/debian-package_policy.txt | 115 + v0.3.5/stuff/known_problems | 4 + v0.3.5/stuff/language_specification.txt | 34 + v0.3.5/stuff/pootle-updates.txt | 33 + v0.3.5/stuff/uml-howto.txt | 5 + v0.3.5/stuff/upload_and_release-policy.txt | 29 + v0.3.5/templates/access_denied.cs | 6 + v0.3.5/templates/empty.cs | 6 + v0.3.5/templates/footer.cs | 43 + v0.3.5/templates/header.cs | 111 + v0.3.5/templates/language.hdf | 98 + v0.3.5/templates/macros.cs | 262 + v0.3.5/templates/main.cs | 19 + v0.3.5/templates/show_volume_footer.cs | 3 + v0.3.5/templates/show_volume_header.cs | 26 + v0.3.5/templates/volume_busy.cs | 8 + v0.3.5/templates/volume_plugins.cs | 41 + v0.3.5/www-data/background_frame_corner.png | Bin 0 -> 2355 bytes v0.3.5/www-data/background_frame_top.png | Bin 0 -> 2109 bytes v0.3.5/www-data/backpane_left.png | Bin 0 -> 211 bytes v0.3.5/www-data/backpane_left_top.gif | Bin 0 -> 924 bytes v0.3.5/www-data/backpane_left_top.png | Bin 0 -> 274 bytes v0.3.5/www-data/backpane_right.png | Bin 0 -> 200 bytes v0.3.5/www-data/backpane_right_top.gif | Bin 0 -> 924 bytes v0.3.5/www-data/backpane_right_top.png | Bin 0 -> 288 bytes v0.3.5/www-data/backpane_top.png | Bin 0 -> 152 bytes v0.3.5/www-data/cbx-text-logo1.png | Bin 0 -> 4516 bytes v0.3.5/www-data/cbx-text-logo2.png | Bin 0 -> 4609 bytes v0.3.5/www-data/cbx_logo_left.png | Bin 0 -> 8587 bytes v0.3.5/www-data/cbx_logo_right.png | Bin 0 -> 26617 bytes v0.3.5/www-data/cbx_logo_right_fire.png | Bin 0 -> 36053 bytes v0.3.5/www-data/cryptobox.css | 512 + .../www-data/cryptonas-ascii_black_green.css | 436 + v0.3.5/www-data/cryptonas_logo_left.png | Bin 0 -> 6542 bytes v0.3.5/www-data/dialog-error_tango.gif | Bin 0 -> 1521 bytes v0.3.5/www-data/dialog-error_tango.png | Bin 0 -> 1670 bytes v0.3.5/www-data/dialog-information_tango.gif | Bin 0 -> 1319 bytes v0.3.5/www-data/dialog-information_tango.png | Bin 0 -> 1910 bytes v0.3.5/www-data/dialog-warning_tango.gif | Bin 0 -> 1365 bytes v0.3.5/www-data/dialog-warning_tango.png | Bin 0 -> 1569 bytes .../environment_warning_background.png | Bin 0 -> 29795 bytes v0.3.5/www-data/face_smile_big.png | Bin 0 -> 1212 bytes v0.3.5/www-data/favicon.ico | Bin 0 -> 3638 bytes v0.3.5/www-data/footer_line.png | Bin 0 -> 262 bytes v0.3.5/www-data/help_background.png | Bin 0 -> 27238 bytes v0.3.5/www-data/icon_background_active.png | Bin 0 -> 14372 bytes .../www-data/icon_background_active_060.png | Bin 0 -> 771 bytes .../www-data/icon_background_active_080.png | Bin 0 -> 1177 bytes .../www-data/icon_background_active_100.png | Bin 0 -> 1581 bytes .../www-data/icon_background_active_256.png | Bin 0 -> 7347 bytes .../icon_background_active_orange_100.png | Bin 0 -> 961 bytes .../www-data/icon_background_passive_060.png | Bin 0 -> 665 bytes .../www-data/icon_background_passive_080.png | Bin 0 -> 1108 bytes .../www-data/icon_background_passive_100.png | Bin 0 -> 1538 bytes .../www-data/icon_background_passive_256.png | Bin 0 -> 5624 bytes v0.3.5/www-data/icon_get_help.gif | Bin 0 -> 2389 bytes v0.3.5/www-data/icon_get_help.png | Bin 0 -> 3428 bytes v0.3.5/www-data/icon_get_help_disable.gif | Bin 0 -> 2248 bytes v0.3.5/www-data/icon_get_help_disable.png | Bin 0 -> 3092 bytes v0.3.5/www-data/list.gif | Bin 0 -> 51 bytes v0.3.5/www-data/register_active.gif | Bin 0 -> 16707 bytes v0.3.5/www-data/register_active.png | Bin 0 -> 3798 bytes v0.3.5/www-data/register_passive.gif | Bin 0 -> 5798 bytes v0.3.5/www-data/register_passive.png | Bin 0 -> 1773 bytes v0.3.5/www-data/screenshots/de_config.png | Bin 0 -> 80374 bytes v0.3.5/www-data/screenshots/de_init.png | Bin 0 -> 62123 bytes v0.3.5/www-data/screenshots/de_mount.png | Bin 0 -> 59615 bytes v0.3.5/www-data/screenshots/de_w98_login.png | Bin 0 -> 3650 bytes .../screenshots/de_w98_network_drive.png | Bin 0 -> 3345 bytes .../screenshots/de_w98_not_logged_in.png | Bin 0 -> 2914 bytes v0.3.5/www-data/screenshots/en_config.png | Bin 0 -> 85007 bytes v0.3.5/www-data/screenshots/en_mount.png | Bin 0 -> 71564 bytes v0.3.5/www-data/screenshots/en_w98_login.png | Bin 0 -> 3504 bytes .../screenshots/en_w98_network_drive.png | Bin 0 -> 3013 bytes .../screenshots/en_w98_not_logged_in.png | Bin 0 -> 2853 bytes .../screenshots/v0.3/activate_volume.png | Bin 0 -> 86234 bytes .../screenshots/v0.3/system_preferences.png | Bin 0 -> 89341 bytes v0.3.5/www-data/smile.png | Bin 0 -> 356 bytes v0.3.5/www-data/smile4.png | Bin 0 -> 275 bytes v0.3.5/www-data/volume_active_crypto.gif | Bin 0 -> 5956 bytes v0.3.5/www-data/volume_active_crypto.png | Bin 0 -> 6590 bytes v0.3.5/www-data/volume_active_crypto_busy.gif | Bin 0 -> 5603 bytes v0.3.5/www-data/volume_active_crypto_busy.png | Bin 0 -> 6085 bytes v0.3.5/www-data/volume_active_plain.gif | Bin 0 -> 5299 bytes v0.3.5/www-data/volume_active_plain.png | Bin 0 -> 5903 bytes v0.3.5/www-data/volume_active_plain_busy.gif | Bin 0 -> 5010 bytes v0.3.5/www-data/volume_active_plain_busy.png | Bin 0 -> 5372 bytes v0.3.5/www-data/volume_passive_crypto.gif | Bin 0 -> 8040 bytes v0.3.5/www-data/volume_passive_crypto.png | Bin 0 -> 8140 bytes .../www-data/volume_passive_crypto_busy.gif | Bin 0 -> 7941 bytes .../www-data/volume_passive_crypto_busy.png | Bin 0 -> 7608 bytes v0.3.5/www-data/volume_passive_plain.gif | Bin 0 -> 7180 bytes v0.3.5/www-data/volume_passive_plain.png | Bin 0 -> 7661 bytes v0.3.5/www-data/volume_passive_plain_busy.gif | Bin 0 -> 7079 bytes v0.3.5/www-data/volume_passive_plain_busy.png | Bin 0 -> 7092 bytes v0.3.5/www-data/volume_property_frame.png | Bin 0 -> 29572 bytes 802 files changed, 135218 insertions(+) create mode 100644 v0.3.5/LICENSE create mode 100644 v0.3.5/MANIFEST.in create mode 100644 v0.3.5/README create mode 100644 v0.3.5/README.davfs create mode 100644 v0.3.5/README.proxy create mode 100644 v0.3.5/README.samba create mode 100644 v0.3.5/README.ssl create mode 100755 v0.3.5/bin/CryptoBoxRootActions create mode 100755 v0.3.5/bin/CryptoBoxWebserver create mode 100644 v0.3.5/bin/cryptobox-unittests.conf create mode 120000 v0.3.5/bin/cryptobox.conf create mode 100755 v0.3.5/bin/do_pylint.sh create mode 100755 v0.3.5/bin/do_unittests.sh create mode 100755 v0.3.5/bin/run_webserver.sh create mode 100755 v0.3.5/bin/uml-setup.sh create mode 100644 v0.3.5/changelog create mode 100644 v0.3.5/conf-examples/apache2_dav.conf create mode 100644 v0.3.5/conf-examples/apache_proxypass.conf create mode 100644 v0.3.5/conf-examples/cryptobox.conf create mode 100644 v0.3.5/conf-examples/openssl.cnf create mode 100755 v0.3.5/conf-examples/start_stunnel.sh create mode 100644 v0.3.5/conf-examples/super.tab-example create mode 100644 v0.3.5/copyright create mode 100644 v0.3.5/copyright.graphics create mode 100644 v0.3.5/debian/README.Debian create mode 100644 v0.3.5/debian/changelog create mode 100644 v0.3.5/debian/compat create mode 100644 v0.3.5/debian/control create mode 100644 v0.3.5/debian/copyright create mode 100644 v0.3.5/debian/cryptobox-server.default create mode 100644 v0.3.5/debian/cryptobox-server.dirs create mode 100644 v0.3.5/debian/cryptobox-server.docs create mode 100644 v0.3.5/debian/cryptobox-server.examples create mode 100644 v0.3.5/debian/cryptobox-server.init create mode 100644 v0.3.5/debian/cryptobox-server.lintian create mode 100644 v0.3.5/debian/cryptobox-server.logrotate create mode 100644 v0.3.5/debian/cryptobox-server.manpages create mode 100644 v0.3.5/debian/cryptobox-server.postinst create mode 100644 v0.3.5/debian/cryptobox-server.postrm create mode 100644 v0.3.5/debian/cryptobox-server.preinst create mode 100644 v0.3.5/debian/cryptobox-server.prerm create mode 100644 v0.3.5/debian/patches/00list create mode 100644 v0.3.5/debian/pycompat create mode 100755 v0.3.5/debian/rules create mode 100644 v0.3.5/design/cd-cover.svg create mode 100644 v0.3.5/design/cd-label.png create mode 100644 v0.3.5/design/cd-label.xcf create mode 100644 v0.3.5/design/cryptobox_backgrounds.svg create mode 100644 v0.3.5/design/icons/applications-system_tango.svg create mode 100644 v0.3.5/design/icons/computer_tango.svg create mode 100644 v0.3.5/design/icons/dialog-error_tango.svg create mode 100644 v0.3.5/design/icons/dialog-information_tango.svg create mode 100644 v0.3.5/design/icons/dialog-warning_tango.svg create mode 100644 v0.3.5/design/icons/drive-cdrom_tango.svg create mode 100644 v0.3.5/design/icons/drive-harddisk_tango.svg create mode 100644 v0.3.5/design/icons/drive-removable-media_tango.svg create mode 100644 v0.3.5/design/icons/face_smile_big.svg create mode 100644 v0.3.5/design/icons/globe-lips.svg create mode 100644 v0.3.5/design/icons/gnome-dev-removable-usb_nuvola.svg create mode 100644 v0.3.5/design/icons/gnome-globe_nuvola.svg create mode 100644 v0.3.5/design/icons/go-down_tango.svg create mode 100644 v0.3.5/design/icons/go-up_tango.svg create mode 100644 v0.3.5/design/icons/gtk-ok_nuvola.svg create mode 100644 v0.3.5/design/icons/gtk-stop_nuvola.svg create mode 100644 v0.3.5/design/icons/gtk-zoom-in_nuvola.svg create mode 100644 v0.3.5/design/icons/help_browser.svg create mode 100644 v0.3.5/design/icons/help_browser_disable.svg create mode 100644 v0.3.5/design/icons/inaccessible_tango_emblem-unreadable.svg create mode 100644 v0.3.5/design/icons/locked_tango-emblem-readonly.svg create mode 100644 v0.3.5/design/icons/multimedia-dell-dj-pocket_tango.svg create mode 100644 v0.3.5/design/icons/multimedia-player-ipod-mini-blue_tango.svg create mode 100644 v0.3.5/design/icons/multimedia-player-motorola-rokr_tango.svg create mode 100644 v0.3.5/design/icons/network-transmit-receive_design.svg create mode 100644 v0.3.5/design/icons/package-x-generic_tango.svg create mode 100644 v0.3.5/design/icons/pile_of_devices.svg create mode 100644 v0.3.5/design/icons/preferences-system_tango.svg create mode 100644 v0.3.5/design/icons/redhat-config-users_wasp.svg create mode 100644 v0.3.5/design/icons/system-log-out_tango.svg create mode 100644 v0.3.5/design/icons/unlocked-device_tango.svg create mode 100644 v0.3.5/design/logo/ameisenkopp.svg create mode 100644 v0.3.5/design/logo/boesetest.svg create mode 100644 v0.3.5/design/logo/bubblebutton.svg create mode 100644 v0.3.5/design/logo/cbnas_logo.svg create mode 100644 v0.3.5/design/logo/cbx_logo1.png create mode 100644 v0.3.5/design/logo/cbx_logo1.xcf create mode 100644 v0.3.5/design/logo/cnas-logo-flat.png create mode 100644 v0.3.5/design/logo/cryptobox_cd-cover_de.jpg create mode 100644 v0.3.5/design/logo/cryptobox_cd-cover_de.svg create mode 100644 v0.3.5/design/logo/cryptobox_cd-cover_en.jpg create mode 100644 v0.3.5/design/logo/cryptobox_cd-cover_en.svg create mode 100644 v0.3.5/design/logo/cryptoboxlogogebastel.svg create mode 100644 v0.3.5/design/logo/cryptoboxlogogebastelhintergrundbild.svg create mode 100644 v0.3.5/design/logo/drachen2.jpg create mode 100644 v0.3.5/design/logo/dragon.png create mode 100644 v0.3.5/design/logo/entwurf.svg create mode 100644 v0.3.5/design/logo/evil_stick.svg create mode 100644 v0.3.5/design/logo/evil_stick2.svg create mode 100644 v0.3.5/design/logo/evil_stick3.svg create mode 100644 v0.3.5/design/logo/goodtime.ttf create mode 100644 v0.3.5/design/logo/neuropol.ttf create mode 100644 v0.3.5/design/logo/syslinux-splash.xcf create mode 100644 v0.3.5/design/logo/website_header.xcf create mode 100644 v0.3.5/design/what_is_cryptobox.svg create mode 100644 v0.3.5/doc/html/de/CryptoBox.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDev.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevBackground.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevCustomBuild.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevCustomConfigure.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevKnownProblems.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevPreparation.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevValidation.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxDevWorkFlow.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxUser.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxUserConfiguration.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxUserDailyUse.html create mode 100644 v0.3.5/doc/html/de/CryptoBoxUserGettingStarted.html create mode 100644 v0.3.5/doc/html/en/CryptoBox.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDev.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevBackground.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevCustomBuild.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevCustomConfigure.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevKnownProblems.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevPreparation.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevValidation.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxDevWorkFlow.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxUser.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxUserConfiguration.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxUserDailyUse.html create mode 100644 v0.3.5/doc/html/en/CryptoBoxUserGettingStarted.html create mode 100644 v0.3.5/event-scripts/README create mode 100644 v0.3.5/event-scripts/_event_scripts_ create mode 100755 v0.3.5/event-scripts/apache2_dav create mode 100755 v0.3.5/event-scripts/samba create mode 100644 v0.3.5/intl/cryptobox-server.pot create mode 100644 v0.3.5/intl/cs/cryptobox-server.po create mode 100644 v0.3.5/intl/da/cryptobox-server.po create mode 100644 v0.3.5/intl/de/cryptobox-server.po create mode 100644 v0.3.5/intl/en/cryptobox-server.po create mode 100644 v0.3.5/intl/es/cryptobox-server.po create mode 100644 v0.3.5/intl/et/cryptobox-server.po create mode 100644 v0.3.5/intl/fi/cryptobox-server.po create mode 100644 v0.3.5/intl/fr/cryptobox-server.po create mode 100644 v0.3.5/intl/hr/cryptobox-server.po create mode 100644 v0.3.5/intl/hu/cryptobox-server.po create mode 100644 v0.3.5/intl/it/cryptobox-server.po create mode 100644 v0.3.5/intl/ja/cryptobox-server.po create mode 100644 v0.3.5/intl/nl/cryptobox-server.po create mode 100644 v0.3.5/intl/pl/cryptobox-server.po create mode 100644 v0.3.5/intl/pt/cryptobox-server.po create mode 100644 v0.3.5/intl/ru/cryptobox-server.po create mode 100644 v0.3.5/intl/sl/cryptobox-server.po create mode 100644 v0.3.5/intl/sv/cryptobox-server.po create mode 100644 v0.3.5/intl/ur/cryptobox-server.po create mode 100644 v0.3.5/man/CryptoBoxRootActions.8 create mode 100644 v0.3.5/man/CryptoBoxWebserver.8 create mode 100644 v0.3.5/package.exclude create mode 100644 v0.3.5/plugins/date/date.py create mode 100644 v0.3.5/plugins/date/form_date.cs create mode 100644 v0.3.5/plugins/date/intl/cryptobox-server-feature-date.pot create mode 100644 v0.3.5/plugins/date/intl/cs/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/da/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/de/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/en/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/es/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/et/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/fi/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/fr/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/hr/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/hu/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/it/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/ja/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/nl/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/pl/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/pt/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/ru/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/sl/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/sv/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/intl/ur/cryptobox-server-feature-date.po create mode 100644 v0.3.5/plugins/date/language.hdf create mode 100644 v0.3.5/plugins/date/plugin_icon.gif create mode 100644 v0.3.5/plugins/date/plugin_icon.png create mode 100755 v0.3.5/plugins/date/root_action.py create mode 100644 v0.3.5/plugins/date/unittests.py create mode 100644 v0.3.5/plugins/disks/disks.cs create mode 100644 v0.3.5/plugins/disks/disks.css create mode 100644 v0.3.5/plugins/disks/disks.py create mode 100644 v0.3.5/plugins/disks/intl/cryptobox-server-feature-disks.pot create mode 100644 v0.3.5/plugins/disks/intl/cs/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/da/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/de/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/en/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/es/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/et/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/fi/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/fr/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/hr/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/hu/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/it/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/ja/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/nl/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/pl/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/pt/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/ru/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/sl/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/sv/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/intl/ur/cryptobox-server-feature-disks.po create mode 100644 v0.3.5/plugins/disks/language.hdf create mode 100644 v0.3.5/plugins/disks/plugin_icon.gif create mode 100644 v0.3.5/plugins/disks/plugin_icon.png create mode 100644 v0.3.5/plugins/disks/unittests.py create mode 100644 v0.3.5/plugins/encrypted_webinterface/encrypted_webinterface.py create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/cryptobox-server-feature-encrypted_webinterface.pot create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/cs/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/da/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/de/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/en/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/es/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/et/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/fi/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/fr/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/hr/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/hu/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/it/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/ja/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/nl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/pl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/pt/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/ru/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/sl/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/sv/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/intl/ur/cryptobox-server-feature-encrypted_webinterface.po create mode 100644 v0.3.5/plugins/encrypted_webinterface/language.hdf create mode 100755 v0.3.5/plugins/encrypted_webinterface/root_action.py create mode 100644 v0.3.5/plugins/encrypted_webinterface/unittests.py create mode 100644 v0.3.5/plugins/help/doc.cs create mode 100644 v0.3.5/plugins/help/help.py create mode 100644 v0.3.5/plugins/help/intl/cryptobox-server-feature-help.pot create mode 100644 v0.3.5/plugins/help/intl/cs/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/da/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/de/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/en/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/es/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/et/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/fi/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/fr/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/hr/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/hu/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/it/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/ja/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/nl/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/pl/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/pt/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/ru/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/sl/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/sv/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/intl/ur/cryptobox-server-feature-help.po create mode 100644 v0.3.5/plugins/help/language.hdf create mode 100644 v0.3.5/plugins/help/plugin_icon.gif create mode 100644 v0.3.5/plugins/help/plugin_icon.png create mode 100644 v0.3.5/plugins/help/unittests.py create mode 100644 v0.3.5/plugins/language_selection/intl/cryptobox-server-feature-language_selection.pot create mode 100644 v0.3.5/plugins/language_selection/intl/cs/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/da/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/de/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/en/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/es/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/et/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/fi/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/fr/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/hr/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/hu/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/it/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/ja/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/nl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/pl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/pt/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/ru/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/sl/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/sv/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/intl/ur/cryptobox-server-feature-language_selection.po create mode 100644 v0.3.5/plugins/language_selection/language.hdf create mode 100644 v0.3.5/plugins/language_selection/language_selection.cs create mode 100644 v0.3.5/plugins/language_selection/language_selection.py create mode 100644 v0.3.5/plugins/language_selection/list_marker_tango.gif create mode 100644 v0.3.5/plugins/language_selection/plugin_icon.gif create mode 100644 v0.3.5/plugins/language_selection/plugin_icon.png create mode 100644 v0.3.5/plugins/language_selection/unittests.py create mode 100644 v0.3.5/plugins/logs/intl/cryptobox-server-feature-logs.pot create mode 100644 v0.3.5/plugins/logs/intl/cs/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/da/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/de/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/en/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/es/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/et/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/fi/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/fr/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/hr/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/hu/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/it/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/ja/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/nl/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/pl/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/pt/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/ru/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/sl/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/sv/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/intl/ur/cryptobox-server-feature-logs.po create mode 100644 v0.3.5/plugins/logs/language.hdf create mode 100644 v0.3.5/plugins/logs/logs.css create mode 100644 v0.3.5/plugins/logs/logs.py create mode 100644 v0.3.5/plugins/logs/plugin_icon.gif create mode 100644 v0.3.5/plugins/logs/plugin_icon.png create mode 100644 v0.3.5/plugins/logs/show_log.cs create mode 100644 v0.3.5/plugins/logs/unittests.py create mode 100644 v0.3.5/plugins/network/form_network.cs create mode 100644 v0.3.5/plugins/network/intl/cryptobox-server-feature-network.pot create mode 100644 v0.3.5/plugins/network/intl/cs/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/da/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/de/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/en/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/es/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/et/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/fi/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/fr/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/hr/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/hu/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/it/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/ja/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/nl/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/pl/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/pt/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/ru/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/sl/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/sv/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/intl/ur/cryptobox-server-feature-network.po create mode 100644 v0.3.5/plugins/network/language.hdf create mode 100644 v0.3.5/plugins/network/network.css create mode 100644 v0.3.5/plugins/network/network.py create mode 100644 v0.3.5/plugins/network/plugin_icon.gif create mode 100644 v0.3.5/plugins/network/plugin_icon.png create mode 100755 v0.3.5/plugins/network/root_action.py create mode 100644 v0.3.5/plugins/network/unittests.py create mode 100644 v0.3.5/plugins/partition/current_partition_info.cs create mode 100644 v0.3.5/plugins/partition/intl/cryptobox-server-feature-partition.pot create mode 100644 v0.3.5/plugins/partition/intl/cs/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/da/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/de/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/en/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/es/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/et/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/fi/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/fr/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/hr/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/hu/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/it/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/ja/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/nl/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/pl/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/pt/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/ru/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/sl/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/sv/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/intl/ur/cryptobox-server-feature-partition.po create mode 100644 v0.3.5/plugins/partition/language.hdf create mode 100644 v0.3.5/plugins/partition/partition.css create mode 100644 v0.3.5/plugins/partition/partition.py create mode 100644 v0.3.5/plugins/partition/plugin_icon.gif create mode 100644 v0.3.5/plugins/partition/plugin_icon.png create mode 100755 v0.3.5/plugins/partition/root_action.py create mode 100644 v0.3.5/plugins/partition/select_device.cs create mode 100644 v0.3.5/plugins/partition/set_partitions.cs create mode 100644 v0.3.5/plugins/partition/unittests.py create mode 100644 v0.3.5/plugins/plugin-interface.txt create mode 100644 v0.3.5/plugins/plugin_icon_unknown.gif create mode 100644 v0.3.5/plugins/plugin_icon_unknown.png create mode 100644 v0.3.5/plugins/plugin_manager/intl/cryptobox-server-feature-plugin_manager.pot create mode 100644 v0.3.5/plugins/plugin_manager/intl/cs/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/da/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/de/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/en/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/es/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/et/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/fi/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/fr/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/hr/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/hu/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/it/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/ja/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/nl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/pl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/pt/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/ru/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/sl/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/sv/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/intl/ur/cryptobox-server-feature-plugin_manager.po create mode 100644 v0.3.5/plugins/plugin_manager/language.hdf create mode 100644 v0.3.5/plugins/plugin_manager/plugin_icon.gif create mode 100644 v0.3.5/plugins/plugin_manager/plugin_icon.png create mode 100644 v0.3.5/plugins/plugin_manager/plugin_list.cs create mode 100644 v0.3.5/plugins/plugin_manager/plugin_manager.css create mode 100644 v0.3.5/plugins/plugin_manager/plugin_manager.py create mode 100644 v0.3.5/plugins/plugin_manager/tango-go-down.png create mode 100644 v0.3.5/plugins/plugin_manager/tango-go-up.png create mode 100644 v0.3.5/plugins/plugin_manager/unittests.py create mode 100644 v0.3.5/plugins/plugin_template/form_plugin_template.cs create mode 100644 v0.3.5/plugins/plugin_template/language.hdf create mode 100644 v0.3.5/plugins/plugin_template/plugin_icon.gif create mode 100644 v0.3.5/plugins/plugin_template/plugin_icon.png create mode 100644 v0.3.5/plugins/plugin_template/plugin_template.py create mode 100644 v0.3.5/plugins/plugin_template/unittests.py create mode 100644 v0.3.5/plugins/shutdown/form_shutdown.cs create mode 100644 v0.3.5/plugins/shutdown/gnome-reboot.gif create mode 100644 v0.3.5/plugins/shutdown/gnome-reboot.png create mode 100644 v0.3.5/plugins/shutdown/gnome-shutdown.gif create mode 100644 v0.3.5/plugins/shutdown/gnome-shutdown.png create mode 100644 v0.3.5/plugins/shutdown/intl/cryptobox-server-feature-shutdown.pot create mode 100644 v0.3.5/plugins/shutdown/intl/cs/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/da/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/de/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/en/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/es/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/et/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/fi/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/fr/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/hr/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/hu/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/it/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/ja/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/nl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/pl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/pt/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/ru/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/sl/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/sv/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/intl/ur/cryptobox-server-feature-shutdown.po create mode 100644 v0.3.5/plugins/shutdown/language.hdf create mode 100644 v0.3.5/plugins/shutdown/plugin_icon.gif create mode 100644 v0.3.5/plugins/shutdown/plugin_icon.png create mode 100644 v0.3.5/plugins/shutdown/progress_reboot.cs create mode 100644 v0.3.5/plugins/shutdown/progress_shutdown.cs create mode 100755 v0.3.5/plugins/shutdown/root_action.py create mode 100644 v0.3.5/plugins/shutdown/shutdown.py create mode 100644 v0.3.5/plugins/shutdown/unittests.py create mode 100644 v0.3.5/plugins/system_preferences/intl/cryptobox-server-feature-system_preferences.pot create mode 100644 v0.3.5/plugins/system_preferences/intl/cs/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/da/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/de/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/en/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/es/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/et/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/fi/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/fr/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/hr/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/hu/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/it/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/ja/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/nl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/pl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/pt/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/ru/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/sl/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/sv/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/intl/ur/cryptobox-server-feature-system_preferences.po create mode 100644 v0.3.5/plugins/system_preferences/language.hdf create mode 100644 v0.3.5/plugins/system_preferences/plugin_icon.gif create mode 100644 v0.3.5/plugins/system_preferences/plugin_icon.png create mode 100644 v0.3.5/plugins/system_preferences/show_plugins.cs create mode 100644 v0.3.5/plugins/system_preferences/system_preferences.py create mode 100644 v0.3.5/plugins/system_preferences/unittests.py create mode 100644 v0.3.5/plugins/user_manager/intl/cryptobox-server-feature-user_manager.pot create mode 100644 v0.3.5/plugins/user_manager/intl/cs/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/da/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/de/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/en/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/es/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/et/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/fi/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/fr/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/hr/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/hu/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/it/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/ja/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/nl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/pl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/pt/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/ru/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/sl/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/sv/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/intl/ur/cryptobox-server-feature-user_manager.po create mode 100644 v0.3.5/plugins/user_manager/language.hdf create mode 100644 v0.3.5/plugins/user_manager/plugin_icon.gif create mode 100644 v0.3.5/plugins/user_manager/plugin_icon.png create mode 100644 v0.3.5/plugins/user_manager/unittests.py create mode 100644 v0.3.5/plugins/user_manager/user_list.cs create mode 100644 v0.3.5/plugins/user_manager/user_manager.css create mode 100644 v0.3.5/plugins/user_manager/user_manager.py create mode 100644 v0.3.5/plugins/volume_automount/intl/cryptobox-server-feature-volume_automount.pot create mode 100644 v0.3.5/plugins/volume_automount/intl/cs/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/da/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/de/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/en/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/es/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/et/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/fi/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/fr/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/hr/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/hu/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/it/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/ja/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/nl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/pl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/pt/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/ru/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/sl/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/sv/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/intl/ur/cryptobox-server-feature-volume_automount.po create mode 100644 v0.3.5/plugins/volume_automount/language.hdf create mode 100644 v0.3.5/plugins/volume_automount/unittests.py create mode 100644 v0.3.5/plugins/volume_automount/volume_automount.cs create mode 100644 v0.3.5/plugins/volume_automount/volume_automount.py create mode 100644 v0.3.5/plugins/volume_check_fs/language.hdf create mode 100644 v0.3.5/plugins/volume_check_fs/unittests.py create mode 100644 v0.3.5/plugins/volume_check_fs/volume_check_fs.py create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/cryptobox-server-feature-volume_chpasswd.pot create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/cs/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/da/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/de/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/en/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/es/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/et/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/fi/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/fr/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/hr/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/hu/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/it/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/ja/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/nl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/pl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/pt/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/ru/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/sl/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/sv/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/intl/ur/cryptobox-server-feature-volume_chpasswd.po create mode 100644 v0.3.5/plugins/volume_chpasswd/language.hdf create mode 100644 v0.3.5/plugins/volume_chpasswd/unittests.py create mode 100644 v0.3.5/plugins/volume_chpasswd/volume_chpasswd.cs create mode 100644 v0.3.5/plugins/volume_chpasswd/volume_chpasswd.py create mode 100644 v0.3.5/plugins/volume_details/intl/cryptobox-server-feature-volume_details.pot create mode 100644 v0.3.5/plugins/volume_details/intl/cs/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/da/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/de/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/en/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/es/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/et/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/fi/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/fr/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/hr/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/hu/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/it/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/ja/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/nl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/pl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/pt/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/ru/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/sl/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/sv/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/intl/ur/cryptobox-server-feature-volume_details.po create mode 100644 v0.3.5/plugins/volume_details/language.hdf create mode 100644 v0.3.5/plugins/volume_details/plugin_icon.gif create mode 100644 v0.3.5/plugins/volume_details/plugin_icon.png create mode 100644 v0.3.5/plugins/volume_details/unittests.py create mode 100644 v0.3.5/plugins/volume_details/volume_details.cs create mode 100644 v0.3.5/plugins/volume_details/volume_details.py create mode 100644 v0.3.5/plugins/volume_format_fs/intl/cryptobox-server-feature-volume_format_fs.pot create mode 100644 v0.3.5/plugins/volume_format_fs/intl/cs/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/da/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/de/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/en/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/es/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/et/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/fi/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/fr/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/hr/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/hu/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/it/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/ja/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/nl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/pl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/pt/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/ru/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/sl/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/sv/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/intl/ur/cryptobox-server-feature-volume_format_fs.po create mode 100644 v0.3.5/plugins/volume_format_fs/language.hdf create mode 100644 v0.3.5/plugins/volume_format_fs/plugin_icon.gif create mode 100644 v0.3.5/plugins/volume_format_fs/plugin_icon.png create mode 100644 v0.3.5/plugins/volume_format_fs/unittests.py create mode 100644 v0.3.5/plugins/volume_format_fs/volume_format.cs create mode 100644 v0.3.5/plugins/volume_format_fs/volume_format_fs.py create mode 100644 v0.3.5/plugins/volume_format_fs/volume_format_luks.cs create mode 100644 v0.3.5/plugins/volume_mount/intl/cryptobox-server-feature-volume_mount.pot create mode 100644 v0.3.5/plugins/volume_mount/intl/cs/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/da/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/de/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/en/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/es/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/et/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/fi/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/fr/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/hr/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/hu/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/it/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/ja/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/nl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/pl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/pt/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/ru/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/sl/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/sv/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/intl/ur/cryptobox-server-feature-volume_mount.po create mode 100644 v0.3.5/plugins/volume_mount/language.hdf create mode 100644 v0.3.5/plugins/volume_mount/plugin_icon.gif create mode 100644 v0.3.5/plugins/volume_mount/plugin_icon.png create mode 100644 v0.3.5/plugins/volume_mount/unittests.py create mode 100644 v0.3.5/plugins/volume_mount/volume_mount.cs create mode 100644 v0.3.5/plugins/volume_mount/volume_mount.py create mode 100644 v0.3.5/plugins/volume_mount/volume_status.cs create mode 100644 v0.3.5/plugins/volume_mount/volume_umount.cs create mode 100644 v0.3.5/plugins/volume_props/intl/cryptobox-server-feature-volume_props.pot create mode 100644 v0.3.5/plugins/volume_props/intl/cs/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/da/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/de/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/en/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/es/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/et/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/fi/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/fr/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/hr/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/hu/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/it/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/ja/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/nl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/pl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/pt/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/ru/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/sl/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/sv/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/intl/ur/cryptobox-server-feature-volume_props.po create mode 100644 v0.3.5/plugins/volume_props/language.hdf create mode 100644 v0.3.5/plugins/volume_props/plugin_icon.gif create mode 100644 v0.3.5/plugins/volume_props/plugin_icon.png create mode 100644 v0.3.5/plugins/volume_props/unittests.py create mode 100644 v0.3.5/plugins/volume_props/volume_properties.cs create mode 100644 v0.3.5/plugins/volume_props/volume_props.py create mode 100644 v0.3.5/plugins/volume_rename/intl/cryptobox-server-feature-volume_rename.pot create mode 100644 v0.3.5/plugins/volume_rename/intl/cs/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/da/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/de/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/en/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/es/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/et/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/fi/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/fr/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/hr/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/hu/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/it/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/ja/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/nl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/pl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/pt/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/ru/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/sl/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/sv/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/intl/ur/cryptobox-server-feature-volume_rename.po create mode 100644 v0.3.5/plugins/volume_rename/language.hdf create mode 100644 v0.3.5/plugins/volume_rename/unittests.py create mode 100644 v0.3.5/plugins/volume_rename/volume_rename.cs create mode 100644 v0.3.5/plugins/volume_rename/volume_rename.py create mode 100755 v0.3.5/scripts/fetch_po_files.sh create mode 100755 v0.3.5/scripts/mk_pydoc.sh create mode 100755 v0.3.5/scripts/show_TODO.sh create mode 100755 v0.3.5/scripts/update_po_files.py create mode 100755 v0.3.5/scripts/userdocexport.sh create mode 100644 v0.3.5/setup.py create mode 100644 v0.3.5/src/cryptobox/__init__.py create mode 100644 v0.3.5/src/cryptobox/core/__init__.py create mode 100644 v0.3.5/src/cryptobox/core/blockdevice.py create mode 100644 v0.3.5/src/cryptobox/core/container.py create mode 100644 v0.3.5/src/cryptobox/core/exceptions.py create mode 100644 v0.3.5/src/cryptobox/core/main.py create mode 100644 v0.3.5/src/cryptobox/core/settings.py create mode 100644 v0.3.5/src/cryptobox/plugins/__init__.py create mode 100644 v0.3.5/src/cryptobox/plugins/base.py create mode 100644 v0.3.5/src/cryptobox/plugins/manage.py create mode 100644 v0.3.5/src/cryptobox/tests/__init__.py create mode 100644 v0.3.5/src/cryptobox/tests/base.py create mode 100755 v0.3.5/src/cryptobox/tests/test.core.blockdevice.py create mode 100755 v0.3.5/src/cryptobox/tests/test.cryptobox.py create mode 100755 v0.3.5/src/cryptobox/tests/test.plugins.py create mode 100755 v0.3.5/src/cryptobox/tests/test.websites.py create mode 100644 v0.3.5/src/cryptobox/tests/tools.py create mode 100644 v0.3.5/src/cryptobox/web/__init__.py create mode 100644 v0.3.5/src/cryptobox/web/dataset.py create mode 100644 v0.3.5/src/cryptobox/web/languages.py create mode 100644 v0.3.5/src/cryptobox/web/sites.py create mode 100644 v0.3.5/src/pylintrc create mode 100644 v0.3.5/stuff/debian-package_policy.txt create mode 100644 v0.3.5/stuff/known_problems create mode 100644 v0.3.5/stuff/language_specification.txt create mode 100644 v0.3.5/stuff/pootle-updates.txt create mode 100644 v0.3.5/stuff/uml-howto.txt create mode 100644 v0.3.5/stuff/upload_and_release-policy.txt create mode 100644 v0.3.5/templates/access_denied.cs create mode 100644 v0.3.5/templates/empty.cs create mode 100644 v0.3.5/templates/footer.cs create mode 100644 v0.3.5/templates/header.cs create mode 100644 v0.3.5/templates/language.hdf create mode 100644 v0.3.5/templates/macros.cs create mode 100644 v0.3.5/templates/main.cs create mode 100644 v0.3.5/templates/show_volume_footer.cs create mode 100644 v0.3.5/templates/show_volume_header.cs create mode 100644 v0.3.5/templates/volume_busy.cs create mode 100644 v0.3.5/templates/volume_plugins.cs create mode 100644 v0.3.5/www-data/background_frame_corner.png create mode 100644 v0.3.5/www-data/background_frame_top.png create mode 100644 v0.3.5/www-data/backpane_left.png create mode 100644 v0.3.5/www-data/backpane_left_top.gif create mode 100644 v0.3.5/www-data/backpane_left_top.png create mode 100644 v0.3.5/www-data/backpane_right.png create mode 100644 v0.3.5/www-data/backpane_right_top.gif create mode 100644 v0.3.5/www-data/backpane_right_top.png create mode 100644 v0.3.5/www-data/backpane_top.png create mode 100644 v0.3.5/www-data/cbx-text-logo1.png create mode 100644 v0.3.5/www-data/cbx-text-logo2.png create mode 100644 v0.3.5/www-data/cbx_logo_left.png create mode 100644 v0.3.5/www-data/cbx_logo_right.png create mode 100644 v0.3.5/www-data/cbx_logo_right_fire.png create mode 100644 v0.3.5/www-data/cryptobox.css create mode 100644 v0.3.5/www-data/cryptonas-ascii_black_green.css create mode 100644 v0.3.5/www-data/cryptonas_logo_left.png create mode 100644 v0.3.5/www-data/dialog-error_tango.gif create mode 100644 v0.3.5/www-data/dialog-error_tango.png create mode 100644 v0.3.5/www-data/dialog-information_tango.gif create mode 100644 v0.3.5/www-data/dialog-information_tango.png create mode 100644 v0.3.5/www-data/dialog-warning_tango.gif create mode 100644 v0.3.5/www-data/dialog-warning_tango.png create mode 100644 v0.3.5/www-data/environment_warning_background.png create mode 100644 v0.3.5/www-data/face_smile_big.png create mode 100644 v0.3.5/www-data/favicon.ico create mode 100644 v0.3.5/www-data/footer_line.png create mode 100644 v0.3.5/www-data/help_background.png create mode 100644 v0.3.5/www-data/icon_background_active.png create mode 100644 v0.3.5/www-data/icon_background_active_060.png create mode 100644 v0.3.5/www-data/icon_background_active_080.png create mode 100644 v0.3.5/www-data/icon_background_active_100.png create mode 100644 v0.3.5/www-data/icon_background_active_256.png create mode 100644 v0.3.5/www-data/icon_background_active_orange_100.png create mode 100644 v0.3.5/www-data/icon_background_passive_060.png create mode 100644 v0.3.5/www-data/icon_background_passive_080.png create mode 100644 v0.3.5/www-data/icon_background_passive_100.png create mode 100644 v0.3.5/www-data/icon_background_passive_256.png create mode 100644 v0.3.5/www-data/icon_get_help.gif create mode 100644 v0.3.5/www-data/icon_get_help.png create mode 100644 v0.3.5/www-data/icon_get_help_disable.gif create mode 100644 v0.3.5/www-data/icon_get_help_disable.png create mode 100644 v0.3.5/www-data/list.gif create mode 100644 v0.3.5/www-data/register_active.gif create mode 100644 v0.3.5/www-data/register_active.png create mode 100644 v0.3.5/www-data/register_passive.gif create mode 100644 v0.3.5/www-data/register_passive.png create mode 100644 v0.3.5/www-data/screenshots/de_config.png create mode 100644 v0.3.5/www-data/screenshots/de_init.png create mode 100644 v0.3.5/www-data/screenshots/de_mount.png create mode 100644 v0.3.5/www-data/screenshots/de_w98_login.png create mode 100644 v0.3.5/www-data/screenshots/de_w98_network_drive.png create mode 100644 v0.3.5/www-data/screenshots/de_w98_not_logged_in.png create mode 100644 v0.3.5/www-data/screenshots/en_config.png create mode 100644 v0.3.5/www-data/screenshots/en_mount.png create mode 100644 v0.3.5/www-data/screenshots/en_w98_login.png create mode 100644 v0.3.5/www-data/screenshots/en_w98_network_drive.png create mode 100644 v0.3.5/www-data/screenshots/en_w98_not_logged_in.png create mode 100644 v0.3.5/www-data/screenshots/v0.3/activate_volume.png create mode 100644 v0.3.5/www-data/screenshots/v0.3/system_preferences.png create mode 100644 v0.3.5/www-data/smile.png create mode 100644 v0.3.5/www-data/smile4.png create mode 100644 v0.3.5/www-data/volume_active_crypto.gif create mode 100644 v0.3.5/www-data/volume_active_crypto.png create mode 100644 v0.3.5/www-data/volume_active_crypto_busy.gif create mode 100644 v0.3.5/www-data/volume_active_crypto_busy.png create mode 100644 v0.3.5/www-data/volume_active_plain.gif create mode 100644 v0.3.5/www-data/volume_active_plain.png create mode 100644 v0.3.5/www-data/volume_active_plain_busy.gif create mode 100644 v0.3.5/www-data/volume_active_plain_busy.png create mode 100644 v0.3.5/www-data/volume_passive_crypto.gif create mode 100644 v0.3.5/www-data/volume_passive_crypto.png create mode 100644 v0.3.5/www-data/volume_passive_crypto_busy.gif create mode 100644 v0.3.5/www-data/volume_passive_crypto_busy.png create mode 100644 v0.3.5/www-data/volume_passive_plain.gif create mode 100644 v0.3.5/www-data/volume_passive_plain.png create mode 100644 v0.3.5/www-data/volume_passive_plain_busy.gif create mode 100644 v0.3.5/www-data/volume_passive_plain_busy.png create mode 100644 v0.3.5/www-data/volume_property_frame.png diff --git a/v0.3.5/LICENSE b/v0.3.5/LICENSE new file mode 100644 index 0000000..b7b5f53 --- /dev/null +++ b/v0.3.5/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/v0.3.5/MANIFEST.in b/v0.3.5/MANIFEST.in new file mode 100644 index 0000000..5eb8cfe --- /dev/null +++ b/v0.3.5/MANIFEST.in @@ -0,0 +1,15 @@ +include README* +include LICENSE +include changelog +include copyright +graft man +graft scripts +graft doc +graft conf-examples +graft event-scripts +graft www-data +graft templates +graft lang +graft plugins +graft intl +prune package.exclude diff --git a/v0.3.5/README b/v0.3.5/README new file mode 100644 index 0000000..7473328 --- /dev/null +++ b/v0.3.5/README @@ -0,0 +1,199 @@ +******************************************** +* CryptoBox v0.3.xx * +******************************************** + +$Id$ + +This file describes the webserver CryptoBox. +The CryptoBox enables you to control the plaintext or encrypted harddisks of +your server via a webinterface. +Read on if you want to install the CryptoBox-server package on your computer. + +For more information, see the website: + http://cryptobox.org + +Table of contents: + 1) Requirements + 2) Installation + 3) Setup + 4) Usage + 5) Data access + 6) Development + 7) Acknowledgements + 8) Licence + +-------------------------------------------- + +1) Requirements + - Linux 2.6 + - super (to selectively gain root privileges) + - Python 2.4 + - some python packages: + clearsilver 0.10 for python + python-configobj 4.x + cherrypy 2.x + + +2) Installation +For Debian, Ubuntu and other derivates you should use the debian package: + see http://systemausfall.org/toolforge/debian/ + +Please follow the /usr/share/doc/cryptobox-server/README.Debian for +any special steps regarding Debian. + +There are currently no official rpm or other packages of the CryptoBox. +Use the source installation on non-deb based distributions. + +For source installation follow these steps: + Get the source: + http://cryptobox.org/download + + Extract tarball and change to the new directory: + tar xzf cryptobox-0.?.?.tar.gz + + Install the program: + python setup.by install + + Fulfil the requirements: + read more in the user documentation + +The installed pyhton modules can be found in your local python installation directory. +The default location should be: + /usr/lib/python2.4/site-packages/cryptobox/ +The data files are (by default) installed to: + /usr/share/cryptobox-server/ + +As some actions of the cryptobox require root privileges, you have to add the +following line to /etc/super.tab: + CryptoBoxRootActions /usr/bin/CryptoBoxRootActions cryptobox +The script /usr/bin/CryptoBoxRootActions is used to execute all actions +requiring root privileges. Please check it to make sure, that your system will +not get compromised. + + +3) Setup + + a) Start at bootup + Set NO_START in /etc/default/cryptobox-server to "0". + The CryptoBox webserver will get started by its runlevel control script + after bootup. + + b) Define managed devices + You may restrict which blockdevices should be accessible to the CryptoBox. + Simply set [Main]->AllowedDevices in /etc/cryptobox-server/cryptobox.conf + to a comma separated list of device prefixes: e.g. /dev/sd gives access to + all SCSI devices, while /dev/hda3 restricts it to this single partition. + The user executing the webserver (by default: 'cryptobox') must have write + access to these devices. Usually the cryptobox user is member of the 'disk' + group. This gives control over most devices. + Be careful with this setting, as you may expose important data to public + read and write access. + + c) Listening port and interface + By default, the CryptoBox webserver listens to tcp port 8080 on all network + interfaces. You can change this setting in /etc/default/cryptobox-server. + Also take a look at your firewall settings. + + d) Disable plugins + The CryptoBox contains a lot of plugins. As some of them could expose + unwanted features to your users, you should carefully select which plugins + to disable. + Quite likely candidates for disabling are: + - shutdown: poweroff or reboot the computer + - network: change IP, gateway or dns settings of the server + - partition: partition blockdevices + - volume_format_fs: format a disk/partition (plaintext/encrypted) + Take a look at /usr/share/cryptobox-server/plugins for the list of + other plugins. + The setting [Main]->DisabledPlugins in /etc/cryptobox-server/cryptobox.conf + is a comma separated list of plugin names. Capitalization is important! + + e) Separate configuration partition + The CryptoBox webserver requires a writeable directory for proper + operation. If your root filesystem is not writeable (e.g. booting from a + cdrom, read-only mounted flash memory, ...) you may use a seperated + partition to store runtime settings. The CryptoBox will automatically + creates it, when you use partition one of your disks with its interface. + The setting [Main]->UseConfigPartition (see + /etc/cryptobox-server/cryptobox.conf) defines, whether you want to use a + separate partition (value "1") or if you want to store your runtime + settings in the root filesystem (typically below + /var/cache/cryptobox-server). + + f) Samba/WebDAV/NFS/??? integration (aka. event script handling) + The CryptoBox allows you to add event handling scripts for most of the + interesting events: bootup/shutdown of the webserver and mount/umount + of single volumes. + If you want to automatically publish your mounted volumes with samba + or similar fileservers, then you should take a closer look at the + example scripts for samba and apache-webdav in + /usr/share/doc/cryptobox-server/event-scripts. + You may also just publish the mount directory of the CryptoBox. This + will expose all mounted volumes very easily. Review the configuration + file for the setting [Locations]->MountParentDir. + + g) Take a close look at the configuration file to check all other options + before you start the CryptoBox webserver. + + +4) Usage +Use your favourite web browser to go to http://localhost:8080 and browse the +webinterface of the CryptoBox. +Some parts of the interface are restricted to administrative access. The +default access combination is the user 'admin' and the password 'admin'. Please +change this setting immediately. +The plugin 'user_manager' allows you to add users and to change passwords. +The plugin 'plugin_manager' lets you configure, which plugins require +administrative authentication. + + +5) Data access +Before you can access your plaintext or encrypted data on a volume, you have to +open it. To accomplish this, you have to go to the webinterface, select the +appropriate volume and click on "Open volume" in the "Activation" tab. + +If you are running the CryptoBox locally, then you can access all open volumes +below the 'MountDir' as specified in the configuration file +(/etc/cryptobox-server/cryptobox.conf). The default mount location is +/var/cache/cryptobox/mnt. + +If the CryptoBox package is running on a networking server, then you have to +configure your favourite fileserver (e.g. samba, webdav, nfs, ftp, ...) to +publish the subdirectories of the 'MountDir' (see above). +If you want to customize the publishing of volumes, then you may use the +event script feature fo the CryptoBox. See event-scripts/README for details. + + +6) Development +bug reports: please use our issue tracker + https://systemausfall.org/trac/cryptobox/newticket + +email: + info@cryptobox.org + +The CryptoBox project is mainly driven by sense.lab (http://senselab.org). + + +7) Acknowledgements +Besides the core development team, these people helped a lot: +Clavdia Horvat, Tadej Brce & Dušan Rebolj - Slovenian translation +rike - French translation +Fabrizio Tarizzo - Italian translation +kinneko - Japanese translation +Andrzej S. Kaznowski - Polish translation +Fadrique - Spanish translation +Michiel van Dijk - Dutch translation +Raimar - the blender dragon +Gilles Accad - French translation +ASpr - Russian translation + +We also want to thank the numerous developers of the Free Software, the +CryptoBox depends on and that was used in development. + + +8) License +The code is licensed under the GPL v2.0 or above. +The documentation and all graphics are licenced under "Creative Commons Attribution +Share-Alike 2.5" (http://creativecommons.org/licenses/by-sa/2.5/). +See the file 'copyright' for details. + diff --git a/v0.3.5/README.davfs b/v0.3.5/README.davfs new file mode 100644 index 0000000..6687d23 --- /dev/null +++ b/v0.3.5/README.davfs @@ -0,0 +1,47 @@ +Integration of apach2 as a (Web)DAV server into the CryptoBox + +This file describes how to expose the volumes that are managed by the CryptoBox +through WebDAV shares. +Apache2 including the dav_fs module is the most common server for the WebDAV +filesystem. The following description will focus on this server. + +First you have to install apache2 and the dav_fs module. +Use your favourite package manager to install them. +(Note for debian: the dav_fs module is part of the apache2-common package. +Just activate the module via 'a2enmod dav_fs'.) + +There are two different ways to do use dav shares: + + +A) one share for all volumes together + +Just create a file with the following lines to your /etc/apache2/conf.d directory: + Alias "/cryptobox" "/var/cache/cryptobox-server/mnt" + + Dav filesystem + + +Reload the new apache2 configuration by calling: + invoke-rc.d apache2 reload + + + +B) one share for each volume + +Copy the example event script +/usr/share/doc/cryptobox-server/event-script/apache2_dav to +/etc/cryptobox-server/events.d/apache2_dav. This event handler will add and remove +shares whenever a volume is mounted or unmounted via the CryptoBox webinterface. + +Copy the file /usr/share/doc/cryptobox-server/conf-examples/apache2_dav.conf to +/etc/apache2/conf.d/apache2_dav. + +Create a directory for the apache share config files: + mkdir -p /var/cache/cryptobox-server/apache2_dav.conf.d + +Chown it to the cryptobox user: + chown cryptobox /var/cache/cryptobox-server/apache2_dav.conf.d + +Reload the new apache2 configuration by calling: + invoke-rc.d apache2 reload + diff --git a/v0.3.5/README.proxy b/v0.3.5/README.proxy new file mode 100644 index 0000000..cf3ab5a --- /dev/null +++ b/v0.3.5/README.proxy @@ -0,0 +1,66 @@ +Running the CryptoBox behind a proxy + +This describes how to setup the CryptoBox webserver behind a proxy webserver +(e.g.: apache or lighttpd). + + + +-=-=-=- apache in front of the cryptobox-server (cherrypy) -=-=-=- + + +The following section describes how to configure an apache2 webserver to +forward requests to the cherrypy server of the CryptoBox. + + +1) Required modules + - proxy + - headers + Both module should be part of usual default installations of apache2. + Activate these modules. For debian you should run: a2enmod MOD_NAME + + +2) Configuration directives + The following example should help you to create your own proxy configuration + for apache2. + + ProxyRequests Off + + + Order Deny,Allow + Allow from all + + + + ProxyPass http://localhost:8080/ + ProxyPassReverse http://localhost:8080/ + RequestHeader set CryptoBox-Location /cryptobox + # uncomment the next line for ssl-enabled virtualhosts + RequestHeader set X-SSL-Request 1 + + + Now you should restart apache2. + + +3) Testing + Now you should point your webserver to the proxy host and check if + the CryptoBox layout ist displayed properly. + + + +-=-=-=- lighttpd in front of the cryptobox-server (cherrypy) -=-=-=- + + +In this section we do the same as above, but with lighttpd. + +Your lighttpd config should contain something like this: + + # selecting modules + server.modules = ( "mod_scgi" ) + + scgi.server = ( "/cryptobox" => + (( "host" => "127.0.0.1", + "port" => 8080, + "check-local" => "disable" + )) + ) + diff --git a/v0.3.5/README.samba b/v0.3.5/README.samba new file mode 100644 index 0000000..5d87185 --- /dev/null +++ b/v0.3.5/README.samba @@ -0,0 +1,31 @@ +Integration of samba into the CryptoBox + +This file describes how to expose the volumes that are managed by the CryptoBox +through samba shares. + +There are two different ways to do this: + + +A) one share for all volumes together + +Just add the following lines to your /etc/samba/smb.conf: + [cryptobox] + path = /var/cache/cryptobox-server/mnt + browseable = yes + read only = no + guest ok = yes + +Reload the new samba configuration by calling: + invoke-rc.d samba reload + + +B) one share for each volume + +Copy the example event script /usr/share/doc/cryptobox-server/event-scripts/samba +to /etc/cryptobox-server/events.d/samba and make sure it is executable +by root. This event handler will add and remove shares whenever a volume is mounted +or unmounted via the CryptoBox webinterface. + +Add the following line to your /etc/samba/smb.conf: + include = /var/cache/cryptobox-server/settings/misc/samba-include.conf + diff --git a/v0.3.5/README.ssl b/v0.3.5/README.ssl new file mode 100644 index 0000000..6d4dd81 --- /dev/null +++ b/v0.3.5/README.ssl @@ -0,0 +1,113 @@ +Encrypting the http traffic to the CryptoBox webserver with SSL + +This file describes how to encrypt your connection to the CryptoBox webserver. +This is highly recommended as the encryption password for your data could be +exposed to intruders in your local network otherwise. + +Below you will find detailed descriptions on how to set up an encrypted +connection to the webinterface: + - use the plugin "encrypted_webinterface" + - run the CryptoBox webserver behind an ssl-enabled webserver + - use stunnel or stunnel4 to provide an SSL socket + - use the a proxy server (e.g. pound) + - ... + +At the end of this document you will find some information on how to turn off +SSL detection of the CryptoBox. You should read it, if there is no solution +for your specific setup available or if you are _very_ sure, that you do not +need encrypted http connections. + +------------------------------------------------------------------- + +1) using the plugin 'encrypted_webinterface' + This plugin is disabled by default. You can enable it in your + cryptobox.conf file by removing it from the 'DisabledPlugins' setting. + + The plugin does the following during startup of the CryptoBox: + - create a self-signed X.509 certificate if necessary + - run stunnel4 from port 80 to 443 (https) with this certificate + + Of course, this will not work, if the port 443 is already in use by + another program - in this case, you should better choose one of the + solutions described below. + + Now, you need to point your browser to the URL of the CryptoBox with + 'https' instead of 'http'. Or just follow the "Use encrypted + connection" link that appears, if you use plain http. + + For a finer tuned certifacte follow the steps under "CryptoBox + behind stunnel". + + +------------------------------------------------------------------- + +2) CryptoBox behind an ssl-enabled webserver + Read the documentation of your favourite webserver to learn how to enable + ssl encryption. + + The CryptoBox webserver cannot detect whether the connection is encrypted + or not since it is behind the proxy webserver and does not share its + environment. Thus you have to tell the CryptoBox in the request header + whether the connection is encrypted or not. + + for apache2: + 1) enable the 'headers' module (for debian: "a2enmod headers") + 2) add this line to your ssl-enabled virtualhost: + RequestHeader set X-SSL-Request 1 + 3) restart your webserver + + +------------------------------------------------------------------- + +3) CryptoBox behind stunnel (configured manually) + You may want to tunnel the traffic between the cryptobox-server + and your browser. "stunnel" or "stunnel4" are excellent candidates for this job. + + If you do not have an ssl certificate yet, then you should create + one first. On Debian: "apt-get install ssl-cert" and run the following + command (the supplied example openssl.conf file resides in the doc + directory of the cryptobox-server package): + + make-ssl-cert conf-examples/openssl.conf + + In case, that you already have a certificate just run this command: + + stunnel -p -r localhost:80 -d 443 + + And maybe you want to add the last command to your bootup scripts. + + +------------------------------------------------------------------- + +4) CryptoBox behind a proxy server + As there are many proxy servers around, we cannot describe all of them. As + an example, we will explain the setup of the load-balancing proxy 'pound' + (http://www.apsis.ch/pound/). + + Just add the following lines to you /etc/pound/pound.cfg: + # Remove the X-SSL-Request header from incoming + # connections to prevent hackers from spoofing it + HeadRemove "X-SSL-Request" + + # Add an extra header to tell the CryptoBox that + # the external connection is secure + HTTPSHeaders 0 "X-SSL-Request: 1" + + This example is taken from: + http://jamesthornton.com/writing/openacs-pound.html + + +------------------------------------------------------------------- + +5) Problems with SSL detection? + If the CryptoBox continues to complain about the unencrypted connection, even + if it runs behind an ssl-enabled webserver or behind stunnel, then you can do + one of the following things: + - disable the plugin 'encypted_webinterface' in the cryptobox.conf file + if you do not need it + - set the request header value "X-SSL-Request" to "1" (the digit 'one') + - set the environment setting "HTTPS" to a non-empty value during the + startup of the CryptoBox webserver. Maybe + /etc/default/cryptobox-server would be the right place for this. + - let the CryptoBox webserver listen to port 443 + diff --git a/v0.3.5/bin/CryptoBoxRootActions b/v0.3.5/bin/CryptoBoxRootActions new file mode 100755 index 0000000..3f2e534 --- /dev/null +++ b/v0.3.5/bin/CryptoBoxRootActions @@ -0,0 +1,555 @@ +#!/usr/bin/env python +# +# Copyright 2007 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# The CryptoBox is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +"""module for executing some programs or scripts that need root privileges + +Syntax: + check + - return exitcode zero if basic checks succeeded + + program PROGRAM_NAME [ARGS] + - call the program (must be defined in "allowedProgs" below) + + event EVENT_SCRIPT [ARGS] + - call an event script + + plugin PLUGIN_NAME [ARGS] + - call a root_action script of a plugin + + +Exitcodes: + 0 - execution was ok + 1 - the executed program or action returned a failure exitcode + 100 - improper calling or misconfiguration + of CryptoBoxRootAction (wrong arguments, wrong uid) + 101 - failed to execute the given program - maybe it does not exist? + +For more detailed information take a look at the manpage: + "man CryptoBoxRootActions" +""" + +__revision__ = "$Id" + +import os +import sys +import subprocess +import pwd +import grp +import types + +allowedProgs = { + "sfdisk": "/sbin/sfdisk", + "cryptsetup": "/sbin/cryptsetup", + "mount": "/bin/mount", + "umount": "/bin/umount", + "blkid": "/sbin/blkid", + "pvdisplay": "/sbin/pvdisplay", + } + +## this line is necessary for running unittests or playing around with a local +## svn working copy - otherwise the security checks would be too strict +OVERRIDE_FILECHECK = False + +DEV_TYPES = { "pipe":1, "char":2, "dir":4, "block":6, "file":8, "link":10, "socket":12} +EVENT_MARKER = '_event_scripts_' +## use this string as device name if you want to mount a ramdisk +MAGIC_TMPFS = "_tmpfs_" + + +def checkIfFileIsSafe(fname): + """check if the file and its parents are only writeable for root""" + ## the override setting may be turned off temporarily to allow unittests + if OVERRIDE_FILECHECK: + return True + ## if the calling user id is 0 (root), then we do not have to check this, + ## as root would be allowed to do this anyway + ## this eases testing with a not-installed working copy in a uml environment + if getCallingUserInfo()[1] == 0: + return True + props = os.stat(fname) + ## check if it is owned by non-root + if props.st_uid != 0: return False + ## check group-write permission if gid is not zero + if (props.st_gid != 0) and (props.st_mode % 32 / 16 > 0): return False + ## check if it is world-writeable + if props.st_mode % 4 / 2 > 0: return False + ## are we at root-level (directory-wise)? If yes, then we are ok ... + if fname == os.path.sep: return True + ## check if the parent directory is ok - recursively :) + return checkIfFileIsSafe(os.path.dirname(os.path.abspath(fname))) + + +def checkIfPluginIsValid(plugin): + import imp + try: + x = imp.load_source("cbox_plugin", plugin) + except (SyntaxError, IOError): + return False + try: + if getattr(x, "PLUGIN_TYPE") == "cryptobox": + return True + else: + return False + except AttributeError: + return False + + +def checkIfEventScriptIsValid(plugin): + event_dir = os.path.dirname(plugin) + if os.path.exists(os.path.join(event_dir, EVENT_MARKER)): + return True + else: + return False + + +def call_plugin(args): + """check if the plugin may be called - and do it finally ...""" + plugin = os.path.abspath(args[0]) + del args[0] + ## check existence and if it is executable + if not os.access(plugin, os.X_OK): + raise Exception, "could not find executable plugin (%s)" % plugin + ## check if the plugin (and its parents) are only writeable for root + ## this can be overridden by OVERRIDE_FILECHECK + if not checkIfFileIsSafe(plugin): + raise Exception, "the plugin (%s) is not safe - check its " % plugin \ + + "(and its parents') permissions" + ## check if the plugin is a python program, that is marked as a cryptobox plugin + if not checkIfPluginIsValid(plugin): + raise Exception, "the plugin (%s) is not a correctly marked python script" % plugin + args.insert(0, plugin) + proc = subprocess.Popen( + shell = False, + args = args) + proc.wait() + return proc.returncode == 0 + + +def call_event(args): + """check if the event script may be called - and do it finally ...""" + event = os.path.abspath(args[0]) + del args[0] + ## check existence and if it is executable + if not os.access(event, os.X_OK): + raise Exception, "could not find executable event script (%s)" % event + ## check if the script is valid (the marker file must be in the same directory) + if not checkIfEventScriptIsValid(event): + raise Exception, "the event script (%s) does not reside in" % event \ + + "a directory with the marker file (%s) - this " % EVENT_MARKER \ + + "is not allowed due to abuse prevention" + ## check if the event (and its parents) are only writeable for root + if not checkIfFileIsSafe(event): + raise Exception, "the event (%s) is not safe - check its " % event \ + + "(and its parents') permissions" + args.insert(0, event) + proc = subprocess.Popen( + shell = False, + args = args) + proc.wait() + return proc.returncode == 0 + + +def isWriteable(path, force_dev_type=None): + """check if the calling user (not root!) has write access to the device/file + + the real (not the effective) user id is used for the check + additionally the permissions of the default groups of the real uid are checked + it is sufficient, if the device/dir is owned by us + this check works nicely together with "super", as it changes (by default) only + the effective uid (not the real uid) + """ + ## first check, if the device/file exists + if not os.path.exists(path): + sys.stderr.write("%s does not exist!\n" % path) + return False + ## check the type of the path - if necessary + if (not force_dev_type is None) and \ + (force_dev_type != os.stat(path).st_mode % 65536 / 4096): + sys.stderr.write("%s does not have the numeric type '%d'!\n" \ + % (path, force_dev_type)) + return False + ## retrieve the information for the real user id + (trustUserName, trustUID, groupsOfTrustUser) = getCallingUserInfo() + ## are we called by the root user? this would be ok + if trustUID == 0: + return True + ## is the path owned by us? + if os.stat(path)[4] == trustUID: + return True + ## set the default groups of the caller for the check (restore them later) + savedGroups = os.getgroups() + os.setgroups(groupsOfTrustUser) + ## check permissions + result = os.access(path, os.W_OK) and os.access(path, os.R_OK) + ## reset the groups of this process + os.setgroups(savedGroups) + return result + + +def run_cryptsetup(args): + """execute cryptsetup as root + + @args: list of arguments - they will be treated accordingly to the first element + of this list (the action)""" + if not args: raise "WrongArguments", "no action for cryptsetup supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + try: + action = args[0] + del args[0] + device = None + cmd_args = [] + if action == "luksFormat": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksUUID": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksOpen": + if len(args) < 2: raise "WrongArguments", "missing arguments" + device = args[0]; del args[0] + destination = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + cmd_args.append(destination) + elif action == "luksClose": + if len(args) < 1: raise "WrongArguments", "missing arguments" + destination = args[0]; del args[0] + # maybe add a check for the mapped device's permissions? + # dmsetup deps self.device + cmd_args.append(action) + cmd_args.append(destination) + elif action == "luksAddKey": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + elif action == "luksDelKey": + if len(args) < 2: raise "WrongArguments", "missing arguments" + device = args[0]; del args[0] + slot = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + cmd_args.append(slot) + elif action == "isLuks": + device = args[0]; del args[0] + cmd_args.append(action) + cmd_args.append(device) + else: raise "WrongArguments", "invalid action supplied: %s" % (action, ) + # check if a device was defined - and check it + if (not device is None) and (not isWriteable(device, DEV_TYPES["block"])): + raise "WrongArguments", "%s is not a writeable block device" % (device, ) + cs_args = [allowedProgs["cryptsetup"]] + cs_args.extend(args) + cs_args.extend(cmd_args) + except (TypeError, IndexError): + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + # execute cryptsetup with the given parameters + proc = subprocess.Popen( + shell = False, + args = cs_args) + proc.wait() + ## chown the devmapper block device to the cryptobox user + calling_user = getCallingUserInfo() + if (proc.returncode == 0) and (action == "luksOpen"): + os.chown(os.path.join(os.path.sep, "dev", "mapper", destination), + calling_user[1], calling_user[2][0]) + return proc.returncode == 0 + + +def getFSType(device): + """get the filesystem type of a device""" + proc = subprocess.Popen( + shell = False, + stdout = subprocess.PIPE, + args = [ allowedProgs["blkid"], + "-s", "TYPE", + "-o", "value", + "-c", os.devnull, + "-w", os.devnull, + device]) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + return None + return stdout.strip() + + +def run_mount(args): + """execute mount + """ + if not args: raise "WrongArguments", "no destination for mount supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + try: + device = args[0] + del args[0] + destination = args[0] + del args[0] + ## shall we mount a ramdisk? + is_tmpfs = (device == MAGIC_TMPFS) + # check permissions for the device + if (not is_tmpfs) and (not isWriteable(device, DEV_TYPES["block"])): + raise "WrongArguments", "%s is not a writeable block device" % (device, ) + ## check permissions for the mountpoint + if not isWriteable(destination, DEV_TYPES["dir"]): + raise "WrongArguments", "the mountpoint (%s) is not writeable" \ + % (destination, ) + # check for additional (not allowed) arguments + if len(args) != 0: + raise "WrongArguments", "too many arguments for 'mount': %s" % (args, ) + except TypeError: + raise "WrongArguments", "invalid arguments supplied: %s" % (args, ) + # execute mount with the given parameters + # first overwrite the real uid, as 'mount' wants this to be zero (root) + savedUID = os.getuid() + os.setuid(os.geteuid()) + ## we have to change the permissions of the mounted directory - otherwise it will + ## not be writeable for the cryptobox user + ## for 'vfat' we have to do this during mount + ## for ext2/3 we have to do it afterward + ## first: get the user/group of the target + (trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(savedUID) + trustGID = groupsOfTrustUser[0] + if is_tmpfs: + fsType = "tmpfs" + else: + fsType = getFSType(device) + ## define arguments + if fsType == "vfat": + ## add the "uid/gid" arguments to the mount call + mount_args = [ allowedProgs["mount"], + "-o", "uid=%d,gid=%d,umask=0000" % (trustUID, trustGID), + device, + destination ] + ## use fuse (ntfs-3g) for ntfs + elif fsType == "ntfs": + mount_args = [ allowedProgs["mount"], + "-t", "ntfs-3g", + device, + destination ] + elif is_tmpfs: + mount_args = [ allowedProgs["mount"], + "-t", "tmpfs", + "cryptobox-tmpfs", destination ] + else: + ## all other filesystem types will be handled after mount + mount_args = [ allowedProgs["mount"], device, destination ] + # execute mount + proc = subprocess.Popen( + shell = False, + args = mount_args) + proc.wait() + ## return in case of an error + if proc.returncode != 0: + return False + ## for vfat: we are done + if fsType == "vfat": return True + ## for all other filesystem types: chown the mount directory + try: + os.chown(destination, trustUID, groupsOfTrustUser[0]) + except OSError, errMsg: + sys.stderr.write("could not chown the mount destination (%s) " % destination \ + + "to the specified user (%d/%d): " % (trustUID, groupsOfTrustUser[0]) \ + + "%s/n" % str(errMsg)) + sys.stderr.write("UID: %d\n" % (os.geteuid(),)) + return False + ## BEWARE: it would be nice, if we could restore the previous uid (not euid) but + ## this would also override the euid (see 'man 2 setuid') - any ideas? + return True + + +def run_umount(args): + """execute mount + """ + if not args: raise "WrongArguments", "no mountpoint for umount supplied" + if type(args) != types.ListType: + raise "WrongArguments", "invalid arguments supplied" + try: + destination = args[0] + del args[0] + # check permissions for the destination + if not isWriteable(os.path.dirname(destination), DEV_TYPES["dir"]): + raise "WrongArguments", "the parent of the mountpoint " \ + + "(%s) is not writeable" % (destination, ) + if len(args) != 0: raise "WrongArguments", "umount does not allow arguments" + except TypeError: + raise "WrongArguments", "invalid arguments supplied" + # execute umount with the given parameters + # first overwrite the real uid, as 'umount' wants this to be zero (root) + savedUID = os.getuid() + os.setuid(os.geteuid()) + # execute umount (with the parameter '-l' - lazy umount) + proc = subprocess.Popen( + shell = False, + args = [allowedProgs["umount"], "-l", destination]) + proc.wait() + # restore previous real uid + os.setuid(savedUID) + return proc.returncode == 0 + + +def run_pvdisplay(args): + """execute pvdisplay to check for physical LVM devices + """ + if len(args) > 0: + raise "WrongArguments", "no arguments may be supplied for 'pvdisplay'" + ## call pvdisplay with the parameter "--colon" + proc = subprocess.Popen( + shell = False, + args = [ allowedProgs["pvdisplay"], "--colon" ]) + proc.wait() + return proc.returncode == 0 + + +def getCallingUserInfo(): + """return information about the user that was calling this program via "super" + + @user: (uid or name) + @return: tuple of (name, uid, (groups)) + """ + ## are we called via 'super'? + if ("SUPERCMD" in os.environ) and ("ORIG_USER" in os.environ): + ## return the user that was calling super + return getUserInfo(os.environ["ORIG_USER"]) + else: + ## return the current user + return getUserInfo(os.getuid()) + + +def getUserInfo(user): + """return information about the specified user + + @user: (uid or name) + @return: tuple of (name, uid, (groups)) + """ + if (user is None) or (user == ""): + raise "KeyError", "no user supplied" + ## if a KeyError is raised again in the following lines, then the supplied + ## user was invalid + if type(user) is int: + # 'user' is a uid + userinfo = pwd.getpwuid(user) + elif type(user) is str: + # 'user' is a name + userinfo = pwd.getpwnam(user) + u_groups = [one_group.gr_gid + for one_group in grp.getgrall() + if userinfo.pw_name in one_group.gr_mem] + if not userinfo.pw_gid in u_groups: + ## put in front of the list + u_groups.insert(0,userinfo.pw_gid) + return (userinfo.pw_name, userinfo.pw_uid, u_groups) + + +# **************** main ********************** + +# prevent import +if __name__ == "__main__": + + ## do we have root privileges (effective uid is zero)? + if os.geteuid() != 0: + sys.stderr.write("the effective uid is not zero - you should use " \ + + "'super' to call this script (%s)" % sys.argv[0]) + sys.exit(100) + + ## remove program name + args = sys.argv[1:] + + # do not allow to use root permissions (real uid may not be zero) + #if os.getuid() == 0: + # sys.stderr.write("the uid of the caller is zero (root) - this is not allowed\n") + # sys.exit(100) + + ## check if there were arguments + if (len(args) == 0): + sys.stderr.write("No arguments supplied\n") + sys.exit(100) + + ## did the user call the "check" action? + if (len(args) == 1) and (args[0].lower() == "check"): + # exit silently + sys.exit(0) + + ## all of the following actions require at least two arguments + if len(args) < 2: + sys.stderr.write("No program/plugin/event specified for execution\n") + sys.exit(100) + + ## call a plugin root_action script + if args[0].lower() == "plugin": + del args[0] + try: + isOK = call_plugin(args) + except Exception, errMsg: + sys.stderr.write("Execution of plugin '%s' failed: %s\n" \ + % (args[0], errMsg)) + sys.exit(100) + if isOK: + sys.exit(0) + else: + sys.exit(1) + + ## call an event script + if args[0].lower() == "event": + del args[0] + try: + isOK = call_event(args) + except Exception, errMsg: + sys.stderr.write("Execution of event '%s' failed: %s\n" \ + % (args[0], errMsg)) + sys.exit(100) + if isOK: + sys.exit(0) + else: + sys.exit(1) + + ## call one of the allowed programs + if args[0].lower() == "program": + del args[0] + + progRequest = args[0] + del args[0] + + if not progRequest in allowedProgs.keys(): + sys.stderr.write("Invalid program requested: %s\n" % progRequest) + sys.exit(100) + + if progRequest == "cryptsetup": runner = run_cryptsetup + elif progRequest == "mount": runner = run_mount + elif progRequest == "umount": runner = run_umount + elif progRequest == "pvdisplay": runner = run_pvdisplay + else: + sys.stderr.write("The interface for this program (%s) is " \ + + "not yet implemented!\n" % progRequest) + sys.exit(100) + try: + if runner(args): + sys.exit(0) + else: + sys.exit(1) + except OSError, errstr: + sys.stderr.write("Execution failed: %s\n" % errstr) + sys.exit(101) + except "WrongArguments", errstr: + sys.stderr.write("Invalid arguments: %s\n" % errstr) + sys.exit(100) diff --git a/v0.3.5/bin/CryptoBoxWebserver b/v0.3.5/bin/CryptoBoxWebserver new file mode 100755 index 0000000..6dd1032 --- /dev/null +++ b/v0.3.5/bin/CryptoBoxWebserver @@ -0,0 +1,401 @@ +#!/usr/bin/env python +# +# The daemon script to run the CryptoBox webserver. +# +# run the script with "--help" to see all possible paramters +# +# +# Copyright 2006 sense.lab e.V. +# +# This file is part of the CryptoBox. +# +# The CryptoBox is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# The CryptoBox is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the CryptoBox; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +__revision__ = "$Id" + +REMOVE_ENV_SETTINGS = [ "LANG", "LC", "LC_ALL", "LC_COLLATE", "LC_CTYPE", + "LC_MESSAGES", "LC_NUMERIC", "BASH_ENV", "SHELLOPTS" ] + +import os, sys +import signal, atexit +import cryptobox.web.sites +from cryptobox.core.exceptions import * +from optparse import OptionParser + +## check python version +(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info +if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)): + sys.stderr.write("You need a python version >= 2.4\n") + sys.stderr.write("Current version is: %s\n" % sys.version) + sys.exit(1) + +## check cherrypy dependency +try: + import cherrypy +except: + sys.stderr.write("Could not import the cherrypy module!\n") + sys.stderr.write("Try 'apt-get install python-cherrypy'.\n") + sys.exit(1) + +## check clearsilver dependency +try: + import neo_cgi, neo_util +except: + sys.stderr.write("Could not import the clearsilver module!\n") + sys.stderr.write("Try 'apt-get install python-clearsilver'.\n") + sys.exit(1) + +## check configobj dependency +try: + import configobj, validate +except: + sys.stderr.write("Could not import the configobj or validate module!\n") + sys.stderr.write("Try 'apt-get install python-configobj'.\n") + sys.exit(1) + + +SERVER_ENVIRONMENT = "production" + +class CryptoBoxWebserver: + '''this class starts the cherrypy webserver and serves the single sites''' + + def __init__(self, opts): + """Configure cherrypy and check the location of the configuration file + """ + self.opts = opts + ## check conffile + if not os.access(opts.conffile, os.R_OK) or not os.path.isfile(opts.conffile): + sys.stderr.write("Error: could not read configuration file (%s)\n" % opts.conffile) + sys.exit(1) + ## store the absolute path as we will chdir later (for daemons) + self.conffile = os.path.realpath(opts.conffile) + ## expose static content and set options + ## beware: + cherrypy.config.update({ + "global": { + "server.socket_port" : int(opts.port), + "server.socket_host" : opts.host, + "server.log_to_screen" : not opts.background and opts.verbose, + "server.log_tracebacks" : opts.verbose, + "server.log_request_headers": opts.verbose, + "server.environment": SERVER_ENVIRONMENT, + "server.log_file" : opts.logfile }, + "/cryptobox-misc": { + "staticFilter.on" : True, + "staticFilter.dir": os.path.realpath(opts.datadir)}, + "/favicon.ico": { + "staticFilter.on" : True, + "staticFilter.file": os.path.realpath(os.path.join(opts.datadir, 'favicon.ico'))} + }) + + + def bootup_cryptobox(self): + ## initialize site class + try: + cherrypy.root = cryptobox.web.sites.WebInterfaceSites(self.conffile) + self.website = cherrypy.root + except (CBConfigError,CBEnvironmentError), err_msg: + sys.stderr.write("Error: the CryptoBox is misconfigured - please fix it!\n") + raise + + + def get_user_info(self): + """Retrieve the uid, gid and additional groups of the given user + """ + import pwd, grp + user_entry = pwd.getpwuid(self.opts.user) + ## get the new uid and gid + pw_name, pw_uid, pw_gid = user_entry[0], user_entry[2], user_entry[3] + ## change the owner of the webserver log file + try: + os.chown(self.opts.logfile, pw_uid, pw_gid) + except OSError: + ## fail silently + pass + ## calculate additional groups of the given user + additional_groups = [ entry[2] + for entry in grp.getgrall() + if pw_name in entry[3] ] + [ pw_gid ] + return (pw_uid, pw_gid, additional_groups) + + + def change_groups(self): + """Change the groups of the current process to the ones of the given user + + we have to do this before we call cherrypy.server.start(), as it somehow + remembers the current setting for any thread it will create later + """ + if self.opts.user is None: + return + (pw_uid, pw_gid, additional_groups) = self.get_user_info() + try: + os.setgroups(additional_groups) + except OSError, err_msg: + sys.stderr.write("Failed to change the groups: %s\n" % err_msg) + + + def drop_privileges_permanently(self): + """Drop all privileges of the current process and acquire the privileges of the + given user instead. + """ + if self.opts.user is None: + return + (pw_uid, pw_gid, additional_groups) = self.get_user_info() + try: + ## setgroups happened before (see 'change_groups') + os.setregid(pw_gid, pw_gid) + os.setreuid(pw_uid, pw_uid) + except OSError, err_msg: + sys.stderr.write("Failed to drop privileges permanently: %s\n" % err_msg) + + + + def start(self): + try: + ## first: change the groups (cherrypy.server.start stores the + ## current setting for creating new threads later) + self.change_groups() + cherrypy.server.start(initOnly=True) + self.drop_privileges_permanently() + ## this must be done with dropped privileges - otherwise there is + ## at least a problem with 'blkid' - see bug #139 + self.bootup_cryptobox() + cherrypy.server.wait_for_http_ready() + except cherrypy._cperror.NotReady, err_msg: + sys.stderr.write("Failed to start CryptoBox: %s\n" % err_msg) + sys.exit(1) + except Exception, err_msg: + if err_msg == "(98, 'Address already in use')": + sys.stderr.write("Failed to start CryptoBox: %s\n" % err_msg) + sys.exit(1) + else: + raise + + + +def fork_to_background(): + ## this is just copy'n'pasted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731 + ## check the original for exhaustive comments + try: + pid = os.fork() + except OSError, err_msg: + sys.stderr.write("Error: failed to fork cryptobox daemon process!\n") + sys.stderr.write("%s\n" % err_msg) + sys.exit(1) + if pid == 0: # the first child + os.setsid() + try: + pid = os.fork() + except OSError, err_msg: + sys.stderr.write("Error: failed to fork second cryptobox daemon process!\n") + sys.stderr.write("%s\n" % err_msg) + sys.exit(1) + if pid == 0: # the second child + ## we do not change the directory - otherwise there seems to be a race condition with the python interpreter loading this script file + #os.chdir(os.path.sep) + os.umask(0) + else: + os._exit(0) + else: + os._exit(0) + + +def close_open_files(): + """this is only necessary if we want to go into background + we will only close stdin, stdout and stderr + """ + import resource # Resource usage information. + ## use the following lines to close all open files (including the log file) + # maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1] + # if (maxfd == resource.RLIM_INFINITY): + # maxfd = 1024 + maxfd = 2 + for fd in range(0, maxfd): + try: + ## close all except for stderr - we will redirect it later + if fd != 2: + os.close(fd) + except OSError: # ERROR, fd wasn't open to begin with (ignored) + pass + os.open(os.devnull, os.O_RDWR) # standard input (0) + os.dup2(0, 1) # standard output (1) + + +def write_pid_file(pid_file, pid=None): + """write the process ID of the cryptonas daemon to a file + + call this function with the second parameter (e.g. pid=0) to check, if the + given location is writeable + @param pid_file: the path of the pid file to be written + @type pid_file: string + @param pid: use a specific PID instead of the PID of the current process + @type pid: int + """ + if pid is None: + ## use the PID of the current process + pid = os.getpid() + if os.path.exists(pid_file): + sys.stderr.write( + "Warning: pid file (%s) already exists - overwriting ...\n" % pid_file) + try: + pidf = open(pid_file,"w") + pidf.write(str(pid)) + pidf.close() + except (IOError, OSError), err_msg: + sys.stderr.write( + "Warning: failed to write pid file (%s): %s\n" % (pid_file, err_msg)) + ## it is just a warning - no need to break + + +def parseOptions(): + import cryptobox + import pwd + version = "%prog" + cryptobox.__version__ + parser = OptionParser(version=version) + parser.set_defaults(conffile="/etc/cryptobox-server/cryptobox.conf", + pidfile="/var/run/cryptobox-server/webserver.pid", + background=False, + datadir="/usr/share/cryptobox-server/www-data", + logfile="/var/log/cryptobox-server/webserver.log", + port="8080", + host="", + verbose=True, + profile_file=False, + user=None) + parser.add_option("-c", "--config", dest="conffile", + help="read configuration from FILE", metavar="FILE") + parser.add_option("","--pidfile", dest="pidfile", + help="write process id to FILE", metavar="FILE") + parser.add_option("-B","", dest="background", action="store_true", + help="run webserver in background (as daemon)") + parser.add_option("-q","", dest="verbose", action="store_false", + help="output only errors") + parser.add_option("","--datadir", dest="datadir", metavar="DIR", + help="set data directory to DIR") + parser.add_option("-p","--port", dest="port", metavar="PORT", + help="listen on PORT") + parser.add_option("-l","--logfile", dest="logfile", metavar="FILE", + help="write webserver log to FILE") + parser.add_option("","--host", dest="host", metavar="HOST", + help="attach to HOST") + parser.add_option("-u","--user", dest="user", metavar="USER", + help="change to USER after starting the webserver") + parser.add_option("","--profile", dest="profile_file", metavar="PROFILE_FILE", + help="enable profiling and store results in PROFILE_FILE") + (options, args) = parser.parse_args() + ## we do not expect any remaining arguments + if len(args) != 0: + parser.error("unknown argument: %s" % str(args[0])) + if not ((not os.path.exists(options.logfile) \ + and os.access(os.path.dirname(options.logfile), os.W_OK)) \ + or os.access(options.logfile, os.W_OK)): + parser.error("could not write to logfile (%s)" % options.logfile) + if not os.path.isdir(options.datadir) or not os.access(options.datadir,os.X_OK): + parser.error("could not access the data directory (%s)" % options.datadir) + try: + if (int(options.port) < 0) or (int(options.port) > 65535): + parser.error("invalid port number: %s" % str(options.port)) + except ValueError: + parser.error("invalid port specified (%s) - it must be a number" % (options.port)) + if options.user: + try: + try: + ## check for the user given as uid + uid = pwd.getpwuid(int(options.user))[2] + except ValueError: + ## check for the user given as name + uid = pwd.getpwnam(options.user)[2] + except KeyError: + ## invalid user specified + parser.error("invalid user specified (%s)" % options.user) + ## we will use the uid + options.user = uid + if options.profile_file: + options.profile_file = os.path.abspath(options.profile_file) + try: + import profile + except ImportError: + parser.error("profiling requires the python module 'profile' - debian users should run 'apt-get install python-profiler'") + return options + + +def clean_environment(settings_list): + """Remove some environment settings with side effects (e.g. LANG) + + Useful, as some plugins depend on the output of other commands - localized + output would be quite ugly for them ... + """ + for one_setting in settings_list: + os.unsetenv(one_setting) + + +if __name__ == "__main__": + ## process arguments + options = parseOptions() + ## set umask to 022 (aka 755) - octal value + os.umask(022) + ## initialize the webserver class + cbw = CryptoBoxWebserver(options) + ## remove some environment settings + clean_environment(REMOVE_ENV_SETTINGS) + ## fork to background before cbw.start() - otherwise we lose the socket + if options.background: + fork_to_background() + ## define the default exit handler + def exit_handler(signum, sigframe): + if hasattr(cbw, "website"): + ## are we already up? + cbw.website.cbox.log.info("Shutting down ...") + cbw.website.cleanup() + cherrypy.server.stop() + try: + os.remove(options.pidfile) + except OSError: + pass + os._exit(0) + ## the signal handler gets called by a kill signal (usually in background mode) + signal.signal(signal.SIGTERM, exit_handler) + ## this exit handler gets called by KeyboardInterrupt and similar ones (foreground) + atexit.register(exit_handler, None, None) + ## start the webserver + try: + if options.profile_file: + import profile + profile.run('cbw.start()', options.profile_file) + else: + cbw.start() + except CBError, err_msg: + sys.stderr.write("Failed to start the CryptoBox webserver!\n") + sys.stderr.write("%s\n" % str(err_msg)) + sys.stderr.write("Check the log file for details.\n") + cherrypy.server.stop() + sys.exit(1) + ## test if we can write to the PID file + ## this _must_ be done before forking, since a potential error would be + ## silent (due to the closed files - e.g. STDERR) + write_pid_file(options.pidfile, 0) + ## redirect stderr to the webserver's logfile + if options.background: + ## replace stdin and stdout by /dev/null + close_open_files() + ## replace stderr by the webserver logfile + os.close(2) + os.open(options.logfile, os.O_WRONLY | os.O_APPEND) + ## startup went fine - fork is done - now we may write the pid file + write_pid_file(options.pidfile) + ## this will never exit - one of the above exit handlers will get triggered + cherrypy.server.block() + diff --git a/v0.3.5/bin/cryptobox-unittests.conf b/v0.3.5/bin/cryptobox-unittests.conf new file mode 100644 index 0000000..594268a --- /dev/null +++ b/v0.3.5/bin/cryptobox-unittests.conf @@ -0,0 +1,100 @@ +[Main] + +# comma separated list of possible prefixes for accesible devices +# beware: .e.g "/dev/hd" grants access to _all_ harddisks +AllowedDevices = /dev/ubdb + +# use separate config partition? (1=yes / 0=no) +UseConfigPartition = 1 + +# the default name prefix of not unnamed containers +DefaultVolumePrefix = "Disk" + +# which cipher should cryptsetup-luks use? +#TODO: uml does not support this module - DefaultCipher = aes-cbc-essiv:sha256 +DefaultCipher = aes-plain + +# label of the configuration partition (you should never change this) +ConfigVolumeLabel = cbox_config + +# which plugins should be disabled? (comma seperated list) +#DisabledPlugins = network, shutdown, partition + + +[Locations] +# where should we mount volumes? +# this directory must be writeable by the cryptobox user (see above) +#MountParentDir = /var/cache/cryptobox/mnt +MountParentDir = ../ttt/mnt + +# settings directory: contains name database and plugin configuration +#SettingsDir = /var/cache/cryptobox/settings +SettingsDir = ../ttt/settings + +# where are the clearsilver templates? +#TemplateDir = /usr/share/cryptobox/templates +TemplateDir = ../templates + +# path to documentation files +#DocDir = /usr/share/doc/cryptobox/www-data +DocDir = ../doc/html + +# path to the plugin directory +#PluginDir = /usr/share/cryptobox/plugins +PluginDir = ../plugins + +# path to the hook directory (e.g. containing some scripts) +#HookDir = /etc/cryptobox/hooks.d +EventDir = ../event-scripts + + +[Log] +# possible values are "debug", "info", "warn" and "error" or numbers from +# 0 (debug) to 7 (error) +Level = debug + +# where to write the log messages to? +# possible values are: file +# syslog support will be added later +Destination = file + +# depending on the choosen destination (see above) you may select +# details. Possible values for the different destinations are: +# file: $FILENAME +# syslog: $LOG_FACILITY +#Details = /var/log/cryptobox.log +Details = ./cryptobox.log + + +[WebSettings] +# URL of default stylesheet +Stylesheet = cryptobox-misc/cryptobox.css + +# default language +Languages = en, de, sl, fr + + +[Programs] +cryptsetup = /sbin/cryptsetup +mkfs = /sbin/mkfs +blkid = /sbin/blkid +blockdev = /sbin/blockdev +mount = /bin/mount +umount = /bin/umount +nice = /usr/bin/nice +super = /usr/bin/super +# this is the "program" name as defined in /etc/super.tab +# "CryptoBoxRootActionsLocal" (in /etc/super.tab) should point to the +# CryptoBoxRootActions.py file in your local working directory. This avoids +# conflicts with a locally (apt-)installed CryptoBoxRootActions.py file +CryptoBoxRootActions = CryptoBoxRootActionsLocal + + +[PluginSettings] +# plugin specific settings +# the section names _must_ be the same as the names of the plugins + +## change the default network interface for the plugin "network" +#[[network]] +#interface = eth0 + diff --git a/v0.3.5/bin/cryptobox.conf b/v0.3.5/bin/cryptobox.conf new file mode 120000 index 0000000..49e4717 --- /dev/null +++ b/v0.3.5/bin/cryptobox.conf @@ -0,0 +1 @@ +cryptobox-unittests.conf \ No newline at end of file diff --git a/v0.3.5/bin/do_pylint.sh b/v0.3.5/bin/do_pylint.sh new file mode 100755 index 0000000..d4991d9 --- /dev/null +++ b/v0.3.5/bin/do_pylint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# set some environmental variables for pylint and run it +# + +PROJ_DIR=$(dirname "$0")/.. +PROJ_DIR=$(cd "$PROJ_DIR"; pwd) + +PYLINTRC=$PROJ_DIR/src/pylintrc +PYTHONPATH=$PROJ_DIR/src + +check_for_filename() +{ + # maybe the argument is a file instead of a module name + if echo "$1" | grep -q "\.py$" && test -e "$1" + then local FILE_DIR=$(dirname "$1") + local MODULE=$(basename "${1%.py}") + ARGS="${ARGS} ${MODULE}" + PYTHONPATH="${PYTHONPATH}:${FILE_DIR}" + else ARGS="${ARGS} ${1}" + fi +} + +while test $# -gt 0 + do check_for_filename "$1" + shift + done + +export PYTHONPATH +export PYLINTRC + +[ ! -x /usr/bin/pylint ] && echo >&2 "please run \"apt-get install pylint\" first" && exit 1 + +pylint $ARGS + diff --git a/v0.3.5/bin/do_unittests.sh b/v0.3.5/bin/do_unittests.sh new file mode 100755 index 0000000..3ef4765 --- /dev/null +++ b/v0.3.5/bin/do_unittests.sh @@ -0,0 +1,112 @@ +#!/bin/sh +#do_unittests.sh +# +# run this script _before_ you do a commit and fix errors before uploading +# +# preparations: +# - add the following lines to /etc/super.tab: +# :global_options relative_path=y +# CryptoBoxRootActionsLocal ./CryptoBoxRootActions cryptobox +# + +GETOPT="getopt" +BASE_DIR=$(cd "$(dirname $0)/.."; pwd) + +export PYTHONPATH=$BASE_DIR/src + +disable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = True/" "$BASE_DIR/bin/CryptoBoxRootActions" +} + +enable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = False/" "$BASE_DIR/bin/CryptoBoxRootActions" +} + + +run_tests() +{ + # chdir to 'bin' - all config settings depend on this + cd "${BASE_DIR}/bin" + + disable_filecheck + + if test -n "$files" + then # do the specified tests + ##The use of "eval", plus not using double quotes for + ##$a below are + ##required because getopt already puts argument names in + ##single-quotes, and the script will not work with both sets + ##of quotes. + for a in $files + do eval testoob -v $a + done + else # do all tests + for a in ${BASE_DIR}/src/cryptobox/tests/test.*.py + do testoob -v "$a" + done + fi + + enable_filecheck + + return 0 +} + + +usage() +{ + echo -e "Usage:" + echo -e "\tbin/do_unittests.sh --clobber=foo [ files... ]" + echo -e "\t" + echo -e "\t(Where \"files\", if given, are absolute pathnames)" + echo -e "\t(Example: bin/do_unittests.sh --clobber=sdX)" + echo -e "***Warning: All data on /dev/foo will be DESTROYED!" + echo -e "\t" + exit 1 +} + + +##### main() section ##### + +##Declare global variables with empty contents +CNAS_UTEST_CLOBBER="" +files="" +clobber_dev_arg="" + + +##Use the getopt command line utility to simplify parsing +getopt_str=`${GETOPT} -o c: --long clobber: \ +-n do_unittests.sh -- "$@"` +#echo $getopt_str +##Assign the tokens to an array +getopt_arr=($getopt_str) + +##Note: Output of getopt in this script should look like: +## --clobber 'sdX' -- file1 file2 file3 ... +##Read the following code with that in mind. + +##If there is exactly one option, and it has an argument +if [ "${getopt_arr[0]}" == "--clobber" ] \ + && [ "${getopt_arr[2]}" == "--" ]; then + clobber_dev_arg="${getopt_arr[1]}" + ##Strip any single quotes from the device name + clobber_dev_arg="${clobber_dev_arg//\'/}" + #echo ${clobber_dev_arg} + ##Grab the part of $getopt_str that follows "--" + files="`expr match \"${getopt_str}\" '.*--\(.*\)'`" + #echo $files + if [ -b "/dev/${clobber_dev_arg}" ]; then + export CNAS_UTEST_CLOBBER="${clobber_dev_arg}" + ##Run the tests using testoob... + run_tests + else + echo "Error: /dev/${clobber_dev_arg} is not a valid block device" + exit 2 + fi +else + usage +fi + + + diff --git a/v0.3.5/bin/run_webserver.sh b/v0.3.5/bin/run_webserver.sh new file mode 100755 index 0000000..9342552 --- /dev/null +++ b/v0.3.5/bin/run_webserver.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# +# example start script to run a local cryptobox webserver +# +# we set some parameters to make it possible to run it without an +# existing cryptobox installation +# +# change your local settings in "cryptobox-local.conf" - if this file +# does not exist, then "cryptobox.conf" is used +# +# the environment variable PORT may override the default (8080) +# +# BEWARE: the super.tab entry must be named "CryptoBoxRootActionsLocal" instead of +# "CryptoBoxRootActions" (useful for development) +# + +BIN_DIR=$(dirname "$0") +BIN_DIR=$(cd "$BIN_DIR"; pwd) + +disable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = True/" "$BIN_DIR/CryptoBoxRootActions" +} + +enable_filecheck() +{ + sed -i "s/^OVERRIDE_FILECHECK = .*$/OVERRIDE_FILECHECK = False/" "$BIN_DIR/CryptoBoxRootActions" +} + +## add the local python directory to the search path +export PYTHONPATH="$BIN_DIR/../src" +## disable ssl detection +#export HTTPS=1 + +PREFERRED_CONF_FILE=$BIN_DIR/cryptobox-local.conf +FALLBACK_CONF_FILE=$BIN_DIR/cryptobox-unittests.conf + +## determine the configuration file +CONFIG_FILE=$FALLBACK_CONF_FILE +test -r "$PREFERRED_CONF_FILE" && CONFIG_FILE=$PREFERRED_CONF_FILE +echo "used config: $CONFIG_FILE" + +## create necessary directories +mkdir -p "$BIN_DIR/../ttt/mnt" +mkdir -p "$BIN_DIR/../ttt/settings" + +cd "$BIN_DIR" + + +# disable strict security checks of CryptoBoxRootActions +disable_filecheck + +## run the webserver +"$BIN_DIR/CryptoBoxWebserver" --config="$CONFIG_FILE" --pidfile=/tmp/cryptoboxwebserver.pid --logfile=/tmp/cryptoboxwebserver.log --port=${PORT:-8080} --datadir="$BIN_DIR/../www-data" "$@" + +# enable strict security checks of CryptoBoxRootActions again +enable_filecheck + diff --git a/v0.3.5/bin/uml-setup.sh b/v0.3.5/bin/uml-setup.sh new file mode 100755 index 0000000..2ba5457 --- /dev/null +++ b/v0.3.5/bin/uml-setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +#uml-setup.sh +# +#This file does some setup required for running the unit tests under +#User Mode Linux (UML). If you are using a different test setup, it +#does not apply. + +PROJ_DIR=$(dirname "$0")/.. +PROJ_DIR=$(cd "$PROJ_DIR"; pwd) +ROOT_IMG=$PROJ_DIR/bin/cryptobox.img +TEST_IMG=$PROJ_DIR/bin/test.img +TEST_SIZE=128 +MEM_SIZE=128M + +if test ! -e "$ROOT_IMG" + then echo "Could not find the cryptobox system image ($ROOT_IMG)" + echo " see stuff/uml-howto.txt for information on how to build a system image" + echo " store (or link) the result as '$ROOT_IMG'" + exit 1 + fi + +# Preparations: +# echo "tun" >>/etc/modules +# follow the instructions in /usr/share/doc/uml-utilities/README.Debian +# add your user to the group 'uml-net' +# + +/sbin/ifconfig tap0 &>/dev/null || { echo "tap0 is not configured - read /usr/share/doc/uml-utilities/README.Debian for hints"; exit 1; } + + +if [ ! -e "$TEST_IMG" ] + then echo "Creating testing image file ..." + dd if=/dev/zero of="$TEST_IMG" bs=1M count=$TEST_SIZE + fi + +if [ ! -w "$ROOT_IMG" ]; then + echo "Make sure \"${ROOT_IMG}\" exists and is writeable" + exit 1; +fi +# "aio=2.4" is necessary, as otherwise sfdiks hangs at "nanosleep({3,0})" +linux ubd0="$ROOT_IMG" ubd1="$TEST_IMG" con=xterm hostfs=$PROJ_DIR fakehd eth0=daemon mem=$MEM_SIZE aio=2.4 + diff --git a/v0.3.5/changelog b/v0.3.5/changelog new file mode 100644 index 0000000..d48be96 --- /dev/null +++ b/v0.3.5/changelog @@ -0,0 +1,87 @@ +Version 0.3.4.5 - 08/23/02007 + * added: French translation provided by Gilles Accad + * added: Dutch translation provided by Michiel van Dijk + * fixed: IP address change bug + +Version 0.3.4.4 - 05/23/02007 + * added: Spanish translation provided by Fadrique + +Version 0.3.4.3 - 04/01/02007 + * added: Polish translation provided by Andrzej S. Kaznowski + +Version 0.3.4.2 - 03/21/02007 + * added: Italian translation provided by Fabrizio Tarizzo + +Version 0.3.4.1 - 02/27/02007 + * added: Japanese translation provided by kinneko + +Version 0.3.4 - 02/19/02007 + * fixed: unclean uid handling in server wrapper (Closes: #139) + * added: support for partitioning of raid devices + +Version 0.3.3 - 01/26/02007 + * fixed: bug in reinitializing of plugins (Closes: #111) + * fixed: broken group membership changing of webserver (Closes: #114) + * fixed: glitch that delayed the effect of changes made by the plugin_manager + * fixed: disc usage statistic + * completed: Slovenian translation + * completed: German translation + * added: restore network settings during startup + * added: new plugin provides an encrypted (https) connection to the webinterface + * added: support for netmask and gateway setting to 'network' plugin + * added: download of complete log file possible + * added: show/hide help texts + * usablity: ignore devices without read and write permissions + * interface: provide low-quality 'gif' icons instead of default 'png' icons for + IE 5.5/6.0 users due to its lack of support for transparency + * interface: unified layout of plugins + * requires: python module 'm2crypto' for (optional) certificate generation + +Version 0.3.2 - 01/08/02007 + * fixed bug causing ignorance towards group permissions (Closes: #114) + * fixed bug in Plugin manager breaking web interface (Closes: #111) + * fixed delay of Plugin manager settings being committed + +Version 0.3.1 - 12/20/02006 + * fixed broken interface of 'partition' plugin for ie + * fixed rendering bug of volume_properties for ie + * fixed screen width in a mozilla/ie compatible way + * fixed config management of 'plugin_manager' plugin + * fixed filtering of log level messages for 'logs' plugin + * added some german translations + * changed default language to english + * ports lower than 1024 are supported now + +Version 0.3.0 - 12/15/02006 + * new interface + * manage multiple disks + * support custom partitioning + * support plaintext partitions + * use cryptsetup-luks instead of plain cryptsetup + * allow to set time and date + * change of encryption passphrase without data losses + * support for pluggable features + * seperated cryptobox-server package + +Version 0.2.1 - 10/22/02005 + * fixed a critical bug in the initialisation process + * default cipher changed to "aes-cbc-essiv:sha256" (more secure) + * the boot menue (grub) is now protected + * support for usb and firewire harddisks + * new kernel: Linux 2.6.12.6 + * minor language improvements + +Version 0.2 - 10/04/02005 + * first public release + * fully configurable via web interface + * AES encryption via device-mapper + * Samba v3.0.14a-3 + * Linux 2.6.11 + * based on Debian GNU/Linux 3.1 + * documentation languages: + * English + * German + * interface languages: + * English + * German + * Slovenian diff --git a/v0.3.5/conf-examples/apache2_dav.conf b/v0.3.5/conf-examples/apache2_dav.conf new file mode 100644 index 0000000..e1572ef --- /dev/null +++ b/v0.3.5/conf-examples/apache2_dav.conf @@ -0,0 +1,13 @@ +# this file is part of the CryptoBox +# put it into /etc/apache2/conf.d/ +# you MUST create the directory given below - otherwise apache will not like it :( +# do not forget to chown the directory to the cryptobox user + + + # include the dynamically managed configuration directory - IT MUST EXIST + Include /var/cache/cryptobox-server/settings/misc/apache2_dav.conf.d/ + # lock database - should be writeable for www-data + DavLockDB /tmp/dav_lock.db + # a longer value than the default (120) help for high-latency networks + DavMinTimeout 600 + diff --git a/v0.3.5/conf-examples/apache_proxypass.conf b/v0.3.5/conf-examples/apache_proxypass.conf new file mode 100644 index 0000000..dff6d0d --- /dev/null +++ b/v0.3.5/conf-examples/apache_proxypass.conf @@ -0,0 +1,25 @@ +# CryptoBox configuration file +# +# the following directives allow you to use the cryptobox web interface behind apache2 +# +# you need to enable the following modules: +# - proxy +# - headers +# (for debian: run "a2enmod MOD_NAME") +# + +ProxyRequests Off + +# you may restrict access if necessary + + Order Deny,Allow + Allow from all + + + + ProxyPass http://localhost:8080/ + ProxyPassReverse http://localhost:8080/ + # this requestheader is necessary to allow proper redirection to https + RequestHeader set CryptoBox-Location /cryptobox + + diff --git a/v0.3.5/conf-examples/cryptobox.conf b/v0.3.5/conf-examples/cryptobox.conf new file mode 100644 index 0000000..eb4e9d2 --- /dev/null +++ b/v0.3.5/conf-examples/cryptobox.conf @@ -0,0 +1,97 @@ +[Main] + +# comma separated list of possible prefixes for accesible devices +# beware: .e.g "/dev/hd" grants access to _all_ harddisks +# take care, that the user 'cryptobox' has write access to these devices +# (floppy disks are not supported) +AllowedDevices = /dev/loop, /dev/ubdb + +# use separate config partition? (1=yes / 0=no) +UseConfigPartition = 0 + +# the default name prefix of not unnamed containers +DefaultVolumePrefix = "Disk_" + +# which cipher should cryptsetup-luks use? +# if you lack the appropriate kernel modules, then you could try "aes-plain" - but it is less secure +DefaultCipher = aes-cbc-essiv:sha256 + +# label of the configuration partition (you should never change this) +ConfigVolumeLabel = cbox_config + +# which plugins should be disabled? (comma seperated list) +#DisabledPlugins = encrypted_webinterface, network, shutdown, partition +DisabledPlugins = encrypted_webinterface + + +[Locations] +# where should we mount volumes? +# this directory must be writeable by the cryptobox user (see above) +MountParentDir = /var/cache/cryptobox-server/mnt + +# settings directory: contains name database and plugin configuration +SettingsDir = /var/cache/cryptobox-server/settings + +# where are the clearsilver templates? +TemplateDir = /usr/share/cryptobox-server/templates + +# path to documentation files +DocDir = /usr/share/doc/cryptobox-server/html + +# path to the plugin directory +PluginDir = /usr/share/cryptobox-server/plugins + +# path to the event directory (e.g. containing some scripts) +EventDir = /etc/cryptobox-server/events.d + + +[Log] +# possible values are "debug", "info", "warn" and "error" or numbers from +# 0 (debug) to 7 (error) +Level = info + +# where to write the log messages to? +# possible values are 'file' and 'syslog' +Destination = file + +# depending on the choosen destination (see above) you may select +# details. Possible values for the different destinations are: +# file: $FILENAME +# syslog: KERN | USER | MAIL | DAEMON | AUTH | SYSLOG | LPR | NEWS | UUCP +# | CRON | AUTHPRIV | LOCAL0 .. LOCAL7 +Details = /var/log/cryptobox-server/cryptobox.log + + +[WebSettings] +# URL of default stylesheet +Stylesheet = cryptobox-misc/cryptobox.css + +# comma seperated list of available languages for the web interface +# the first language is the default +# all other languages serve as fallbacks for an incomplete translation +# available languages: cs, da, de, en, es, fi, fr, hu, it, ja, nl, pl, pt, ru, sl, sv, ur +# well supported languages: de, en, ja, sl +Languages = en, de, ja, sl, it, pl, es + + +[Programs] +cryptsetup = /sbin/cryptsetup +mkfs = /sbin/mkfs +blkid = /sbin/blkid +blockdev = /sbin/blockdev +mount = /bin/mount +umount = /bin/umount +nice = /usr/bin/nice +super = /usr/bin/super +# this is the "program" name as defined in /etc/super.tab +CryptoBoxRootActions = CryptoBoxRootActions + + +[PluginSettings] +# plugin specific settings +# the section names _must_ be the same as the names of the plugins + +## change the default network interface for the plugin "network" +#[[network]] +#interface = eth0 + diff --git a/v0.3.5/conf-examples/openssl.cnf b/v0.3.5/conf-examples/openssl.cnf new file mode 100644 index 0000000..73905e0 --- /dev/null +++ b/v0.3.5/conf-examples/openssl.cnf @@ -0,0 +1,65 @@ +# +# OpenSSL configuration file. +# + +# Establish working directory. + +dir = . + +[ ca ] +default_ca = CA_default + +[ CA_default ] +default_days = 3650 +default_md = md5 +policy = policy_match +#serial = $dir/serial +#database = $dir/index.txt +#new_certs_dir = $dir/newcert +#certificate = $dir/cacert.pem +#private_key = $dir/private/cakey.pem +#preserve = no +#email_in_dn = no +#nameopt = default_ca +#certopt = default_ca + +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = match +commonName = supplied +emailAddress = optional + +[ req ] +default_bits = 1024 # Size of keys +default_keyfile = stunnel.pem # name of generated keys +default_md = md5 # message digest algorithm +distinguished_name = req_distinguished_name + +[ req_distinguished_name ] +# Variable name Prompt string +#---------------------- ---------------------------------- +0.organizationName = Organization Name (company) +organizationalUnitName = Organizational Unit Name (department, division) +emailAddress = Email Address +emailAddress_max = 40 +localityName = Locality Name (city, district) +stateOrProvinceName = State or Province Name (full name) +#countryName = Country Name (2 letter code) +#countryName_min = 2 +#countryName_max = 2 +#commonName = Common Name (hostname, IP, or your name) +#commonName_max = 64 + +# Default values for the above, for consistency and less typing. +# Variable name Value +#------------------------------ ------------------------------ +0.organizationName_default = CryptoBox +organizationalUnitName_default = Sense.Lab +localityName_default = Kugelmugel +stateOrProvinceName_default = Metropolis +emailAddress_default = info@cryptobox.org + + + diff --git a/v0.3.5/conf-examples/start_stunnel.sh b/v0.3.5/conf-examples/start_stunnel.sh new file mode 100755 index 0000000..a5cf0a5 --- /dev/null +++ b/v0.3.5/conf-examples/start_stunnel.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# +# This script creates a stunnel certificate for https +# and starts a tunnel from :80 to :443. It's meant as en example so +# use it with care. +# +# An example for the openssl config file can be found in +# conf-examples/openssl.cnf . +# + +set -eu + +test $# -ne 2 && echo "Usage: $(basename $0) OPENSSL_CONF_FILE CERT_FILE" && exit 1 + +TMP_FILE=/tmp/cryptobox-cert.tmp +## vcert values are in openssl.conf +#OPENSSL_CONF_FILE="../conf-examples/openssl.cnf" +OPENSSL_CONF_FILE="$1" +## filename for the created cert +#CERTFILE="cryptobox.cert" +CERTFILE="$2" +## source & destination ports +SRC_PORT="8080" +DST_PORT="443" + + +[ ! -f "$OPENSSL_CONF_FILE" ] && echo "`basename $0`: $OPENSSL_CONF_FILE not found" && exit 2 +# this command creates the certificate +# the "\n" are required, because the certbuilding asks for 5 returns +echo -ne "\n\n\n\n\n" | openssl req -new -x509 -nodes -days 3650 -config "$OPENSSL_CONF_FILE" -out "$CERTFILE" -keyout "$CERTFILE" +chmod 600 "$CERTFILE" + +# next step needs a lot of randomdata +dd if=/dev/urandom of="$TMP_FILE" bs=1024 count=1024 +openssl dhparam -rand "$TMP_FILE" 512 >> "$CERTFILE" +rm "$TMP_FILE" + +## print out cert values +#openssl x509 -subject -dates -fingerprint -in stunnel.pem + +stunnel -p ${CERTFILE} -r localhost:${SRC_PORT} -d ${DST_PORT} + diff --git a/v0.3.5/conf-examples/super.tab-example b/v0.3.5/conf-examples/super.tab-example new file mode 100644 index 0000000..477c13b --- /dev/null +++ b/v0.3.5/conf-examples/super.tab-example @@ -0,0 +1,9 @@ +# Add the following line to your "super.tab". +# This file usally lays in /etc/super.tab , depending on your +# installation it can also be found in /usr/etc/ or /usr/local/etc/ +# +# 'yourUserName' is typically 'cryptobox' +# +# syntax of super.tab: +# super_command path_to_real_command username +CryptoBoxRootActions /your/local/path/to/CryptoBoxRootActions.py yourUserName diff --git a/v0.3.5/copyright b/v0.3.5/copyright new file mode 100644 index 0000000..3c331f2 --- /dev/null +++ b/v0.3.5/copyright @@ -0,0 +1,32 @@ +Copyright (c) 02005-2007 sense.lab + +Documentation: + The documentation is licensed under the Creative Commons Attribution + ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + + +Graphics: + All graphics are licensed under the Creative Commons Attribution + ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + + See detailed information for all pictures in 'copyright.pictures'. + + +Code: + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, version 2. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License with + your Debian GNU/Linux system, in /usr/share/common-licenses/GPL, or with the + Debian GNU/Linux hello source package as the file COPYING. If not, + write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA + +$Id$ + diff --git a/v0.3.5/copyright.graphics b/v0.3.5/copyright.graphics new file mode 100644 index 0000000..eeac3c0 --- /dev/null +++ b/v0.3.5/copyright.graphics @@ -0,0 +1,158 @@ +This file lists detailed information about the licenses and the original authors +of the graphics that are used as a part of the CryptoBox. + + +******************** Creative Commons graphics ************************* + +The graphics listed below are licensed under the Creative Commons Attribution +ShareAlike 2.5 license (http://creativecommons.org/licenses/by-sa/2.5/). + +1) Sense.Lab e.V. (http://senselab.org) + design/cryptobox_backgrounds.svg + all graphics in the directory design/logo/ + all graphics in the directory www-data/screenshots + all graphics not listed below + +2) Tango Desktop Project (http://tango.freedesktop.org) + design/icons/applications-system_tango.svg + design/icons/computer_tango.svg + design/icons/dialog-error_tango.svg + design/icons/dialog-information_tango.svg + design/icons/dialog-warning_tango.svg + design/icons/drive-cdrom_tango.svg + design/icons/drive-harddisk_tango.svg + design/icons/drive-removable-media_tango.svg + design/icons/go-down_tango.svg + design/icons/go-up_tango.svg + design/icons/inaccessible_tango_emblem-unreadable.svg + design/icons/locked_tango-emblem-readonly.svg + design/icons/multimedia-dell-dj-pocket_tango.svg + design/icons/multimedia-player-ipod-mini-blue_tango.svg + design/icons/multimedia-player-motorola-rokr_tango.svg + design/icons/package-x-generic_tango.svg + design/icons/preferences-system_tango.svg + design/icons/system-log-out_tango.svg + design/icons/face_smile_big.svg + design/icons/help_browser.svg + design/icons/help_browser_disable.svg [derived] + design/icons/globe-lips.svg [derived] + design/icons/network-transmit-receive_design.svg + design/icons/unlocked-device_tango.svg [derived] + design/icons/pile_of_devices.svg [derived] + www-data/dialog-error_tango.gif + www-data/dialog-error_tango.png + www-data/dialog-information_tango.gif + www-data/dialog-information_tango.png + www-data/dialog-warning_tango.gif + www-data/dialog-warning_tango.png + www-data/icon_get_help.gif + www-data/icon_get_help.png + www-data/icon_get_help_disable.gif [derived] + www-data/icon_get_help_disable.png [derived] + www-data/smile.gif + www-data/smile.png + www-data/smile4.gif + www-data/smile4.png + www-data/volume_active_crypto.gif [derived] + www-data/volume_active_crypto.png [derived] + www-data/volume_active_crypto_busy.gif [derived] + www-data/volume_active_crypto_busy.png [derived] + www-data/volume_active_plain.gif [derived] + www-data/volume_active_plain.png [derived] + www-data/volume_active_plain_busy.gif [derived] + www-data/volume_active_plain_busy.png [derived] + www-data/volume_passive_crypto.gif [derived] + www-data/volume_passive_crypto.png [derived] + www-data/volume_passive_crypto_busy.gif [derived] + www-data/volume_passive_crypto_busy.png [derived] + www-data/volume_passive_plain.gif [derived] + www-data/volume_passive_plain.png [derived] + www-data/volume_passive_plain_busy.gif [derived] + www-data/volume_passive_plain_busy.png [derived] + plugins/language_selection/list_marker_tango.gif + plugins/volume_format_fs/plugin_icon.gif + plugins/volume_format_fs/plugin_icon.png + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + plugins/shutdown/plugin_icon.gif + plugins/shutdown/plugin_icon.png + plugins/volume_props/plugin_icon.gif + plugins/volume_props/plugin_icon.png + plugins/system_preferences/plugin_icon.gif + plugins/system_preferences/plugin_icon.png + plugins/network/plugin_icon.gif + plugins/network/plugin_icon.png + plugins/volume_mount/plugin_icon.gif + plugins/volume_mount/plugin_icon.png + plugins/plugin_manager/plugin_icon.gif + plugins/plugin_manager/plugin_icon.png + plugins/plugin_manager/tango-go-up.png + plugins/plugin_manager/tango-go-down.png + plugins/plugin_icon_unknown.gif + plugins/plugin_icon_unknown.png + + +3) David Vignoni + design/icons/gnome-dev-removable-usb_nuvola.svg + design/icons/gnome-globe_nuvola.svg + design/icons/gtk-ok_nuvola.svg + design/icons/gtk-stop_nuvola.svg + design/icons/gtk-zoom-in_nuvola.svg + plugins/volume_details/plugin_icon.gif + plugins/volume_details/plugin_icon.png + +4) Andy Fitzsimon + design/icons/pile_of_devices.svg [derived] + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + +5) Matthew McClintock + design/icons/redhat-config-users_wasp.svg + +3) David Vignoni + design/icons/gnome-dev-removable-usb_nuvola.svg + design/icons/gnome-globe_nuvola.svg + design/icons/gtk-ok_nuvola.svg + design/icons/gtk-stop_nuvola.svg + design/icons/gtk-zoom-in_nuvola.svg + +4) Andy Fitzsimon + design/icons/pile_of_devices.svg [derived] + plugins/disks/plugin_icon.gif [derived] + plugins/disks/plugin_icon.png [derived] + +5) Matthew McClintock + design/icons/redhat-config-users_wasp.svg + plugins/user_manager/plugin_icon.gif + plugins/user_manager/plugin_icon.png + +6) Nicu Buculei + design/icons/globe-lips.svg [derived] + plugins/language_selection/plugin_icon.gif [derived] + plugins/language_selection/plugin_icon.png [derived] + + +*********************** GPL graphics ****************************** + +The graphics listed below are licensed under the GNU General Public License (GPL) +v2.0 or later (http://www.gnu.org/licenses/gpl.html). + +1) Gnome Project (http://www.gnome.org/) + plugins/shutdown/gnome-reboot.gif + plugins/shutdown/gnome-reboot.png + plugins/shutdown/gnome-shutdown.gif + plugins/shutdown/gnome-shutdown.png + plugins/date/plugin_icon.gif + plugins/date/plugin_icon.png + plugins/partition/plugin_icon.gif + plugins/partition/plugin_icon.png + plugins/help/plugin_icon.gif + plugins/help/plugin_icon.png + + +********** Creative Commons Public Domain Dedications ************** + +1) http://openclipart.org + plugins/logs/plugin_icon.gif + plugins/logs/plugin_icon.png + diff --git a/v0.3.5/debian/README.Debian b/v0.3.5/debian/README.Debian new file mode 100644 index 0000000..93cec3d --- /dev/null +++ b/v0.3.5/debian/README.Debian @@ -0,0 +1,32 @@ +CryptoBox for Debian - installation notes + +The main configuration file of the CryptoBox webserver is: + /etc/cryptobox-server/cryptobox.conf +All settings named [Foo]->Bar are defined in this file. + +1) Configure startup and network settings in /etc/default/cryptobox-server. +Set 'NO_START' to "0" if the CryptoBox should start at every bootup. +Set the port on which the cryptobox-server should listen. + +2) Define [Main]->AllowedDevices according to the devices that you want to +publish via the cryptobox webinterface. Be careful: the data on these drives +can be overwritten by front-end users! + +3) Choose a list of plugins to disable in [Main]->DisabledPlugins. + +4) Use the username 'admin' and the password 'admin' to access protected +parts of the CryptoBox. Please change the password soon in the 'user_manager'. +You can use the 'plugin_manager' to define which parts of the CryptoBox should +be restricted to administrative access. + +5) Read /usr/share/doc/cryptobox-server/event-scripts/README for information +about event handlers. They can be used to integrate fileservers (samba, +apache2-dav, nfs, ...) into the CryptoBox. Detailed information about +integration with samba and apach2-dav can be found in README.samba and +README.davfs. + +6) A line was automatically added to /etc/super.tab. +This is necessary to gain root privileges for certain actions. +Please inspect /usr/sbin/CryptoBoxRootActions carefully to make sure, that your +system can not get compromised by this. + diff --git a/v0.3.5/debian/changelog b/v0.3.5/debian/changelog new file mode 100644 index 0000000..3637c43 --- /dev/null +++ b/v0.3.5/debian/changelog @@ -0,0 +1,137 @@ +cryptobox (0.3.4.5-1) unstable; urgency=low + + * new upstream release: + * added French translation provided by Gilles Accad + * added Dutch translation provided by Michiel van Dijk + * fixed bug related to change of IP address + + -- Lars Kruse Wed, 22 Aug 2007 18:35:55 +0200 + +cryptobox (0.3.4.4-1) unstable; urgency=low + + * new upstream release: added Spanish translation provided by Fadrique + + -- Henning Wed, 23 May 2007 01:50:00 +0200 + +cryptobox (0.3.4.3-1) unstable; urgency=low + + * new upstream release: added Polish translation provided by Andrzej S. Kaznowski + + -- Lars Kruse Sun, 1 Apr 2007 15:05:41 +0200 + +cryptobox (0.3.4.2-1) unstable; urgency=low + + * new upstream release: added Italian translation provided by Fabrizio Tarizzo + + -- Lars Kruse Wed, 21 Mar 2007 19:16:59 +0100 + +cryptobox (0.3.4.1-1) unstable; urgency=low + + * added: Japanese translation provided by kinneko + + -- Lars Kruse Tue, 27 Feb 2007 01:00:39 +0100 + +cryptobox (0.3.4-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Mon, 19 Feb 2007 02:39:52 +0100 + +cryptobox (0.3.3-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Thu, 8 Feb 2007 01:53:00 +0100 + +cryptobox (0.3.2-1) unstable; urgency=low + + * new upstream release + + -- Lars Kruse Fri, 26 Jan 2007 01:58:27 +0100 + +cryptobox (0.3.1-1) unstable; urgency=low + + * new upstream release + * reduced pyton-central dependency to v0.5.6 + + -- Lars Kruse Tue, 19 Dec 2006 18:21:43 +0100 + +cryptobox (0.3.0-1) unstable; urgency=low + + * first release of the CryptoBox as a seperate package + + -- Lars Kruse Fri, 15 Dec 2006 14:37:07 +0100 + +cryptobox (0.2.59-1) unstable; urgency=low + + * remove leading white lines to improve standard complicance of html + + -- Lars Kruse Thu, 14 Dec 2006 14:19:12 +0100 + +cryptobox (0.2.58-1) unstable; urgency=low + + * fixed small layout bug + + -- Lars Kruse Thu, 14 Dec 2006 01:57:05 +0100 + +cryptobox (0.2.57-1) unstable; urgency=low + + * added some documentation + * fixed ssl issue + * turn on some ownership checks of CryptoBoxRootActions + + -- Lars Kruse Thu, 14 Dec 2006 00:36:26 +0100 + +cryptobox (0.2.56-1) unstable; urgency=low + + * added inline help texts + * fixed 'encryption status' in 'volume_details' + * improved rendering of 'volume_properties' and 'user_manager' + * chmod mount directory to 0777 - this should avoid permission problems + * + + -- Lars Kruse Wed, 13 Dec 2006 02:14:35 +0100 + +cryptobox (0.2.55-1) unstable; urgency=low + + * more unittests + * new help system + + -- Lars Kruse Tue, 12 Dec 2006 04:47:47 +0100 + +cryptobox (0.2.54-1) unstable; urgency=low + + * log plugin improved + * samba plugin fixed + * syslog support added + * improved output of 'logs' plugin + * finished 'volume_automount' plugin + + -- Lars Kruse Mon, 11 Dec 2006 11:52:38 +0100 + +cryptobox (0.2.53-1) unstable; urgency=low + + * constant screen width + * improved documentation + * improved event scripts + * changed default setting of 'UseConfigPartition' + + -- Lars Kruse Thu, 7 Dec 2006 05:10:43 +0100 + +cryptobox (0.2.52-1) unstable; urgency=low + + * format partitions in background + * mark busy partitions + + -- Lars Kruse Wed, 6 Dec 2006 14:57:43 +0100 + +cryptobox (0.2.51-1) unstable; urgency=low + + * favicon included + * first pre-official test release + + -- Lars Kruse Thu, 05 December 2006 19:51:24 +0100 + +cryptobox (0.2.50-1) unstable; urgency=low + * Initial release + -- Lars Kruse Wed, 30 November 2006 20:26:47 +0100 diff --git a/v0.3.5/debian/compat b/v0.3.5/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/v0.3.5/debian/compat @@ -0,0 +1 @@ +5 diff --git a/v0.3.5/debian/control b/v0.3.5/debian/control new file mode 100644 index 0000000..f0a0145 --- /dev/null +++ b/v0.3.5/debian/control @@ -0,0 +1,22 @@ +Source: cryptobox +Section: admin +Priority: extra +Maintainer: Lars Kruse +Build-Depends: debhelper (>= 5.0.38), dpatch, python-all-dev (>= 2.4), python-central (>= 0.5.6), gettext +XS-Python-Version: >= 2.4 +Standards-Version: 3.7.2 + +Package: cryptobox-server +Architecture: any +Pre-Depends: adduser +Depends: python-central (>= 0.5.6), cryptsetup (>=20050111), e2fsprogs (>= 1.27), python (>=2.4), python-clearsilver, super, dosfstools, python-cherrypy, python-configobj, python-m2crypto +Suggests: samba, apache2, stunnel4, ntfs-3g +Replaces: cryptobox +XB-Python-Version: ${python:Versions} +Description: Web interface for an encrypting fileserver + This web interface allows you to manage encrypted and plaintext + disks. + This package is especially useful for non-desktop systems. + Even non-technical users are able to encrypt their private data with + the CryptoBox. + diff --git a/v0.3.5/debian/copyright b/v0.3.5/debian/copyright new file mode 100644 index 0000000..0219b29 --- /dev/null +++ b/v0.3.5/debian/copyright @@ -0,0 +1,27 @@ +This package was debianized by Lars Kruse on +Wed, May 10 21:23:16 CEST 2006 + +It was downloaded from http://cryptobox.org/ + +Upstream Authors: + sense.lab development + +Copyright: + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the + Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. + diff --git a/v0.3.5/debian/cryptobox-server.default b/v0.3.5/debian/cryptobox-server.default new file mode 100644 index 0000000..680aacf --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.default @@ -0,0 +1,20 @@ +# boot configuration file for the CryptoBox +# +# the default state of the cryptobox is disabled + +# set to "0" to enable the startup of the cryptobox - otherwise "1" +NO_START=1 + +# the user that should execute the cryptobox +RUNAS=cryptobox + +# listening port +PORT=8080 + +# some more server options (rarely necessary) +#SERVER_OPTS="--host localhost --datadir=/usr/share/cryptobox-server/www-data" + +# if the CryptoBox keeps complaining about a non-encrypted connection, then +# you can override this warning by uncommenting the following line: +#export HTTPS=1 + diff --git a/v0.3.5/debian/cryptobox-server.dirs b/v0.3.5/debian/cryptobox-server.dirs new file mode 100644 index 0000000..b12a5dc --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.dirs @@ -0,0 +1,4 @@ +usr/sbin +usr/share/cryptobox-server +var/log/cryptobox-server +var/run/cryptobox-server diff --git a/v0.3.5/debian/cryptobox-server.docs b/v0.3.5/debian/cryptobox-server.docs new file mode 100644 index 0000000..3285b8a --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.docs @@ -0,0 +1,9 @@ +README +README.samba +README.davfs +README.ssl +README.proxy +copyright +changelog +doc/html +event-scripts diff --git a/v0.3.5/debian/cryptobox-server.examples b/v0.3.5/debian/cryptobox-server.examples new file mode 100644 index 0000000..c50cf7e --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.examples @@ -0,0 +1 @@ +conf-examples diff --git a/v0.3.5/debian/cryptobox-server.init b/v0.3.5/debian/cryptobox-server.init new file mode 100644 index 0000000..874d13d --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.init @@ -0,0 +1,117 @@ +#!/bin/sh +# +# runlevel script of the cryptobox package +# +# Copyright (c) 02006, senselab +# +# see LICENSE file in this package for details +# + +### BEGIN INIT INFO +# Provides: cryptobox-server +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $network $local_fs $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start CryptoBox webserver +### END INIT INFO + +# include some useful functions to unify our output format +. /lib/lsb/init-functions + +# read the default setting file, if it exists +[ -r /etc/default/cryptobox-server ] && . /etc/default/cryptobox-server + +# set default values (if not defined in /etc/default/cryptobox-server) +NO_START=${NO_START:-0} +RUNAS=${RUNAS:-cryptobox} +PORT=${PORT:-8080} +HOST=${HOST:-} +LOGFILE=/var/log/cryptobox-server/webserver.log +SERVER_OPTS=${SERVER_OPTS:-} +CONF_FILE=/etc/cryptobox-server/cryptobox.conf + +DAEMON=/usr/sbin/CryptoBoxWebserver +# default install location is /usr/bin/ - debian installation requires /usr/sbin/ +test -x "$DAEMON" || DAEMON=/usr/bin/CryptoBoxWebserver +PYTHON_EXEC=/usr/bin/python +PIDFILE=/var/run/cryptobox-server/webserver.pid +DESC="CryptoBox Daemon (webinterface)" +OPTIONS="-B --pidfile=$PIDFILE --config=$CONF_FILE --logfile=$LOGFILE --host=$HOST --port=$PORT --user=$RUNAS $SERVER_OPTS" + +# quit if NO_START is 1 (see /etc/default/cryptobox-server) +[ "$NO_START" = "1" ] && log_daemon_msg "Not starting $DESC please edit /etc/default/cryptobox-server!" && exit 0 + +# check if the package is installed +test -e "$DAEMON" || exit 0 + + +case "$1" in + start ) + # create the directory of the pid file if necessary + PIDDIR=$(dirname "$PIDFILE") + if [ ! -d "$PIDDIR" ] + then mkdir -p "$PIDDIR" + # necessary: the cryptobox server needs the permission to remove the pid file + chown $RUNAS:root "$PIDDIR" + chmod 755 "$PIDDIR" + fi + # create the directory of the pid file if necessary + LOGDIR=$(dirname "$LOGFILE") + if [ ! -d "$LOGDIR" ] + then mkdir -p "$LOGDIR" + chown $RUNAS:root "$LOGDIR" + chmod 750 "$LOGDIR" + fi + log_daemon_msg "Starting $DESC" + if start-stop-daemon \ + --quiet --start --user $RUNAS --pidfile "$PIDFILE" \ + --startas "$PYTHON_EXEC" -- "$DAEMON" $OPTIONS + then log_end_msg 0 + else log_end_msg 1 + fi + ;; + stop ) + log_daemon_msg "Stopping $DESC" + # if there is no pid file for some reason, then we try to find the process + if test ! -e "$PIDFILE" + then if start-stop-daemon --quiet --stop --user "$RUNAS" --exec "$PYTHON_EXEC" + then log_end_msg 0 + else log_end_msg 1 + fi + # there is a pid file - great! + elif start-stop-daemon --quiet --stop \ + --pidfile "$PIDFILE" \ + --user "$RUNAS" + then test -e "$PIDFILE" && rm "$PIDFILE" + log_end_msg 0 + else log_end_msg 1 + fi + ;; + reload | force-reload | restart ) + "$0" stop + sleep 3 + "$0" start + ;; + status ) + echo -n "$DESC " + if start-stop-daemon --stop --signal 0 --quiet \ + --pidfile "$PIDFILE" --user "$RUNAS" + then echo "running" + exit 0 + else if [ -e "$PIDFILE" ] + then echo "failed" + exit 1 + else echo "not running" + exit 0 + fi + fi + ;; + * ) + echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2 + exit 1 + ;; + esac + +exit 0 + diff --git a/v0.3.5/debian/cryptobox-server.lintian b/v0.3.5/debian/cryptobox-server.lintian new file mode 100644 index 0000000..2b4a0e9 --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.lintian @@ -0,0 +1 @@ +cryptobox-server: package-has-a-duplicate-relation diff --git a/v0.3.5/debian/cryptobox-server.logrotate b/v0.3.5/debian/cryptobox-server.logrotate new file mode 100644 index 0000000..35ae3e7 --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.logrotate @@ -0,0 +1,6 @@ +/var/log/cryptobox-server/cryptobox.log /var/log/cryptobox-server/webserver.log { + rotate 2 + size 100k + copytruncate + nocompress +} diff --git a/v0.3.5/debian/cryptobox-server.manpages b/v0.3.5/debian/cryptobox-server.manpages new file mode 100644 index 0000000..70d5772 --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.manpages @@ -0,0 +1,2 @@ +man/CryptoBoxWebserver.8 +man/CryptoBoxRootActions.8 diff --git a/v0.3.5/debian/cryptobox-server.postinst b/v0.3.5/debian/cryptobox-server.postinst new file mode 100644 index 0000000..145f0fa --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.postinst @@ -0,0 +1,78 @@ +#!/bin/sh + +set -u + +# check the current cryptobox user - maybe it was changed manually +test -r /etc/default/cryptobox-server && . /etc/default/cryptobox-server + +# RUNAS was probably imported from /etc/default/cryptobox-server - otherwise use the default +CRYPTOBOX_USER=${RUNAS:-cryptobox} +LOG_FILE=/var/log/cryptobox-server/cryptobox.log +WEBLOG_FILE=/var/log/cryptobox-server/webserver.log +PID_DIR=/var/run/cryptobox-server +USER_HOME=/var/cache/cryptobox-server +SUPER_FILE=/etc/super.tab +ADDITIONAL_GROUP=disk + + +create_user_home() +{ + # if the user already exists -> do nothing + getent passwd "$CRYPTOBOX_USER" 2>/dev/null >/dev/null && return 0 + # create cryptobox user + echo "Creating new user '$CRYPTOBOX_USER' ..." + adduser --system --group --home "$USER_HOME" "$CRYPTOBOX_USER" + adduser "$CRYPTOBOX_USER" "$ADDITIONAL_GROUP" + mkdir -p "$USER_HOME/mnt" + mkdir -p "$USER_HOME/settings" + chown -R ${CRYPTOBOX_USER}: "$USER_HOME" + # only members of the cryptobox group may access the user directory + chmod 755 "$USER_HOME" +} + +create_add_super_permission() +{ + ## this will add some lines to the configuration file of 'super' + ## do nothing, if there is already a CryptoBox line + grep -q "CRYPTOBOX_MARKER" "$SUPER_FILE" && return 0 + echo >>"$SUPER_FILE" "## CRYPTOBOX_MARKER - please do not remove!" + echo >>"$SUPER_FILE" "CryptoBoxRootActions /usr/sbin/CryptoBoxRootActions $CRYPTOBOX_USER" +} + +create_dirs_and_files() +{ + # pid file + test ! -e "$PID_DIR" && mkdir -p "$PID_DIR" + chown "$CRYPTOBOX_USER" "$PID_DIR" + # create config directories with appropriate permissions + test ! -e "$LOG_FILE" && mkdir -p "$(dirname $LOG_FILE)" && touch "$LOG_FILE" + chown "$CRYPTOBOX_USER" "$LOG_FILE" + test ! -e "$WEBLOG_FILE" && mkdir -p "$(dirname $WEBLOG_FILE)" && touch "$WEBLOG_FILE" + chown "$CRYPTOBOX_USER" "$WEBLOG_FILE" +} + + +#################### main ###################### + +case "$1" in + reconfigure|configure) + create_user_home + create_dirs_and_files + create_add_super_permission + # continue at the end + ;; + abort-upgrade|abort-remove|abort-deconfigure) + # nothing to be done + exit 0 + ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 0 + ;; + esac + + +#DEBHELPER# + +exit 0 + diff --git a/v0.3.5/debian/cryptobox-server.postrm b/v0.3.5/debian/cryptobox-server.postrm new file mode 100644 index 0000000..01e4b4b --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.postrm @@ -0,0 +1,65 @@ +#!/bin/sh + +set -u + +CRYPTOBOX_USER=cryptobox +LOG_FILE=/var/log/cryptobox-server/cryptobox.log +WEBLOG_FILE=/var/log/cryptobox-server/webserver.log +PID_DIR=/var/run/cryptobox-server +SUPER_FILE=/etc/super.tab +MNT_DIR=/var/cache/cryptobox-server/mnt +SETTINGS_DIR=/var/cache/cryptobox-server/settings + +remove_super_lines() +{ + ## do nothing, if there is no CryptoBox line + grep -q "CRYPTOBOX_MARKER" "$SUPER_FILE" || return 0 + sed -i /CRYPTOBOX_MARKER/d "$SUPER_FILE" + sed -i /^CryptoBoxRootActions/d "$SUPER_FILE" +} + + +umount_all() +{ + test -d "$SETTINGS_DIR" && mountpoint -q "$SETTINGS_DIR" && umount "$SETTINGS_DIR" + test -d "$MNT_DIR" && ls "$MNT_DIR" | while read dir + do if test -d "$MNT_DIR/$dir" + then mountpoint -q "$MNT_DIR/$dir" && umount "$MNT_DIR/$dir" + rm -r "$MNT_DIR/$dir" + fi + done +} + + +remove_stuff() +{ + #TODO: remove old log files too (created by logrotate) + test -e "$LOG_FILE" && rm "$LOG_FILE" + test -e "$WEBLOG_FILE" && rm "$WEBLOG_FILE" + test -e "$PID_DIR" && rm -r "$PID_DIR" + test -e "$SETTINGS_DIR" && rm -r "$SETTINGS_DIR" +} + + +################## main ################### + +# umount everything that is still active +umount_all + +# remove the user +if test "$1" = "purge" && getent passwd "$CRYPTOBOX_USER" 2>/dev/null >/dev/null \ + && test "$(getent passwd $CRYPTOBOX_USER | cut -d : -f 6)" = /var/cache/cryptobox-server + then echo "Removing user 'cryptobox' ..." + userdel -r "$CRYPTOBOX_USER" + fi + +# always remove the lines from the 'super' configuration file +remove_super_lines + +# remove obsolete files +test "$1" = "purge" && remove_stuff + +#DEBHELPER# + +# return without error +true diff --git a/v0.3.5/debian/cryptobox-server.preinst b/v0.3.5/debian/cryptobox-server.preinst new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.preinst @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3.5/debian/cryptobox-server.prerm b/v0.3.5/debian/cryptobox-server.prerm new file mode 100644 index 0000000..dadbb97 --- /dev/null +++ b/v0.3.5/debian/cryptobox-server.prerm @@ -0,0 +1,4 @@ +#!/bin/sh + +#DEBHELPER# + diff --git a/v0.3.5/debian/patches/00list b/v0.3.5/debian/patches/00list new file mode 100644 index 0000000..e69de29 diff --git a/v0.3.5/debian/pycompat b/v0.3.5/debian/pycompat new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/v0.3.5/debian/pycompat @@ -0,0 +1 @@ +2 diff --git a/v0.3.5/debian/rules b/v0.3.5/debian/rules new file mode 100755 index 0000000..d5dcb9a --- /dev/null +++ b/v0.3.5/debian/rules @@ -0,0 +1,97 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# necessary for dpatch +.NOTPARALLEL: + +DEB_BUILD_DIR=$(CURDIR)/debian/cryptobox-server +PY_VER=$(shell pyversions -vr | cut -f 1 -d " ") +CB_PYDIR=$(DEB_BUILD_DIR)/usr/lib/python${PY_VER}/site-packages/cryptobox + + +build: build-stamp + +build-stamp: + dh_testdir + python setup.py build + touch build-stamp + +clean: clean-patched unpatch + +clean-patched: + dh_testdir + dh_testroot + python setup.py clean + rm -f build-stamp + rm -rf build + find -type f -name '*.mo' -print0 | xargs -0 rm -f + find -type f -name '*.py[co]' -print0 | xargs -0 rm -f + rm -f MANIFEST + dh_clean + +patch: patch-stamp +patch-stamp: + dpatch apply-all + touch patch-stamp + +unpatch: + dpatch deapply-all + rm -rf patch-stamp debian/patched + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + python setup.py install --root=$(DEB_BUILD_DIR) + # compile language files + find $(DEB_BUILD_DIR) -type f -name \*.po | while read pofile; \ + do msgfmt -o "$${pofile%.po}.mo" "$$pofile"; rm "$$pofile"; done + # the cryptobox is a webserver - it should be installed in /usr/sbin + mv $(DEB_BUILD_DIR)/usr/bin/CryptoBoxWebserver $(DEB_BUILD_DIR)/usr/sbin/ + mv $(DEB_BUILD_DIR)/usr/bin/CryptoBoxRootActions $(DEB_BUILD_DIR)/usr/sbin/ + # remove tests + rm -r $(CB_PYDIR)/tests + # remove doc directory (installed by debian scripts anyway) + rm -r $(DEB_BUILD_DIR)/usr/share/doc/cryptobox-server + # install lintian override file: for multiple dependency caused by {python:Depends} + install -D -m 644 debian/cryptobox-server.lintian \ + $(DEB_BUILD_DIR)/usr/share/lintian/overrides/cryptobox-server + + +# Build architecture-independent files here. +binary-indep: build install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_installlogrotate + dh_installdirs + dh_installman + dh_install + dh_pycentral + @# pycentral must be called before installinit - otherwise the DEBHELPER part + @# in the postinst script is filled in the wrong order - this causes a failing + @# shutdown after removal, as the "pycentral pkgremove" call stops the daemon before + dh_installinit + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install clean-patched patch patch-stamp unpatch diff --git a/v0.3.5/design/cd-cover.svg b/v0.3.5/design/cd-cover.svg new file mode 100644 index 0000000..3ede538 --- /dev/null +++ b/v0.3.5/design/cd-cover.svg @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + CryptoBox-CD-Cover + 2007-02-24 + + + Sense.Lab e.V. - http://senselab.org + + + + + Sense.Lab e.V. - http://senselab.org + + + + + Sense.Lab e.V. - http://senselab.org + + + https://systemausfall.org/svn/cryptobox/trunk/design/cd-cover.svg + + + CryptoBox cd cover + + + + + + + + + + + + + + + + Crypto + Box + + + + Privacy for the rest of us. + Privacy for the rest of us. + + + Crypto + Box + + + Und 1984 war gestern ... + Und 1984 war gestern ... + + diff --git a/v0.3.5/design/cd-label.png b/v0.3.5/design/cd-label.png new file mode 100644 index 0000000000000000000000000000000000000000..06d9634a089d486ff3492cb4609348d986fa172a GIT binary patch literal 696450 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
NZ6e%I@b= zI_76>2ZN2_{s_-srAdRnHJ4(;F{-I%q5xGE!vE#{HZ$UYWrP6s0t}hSUZtW-u#Ax~ zjGj0O=<}+f@@A1v3pHInJu(oPy^%NEZz&<#-pnAnrpr(xy4vPmoSb{hPeX@I{MJ?- z2@^ivES#@>!IUnG`+|>x8)hi`>x2lV3{%#=PbOkNM|NZoStI|}`Du1|g{0xTgVd%z zR}M3GVT1qOnepdI)C8+YKq&615i=MWQli*YiM~G#ZV2Q^K4d3x0N!;<1-M+h6hxNq zDK+oI3jg0%zYl|T&$G&>{pzP%o8 zZv8BGc@5Wbp6Oe<|B&m6STjtviPi!+1X&Q5xWPGIj9lymkqUGoxM_;Tq3IA^JayxG zwW5U0wg+C{3C^pv+-3HeZ)2@Ws3V7<>^-A?^L<}KPPa^QJAZ=ryEP6-yF*BS6UkVb z>KB#Of^h^4sU-sY$_ShqFTY`R$!r`*HLm>)qu8F+3NHU->HQO6ameZ&39w9I-j~Ms3Y|{aAU# zDK-jsgnK$GtwD{PRyOfXMh*A2jG$zEZFsWI1;iU{Lhy!4W_Z0|^EQ28`EGyJi_o^~ zM7MMA$NhfO_213JnLr!=-<#O~8C^b4+U=HgmfQcClZkk)RgiLKGDWqfLi<6LO)x$% zKbWE9A0@9o>H*?$WRET&cURd1;~0&!VQAup-=-+890pKdt~c^^#6$dq*^Wk6{%w_A z=*1GiljQX)0e%goGAY*R$-ROlvbhG_Z$=*1(t82CRO|_u z+!VR3NG-)j6Fs~Yy9|)>YMLV9!^)BReGTe%Miq#MXX9sEVhXJ_-|qxlv!kE|pP>}i zK-KJ9HTdHORzZoh9@O*V2=7-_E4Ie~gC9rTl1s60j0_r1w3iveii6IS8J*zdNxVQ; z+vJk`b)?pc)n?9HObrN5K>T_Lu_E8!cj_gJiZCPHx!^u3%b(7jEAi)SzBgT**O)G? zmfxIVRS?V&&XwA_<1d^Lmt98lCmxJ-#m|~>S;q<9w*7*=vyHQ937MXJD;sVX3(=v+ z^vQW3jPO=P+hN18vI^CUv~HEw{`U{Ob-L35Qw%|Nt|TZzQ!Nt}S0JhZLsB|PF&4JA zGYJPXBnVm1pOXIcRN#?DWz~QpaE1&b>-(HB(}fnM2nAB~ieXt_h^Gbn?VRjST_dM! z@g-qJS@!w5f!6qfh~^Ph(Z6$KW<3@)27@%uretGx8HhFeFlit1Kigh01yz4@$Irvn zcPL7;vc}~J;dVwNrpNVzWo=@24@j&z!7rSVBx=RuFPLep&tN+T;6~&D`YToQEGAbZ z7XoAzVoLqGrRqD7$6V^H zD_%mcr=u!3IMm)uPH16QB**3F0?g-l$yE5cQ-TKppAN!;Kk$hjkYupeKSVbh+x8Ci zg%y77a;Z!h=ii9z4!|Yht<`L)?UR#>h0RHDKjaQPq`3*7@`$CXkVV$0k}_%F(?G6u z5OQpH){7^>^f9I)G|c-Tl1*j$VZ6p(>_yO4_1H9Tgt&d;iONC$R}0wb{=1IbeBFH9 z{WQ5<`Te_}{8vT|bO(JRiu2uIgOtye2A>94h62MNYA0_L_@?^Pxow8}**tS^k%E zYNSg5W7?-zX{kPuEk-OVlap&?^f-J*A{52qQSR-pk{f3wxB&^JX>*8idoroQ)DE{q zo399bgT&}~0TwMmQzOPR#YSR+l*59s{Qy2_Tn==WAW%N0gvC>8fV8aF>9 z!cNm~TM^UUvQHn~a8$~umo5t=5xoM|qs-zlJYUj3LY`;1P4dG%>aEVrBK0qdVEs@-mP)A6c;(ao-wzHU=61~H~q zmb|1waub8osX9NcFL|y8^ShH&CmgzfzXmWLnVSj5uto%Pb3T4NY%&@z-*I1QFHdCg z<KmL{$E(aF*Wl+c`vXd>?Q2l(!A^%#Kgolo!buEM_oU@&e#*7^+k)C=n88xH- zHSvpqs4RSl;Dupe3<|ym5(<8c9B~tRM0p#0d|`OS$ecM)9r59D{miZM7608uN86LY zh-~uw-RJ6+_t9y~O84xge{oK3@dBqnY3{-^oZ^>$kXJO`SxmNwt!aPl&{D!R8&R*A z)1;RE&+F&c?+)*T-F~Jy0#GEj*`s^uY~UEGC+wGOsX8In&E59s)6E~H_ebc+35S%> z(%mX&r)UR>O;@zhQr)O}XX*u~e{K=1D)kxwtQLXjS41lcR$yOba~^oo*lXy3uwM9( zw)4F~u$?%T_wA}7qT3Jc2srgFZ>@WNcwVOf=qG&4jkc6kb>iLYCjn~QHMYg38EI}_ zPQ&RX&|-UOPgL4`En#KRU>Nkd*D}MaIskeHPq~}J2Njx)C}3z~0{4uwgUMDXf6s~i z6T#W7p)Psfi{c=Fs8+qP_wjmzpY0f?a-G~{aZ$T95EIwldxKET2Jh2ZH3ACDM;*`* zOvZO8W8NXKAZXk8=!X&L8T0POO;QE)Nk277nOT|D|=~LQYf`N1k0;3N#B=aZu^)R_0C)F&lNxJBA2e_ zZl2}(yMatP940o^fx}>Mz>{9I>d5c9vn{iGxb8=#JT4!HMb^uaj9nVloeyi8E7{91 zfQ)62&gJ`0)Z$X?$5ZToAKk7tE7M;&?)Ni!sK6If4}G zf5~tE(NQ_!Z-9^A>=n4I5@^K%i4neK?_vACz!A^csPr2L8nyL44|NXitL*~Lo75LR zG?A~+sDj^?;?${^g5y}Po*a};pL{D6V#O~&C>7Mz`Z$GT^bM*)vorIm2`ZAo3{IBw zT+C`J*UPFdF;KM5lN%47=vM5%&1^!nhKy&Nw5A0_N+TL5l%P7-U80l0iY>9>lN5K{ zR2F2x_c|@NRxK>lmBPc+cO{i0VInXQsMY3B`c( z)bP|!sd&bzJ&_a)X-W$+3(k!h!84iE=ZM1;PubIny#4X-A-Onx_-=H1HS2lb48D90 zYHvIrH{7O$KRVaW7VKQH4`}!+M#AxddtR?wU}(=Aj53HMMHEenx(Ma)#|)kmWhxnM&ql)IpIeMx22c zotw)@E;iw~wMm0U*$xt95}q9`-G zDz$UjaRDw9Gmew|a7>62^UdB%ET4>KSmIna#m^2QiGER1H5V0KeGBqLi6;cu)UFAs zHk5+jIUBYmZCqeGSUG!37Wh3(g1ouCHW5t#L+S(J<{q-zoi7mD6YTKAZXJrY3_{N3 z!&&$tH4IE?HT7XuDgag*WAcRRj#u=G*u|DSDTQ>r0|L0P8~wt#h|J<;mwYMZRaU)4 z{b}ad%}C@$Wi{D1Sh$`CGDQ9oaW?B zIr{ab)&-P19t@f^V`}MaUQ`i4+nl@M;bPh>wRZ#q>iorDF2A_5#pt^Nn+T7GerEj7A7Kyz+Hd7@l>rgdD(Z%FkB!V<^CN;3hVI zw_8LuMY_mUhhxT$3A4(VCq75>Pzz!(Bnf_J^DYUMViR#rr+wB$-DjXzH+HLSB_?9| z?OVsCKw=XhMtcF-%~DY1w67~Z4hjoP0*iA9A;(^t;my~p+eU(kq6`9Y=f-f&lN@%Hsuj1N$PezRLe94ccHh%`bq8YCPu`S$hY@? zG>5c5^c2`*#`*XJwSe7-hO%txO&=JHoM~b=b)qJBlTEQTQGqB(GVvtX{uAn#+)LIE z|5pkzdJfip%t`GLm1PjW=7a#tg(gsZHY8(mr<&3*#h}kiRVvZn-`~OGrFk zAv^0vUL9E3Mp~^UMwNt8m&xg11G~;s8RbDcF@;T{9=dOc<2LZqz|&5gWRMH*fb3V0ujaH`~CxF?a4yR$ z@F?Hdp(HXC8p*yG^l6VeYtDuYH>|-IP{tg?IwsgxEoDKordzCzdge&sorYT+Yh59a zVirL~4+&2hVI2&LqY?#6M96aoqG*qH^F%#{?wAD2TD`ms#ph(+=f#tuku<=`V|js$ zerQp|d0&xq&2qVe=uiM6XX{5itUZ6&3D)bfc7zH!uLdSmr5}y23^IX2qC5^ z->}f`UEu1iwLw~9iiXW6v#l3?zH;uciEj@)+`|n_EywPXSxBa;Nyj4d#@5+2eg1_6 zJ?(O-kr~j26s!Y|+F**RuZ1=>&S|q4#-FZhiCRsKvF7qSzLj8zcg%u7E+|R#5kPC6 z*P{7ulqQ%H93Q}iEZkd@%5rjGGPf+AW zr^DBAN^Wkh^uWTdV4+nKW^#%al~1zlj)`B2dJbU*MBi=S7TUh)n4jf8^e&uLhU{s1=QRzpLVGP+51KhXw=R9-iJ_{yPW(bzet@hV z;)PS+n;xLO!DuN5BhoLRSe5#vrhxd# zN%@irC`{Hm-0rkdnMw_}7h>D?{`HUML!Lx?3C!5R=Ge54e;%!JiX%)4 zy88!;ULSVH8!X;YQ-*j4!&gBNH6Ntiud!QhihUevns)5$&<+FfHjLuUJav zE$o}bs(c!xjY#e4Y*p%s(a(Yqhb#%^_mMXiTPIl`pq_^hDtFcoN2U84#iQ|ad}Pr` zrVbmdkP$J%nuLFO}b{5rg+7S+!-Dd80Hq12znpJr=~iHG?xt(SWX@PRC%Uf>}Lx0TwuBOi)da^teb0VqZlW z<7*Lo!Q~{D)7eVjqsDnJ83p@c!NGjlmwa)t5q|lk;VmVb3rf$&P_R0&ur?tZt5ndM|N2F4rj z3eY$<--cNH%ak?T$7N(IP&40D4RY_N56k183jzSHhU0r=Xh+E^*wl2$v?@XE2xN^$ zqEdVpKaKPw#H|D=g57p~+!5Um4B@S)+=@@&O#$r498RICq6V6Bj@Bmi&Vc^aO}5S> zDTN{+{I^%G8rqKoNt&rS4e%v+>mkKiDIGnkL`@@e7{qi=*kx zCzN^Iyk_ATK2+1!m8WqwUcFovBdp=D=A zL3`Z|TI89&&(t5ZS)&P71Z$dih+VIh)~aE$b$z9pv2^Ci6LjVYNX`pn9ABUn4uzL^ zn>YuFJ3XAg8Tvt4hDzh=yOU$)vl@Xie*P+i*8niE!hELw`7S4sq|1JD*t~)z zB8Jq+pj)O}!p8sW@_3p!3B_DuFL&K3tssTS*_l2W5x)^A)L_e$zp1qd58_;i+Xo!rux z!*?n;cxqJIG`coF*D-v3rtszTX!kWnI60r4%qGEU}_?VZ1mF z-OhSwE6?2F20~^V4A0&D>@u_S*9BsFN@C&8)YslhYHjdU*chHaws9 z%%&b-?B^tXRMK;8U5PN?=Oh1Evg4=)y@Xv2?1n#Xp=JcE##TvQi$(C@Vum{GeE(W1 z{75L0X22j;Y*7!EE(^nC8ra7u#=E{W@MlZJcZZ2sq4Gj0jvx`s482R|Qf~Nk(rPy? z|A!~JGoEfVwW)3)jfyYvv_)ZPVzY2@2K*$zSN6hLOx9rbRtOzvCa=7=!DCpPp`5!r zy@B;Lac{qMWEpc=g9&+>T@d#x)nZ%7B%#>k!|`!HL3g6t&xT5TK89 zg))>fnga|eo7+FPl=Lf-*<>)2zj!kjWi*uf2Ga`JgP=}C>cgfF$8!~g_6Y_Nvk|LX z;@tIX4|rx)$s4uqETh)QHax0Za-{|rQLcpD8>~GgS;|Bi6~;a%tpukk z?<{E+Sz&)63+RUjd5D%j6A(swuGO^Ci{?hx1}9Z5(XwLRowMsY&Fo3W#{{~24;TGJ z^&T;6W2I`Fab&{Bx-lBS0LO$Wp-8_vc(9^?0ID2RDy9r;xd!9q?9I5|4lQ+>sxZ#l zq$B&PP~_bCg?XU~c~%ap#{oSpeFv&fm`2N&90~4}ror)g3PyHEM+@WNeUe%0Z~YTp zk!2xIr)iyQAtWt`Fl7@@y+)#*A*Wj!`{^8YS?NhA*E+YD4Dth_^>wggu>0v)mm&R! z=0KO~9XzH6-QL>fcbt@QAUgTszd+{Wd-?(g&>6C`+woQX-mIzR_!OtC@rGBv7&Tza z2`UTTxu!@j)q=W_79sb&^lM&x<6+} zu@)a394@VH7MPwEPMKHYhU)ij&MWd(F$`G?vgXHXr83`v@y_oALt?{Fw!x&feZ2*x z)Vr}!BC4#?)pKgy2XHe9L6@DdCPP^UNpyL?t#PSK!;b4Rnjq4h_6;H*D--(G#C0_{%stvao_Gi67?hb8@Fm1o-qL?L>w!h=B{Hzd#0f+EuThkUI z9Scjd2WQkq1xDcE)JK=*R2fs49X3__3+4=b7b6xWZGnKYjr3&B<|{6;YGI4Q`*x@h z!P&Q#E=<`dfVUuGHQhJ?Eh6f)+4UPI2VIjkOAeClY49}@nfU8QX8-KM_;eBV9<`HQ zxp7y8IF4LusO*?Zx4k!W&=MH}fo5i};q(UOhO#+~A&X#paZmU4IDi(C(b z2Fp7EvNaK_b;&VnFIYlwjdyBDLXg<*O?cpoE07C&ddBPv6)L#kmKXQssBw{E;2!(U z4Fq1OEj2!xDMqld|~`F{a9g}~mkeNvEg$juJZp^0=DYrXja>LmRgsE(%+)H;>Y zh9u`UCW?&Dw~q|jopJwMO;8GN>`t~%x1#av#$HPJ#(TLD2nfa7h5(y7g8)pOc^z`+ zeX@Bz%jn6;_qK}BkFYyj4<=^}1eL;|%LrSlVotWak%WGm;8S@UF zOh97$Ud|H8ureDv>y)&=1CcIvLLX7vypY-+UQZi~ppwadRn?N4YF0|J{ zs25tL++8I!%^%~cHU#O=hYi^p@^>ZRX<0+y!kQi^D{jh)cVYCR210Y*Nk^M5iW-YK zafO?}CR9t$o(;3zT`B@6u_Jr)*&>&4*P}{9|FCZ zMHMUi;_A~aqag&<2YP5Xs=01bOCfDUxXUfd$gGG3hztH{2}9+-8yY{T_ki1&V) zD#|%z^oWlxGHX^YGlh7VGYQlT2d2`p5SUW5JPZjP;sm$APgG#~wO+ghCoJrMi>oJG zz6~jtc?+hUwk+T(%rcrYajisa{-#?~69(FldEB;nUn{C1)mRC8Y6om~(0EzvX+DWe zL}x1T=7U#~wL=x#GO8-^N^jGmKDEIM=TjmjPd@aJ=(V7ZB#^g}xHIfkaxb-wdT;Z5wiuF3c+5YhfaaOsRsS!Zn5v;jsgm z*&Y(Yb+YOb?Ag77r1bM=y0Aj;zUx_by!coMO-7bP)EgRfsKus@dMgM&qe!0S9^CBk zXX4u8hDNzKaVAuZR4Npy=LPamL6W#mD!E++B=1!oGnNTW&?TWGW}wKFFxGiaxlrN` zBFk~U%wPYLEWV5~tNs4=s&G2#)X#;)Z#sRg-3Ui_`ttBKQpm;eIm)tYQBVdn$~2BW zhKS1qVc0!q+iU?%KV9Rk@muE8=hgd2$6CZuc6dCQ->F&< zn+aTX;kqoab-=yXUNNda3l-Nn424KCUZiM z7Oxk|n|4wmOfDmey*pO)x9CmA{C15%ZtSH02pjjt=S z&#ug3dfmZC4j1s=hbv9W(W8FaKdI=bP1nyu31(b=dU#l*8aoe`^|_ehd62Ar`Uza% zN)Nkz;p@)gwCnZoY5t!a@^4Q4_vP&0oSNg8j9mo{uzVc$q)B7KdfO<3m>mJf(p-e_ z$hj9I4Ym$&xX+Ix17GlvGYHRZX}RU)h|hejCKPbcU6Zg@g%fWu1OfKKQcrDEkg@(E zplm)_?TTh3uC$Y3S)-_)zlgl*6kO&8%79^Zfb}eIia*I4^om5%^IHZA%+Z&S<|>Ue z8nQ+dufm?ab@`<9-6e?YNf?pHhH9=?nw4?UQv43Q5or|6%2~2%K_pD%U&M&Ux?8Z! zInk#F=KgJ>Vr{4>ApBUm^i)k!RR4*%-WyST$YJEUlIwk5l_rFZ#iH-!y?#LM ze`79ok2ljhrH~lb3M3l};_?sUc`yLVktPm?EoO`&qsZm(K2-L#tCe5x6XfmHJ5k|S zr;m+LKfe6gX{mONQS@cl!SQh0WUFOtH?5OSg*6`#$nMQPWU-MJ zje^q053PWnC5NkGdM<`P{makHgFFgr82~Cc3k!Dr@ffV=_2;W=x!9l<1ic=5!mqj} zPMuV`D*hm0i-3+NU%VJ&_#JD0ODHf9!f0HELuqr5Z(zWvVLAclj*pj()>XV?9*&C; z`ChPi>Xd5W{a@&WEa5h(S?jqoI-PD+b@RXM=Jygdkb8<+TP2SZCKau3N%|19Ait_a zon&Hp%V#nu^2S9xJb823cQ2xx-labPDzwAA6I!H@YN15Mjw6@BM~ZQA@>e**hs^_J z4i1j{m$T~SamH?)e`3k1WXAI7XC*G6vAkpXvSwA?d$Cn(X8TLfMTe_TH)~3)z?0~=zfY#4J{F#w`WD@TE-9)zHZeJ?p=GCT#!`!rzrj;6 z{eyHIjeWyjjOsq4vpfqY^YQ2S%p{nADOrf~mL{A6GI+q>W4Yho;mGgIW+_r=MzINIZ-JUg$(P z#0j@;ZQqfIWT%E*$1R^3#7V?ZP*u`=>*$yU9i-blR;`~Jbvd>Qy?igP`5oJvg!uw? z7vvnfPqa%@8vc3j%v(BLQ0?CiO&2pX6P41h8(JU|*z3U1+;nAbvLT;2CN`>deRL)n zpVps`e9TzFY$Q0pSGVxMtDzf`YMyAU!hj#^nE2esB#}nI12CL^Yv$rrpI8{}hR|?j zZVWT3JpJ-*Y>|%6=~@^Z$APUb9PCN>t*=A+z#=bVf`^r{RFBP$^fQh(bCe!CC{->pVa!vmm9EDR(rJj3a0(v~&!CL?6D9fP&Z#%<@AFmv(jJHT5XTi#^#6I~wsvm6B=Z*&coK)hHbXEFxs^swwE!VM7 zTVE7UEUd*Ueu#rxGGYvo6^+@uy2*NduPwwucCjEK7sq6Fh2IvO(I{5O5~4t}+Nc1W z3#0bK85Z(sjq!kMlnc!-*sN#w+4b}qmyX~p$K5O}&D1JFDk?gMx(y+dJ(d3dU4ZN0 zGfvh%7^Ffg7fITJ861gylD-*yIDM_T1HKhOdikE3?|c+l@aOPl=gEEU&~bT+6-H}6 z>?0oU99X?6666-@@JKHkT7Hvt8?wO-EmS@puBygtHy0T7W9Bm5I7d%#^uH5^#EN2% zm`ah#GvNe+sr7HDPC}Prb2LM)z(ZmBivua8`j;7k!!)ExbV!Gs0RHrhB+;obz%Zl4 zVVFKe7}@b+72OVjjfJLmZnQ;v2}TnX84IeX6J+KJ%`bkLC=|WS{Jh_am@99uVE>Xx z3ooD7wPrVi)rbeN0|@B?ISVIN_{@~0C4CG|>%2K7czI)Y}r zN>!TJ-9%va-iI#i%+Z37W@tGVA_F+-n$Z;vU&~{jrM$cOoCK;M;LmPqzl)ACuJz8HLOE!WxnK6AAE(4 z;^(RcYujwNas%rVyvG)gEavmtLo!GZ)0<=H&RyR1nX4q|;aY-u1#W}$&UeQ8yUi%>B*Ew_ z{STS)o=q~@Gg@*Dch%7c&@26>Q!L*PcOmPxxu8nooy~&r)8384R_5*ii+M}MSEC~Wle zlEzTZgGBVhPw&^2N7iTi9b7?y$lO^KvLr>zRK2fqC58=lRovizvY?7PHU1S|I#ud= z9)*{io!Wly)gSlut(?_ci84(-n<2L^uGOE$rTPC>RNA~AZ8y68R3JqfmlO|@DBumAy5VF_N0r~lZ{$$Y$8*?0`Z|#5PDDzJRYu9L!nVU=uiS(XGQuC}OLVU===p zzhzf9Z~3W!i znOy#-vk;~`(duzY;voyey*-Zpu!!yDB!=>)Gp=6a8qzZpm6a)QJwWelwDyg-uPi#%_gN z!lMCF=VVk#$2vtI072oDa><&>iza=nY=QEJP&3s5@e8q1F^ys>E!!Gstnf&pO+0nT zYhmk$m8#*NRI!^&D<;7ZG%pbnChn%PnKkiP9FO1VQ7OGH;o;7c#0KO@YPkIDeDI$0 zw_yiSyYDpidl330y@SLyI|fYlRUn$>mC$e2A(A??VOG&A{a|F1KGg~0zT_)Va?AIx zUz z!>|VlU{hf=ltL0<0C2nMx~8iRfT?Dc)E-k9YN61M^&Rm104gs_a!?|J-Rvip75-RB-Izv^5t3C>TgXF&NCHOsta zS5XnCH7djv!+^wcx}=$@9Q%VS#J9?4ZVW1dd&?G&=Fh3ql)Be^BV+_|)w#Jok-QsP zn59prGkJ_v&OrtWqED;YEgM4r%o+3RDteK2qa0chG5$$QBilP~hS;OkRa;vddw4~} ztGfEGe-nipKo#`yD7s*wrCu-D}}U*x#y0=EC2Varguf5x$7aCM<(%3c{+ji2}c1~>Dwr$&X!^Tb;`%Uj>eBT)7-`PL*xURJq=bBRySM{YD zrHtcA@!hPGT@s7|j)X(cD8Nqf66Fuua_2BEES4zS08UUbE?Uq2nNg1lE*c`6=oBQ? zbnI?g!Cbo-m~@&j@R2QV$)uFimE0VBt8KP%2_r51dqGx-+7f`$7ZcK&hpYy09a8rP zJP185Staj8O;+7;=9V2`G8&G<@0q%LiSxzIR4|5aM1UMwsxvP*96&ZJo%{>Xwk0l~ z0YbP2YRORFgN9++&W!6%yQyuP0aXGS;DR~>f$(vQ_GKg0KG#p`yR>$5NBvv0-qzc%IP z=b7#2MUM`B_mkoKvhBO-=0;B$w;W%R(=h{L#z|Y-t%jOK^BQV^EDyQ26B<%7px9>p z_f%EbvF32WPTJ1keNIaI*4XaW5!4Ua8(yd^6(bul8LuM2}f)_g~~6x;`7WUNhTXIJeHWFE}ndfe$Z`+YQxkkLKGxVfYOb0-w$5}0_&tx#%D0~`xbI{5AEmqQF_y4;97^~;lgLl0ulVeT7~E|v zO4$=X7&lneteF7;RAjb``e4PTA`MaaLgmq78*UPmMIdLk^%O<8rhOO;NJ4e`4e&W+ z2qeE;*nk{lGhH{f2pwEGd1wQif{T%Z_GIzkiF94^q$po>w4N30CnFs<6V8Z z{m)po+-Imngy7meP-Imko)`2zLO7+kgQiXzcaLpFkNak8%3R7WavJuQOZ%GEP9y|) zX&Np_w9>cjN?<@TuA~;+0wx6 z1ZfaidxE;4<0Dgq=oD1|Cz>#+QeNzG-j)~1boKX&^!X?lK@;gR5|X!8B-b3fcdXCl zp32WVsBZ1ghXc!dFnX`5OWya(d+gO)uA18yFrfGSnabx(%H^VI&y%wEOAfEn=R{3U z&&LeVp1t^F!^jCwEOUnz3XHivO&A~hBrQ0z;aEOfdqEA{Injt-#@zy6(ce^9+PQb$ zabLO5VU$%{FIZ2^>VASZ&50Kic%d9MkcxI`p*sTHMT4{3UY0^^S z&Rq;NXDL%7_;CI)qsmHVDs&dsU?#er=Lx;&VT4#&Y= zlyP^JEH66jV$yl$H3er_B;kkgUEYq14Ewc@sLb!$kU7;S8TgQWH<7~^Y_69R>)hv~ z`Od$ZPaP&cT_b~Ad)2a3o>9n@Yz^92nUvO6fraj{NLCT^ux;`Xp2Yd1`8PeH;0~ld z?zdLh=t@_OtA&etjNdB88v_wI)1^^Fz<1ctBUh;r-hn}sr(GRai+Zn)woAbKksf72 zx9ydg;?K_MvsVOoH?jL3;HAy`K7YGj&RfqGltegy$mY+m^5%lq;Xu;ODs=PBWS zr!U||3V1@F1$XfuO2X%=`k#W=eIAl`Dc}1EP???m@hq(*M=-#+b$1y9Mu4r;99JpV zeF<}=8K+#ZEDP~{frI{)I(@1R2FvBPN}}f!h85qj=7e;@h$<89+K@R2lB4*smAzls zLmw`5yMjS<0UUB)=ZM20lYOn#ay6K9()-v$1~${;a7-_Zs&!muDr56;X!oh}ay|)- zQ`$TH?w}5rU4sYrV7xfX3XBYQw)9MsxPaR7Z+c|FrXiP-S~an|n*qxX^U1eh^t`D8 z9(NdtzDV;oyAvc*a`G*1t5{K|U(AJJ8Qi*c#rwrB1Dytk%_3?lQN_CYuJ9@DqqgXD zdw{sc0LREGD_Z9HpS9hd<|gOciROWoV>m)03r(v!h58Jo!S08lxZ02^LXapXHmiHd zM`t0!kQ6r(e1HZN#K7l`uZJNbJSR_@V|w8 z*7}@}_*C-Um&x(keB`+6NzD4f@s2x8Ug7`U>j}SmOZ}iupT2KUy=(8^7f;31v#kCN zEYt_o-w;T8?BGZhdcWJFUlP6h}X@$Rh@_iGM8p`@{PYZ(6>l=qxK;{$85o z0Q6)VKx|KPLr@)Tt*9^sEDdBYZX|tzP`l2iz3q%#NU06RN4T%otmXMu-Z^pymAYOIPMkz3J6F*DIE6^l7NIM3m{j*Om(HV2BA zP4DQqk)r>Je@qg7 zSiIl7>Q%^n_RK8yJe?*CC^zS`3D+fxPII^#t$#Zbx+>FPXUx}V;deb`zJQGLs2Si_ z|4Ky7jR1Z%%-$sS&8D=jncmmxT#`a6yk83`?YE0rFO#NxNn`eRcM4U10tGi}bkS{VaB1*Qg(EV|Gkv*`uu5enmaH zD!E=pXdA5>RPd3fvpgQePZp;$7;$;sw^gL;qF8N_H)#E>z}e2Oy=LG%0;iS=8(Ebb zf91yW73;b6$Gti?H9i;hiU;v_%OfrLZ{B-WMESFaTWTDf;Vb^jJnhuW2gm$AS*5%A z4@)2N(kI)K8}sSoqN*P2?_XlkIPtMy^6^64-Pt+BFdD64Vz%?`SFI(Myv76c=y+$Q z(|3DX^2f)`PG`*5>inf|mz%stGfJWy7I!JE0$F>^l*-RrlnJU%1;x>LfWAG?{85Hv z3qnhL2n=l8{SbWMwwvyucTs~Ey2+UdDdE1pEJxY1@ zzR`E5oH>0kontWI@wUlU@};J-GWk36uK}CEKBY!xUiHi87T{G@lDqOyRp zis8)A@H+jHuA!N&jLC;^?zgy>>k&o^+slJ|`~rfHLVOn@uKQpU0aOM$;Rgr)x0Pp2 z6Mf97lVTDAc;t$H9)*fs2ljH5ycIOX-!i+rm$x8|_%r72T=+TGg`tGU5SJGgWHiDM z#6kKpRB%ykF0Ux}{vWozagyqQpmC>WWVqP;Ah59tyO7V18L3G~RS?}W|g>#&O* zP;QU&aitr=_It2=nl>y@!9W{58+GIrk0@$ISE49BZgqBM7|scLP4OH9tTw!`LF@W> zw#-6!ee=@#bG_ke@$-q$r`u;I$aQ+)?^k^8Y(AStQ~A8edBM8R`OMI3=f!J+2P{FL zAcEGUDM%)W&tRR()7sr}uorY+i>rXT$-7LQN|jGpI=qwn1R&GWZ6&!qHT6uVwdEAAWk zUmKj;v`^cPvMs9^Gn>_J5N|6)1`IKsk8L{?9L-NG)bRE*7dzbdV?WWpM0jOm;Rt!&fLHvlZSJM_97-Zp32EvUNSd0g*&_Ym78W>>05TT_( z`rZ5>TBwoEaRTTx+>%2Yd>V{9)xQfQ7OR84QIu{9!JAzf0A&JkK=?R>)KO0Mg>#0m9)MCWOAT@Wt>VFq=oO z*GQa;1#kTHY+P1&8}=bF`n$MLHb#N+I0T|UrjyiBp6&5>^MxLG-EzkNvU8Q$`1$XP z_n0{=Bd_=f;eSL*(g#E2|XHMy2NAo)JL_zekf0n6A1ci z_@^)DP@g8$%YPuHmsj1;E4r5x0GDrV(D`7wyJ7RZe@COp`}py=a^O&w^S+i-rKacI z^iN_pE8_frdD&z2za(4keNk>{>Ohgc^Sb|Hc=PfZQs|MQbw&8x#bHs2x2o9r#F-#` z!-g-KKj!dfP#sR=5jAGzaqSm-pLX6WAwuA9)(#Tg_P(UtKG#>U)H>r4VTU2_AOs?( zQM1Dh{V@wHmG@Uf&i;0&G$=wnnE*e(fvMAC5zFyXm}Yvn;ka2MqC0bj5{93H>L0l^ zK}2199*0MI(f1Vt=K&0WI7Iva7~u|4|})wew#AHN2AZBBWRK`Lg|f;qg%B8nG;P_5>=>nQP7crntNV%Ex<_ zX)N84*$g_;Q*tn0M?z-YK3qmMOXW|Jk3k-`IyiY^Y;db1Q<8Ctn^;9fb(B)gSGovxP4RJQQ;RwE z?Zrv}lYkivww_4rn5?S{gNMv!ak$0=h(qz9aG1tr_u2)&{%LP!UYg2$Z0#KGElwa~ z*_8469Y~lBvlNL)YYWD<5`ENZIcGotJ?@?{ZZOZ2E+ShUQ;Y%ooS0}w;D!xbEsA9S zlL0)upXf_o1yeKCp>_m~^vU1v8~$0rtlg5+uImeW;yiSH)YFdl&ax<1yCwiM-=;I_ zyCBb3y9pYd0u4pcM8Nv>f}4cC*DA?yVs3kO=cq|Q#FO<6q<-mmRcv0=PoiIJikJ2a z$s6}6>H@nOvmd?Ag6p_;#%+JdQdV*1j>AM+|8xN0Z7O8dJ&aHGbaez$=Uo>$m5K)b zDm&$WX7?%KdwP?2=dby?TU#IA_g_oEx4!MN*BLK@CAnqAIPHAtL>T@Op;MKBx?q+} z6Ocn9$p-8 z%3K76H)BrS%8DsgWcgLs&u7ItDb-Vvz8bXQ11gm=-S5Sm@0dDn#=P+G1oS1h1JzS@ zttZTX1{WZ9#O^SgIm@7GIx74mTo?{Y&zO>8BOkfa{?ylQO1c<5%iCXpSSO58z78`Jgqp$|64u5jXCZbnpbt*TcEWtW%`NA%ba^x z%Dbuo+qWfUx9F|!9M;JxXf~)U>(~lz3q&HCqRP?eU;%0Ib6J3aYR;>(+|cSak;SE)j{)19kb|$Y zcK4oGA@tm}yx-6v>WxKr7l+-v^x)`eXHkBtaAF$2+c+ygjq@35U0{1ns27dcM=$?l z1BGiTFJJ`7oMU5opAa+4lo@d?#%Ggv@be9Oe}1TJ)4u%Yi2wOupO+Hgi}tVo0eQ1@ zzNp;z)sP7JD(lZ2+E{oW7;aJjYKWBIr$D}pxD~wH>E}g${NkUY9LQhBKATxDp`DDK`UdBDf-2$s+NI< z8lD=(kbP@KP+~N3GJ1k&O#tiH8_*|EkxF3tHeXj06tZ&x{FsIMZ|(l9v-|$+FwONW zV5X~K{q4>(&Gb;2kcvlvFZ7@XAI#gsM|23|EcktbW$t_mY zbZdUTIevE1eL;`*(c~(BD%e$OM%AAD`V;D4PVjsYT#+4Hjg5sj{c4lAlv*BeNDyT2 z4nEs=jgW4`CSZB0wWx{I!GGWA+7DqF|GVFoqpyC9tgiEg``cXL1gCry{J@@X!b8&- z3ERx^VUQ^NgAXMP7G6v7%eRm?QKk6>;ay81DMS~4wFY%92Ri;Ja4;rIapd~2lQ9b^ zQehUalRSd81A-DIRt-$>=ziAP&nasQ!4W~!$iEEaR2Il;0XlI{47W=m!aTTU>FHR{5XAcSQU#4* zzk|(|L;JGjg7u}=o}@tera-2Fe~0;=sP)}0l?NiSZIq+C=m4$Je!`MW-xO8=m7$hd zlA+@S9KM{Y2rgf_4?x=Z>_9<*maigWsSn4fRK5!JBVcY(S-r68YafTu`@`}+B%Al- zYjaum=-!$Ir~IV>xKC|n#Y{_{DFzoNVnPymhn|{LefV2HizzMWs9FnFT+gsCD2K%- zk{EMG+U4NJQ^Xd4-N{6^TBc`xeUDx2j*TWpU<}XgVRt*2Ah*~xQN;Jy2Gp(TezEZW zgON?QF&8V&xR<@oFWjB-^6v#zGtZ$bvQBL%I%! z`-nEIIyF&b#7!vzgEz6gw1f;^SF_lYZEqf%zBTe_p4a;s1%FEKM{k|e>7V#6BxTEY#j{5>|1mgSl>XeDJHUQI;`Q( zZg@~`)vMVRT8%&`e?){%PG=++7@4O;V9U!OpFl!(w8v)0C9_N@iQEkx1u59;ez+>QNOKNQV@Jf#TTc zXy{U~)Lgj$t>t`}eTv7?2Oi()9?|k(>Um|%dmn$1x*PzMR%O!75mf<=mIIi3bQ=cy zD4K4N<@Akx|L*i z-(GZ0ejaw! zO3mj>&B{Os(wS1ui}Js1`u5j5<|RmFt5Q<~Eh$%w%av8H5>6eP153DX87+R-Z0S-k zeN12t`8P1C0Kd?237f*%I2QtYbE9!l;Q9cGz*830FPnvqtrj%x7!z>BdsZZVF>pl5 zC)jj4TzocAp&v+%__4$Dx1QdFQmLq7P}|~7mMn!567&H6lYo##H|BLwi32Skw6)b) zFR_9BnkaCX6H9_aC&*^4_IN=2Z0LPoMIB_DPukh^FHo>wv!QMUZ+So@UxZw*9UhV>WO)s|GyVB%ZY7 zxx5o-kw6~vSldU9eL#ywMw>7oDob^#=f!V2St__hs(%dlg`Q>7O8V(Tr$G!Wzn#P?E6~-SfE_l*qd<_bL6|9s;TkOx##~Rq+k4eNjpkDF-Y~n zIWy$OX&q_D4{BpZL*I#mVp~S7)a`r^HPbW){KkVsgDe9_SSfi(DyC4x!__`{huk(5 z-@qoIF19D?mUa=yc=vwsd`zF$zaU+;E>=e0U=~&S?lwzd&U-T*j1mS(Qc|6XviGE+ z|Hs8e*c4Jp*LRL}8ZEDC?{<(k(!)2;{yE>|u^2y59<_P;7?;1MwZ`Kams8-dvaH|C zbqQ+^14}*WiJ65X+QaN4TigdF^Xm1=`}+NAG3MhM>y-bAMDM-%!LLKkuwHMg_!_^Q z$8A zblRqh;(}^rvm~c_VoK(V>@%l41c`9@p9w;JvB1ud9sO6@J$z9HZ~gZV{aZi%A{5`X zpT~B?69DihAWaC`BX(NTm}Sg zhEXgcmlYam`O4cx3tn17J*u;S>L`7~5$H~T5G>s3MOCy=j>s3-T<~zs6&?lq9TyaZ zf>v$Li)*Z7M&qHboVQRaSr~Wve1hqLthCMnX*v!3YH|O{PJYcPZl7Vsy6)t3J6ch{ z1x=Q}6)=hu?31GI!y5T^Btu`~zVnMyVBHR8wZG#wC&AeWZ4XD}_Jvo%fxlkIypWj3 zZFpZT%KE67ZcwG{PNBF(SQz|g{8%+OA=)DITZ^Ab-kC6w)siStm6991L(Hhv5|A$+ zf2GCp0`%kbBj)UeB$Wds7dqv_HPqQ4rEnn{hCyUmJbf4H`tH7ZUfqW5|OHFTL{zyKc{36qmSW$XeSUW#({lP z$W%6^>{wgE7Xw>BP~Md%gC&;|smUe#GupTY`c%iE1>mPai^_gCMBU4`Jo<3SWuH=Aj{TuPJ1 zS7zY?`kKrghi1wdW{MbfD%0lfpcrlZ)W8CVb?v=|!QmWc<9jOD7LA)KPj~y~I(-hZ z$WJ5m-VqZA#>ue0MBY+#)Xe>!d8PAGBGCAyAGQtgxkCMz+0wqT;&F5)8?8VZk8@i- zqhT-7sv%aZf>e3S4|orV*QY(S|7@tqL+4OkXqe$qy3(b)hwHh9`-kZ8xI3ORiuqcx zuCcYt`Ucnz`OiK61Ac67{Ocxd^%U3m7qM)1n!_JhHxEs^>F==YakH_x4leG65$u61 zQ0CZcDwe?E&ru>oTC`3uq4C^b`iG6D`xD%J zG=*gt-mlnK*0-yY#@7cilg)bJ!{>U6RFsC=5FOu(d+>`Ks{KBk+`S=FhM7mO zK^+4gG@x!jj2U_8MOFZVmVXWulQL%Y9q6EdQlHa>n-1*+laF;+$C~2nqR&dlK=+^U zjefBeM!D97McdWf!Pi_N8INnbf)I$>K6oIA&)NddeIh(SLWqVX6K5Q{V;MENm;es@;-etC903Y1q@p^0jVMl);~hQobVUmCFOn~sUu z6#S^66J)VVZE-wM@32O{!7RFa3D;q$Hc!JE`unNpAhTq5zsa-gqaUOQ#EE`RUqXwj z8Wh5?@J_6~hu_?FB-cajbNA``xnx9=%XvyYr1VZ?mvhDn)%-7Te%wdE*LjoBg(D%6 z%`fb%-54>dC!D@t0f9Pn?Duss-sg2?kN>NmvHk-*`urjH$^SRq`0VGEKVMtD->39U ztyRAYb|Jp{#_XiHrZA|(DZ?biyR$B!gpm7F_BcC(Cu4#m0!4PTm7guhx;(ge2KGg* zP9kJ&g6XUKNQ|v>#F}&_q1rJiiF@p{;JuQ^9AP;aJk&EJ=$_h_CPThqs*+&eyS?Jk zcJ1T~zhi$>sT@XsptjoVo=WBbzFF!f3dLV^rCw#t^^eCk! z&r|3^RC7tHt~RdvnJB^&TCJX=P*`5FrAFNb-FQBBImhCNJD%>JC>wJkF9nTW=hXFp z#4uVmHo`)x0-f1tOA9^T7HMDw^c|Z$?$;!dtTQI@baA>;2?_fXNj#OWCl(Hkz_~}( z|M;sm$luMNP>=3VhTe@3%{_`&&8>lffc~5la}{PDl;5}f{#6O_w)?r8et|kF3cOS( zwVY}Bmb?0+FEy0uDKthob&##L5F~YKSc8#Z0vJ|0k-OlaC;FB$%Mgh6Y)^PxJ8Nmd zWI2hBsd!65wtVK5S27G*0~5RovuaUdM=-%$af&<+NqOqp)rRm zonfHB;*Nk)6VQA!`APaA$kp>uT+Q+9D7^+_G1Qn+!&7{6vBc~y`ivEIt9V0RvAHy- z9%lYMM3 zW;Q5?gn~?p%=_sfmBVLKJfrDKFrwv@!ykD8*ihOe?<_dco~g;L;g*CpDJ z)U4ryMYSLEJ*-b0z>(jr>cCmG*zGvip)L+tV9}_y34}#Iu|rh0 zLpbKoO`p<`J7-NJD~MzGeuUXuu$yw3Y)7i~qX4%|LVHHbdT&)f{rAB(coY#iN{Kq> zd5hBz^w20TxstBqy7avX{fEl^h}>zl`JI%9#g1JS76eCY3TzOo7nv}y1K7lm(udgB ze)MLS;^FlX@q;G+>j|=UI49ri!qsFV;&f>Qhm<-j+;o*;DSO-lTu~+5?W@#Gt}UE_ zrbJP75f~NsCvys18nhN?voe40AmtTxkeV=7nr}EPcg7 z1tUYjU2rM#jZ+D@)&y3(&Xb?brw)JiB`QR5sI^BJVN_!rW{QhZ%jO2_;z`a+=kOC) z;-EPgMNyP&WANnPwNutR=F{n89lSPmvF_CcT5RY5~VEnQmb%-~x_lYBJ z4Aon)Vb6&a@aq{zzR|!_9{(~F2XA6->_&t19eEn~;+K=@M$*617gI$@J|Mn=87?GZ zFX!+UT|+k)fP_}WP37DggZQaQ35HMRjjxW56Ay47aU(H`%*vU=Gkg3-DYKMw>u{y( z{iT~*Ef(`_iT-__J_}*?-z?(s?EXX!*#3>zLpkSplE3O}TH$)Rv34Kwr?5w~xUHad zrBHH@g%^=1kJCUwADv7LextCxCJHs7X-^x0B!d+s+i_&FGzMQ~4x`I|jG^He3HLSp z1`W>7#l={+N}?|?qXTwW7C?rol0%D#SN+@nGj*{nLfMZp&a^r|#gMXHl7<5bs*OY% zUR27K#X-0ZO1=&NPSbpkFNU&-Yc|ttfPU11rg6l;0V#V)Hk+MXolKgEaz*bO9roAj-)zB% zMj<9lKrZrJW-afhn8J~NT!&N6mlMRrBUo6vi#Bc#T-(obEbPy^*Lb&5O5bp!?HCrU zpw`C6-$TqKLu22@F)RqkK#Yn|24C_6wp;}P$(7O~@{56=$~g{{WqE&Pc_dPeamClYX0rMJX@IOnD|x{GS|LlkVqB;6X^eZz67 z`@RK+%orztbC<4-jUI=5puFz9k4}KbfoXBx%bDN08x9`8T3ig})#PL%>*#p%Ag zkgsL8uihBk$aqKDTg%4q)2LOz1S870#j)kuGf7$vtUhf^oEQTqH3Jo(BLoQwqhION zwfXrv_ODyxP&V_nFtb=77IV6g^KrKZ{cn2W)uWU1er|g9&-;A|=}mkMR%*WXV(_3= zN?#0ddx~AizDL4PQe+kjuCg6e=dqgX#iH$mj{hmNCtAcYUkkLbT{cv zndR;$3BM$r>IBGYV~FsG4?!d#{kkaQF4U@iAh6yXSvO(IrwV@7`Y~P|Vj*|4Ws6W# z(SzSAF44`jnN)tLv}=h^u7%F}B_ai4a^aCT;jWX> zO;<()cCGY{BbR2&Y|%!03-vTY({&6)KY9t85iOcAjlfn|+Ncn8*fl*fF};f?-y9FP zB{bG8EC+MKh7qoOd|$G!6Xu2IAdM_)Aq-Ac4f-nVw=H-_nwCcKBCIX~(t}53DWPSd z>uFg!pFRCEyl}`!h0k~El0g&YH-zF^3=i6jiw=RKG#JhpZ_LnE-lpieki#LLfy3Ua zPrCAy4xZg*!Hc3W#VX8y`ZIAE8^?SJM7xEd0e?;65mP<=v<)Y}i@oLg8|1}$RlY=H zr(jbe9E)13S~KWEpiMa}Ey(ffd;wVB|I&Xt@Os>p^1ZIjWFyS|=lUk@zx0|`{u$*F z@Z-N6@ip6B?{G0@&q5wFT^FB%Yp)eqhtw8N?YzKD8^URG^;Zg;l$NH{40YB4o&wkf zuqeYsSvVW*l%oiL=yKR2skxERKHX9sW3HE#3ev|0N?=xr&=_pG^oO*V;p(Uf(q*3@ zZBemysyA0s_?>{AG<%1{-1xREgK2_xX_PaC4uz?9bY8-;Xv{_M(C#c8VOZt9!$qi! z^Tpjf1t}h_SuyB+XcDdzvyCju(UOTA1qQFlGnu6UI<8{sQq?R%RyU%Xbo2}u%yElyR>80(sn{3UpGTqK z2wKIgBJF(T=* zlBO3H#F-w~ucje8w}E+msJ31-wvg4mwKJ5R(jVOonC*k-Pyi4vRc-x`ouHj?%Kd z>vp8d=z_nOIyn`|@i{6JJ_w>32KLBk^f$nQf7B^4(^@h!s))%}Z(jitc%u^Eb%=b6 zAHxz3_HfB^%mdA8r3I3pfBGAo;-x?7qr!KmM>dv9)({FSLLv|j&!vk{ttQeEs_>|( zs{HvlB_0M}B`x(rY|uocZ7-J3yl+19p5f6-nJDu4I0AP63$V65?+^uQL;OMvM z;*EsZ{(UCMQ=ys)jcegPI5p6tU8Qh30Iuxprm-}%g~@_-ry3ULxwQZm&bdvA zcWMy5_jdS?a!77c0DCGr@h5=5iQ4F7R1V#t2Y#Vyj8EOn z6W#zJfVMpcPE;P;c~FqxdjU8aMUhou{ZE5NV)EwVKPxZ{*o!?jhs<)=CLoMOwgBP- zG(r2QF~Ys%;DlC%xen%|f-5DF=FWqtB-Dq5vyOWw2}MPPmGr~LYJvC3w_kInhKh1| zySizQ>Lk`IX>|^hzfG7;FYfjl{bm6ep6wJd8!imo(W1ZHVfFplN3j@|rIBo!`)Pyn zx^d3#0hc_P#c{uVYEj!`B$26#gw1h|uKw~EN(!DgiLvZEY^h3HQO6U=kK6vGBr`v6 z%bQ2UHX^xvM|8jjW6(r<-_uonAYs)WdxjJ%U@Z16w)K+;p_jjKZ)MFeD&n71pMs%v zwB02;OazkJnh8UR2CSdpT4$@CbvhuZLgpVsmJs(M43ySoFcnt2;c49cb;d)1Z5I>^ zfl0Z)Uqjb_w!_99W2eo_Eg4HaVaK*KUH6T8iI}SiEeMne@x_9~KZSliX&7;;!9(&MH4y4AUC-bP8>!?B@29p7U5dx;6#LAt z|5z5ULe5Nm4o&}+9RC0dUwoZW`R&6BOY4oPni{F16jMsqGyRN9h*)QT{OGxEnoSm( z#BzhrylU$*pF5H$DB)aiyMsh+Sr;{)Fkj}Q(*_Fh$g8OvQbDZt9;sxe#BoG)>rEV0 zzR9-frYl>>PnodR1{F@*2kRAVKPvxGSir~mv!s-10SJ>oU=2whCrddGN+QzVN1<2S zB>kwNbZ}-C$Gx=SIy!jiV3%1?mzXo76QU}alEo#ik7EzbnU2d!JOf>5H@S(Sj2xr1 zXTMJB21fViZ{A&Gu4goArh~8PYg$T%EWp?31sco;r7YkS4T_Gge~8No?|!4J>|@LP zevhAS-x+|i3$xc{LKnsBm+02HBGc|$5>TDiB=a{oqkjBYj3ZTTmNg4-I9@Iqi2dV- zA&;47hS_LvG7Mg-x?lrjZaJk&nBV7?w)qp3m+8Xi7WYcz__MTS@3)M)qrUhw>9n5( zNy=ox;!N)KMasI0P7qS1eZ9JRRli+K%Lr#ohRbBhGMI-G_=sU^dLTFZeH~@opw2{O ziR>kY66=4Q-okkJ{U{vkQlE#t_Yv`Lt7b<4OcNe7w`+rz~lIKLE`WY+z_BGi$9|)J&#heycK;}Y==-0t3 zIS6Y=#)>fFF0GkNa5H3eBO|(eKL`uKF&jiY?H~oAWR4#mHCW;--tfE0cw7HM7Vc~> z?hJc42cGb+Izo1Z+Qk%uk8!f7hao^U0c#B-J%7J;vd2y6y#pczGAUng=Y#}IHr{|LpyAI zBHTieNg`A8SfTFpT&(_|Lg8rhW3{jeMUmKXPLLagU-={?gBt|mHQ zPYaWlh!y-nj_mi7ifl63mT^EoG)Vq2`;G|fiQrE81ugX2U&Y)6*^?{L+und<4f6IM6t47O&tedB|r zd%tj6CsE>xCCr|`STPZ1)Qk+z1(_Y>Z1!Y?$l{4Ka0$$WDJ0i%2t`4|9ZT-!2}sI_ z#lPSj*oK7!l#)IkBQNvk34fb7r?M5Qo*xebiCvdqvs__MTeEX7AbTm0%t4~aH-%zp zjY&^QgdBcgkE^6^B45M8!TJh;G^>&=vT*d_Kl=b%KUhgwSAu_RKYZH>=Li+gF1-`g zbb6E=CIf+$4z_tL@0%AI@Mb6|{M9U6AOB)Xd71=Df<{SMelcmUb1TtnieDTKyPgF# zUsQ>s&ZanvOt;3`X^q?4<$9&~6?9!jkKH2K~cj=EAK4{F6czPVIF z++Ys42W+l|uYexc!ctSiw`ubZiQ|LGGzo^~XnK9%iu0}4b>Dt5Zr4YTIbu7o-Vzzr z^p~P0j2I)bQ`S4Mc$)~4Sul3BEk}gmd_xhofvxzX>c5=}n*%jK%MsO=x#xs5xo`OTng>x2kXyl#tByx8-QBUlfHXUq4mNj6s{ku!AXy z8z@nv{WH2V(8%9hQc_$>^~}Xs(NW1^urT}=olYLA8g2;&4(T!jJDNad!SgI&^ZEmm zxzjS$t&hRN4Vk6}K$ar_##bA8Rr*rWyv_ouJs+rX9PRa_Sp6(?WyNwGEIrJyb*FEs z&kK8emh7YyaH7BrTW_?+)bLvi|0ui-0~OG3?X{tAoF6=bi&pT6`2)v?*8o{FR_OlD z0R(jeN*I?b%4gsn60#3O$$xC8osIbTusJ!$ujI`0CKFUeJLrXY$8yjEk;)}Cei>AY zXUd0lx#B6izcZc!W#0R5F7t!ge4lOBMw(CGx8F9VuV7YvKs}{%29o7oHUh4vCa89A zFW4hmH1aC#t$uFysh6)F3}EKRctXEE=H!$!pC9j0UPE1iPHFZQX#(kS%&IF3DP__L z0Ah#D4td-e9=Av7gE?nGz&w8obCt)>cOh4WvW^=&Ch;1w;O=3Y|9KxRCIN)+mIG%; z&F4UEI{4&2_P>KK;^UT662fP3@4pE-m7b4u&X1Q1R&ooZB9XfOQgj67F(z&=<&6CA zs{%N9P+WAB>k#Do<-2aOrk?WG15mxQ3}Uj@kDt-z_>eAijRja-u`cZuwoW=;WR?MQ2C&Nra50V25lUF3 z$jTgYdqBsBkh0{|8SP4*`c_U{sWh|<*|O_vw}^&}7u%&|N#sck4*vSOm^S*UZNsU4 z;hMDfDr)cw173dIS6Z_0c?N0N=1?L^6jVqK3~98I_4LZ=&1DmgU+I{V3{8ecTr0o) zEm+_18nbf-KI79T2WWK`_uy{ACno$oTsUZj7Wns?5VKpP;`(P3;`cBS6(Y^xSCnOC zBOIYuq`xa#zjFHVGNsZpf2*g+)2t8k|3IrJZ*^5dt60^vePqMYX8;-0J(^$yTK)N; zlkUZw+LqNvD=v?WoniscM@EE?j89n_wJ~wTI5RhI27#ul)yFPom1zf==mxU1T8+hE zTSXrkU&Q(JaV#)2;5||)eup#?DbAd9uZ}$-wNBWxlUotBZ%r2#NY2{5NyyB{h37C{ z=<%h!s1%gc&~I#u2Eud;3=H(TAv!QrG3Cvr>027-N0j}(yo*alh7H5mNhtiZ0<|7@ zr6_ej9psaC!MEL)%87;HqgQy(wj+|+q4jtMIVZJ z$+>yQv<*#B@%!Tw_jcE-(`JWj4d3&a-12{P++P+rJ^Vj&-1T_BUpd<&{B-;GNVfOq zs~t2l##Nk7Myi065B_*$xr0r9p@^~45yheTYKpz@`7+a|$8h!i$AN;4r7+CYfNw~c zQK{hu6d9_t^<#QDC#3~*qw`5>l{hCnGcgjkx!I|;@nH1BQ;mu!V~RTnrmPN$a~O|$ zVvZ@sfIynYLtSq+iUqt07SbX`Ao45tg>Jf}inN}k^hTrMHTVLlMFRvvr=j7(u=oiy zZD8j_p_OUm;@^(mb=L0-hS( zFtwIJ-$;0;M$s1p!D2Zyz=s(d%L9w1*+1#TH+eG~wdtcG|C#`f=o4GOIBLQ*jCjK? zoc}1e8l$n|J|Gcn10e6`v*i78g>V!OI=}akg^Fs#^U-nt3|7jbK#~_VmkBW+7qWzMuxU*cYy+x`2G9<%O76Yfr$^!yZ+F*r9~)0u@3Iil>< zyCY!+a-I7yhn(gTtG@(}*XfwNdXDaVeW2fnkuNCH8%-%N@V+6?DT&5FO-FMgkCH$e|2$~g; zGZfEg90waPz40sSg9#i;V?p#;7$-EPPmkQMlvh;r#R~AkYRN2)kH-Hk0M{0^(j?3- zXFUPOf*F%-(ql<9g&78Bi*bbe@A>Pt-oK162Kcu3j{zw9 zKf?p=1~Ig1Ugia#E?W+1i~s!snOP3IULclW*hiEZ1qHA$1k zW*eumZQGtqY@@Ln+jfJ-w%Ml5GxzUV|FypJYV>BGbFRJjbw1nvdb;UGr<(PgXk}@} zHXx_$k5o9m>YUUr0HP-yp*1Vp zJVXAV@N*)zU-d9TsJlsY>V82ZlnVwxB?BZd0TLi=I*oKX-5)?{2YnSi5K9b>wvft5 zV%PqUr7M-(bCq9AV{DR`u;@*lG}_e$j$X{l8{DETpEYb0OX*@$1>;}@p(vw?ydUy< z|J_}$`_%^2nPa_#QlI%5Bunh>^|;M7yu8#pq2=esHIfGRw5@2d3&V~n8!0V;k(wVR z?Kk_SKYz6+H20-Sd{6ggYX-MUJoazScQE`|o&~v71;HvSMT~Cb@mhhk^4o(Gm~paV z{E{wmNA)BC)MgLti;b@KG-J-XDR+mPO!^zne(f?`Zwe!{T<43+E}EAFnYIqxwE*Re zTpCiLAU$FRZSkF<+a5>XTEx?HYGa(I8F7t9zKl+=~D0?3G78bf5 zZz~ga0L-f6dDC+#3uCbZ0&>)^pIGUw*Z8|? z<;yg{OwKMD!|)M3C07pEr8AigJcQvxSo3z^%GHb4t)0Jy{>MB8MEq)!0Aug&FG+sa z9S8-l!whPycwBs6k`Oyso8gK2Bv(k1}*<`cm zyD{s`h3jMK^ib_1b8SYEFv-5rl^2 z*T~uSP^t*zx(9n2++(Nw6;(*8+e-POW)rg9S1YbUO$O9?qWG2_UVnahRM+`V8*5}j zqjdZ^SuI`|=bJ;h?N;M9t>Nd#_c0%F_Au$T8P8}32TG30i!v+FU z#zjGYpO2sbraz_3=94*xjF51v&v(yUaQ z_~TJ&#}be?%QZk)QdOj%96BIGCy}MUS3#nMolaN=m%KRgW*k^oJ-ZOhQ9)^-4RVLk#$!Uu^a9}v#lFZkY7H}p-626{ z=7|o;oICBQ6B~uLJ>R_^B$+|nXM(PWh?Z8C#u3oT58OXsnWB_Tav7`AORz_o%;Lvm zm5V_7wOL?oupNEpnGC0{gV~ieirv^oX59}ib(i=IkxXI-v*JTW0E> z!IonU^Q^|bHagb0&VgmY4=mET-p$FidG00!{`&@4f z>93Kx5>4oGefNK{*kgK)BQqNjb|8yF(fcu{ z^nh=c%|NTIV?K6#bMcYPYpSaxhatUqQ;D8vUXI~774sw}U1YuoG#?RRb0N`$eNe8Y z@5nphK~!sa37G$KfmU3XJ%CNa<2Bb@atLy>C@i&0Fy9=TJ2huLL&Yz%(;W;A3x=mx zD!$#Mi;QQ-sIT$72X;1QsJLfjcu_)4Z)MF+8(X{IH$3(fA}VdAfO*q%iD;zbeE)%^ z)KaD`X0SU@$9hKtl0!CW4J5K@8AOYS9kX8>Vc{cRjQ<7uYip=&SN<_yGL52z9q}R- zLY5j9*C^6{@0HM>({xtFa$Ov}P3Kf}|tq9+-dW z$9*!ipsPT^pF8Sq5d5{D)c3cAKhmWxsA-KnEmRsOGH(WwO zB~=E%lu5@0O>Z1VH&X)V9IXszh^&X8$qs5hPm0h?g8zbgJib#XYY=f143jbO6&99o zJSFv2Y6FT}h$euOZ_yI;nXILtbRpqywt{GU#KmU@&pa(S`sgTJFo5&3%^w@bZW^vl zXCrY|s~YArMB`>Pcu!ClN0Dw(3jzvSDqT&%YhjL`<5iF$Oh4w8)kJvK5;`v^OnnM5 z2{sN*fxKi{T@f^&%B9;;5ZEdb^?%OKQZa_?X9adHSdiY5RJ2V*Czbz74-2bX`mPm$f3CcJxo2# zS-Ifc699#!Q2ZObMD|u6N#Ux+u~n&owRT~_lN06GtMt99q%))e)`Mz;2ie#K`nKsz z*g}^+rkdu%-DWgG+CQ{R5AC4$t8;hviNxg{vICAeQ=4+DnpN1881E&n&(ameoE0iL zJ%?m-)4SHFiR63RWq2(7oi&w%ySzm?PqUVFbJ1~$xLr6rv*B;I+5I{no}BNt@x`%Y zL}68lJ2BMCG$eYyj%D;d(p~QKQT!(wIQjVa?CT-{{kPuD6a~MRD{dhqCiLcJ9zrsb z3h5}&H^*{=1ItpvBO8tpdY@$gF&pq0I1nv#w7$=yYhz~Fl5o>yN_4Z`9(}P|YYfp4 zjk}C^x1A(^oxI}H$x18`WJJUrp5}zn--i>0S~~4R5E2vj6*-djtCqfW|IitZkipvK z((MOh%PAqceLLA8rS4!K$elIF4pPC~<(52Grco%Q!{X*fKI#*I!Yj>uauQf^XS-z^ z9dX{S!!lfCwcsp0ATCkXF{AdmA5fWsj7da=!ZEaA#ogk=5v8TH{v&<~#XNqxo~E+B z#3&^9wUH3Xmjl2m{3k9fxw#5FGP>fikv{AuoBEAdkO9G8NXVzpf--)*#@R6^I)-vi z$@yrupHcCj(EwHnO6}X_`rq}CVSa`r)T<vgQuCeo)H2#5aBbP?QKctzzL@;g-U2Bw6xFgfonzi_7TD%QSQ zC?DEV$`dI7rsIqO(fE1d)GE0y#SI;rtS+xL=O$%Cc$%1BQWP@>GB|Y+Z(DQQVp(7q zyBzK7803|ay(K!t9#Orq<4&1zXcda{>ro0}PMfbxPf4N_d|<{-F?jj;W2?TB75v#e zafT4;_XPqE1R`fvFad<*PR9ps1%F7NZ+4ROY7-|WI{D>mBvM1y7@c^tVAV=U^tm*7 z*eBvGcLkSJh51*rz2`>hHoe!mw|h*8Na*#QUR#+6)tI2uip^>^M`eG^9nkzbaj~t6 zt|uiLS%u6QZN&Kk^yv)!fkT`#Z`v&VGx~lyYf!i?RLP4FHdsj*xX{9|6S8o(JTQ)f zALb|4D^m$o$A@}0GAIQA_GoQ%W6nh1L%@Aj-;I)UGCR$47)}MuP>ez*&lGC9vXg8G?h#%3hTbY`iOR>a`+ zO|A#yH8xxDyX@__+isGSV~o)j+`G%Yj9P42RF&;nMLbklFUi4#g%CZ~Gv1tifRm!BKY1C=A?PN;+h!=8DA3A(+97SB`xMsM` zPbut#=^03B(&+Gu9~aq4>=(6{Y{^3ZK%0>lF7Iq;w(uudCSplwMjRO!0Xt?G)%LFHd=XJZh@j0HpFtRBGjaD9! ziG_LHC*p5E_n<$2$TelUz=~v&hr&;@nQF7IYHK!s2 z{;gZKLB71@1VGy={j{}i)t5lN{SVhML~n-(Kur=jaQXQA@}C;EZqv`q%1To&D_ih3 znaozwnedk5CllaeKN|VG>78);%h^C|pH$A3RH(t-G`8oXq^{OQc z*PvX=h!!N}^sX|wA*I~crimmaR^`*lYj&-9#-Mqb>CLp`Ei-7R^iWAXqGp26zrBSu z8FHrrlI#;Mt$h9A**OAI<~ z*pfM#TdX3AGD{eYCHJ0}?J%KI900?w`Y`9;V@L*4%hK-PX$L2nr}MjIw2249bIh5T zIhOI{<}T4L57$=#sHS9v>2@K!@2N+n+WDDxgVdQE7ab=C=+d3oXpzbcQ%v*uxk(MM zn@eMC1YFE0>YrFCLCY5XE|Z+vo9u`{EaCq)zE%mUDkP6IrqpF3xNOg zax<3BrhohIr7vjB9t|pZ@6J-#DDcgKRL~hP2Yf)aT%9h~Vbw6P6>8!7Bo942A|@RO zj(@PWB|zD+A7a8M&7miLogjO7{nN#6+_Wgs@p{}BSzXEqjdxCRo{pHD;7L zUW|<$Jb@;lTvUlrAVy-99n9LePCvxhY`%D@P`e_WcO7F_QouV*&kd8!=+fI$p(~SJ zI(vq$?pvH7@hml+_@lAv=chkbwxwaFP~yL6X$&OLKS-RDYJ3R#pusx| z-=V2V7_+KDRbY90{qb7Mo;v-cee&-;GUxrO%Heb}A?PvcF!dHG;38vH#?&RtoB}*q zQ$k;?k-i!mcCfuFl$7ek6d~d3tql2*D-q;r)kCxUSu^m%;a5XTOEhGFDiMUIN)6dA z7aUtnk)uY|)J~QoQ~Bq>=B3AVh3*vEvc4($gdwpi3D|y>rxsQUTqCB~0r@=^`#eh1 zuqn5INkO&uff1pCnK?r5B{^ON{Dn4U2|wtDcfP{v|MLQfUO`teMJj3dY<&S}1PHzw zNDHPGek1+JlA;&(83gPfTXjh9gs+>`q*=j8Fb=U85Lm4jXM-mTUM9J&?5F^^9Z4~) zKF7Gehw0vqN#M>IeA?$nU^z4T=YXQ|D+={WHWgf7+;fc`09hSYPGAHMu7h$hJt zijYN+SvqN^hc2$u`gckdjc=k3$aGw(l|aCkb1f&ckJ92sXc;vb3MnIEGrrY<7wgi3 z8~@ak{@5a4qq!)J;9{25q)<2~fGRua>9OB4WBNIj8iNdo6E{0zqSqT;2Qvon)$q1X ztQ-BET|x25#F~>*Mw5L-;dmyLb`i}7$I49BEJdfi!pF6g4>#;vT*uA;lweU{_HyyE zPQyc>X?VCfTZo4D!HwJ5Y`|()d4M1*BMg`=2DR*kyRl`z7 zY;SV3s@$p^{~(DIz{YK^`!e&%kTTqy2u8FFDk5N#E& zl(s;IC5PQ3^#fG_e#-ChQZagNars-UgrFsFG1U~}c)F;%Uaou&KxGyUCw&dogm@H< z`q@sI`ds%K*8^7?j}CQPdplphjUXs;)>b3Un^(?VwJzYQ32b`U1ZK%+s6sIQ2s0N4 ztw>A@iz62bhfT7Q#b0ErPfBjH$NVkEj?n=GE^~g4hC-UhZTV;l>f%-}jEu}Dq~j5B zFV&OiG5TK=*{?UjK_ZHR-|&C+RH8)Hpx;ZchYX)$*4K68RpU`Sfb6EWxzt=nJ=PNB zC~>^}Oj}z`F$1m5XzxoTvj;HR?8e=fPDybWGSaAc%K4c+0O4jzH#)@tYy*dXN|1TW zbBsu^qdVGE@8iCu-ZJd?d8fm?SDqjIIjnquvq-ET4oirgf}rRe6R`qArpSR!#;K07 z&m&uIa23XQqx7cZ>Jc4PA$p|?ykBn+RL9piXBMl(UN?~_2ileb+y=yPbOl`MF*NNJ zHF#4r1X)rvrHg!sgKBX!+rrVajOE`R883Vc7tc(IIa1B=(9D&>VdIynw*f0 zaB%?4DxGH8p^9RyRO(`3mU*DP-Lq2U4e@9OVr6e7QS!CaEW<52eozFL%=%USxFi6Y zKOBR--0d==zfj|Rh{AfoetTUNwNTfQz|<**my4##)8zSieQX953-Tq^|lX1lXX297SAXvG3`o{6b>0RKXR)<%>SlF+xB0Iu$RsMreXtR3Y8)%K8di zY*V2|rhFbAm2=GxetQ<$$X*cCU=!MU2WrztXkpHZ1S$_~)_Q7ZS*6lE$eWCCWzT+- zBvL%v7j(TqjRroUl1Fw<{O9@IMHF43(@IQCEb(h~#D56Y_Ve%6xBr3phK?^Bd~qW) zc57Y!tAq+V?*eRFiEUdu&*zjG=B|NkB{poDD?{`q@}&f~SHng$W$0p^X6R93@5F(R z-{0C)9|{~;m2NIn)bpNS4A>iNOs)(KJ>v7I-y-PDzhzfi0Dcs{?OCNzB|bR|ST%og zHfjMG(6~@$K$S14?`E zZWib=RruSB;=r04kGd?^>R$-r8^+P|%u=BLZtMrRaEHM*^3jL@v()sLx5_)mYB0@U zdI|qperITtsz&5PX*_@D9*(f;jI!3GGo0yC5^5qo@#zC zMmm`^*)EVydu)E8D=|=eV!%?!x zn#yIYD3FyZ67w7(2ll7zalSOpdOV%kU_RA%k*xPSwxoC*iKm#@Q|{$zk;!$P750F&jB8G1;|nhlB@C9R zt`*zZuOdF~C)>hc(tT^>y-7nN8&a_RC54e@O_cwXYd$>IA?LO%?Ojn)o0jIE84W>-Gj?!NAzcukLY|Ft>l>FNG=|%*VHzy~a_W^w1ze z0s)=0U-V^@$G-o+!}HaMEQ|i+bfE;&Nh*>{lGHlMGD+omK%7gvKWm}sM9cukc)a-4 zk~r+0yyT61-1lm(8QAsEF@5Z;(2q1BO_hCU^a^E}J!NZn%nZ5ua;0xK8O0I%GYAXi zgm&~V;Tn#TU?gy*z*ZevfjkoxV4m5dM|3_jq2jjT`kchj6Vy~MO|8ujACDWbjt!vFyL%_iIErmH-PqXhn#IDY zbW75g!puBHmWtfAtV@Pu;1wAbz~A7PJf_$|B{Eh^utFvdEj&x9Q-zix&UYD ztG*lL_FtMy@=lO?T6jequSaJkH;@hEve{`F^!s=!c~#j}y8NKE{i%~O9}vX)?ZbSU z0u0Y8Rsla(hBF?JT+Z$Sn%YKMsxRqcCFd;SEgI>MpD`WS5GZPkvVt1+chmbIl%bp0 zFpd|DDI+G}=T=gdSZm+uWB>$FUqIJZ->qwFPA&^-?8_4Q(@Bm2$h}tk)ToGv>=4o; zCiz@w5>tzY?aKgAqwmEcM09fQM=I%yYLqYQQW7Jx_nrimjj}oH*J8gQ<^A)6 zcFv}h%!k=vt*am^R36QiNW@w6Ks3M?pI;e_e4*kgnt`#&B#-zS$u}3~1nu$V(68U! zE)rfergaJUXDyTAxM9!Jn_9euoT~yka?D6T-wTMx9w9m)$}KSeq#Yxkd~%FVplt#| z=wYFegvVF$XMetJBowV_m7*?Ccnq^dYLL5Zu*S@lI`OzLdAl56bHaL5ZYOIbKOKO8 zytUKQMn7;0BL{%w<~p%d7UB-D6Je{;uSzccSlRxda7MThvdYw{%9V@uo8CXpyZun^ z!g(f={IGz?F%lnt2w-KEO2k!xZPUb@@@hnz;CPf>OXeV|UL!SZtwvSBvoLB|V8ouqc{l`hVb4L6YnXF}#3%p)GQV(+_ z6r5maVg$S!a#!`cvmNq7!!1#_K5zVj%Z7Oji}GN^ z;R#@hRj>rmky-LVX-3ls@85pGE2cco8FQ%uR8m@xe&Am|LB!lzz?P#H z^NKTv(1{34f$yK?QE#o27XiO0Y-M-;t!2c1e=n<4-xU5~u6j|hyT^{GS?~%rulS86 zz)udFfruOlg-bBo=u~ah&73$$i6w>k_PKEvRmDNwcM9BSP&b=a{G_6@^4>O z@a#2ox@TOrG_F5N%9aTA7`cQst+hCEXR!6fp(?I_w2~lV0LMkuMuMfL?c-Dt5Z2c% zR8fZ{6#VI}M8|xR5GX@-tTK!Xn0*d{Zagq5zH99KO7l@8vU-cp_$L3uMwEzlmvaP3tEM98W?vPH{z@;@wbIDa)27S9N z(Sy)aIS!W^kXm`-^V86Rkfo?a3vd7t(dYapvHM8K5S6EbjEgH}9*HU^t$4CcoFn&; ziDr|vm~4nz{xG>~jfyorBfL6q8M~j;nm7bQAayx1pB&3rw2rgykg_u+W5q7~Di=YE z4@Gn|pOk?J)$1v@zuJD9Yz<_P8&N_5Z)(w2B^7n_8svAW6|Wz%tK6qWTnj}jCL~Y_ z>(OYkm>qD^Y<1g75*A2KEf^uV5RUI{Ke%;zqbr4d8KOCOC_ZDd5~s;BARf!gQuxw@ zoIbO(X($d`K?|h{78s@lqmG`EA#3Lzj89wm(#uDud`)o&nh48Z;xhb;b-Se$GDY#W z34nOR@2Fc-hVd3@!MuMDt^zZOe%60Wdb(IWNXz&(F+$lXSmf7a#1lK#Drz;tpk4;# z64(mTFq3eWydhRU+s{@Mq3nPaOc<3c|Y=sokBLHKI4AKXs92I zEQ@)+ ze>g*6|CeixFrR*xd=j>w{ZGubr;b5ViKs9HjQ!WUgG|Hb$on5QBnl4$t;EYZ0yaX7 z9Jun+ie5g|UxZ&7{O0x$+E@+l=QwAS`WfQgk>uk8ONKe<|Hmo`P)6YXB z%9vJT^5oQWjn5D!tas=9a%H^bO|m-8-{5t{UH7dmv~hJvry;y(gx(~}GVxw_s~9OI zt}2tiQqC;Wx1rs8)ny}quPF*D#J|*VT3W!S0cHg!l|#uxC$lqoJ5?UW)blXbE|?fk zevbxRwR|g&kU$(qn?Sg1u@1K1S(Ed|_{~Q|{7lGq+E+5OszJ%h?=1r$Ui33RZ*jzZ zu|BI5w&|9Ha^P(|*%?}H6mYpqLxujyM?dq4ahq#LN9y5o;t$Pwn8k$(04-i-x^3*A z6M!02nj#v(4pc=bsHBdSD_%uZEWVt+!;ZmmrSLO`Xl!>kSLR*w374a0e?zIyeiciO z*!?~Bl1L^}s8M1G?-yzW*XKCQv6n-)hu(QrSVF#{(9aArDH2eQQ*%NHuDm(Qyu=AN zzc1oOs3(uOV@DLLL#nly*BVSHkrQ%HtpupJ~I`*$e^3nJ8!?i!*s+^%}a(B$i|1G^mStysiU|o9Q z(J|&EWPgp5=St7MR8#qmB|=TmdbuzZytN?&FBoW;Eoh7_ZJ#dqb~3bG7V^xyDDb8V zuL?aryZI&-VxU5a=ofc49|rh-nD2(HNLV)N5&Iz||GdDcQfrn_p&U{sU!};oe8ETh zDG(S8fbdeE8stf!0Ye8GWDr{QFhSp|bd6y%{ED>K~tR zj5%+1DQ<+KlD>KErP%xyarEnuf!#?J z?CofmWd>^qA0ejUhX~&9>?v|HWUBk*ep5mz0`|zL+y;rpua1+6_Yz?W{Ves}p|TVK zxV2v|x@--a0<7)*Q8k~K?AIEg>{jbW#>WwnBL7N>J&9ywWae{oFyP}aX~}hf z!>^_=?Tk3`I$8=oSnydWYU3^zslvPL*tM@thNv-F5@U-3JdbOVKm^{~Ud#d~K6dm# zighA$JDX&l&L*Ykw6Vq@(k?rBcYAZBcEA(+tr2@x9{u~fjkl}4f~zxH{fylsXn5(~ z(+;+DiiE@QQHAo8xwq6ms$u7_OFJ(3wgN(N)fSd?rPq<{k$4R}>r=ehtTJUSw~iwn z4}7I>-~fqRi2W~1ENXw5pn*yI!64E4X9m_nAH8ouCgHkF@N8CAKPdEikQVg`L$Fs^ zM)IMHJRik`lRgDoQG75wMx9Apt$yWpgd-5^zi@@*ERo6^|22{`_S+8Fa|feTWzJY-HO3>J3O>m&1}FB1i@jM2mEy7z{Z!-`f~=&AfAU4RA-^u|4Eje54xgsd zi@{z=;a01)CBjyVpxx>s>;ANh-~=psA(A0S2{fl2UshbIT|zVGrzz(VaJgnok0OBWv+%3R_+q z%XPFddPME8g-d6J>-L4~wo_|KG?HIz8-39e((rOc{O~z?9j(A1a)V3eM>nE?2pG1!AhDeU`oL8PlsG z8Yl-~vS{4ADNUFN8B@;CPYy-!$Ub&5Mpq+EvT?JX&MO+N$k&1rGGwgX_)s|!t3iGC`XbU$2^KBqk{Ls-&tvql-%>o7!h(z zv7Hh4Z^B;PGAWgS?Q-WF&&kE2GO|3EA13E)$=!YH1@VaqB}PvB5MTyx9fTGS!A8Ch zHt7Dh^O_}(^}KAyL4<*+sVQ`;o}q!4hXi$O4i~kmUZ4G4MOt`;j;Q%yyMK2?P~btw zs%*grdy*%D_u(+&zZa*UE+127)<3GEcPF%6RaD>v3Z)&=cP2C7XNiUqPiDW~zON%+ z2mXl25nw&IF%V7C7hpGOxfDeh;zHr?vyc5HN-!fw*kZZpZczoj&y@@rE+7Nv)5%Uy zRW8?-Wp*Hiaxtn;$l}5I)iV`2QKl<6B64q20qaB?wIU-{$A+LXghsT_XVCs&AB0R8 zo7X5MKtBT%*M!j=V)nAtkuNuu^M}<~q9|7G^ko<}oe|7Z@rP2Pj;KryC1zEi8h-Rs ztPsBIJQd0=x9#jyw`x?p7Y9M%Xx=s1tZ0=bOfl$HYLgut@qee2?K0D`CuZkG78Lt7 z7&B6A8=MzsywXU&Reov#T4Z3-P#0_SXOE>PHvhO`Czj#K*q@U7S9Gj=ewF+4m`Odf zOkh85UuKc0^C1805N}!OymZVHuW{$b=(HSyCXGXU8d+L#iJp$(P<9?f>-W2M1*5RQ zKni$})6{k0jWkG@8qXO;hh#8!1;Ukm;r|p^DaiT$2oRmP-7+zEg zWBY?iIO{G*1<$yk_7;TAPn-EBjg>1impjgw1=_9JQLR^?*+#Jf_rVr&L33$hz#X<@ z<})xNQ(l<#Rjt}u^XEVe6ayH6&TB3IHLAIy4earO(%W^q z`FG14I;TyI7H{mobfvri@v^mnovvq~<2I-FQePVX?HFXc?q4l;@oz+Yf%YbfUy@Cs zo!>t+u{HiYlOfN}7aDS|5ESUz82%|Bko2WjFw$<7_jXDkZzR8!#RTN8@WfZ1L9*0X zSt(FxoT%JduJkF(KAozG3TE?5CEg?gPdER!VT~^F2zb@s+5*+F9-N{Zqj)%M-Cj%7 zj@|Y|`sZx%X(EgsC;}xh<`s%K_9C}IVn$;jQI?#di=TTI@eynkA6;V*68T%UX37?r zch~$u)_L?GQCrSoG{qbEe1<=$yXGhA%z{4?TGg0*_Je1%d9OD&F*~B4P_5GA+UFT3 z>oPRg+)zYEC^;;tX=ikOpRlxz$@tdt2sJ0U@olYP(j74ID$##+5Fmv1nODV zG%1Y~e&+n8dl@9feKTdvl2_fhAGRvOx;6**G5nshyv{TBFd~-3Yk~`da#dlbCVYWW zJ6~@9O8HyqlMO*EOy~t{2U*Q{K#%XS8SJUfz3Tm+OCXAITk{SO#X5i-`MD@qp)6FR zDqf>8+O!JL3@x08zER7+k;hLw1D`!ZFMNf*DPrBaVcjNj+VU&Jlp>1)*d49xH{WR$ z2kKDKW|~Z-<222LhdyZz`r|;TQ)Dt_@l)Da?q5a%UY-(W+2mel_%z}=PLvZ#n8pAF z?fQ;}J9rIeqh-l=)P`pmUw(kJytrbtkpKqp`T3+}B_R^xY?t4ZRSw`R`z@)5k=!x~ z7R8}Qin9@uPXu8pW#Z5~l#gLF2BpRiy=Yaw{g#2j`9CiJuX(cfQn#qW{s72ZjyA88 zuBP7I%hFhH)dC|j6_u8F49fhY4zO&;M=JIXjZP*UZrJ6y*EGcrY198#{eAQ!1$tw8 z?F0z?tkDfq=upb>3VlsM;UKwHh}AUy;#1gW^>{|^Xb%V`TT*_1T|t4V_{YJA_VJd5 z^!_ufS;rC2!}daH#AD$Xa`oDBqqcH~yguB|&a+fbH(f(}q254$+>c8R=GWVw(%sIz zpBt^S1}OfLR3^lG91&bs8^L(}T~<$x`zrwac;{F>_?Iz;OMJ?Hn^t^~y^hx%v_viD zd;|^g1gO2$-7KAVB&3N13yC%OV0}FQ)MR{OG8E@5zNDqN)q2fq>U+#c_Ssl z#6Dm1a_P9M{WGWiZPx>kckZk)o zAgJ$kpD^&P&j6qAb=o`F%&j&=pPzj%AP3*&A<|;GI&ak@s6tk_y=i+e$*?E5BXZBK zK5>6aR_5;8H=>calgZQI`|mMdhPkw;E0X0VR$iAe@Q#MOio(4SHR4ls3~kXnNcREB(TmHhrofef?k(pV|=rLcX{@2!@#cCd*Mc> zI}mb@Vy)Se4!~8B9&1=w5j&>(^=|nLS%o!q8DU`gOoX8%;|!BT(WdBHEo@3`^vc(T z2$wglO*dsCF|Zy)2hap&Ox?xdgAdaIq+T-FU+B9v0MpgL5D4N+U z`}X}phWem5_?sCGpQ#5O(e9)mj6xaq=-3!17gxx{1X6rLf*C}o;Naj?YB5)St=?I& za%|Pp(bXM*m;{fHj~f~qg5TcWuIu4g+1QJ>&csvyUdK403ecC|IP4!_6?kRH4OUeN z%gBtTzDX}Q4J^^$DHv<+T&f!w8I5-EScTD2%B>BTCiPJ?ZW%x$6gBZlb{LEFK20a7QzovigZH`8pp+j3`3n1_fK_x(HS?CzOusBPRo#`AU zI>z?d9b^_?Y`O0-R>>6cAqTZ2mq9mf&W>p!M@uq>`e}U3yG`Rz&k-3?-%-cjc$&ZK z&Bm|!DLp1U2dioNF(+tEz+m8s%3I2#aZRN$L;Aqiy?-1pH#=}3qrLis?6?0b?wp>y zhJAX4+4TJ704a56W)fCNPe**6%obCF&1SuY6oiZO*UOWegg)mr%h2t0Hw~rTx6@}qJu2&Lmf#!d*r%>N z(jUrCUiEFte0KwEaj&YXs`Tr_ph2hjd2j}lEQ&=$h&2&gLMXIjuRoD~1^d4TtFh__ zI-s|G_;gScnnprnlN%F3Fi7JA&7os_Da$*kf|>1ona}MN@@s2djuw=k?3(r=e;n8D zaey6o`5pP+<*neq0xNnK$1>V@xGYC~*fqf>G1SOiLAOtZTLpE8Nc6Q3T-F{XbmwPb}CHg zd#+OO#G!5q6w1o)LXY5J4olZVe*&P!pCem&M777=*u}XO7BMcN#IMaEzZ|>JRt>$# z#QxnSVdS*`cYB8Y_;pmEH$*ZDy=cYO#M2XPWLUh#p_osV+aime$X!(^EJcb$5pI6k z8iiuVqv+UgU*thlU`Nx3` zDOFk!Zo;5%U+!P;kEk5{J(?qQ$MyE`Ah#(S1ODxE5_85iW)Igo_5L9Ln#7&lFN^H(~XWb2^4Eh!9mVj za0XoKze%uV*vSN&0=pBQ4ivplBI({sL{I*wWibkJhwmcpzXO9|8!Z1hbQ6Qo;7K1M z0pZUc4|Jk&P!g_jCy!yQvn+?O2GqO}Xu?b8cwDt+^ORgDu=BS33-;*fK&Q4}YEIs1 z03B@UK@BDzzOHCu&sYkc`~(;{mO_nMQ%_I$Uu{lf)6>&*NusQ{$b=LWW3R7*{~h(p zIs7IT7I0%p6#uJCcXSBxcCPaN{xXcfOHq=o`x6sQKmH08lBr16ejS2zFaP|rFDWVU z9uwIPi6Zw!M0r5znfHW>+09nMk${Fn=QnhL^E7NjfqW+5+9UC;LkRe9?Lf!K=vskj zMMtG#-TtZi5+SDY$_x!L=bKL4ddYD6C$w)Q{_^op_sjh+uAa2U0@)3*X*7*;Jo90h z;<}_1MM^I1>8~Q~f{x*xvZ(IsIvE-r$=(bx35g_c;x0heH%)I+#^G^`=lbC6O+@f# zC_I%sBnrVtLM)_-Lr5--R-saWt`Q8mm4TMi(YB^eXcT&LwP4Nbd^%4Be4Ll8T(MWV)(Y4N^)Lk=`~w>2 znIG;uKJU*j1;fXBc9f_vQ<>=Kn;-Xty*{R;H#Z#)-(&s@8)#u;iDsYa^tNls@1u4q znn9kHNh5+H$vX{!NDyfqP;e7>GWEJ2XBNJu*@%N0#GO3ocKr|_3D~mog`~4{S0Yhi z6v80^7usq)!)WI4u%z$vNbl3v51B*`V;A=1KcNV75YAIcnKB>JFaA-vM4|3C)-cw( zmAuh$eziT2{lT^mhJ63O6=z>yW7_gQD)7@ zsTg$99r)Mxa-$XH$X4j}Dco|2Z4-`a-TX=`vTHHb$I=r1PuJ1E-vo%xFl)+ zuu8L3dCs<$os#en7rro~U+nIRVmZtaghq%%0<3}p^@qEhI~|+kxyBY-L{wW;vFCbH z{-Zu0fbIO&7~*-K8q?|b;11j!aO-D_JAc4bp1@T7+V`+=V!lbJ31H+KVA_(@zH>GV zB?zwW`mn97&lk0fnW#N!Zx5lPmslasq8>5Dg2XL`=p*KTQeCDbWRL5=X8DESb^8Ij z|8sKz!~#EbI&ST3U~$Na`LT8wk*$`v3yQJh9G}QtFw=}o?z7LV{BajD69-Wl)!?7< zz<^F{0{)6J>Do5=g0yS^^>M*sfo!s2-1z^a=^DH1Y?ttk-PpEmr%_|uw(SOut;TND z*tTsqwr!oAcdhdS_Lsfpxo76m_Q{99wHWXA~pztpwW5Bsol%ny*_c zaSZ)@oMe4!={RI!UB%vdj7>~Lg(H7^hTGM!c~IAoSL1p5kc})uC`5b8<~r0yq3-uX zLt{LbdDnd(f&d6QEeLP6I=OFMm{T$>QT;OS*V(0L;l29a)VhB7vv#((s{NGB@8iW; zgLTnQWGRE)*!C?FcWPVzp9jY7KGy4D=}2PQACi*DW$h%$?#nu~_DZ2LNF}>l0As<@5+gTWC7>GDLM2UMXQJ9|-Rqyr9Is2EPHu|}609bobC^=rVN>?H!#IvRkw6%9>U?_KO4b;1%nLE1T| zowv@#7tbqteN$};A7Y6?C83W`Euh}r%4kc+hw+M4bG!)YCyAkf*mpSClDo~FBMDB> zq7CI6`_S4=3PIi$XY9niR1>tnhrhWAnz-pjb=;BF(`*|qWO6p1_!XRz@kCSyY=aJ zGR08JtG*7>*{wH60iQl6WL7+cb4i%X!TH(}8w3^3ScIO3G)TKvn-)ZohK1dhI@5oj zqgbnD1ZP0mNj7t=F*fSFiNe$5-<-ZK?@el-yL4_Dl}^rRmx|S%uleHh__uONY&~e0 zMQ$k!T0L`wxQBEZfTc)f*pNbtO-WpSc(%KqS+DZF2vfa$I^GAY)ti>U^_TI-k$io|C5uy_FfM%&YCzoVFZc-i2SPQsez-_s{E; zzIi8tR$)>mbkk<)`iZNu{fi)Z1H`}dgX88ELIms78El%ty9NZo<~)w$!s7q2wN=rWrh%uxk6YIwXH7hk{K zP8BRzhU>5t`D#d{RbM2nk`b_UHfoZtUGg5Gv|uIrqh*uH!zyzPbO)>B;bF1ANOUu- zR2{KGUJ^4L411IPRVrBe9ZnrOaNN$VD<5V_$Lh{92!X2wX)(+qL{+OPGX4jZmqx*_ z?lEfxx?DHQj5a!WfoID{F4L;r}3r`TtS6^;QcBYa3A}6C%rE_+?SXCGs1A< z1KmK~c_N`#H?&o`9Gax>iZ0~tGc=MyoI(f8y>a6hHSmRKKXg$4dN(4SXX;{GD7MW) zUif;#GwPR!-pws95PbJT0`J^*_A^#1;1piqc37*wd-4`baBF zRp4=^t7sa{XFlq@CwB{Y42M_n@SQ}L(?k}gQ?qH%05+Q} zVLsQO*Dnz6bTw7gHZf~B0KLK z|Nc0#bmwQm--bl=Z=PBy6w2a*`B~V3DvUJ4PCY%^W?TnUY1ynbA_VsujFt`zhyl-$ zRK2L0?c;N$Tgs_x5Bqj>N>>*20t>4#MOUnaMFm8 z_MbUsZ3lQqAr`fb`G2E)oGu=P6mq;OoU^G;Q8oxO0eIZu87@WxNCsz#maxRar?06L z3sL5|I@1^V3nY1=NU?qhXeGUfPSIQn+*aCy4*4fOV&Iy2LlP9x|5CootI=d2W8i6X zZ}383?0RGQDn(REIe6UmuT`mY&T$AI*#6osg>9Ws7Ocnzw-qrWzw5>gY_np44Tv%3 zCd?b8!RZJ=29#}jp1av3^9$m_mrKa!@Snl!y9rM zbCLR^GZ7XhlJyJ9@hsDJE3}Ee-LhmCcsPyHeSEiIX}mz=%>Q=D;|0gLC7O)QzNgQU zoE;rMm_1oJcHHrFko@h%TMm&Ae?OXUG0N?Vanlona77?gI3Vjie0vWDRhk4`q|Ea= zB|AYtryE?I$Kgg#yl+{08)R#i5{{jFEPZJ->*3!*SCtyga)&o35a@++(;JE*7`Pdg zYI2Oi6!y25&v%4=IC_0kn}DeL>TvAt6n&PQ=?LyiX|x=A0q1K? zkMvy*?(INZgvU-er5ZmO=(>KVL^sj?kLgRgZ*f9?c<=P@MX0Yjy3#QZ+XF5)QVvKP zsGEkdQ3|X}+fmND-@-9s7<~uP!VyC$ZDz{D)nWO1LeJ*nXD&o4%4)RnhVVz)*uV>N zh}GyEWT6~vSF`*Vg!Y?`hR{f8JY&^eg|Via$#%F_`Zcb4clh&_N^{k!wlCT)aHK%~ zQ;5qA>AJ56ui1CuH;ibhUy9ZHMap^$Oa!@eI2D;;sxYPhpkS;IyB6o-T^)=8nfufS zvS+)+e-j`sRrXq_rKZAt58_emdiwmQjpD>r~3 zC62(0sW4dPX0FZ(#xrjVQW&4qbF$e2ur`D8D9u=^q{sbQu3d3vT>&i-~5j8 z%^l}nlDPu5NN5e0n%CBh5Zo{YlFAuZ`duE=AwTXbiXHAT)5We5nSFk=C*%gb9M)riWwO<2q?%CM|EZtiiRDFO^; zUBQfL+h@Lpyod8O$3BEhp&A8}Skjnv5kNM?6lO@$>k6;E}$}Fv!y}#Tqx4GMIejs1OI3G@K=T-Suz?oeEAZE`7p<90W zT{`X=wtr%u$NTah5I`~nWKSBP4<~WlnvNtxWj9j}O8Um3BR8jw_|zT?VxK9mp9g>- z{mB7&;{c&BLa+$;pLfp2A6(ib5`d2*R%$=MzS^qi*dIcQr$++8fy@6z6>z^*(0y8# zF{+E;c=cT%52az`AS^8@AQ5F80d+SqwS39(^}K1f5?E#&UiJaTSYS_(gupw9gXc|~ zF+jk|;Cz)G1OdUNNK}yQ_2<&af@U#!IS3MKXi0V$Pf<0%1v5gcAzHSfN3Q7$`WY}I zezBg}IUKRVz!eMPVHRWi9hi^S!eKQH13f~byUd+B(cbMLiP13ZQJzT3N3t*;{z2Gj z=I?r3X!i|)Pxhuer0p`9*=NrLom01QcImOpbQk5JQoEkLDcP|A1#di>NY_J+u zxIFlMK!U5L7MR0Dz$M)ezs$7K3vAW!dO)U4xwtIvnZr+=+kUk{3?o6xM8)nF;oA4k&(CXjhR|R{F4yi$(a}xr zYRmIStCitznn%bsE_aCL_V4iIBr9gQL4^V@B>`zKe(#4nS9!Q#&_}F;gsXT_K+SG@f+2&ceB2=Zl*KXhtWo zBD9A!VDg=9zs#4U-IJkH2`q`1!(0y;+$&HKhqGISm}KKC6Sx1+9A@QXn_96Tx2 zgz+Sp1Oxo%lvYKEGNt?u@X*5$FzXzcQP5~O#|hkyf4KegJj`l--0-e(o4`SfB*$^+ z7mF+2%6;4R*SQ_Wla#?cF8#9tdj^Ubdg!&FSoO{A!F|MCVk=a&9I=4F>kvP^IuYWqoB&|J7|NfYxCg9f`Fs3XsR7zO)@?%tj zdQ<)T2Z0arY7HN#GG;ZWc^a)z;j1z1a=>SGGKx@w!2^W)JEPOp11lEv0wOAj2aBG2F}BHJZh!2HH?B;zLAcYiPqW&_wBriZZ?mUY;}P@3 z4K9`1vi@c8%7wgy=Y8-PYMPpFR9E#Vz55voWQ#f~&6aJ@0aPhtDK=hyU+*381b0no zaenswd2YLl<;#dd)MKesOH>xGyV3b-LkdQ-O%o7uo3?9Gq)ApNRbg0Z_^MUEd$;ka ziQU2!y%6soD2Y2k#>^oY(`W9HC2B*w9tUaWOx)bz71~V?t{XtlD{o~B2310$OwKs{mmnOCG^0(e=azvM z$S&vURc&v0Uk+rsZ-j4toNp3v0Kqu}4?s8J$2Q^D@+<@daF&-nQeGqw1P|@z<}<0& zrF`?Fj8gxAaw(sI%nUncZX9S8*t@$5@O5Az0wJfIer?WH4(j&slpBk6w59o~s(W7N2nFD$WZTVj74mEvHe2fJthBp_>o zi>CXfcV-E05&HBAaR{vX_rn@YDC+R)dj%ITouX;Fr zm%h%hLkD9TRyeDc@oVok5bkfs+b}ZfYftu7S$&&po*+PIGoWH_v&$1%u*3P=&npvz zD^Todl2mu`ZU(uX*Ly!E7F`nqVo-!ie~zjVFg@$B{hN%z=gtMI?cte%rvuW>?$H~m zT%t(Bd{U3HE3>2xUZU;MG{f72iRD(;Q=t`DU_4N?I2e!$8mKWIa=6)(q@$;wnO|0@ z2Bn}Ja$I>Cb9fFxNX^U?Emgru)iDBgi?2y`#re=-`(F#uSfVSfHtRCd`i^sotQ~%S zdzH`swE!V%ZP7ynKk*8cU@|ytPvF3@aB=%KI+lzrf!vvV4kRuZ5Of0W`B1o=c4xRm zmK+%#XEj4tqqJ4f0ZNPC3n+WN;a%1TK1o=qRd~@(8>%~F#E?MZ93zUO;wQkHosS0! z+%*#=cIC>65jhD>;4v>X z5R+Y!6#ro&x&kNd25FP}*g)91G5C4a0^8~205<)4b?qHSo>znof#g%8_(Xx`g z;byDpnPyv*HSi;|LZ?dn?FQ}M?vwYcEhnS<{`6&xb5mfh`?XT1TiJZ{$b&fdbx=u| zMbCJY*}fkrXA@|*B}f*?$o>K3@Tae56pn(M0;m)C0^sMMqvP@Jw!h(JF>XJ0Dh?6y ztBUl&fxs&&M_^&r&(j%|?ms0SQe1bJ6+8`jPi_@8a}#v1nmG?Nl}D zq<#pYL=}&)!|Yp%JUj#Xe(h4diG++QcR&43=~0nuRcEh zKvnxK{6>wRClOJ%=)iUS`R!8~kRLkM2`0H}ooFU6Qr(+hzZ9`w?8~I>Ul1cJgivTWj)@9q7mgN>mWg&Meq)z9J{T z5eh^B`@SmzWS+OxVL1kQg~-`*BdK4GOJrJ2AYf=Mb{ zPiS<2CIB$YkFNW>Ij*-}xJ+Xlilr6aEcW)EI~HwHkra6rLc3s8ug*WR9e#K6~j&H)7SA{-xDYLv|~m!$!aDSshR zQ~&MbJD4$=D1neEZU(-4UOBPIu`;n#$YrS{4(}4(=V~$GaA|{TD8OV_50GdeU1Cau z0Jn}%U`zd$(apKd%m(5U6vKPjj*7^41pr3P>XL03J#edRW?&f93`K?+FJ6T#upbrQ zSeRWQNSJ^E6sq8VfBbZ*%>2_>n@kNIM8-~PIg2;bGrwXpMI{`wKFVJUn`v7ilI_ED z8=SiJUB@Ji{X25h2qbD{@napSpZkzbpTpJZ+*8Br;ZSF1h!$7M0)ZXs(YZrKq3l~JwD|fp_R)R|YYBgAs7kNfqoqQbFwY;?OCyGgibJBH zo5|3z=6Z|n*(OUH|Af}zh@!#KLw`rf(!^)4+0G3D2$ebdpBln^egt5@J#RDD^8|Y! zrnO2TyL?|;(H-K^>t52Y*!lT>gTv?fm!pe zAgqIF+#-3WmmlG)y#NM8r>fd-U^`zHs&joIsN+t*q{}o+j3Lj&UD!*j`|hz`uZX@k^p}E~C#z=xAD6?f zd;H8rf_Ip1V*TiyBs@p@F0*y8jrRZuo=w>Mq2Au!`sS>iozYdE7GZP;0Bu)>hm%>p z86OR6w(WPb(oc)5Q{{o?^(m%PAv1boTYw>1R;BcTk>L9TGH#3qxw{rv4W_wW!OM}W z8Wl*i3~km`2$S=pk2G9K3+|X$&4!bB1GIByKgyMETc6>QS%>qN&Kn|9$(ikfJ)__X9 z5g^|MtmBLJ+et$(F5q+jK#=qKc6gmO9p}KHu`G72W;@u&ZR6BW1lCdkLAznSsDF<;k&P zC5WadRF*4FRw$c~LyqC#4;H&w;`9T>)CV%yU2dB^J`Wjl9y=}&wC5y`qJbyoGxP*T zn7fPfM_7983InX>v~0G2rk3Bc57i=`-hun&{j-FQruFtv<3#8|06%8tHsBFUU!*od zYR2()Pz=ca6Y}ma`@sD4^8lTYdptCo$gb(@if3*)cuhZW_;zN|7_df=J(z<}FyvG` z-DgaR!8j<+kD`5$YK?aFlTQu!<;dsq=Pr3jcZ9p!YecY+F!)6Ibq@7P8RtWJcVxoV z&}q#Yf&X=EM`g#$W(UZnyHOdKYwp0x(h0UYe?v{~X`jPXgMGT|n|rEajFr3|X&I9n zsJw)A?7gF)Om5eY9I4jVt!Z1m z-`F#qHb~FUdq6FKEC4XX&jA>Mw%Y?m*k7ZrFGktkj?u0l6zw~}!cD^MIm;JJs)cl)mn_@d`+506g@?@nl$%P*D#MFMYEeI6grePxhQU|c{; zmYdCHfNTE$lB*2v=nmfca!*Paon>{IB|c?nZ-!uvu?K|B^NUrC}S_ zF}TbE0vns@M=`()fIBrq1bw5UQth9U4RSKt5y(zEF%mF}Gh+fW0X-pZ;33+Aa4qRq zkg_cqNPMz8fprbSP~3)sXNx{MKe)^xcoHO`UdW`xr5Fw4D?#3(WG?0~dE zFE{Jx&pKxBRJkt7(IS|@1PYX@_=dx z;a)+Z((WWa{SpSBMN~?2w#A(n>JhrW`qLju3+H;=Lvef=B4s%JJzQD!4e_z+Kh`Yy zGpBl!LXBcG$}H_Afe+l8LtY&$ zILRL}fWBq%npZbgnI8OBbcw!M?ot*i;=V0N#_%&c6`pcA6ckkMsR_@I^sAQ&IQq36 zOD39q&v*7@9dnsewsl;fN=A*72fqjd;)7%1WtXQw`+M;4*5gbFfs&#w@96;iY4*W0 zgQGRoF=l{`!(WL`d9epZTwfMdq#qjzN+^68m&ELf+)}X@%;I`HxG=oU$hje0-VBKw z22cV1G+7GU>FflsMOsj!dkKefRMcFnfKcxFC?n_dbb!8(!XiYp)9J5h5HGG40Vq#6 zL@ZtFk#lao+$}7iMfyaB51kuTGqzSQ!>>am=?a-VO$LPy zqg#My1!p!lb4ENVB?E!n!q(lfvIGxuaJIZGoU+1kn02FaoR?!wOw*>o^30%lwRo7p zdTRqPZ~#X6l8r=ho`z!E-$W9McmoYv#Z9N#0~wexBHFQ`%_CQ1-1{_=^Flpu)sVf9 zxKydz*XjFO-Q0{+(ZGg=;uaYyDLG;v3VjfOz3<~R3)AlX;3Wi5#_F+1z4)hGG=_2| zGk4pKqd>bkFRgnv)Q`lbI&W0I>;j;~8H#p$*kt;d;6T4pMVpCxK4pW4V0I4+f@T!1 zSNQ?)Qx_C&5rLfNve`5E84WDFGC--+8kNnIj6^iFwI$VKm)85o{4GkbM)B%-8X2rg z8T+0Sx6gf<{s55GQ^W051#D5CKAos{MWpEaedVt``v_QAlUYRerxlcl<46|C4!F>* z{)z@-#Pr0WywSMCRHN8}AQNu$PqhDfZ6`m4<=!yhOcU7HgHXwF(2|ghqkl+L5-thd z>$Xz-#X~NM;kj&rFU(6UgmSsx44Wd(Fs`J2>e9#W$xt8568n9VT_9sv5c(sYK{5ST zE0#Wt1v@JhQDB*~C!f0$;C5moBI&$O*2n8KaQ~!t$4UwOpOVRfr|!Ro#_%j_Z`xLj z^uV9af243ptN{bIB`6f@i{wQJ5hnjUWf%^w>=D&#rqO6HWH3w812s8hp)VsPQep!E zTx=Vmm{Y1=W_EvubgfS{mX=_}a*-|uax?#w6OdaI&urZ6{Kmx#06-fuAv+|an@ZL} zvhMLR7Q8Q^87OR_W?(8#gdwx*PHm^{2BnrCQW^I15NFFmPM3~3_pT9eta0=GYz&-J zUXcJ9_1v1%KD4zGcf46dy)G|l!o{Z0fNu;@j}Z#%#>;no7g0h?k|O_#;zAU7A`-Z+ zi8Y=I@@8VGg(PVizW=x9Ad~jHS}^?QgJxxcP)ijdP(CS=7Z*J-x3@AhMj*bI#@HLQ@sl8-c7Dmz&1aM1u&uYRk zr6r0CS^X+DbJ{lM+FHps9ImKwrRn;F_yxp3BiX-XQzV^LvVP)ZKUzslRXewZkR+8{ zz=lQK0}Z)7WOzEv@?ggOjFf*>Cvy}g<6S&wtZcX{^_*&yIAVIaBdD+p+-?YoKb4A2 zlgd>GE0~9QdlN;0n$*>^tuxlS_0TVf3|{C%hGny)V6azrdBm-G6%d(+Vi#sB2Oj?f zCzKXRf!YxFjdrcUo|?|-D>}=y2{=-lN4~~y^=_# zooz|`DJ(f@ECq1R!bHDqX%fIj!;2J=g zqDIOWoDS66K;cHP=1ZT}xV1$W05!hLHO6TH=$u|aW#!gH(?);8bq!IhB(9;WP_4Nn z#A=7Oc`8gPn*dReUubAUGpwzDh}hl(r-;4z&Sc6 zn5O^|$@{Gq$nzB3n(owtBvOR^v^uH_btHdzeNig}lmWWs7ai}86u+h{Dm2&TGl}fh*#TvE4$7rOV2Mg~GsTS{UC# z6{L`(B7Hy0Ds?e<;`=gcW+K|Js6%L3S7iG&+XWhYj1 zh{Nc46Bc$!$^k7*BqTS#*@}tgg0q%%tF>(o*Ac(Gb1sIQmYE$h->PI)P%1FE2~(G7 zvyrJOoKjcsfjgv03*guOOaD*BRufHQ9+Ww{ImNvv+x7nOx85MpI?=SM4)ZH9UAGgr z3QaP3#1k-_5V(dx0s~7n ziP~Nb#fcZf{hN{8UY+`k@-O&leL5^06j#m>e-cJ30Q!4S{@qk^8aIMBNp_7e)eDteYE{4Z zV^O87vY@9!3H`8uYGPemBy|vf#7AVEPhexeZBIiLw_GoudQcJh5RRb|%EChxpSwh5 zRE5IB!Rt)c9Z>Zy@){ai{ooJ_44)~|AtNrEO0p%_pI8uEY9QyBNSQ(CZ9KyH3bl6muzdn?M|?wFvl*>PHqHYq)XCi%uQ0B0~LJ})r8=5Sl6qg~Q z5dB22K!5maKhT(&8O5`ex-X;`{umwyOdHlgrP-Q{=jZRKePF9DI!tZ31ERws9g6O+ zB~+-&N?u*|9BfEY)+Hjqrk0(^EyP)BRGup@F~y|FyZDJ8L3i)Q0; zt%8ieT483FezM1dX1#Q~ZUkA6ULukHbtTzEnIrSIoU#+rPbyc+isiKX^vv8F2p>YD(rIZde5;zu0?CFvgb-{W?;#ihwlB8rT zyc%SoblA8b4Xx?_^tWK^T(vTWmXEfbPzxVJ*bI#2liJE;R_@?I`wh69 z_H(Mx`bZ_IPJa^=PQ@wnmlgZU###Hh^A@nHrhqx~eVeN`5%oL>sxw$G}z za$y;bm1m#J&?#ehexNQY^#8prAH8etj2qI|J^I1F?X=8W!RRYc=v{KQFPuRuJ3ovx z+YRd5Wn)IQ#xgfrev>a&7_n?thClQ& zi=ca1Ct#V`=T?YWYn2){sR(rkucg+cZmP+Ni&>KdzrdZ*jK6pvM0t`i5qhEaVy^h1 zq6X;M%LI`6!q7mp$q$CbGkG#ECbVF>SMhh?pXdVOPCg;lbHQU5(v!<|G_myt5g7C*WBWT2I4 zfnb-t*?AK-0|+ss^i5wWG|_|dHnimhc_0mV(OEN;VrQnO^^{e$uR61I$F98*^18tT z6+>Vs`tHzTwMAFNb@V}>-`Ia<(lg?Sl}2d1Q~%qOysTv~J@h1wQ=_((oRIF_M|4<+ ztBRFBl`{N9qMcpN<)wN4V#@T-tSy0IlV{6;|ca$L2DchW7KT3l5?4|(#3fQq#$ z-_0=T(*b8!%PLhTVodJ|`S1gm_X8b)-;*Iw_#0KOyOt*PY{9(`&9ewMqgI8MQe0#0 zw_2T$mPDJ-#}2!pEO>PO3mliB(bW=qe{%^DVuXHf10$j;S)xDyo+hEhrPb zzz4rPu-1|oeP*Y^cBH$%Hd(o~0;sRR0a?BwRXDPV2_N8#kxRl8rT^Xr<&O)gAy|f# zkD$#KHGQZa0db|`&al`HcjYdxe&yUWvC|XHX*aCSK=o1PU3_gVh^L!?=HV{&A_Mba zqtk6`jl-|om#8fEwvy)e$p?e!WD{a|#NAd;n^9%%QGl5q=*$Yy9414Pklb`P>`wCT zP0W$_cs&{7?L*R*`D8`?y>NNZr)*1!>sLp9P)>ZYqtpRoXu?ID9ib}WHUST8Nmdnk zu;_spKJ2|iOLU$SNAHXC+`#0ojk%>{_@rNH=qDLI=asm&wZ+oS@5dt~ZZT}$i~y$y zSupz5Vlty*f1E1k^>J$3Qf`q`<)Gd_3x8=9-vP$D&(K_yJCfyM;OXV z?8EI{dU!=)=fjR`Z|zcXanbcE&_Xtq%`aUlN9$2SGnvU9NA$g9AvJaroIm(vX4 zRkS}2xEXh-1N`?T;zF)m5_<}pT=}8{9=eN_Sm2g;%;?H&eDM9TGm45I)x|Pq3%IYG(Jt zMC?2`Um)kkdvb#Kow!#^bRs31pRI;1PYa7FlzlU_IivZiSD&|C!lA_qZS{;n;CkNY z{55bs0psaoXIu-0_dOI9hj`Q{ja(fmYK#f_24bh%uUI{|4M!AlNW}qxwXA<(879$Z zq^9TQ*#$1JD|SzGdS={OQk7yn6z?takzA)_1=*~+NA7toOl_}K`;ENDS75L*Snc%q`JCW^B)N=T+o4I=UK8S|{w z82At2yEt(R??G#k4*HU&C*6=Su*PDYzzpXwP!;=dG?qQdI<6%&wpAf&FeQ0?VoesK zsGAk?R;IV4kZ`fz6Ixe$xjXV?PqCpqlh6LkO@C{q7m#4P$t_jEDykO&48ixlIVhS@?f>(-Z2E@D&o-kcz`t(VAdf5eB_giW(NtT(nK-M>U z`}sc!h>6$e?9#W{6Z<2fU@Ht|OUFoU-(e6xPGgMzbt{G%4}M-8Bw zjY}Os@l}gvNBdjp#vu;?6`S48|0{jIGesAZcc6*WsrK+lk%FmW&F=I0x;fN`C>W*x zd9SZ;i?i8htO^>peSKCpwPUUSit~4Yh9)^;;9d-wI5W?d`X(99ainb6CC`N z|7!ufjd1j`#&!{7RjGM1(*;a#30+nA*P3L0Kr0@O<_s{ejbo?j&5syLSXy}T1xFe< zrweA6x_lI7Nthit4Dcxole<(}4F+e&%irL9UtGcB<2R>{;=(MuJN1)-q4}LjP=Ct+ zC+7Kp$;JxSy;1}MAf83r1KTyiTVNNX&MiB!$t#yQ{dZaF#qr2ZsUal*tw!9R8S(GM z8-zERZ3X%?3cU}9{o}79-V$sx0J0clXxKkxrvzn89Sm#Ef{lrtJJ{KL%IFi9A~c8!KhWN3A;FVkgm-0(IH4CEow(7C!ceGX$kQ zV?mNU5`h^-o$(3D1ltd)$uJ-_+!p}}eO%qWu!CY)CIzF5^5E@&6R#v=hE_pWD-#o? zF-|YSko*A)EY8k{hN|rq^Bi4UysvfY!}0ya^=!Qjv#zcVxaEKU2_g8CWHedaf{pu^ zxP&PuYq!e}Lr?i=`F=J9HcI15CSe71)O$WT^F0CrfWK@c)`fMOJi|$b>v`(w417-a z4@d6G1K~kLH3{knJ#;`u(-!UjZvSFZO2I<&`udubo=~09B3BjF0 zt3A?(p(6~lg)l>XArk=#Y*8b7ePsD2NDb3T7P8u((u#lddI1E&y2|xXvUsug6p{vr_W`RSKAgDP)(ZTNyw5 zz<`B#c{ZY>X38y`bQGvYS$Kd8q2rPz>i8y^ur<6*3Y-dU4yN{Zc1Sk-UWqF8yC${S zh;w?MXtBe*93~?8o7u=0gJD}PpqhLS7yXU@ATH&8&)5 zFw0n_X6?F_=CKc{cSbnUj3dqCu?+_Ze9Yf4Z&{QTqOiex+yf!Gtokq%L1Ftz*mncK zSvNtkkVk%g50}rp$kmO8cvB|8;J)NeAR!o&{7x6L!BXx&jKwfYe@Q*J?855Zlll1+gL7%OCjTO$tzq(ut{}Pha%GikMjG zH>|@%giL+TYL>{ndN;z&|I3{fAyFk#Q)!%D3$~~VD~m{U zz$nC>NKku1_wT2V4-%%Cx3_pBBInh}1RSwVan*R>1>Mk!RPkljvQ&m)WNScSTZ|d)B$r8 zSCxS|T5{=m(JgWzo08&AB9|*YI`u10_4--5_jR>|b?%f~*b!IE;H!27^aqyHqY4A%y&#Br z+iup_#usbZ)W#2Q^*-fMN~cN66f$d{o|{G1$og?Z+%@RLs8TS|V1vhd zN__-kKcpa9bOg%H?PSqGkHhZwe0gLl4Y7c>DbI8oRApf*Pl~KPl7e|-;uULmunWo& zhPbppPTM|QUcW6~K)S;GGY!B~Kk&m-#f}vyhlP!asBGswH7F;ixnhhV5#Nn?H|GtO z-Z$z6F5QS~PtgmNN@tNmPfcOs^S0fudEg2CwtXtG97tlpiE{|iYw6XmyE&e{(-`AG zBnNzu7qrm7Dh)_A$1gxSp#z?_2)-`ye2JN@DnbH!V2O8Bz-bOGoa!XuxG+hM52Vsb z(M1Ou2T#=<4&9n_`c-JPZ4R`%XTp_=9Q_O4ZGFtfKwlzFMulH;nHshrHwHiwkYQRH z+Dz3XR*7sB4u)hW-}N<3gf>Q_63VzU>xl7&qh!(I1!yvii{cB~wQ6M|GH@06;L`*G z(+TGy2jnUOFZd&HHeGgQN`HaMu-$mv7$BSzg!~!cyNYy|H?B_Q%HkKjil2Z3F8aG6 zX5pYeJ!=Rh>m@{r|DFW3<81g4!E#}@}vFT`nd{-KX9yUQKlO-Y@gKH4k@*`O?f{0NI zwX=yr2Z~G%*aS7KNJGhF%1JQQ%rl`uGiD*-1hQ&HhE$+5=2@iZB+xW$Mpz6`17Xz1 zrCPRUb8M7_V?1+l=QawzQHI_!j@(s;{4AwTrc%!+auvQc3Xm>^ndJZ}GA{zETEfTE zdwY7m&s&Ln1N|kMiwBQ~p;(`IwoI3Ry64nlF)e9mVKaV;?DF_=GiI80B5ke9kTW(e z$}EX8HWT;skBw{nRuBg$*!AkUfrHGydB(fwFvkS?z>CHaXrv2KE?Qm*{`uU>9^8V1 zkqh(TjoYq2TW~RQl5~WM$M52V%aV%+yDL~`Ml6HHmDNK(5snm1iK8o-wH>h>#!-Y& zfgNY>mks5UG*>6dI<{nA4f~+R{ZcQJ-y5UhBv;m^Bo%WhmsBMiC63j;5ZwnPDPPWGmR_K1oqiFI z9l9$n)JA8Yf+`fu*iozxw6^R9ew_r1eDt5`iRo`>p|zgDjr!@@7F(x@Ya=PMkWQ&P zrYh0yc=1vC=2Qyj&G(CAsVQdXwUCS_MECK8n#%k*WuN`Vm2CLsLChPEi#>oDF85l$ zYU|xtz=4F8)mrnMhRN`ZC%aADD%C;B~e};3$+#|-5glyiR zf(;b5Rkc(&atSP4e{epjxeS@tpL#t!21TMSAI*mn#Zi;vlh4wqs8+|Dm}`OJycrp~ z^yI_)@VQ7g29BWNCDXO(i*s8d;e`+1z1hc100y0Dx0O@i5oRbL&|sxx=^qf>Sm%f+ zVjMSQOt&KSbyZxjk^H-*MV$U93}|ykg9eFJH8s{i>(}tXohVbQAHLX$8%~VSt6EA) z8Ek#}#5jXILyAaeT+<72xh77wHKBgd*z7NCJ~Xdsl>j5+Hnd>1GBIk@oqam$bFH%$ zxcQsv&4f=WfEM?yt|Ap$^=(X6^ZCPC+*pMS%=*$&DAeOw&(V<=3pLwA>Z4ksozP~Q zc)Gh-GZfkDZQ2zIIp<$o=tuZw7*7P(WJ-$Y(-_}_)zDDOyO!WNgIRad{7U6J{m~*N zBNZ1(nI39R*rt22!ALnH6k{Bsz7B<5Z&v*9%Ea4p2SOEmgTlXZJn1arqDecIP&I2>rJ4^zTYY(k+Ox4Op z;D3r-6#lU-kM8Mcha1=s6XFnShYoAdlnZvG0^A~O8=!x<&Iy9ws=DbQo-al0Rj#p~ z?z9f)^hX(N13)A)&rBIsBO~Eb^;4(L=t4t7ZS~ec;1DF3i{I~_ts1n_(vcakVR6DP zE~#g#M%ct!Z;t67)WO;ukBMo~VADVV6J~QY(mHRR?f2A(_uRVSHzxtmNR!(K8Fsz+ z?*FzCpwywkmpfkl$~9SK?i0D+XtB|(MY9kuX_a4fixOm0m3NPsuoQD3|7aHORF}H` zkEXK@s_Ol^IE{37NvCuwozmUi-6;(U(x7yAcXxMp_ocg~;XQoc`OWx;<1o&>!#U5h z_u6ZJ)(VtF#AHaJX?^HYTne9F2)>zYg~#LMA_`W&$sc;V%wAv@~xV+G;|;tZNg|b3K4j_@;DUw zadV|=C=}uJ@V5d?Y!qVx1#)QOr2(qghb#U6=a;Z204s6|{jT#P{_!Sx(r9^Jd{LQo zJnWeXhYH>t7wgMf2ln;8OqwNQ#b1$ABTUY}{c6Y`m7V5-23c34eQIxE6T>!%zYA z+SfUP*Z2F)V#9{ylk0()?}CG#bDxO}Z8-#8?k7Z;rG#-KObL3;Q+sVG(T_wJfGTE1CgS+qSQO}X~bPAVjuLexLs z8;{Jt!C;oqP+=n^X^jO#*BfR9O?Uj-Fb=pc`n&ZNMawG#?;x%CC>i7np86LwNsdO^VfOU`)v zMr{iY?c{VbKmE?a)xUsfnsanoc;-d`KvR-m&H;3sQ?U)>5#}FrnQyGIk$H64$!K~b z5s{RCMf~ywYUcuh1w7R*=Dyn0d+t#Uil zS_3eIxP-X3?Cz49>Mw*(!}ZH`Q+)6zWC3|0h$Yb7kNP?_g7&>gaN~_rzwk4JdtC9s z0o3^9mwsZ5-6b!7hcXuvwM_)mw z>07Z@X+J!^GlqQ$Oo+{qvLQFAp=ZX(PTe-R*15E&oONQ|mD{7{ja7bo?eI@rDy%j> z)h<<2EN7Gi2X?&cRx~Ogz(^u?rX@)FPbxd3wCZ67<|!I57FDR}MVGIb${k4QP0~bg zTP8nqDC3NR?&{3)sUUYDNW7HkF*m>IcIPh(7c3U)D7@s#N9<(W-A&Bt5Y>!*&o4|z zHwH<_EUP9gFU`Bc{lQ_#t;TeY-w&G=RRxuc>OQp~=~5auIG3D6EkSn>?;rTH8T4n+ zN;HODrwV;;P@|vG&r%cAY{%T3CPqs+6o8Gsj=l!Z+#+QPW4mWjj z+fy7&kRNuf({~zcS1%;g?L7nEe&B5foxs{cZwcnKzlqpJN zO}|R!B;%naNKqmpBX&8!#!m7Ckd~WEearv8J5oW_4+)iTg!U8iXEF;Iuu9%8!pk?@ z&9b2ey?I$3!GD+>iNnvz8W`=nn+wc5{qEs!b&!EJ3gf)<-50Pr&ALlu!0Qp4wHLYt zK#2c9F>?bELap6j`)5-#O~i$+V4?4D!*O;@S-6@@l~>6}Pt`JUrbqeEc&L#f7dZ8@ zIV#4a(>69;1}Vr`^j&cg4n!3GRQDI3B;^&(Pm>ZV@UmMcUn%@ObzRpO_wDt>T!48(&-{SxVl*BHs%(y%=!&M6Kcyz=M zUbO2XJkDzpeFJJel6#r01g%vGz0hPCH0gB$V&S1~m2tx86lMD~JLK}RZ%P>&VSgc8 zMgK$yA%Y#{w814ChPoe3V&C6S>(jQJI{gqCN5?jy9M_J~uxJ6FW*dOkNTDnj$3h&2 zIQBuAiM)vhVl1*HvJSH&!<)?O0<^8aoGxp0ZfDL)`TM!og#}UI1gwuafnj}9`4l5k zC8j!qP?qwzTV0veWbT62yO)R1D~SL$Jrpa%fg5L;m)l@2SXIB!b4I@W9c*7a5Ewjp zMa^KST-cTEsvOXSXm(=cP(UgrhMouTIf_Xc{CH?GgSeHEbG5DTM_>yY(@@A<{wl9W zm31gY->0cEJg||c48K{rs}6Kw;fIqn4G!L<(ay@yiBahOA}P+6Fc#)kT?Gv0=%fRG zP&ja?*R`^71wFciz7vpT4`Xj4(ni(_5B;>&dlUxm7j`r7^tgUM$nfPw5yX}G-u z7zJbaQ{7frK}Ia1d5)**%rnZ6F+ng$Wj$!2N{3&!#1m$3kB%&V=Rl9JxLOv3V#lh7 z{wiWMQ_a7yt^XPVti@!jm9|sg?E|EtD(3^a-SB>9W<>~Qp~ovrikg0Gt+>n{fu1Ac z+&&r%mO_t(LFvg0f>S)HMtH|L)Ya(RZE>rGLQJOOIfGe)uPKnB+9%5|lL2Yq>WTvF zN~~cri;(!Z9+%DEOoO{cS~o7Q!Fu0_w!T2gRO4U~K93i?b{G3;W~l|@rEs_<+SY#(r;brd1VJB72_VDbJB^2dzRp!Nqo9M!Nzs~P>bTGr}cb8KK%sfs7 zizPAIBOdRY{2am4Qls+<6`}cS3Id>;Sf87gdov$1=3HIRY5&?hf^2yBn!Mz<_-LI$ zYP%HbcQDRGmZ|R7pJDjw=!ukG5Z(ElZojI?+-;?jkJ(3yq)jzqZc|W!XY| z43c$aAi1tpH^7OT*rW&v#y|7I7=7^}7{&D`MEABFBrM6dN!vCj;30%lLLnj8Ra)yK zO9}kj&ZavA|D9o<{I@BZ`N7~%G}j=?o_ZrB232cLF~zKmPsma6ijza1F5m84*P1K9 zjh#Ys?bzt7p?PaF4}HUhQh~R}+hrC)3hzflhi@}VB!xMKXCce1f{YX*%m!**G1PUK zn8x&5KEWqo+0z8`|y7o!k~z3 zP!^l9+j)Ap8}r8Cv{~}+P%7?a#srb$mHy!qVqYN$%2rFz3N`ZZps6kJ1g1i4Y_%Q3 zs3|nH(a>^+GZhC=XZ{gx$wdFF_`Lunc8HRU4%lak1TQpPa>pSyLVuFF*R-*08%hfU z`7s49{C4gJfB47IPtI6NuA5`;fqMKh1LM@WqmWdeD}1{sgilcMczcJ*EF8f9d3_cO zs?sA-5y%^6buc5!0p+kM$+H+Q^w*%dp5(5V#*IrkMOl2|7zjXW0B{fc2L~UWxs04# z1!oH2pL+)E;=qO^kZzo%RSpeFAolAVE^S+Uhz=_XCmUKO$Z2>ykK#+1Fs7o;=YZ*D zcI#OjDymJ@5%)+O=kDcVvJ8Huei^>i!JH&mU(Znp-{%|kt1H=XnmyaE2Z0m62&I>| zIY#Ww$)VV;DMhG960sK++;k4?wUr0`-0s;k98OdslO>g^`ig0ar(YB;N4=OTbm4f&nbHJZzvy3f^!?N zXDWMJjq;vrB}Oia(1Ullw+QX`UoOnlF{i*bIGe#Xf|Ns4XixrYAFJNk!P8rG@kmvnYQT@n23T3H+n= zdHa<37KmC5VwEd#GFPn>lx&{SZ5++luwnt!s282a?{BXjx6=}e~6sh zp|*8-5x$IH#!;(qC908iNJ42lk1AFEg%}h{)IQN1HxJf1#e)W!MH4f(NGaD2#|iWYg$ybw13S*Rp_$=gZhT^HFFYR6B8|U_()KFmcy=zaB7aw zZ9VUAam`J?6D3;-I%@kNZ1fWqPVx&r1)2?=wRktwmo9UL&Cg2%w5o!6uM#%C=sy}P zvZlS73x*wSQdz;i(=`0`3&MFv8_G^2rR%I3iF(jN2p8(D<=ud1Fk-sK8a_Qx==Wd(U@ z%ut2tS*ik~P_A}$m>X>bJjSI+2XtVU|JA&Tg#6yP^T%1WNoZC|^UH&=8*Hp9a0RA+ za=B^(OkpRy`Yod_TGltpp@9%j98-mu0}o$;MDlBJ3*Xk%=W!knM3Hm zf=mIWAKg}you%b(U>L#0=hI;KOBM@4)tXxgxG)~E@}&W4&M#Yy{9ai4@5|B;7jE)f zZ%B9NYd;hdX^A<@>ZX)arr-wq(U?=@JYN`T1qdy z(J}@H-+SYQ+8Rq-3WYT`d*zUpC3HJL|+9FzP;G^QG7!uD^Q-F1-^>l zXrD0g8KNAC(C^Owc>#_RvZ>tcHTwQekh_vL##l#HN)-q99Ee3k-{Rq*p+uvxog9&? z*46x3G`=xF=&UnGZ&c9+Lud0;BI)l_s%G}PC=-zO;}R;5+w$|YfcO?%d-cPDy31Wo zmAN+QB8Rti%btbKy7CWT0&fWT*CF_RFa^mnoW`~@>eNi>hp8CZL>>ZhPN@(^PSCqW zq;z!h0TgE8=1w~LAtx&roQm$!v4+}IZ*%00gN@C?$rfF(FQ+cw7Xl+Dx5 z;WtwaEy!zeeH~Q?;2#ybt*qfQshOFBOY53{ z@bazB1JnOg3>ue;& zeMx!zO@)wOj3ZzCPl+^^rKOC1>^vdNTzwwp6z0PkZ#Ncaa7geRBe3dixT7$YB}><%%-LDWmwjn#M_bZP zvc+m872tY>@I8=DylT~Ni|F(@Ky)iFHI{7_3uY6qWEH^8@j>c`!mrP4l3^n89h_yR;P(;OSgh#hCU$MXZ%3~nET^vbm+2EglKV;r zO*v@9*%}e?I&1Pr1xL05yC=@>0IBNM`3>X^&7?mT3{DBbTW5&|&}`JJt$iS&IgcY` zjFjDiY66lWcoYFiudmY26H$MKKXLiSY%CavGjn;;u)*2CI%2@QttWi9+12mV;iz5|gZUgzzwz)m#Y zx zt6ya1;#%BkA=7BIBl;-Nt?G}5|A~Sfmk1r7~ROypNw^}tUd zPF~YYvKrB#n+;X&%z(K36bL8=3^2BvzOl5(P?^kM{$z@0o_fMxF_}i%977+!~uKdV&|JH@9XVsY2*PsanQW%L@N~ z&UE^jqLbvJQup5b(TSHmL7+?aEEAMRye);Y|9c zgVQJdF;QE)T<0mIHde?A%I4C0m27wr6}WdzH+C2Jwp)w*JW=LRNT5w3BH&}@fPW#q zUleS;_1S1Q1b;tDXM0%t;+))(ns{*iP|NmOMD5T;&NX_z3~qr`BZ+~@&8I8K23}Kz zx!&9m;P;fwa@wjh5Kzs^IEKYipEPKrJZ13*N}S=R=Fpdx4Q!p%$=vCJKrti_Q@Udn z-OJw+u#OiNd~61LKuh{Ul8N8j2z(OY>X2DLFnEiUmZv^hzzGO zfm&Q#?Yb$X=VnoCz+ITKu%@vY&r4ow@Dk(-A`sqy{84_)PBEhU1TT8h44uyF64yP~ zCB^3M)9`q7a?*R);<{AjNN%^%h8GVAar-1-W@cv0Y2mr|U4XF~ND&B=%6hnCw_8TPT#zRVonqoo`^*f_0YkDuWJJTJ%E+~-%re<;G1haCrE|hw#;>3>s_S4;TvNr@uBA^Di0DfuspIZxc5zdP z=J3N4jU!q9-2TT;M#P)k?7#eOs~vYYDH*4|l`rk1Ri-TtX!?5!pH?`?V#3D>il;tN z@uKTP-tnx`LqXUO*nv9z4A4J1gXhYGtCu7AjSjT|Z}P?LDTHg_wv)e{Du4#8Xb4Sy zuVmu%XJh!n2E(Z5lane{?^YyGJeA+&7cr#vQ5ESF<}^;zVNVVp{^q_Jz$`K?Hp?|4 zb6n*UIZIm$ky+55p!nT70xFT;lR7y!pDIYH4-Y-x+92m+OmwNt#k4irIBs^WbKu<7 zo{MBdkn!Ja>K;(H)N$y5w^Ec|v1lJmHld)6$3WMQAhYEMIG{~N>*l&5CdSGn)BLWC zznWVWv7quLD||VZh-|vG2@|?dHi4o<8x*8Pqh@<@bWtf){op|R8HcqE{iSNtV94q0 zBoPr2!NtWDELIV&*3d!w$*tNCyem^hi@BvHCqQ5~{sY!Zq3FkwAV5^$U{mg~stcvNf$kvk z%i&7VG9$%?@u0Y`8Q9aVcy_y6b10$%^!94McLI$heMD=E()EGi*g}8<=KutY+}*AL ztKBxuKM?jW(gy>6!cNPrWV2vjVfd-~M)xDZ{o3FN9h3Aa(?db4R3xsav(XPeqh65t znPFSuZak~Q!6tuTVIRCix*vn^kMYPBXF{$zrCK9^z!CpbelO%Sjpg^BnX0&)qVV;U zvBGC1lR+0)Lbz_xM-Z0xpC@_M(+CvE!1kmfV55BdC6l?Z-eIXWf zT_lvdoVBn4PZVJJX}=~!uFqm2AC}K*m)f)6D%J|s8Se}?_i83l)ZEh5SnIE*#Yn?` zch#dB=E5L)6ikfx6*vi1`!t0D%jz#ZM73ZEV3o<@$Yfz!w3>=w$be3SeKnU&I>za2 zVt|ij6e1h>LV$@cj;51DzqNFSzOYf3L~FpRFh{ZqWe=$2Mo}4|25nZi1DGz#V6%4+ zzFwR7YxNb=SC&KjxHNR<+WLb&CnsQ34z~Q!SN((qCqL@YyA?iGI0BI%%VoNW_$$T_ zt_YZ-4ZN#S&jjYU!?;%pruDomdX|$^Y-XsAQm_ts-C|@VlO^#m96w}9Bm&O1%9E(% zWITXF?F*NO8l1;Rb1H*D*eeDUIpF{iA>{dDGd+2uqp}hOaQ9L-*sX_!<1m3n;^~u8 zQ$=c*MQ7w2nn3h#t+;SYyEvJ z(D|K}C@8#D1Rrp<$F`5SE5CQ&2z>%-k(GRof_1x{tyNeSZsw3L+FsH)LkBk>K9DI3 zPKVo}Ka{ASnOEAx9G@6N88Qb*878Q~Bx<@gEy_7)gGJGtj;%$HJb~q;iAd1|`#N7UO1e_1S1ZkW*+iazdFTIuLUiBv@*wNiZ)I6^xPn=OX z5=-QQlq0lQp^ILL<8ymvn~x5WqL+T{oPoprylMdJ3-zn%FPUqVdn{W0_w1%@ACxF3Aw|ZvZ!ieu zP#(AChJ<)bD=lL90{Paq#Tdt&jt-n2=F0CAN8sMPB4AmAPi!VlY}_!YXYot?g;dfH ziIwHu0*`YXWheT{&mUD@ixh$2jczl{>>c614vt^1>Z5TdU+mJW_y$LfJQugE4SJg? zur$6xJ})5@qPyhEl04-Czx=i4S^(O2tEZc@`$Qty-u1cC=k>JN8J9>m^GBR6fDX28 zTo3-BmI9hN!2c^ZLpaNe{CIV;LjW2j@x{gb z3k~LV(@8~Z)sLHfne%l3{q<8iktslZU`rbEL#yxVhNQWVuQu!r&d4JN;D6uT&-;Lg zE4fU5qD!_1{*8^cILji%T^2rlP?#7;vLMQx92ga@PDH^BvA+Tp`U>-yWajnDbO^uME1y^RFtDtQ3>UD`<+RH0H-Z?ybOg9gr}Z^pi3JP&ob>CAh-=KO)!PKbDyGWEY=7ZP<2l@%VciN{7|G*@Y_P@9*?;m#$> z_dtgQSF*Flx7=U5kqO?CGK%`8{468IQ0hRE}@NmEcAC7rM9_Br)ryWft4fj=TdP*25s1_?N)7Q^ntQ#tHLEPDxN+@v! zYUgnl^5I>NWS|cO>zAry0q^^sPWLvSjelIObBTgvz?sZ?^GkL~s*W0`N)EDbMcygy zx3=`Ky52ALE&;sXB_N=yD144hs)Pt$iAwPr|k@grgE?|_-3P%gcvSh+BUA`~x^mP0zi=-Wa8 zNeCu9&qvhVH@DNnMW-jy7M#2clwm?S{KOmwZqwR zYjMqyo)eS13if@>g3}8|Jiv5*nh3WlCE75Hu!NBoE9e>%_`6)hN}5G%y|hsp1W*v@ zBEMTkFq6RuQXiF`5a>7r^lbATaj5-nXwncQp=azsmJNt7#f>8~GeEvpC#49gD9qA1 z7qP7hqt5VvnB==(vl98Z%DsRX*$)B}3me;UlvMuURhGx&@=`YfKr*Dd-VdxhPso8!yPq{Ux>z5&@;-Marv+Qn zb^&}Yy&rd~GP1I!t>*0#uFC*Z`fC4;Yubi0QZ<>MT9FN%Dn0C+Ll6ph%DMoY{d_Gi z@T8>ytV8=w9|yQ5@U-mGQj)LZ8$fQE-ex08cz8QoK3zOK|MhgVfr*JNY*zwmV{(mL zKhJ4xEdM-O4^1li|>^}Ysw5pc?rjjwh zr*sgwVeJS%`mc_wNPA$GNS4Xu@((@#fiFpq#IM=ETYsytodUdE*2TQ0MSniZjwQSHYwTTO$ z^3uI~=O@ijd$zilk_qPH>@M5JI`>y_so*U8RXn8_xSb zrw*nsb-EtSLPja|==|~NJf6N|y@TTa+#{uK5Asxe*}b}aGkiIJ*U&EI?adLzQlFFBwRy$p0#i_ph>kYi?C_CRHq4GgPx>XT3*-JC1}bC<=!KN^FSGc;HuXbW>*mnZ6sp_VN>D&II1WmZ+!&+= z*`XEu53t=5*y)OcHCp;kQ9G? zUH*&|w|6Y!5fhojb3~C&{@Qa968r<5jHUjYfKJ&L^#r=98-lhH?jGD3N@H1TB1kTy z=4x(d>r8IZM0O6MI$D(n%@L=FtIDV0u1OSC-D@UyGrdFA>#ZI6W{VEV4b$u(|b?P`4p5JLMAY#S<>``IF<& z6^n@l?ex=!#SoL}gkAZ|ZL0_U?X1F&?c(2YuH{gp$iivfOnwW=ghpK0lW{xLNBF(` zR6Om}()-KW1}i}iuGgtEP}yFEEI}p3nDiYYaJOAVM@5O3GLS17k!KJhEtM9O*~uHo zrrdvD7s{p}Q}n&o*-S44(j1&!^>VCQ=!MCzgV^uK8^EQsqVBp1CG)*|&Ru$5U^Yul zs6PwpKE9N_+iPL+_c8>dSq&``J4I`_l=gbA3BlxNDM}r&%6) zqO=BEtk4c$Z*@2S8v~%%LSF6L0zyM2Z#E?h3q?=Nj*!^kqDcfoW2xnH=8wN9aV3r# z?hHhF7~De+9b9i=O=J*JDy%7w08W{gU)r9M;09m4Ru~Y(MtRc9T0l#%*nc#cEG(xq zd>HM@g$CC&RK~yPmzf!P@?ShRFo_$`iaD^9#ti)2%?D|DHlabIFsOK!Wo2?^6XZx( zluSe0eIsyc-S1mdxhrj#6pfdV!#0&e@~&HVugHDGDJq2h^u;B{8bfg6__*(1@$xT26JXT6HWbpVx@) zJ@rA8cy?@&c7-?3Iq9q8%$@usag9n>jBLBRMCm4$-y9=qVhO&V%JXvh0`|7i$OR(l ztU?B~(%xMV>?nyrHm%3A7M$@7G#!GC@po`k^EDby*@Osz(p**7sZC0F{s0zXyvDLg zxo+?bH>jS_qqiOyOc|fKJ?&n_R!XZ-c7_dz%!3kzk7+k@lqt!kgDZcuJrRj0+wk&% z;RWIq21(_-@eSE5HUcH>ugJI*^w=qr%@E>rnw`XsT5vy)y0GM@)>f!Vb|}9~Ii$|( z7nrm(2FMghKDq^K3#l)2pAq21QV!r^Hq_Qcx%Nal`1A%Uc{_1dYm=Epf6uFRWGQ2Ce{xU)`%BT?*9Wx$s6uTII7~*K zW-uk8^hxs^`uH28rg2@_YApUu&Ub}E>f)mwTIvuklmIdttD{@_Gz7=hhY6dC%od% z0T{R{46@c2Yhg74Eqd=VrVCl{!?_B1$rfMDj$$*mErrDJ;qRh>d7RKBf#m$((A@tC zDl_EWb)Ln7t`o-HDNQY*P{{Alw(w)}k|g67xQyzFd@2mCar|)`^e7RsCZ zjCb2}D#fcYzqsf_v6t#lM_1D6!opne+~64wLWmCSrQDNI2`C5sy!PifX3Rd%+bSE+ z>F;$U3DR5t8`wv9h{b?x@{x551uK!B_LCTtMsE9isH72>lzah|1*KS)oMi6*Rm(t2 zBbOeZE%n*@{_t7{yz_AcpAeUR=Yo$pVEiY&fEvGma@XP}J}|jMGP0@`jD;n+NGgz8 za$PtFq^-tkYgRs8u>!T&b7|-arO7E!pEv9=%x9F+h-qouTuOICR5L&+7uxjVEDNfd)_2r`wpq5YTdw6I%6SDHsuqYdD z{7$(d(A!Z&lQ`0J(V+`Ou-Hx(_>G%k0FH^lpm3Zosy~f5;+F`H-nqawPqtFWVUP)V zfu*isAQ9sZ5yED(g9zc~=0h*lk~CuZbLvV@Ec32-)u{G!!^1YW8;xW)3I)QMrUb>| zC;LsBX+ch~hgekC?yHyOq4=?DXb#N0APPZ@MPiy75v1U-fufI5*fY^g|D}7f7d*A0 zqMS7tDaXGO5I51^QJX2r(uknRf}cxpUcdLL;Q-bv<40 zDoVuQ2b3(N6~LaJo)md(H}3xD1po{cALw)h{RaqQ@5}CaGgmCIp|}4Sw4et^pg-Jz zC!a1-$TlPAc;0#tu%p-liFWU5Miz}oMP)}I!KBDAQ)Z7T<`<#MQ95+8t;8%js(6cH zcNW?G6_mwhLx%2(Z-&U=;SBjeuvSBI0Oktbjw)MXZEIOf=P=>(c0m5s@#)G{z8F%h)f=%kaK#gF4hFZTH4C8NHe5cwH)du$`%0 z{kBg0J{Dr}TuN6_V-z@_3^HQAHLtWL?bQzbL0rTRdsw_sxmwVG^Sghe{TK!mC7|!J zdds6jo8j}kY}r6Zlay^wX^`Nj@H4Hu2ts%6pjQfG5}8CggXv%*3&M+;n%nZQsrD>x z&}=mW8Z3%k@?fIdn2~jPsFI%I80qX}yA7n&EJlVCx6Kz1a1Rreko74$1ikjPX!n8V zOW5Dm4?*d(4=?36!1z5kZZZCqaJ0cQg9q&G@!ss-r*T8m84MPbDPHvBQ3z zJ>1r6PKRc(aMFtUlNl{hG;%&ct*m5JriMQY$?q@4_rFlFv9a7fPwW*s&4G`PKkBs4 zwnWfe20HF)+}W5>eAo(+$BapouVxi%Jb?WUZufISAm6;oc9rwvX^xkIe)N9h>r?}z z0f2`9NDR!t{}UmeyZlOcwSSHddU%nVLv6Du4i7`Bnp7~;oySnu@GP_~rjY#P0l{%PBKh^v9-l-K z1K7r-M>KM6Rz@;)$*vPG4dTGfI)2mXdR%R7eU2g#hyo6Kz)`OO4OSzN;dRc#dpDX)uG}JAPo7Th) zp_3;g|NVWOU(x|r--q|ub0X2}So&?eC~ZN-GeaVYxeWRy9l2H+aczQN24Mg=nv5#$ zA?h;}yz>~;FN*9HAhZYtGB-4&TM~Uomh~!%$U?!kVhAp9&edIlK)a%FA1KAvg$2d2 ztSDYqy`IcWVlWCEJj|;%Dm2MyP7(3_f!niwg70CmLw1g9Y2aKRWJTL8sHiwX4M4@9!JT-{ zBuhDUC$nYGM@rB>OTXcp6%^=s(M@yFFt4H#wyE{3E{b2hw=E2qH;nDnHjeEqXkh@b z0NkTV-*jo0qZ^$J`mIwHG@!idbq6-Id<#rs@k19;Te%F~L$A9S`L{n-!nlg@cG$+oiw=7us$*jlV4*F=rA77wb6Ec_ zYb+>pS+ZZXjWdV|HL^zh29x*!D7nY;6zNClq}^!O518`-+ZsS^?j%F=6*vZv>A<+5 zcW#bCE{!{YUcHjcvQbx=&P1hKHtf&mJ|sn*YHd0Y5EI$mV7u!1rc)ADUCnapWlWM1 zSs*!}#2`FpI6o>_Y#2j+sW_F$q~D)v-yX_`a^Bt5B`ANe3~ZQ2^WLIj<6t}79cvW9 z1^sJQKq(oe3;8D&DJ$%I+K!^qDV4||oGz{#&kN6 zZIJCV?f6}zfF8PNSfa$@DW@wwQI_Ql}ivPv%D8RF{C2qh3t7i)K2teo zc`2Bn+u+6P#)YAs9Wuc}<@@`xSEI)GumU~9w9^65XFZA zTO-UWa1qoP++aq}`S6}ZF|VDCIvRz#Loqu~EX*(PA$g+6<`!b8m~&Eb4Qe`^QDk3h zQ&+Z)+~QjpcwTG8Pu| z*UBFwad~C=*2mHEHP(&ppw72W{!i)Ziq?1pJW~e9-DSgL4+GZJ0TpI9WI9y*K1zcy zR7iPvv9{7Sv&^<|3OndT#}641?SB)JwGY{9+b`Z~{jPg_U#R__rCv^d{=RP~$$Z`S zZToQ;)fz{&OM}W>o@OTrE;K3bPxF*qYnrneb+Pc-lY4@?VAtJ=y2Ja*#rtkP_NtM% zgQ)Yio8U^Cqy_K&oV*caPSQq1!tHa5a~?_02y%w^?dn(AobhT4a!ECzQ>{4$G5&>Ls^T;dI!3VfM!+jBwHz(6-G6IKZPl(tX z&np1ku1!Cds%878yUcR!T^|=rLPEkF4|5RX74Tnh1H8izHZc(R0U8)jb=-NnYjS)Q z*J*eA0?=Hr)hqQr79|F!ouW%M%RwuQo9SurKGK1bn0MTd8YYRu8uvf1B=4N?Hria- zI_}Et`vK$(CW^p|!v{j}!yh{!g2IOhDDy4$EibD+nLr;FzNqiVr`PPk!r1=ispI>4 z$IaWu=5k00Ye~zCCp!Q+{GHy_$eh~u?ZB7+EnWX1Xlb?ez2+X6jb6o9dhao^Wk)F6 z(4{BU;VW2`>e^{|ykzLVb&po_cyapfslQG5{KTS`&xp`}+tZKoyQ_TT*7JHr4-rU7 z6;md;mbOtYc@6|4mA4#sM&-3LkIDo)%{O`d;zrvwe&cb5>C-1ip<5?M$w!9 z=QW5=lIM+>M=|22iG?h-IO5-n0t9jYVta|lP>T{06880nhcAQyhQuM-fVTu}=&%(ckJ+lt+3M^)B#;E=$96JFTy zPw*x2{mmN4x$1N`W$L(W_eomthZMSZ;ta4|-Up*4Y^$+!?fT=9)cNRgwtoB;e-jb3 zJjfO82HMp7il^^$XOi|>o6F6eT)o_ifs#J)kow%X)2%Gwp1QLh@eR%K)q#4WsTyO` z??zOor2_-_rlDNG$u=(%(2yL$7h&~=#-n1*oWr`@3uMtSMVt5hqVdcLycw@2aP0E?;Oqie!<~QAa)cYr&oWG# zOQGtO7Xv3;?mPS0pr>rm%2|4oV^Nb2g}~?)QFS4`0AjRPdGxPZq4H1R%#umxY!DHN zQZowb(9DNPbnD9qf6##QIbzc9?WX#;ML43hepJtO^tFQkdhwzq6pA-$F?Z+rnkIT+ z*&E2;;r=?p{j~+dJ?gwKy*D>>q#q_=;ss+J$Dn%H6L#eJ}6 zruhf?hYm47kE0)oqvt^icsTK3QFu|KeGf$(FSj7CwjfakfN|Y`?{SxZ3zg?%+TeS$ z@2h9q)c}Fx-gUgko}}B#nP>!l5{_7_~H1KK1RVBy;rs&$11)?9@F&!}AZzwA z)2Cvk%rNeyHCc?VSh;Xh-dZdE7GV5jRX=viVmiRM7ufa}+c4#@4vr}iift>h0+*<{ z;`inF;(1Hn#m3Gh=#mDctnc-?V(s=myqN-ilVRku4`u=i>`i{Z;^N_8NIe=;)sXwV z*VxgVfkK&%6B?TO$BU^qO3E za8SntYlqeZBe2=h9y)3GOAw}vY^1u}MD$Hw0WYh`??1EJ>*r2&6U*jks<%$>Qg^T1 zZ>!X5-yH9lcUHFb+C0-e7nKe2>nf0Js#uyKTE){&Z|~+!%*cZoh-l!9(}JY^{Jm+m z+|uuPzzGdxIdXS8>9eN$XNAbqB=A1Kkx0jBn(}##S{UEi3|{b3vI&$pP| z<#R%w!i3->_8EgCaz@kQ*we}wYQ66q9>wL$SLTO0&XIP8Fd+(GR@z-aAP|jZkAbo2 za@_wts4(UWKMDs39!UUkt2&t1jpf38N)lc>YV0G%EBD&8ewQ0DFF(5`={QdSqJ|l$ zqE0bjNvP$FHdpmmwlR_@-2y{53)EI;a=jgqG1=^600uL}gx>@Gk-EL1!Z)XnhS=SB zszJ6(D<|eM5ji;s7>a{~gSdYEdOZI4ChDx|{v8K4{HLED`AtC$g7`qPZXM)T1cX-2mMqGvpJHoSVrMA9&xenA=qK6~P% z8RJA-6WQWu+Q2S;^P^Yqx%t04{XY?3`oWnvT8!$_FBWGgLSM$|VmJ6p2i52zZ4pFV zEAO%dKp7KFoq(SxwIot*v4pIGQDE3JOFAJKwX%?Sj)m)>uqlfDzVvitHu#pR(DaQW z$N)3O^hwzGZo2W2cxI^418YBIH!rp4TSeEzK2SEYlkizlv?nJ(f*W&~`;$LIr$~A} zG8#QY+^Xp;EovIjNBNezU^E(IO9~se+bpw8P-W9f*^!!Yzlj)qlGPelxw&klvwLhA zMuF;rHeRGNtMlf(zo9hZ?%5(wQNa{9NPVTjuK~##dfAnyYapO835^O(23^{IPa}FP zdw@n+IW?waHzf7AdK<}8rp2IYB5>61zkc(2T)%le;)-k8E%Tl-!eIv1QDyD{0Nvf6 z#?A^^q;Xn((f|Xw>$#oxZH-9={e^XzEjCUt3=YuH)tHY)xI=wZYX#F$dnVxqX(0#a zSzERKyleRfWghP<)xNW!?~i5{X@76`!~k$0*6$H#iwV^8et()Vrk%lz;!87=iv|=` zIUr}2@ID3=J#hzAEwVg=X0UA$c|X2}Q1e%^p+;N((bBxeeVH{tTl`YG+<1Nz@DV$X zHI&If)L1113}{#$78N@uD5Xg^nn2G$I^*quJri7;1N^#c2>AKWe?Fdg;)(d(-~HWf z6MGM@o$Xf;@#2dw#^aAa9{c(2?_NAyJ$|!4! z$1Pzt?7aNzk3^?)c1VGc+>FUdL_X-M=1_^lsYZb1Yzw-da!^P!=INc~*u&#sY2}0| zY_nt7dE(-gMhV2rq`n zS^s9uHxB>q%+BkB7hM(Ka+!fe+jy{ZV>?tJ*)83an5i}Td5L8 zQiuu=y!%&Z@F1Ix&^WB64SP;Ce%5j(Q8o@_`{8r^!k&upz8TXW`VR z`l&8^@kW^p3)7KLZ>Y|J#1zMJuX}N(`*Z;Scr$=2IL*#hR$!+r6ChOy+$sKK+e^NM zyGgiICVHk}U8wcSIcoHnk~~;#$1D>!)f1R! zYr?;mlCo%g-a!%1Vh(Dln+&)~2S5U~1he|c$TT)nRMa9NiB6Z#ELwD9V$okm5sn^; z*pRS8KvzR_9qHO3_hrdOy{_K!*nm%9NeVtd?CkEt1d!I*McpsvN1f6+f&JrAn4S{e zK;wLMW*>oZnk*DEvN2Ew-#;6gM-e5M7OFMrfDVieRkxE6N5kh5<7~mY3TKH@R=~H_ z@|y|_9ez(5i7w-PGZY$LJDPE0ffubvkAQnjaeOxon@qZKY zkgI zjQV2vdqC@o7SAS?Y%TW@sJq?6PpyHoOf-SU+(3V>suU#I34f8mx>}~CHKpf7RNY&M zY{IrC46q%|lQZ>_RBXAsxl0%8-_L-=QWFM#yk=Sy4<&q=jp-v})D$R^&3~pQ#fiJO z>XYP8X~0={9A-i;C0VkAdbVa0Xe-IAw6+U!QrQR3iAH)a0ARLZ8qzG5dvBci8jKLr z`v>KYtOJXMre&ScLyO7E(lp?R21XC8D+sa?q)NEyr)%crW_RT|ldGu^wfiC1X4fFk?k}2ReVYYqT5wGEkJ;ci0N;H%2b}kzLtPZ;0}1zeg{Ca8Wa>eP-O^xZC^)6hhB${6#pU-P6mP{GU_@hrm5@O+IHL5(UF)Ct zUSm+zmuaxse5vsOGEEch1tp7>LSL4mEtjG+Yt5}qhNsNOTxWtXK5uU))T~t?3^?PG^z`#XK~{llC`d0EX2@0D}kwejHoM%DLuevP|D)&!f6(21P|-mgOxc z*j9>$&WNUN@}?!1$+5>BikmLw(TqYXwEX>L>S#w<8mN+V8;7rpC||+`Q^E)qa*S*f zeRH>lb~ZqNmSXlrkegx>I}t!pkvSrl_$+{`$rbKrKbVvwizyc!pkV>3)i}4ry{K?7 zGLB0QoJVO>~xBhhrCck^;+sna`L_0 zKa)A7rc`DoFoU`Ltk|RFadJ*cs&yQFRIk z7&vFs>O?h)xNJ=wH`RT;WCMnUTBlE%-vtK10E574$fc3?s}XEHOq6nzyl zu9^#5MB{fTdkk|)>CD4}<7=rku3)6LVk!qfS>Ufjw$8XyW3JN3I?WR)8-qd3N3OgxnwD5jcvNYhkPzGEA)vV)8OI|!@^6}sd}R>$x8^qDh*1@Qdy&u=^W zEdcP&UQa&xWW4ag3$cH2(A7`akaE2>iU4IhXS}SgOV&(gn7h1k2-_Z!nHll-jp^P% zq_f=U$sSmy!3|9|`a;{>Y_KyN9qbdSfxfdKC4F$vgguA7+Uu&O+HiD$DN9pFhha_A zeJ@gdnr{%W(NEpF&nHER!X=p_Ni?m}M6s z3ma($o>;_-phkEhm!y|B>M+(oxx;0g)KUEXpS>3U`QLpl9^2fx=lyu&Q1QS0$%Aot zw3uKOy}t|>3l?4)!-aX1E3V#ylB+aUh)G%6o=_|L-ks^c=Hmf+_CN-*2LV&l2+dz= zie?_uLNm4Oll5o^jf~zqfKRmv@d8R@PA>V%#-@mtXptzSn!)87&V-H?fMkIZ6BRPt z6jfvysi>DUKBT0JyJ!GvDgd##8k9r`M^}NrLo?cdpCBkOw6C&4jSLLgI4=iS&|!3so8RU0NZHoH$sjMSq%9d#TgWfQ>LX~TX)(==_QyNoU@N0D0( zEyk3v%OwaFG_tjUFg8(U^PhgldkdwBIu44A{b8oFXo%Qp{E{5&WzgDT!Wrpa9)V_a zfc%**7^9pkvq@3NQ|oNQ@BxW2Vrt)rv~0<)A{pzg0QRJJfV}P)YdGcpAjayGu|r7B zwnexAs;VZ~kb{gBmLI;O1Uqjg?Tw$8G`u{ni-g)qAb;lyX`@d=$|E_Vb8Yfi9QI}pk3dwHov>kFiJfk{x54$i6WlJHeL4V#LA zmkmjdVoN)m*#M8mLI^TuWh{;IP`#nfxc~ql07*naROGO1VMe8;GgOO`ad2=DFTC(V zJo)64+m8MnzTVd+fM5F3m*R;ho{0VZ{Wy8zWCYw`ZIpn8JIqr|m+Ja-cd>51({hBn zjFA!)L3d?VzXaML=bqLs37`Y;T*akbZmAv;05@+j{))D>vT65d9%xkPd|;z6Fh+!w z&S41Hnx#>MU>Z?$!+?oUj04!Fp=c28esAV7X5S=85*o{wv@&yEr4tcGj6DLH&7oLm zDqB33k;Y)`Czv;-10Qy%3L3L?gCu}d%Xhb@h`rq-y!Fzj?3|F!(sS z%+tcAA)P@)=Vv!+630e7W1E$A$&qX`!iW^f9fJFOR$*ruEuxch!v`!Bh0PqB`D|uN z;Ykb;Qzo;4B0(c72S`%cA631Nqyz}W_|%HSKEBb!_s!hpXfakWqrK<#&-tVpg_p68 z#*$-0-ON0*dAN?m6n_Rv8i6(dfktW^5<(8g^TMdME7GyB!nT=3a$P~cJfi)0DUIk( z0KuuYCbJaVLG{m~6?S*Fl@8NKK&x6fTAjOobtHjikF8(VKv)yawZKCfo+qn#L zN3shEHqFm~o}g|tyxdi0UOZ!^?{xD=r+At%@p6u?#c;~wmjicV>FLvC5LP&PSM4%{ zWiSR0D-QRn>{DZ))$`0|dYdh_)+2w@V6<%a{u-O7N@_JP4=?gFVOnY?ijFK~cIuzZ zv%~zhAcdGxdjiZ00?2&MjK@yLJZN}0{WHk0WMef=>1iiVo*c1&zx7+c6~Fdtzqak{ zw*bITHvPYN@nSso=ws&2PB(UDqvi?+DiPC0%}Tc8T|mS9pi;}_ZVlIHc-+;Mj;#|& zV2FJk42)HBnv;`t==RU1bkPGdswA4hn4h>Z2l`QT_A(wgc@&Rr4&!GI4&%&;`=6A*@cPL(_w|Fg zb;K*vZNahwS(%8z@s&8ttZ1fF<{3pp%pU25jN5mS0if)JKiR}<6cf<=s$bNhRU@iZ z7jCtj@pO$TX@=QAOIhzgwnex4O$WbFrF*%DrX!Fu470ky$mr9@Y4YezHS^SZanu{? zF$GoqR4dLvh34~G)624XuVQ>9!ZdQCHr65RsUF5@pmTd`^lVy;`yfM80h%G72M#t> zVwjxx{xSkyIAdkphXjD`HpL2K{Aj;@A}q#?>r!ll)0!q4Rw{k0WdN(i>ZQ?O`F%;< zaIqy^*sVgDPH#}c-LNh03i~g^qyGSE3SFCd*0#7}raoAk!E^+(vd}O;%kVsSOIa|d zMZaLvA{I2=<0ijCQDFCamsz}diQjZcuJZpp}RoM--q$h}An@8U!;#kKi zodh`BKTiii#hN7xG%V1B0(#U87;0Iha}reZ2^BFcCY@zA-mHNEWejX^TGG(Z0S8N5 zW4ckQ#UQ5nWNkM4aq;5Cc=E|7w*bHv0QievfA9x?a6J7#h!ZDIRPmQxjYzE>G*+h5 zVT0kOam%LWrLLAcyf$jGsG)Y@*2JKY+fi(qmcQl76RndMw01!v#?MUVQQWwRP}meB z*=)CLcAMHLVQj*r05$SjM(=VNpQdD{Gh^*!abPup3r}=F#w+u)vroO`(}ik4vl@yl z=Vgn}!Fifs0t{^>k{?ozK+}P{=NBg?H>Hp2Ef5M#(iD{~)~bq;UwY(b{KH>-^S-qF z@8tF7EyYt`KZvhgI)!4kDO?waTGE9@S7c1MBka5M>2rdviA%aQA%?2GD+~Y!H8A>Y z+J9#V(z)1loo4)o0xL;HZS0j6x5derIYUEw2uEqgmVv#3#zSxJxProdiP&Qqa-v!oIl{F&Kx$+{pS zJbPxoXYItLw880wmNRcd0p_su2HZ)NEs7M+z#1fZ#A5&~vMhFH%llKdW`;f&;dJ_H zPzWA-3P!F>CbJPLmHz!^A3}7%!^|sTa%a= zeq#W$>+?BP&J{MA9FXtR_ddzza0cE+>Ht*-iRQW9bRu`ZiU3oMMw~V#k9{nD{nvke+ui>JulKD7z>`lt8P~60kNy1( zreBtYH;RX(j?f%!;f@~=0EJJI$G=aMk2Dy?YU~!9hR%!1EUju9xv8kd12rcjClG_g zd=;f>gO*7^A+`xBIjC*WiFq7fcwSt)K+ODeNXccoxlXwno&n3mO*p0nlQly?8Ozi_ zkcGvNa+4pvCvT(2rKO4D=zt1sR_%b}bSu+nW_Hz6t3ItOObDe(OD0iUoOS`rG&5}Rn?1 z03ajfSKbtxO-HiREIEWY;RB~HF(FClHfea+m6U_ZD>oDyKw2w8B~PqK04Hh@La7dZ z!gQ%k%(_8Ua(XLy+>uSRj9@UlQAXjBi6oI6O@8)?5~&MJ3Gu9?Fo%!f=I_O|6yErZ zRDd)fApzJ(G!d&~IbF9>ZvCxMPj{;jj1I5YA((oPTa!p7F~*fylL1ei@jFCP;xhYe-LmSr)B$OLG>L_+qLh%X!0D$@|;`+WJF z>Kc0M$kPFP0--o3X)cxvlR-IBAd(S=12h8j!O}!{H#*~x^~o?*j2Wm+G@A6|Nj9TR zZyjJ^6q$%7&N6U&oQB=(Q&l%+GY!%(Xm42RlL}_>gdDQU$vI7QuruDTl&l*=hKhyn{#=Wop&;ShZPS56h z#j>SEG-{4pEf6(lZv!%C8ZwlOPBcq_YTHe2tT0~*L8d5DvxX$M_8=piv!&vU!2^s; z?T$V^>kc;iasB%Btrx%+0Qm8*&wlo^@zhgK#b$p$c6ayOSyP~|EY05AWNlVeaTc)mu& zH+TB5;#|Ynrn4K8NdZ}(XV8Yzbx>-NMcL94b4`j7e=d0G`-Onq8TAG3+uW?1 z%wdv7ov}n_P(TjQk`Z7!l`T4rsQ+NXm{f=K+9;4oxTw*<%iQl(6a78`g`uQtoEIH? zn2UCr*(GKr7MZ#_Ktn&PX0TNZtuax~@YI){8jvjfRn1R&;j;ENJPSMw;55K?YQkx# zM<7GYaH-j#X@)V?$3$nCCq|tKYSYua&qE>88%a$uXpVCi2GAVl1IA$L91Nd459wA1 zj4}|vMLC9p>>~wYfT^0EU&hMwk~0B>WOKokT+z{Hfd$a4=CU;B36LpMPR$3PC!0+a zSXEbBA6WQZR+MKn;F)OTDzkwHoLgSVR3z zBde&4c4=22%ZtDF`;P{3lx-G}r);$(ld)RO9hi(K0mJ5C!+5|EHHnz-log;>G^9x> z2vX$$9tveezA78ti)yE&^zlRptgX+8Ps_|fm|?#5=biKm`=Dn9$!&u+W> zEdcQL)BmHRquAfyFT{8_|2AqDi$TuLlJQh@=f$DjCKw5gtQoWc{Z)%c8uWG%StJFz zh1M*^L%Kt+B)I&h=aROAy_zIV6J*B9j^;W`(*#UCXkeBf;_rNi$gRftrjm9ZrbSP-Q5^44EY}}wLS0NhWqI$2y&l? zP8#qy1x#_2?LtyBUBch{D_{X+MttY;iTEG???>X>mrqtRXC`oT0%KvYUf5^TiVJaB zZkp8z!!2HEP2YLnA2M>o*KE5=cfNb>d5seeAxi+&ZIENdn$z=(G!B=Lv zg)18Mmd@(Al9g^>Z!rMEK4-Z!*Y7Dw$DkP6=qFw8ZZ7vmo^b+2^m8uF@W~7W~tAPVZESMM$V?x=S$oW*v2-O)M3FLH1CQ*w`CBRHNsU}aA_64Z{W^sSx zztJwyO@2($(+a+1ZuFQ+r{7Cx4#?85cr6jAUi=?g%r0bmMgMlwU1xl?NubI@VlaHb z__OaA5-XE1L>W0MJXhQ#TdjCbYcQFXg72>DfYZ}cDmB6f7daWBm5V>`rePW;Xa$W? znNt{8hR1wH%2)%u&&G3aa zFT-t*dX%%d1cJU%)&-vd3l|*&ytH*B)6l0V(_D!}#rl^qMVg6sxTAf7`d+xXz(6WA zC@n@t=G;GDu%3oRWlat05(at_BWf@-Px(EQO47W&1zePbxb02 z(+%R3EndZB{-E%wV|$ohXB`NF*-y)MFYXvshJ>JIVf<6*Z)OWynmVy6#xnqKBgB;q`lDhB5=e zw#KQ+97a4M&{KKyDPaOfFk>(;TJ)negiE8stXiO~M6H)e7kv^ibr})^7O;N>uW!6| zGXA@N`GNR9UpnJUXs{mAXrqFG%*c2*S8vT|7B5IK*_X7qlFU%=sr9_Y`*g=mm^0=Ahnt?7=@(c%Y-G%8OsaDg9bl`khO~xkfY6E-*v8c!ktF28%RBGM94k#5 zx&jgc#PEhbo0E09;@4RSKbpZHA@HT~TuSP7f7qAPbXz=Bw!6>_5(AUr&fbbDP>~TW zOo*cyKZergN+SK$0HZ`KnQ8(LutCi%%kE}K6*7=c(Bf(nk(}911f|pbii!@3yrwP- z>&n`$0BOw(p(p`J8yubTR>)FW|MMFAdp%CTx9x zoY7fObP#Vb2!pPi&Dj`>BAq3WmIzd=#xBt)mR2@1L=BU-&SY6<-DEhyQ013kG8M2O zvCt~PK_*8SLyuk~$eB0ycOA;8>l(jjMIzb_0kZ(7FHw(VXV#GXPss zljfi}Nf6Q#6qw?HJ4r+ojo~#L?a>t0O`|o28h&tu_Y^ttl?M~8P9(YMWHv_7kVJTm zVlo-_Ju2f^4hpgvHZMTK08VgM(mP=oj+&GO3@14lvkZ@RcNF`ZO?>K8pNjM6&u=^Y zEdVf2|IeH`6PttmW7-okM@?%SjVc9A_cBdg5K2$7DqW}<#w_|x4GkdOsV&dAS)`5_ zG&s_ZeanpRFxzl<*+;K!sCCMs#D=B~RNYK(UR{3Fnh;b1<2yq6TL+_4fz_#q0q=xS zYbS~jq(k=!5iYx$j3d9>^2lX}v*2c){?x;x%v3sS8da$=5n5bRW&Xn5Sfqs(6J=}8}S1SG3= zTXz|gv=ZOLh}g@LMtGWvXWd)GTG$}JCSWOxSS%Ga8+GA%X)^EXlg1e55Yh@rY0hlE z3ArM%XsIU+Y`eF8FVCE|-j;h%!w;tDsX3-*?o{2TubjALz@sOOZ!^w}BoitF{!d+7MiLCY=HMZG@!3ek}hrT_KFDyfK#@(sKuL1_I~X<5T#_` z`>Iz&JYESdfZf9hXxlS6`AfJLQ?>@FrqZqxUp$ChW1o}niTft0jTGe|+3-V9`Ky=_ zA{&&%5TX8_NmC}K4NPex8fU_%tweeUF-|VIOc+&;a}(y51>}a^LxcGznqsaPRNqGo zU_F*}gIafnE;%YvVTN2oVDGW{)}DsrkwH!=enXF4CH5ij} zx@YIaXi$qUBL!LE-*>Z+G9$+-50O7EnX8R41nA{({4>S{zi2qK%$g)p-PMre^yYXV zv( zQUI7E=ssJf`@7Ts+f*fO;z$;dJgER4B3>J-On;!YOS+0PW)uafk_MXceJJKpx8gKw zU-|SiLFErCzMZ$5<~7+JnlmZ)i8d`wbLY+;r${N!@MUQxpGthLXpw_*^HDR->eO0r zhO<2%v1nZR8Vr>+K{!B^GG()@V~dcemiu>onCHil3a<8 zovHdZ=M%(=^66S4VMqkR<*dUp&chzW^f9x6s+OA&W_)b!;ZerO1-56C=g19C`5Pqb z1#+7Fhc(qj9~TFNbK_~i8P~JlcZnG1#qVG;l}$*L8c>$$Yq0(>v5o-*WibOrRl&%_ z^ybVMTws$?IJ6A1iq^fth%*|!KVLgYx(5H=hyURcPcSqI5oro7HD4x8>wrjR+S;l( zT{rKh-jg02!kOgomJsPjwu!1?Ux0)u4J51X&So({Sy2{yvlwz|QKsX0%F$$7Ug;SZ zoqeSsLjl9epvf+yX|v3|5x7X21hVtoKp0McR*8P{i# zFbM}{#JEuUKqIz*lXIE$$&I|yFJl5Hb$7#UJ_A|8?kdx@ag#LTU3%TV6Y=L)_u^}p zPR2j}%ER$*E}k+!jA+1#Pv(IdLnB%7k6f!=ciU6%K{F#mA~C%c<8=5$_A+)G$AxYRwU^p^#0Mei z`!?`y3ji$B|MTb1$77E@8Y^=}yTPjQ3e#nd;yWrzh6|hq90N7%l)Qc>BA;0>pyIr^ zH>f#We%r_{D&IO<^UNG;78L`@OGE+LW!%h9KnVmx%QS^F7pW}qP8!5?e&w#9F$<|o zEQZ}6$({KVAV9jK&4~U=yxHXU6mtYkHa5j%?8oV#>p#l4X-EKM(Ov@O)+56hU(_a} zp!tOz?kgA2Bo*NFDvhkc>C62#{THw8#kXHS5zoDRCcg5@sra{-PQ{xycg@LpOhk|^ z&&j;7rinwPt-F^8o(ZQO?N1ubuRxTGS9jw(mrvaHck;@$T?4uXO|ch!nAW)g z6PPcggw#@ege)Y9y@r$@KR~%1Tx(#I^?xB!ttb>)ep8Y6K zL6aRLdS$G&$-9QGh2eT^M5isxBa@S?vYKc#*+5#Hjg72Q`>0bU90#UI;3e&Q zU_Bt5hw4t3qk%&(Ozo7ms% zH|r{9%(UtNNTUqta#gJ4lOGM&^>X(OX(~dKSeC_xr0EPhjVEKC;+Sa)s_3PV>-y2D zQMFx|li`#_VMX^vk!1)6revjAs+h#Fal_-z2&OR4oTzS^i5Mq*_Wo~FH$skrU$fmLc(i79Y5fw)V z-8O}P>5aYk(httWj&c=GU{QbjPQ=y2op|HsPP}z%C%*sIUVQ!4Q*q_yZd|#gcJ@a0q&6uwb55zW?Yg0oiK{o{Z0P(1$C2MidS-L@IQ z*YgGLzTUdMV+~iBIhY&faD7p)>2AbwdOWW51S~EzRW@Y_QtnvDYPM;tYJCukKT6qxcdDH6&};l2Gqw?3K}6A$r0+ zB0yhl@t*dGje3Ef%dW$K0i49?agM3^?h$}S!m6RJif2=jo;I?WfwmSZXuimMCc=KN zeJ5tkJ1Mj+wl8r;1c723d_YzK29DQY>E>j8SQ~vDn$3i)A~dV9nP!tU8V@5rOcC z{r&y8dbL;pdwcJjdG{6o=+pmapM5qy{Mch?_@mK-I)WI6UPrdrHT*rJ2%0-^o6?5= z4E0Nu#}y`13>n+*5r?*>Wh8V7U9|u)6Y}F9B28-rK37Qh!%M)>5 z)DqDcNUh;DxS+W3oatwYtYu}71d|_FEi>5+O~URULm?Bzy0V+RrZu`wQI;9P zaN5GP<>OVD0>)g#!{0uL0h?*0(CFF34TQ|hxbUrmc=lTdC`ue8Qo6%4vz`OSFFwx` z%#;D9wC^UFMa+w>fickxpERc|O_cY5yoM8rY@0`*dtSV{XAKDDEuofqVG}ffRZ5%m zBn)^mUE`S9X_sj-Ac30G$R^{Ns!u?f15H{mGN3IziA6e?L(ybTVVF*-H+!KiFk#B5 zOEp<()6WjNS}Ys)z{*rwWKR+NB8#M*gL6UT&1zr6*_>aKJ}#MUN>Q2V*7zGYynz{- zy}%PpFlD2Qlj;dwc4DeD*1S4hgVWov!fzPRPAsr@RQo%i+nGO>W&@dnHCT-iqjZKI z4Gg2xgngfTgBzxEH65)Q%IdACIl>EUm*n)hGXqpL0?%eMlC!-M2FPVV8feqeXlAjH z#AKQQWBt6eX>v71;T&g^R?Vy$OY>RQQkxEP2vBk^`)S3#;1EIP(BMN2$Qn&gJ+~K~ zTG-ZmYt#mAESqA=VmRedt1UaaFl`?U72BpWP`S@3m+b7xs!v!43^`P9B%`EGvb_Lp zx1By-Zy3{XidK9_<9`4%cv5YuYeuZ$?@>sz5`Yf#ab)e3%}t*YU)B>=aYkdChDAhI zw0Dy$jjv6vfoIwjZLyS%f#pMpl8Zp%vz$$C9t4`dA(^mpVBO+F6vnA)swboAmT&@g z?cl^x$ktDb@jkIiP&7AZEZY3917%8L+-wzE7}3*ML*Ox?vg!EY0tYqMD~Q7_oC z%KLtmP2+P#C*KQUd6U9CR!rH=MqcYvFFP!{qjY$#cEX^p*IDCvP>VVo-QSM>->IJR zLwGHYX&5T4(2aSuCJYn7K;Wc}KuLl4$nnM$Y)MDRbVIBh#ag&?YGx}mn=e8L%mmOk zaTw+_Er4FTgGVckv^5XSpvR(#8Ui&gTeCo{Lc5#$krrUUg7r*na%&=E8om|ah0+Ua zw48VDU{p4c!CdaswC^QZ5abA&k}G_skX{D19Bv;}5%lZLLN~(msL<$|U^W=k8Dm0a znqf}6&Dbctc*GtyW>vQj?iuCbz?;zo6;_-l3=T~n&vTdSnjdBPD3YCiCbpM!OmhsZE-Bpo+s7_^HT%97KO+teT%{@)7Z23!k@1 zJWL*jy`gkYnaPxJ57DQ}8m2JXdp3~Q2N)S2-oFzc-aouI6tJ}Ybnzk z3Ob#ofwPMM2bbg&?`%3CWj8}}%Puv84N~L=Ga<@FGws62mF(aaZ4&=ha~_uHh#FPdSHoc7MM1xy;LvpF0bGrD=F zfw!iIG&eP^qNJ9yPG*PGeai&Vr`PG-Rm?$Uw#p9krvI0W}jbn-wsVIm(lT z9uS=5FDwd1nAT*V<}f};6ht(pTna`)8k!jBACwD>Oi3tu+DHYsZf8P zmf1{sLo=k~U{9Q8cX>cYheU21?!03Tz{#D6-}>lV@%MiATD*&a8r#?QwSE16(J<^} zJaFph9sj*+w|6i^z!bMjIih(Hw4-VAwX$;x{}-|#;VhQ1<}}A1I(Gs;5ht=>x|)PX zVHj$D0nP>lrFf>kM|uhwd`Wmt%Z3_hET=gVCZbbRogLShVK(@PbyGu&)^8E3}zlr_L#->jr z_m`QX&=J!_#7ArLJw~m*>8ePLPCp1>P-prj5g2eMtsFVo>E>PG6KON5GP+q<-nzwY zjkvL#oTJmIgk6ucj!F_d5cQ36T^qHwV{MX|BJW`WvxQ_;8{M@C!hQ z)ab*|zmho+Z88usn;IHZsW}n%&mQ>x6VsUm(6Jm6HR%Fb9OeO;eh#D;Xq@_*&NlsX zIUduDOu@2nk2W$w8aNdR2k0=VMmBe4rL)*3NDnfAv?HWgQdxHW@!dD};`-rEMEv9p zfE01|M8??@ced5m_O*SzPhWrX%BhGJIZW%HG2_L>lrV=}^}5iMWdl&N8e=oH?$Na- zS%i_FIpfGpYPFJ*VQCuf@MT^Og88hO{N-GM&@-&Pr_Muj-xj1>a0u08vb`qC^w{z# znpfQmq#*mjI6=BaF=C>+1es0c;Zi>h+%f zCeEEZ7w6BPkNwR)vZJkoapVezLo{;T_9Fat7 zy+@qe$dGlt&;SyQcC?_jb+Bck!8>kthg0pMOH6m1Hk~4~XJb6R@$ZdX~d+CVcJ ziDUuqxtkdb-(sT{vOD(tm*^2?wfYyGrtI=wzE?WY(rj+oPon`_8b*ZT zCiY_@quDHcWForJMBD$2m@WW;ik{&BSy6TQ+k|JiFaTfx2h&eC69Pi7Y7tFc+<3xaS=gw_6QYAZ{h|2fu*^DZxOZ@BgN8&<$b1qtHznEXkwG#Oc)1 zq{*R}5fitfnOqu}@qWgCvPIEpaP7@vLvEYc%$B zqlQje^mx#Uy*a%ya>c($p6oKp8kw)ez(BOb^X23hFsX2|J32&TNTp5l$NEoASrOxF z9M3&0XVs=FO*SER*pQL9)edT78ck3nhIUs{HB{%6ah!ZtPGtM(}MwKg13hbvYhn*>%W6+bW z${bgw{JuAAey4g5%tv0S%?W@5sk^mrTBKukhMCD16<*m9z;8@u#8@W5_70j@ z-uLnM47Rm09C*RNQAk2s^KTnVCF|!hW_2?vcCgdP2djzG#}Uz?MypCg(aNP) zW?X9qg5%2ql}7Hi8KcoF)HMmaE=4Cg_gu8Y$X7O9HTAdA8hW6kGMCyq1sU@tbA=B0 zFf8Cjn)bI4Sh+Vq&^XMISs#>p9zEa{$NkYbN6@E+6e!?gN+hK*-BYq zP?DJy8eLXP7;SQ3jWG50N*K_@1aKoS+xE2711nk(R%ktBR2-~%H2W$FC1^ccxv zQo+n^VxHw-^`sQf{qS@gZMFQ{*Y>r2{e-Ua^(>x4D-j$W`B6XZC~$k0O0ATpN`X~Pse7nfj%V$LPdI`$95E5Gm?l> z4h>K3BhY{+v#~@IP86{+?1_qHJNy93KsCSUWMLW~X&i#(G)*Rhqm_!HqLM*CMk_Tt zQ{I1$Mu zu{$c{avb7;LszItFajCnGUXk)-DiBILrr;`wBC(Bp{&W%Ka zhtsM7f(glk7VtyO$$fFsM~<~kzWaASrZPUYm*=MjVIv_g+n%R+Z=``(z!}WIsf-2* z@WS)N^risB0M2HEN`P+?~XtDF=tA`*&#aW!^xReihA^ zX0X-d@?4yuV<;!+bA@PTd9bn-3apWBG9QS(M5AqQRRFx}RCWLYeg%lEKmVbkUYFwu*qV!LAat_Y8`8Ie54jc?ZEfEsgWiMWo?5<fG|KSK;wpYLXdSHJEomG}bvORk z=O2jIu5XQ$wy*7L`+ECVX2c)=`RTau%}w08*dC9lmm z&~n+Y*ItZ5R%Zl9Ly|*N^BtDXRbDujN-dbQE)3b^c%JtH4G|%K8-4{4u;wfw81l|> z8>ZFFWG+Wj3%Vo_10Kq!$1q1N*$jR^9Gn24Zu3oh9%B%bEshf3O@h5yzEsX^%*lsW zu_FyHfX{vIbK4F2UIhT2dFGkW&Q9#_Z;)XQ>~PQ>+s2C@6Q_aktQ(5Tns>ovpSsbp z=u<|=&t?jxY{e>E)`h5)v_>jNB*{YO9)^D_g>dulEZrzNETrAKH&zz)mXq}1Ct!>R zH}a_O9GhOQ<&qs_vRrJrg?NiEDGG6!tS^PS8Vz6Ly$1bMF+ugrU*@W_t#b3PqJjG% zy6DpuJ#?z&8KnRG0!EnG9^v$@gvQy%`89PVjm@U6<$Dp$wS64g$fM_)v|q&z&|3DG zVkQR_Ez?X8sV&cD#6zzE?p0YHa=Ma3aJ;1nXQYeB8lAs@JGA0SX$jGM!~rQ98V|EX zYq|jlsGI%CX>UE@0e%VsqA&~=!8}O-E9Ca8X}!l{&ol`XB|+X7LR;C4Oid{vWPgu| zOP#$^w9vy0H{2K25{?cmK$zFN??o#vmM;bsGPbGZr>Dn|24x^Y zC5)0e&Q{B_uk$g*2}oG{W-pMW@+6S?6|N*mr%WG8=@(6E4Xi;SI}9H|sa(vmj*fQX zpZ?ht%`yx4K16s-lEt@pfIZ=Pvsp`Y^f7ZA20;_e8sk!c6y27bSFi#-t5I zVCTff8;x=s1df46mighReN^5@l^~ENkz77wF+__cI#Qz`M=1FtSQLup*8tB3xq)pl zV?B<#Sku+BahPMC;8}Im*|VG2k+xm{?^OWci(mZW-Rb|?v!R_G8^_l9lbGD6P0o~R zac7AbxFC#xqA;CWz8nN}r%qC9Iwi-OKvHwHR-D;XUe$<1E9Nl0t_dcoqzU>}nRrZE zRt2I;Jl1T{ISU6JDfCJlY>98%2oGsGU5jP2JnKY(+ap$pf`&09GF|pSGx@+_8Ahv) zfk?Vx0|6vAa}f*w2pBK&!f`1@aNeEF@-CkOHJEm3lw7XSVhl%fB^cts>@3}&k#dLN zS`*R?h8w+Fpk=Lbf(*;=qp1uh_RB;y4ZNt!GU(_U#TQI-Y^SF{qey33kzn_&C#{#f zB3)t;J!9BSY{LxPf-ySjzy=>oW<>!;u`3LsTQM7QIXrwaV4@dE1H`P0c$nJJWdLjf z%6Gb{i5fFvdFEMvK87%<*?Bktc=U7Coga$|7@+>Cz(SKVg`2ewXJvu9*?dLHw;;UQ z!gQu=TPl7tRltIs8Pze#trTGU+P=20mDkNf#sB>LL-E}=PQgD2XZ5J<%16o$^JRd6 zNZo*mvYBQJwSmNR8KhlWg`79?LW{hm*a4 zjp_uJ>4Mv<0PHB{a=Ek507*{x zHPyxhNs0t1Gj1$7BOoLgho=-fySs7rm<8~~FMe?g0KC^e&@<0G6E|+$i2Y;pzcTYm z+awA$$H0~3^k&jo%x}#0H6o}mnGs`~R-D)?$D9!;P2(SMe-@h}Szf%LCn(2fRkJa& zRk@)GP>4ojN;IIw5I{U34bX=1SXR?+ykB{itJ3ndW#4g4lDmdC@z3486rVdiOSLeN zVjHA+KL~wuGe}&_zewF08QHQN(g1}iD7OesLepbWB47k2GXpH3s-+-^boZQebf#B> zAH*_+te;1RTF!<&=FIP{96Il8aTN=CT%Z4#9&JEJ`8*{322ytD2aJDscN-uk*Jit; zI-JWD&1pWyej4CKl1?v^v<$X^a z5ROZcYV%rXkimxa+!Y2FhtikNUQ1E3x`y8_80 z5#HnuKLfCw3`~*SunE(UqJ}#2VL*`yu}-#3#DUQlCRGFZ8uUFv4U?@Gn`IDlfme7ys!0c{pBrW3Q7Cwy*7L`+6V0ZX7DkfAb(d z^UZx^zzc?>VG>ym%@(FpaMrV{6_=**$^aN5mo0IJS}P+*NEEb$!Xw zmilpk`F8yF=KAfghFlI3a z1?gal4WzUrlEG*_BVra7R^{9WAz-&9WZe&A{8O;od^lv!pFS_7SD9KGg)}o(W*IEc$ zFs~HuneOzQh||l~3sA?*cq*9|dKh((qKs)}roA!HprDD0nI?s(0c-r!BC$(?k;o@s zoabBK>p(}Lwk6fIkFsKCmY0!f{O58*Q0_uYQ+leen3RT|_a~VSUD&02E3; z_*rri$$NSTEkY6y`0}jU4yyN$l#)!(tMf@gM;3fP`q-kH=WOjbDU@OI6@jWLuh8sw z%7DAH|1B7QR&yI*nz%D@c$x!a^8l7fOiCeZfd4$AJ6G8xKHIcDAf1ZvpULMjAv-NX zF$!>)yfgTmKuK)_mSP9A=U6H?!BAA@AyZyA>A*(R8TdCghw-2N%H{ZtUwA7%aOP;+ z{cK;`*ZcH!`%c8SFQ1Hm^xOyHpS^e{j@+gla?gI8RxE5LM@DE8Tf8po+5%W*=Pp6- zRBLlMg;q`W&G!YdwDf{Wdc?4oXokJ?-V%I)s##6*o8f2h)Pb1q#O71uk-6*lj!&O5 zETAl$<*T){8H>_oQ!iuQT0OYbtGKs`##91-Uv$>U*D=YDVSFT)% zQ>RYFg$ozrSAX?a-?w}AJ;eaHaN$B+x^yY__ct($0{S?RGhkhUJ~G25=@paaG;&V! zQ}ZM*P25bHk_x55M4wb$L%^iwM5+#8TE26%%~kr-$_G!V_Q&UrgxMD8$!=U9#Og@j zN>H9Fj=d&xsqPq$Mu(K&pq?t(d(}r8jk!#l-gUE*|DJKEiCL&P7!|EahBg{f3Yp1V z+V?}c8qZsi8DIw=m=dkYlx3&nm_FKfKV%%$Y?<3TGvCyj|AcOu_oA{H#3b}=npJbd z%qINr=T86tAOJ~3K~$iLQ|Yey18S(S`STbPz?%*=P%0*>eL~hC_Zu*81XU_R%6&D& zIwhN#TY`qD5!uNCA${}!I=`aZ!PCsHSSM+5pFy2oqnX?D4s-Ny5DTD~EE66-S1ZlF zpsCDgjh|1#vD@o>qmj}?-Gq4%flkEGRe}YlJr$|wUJ)`jgk(yDau0_7b3D@_*i0l1 zv`}LF{Q|9205G(Z3&W0+2jI^N~)=Xr70|uU%K>*>nGFv9w>d{&&VDS zzzEg>t|?xAYcKx$Kl(uY4}bJX{OPMFw-JHc*Y@>3d|kP@6X(8h5dXzL`%wJBi<>w~ zuNXCA!&Zf>b@GHe8|`j8}!YZ!*z~ z$#X_D%w=9T5)Vp-TC!T+iEco~K>8uf7@&J^b*Xk*bAH*fcHEQ9@2%i& z7i-hYl|f>VxzWT%7}B}hxF42dQp;)B()0m6od%yE>wb^TCq&$fzRxwCksjkHLu53wdsMzEPAU-2Ov+ML&KVS5 zokhU+-)W9^X0AgT>CH#FgmJDw+#!}zP7LT+$%HU>TSihUOyRM{n4rT z7cZTOfBomDugYrm zsCd*-CoqXB8=Es~aFph;#k-lcNX)T1iWPuc<~cTj)R7a5vlTOb+nQHRtoYBkF(Uni zicse?yCf(vSY>1b@OriGrR11x;vd;~)txoX#4n32#}!Ravg6-%`SR=W!4G~ge*gD> zKYsBSfAM{}kN4gyALRV`^YNYUd?y}z?89anmaXx(>B(5Tux`c%w}IFSOp=`*J5^X+ z4v=Pym(7`6X0C;Wn_kQX4jSv;Ch2gl)7K+yx?35WY_RaZV`bWpL&1MX+95u4$=wA! zdqb0;MXk`B=|y0|bd?qhx~J0ZQ_qy^HyJG9m;$i8r=-qzX+{9xc;m_lxfoP3VIifB zy#W^CpyGw*xq?~X6^}~DEb7AY>9A3q(G(2Lny_2Yh>nJt(JZ{(VUEWL#cbj4eNEBu zMb?B@EFxtT$@C6B4{Y#k-S=`46KI;A1x#{i_?T3=L~s1U=!yvo_(W$cOX6sGom$b1 z^K12Mw4@M$!lF~$Et|1r^8&R>{`a(=*Dq_M)+B&MBs&0n3j+_*fK^4Vf)ORRy=s>h_GU;V1o@H;%Cm46RZ`uD?t0&&s~E}8f-HcxTqs$!Ht@=tNdAX zFf3d?;X?{DoV^grQm^0Pc* zmI}3%yE3YofigZDwbf}7y0-%kWA+-#Ha%Wny*a%D|Kv`+)`}5KHh6#jMDvPYfgIcU zp&z>+`I`@q6feH97vH{oA`XvsrsqIo=knO`3AS1dE1JgkPXP1UF*v|El%7Q#Ea%7F zVNLqn^rIwh-*`3|EJ0iN!cb1C*~6*;VKQiaicR3%Yo~PTd#B=OXTWB$9HZ*N8XTck zZ>uhQ>@DkLRYYPa=F^lQ3uGVS>dC5mG-`bTt4NbF=i8JFex3Eyu1O1PyyNAwZq9Dv zJKy-zfs_rD(>|MyccQfU)QwdlRTdou_8Fi-*GSv%a6Yh{wKDO;gzQ|>n0nkMmj z8~u8?_rlO>MOd_2;`>#b1QQXqW-Z7vTG6`74c?kQC}Av;?C_RmX*rb5$H2QWmjH;W3n)QH z%huSM9-b4|hVjJo4Xu>wyu_ytx|?t`^f^~}K9go{o{DyVB3^Z#V~a$EpdK#fMI1i$ zAF*#}-1z6QviE4}V1>h4JrDL#EnDs(cd(POi>7P~m|g;0!9>Q^&-~HBN@BCFc8+y$ zBPUi;H$yGPiB_7}xj6~jpXtn(-l%3M#yoJJL^s#8r`Bcld5si>|~yCR%M zxO>8w25xj|Q@ET?zG@66x{{j*dOc2nZPwW)0BL;eUNyrP#oIwL&%9L+^IsX7T4Q^( z;xrmK#C-;E*w2G*Ex`kG1)#|G1!F4MV_+*5n_(M`kT5y+W# z#~I-zye1L8gq&JsYLhjAOkw^rWR(C=Skw4+79b9iiT%_7QZ7Rbz0RZm_g5GC7^O^Yam%kjF&BmfE z>QG42*On$#wK(K#0cFpM3(!&(o+95ThNasP3;3)VjzNRSsCQa1qqa)Jv}jJ*pe#*? zCYw?jsB48EPxsGY-Y$N z2gRaLeKj}Ul3fa37;;^FuE>^PYB$y`nLlL6G)iLlr;CU*10Uh6oMIGV=s`AsY+l3} z1@n;otTBJ%gzUx`LSgZu%PBqX0m>&i`y|Jd%NcsXnD^%mJP)!%QVd^Y2lf zNu0Zm|IFdsF9WlLbel9*LB(9En%*U0z-6A8-9X=8A<<(Gb=)C`B z*`qEqGA|<({(b70$tcyi8LYLOmfTV0M9H$Gv}tSNdrv!4VwHZJd=}!_lZd-ai|REa z4ZF|K=O$d_l@_Z!jx*JHSogWYTz=H~4D$K|z;dry{Bnpe*;*e)Et%@_dtvH=BFs!! zooNIHS?Q~nXH<3D5M>S4X9-6%kP*$1Q=;O z@@JN{w~PU%ga=m4tYZPp;wq7hRW-8%!s2HIu%!b@OC9aKLfG9l&XbVsg`{Vb=(#1^ z3u-Kh0mf_I$D7S2zWn7c$7eqCnfE0F;IBOZaP8W)xNzY@Y&M%Xb^4Sa$V)CLO*WRs z8sK0S`+=+uzO$qXCDWkl@LnE;GdGio2hJX01oRhivv zxIBKN;^*9)uKsRKI7e}vo>(xk9_Gtm9<3dVCzRm$e#jbw$?WUOa&u0TF&w&*W;PU=`!nJ}ty-;b#}ECExTnbiaC0OZcjOpNAcB~Z>D?E!|dza%3grj9ieWM z%4*A*v`NN}3UFaHuG-f_5|OkN6nYM@2N+wf1{SO0r32B4l;0BEqWqH)#L-!48E&pE znXiEjR+8Dw4)tr)*a@@jM6Hqq){P#Eam?-6FsViY-jxQPaM+U~ln;~^b>it$r(?6( z#DxnN;@Y)qTL9p%>I( ziPqF?4CAvL*~OwA%|B2)yI_n`u0mi*hl6%{XrU|?jnpxjsx5nNy*Y^^TU($>VhScJ z4*c(N5>nG(O!F;@aOSSjm5)9L5`b}r}Dx4Ga;1xBDYTB+~d`b?3v5^FU_bz@H z=`g8XD_N3)L{*^hCd;T|*_%H#h6^Uh;L|6XDZfe4{0c7Zncd;wxL_&<2{p=M0g#Ni ztf`K0$tKWXf$d;P94f{}q`~)1ad})|ivUJVFw!Mk!nx zHKXveat5u>9z#OQm|pOOO==icU1#r zX|70SN^fMvc&`G<)b0y{Ds#kDi{wHvDt?zK^TAO@GX-UuPfT}vVtQDqG|eLf0C*Z_ zT_!;@lU{KGRePsH6E>)ttK~R+7~fR4bkPu-`H1-b+B9htdBq

VYKEnetEOf*bLpTvnKmQZnLJ)N;9e{!!`}%R^gK~8wF$`$6_HL zECBqD6KMBi>f5aF+*DCG;8hcvhVYxAiNfc*i#|1BYSK!glsB}|z!7Ta3gs4}{!oC* z8?U94G;ouwl_(l0pG875I^y9hMlYMqQa5Ll&06FCW$#^jEz7Rs+!3otvGQaUZP^`N z!<}ou9XH%I+$9WH(4Q5bRg{WdK~TdKD8P?Da7C~o5R`1aAjWOvS#y37b7d8AuOCIK zk{wn)_St*wwdR~-jEFBljHi@)c^<_-&y(3bW#S@#OW*h8Z-Zm*P27FNDQ8UNBErw^ z7*lFD2uKU|-iWq>!RtM_fCk&U?j;ipX^)O$@@g)n)kaw$Jw#AO0j8dOdrzZqFi{k7 zSX*uz)LKU%1zd+?G!mWDW#-05n#9V@J5gi`TMVVK@F(Ix!y;f$?o!Ecn1rda9!4F_ z;ho)@e9ykj~iTu62KHS^Sdk9!HQuJEew zX1rwBqH3JF4)5D6k-Py%de4Hs1~0&qT6S-!A|{keS+lDVFi|jJrjLJI(VG)+)n&Ic zBh&7)!1iYsOEutaQ8dPWDjfP<+=$mT@>Y_Fjih`I4W*JeNrhrh&IXq{8CfXw(5QB> zmO7otq2vr~1*8KawB$RX;>rv2pfUWQ73D-HI!lubIu(47+UNJ5PmZeB~T$n59|VPEhR*Xp_1qsX>@9o!hF#DK<=RR@ zrl3j`+Tdw#rIi?S%NXc9E{E;28e7>++=De43e#eFXf+3WEo75P`@7TN%vjA=BvZY- zd6~B_FaIbb0e`I<0DtfYe=xuQ`@cUQy}S)J>W(4t&cFuIJtw^GqepgbHQDoL2lkdp z-4C#xQ;eMbA=4hj)0#k~#2?@{()1x0R<)KXgUX5GATQoE0oW4jjO#0pXGoDija@z| zfo#4HX-k%DA$cIw-&jmC3Et%kW3fbUv}g#2O~5q~4E;O0{oSZPSWZw_%3EGc0N5&6 zoHECdB)a&)CF$G)`wnJ7qh#?IO17`P;4VLAblo2&y)~IwofO4#iQ&0JzBcx;fm8NEV7aA&#aeIJF=%5~odsVxzo$g!uiM3mJ7 zNEaY1JMz@rMqI_^U;brLcD|-jDW{&83U;@9GK&||%q63YgEHC;8cdOUx-d)akg~s7 zs*QF02_L5SDJe*)po($1MOy&iZ7?9l7(8-JV@3QF#Cz}a77i~~G3}H|GrS|@! z`Ps$3(ru?E<2y*K;8 z(Y$p_@tyEnv~0)CTn~|-tAU&B_@xp+q@#v=1-$lDW}#W_VpH)Dt;s?~?z9i=1@QNB z=@cha*vB2LfZgF-P25^{6^dEL=~DedJ5O12rixNXu?cAus|Ge&$^0oHrq>w^-v7yj zaW)^9@}P?@^@Km07C`n$XnRp0FJz z&6tgBJfUo`-JU4DK0+uxoKKKNkXzWoTm z9NyHd33X&b()?HZV4BvP#Nqp9vYmw(3(JuUzL^(j+^BW!6+sgLu3><)rLtH8j@7$A!sLSZ07+l^QUed7rKcpyGgvjm?_~ zzNF>5SGXGzq?^+-b-(XAzZe?5wlK7;dDmq=h23yY zR09$1hl5&7$m867Qs`%jH-hJG*;;}Ju|4GGDT(o%*tVrqV0&m$&R zTlEwDxd(6`R8||tm3BJovi^u*w80=UD1S>JCe`|84c1s z1S8l3R)NxLb62y~`C2D1A9fwScb(t#5CkhovyD|G{K93U0T^>CPBxNM(K*c|oBeN{ z8-B&(rgBQ0h?bvQ&PJr~29TjTJ2iM^cfyk+o)=;7geZ+zhwaa9`wsV>RJ(2!(vEOl zN*Y4tQ1M5?#LXSRU?yT@MWzX4?j@Ul8e|No+iDvs8Zcy{@EoH#ihlbHo;+1yO7^yC zK~;b%)lr0YHkahEb$AjgzOPZK?n+s=&%Cpm3?hWsj;4K337iBe)inr)6%)>!1DdtB zp&@r$e1ok9=%iZN5D^Vp&!RdT5Dm9ANGrAq&z|=)@b=~HeDJ{s^X+ec`>O`PufwlD z{nJ04?|kPw^YZdCx+Zhfod?h*KM$GfK%zP|(JWbcobw%v;*cC%2K7t{Z~}}dj~v50 zGvPZA5;Iz1TPov~J1Wv`4~UqZ2FvVOu=Bd=`gM>u5Zw))}c5u zP2>7v(R129w*OCcUN1|7RO9~%^+6;dG_@VEFRIYTCH+DN-m1x!vKzmkX{$TwT-gQB z83eZrOthqf!p59|>id53-mv)<5*TI0-y!RvXdxAVAF=i~~%H zDI=wqn&k080aQg*_*|)_)P!=#F#MC6OqiaOpc;1HJsG398|$WWu;lGLsMqAc36_hN zmQFC0RTh?*+;=ojPmkzxR6@QwYdWNQE+GN{Nlu$mpvjJ|eUgg>Fkbv!9^L^-s2AI;m1c{=`&I0LDfJ*0KlF0)by%atUVOodj z1$Og<+8{}fl)xepplt#nm&#f0Km`|otzc9bsXYbbT8xS$o8QeTRdaKO9(5nnT^7ii zOfMNIx*Wp-N6e3rY7p`ZuIEaQ{xIn#CdZv`kBBaB2Fn@*sQ3@8xtVkAZ9}vP5k*16 zk+QZ8Zbj{m=gjw}G~S& zVdh-l2n3hPrqsaeA$0}?|a{ypZ)A-^Y){Uc2}!BK{9UoIy!4@UR7M;=|0lI%Oe?+U%-|+ z#w9vs1wq)@^Df=gtT=o1b*=)@7cFycr z^WL~UPH~cy3@3@tb4|FXi{vZ zYnnpaM{Sn340MCl64kjSy1Sz+pZ-dP+N=^IVmBmlTFctAA~Fdkq@5x_qNVP40e(W6 zqw;uW8bCuEcV05P<=RtBsDDnp&yFebaR6q(DU?qpJjq*TTnF};HVzmWvn^Acm~)Dz zu)=H!?E<#(GYAu8HYM)+f+HKqaB~oVwZ?nuv-O6EF;&vw3F(X4HqyhXAV8u6E2u`*VK``gA@@#Y4FU}pnetNhYkLdf*G~s@wO0kvE+KZLs zFq!TG8_}Cwn+=A8pvoWzLa>TC^++4S=T!eB7iu}Nll?|tukUo`-}%)fs2v!Bhkzy0lb zd3l+yfAB#Nk=K-ur00^s-?AvTG@kVJxSJq%t0=Etu-RRVhgaNqC#9L?KX4J#4akLh zMsJ18_g>I%>6!UZv#^CV(ziDiooQFT^8y{wvv%edMzbNA3yPoBB;PrpB1!Sx`SqLT zs_>e5A7lYl^62P{*7+hmYm@$S+5wioKkgmJbVCs}lhZ&_%J&3Am>lu%D{0C+=40X{ zC;W)O0)?jq5su7^rZf{Db|q5?jUODAnFf*cC!a9Bf=(Vf_IM;nj!$y^+LoPkVq-cl zG+%LLg5_HG1x9NMY>jt z^%(h92PfshZwN*!dQyNSc@ZJm?=@F|KpttRw-k}2W*qLUg4C@wDWlIK(4r6ev>Xx2 z3drkHLdi&9*=uq}!-C3wANK9CvUu651SzN(qiSW8C+C;W=5aJpdqPT?E!2>!;Rvaz zqiJL8d)W#SV`Xz8OxdT5W_vbMO_-OoO>3|(lI?av{qtr4vOi5G_GOD3!3fsUsOZcJStH?j@5GZb z?u{0IKjxk@7L`|4DWF(w2mt=3n{QtGkddS@R;G}*f^jxwJtq+A(XRr@n?&zWbUp+zJ`9^ZS$L8AvSs$LDMHRZG4x4wX2M#1G6q)@S(wsi0*6wV zgd>a*xm{{U7Tc}Ri8b0eEid5-XD$oG=^aO^u<>dN;So{O(R{`^i;;{fwL;)Fsf{`y|)#6{=O`ZHgYJeu(Ltz?06QP+{$nWyD4J5uLfwcxy zatA2xJvOXURDU=%tw&N+H1wgWyU#y_e!3aJHH@u9k=>}@fAF=heSO}(yv(=1{q6bL z&wln*1K`X0>pS21&iwetKc1JDmymBMq=#9gnNzC)Y^6GRyTezRxyO{oMJnF_pDY9? zL184!Iz5a{rr|=$$?`l&`EcM}TP+Xvgl^E6UY>xA>&h%!9_sBu&UhZ)#*J)p97u#i zBf)j|q}VMRQ~D``BuwgT3H%f}_FHBr(nUpU$AqU=I_(fDu}Eh3X4g}C+Rf7c&0T_1 zk<2%p&?K7%Cd#B%VdM?ilEb^H!+f8z-MXdFEq8jc;OLJ@6fG>UKO0aN9DJg$nIP zrqoC3+>AL-P#yb+$-F5wrq)TAmTNt$&%cyWVIu6UqzHBJ9Tuwslr+y*``}TJfNSdhmY7s;>_tN1BUGktL=5XWsaW^MEhjE=pd$}E!BfmXCiPgNT4Z8U z6L||kbrmA_CPbAUNN7bLd`EIY;;bav_}Gy&?bW9pBWx?mqWt~@2h1_7c9fVZ6EbRF z8>qfaWzADvYc{L0`BmfkbI%@F9Xz1j6K8mHgtRR(jFZE@62k*+&$>7P1E=H&i|_aZ zaShoG`H))Y0u`2s#e7)F5?*_j!?rL;Afm$OWNx&QW@cMeRwQswKPF+m`7OAU{uQpH2KsRGcW2xd8nHQ=~!E`JeDKnlkYs;j?MOCafN88P%L| zHD)LeO$oP->$MXeHW)CygNk5q2Umc?;vMC*_!?B0cxuhhX;IjIoqI^#u_#cS^6%q* zbL50?GI+}Q1?9p{2H1pZ%1LgCDI07{xX;vro5?BcFXLrhnYu~t~+9k?CB1xk*!c1OSI-Wo5JCdtaxF@XR2+9ea<{<*|0SU1Cw<>shXVNpUft# z+fP%`Ru6zLRq`)Y(Piv;G0kR7^%SGP=h_`Ns#LlWuy)w+_lfCD?>fC-Dtia^T&~Bn zVZLF;(T0F?4{@X=6`T$uip^DdP>s^sIpCiRVpOBynV@RxY&>hI{K_Voj)Whj6PgVj zWqTC|9h_6Cz}d+^Dli|P!3Z*fMbJEdAUf6u^|9Ak$J%8sjAFR@9^x*gtu-Hh_~E>~ zssO%f0DK95{on^bnD2e>d+*?XO@&t$3d4gWJYxIAo`(#pqByiY%(aEb;v&j&{WuSJ zeMq)1P&_RuCH~^1ic>Mb`aBCPcc~mcPV1*n(Q4J@JR=UFcQ;NZ*RAeXKQpe3;3W#;zuKcF*TtG5Ev9` z#b`ld++j{X=sH|6r(32(vg%MZ^{i2j#R)Js z9RQT%-G|<)3&%80b4u~%7+NW&zS($!oR`G&l9-z?O1}3cDL_+8@HT3uQvWcObsUtM zC14#!pWT3aumTyXk2MtzU?t?XRua;yU^C_L(_ZKNK4WO>$T-+d2;~G_V2-4pJ4wKC zKRXj72yI+2Mpv1Pi?7s(JlMf%axrs!QayAy9MT&cUdV}CP3Vc}D~4X~C_XkNVTqan za80{uZRe59D%Auel!xsmi+jg=!DL?r(6zImVYT5hzo5z_RXv)XSeJM6-8DUQHBXUP zP}4&$ZntMyi+tVDp+R_^h%KXxb?B{CfL{*cy6$Dnb#E(>zt ztq4+wl()?zYz5m7e(Yo9op4W)gCAmKk4FUH&`-bjyI=rlGB>?hKvVa$5eXai2J(K= z?PU6~1^8e!Kx?XSs7JD?d3gSkA#|&bmP!zjiU6dpWiRCET9yz`dE5_6k70Azi3EE; za;VkBuMkB+kul>>J2KX#N@Duq25+AM3d zGyW1RrF=UMi%*zG&0*MXYV7kIfwKY=OgV@R<#5GJ5_WzMc+tVS8@YLAEyS_7*9ei4 zr1!l0&$n-1=6m1!-u&PPKlrKv@MZh;-S2*PUS3}2?aSMet?BTaXk|Vpn5G_0Z0d|q z8Z1m@DJkpN(lTrpMH zMXDNZ3oA}PeJB#)p^aFCElH+N(g8;UxmmfuQ|4@_E9h%84!_&}jt*_xQs6NYes*t@`#S=p2)@!jOslvtOX9X5RqTdWQT!0o zct#JhS>ljeuZ9f$##FM*ZbH&NLbga{l-98p$__RYhWXoPcoILU5Z`nk%#3KW2iFP| z0$?J*r@c1sHRV#uoCihiiZ{|R6~x#k4%Ft0XA?Zd(2d{S0UyOsBEJI%ZEAVeYU_|vl~pqW))Z*gTvTC zo33Jq<8LWFiqvc1;?$%Q9*G7 z7zzmR_W9P{&GnoS$KDfY_kDl}Aj2xM4)TcXBv^9q7iiYPJwUIwTfx+}%Sl*V%k#bc zSbIp&Nk6KXw%F@Y+!%g%Hh@+lPNgD6Lx!mu6@drYw8R*-oE?euOKI8_rMu9QbCScx zlBy`5P5&1`%-Yd_GlcrV!idSdx#1o7$lVZL3?ex>Dr=%FoC{d2do^KKnv*nnqQXA1 zDEcVIDh+^&h*2tlgu&Es;6_G_x&h*&xy0+tb!H=FIG}UJK?B~(e({EyX3LGy!93%w zGovca$9~VwvWwt|w*)BMHRj^_uvBjDMh&ks43MEhNI^XcRgO=8 zPq2Mh>t#^eZmeyqC)D4bDUTVLXuBD~Sjd+*FZ1&9GT;5~cfV=?e3^dz}> zLgrJEUZJ!n49ArVJdnwdpo(tyAnqx>Rwx^!lz+l2x`83P*|2hHyXmS4_y#3b2BEqo zb-Ht-Lz0z*;%P9RnJ3TKDxGg?Nvj2OSY=%70f1IrJ~ z#Wbf`!^l2(=*(`b&^=Uo5!ZJ`DQk+SBL8`%LTFO9OmivVZ7cH3gv2>j8PvBPdgptSS-`R>>iF%2R27L5KQqN9rMqJ0lU; z%y`_C#|5cUu%oz1F^-E-oyT+3@D++T5oNG%ENe^WOlpwUMgr$Q~bhnpO zliW&r(PNaMtumN7m@IoK<-t5B|KfDN)LOgf9BvR9T?ydkJV3v=4%)6bt^K-I=OU}- z%uth{kXZ6oA!UM5efOSY*U&PXB0GD1Pf)k_6Op%E+arE1bhB88ReNnlt%_3XXpV3S z4C%kN0m0~WDJEr@x%s7iYChBnQSnC3; z9;3uSt`vept%Ua%TO9W)J#Zl!pN{W=XB@1V0n3GrEuP1YDqVm+s@?=};FK~(k$1TK z%T&~r;%UcALS5(N7OiujbNx?%8dZppZF0aM()IV0`(T~bL|4wi*gPrQ=x?7&0dYgs zwwffkFFxH&*<@y+xSyZ>Wn@$bkb;2{FOY`#bP6hCj zpZw&j2Edo)*NXmod7Fn#V}_2b&gm&9DdUH%7Y|w=5b0w@>>Z_kd-3S@S!lb zl(35ZIbxz7G;JN7Tphm^A@K0mGuEXh5{Oyppm$aF=zz=~(JkC;T(LS8T_{9AZ7;VL zLHU$f3X7v4-=$=8Pe^uQZOAhP5WUfJ}@Lz*iZ zt*s(}Kei-*p4J&;6MJXRch4mvL|RgrYlNf{pcd%}6HQ5y#qCVYi3mzlNwp_XThdO(!+mJIITP9us%=}bgMG6n z)tM9!nI%p}1MQ3nii0GZcBHT+X`O`v?84AWHgC99hUx=*8OH9dvL-aH29&!wwwMu_ zBWc?v|3B{?GnMTt1#=(ut_zKh)@ zinW%K@x_?Z-iM3-#B;S;AJ$RboR+V|6Q(_Rnm5GvCxU^|TwRG3Xws~^#_C|7J+NA; zL=2dyG*yG51yJd|{uiJTz;6VH1_y_GUrqzFxkWV+p^Z)WqRLBbxKKn)=}EVbsR)Hw^%e3KuUW8v&gJeRtrZ@sSCfy>nd$y!@iXJXk zo;(Y@b>DO@{Dcf}@aJYB?7ZKNA_{mIP_$G15RAe>)L2cd*WDHJ%9bGu(T6&svsiSV z6O4|6(vnkpr~ut@kqTlvCfwzvZ~DdnEEaKI_cd2)t9R;&lBy39Zx@WqORTj191)rV zCDt2`-U$`*5L9wDhSu)I!xXGx#RLy*P*R_@4S9Udm1L#&=;?ks4!%9EOX4 z!n(Js;X?4Kf=o!Na)TOP3-*pgQihNOFpzr)ssV*x8Mc?(d;egoh-)6FOYS2MDgTZ# z-H}upLS{3LFB>)Cx`Fo^huWidH!>D_G7a7c<8*m_?BWS2r~GK>8-!fLQV>riSq zy8q3gu*+5}8VCFSjy5JLW0&7vv9Ud*17T4Yg`8=Nhg_Yp;&n z?!y*S1z#4t+!wW>mVlcHYf2Wm4yAq$eY<7!kh3ni zCB4ye?M8uK+Xa!k%jUseAXRZ4=iyI9jdjIQOf(60+(;&M8x-9Qx~joaG&kmf3!~lT z>XKYMthwUdPC_*yOcNAxm(3uwG)4IK(V&RVx_D69@TWA^?Z0D0lZ7`=-Ra*416N`K zbCFG`V2*(&Q9U+>EpPY?YFSlQ5U+!4E&%dqUyh6S!gr=SYcKR*?f% zgjgohzw6N*FfUePuBZHHh*1PqP@TsJI9IZ?BBa>Yi5TU6IA1Rtb3!K~? zsZf93yM&L%4%hZZP)Gbrt*MMd-qYBW#|v`qyQ#I;W=GRtt=pks!kKOGETEv5 zn(&JImN46j^9!rMt#VM>F&Egf(?7Ha0jrV1FJFvZOoBaOv20)qEU$pG4hIoze4h%6 zeTKunpge2ph)bP1?{3zG$`+Jyndrb%^Zk^u~mb|Zqx*@AMVXtWVsrgIe zgstN&?LN2K$3iMJ_Bt{&IBBc7l+79FtuwmNX(f_0FE4NBPyXajexp?YzcvkkPd@o% zUf#Z)mp5-_u6JMQwWeeh(2jzIp8NgZ-c!KUFt~P+vtDaA5cU*SvAGcz!@=NMTv0GP z7NKkx8(_Dfw70^*IZIsLQ*ED{DQ#BA-f;tD&sWQm5aMB_1h>vKi525|%ff(O*V!8o zH`?8W^l=bxnfZ=tLWi3JJTwo~{sPynnO^-s7S3Y-omlqiq9>b6wa)Lg) zi%-CvTiRZIKgM*)bzc+}U3{i?ER`M_V{D^0Xmg)??ymg?aVfrwwjE)T#%Xu`{4K9f z#>#5^@wv5AabkwcrJsKRGqDzty|5-MJslO`elbVh{0|l_Yj#vX&$D#&zK&{5x+4;D z;=u0!scs7qI3Ai{L~y-t26b3?;<+lH3S!}cnm?q9w?wqx<8FQpKw;@j0eeF}ZjUID zoSeMZ_x~JC<@^Ni2L8eMmFpxpqKALOqc|! zV*4f=LryH5Bib#M3JTj6?q<>EfbsVIT)~!MRpT}WDqA7BCy!4}Z-XRn(7yqNt2wqN z(|}Cqp0i0AQ%N~^7p&v=#CX8rIhC766FFq!cBoOPWLy@E+j^pkxX><+%EZ0@GY&FRC5Sdr!Wso@oteIc>pZYAYz1;AC6P$E1*_PhpL5kc)pR}mC2>#Rjvl?sGvFnOX0vX!>9t%k2s=Ws+}T}(~Z z-MsdA-n>Qve)7pDzp)Jf+4h(HP5#jz{n7m1@BQ9<+>>w7g^Jv%Y zf(WBYlKGkvmqxuu1TY5pE)wfu!Z3si@3T;-)`(FlX0?+l6k9#^x)B^3et*m zhKBc;P~6tK){(jE8B%Q2?(+~VWkCvu$|pc?lR;#8-co#hb+^}b+Rf_q%xFu~_xa`N zRFF-e718Fj1SmJIwddy}H@IF~Kj$lbm#K7fQ zBVV)Crf~x3vuDR3Kb@UBwP~0OpUOjnZE>Di_xom(VLE=16L@v(YTkSA{c}0?iEWwn zoNf>Rw|n?8m8%qwQa(qih{Y-hh_D~*3vt$YPgFYhQoEi&W!xbjz_3D7HOvPwlpgzD zazHv=7Q}-0a)Q%mdd>XRU;fqn-QWG)eE<93pMU@F|NU1Afd3P}zW@F2&)@vb-^@pE z-y+jeWPr@2S02ECbbhf5c3S`-Po=ybwgN?0@LFPk<*S}z4Im?Ub>YiuFy+G(Cxq98 z2ZdaNkO9#`ptBQ8oU1^HQJXcZ=vH}&wolrCOzp$=l3khdS}$l%%KfY1tdi|h&Ij3} z2urILkC}HoPvDOLXGicz^78}=a8j#XzF^86Y)ISDl*qa7Ddl7|lAz33@IyHc$syIp zw0|{PSg=w0OOk8(*;g^O`Rtm40%DvE!rfXXfP zMR^;{!qY|dC#hT%il%wS?u{|;3$u7)gL*~Y<3JG7X8yglIVe;Ji+10N4er9XY9-he z1Un%L$$lu_ItfDCDuL`@KT!KC0W1y#M*eaRC0y}%ifID9-zzpM(gOze3q1LFMtF%D zOQvCRgD{Om7I4`+X2@L_$Yc4w!P}_3>kWO4E4?Ox&DRp-_6&^>x-^kO!Pq7#8e?3T zHc--41Wg>)Bpjr*L9LP59J%wAsZ2|mrxJP$@iZdGg38V5IA6{gkycHs^!h7Stw&{7 zG`?MF?GO3pnmmY4TIw>+J_~iif@AVGOmTtwNgJZ4pcCqNh8UU27Di>rl!P|zDgoP@ zw4e2qP|fmJW_?q|waDCJEOUjvhLvJZk3DC^pa9!7rt~gbWwGi)CT)z1H+N|u({QM6 zsE&9_yy-S&*hLNyX+?0}khYbCvDE>N_*iD4qv^nS$S9ZX z*;?t?xR9qtN+vewXnf1GnIe^Hj0Q9&{7JOj_n@g5a&UyQ>0Q8vDE{+%Gpq;e*;)*( zRH?Cv7pjD|vf4rRU2BW0xL43|(ZIj&_bg%+9H~^UNE{;8cNEcwgYzo55>$*C770_a zaH~@sHUZa=FYnfl5=l0djtOdVGVXnEi$&0s(1xilzLOH0JFwAh7S_8zd-L*U{`#-~ zdcObt?|)?h_&@RMr$7Da{NM*an2$dCXg>Jb*XFgZhurcCi9dan>(6KBm#^H?RrK#7 zd>7@{TD;#i7Ove~P^JY45}VBwxFEf`R)b=$>z!{wU=duZf18bl9T#AXmd?eF({$g5FE zIhi0TDQ6H`du?(3K6Ad;#MVbaOqw&<2@ZZi`grY$D9-hqu4f&G88mGsn&AZEDlK0n zSKnz4XqNc-Sx;4L9-KA2hjvlR_*``iO33Q9^SB@XoKbtphR7-Fym$RHrl@?BZ!h(h zn76V3p9zJ5QIPqTsIQ{Yb3k~aAyH7sm{_5)vuNKNibYa)%8eX*&R$Cklx$9~2j>A* z1CH-gC@yyc`}T~hQ!;|(!0T6m=4}2X*K`ejcJWC522vxSzzHj#z%EhZ9|F`HTevq! znygB^POv`+HsnC%0VciEag;vmQk^D;VZuMZA4mA$7r{L(lq+hMO%WEEki{=3A&-0J z@)Y~eh{!G4qG17PtlN@iDoJp0m>BR+!w+Fu4)!@58W`*0mns}WAE9L|BPm4 z`o$>u3kti8mIZC*RK6%;s0Cr4ABJ~3V*0R}43otei|5$dgYOWwH{~*~w81crw{4!O zB1}$#)X*_Bn{B|icYLO1z&Xkh)ZU|xh^zSWyrPN$xc25mnfFmdk>VQJ^TGAOyu5uo zKls59=BGdX=~oSa|J}bn{q)oMvp@T@`RMIOF@0y@-vGdb`@Q?~HDteV$6kXX^m?`Y zgXArd2DTv>YG~S(H~y>I;Ol}Q-MA3re-s(QLX^>l=u{Jv|G|j}=>H^EXYACpKr1#gSNx6ZG@d~@D2B0l zaBM5=Op8;2c*FJt4-W)9u*wGs`Hp=XNLW+OmdO}X2Q5QRwiPR6-)HwH6dl+|sgB@5 zn7Qc<&zhbP9ZG|Qi0zoJ%$eQAZ)Go$dQL#rLmb}Dc_-6@5q$WJn3ywn+RP1BD_c_W z!h63D*fR&aYAX?#wqYkxo|`Ov-cJ3UDc_{G(OeUJutyZ5Gr>#mC_uKAD<@KsOB^a9 zFJ(nY%9RQj7NdTexQq`msE)3g;;a-I)!K!HRglcPp{SPd8xfSkXK^0L*+qqtEdX3d zJJ|~W3;(U8VhRlHVk)kHBSN+${hB&->hR|)`Vl^pM%YY_;VR4Qz4`B0=K*pli8fXQScL^h++T-{fR%Gjn_Nr7D z$Ai?1MJ9#ZO27y>Hq;w;qcZ5_?N^=vYswBqgQ7XMW%^=ttSW0gobZVrJrj75G6kUY z_I_jLNcDHE_mo9PlrKHiQyc}cDa`>=sWO(YJw57c3X37lI&)Ep!05Dy{nbug3RjpS z<90XP-0u$G<>}es!Fi^CHwT2 z*PHwCofuH*TUoUto>Q&M%Z66OwZ;~2%41fuHTDsoF_VK71xosNys%Ocxvr~rQ)q&F z8~4B4YDPGJk8zYX7cqWZ4htsZS4_oT*?ee)p+))S&71kNKl`)!^wUqjY5@H2{`JWx zpUg)eeKa4w`EXCor)2t!rC>pvqx$v5U-|!0w21@s% z+r1hQC^{9Qoo!Q?d|0x;*O7cMO9`;!5jp+e>Hw+-^!Sq|FEa zN}#g0-1|Pr+^mRkN{mtIS-W^%1+VH5t&So^BgZp6f1;{{zS@jXH9ps-fYTVs37dl^ zPI+=gem+v?Yb}aHDbFV;Fr(-};mb%pOh`N_wRPEWnDRi<_nrD_Z9hi}yGtvDhD3RQ8K@-o-k(@W#5Rb`YOe52h=(ZF>#YdQ$FuC-cyb)SCcdyS` zc$n`gC+>^UASjy-KwAzLIAvaTGFRpS;AZTQ?4**+u;0T5t~*Hg$R|WOU8Vl=0-meNsrj9k35uvWe?%q2L zJJKOFtSG{>=-=WrMgXQ|XGfIk7?u#0OIx8#Nxs7RC=6|OvvIFm3iZNn^sh7H13q_R z05_?`)kN$l0m3{>2>>8dNk+?s1Gen4572%no zx^x0;VM!6V%MoS)rP3M*p?N`AuB7?!8{e2WFK>P$VSrz12;d+6(I3t4{_gM2#~*(@ z-~8q`r!7o|A1k9gKJOQDU6qs1@cs;^mhVFarT``-N`R7l@ry@sqLPGaUlbY&8yX2LC(@k!22PEc;KJMd>cT6<}KwAQkdh-xAx`K>E8@M%0 z1Bv>Bm;ZplxV-EM?8-G;K?^2as&rJ45+`tPKz-jXiOixFrEQ5NL=!-35@<~6+RHa3 z!Q*?1&!7Z=F*$%!K2ATvXW!tUILs!*(DRU_ajb0YC!N5{2@mr2VKOE#fl?C@SxKEJ zT%A(!ph=L`uz`R{fF8i43p7aD_8@wcX(0ssol5O<9cyB-3Pd;DNC}!kHt;(1I^(?< zYbwScv1#N`GTir~L>XRY)o&nPLH@?`z*Tx&EDtQ#0tBkStTl-};7X8T6P#GH<=wz* zz*CQH@?VNM)jWw9ts-X|L69Y9^2BADn7$L zeA-EDcf2=O{9{Jm8M0BTMab_sJ;i_oPu?@fguNL6(UjR10At?>Q0U~(J(6qIk7Tjd zT?M?r@>C;3)gx9E`2u#CZ*JIUk04e0jXWQnDF33 zu|s`H?sKLe77jwX=RHFs93;+b_Rx$Epl>w`xpfdmCn{H6&}4u^ z-$&1niu0h#7IgMFTbz);fOt04ZuU^nU|wyTj0@=90iys^XB8e63(x25u>~m&j)P#| zayB^%_&2Or#m9nq#={?|tB}{_?NpZ~o?Q=95o8 z`Hg}BeyJ4zpM3Jk{Qckm{e1M%+r!H`m{xCZ52fsg)YHUdTd&^!fB}xq?Aiw(J^#%t zzkf~WAsv$P{fW_p@p}2QW;D89C;6{`eqFQxT*ri8jEUjCRf|8n)B!Q{HYC8KriZv6%uv(gi^Jdo@L3_BA2fTSi4_1oNO)BZ zhe7eGEjK?sXM1{XpB=EJbMf|T(=M>Y#S2EXfl_N42Rn~aPBc3n&X}?_M9zDvL60o6 zr=8JIc6R#3*dHIlWPm6sCmcvl_V<4HKW8$r+$HN#f$pZiEM@eUZ(pKfqEGi6Y@Bpk{#iPXV6=15>omEza|f2kH{7m!an@9OTH@}9w!PwVVb|Cx(UAfd z93kSojN;#EdkdAE;WLI(K_M>L>oAKZml87UMap8Iip;eSG|aBp4?BK#b2HSjoB&9g z&r-{%$GLvY=1xR<*(CeJQD_OxLG5))RUGHg{`H;(?+9SQv`?ae4K7jg8YTlNupS)% zTvgLqYzD$-K&T;<9>Vjw|El6VcK>`kn>Q1RS1)KCZ3HWZHqLzBia*uB4Evfqu(CP% zR+U5AX*Xml2;*lmA@-4DH}jUPA8OKlu6EdDx)(02Jj)xeoHnlOK^1PPY=us9+4}+P zS1D19*lXB_3l7UhiA(onZ`dOh8sabqmVi8nLvdIZ9CxRGrF$3WR0B6QF-7|n2)xce%H4bpkA-V z_^50E`+fOyz@Od3{79ZJD8x9YVfE>?;<54ucq*1fsL{Bs1B`*#zt;XY; z9c@41DjKzA+gywZ2OC73S$iW@Y=(NI4|9^Vfq*{1g)6CJCgtUny0%^|rkChuuPH1x zRqtYkYt@APL{Zf3V(osmjbajwh4}30lW-mA?*f{6Ow3~ECho8(C}i#Y4E7vMkYn;u zqml&|ZJ#`)+-7l^tdl`xpF>V)wquefF>|PoIE@oWTS&La!dFNnU~YPe3{3S$Mnf)X zx*z71Yh7|S0S}}hDARyj+k{TS3ZafT+RBtYU6}*(NRPn{728?gQ>&sQ!6F+8O0Tb- z#tNsLb=|jyHDj6XyqmLfTa|Q1jKfzUp7#9+xkS$7N`9oKir^TekM6+iP*Er zq(Mk08;F_(M&|u~KjZhHf!=#pEa_Hu2(}KahrH&?@3Wtgm1HB$0jTHmJIQC6Cjmh4 z$+en4evo7_p@S9(7jSk=K9A5m+iKi7>_n3h%;dR7%uF`!seTREHP}k)I*YO0D7uTe zu<8*s@spCV@3X}fA`q64%KKUXlb~fqG=_7zX}e*vWE6?(%Dd10fiy2KFZ1cApUz+W z#b12Y0Qg`1>(fs^oge@B$Mf;WAEO(lEcmZ?#qLb`>Ms3HJ^l=mP(Gon#Nx0$5wGBL7n%Fo4D>S>n20N99Zzs2A5f6#3Ek7vd7P>flHU z&{>?vM7>!8v)@{(1*Wc@qM1YW!B%U;d^~6gy56YjAd`T47v9Uyl`twsq^*~}$>~UGP6#6DEJL%2YsH&Xl zpdW9=g(LQn(6*8ZGF1WqKw;6ZAs_Z? zmO9o0HZOMs7-C_i@DclNtO4HWhVHRJ;r5sBYcZpU<%^UXCHEtn9I0dwsH9><7gmm& zd%_}Cgj~VGVtV=6#PBH<9~3vibf6Vva&i_~926hj_nFgk9Zf?(H}A&IZqyj}tfEBzbzFkCe*^mn*VI%`6zY&!5oUMf?PlWC?ulu0 z+%vR*LXDGsITSi8MMMBkdOy=h95R)v6jMaauLm=P0_1zELiYJB)qO@>rKaVG>HFW! zdraxylgFVctD*MJ?ve@^j1konS)w5n@2fqs*FEe3L%5_kt#@!Xwi-#awWE)qlFCm) z=w>%AMD9p+h@x>2)>dcpA!0oN)MFF2Ewtu(;m5{vfT3ZHa2sL}Z5*H1`INh$nQXLa zxVC^bLHlkEc=p*x2RmfhRg9KBlA+d~!o5kA6yuCD_A$)ZDx;T|m-$cs=|BBO!2rLs z4S*m1@Q3r!M<30bmzP&CUKY+ts(%j^zY4i)T7r*@a4BSGhg5w|U|u|-x)M+rtE4gt z>?p7&|NrX^e{I%a#Qj}YHZz}!^PHSdfC(dJ5c2rQ5ASIPuEm8W%f;+s#4z3o22-%b zux709qK7>XldfW`I&Trz+4!S<0os8%hCIl>>Yi{_sN!m^5n=zO9FhT2P7y*~e8a5gte4 zb#(v7PzubJ_^D;{l&)@d5LA>mA0EKJ(+D4ib`d`VvI#&QL^Je z$>vE~^BcYJy5p=^%lAmM!LGn(o zM|d_uPK+s|n4WMaZiw0=12*fJ&M~iEIrv806=$nFbvJWFU_>Zv8hXOmyJC6>8HMF) zGD)zeeNF`sbKyDNwJL-{8Qn`6ddv7jZtbmpxovNrY(Y3#0H%k;Mss;zqtvh~REI2h3VzcN7H@plX*WKaknU1;yIr5cdy2TTsD|_ zr0UyyzY04C^U|So+vi;)qPC)qpExPBBXZrs9>?$D{@z>zG)1&a4np*x;uDJf6#WqR z%W*w)Xna;Q$pRVI0HCRY6O(YBSEiygeU2v%?uT^lBLR<9POTjUz4kr9=2$drBMP%zQJg_Ux4dKVkAQYYss<@jdb)37nNLY5X8BN@W=`i4dz zZPGiz?A<-`jSs&uFE20i!yo?eH>LsbrGxXuhT*g2qdrzPPD z8<;-bnE?L`8!X(M6Id6Sb%gje-(k)*K+KJPZAAjF4VW9K2{ub;|VVFT7>(E`q%vO(w9*j|(WiQ{nSA81i^u4^rkERr-tXti3W)1CfqT|z z$)Od&?}38`2x=n2(2PS3C>IZyiekFADn?K7d)$RYo+tWV2q>LXPAh(P0IK3%iR;EG zBi0N%)^ol-@40e2Vee^%$ILxqk;8g1qY9=QYy+ea}tktpy0oI@8z73DZ{l2s^OYXynBAjTSy6ZklE z6#$Z-sSnSb&dy2WYdYLyJES{ z0hyeF8_)5KP1t~jFyKizxB}$(Q1->+syY}l!nfb!yTA8Wzxb;e&HUjX{^9)FfBSF0 zQULs~lK=nW7r&T~KmK@0V~^?cYh2!f*{xCcb$~P)zW08a`0G?!ldum?%rS{u6KQM~ zAzQ!RO~^0hrQUL>b4q_k{NeYn2~NN}$$n`1x8zsn6o2MfDj$;E*ID;Fu;2CWzb;O{ zDuU6pWhD4;UU>_Y`(MRZ5S0f3O>9Wwt8V|k#uw%*7ZoAsl8UCFC$3d8HJqQxqT#k=@lek}pCRTE_aezpCo zdx4GUvY3Nu0gl+H6XcbCH1E5nimEdLC8o|CWFE}iJ>Y$xg|FAu$X}Ma%&oH?Qe$h< z8otYF^`)>UW5UE5Rn6qagv^{6pz$&!q$?za2YML=gkTHUfF=4OGkS9$=xHgaAEQ)y z*vh8GQYAo6?LE=9`cTSiTa)HUT=6N1l2Ca703ZNKL_t(vufzNX_hFXShip{=>j#CF zIV#0;pr0E~N~D|;FORE2xuUS-Z0DkwJOJ8~u^t^3lO-zH;`Mm1j!T)-m70ERcFUG~ zZv_U5vlaWqXHo%Sa?#3<;xj~b8=gr|IBipHR!OzdSsg6}$-`FruiNe!#W`3)?}7pj8uyd6+SGckYG|6#txzp|`10ZW{O3Rajj;iI=^6mP{N*p- z$^Sq8XukeiUtb>oSYYa8ogRG3vM0&&Q?&mBNxTc|>&ZXPtb2g#-oXVg6q)ae{wU%e z0DziKD^MQBdCYFozpiX*%-Q4!Sl^Ps7uyA_fRxwgVya>bkPSdfLN^0wsaPOG{`=8J z|IcpX-0%Lv_jAodS^>J^0swL5e%bnY_g-}+5jy~rPuKJs@FMmHyJk*!B7MwdpCI$# zx)G8WnjcsGylx836ReSTg6sZHu26dFdTne?HABLipU=cD*8m`!o$u|q$5hflRfL}M z@awEiZ|X6p3Zg%6P5{&+gzoT$Ljs9Hbxjrv^hYnHLWW9@s$%kx6`_OR8%m(Ni4s}! z!xLYnqmkslU(<-wyXoFRNN@w-QYmqJD9r=pomYOd0K^hwcg2OAX}3B8bmm#y1`?9O zsIl)aZP}}Q%Dva*Z;cZ)QKP3;AtaM5uI)^3NG~90+PF{bq#~1WMp^G&W#r)p+3gE3 zN15^lwj~!qYg%c@dp(mA>^ST&xkNby1*D7Ke;#ajAQcbdAanEJ?h@{VA00{ydN|{N zB_~))eM1pWx*G~=x;dJ;HzapuuP+$iAVzJXa9A{V)lm@n=$UYlP0RJOj(dW33O43X zHJ_ap!KGZ}dJuAJz!uF(F;YBOL@xh+LehADGGbPgh)09Z`>e7uw0DzdD+Hn3p~o9d zE?S@*MSNalDU*sj0U-qi&H+n(Tj)#coJiqc&967I$K|`*4=ElDN zT{=9TK0S^xT131MrK+$gtRozJob-@WVmODIi#g4+$>&l0o$@=%6(v_>*o5>wj1y6X z`oVru2O3lf%G`)k!JJf_nC|VvgMxk@xxlfUs8p9}$%yMZs^@*uPBhzh??+V~W51qL zBt$hz-76^}*OB9EQ6dVEU0YWQk*)aT%6o=V>3HU7A;@Q>^c;H%ab(t)Kv^piQd;WcPzq+u{#UqX%a=`_* z08|KJDN7s8vc}v8JLe%!ZQny|ovR7QtZPw1+piQbG>UW~l7+%0ieS21N-jKMMVr`{ zQ8W>n>wL+42WO`bpv|^Af~T+={daDw#=uxGI^zhJ%=(u893aOnsnBbZ!k&&_5!n{X2kA%_ z(6REW{(a?BKiV<0JA%?VQ7<@Q7z3mSb-;veB&odxJk-ohhP+-s|An6r_fn`C@Odwy z8Ly>OQP^AN5okD_dLix9j9U#tOT?u)GcEW16rKFil^bIjvp`a2G>fu*Pe6ARro@SC z?I7+`zH4NbdxL67{oiuSO>&mAyBsB_No^)jq(GJ>8*Lh+FyYk4oO8ZA&I!f_WjU0P%8bzC z1IY^D76;utYcfxswih|iwv?I6`3J_xePzU>S#&poteSpJ0UOF z@J6%fzK`M>41jGo_*%4OOhjje%F48yF(u_J{--3ZJo|HR57h^F0L~>c3hs#%r5UQ3 zR|8LuqG1)I74t~=tZ)My1hwMmg5Y#%99ui2Z+D*5}C7-J-uww&1z@?$b0CIy&DRV$B+7QuDy%`TSUnJPl z6G}1FQeebIhSuxoHByopzmF7z{n54K0XZl#)i^j`U`VmnWw!$2Ob2-L@-lDU{AR!a zzxHK%Ge7<5Pv^7GKAVp}{`g&?V~^$nrPPqq-|NN|I;HgLDOnZxzL%NC(%npNH-&6s($bR9c%t063GL-kfFzy;|p7 zdtMJP*QA`Aoql$W*+sj*r{!nV{9CvvZyr=?u3=~$q=N{=O)1Ow0xZ4GWiPl zNz;85nOA2AGd6i$Ybqy|{|Vn^rUFd(?e_iQnQO*#;d46QPxzym`MkeRURh(BdCiP{ z;k(IrFRAPRt_rX2p!=4%Zjaw}9lpoF^1i&5#hAg_&S~)0jOs1A}pDK{MFn6OE30X8Ix(S&Rrj2$& z@TAG@n!*^MekBDv3rt1Te?dc4@{ zI_Izvtp*wC%%MamwTiRa*=v)tXeZIzn4V&da{IhvkE2y3*N$~?Jt&_Y!DY}jcA=<< z;G3nKa9fx-m74}{o(J|6uJ83I0_ZTsjZ9b9GX#%!fOTh33`QMW6K~a%==un)o7`IsnBf^*>@#;?yl`)vN} zfBmoX@y8#>v|a^`8~FWVDt+Yy`+fkfieo!GzcR*7rpsMOyL{~jj6c9az!s*1Fx}K0q_uOn8ok|Gl4(13h4Cb*Ut&) zBvd5)B46M4<`SfD{YjaTEC?tgmSP3h=DHt;20x~fWq-HVQdFp>A@4r&m5mpw3<{*l zKReqh0^4EYxh9e@`4)^_dQ}?S-vi@2b)_QXgo8{&e~fAO9w-5Sxvk!;`q7)+pwX*DQFSnGc6f>$%sSXg~VG@VRlX0ax z=_8xA007Ei{ug~Z!3)e=mWTsz1_B|S_%cx zb7y%%-89Gkl8uneulME|ctgjw;zW@eAx3%K&r!opAN<=B1%YBRY7}UTE#Q3bLd+RS z{?Y~}ZaG0dk15-A6qH*M4qh3g#hh5j5T`gIR<;Z7YhzBy7wl|Ll=stX#H}jSM-C7C zY^H~x3OQmqF+efQAle*){ry9pO_?^YnQ~Ab6W$1*Wcci>(nbJH)-Y-!eiN^wVjV=f zKv@_~^^}5#;#JD+=R5{Hb)DQ`PIbD&Kn;|zhkeT`_Vhs$WHnt19GA2UBtOuy&@s<7 zT%j`27!HKDeZb|ZgA3D%XP)8^T}`C$E>7gf_`TfV^&KRGLR(>F1-iwxU#k?S{Qu?UC9)YuXECOuxKKdjC`TVX<706Z>Opi;{egzPnW)S(tw z@l2YK{jS4d$?>foyt!&8uj#dzTwtaYIEx*ZY|+J*bjF+QKU6BQoRVdEro*|SC&ref)Wiuodu8Nfu z5|Nf?BMj^Tzf`a;U zQ2gSPwe89*dlitxolde5^^3Exro&lhk0O9);KQ6#xC4CjXmxuV&_rBmd|M~33 zyNz}8xi4lyq>8L609>{oPQTh~NA|RjeA_cA_dQqDd2l&$yCJjh1JQiJTXV_JCV+f% zz^&f<0cXpJGajaZSxR!lvZpU*O z-{ZkX)k72PsQ`8{H?S{HGH6d@L2gzJQ5)u*dkTA9`RJ7U_7qZ?v%d4b8Apb_(5G;q ztxnV{t8>fKYm<$)&RWOxm>JxW9Aei;hcsFZT68}CI3Ky6^(aW0C4LCCYFWvm!#daQ z>1ijRZAAcEmWjwUhZT($t9&*R*_davDVVH}q?d#(8x(l1C7A{hma<73nB(&+ftLiH zK_=gD=dgmQK%qm}TlrmGYi%4p6*qFBOarEPo=@-Q!NVy8(9c*O3yK)&9K1_uGc#d+ zEeD^Jh7$-}5M#>gm&`t5nSJ65jI&AsI5j-eKEN~c!vWX}p2h=|cY_%xB5?&sDQ(C0 zd4Iczwd$OvV|~h0oOcmvLH{|P+V)}y1qCsO%pblOof=nU;N@1 z^T7un%#VKbqxm=g=HL8UHUPdf41mu*`)q#x^PkVZ{@4F{cIaEusk_ioROEcLU;pfwt-!Ju$ZO^Pu$2>g}N|%xg$!k*pf=^B9dMfrh9dI znEJe}K%6oS-9Pf$9-a&9;0A8#n8x)MzNw*!%E4ygbT(4jK1zPLX z9d$i?Pp*Pt{3@xx4?6n`zNTVKJnv-)+@r|78C)?PPW69gj28ngyww*LuH%5K!U>jt zuadLZes;-YU&p1NN}7I{fA1nK06+H+zN)jkr}ys9J&c&yg~E>I(gNFs-!dlJ5BHK4 zab@D-&aBr9O}&8Oihzo|r)M(vc$J^m-q6>rcEL+`$^#8~G9`FAP6p@L=N)3VE+kWLTTf( zVUX&Pi3T1U9SU`Zj{>uOQGnG(COd{2Db>Oo=2^iR^@%2NHdvL-K-W?1h-P&3hG-8G z8k!R+2eWeF2L+pG-LUh_=!YU+*w1E9ZrNzm!GoAcJ7Lnu`6N!+8H89oN8f2MaGZFC z71?>Yin&IcRQ2%rbTr)uya*L1YpvN&y_$il!;VpfJ7!kAw>m3L0oOfd$*@HX&vMK= zp;gA&9B}QGoyd>_A(iFLHSxze1C0;rGdl51u$So27I|LYyqW*!&;NWr`|Pt{+Xldw z#scu8AN^>)`OR<6Z~fM9J=4)cl6<9}8J^*TI2#`Al*3cDb4!j@x$%^jU!?id=Rc>_ z_?=4no!5W)=dTI!e$wkpW}dF}^sQfaA%4N80BLi)FK2?nlx+Ue>DOLw_`WVlnGZVt z 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